میڈیاویکی:Gadget-decodesummary.js

یاد دہانی: محفوظ کرنے کے بعد ان تبدیلیوں کو دیکھنے کے لیے آپ کو اپنے براؤزر کا کیش (cache) صاف کرنا ہوگا۔

  • فائرفاکس/ سفاری: جب Reload پر کلک کریں تو Shift دباکر رکھیں، یا Ctrl-F5 یا Ctrl-R دبائیں (Mac پر R-⌘)
  • گوگل کروم: Ctrl-Shift-R دبائیں (Mac پر Shift-R-⌘)
  • انٹرنیٹ ایکسپلورر: جب Refresh پر کلک کریں تو Ctrl یا Ctrl-F5 دبائیں
  • اوپیرا: Tools → Preferences میں جائیں اور کیش (cache) صاف کریں
//[[fa:mediawiki:Gadget-decodesummary.js]]
/*jslint browser: true*/
/*global $, jQuery, mw*/
(function () {
    'use strict';
    function deChar(ss) {
        try {
            ss = decodeURIComponent(ss.replace(/\.([0-9A-F][0-9A-F])/g, '%$1'));
        } catch (ignore) {}
        return ss;
    }
    function decodeAnchor(link) { //simplify internal link: replace %20 and _ then decode anchor
        link = link.replace(/(_|%20)/g, ' ').replace(/^\ +|\ +$/g, '');
        var parts = link.split('#'),
            anchor,
            hidIdx = -1,
            hidden = [];
        if (parts.length !== 2) {
            return link; //no anchor
        }
        anchor = parts[1];

        //decode 4, 3 and 2-byte: http://en.wikipedia.org/wiki/UTF-8
        anchor = anchor.replace(/\.F[0-4]\.[89AB][\dA-F]\.[89AB][\dA-F]\.[89AB][\dA-F]/g, deChar);
        anchor = anchor.replace(/\.E[\dA-F]\.[89AB][\dA-F]\.[89AB][\dA-F]/g, deChar);
        anchor = anchor.replace(/\.[CD][\dA-F]\.[89AB][\dA-F]/g, deChar);
        anchor = anchor.replace( //hide IPs
            /(?:^|[^0-9A-F\.])(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/,
            function (s) {
                hidIdx += 1;
                hidden.push(s);
                return '\x01' + hidIdx + '\x02';
            }
        );
        //decode 1-byte chars: all symbols except  -.:_  and []{} prohibited in links
        anchor = anchor.replace(/\.[2-7][0-9A-F]/g, function (hhh) {
            var ch = deChar(hhh);
            if ('!"#$%&\'()*+,/;<=>?@\\^`~'.indexOf(ch) >= 0) {
                return ch;
            }
            return hhh;
        });
        //unhide IPs and return
        hidden.forEach(function (currentValue, index) {
            anchor = anchor.replace('\x01' + index + '\x02', currentValue);
        });
        if (anchor.indexOf("''") !== -1) {
            return link; //cannot have double '' in link
        }
        return parts[0] + '#' + anchor;
    }
    var fields = '#wpSummary, #wpReason, [name=wpReason], #mwProtect-reason, #mw-input-wpReason-other, #wpComment, .mw-ui-input.summary, #mw-input-reason > .oo-ui-inputWidget-input';
    $(fields).one('paste keyup change', function () {
        $(fields).byteLimit(Infinity);
    });
    $(fields).on('paste keyup change', function (e) {
        var target, val, bytes;
        target = $(e.currentTarget);
        val = target.val();
        // from https://stackoverflow.com/questions/2219526/
        bytes = encodeURI(val).split(/%(?:u[A-F0-9]{2})?[A-F0-9]{2}|./).length - 1;
        target.css('background-color', bytes > 255
            ? '#FFEBEB'
            : 'white');
        val = val.replace( // Put diff before oldid.
            /(oldid=(?:\d+|next|prev|cur)?)&(diff=(?:\d+|next|prev|cur)?)/gi,
            '$2&$1'
        ).replace( // Special:Diff
            /(?:(^|[\ \\\^`#<>\[\]\"\t\n{\|}])|https?:\/\/([a-z\-]+)\.(?:wikipedia|wikimedia)\.org\/[^\ \\\^`#<>\[\]\"\t\n{\|}]*)&?diff=(\d+|next|prev|cur)(?:&oldid=(\d+|next|prev|cur)?)?(#[^\ \\\^`#<>\[\]\"\t\n{\|}]*)?(?=$|[\ \\\^`#<>\[\]\"\t\n{\|}])/gi,
            '$1[[$2:Special:Diff/$4/$3$5]]'
        ).replace( // Special:Permalink
            /(?:(^|[\ \\\^`#<>\[\]\"\t\n{\|}])|https?:\/\/([a-z\-]+)\.(?:wikipedia|wikimedia)\.org\/[^\ \\\^`#<>\[\]\"\t\n{\|}]*)&?oldid=(\d+|next|prev|cur)(#[^\ \\\^`#<>\[\]\"\t\n{\|}]*)?(?=$|[\ \\\^`#<>\[\]\"\t\n{\|}])/gi,
            '$1[[$2:Special:Permalink/$3$4]]'
        ).replace( // [[Special:Diff/12345678/prev]] is equal to [[Special:Diff/12345678]]
            /\[\[([a-z\-]+:)Special:Diff\/(\d+|next|prev|cur)\/prev\]\]/gi,
            '[[$1Special:Diff/$2]]'
        ).replace( // no oldid
            'Special:Diff//',
            'Special:Diff/'
        ).replace(
            '[[ur:',
            '[['
        ).replace(
            '[[:',
            '[['
        );
        try {
            val = decodeURI(val.replace(/%20/g, '\u200D\u200D\u200D')).replace(/\u200D\u200D\u200D/g, '%20'); // three ZWJs
            val = val.replace(/\[\[.*?\]\]/g, decodeAnchor);
        } catch (ignore) {}
        if (val !== target.val()) {
            target.val(val);
        }
    });
}());