مدیاویکی:Gadget-scoringRevisions.js

از ویکی تراث

نکته: پس از انتشار ممکن است برای دیدن تغییرات نیاز باشد که حافظهٔ نهانی مرورگر خود را پاک کنید.

  • فایرفاکس / سافاری: کلید Shift را نگه دارید و روی دکمهٔ Reload کلیک کنید، یا کلید‌های Ctrl-F5 یا Ctrl-R را با هم فشار دهید (در رایانه‌های اپل مکینتاش کلید‌های ⌘-R)
  • گوگل کروم: کلیدهای Ctrl+Shift+R را با هم فشار دهید (در رایانه‌های اپل مکینتاش کلید‌های ⌘-Shift-R)
  • اینترنت اکسپلورر/ Edge: کلید Ctrl را نگه‌دارید و روی دکمهٔ Refresh کلیک کنید، یا کلید‌های Ctrl-F5 را با هم فشار دهید
  • اپرا: Ctrl-F5 را بفشارید.
$(mw.util.addPortletLink('p-tb', '#', '⇦ارزشیابی نسخه', 't-scoring', 'فعال‌سازی ابزار ارزشیابی. نسخه، با کلیک بر روی این دکمه ابزار برای این صفحه فعال می‌شود.')).css('font-weight', 'bold').click(function (e) {
    mw.loader.using(['mediawiki.api','jquery.ui','mediawiki.diff.styles']).then(function(){
        mw.loader.load('/w/index.php?title=MediaWiki:Gadget-scoringRevisions.css&action=raw&ctype=text/css', 'text/css');
        if ($('.qRcDiff').length>0){
            return;
        }
        mw.notify('ابزار ارزشیابی نسخه فعال شد. الان می‌توانید بر روی نسخه‌ها کلیک کنید!', { autoHide: false });
        if(/[&?]diff\=/.test(window.location.href)){
            var diffpages=true  
        }else{
            var diffpages=false
        }
        if ($.inArray(mw.config.get('wgCanonicalSpecialPageName'), ['Watchlist', 'Recentchanges', 'Contributions']) != -1|| mw.config.get('wgAction')=="history"||diffpages)(function() {
            var lastRequset, $diffDialog, $diffDialog2, $diffContent, $diffContent1, diffId, diffId2,beforeBtn,nextBtn,theScore;
            var diffTitle, username, mylist, mytarget, lastRevert, lastComment, lastRevertedUser;
            var QuickRCDiff = {};
            var scriptpathbefore = mw.config.get('wgServer') + mw.config.get('wgScript') + "?title=";
            var scriptpathafter = "&action=raw&ctype=text/javascript&happy=yes";
            var newwidth = '90%'
            var newheight = '650'
            var textBox = document.createElement("INPUT");
            var labelBox = document.createElement("label");
            labelText=' لطفاً به این ویرایش به صورت کاملاً ایزوله و فارغ از دسترسی‌های کاربر، آی‌پی، سابقه مشارکت‌ها، سایر ویرایش‌های تاریخچهٔ صفحه، نگاه کنید. آی‌پی، کاربر گشت‌زن یا دیوانسالار و... بودن ویرایشگر، شما را گمراه نکند.'
            labelBox.setAttribute("value",labelText );
            labelBox.innerText = labelText;
            textBox.setAttribute("type", "text");
            textBox.setAttribute("class", "textbox");
            // At diff pages
            function addScore( rev_num,rev_score) {
                if (!rev_score){
                    alert('لطفا یک دلیل برای واگردانی یا عدم واگردانی مشخص کنید')
                    return;
                }
                var userWarningsummary = 'افزودن ارزشیابی برای نسخهٔ [[Special:Diff/'+rev_num+']]'
                api = new mw.Api();
                api.get( {
                    action : 'query',
                    titles : 'ویکی‌پدیا:واحد ضد خرابکاری/ربات/ارزشیابی',
                    prop   : 'revisions',
                    rvprop : 'content'
                } ).done( function( data ) {
                    pages = data.query.pages;
                    page_id = Object.keys(pages)[0];
                    theScore='{{تفاوت نسخه|'+rev_num+'}}|'+rev_score
                    wikitext=pages[page_id].revisions[0]["*"]+'\n# '+theScore+'|tager:کاربر:'+mw.config.get( 'wgUserName' )

                    wikitext=wikitext.replace('|-','|')

                    api.post( {
                        action  : 'edit',
                        title   :'ویکی‌پدیا:واحد ضد خرابکاری/ربات/ارزشیابی',
                        summary : userWarningsummary,
                        text    : wikitext,
                        token   : mw.user.tokens.get('csrfToken')
                    } ).done ( function( data ) {
                        mw.log( "Saved successfully" );
                        //location.reload();
                        mw.notify(theScore, { autoHide: false });
                    } ).fail( function( code, result ) {
                        if ( code === "http" ) {
                            mw.log( "HTTP error: " + result.textStatus );
                        } else if ( code === "ok-but-empty" ) {
                            mw.log( "Got an empty response from the server" );
                        } else {
                            mw.log( "API error: " + code );
                        } 
                    } );
                } );
            }

            function qRcDiffHandler(content) {
                document.addEventListener('keyup', keyPress, false);
                mw.loader.load(['jquery.spinner', 'mediawiki.diff.styles']);
                $("ul#pagehistory li:not(.active)").not('qRcDiff').addClass('qRcDiff')// for history
                $('.mw-line-even,.mw-line-odd', content).not('qRcDiff').addClass('qRcDiff') // for RC
                if (diffpages){
                    clicked_item(window.location.href, 'diff')
                }
                $('.qRcDiff', content).click(function(e) {
                    mylist = $('.qRcDiff')
                    var second = 0;
                    if ($diffDialog) {
                        $diffDialog.dialog('close');
                    }
                    clicked_item(e, second)
                });

                function scorll(a) {
                    window.scrollTo(0, $(window).scrollTop() + 40 * a);
                }

                function otherCase(casenum,goDown) {
                    if (!goDown){
                        if (casenum >= 0) {
                                nextBtn.prop("disabled", false).prop('title', '(کلید ↓) مورد پایین');
                                scorll(-1)
                                clicked_item(mylist[casenum - 1], 2)

                            } else {
                                beforeBtn.prop("disabled", true).prop('title', '');
                        }
                    }else{
                        if (casenum <= mylist.length) {
                            beforeBtn.prop("disabled", false).prop('title', 'مورد بالا (کلید ↑)');
                            scorll(1)
                            clicked_item(mylist[casenum + 1], 2)
                        } else {
                            nextBtn.prop("disabled", true).prop('title', '');
                        }
                    }
                }

                function keyPress(e) {
                    if ($(".ui-dialog").is(":visible")) { // اگر پنجره باز بود عمل کند
                        //console.log(e.keyCode)
                        if (e.keyCode == 38||e.keyCode == 37) { //   ↑↑↑
                            var casenum = find_loc(mytarget)
                            $diffDialog.dialog('close')
                            otherCase(casenum,false)// مورد بالا
                        }
                        if (e.keyCode == 40||e.keyCode == 39) { //    ↓↓↓
                            var casenum = find_loc(mytarget)
                            $diffDialog.dialog('close')
                            otherCase(casenum,true)// مورد پایین
                        }
                   }
                }

                function find_loc(mycase) {
                    var i = 0;
                    for (i; i < mylist.length; i++) {
                        if (mycase == mylist[i]) {
                            return i
                        }
                    }
                }
                
                function clicked_item(e, second) {
                    if (!second) {
                        mytarget = e.target
                    } else {
                        mytarget = e
                    }
                    if (second!=='diff'){
                        if ($(mytarget).prop('outerHTML').slice(0,7)=="<a href"){
                            return;
                        }
                    }
                    //initalizations
                    if (!$diffContent) $diffContent = $('<div style="height: 100% ; overflow-y: auto">');
                    if (!$diffContent1) $diffContent1 = $('<div>')
                    //if ($diffDialog) {
                    var buttons = {
                        'واگردانی می‌کنم:': function() {
                                $(".textbox").val('');
                                $(".RBtn01").show().prop("disabled", false)
                                $(".RBtn02").show().prop("disabled", false)
                                $(".RBtn03").show().prop("disabled", false)
                                $(".RBtn04").show().prop("disabled", false)
                                $(".RBtn05").show().prop("disabled", false)
                                $(".RBtn06").show().prop("disabled", false)
                                $(".RBtn07").show().prop("disabled", false)
                                $(".RBtn08").show().prop("disabled", false)
                                $(".RBtn09").show().prop("disabled", false)
                                $(".RBtn10").show().prop("disabled", false)
                                $(".RBtn11").show().prop("disabled", false)
                                $(".RBtn12").show().prop("disabled", false)
                                $(".RBtn13").show().prop("disabled", false)
                                
                                $(".NBtn01").hide()
                                $(".NBtn02").hide()
                                $(".NBtn03").hide()
                                $(".NBtn04").hide()
                                $(".NBtn05").hide()
                                $(".NBtn06").hide()
                                $(".NBtn07").hide()
                                $(".NBtn08").hide()
                                $(".NBtn09").hide()
                                $(".NBtn10").hide()
                                $(".NBtn11").hide()
                                $(".NBtn12").hide()
                                $(".NBtn13").hide()
                        },
                        'افزودن متن نامناسب': function() {//RBtn01
                                $(".textbox").val($(".textbox").val() + '-Rمتن نامناسب');
                        },
                        'تبلیغ': function() {//RBtn02
                                $(".textbox").val($(".textbox").val() +'-Rتبلیغ')
                        },
                        'کپی‌کاری': function() {//RBtn03
                                $(".textbox").val($(".textbox").val() +'-Rکپی')
                        },
                        'عبارت نامفهوم': function() {//RBtn04
                                $(".textbox").val($(".textbox").val() +'-Rچرند')
                        },
                        'فحاشی، توهین': function() {//RBtn05
                                $(".textbox").val($(".textbox").val() +'-Rفحش')
                        },
                        'ایجاد مقاله واجد حذف': function() {//RBtn06
                                $(".textbox").val($(".textbox").val() +'-Rحذف')
                        },
                        'خراب‌کردن سینتکس ویکی': function() {//RBtn07
                                $(".textbox").val($(".textbox").val() +'-Rسینتکس')
                        },
                        'دستکاری اعداد و آمار، پیوند': function() {//RBtn08
                                $(".textbox").val($(".textbox").val() +'-Rآمار')
                        },
                        'خراب‌کردن گرامر یا املاء': function() {//RBtn09
                                $(".textbox").val($(".textbox").val() +'-Rگرامر')
                        },
                        'حذف نادرست مطلب': function() {//RBtn10
                                $(".textbox").val($(".textbox").val() +'-Rحذف نادرست')
                        },
                        'خرابکاری عمدی': function() {//RBtn11
                                $(".textbox").val($(".textbox").val() +'-Rخرابکار')
                        },
                        'کاربر تحریم': function() {//RBtn12
                                $(".textbox").val($(".textbox").val() +'-Rتحریم')
                        },
                        'سایر دلایل': function() {//RBtn13
                                $(".textbox").val($(".textbox").val() +'-Rسایر')
                        },
                        'ویرایش درست است:': function() {
                                $(".textbox").val('');
                                $(".RBtn01").hide()
                                $(".RBtn02").hide()
                                $(".RBtn03").hide()
                                $(".RBtn04").hide()
                                $(".RBtn05").hide()
                                $(".RBtn06").hide()
                                $(".RBtn07").hide()
                                $(".RBtn08").hide()
                                $(".RBtn09").hide()
                                $(".RBtn10").hide()
                                $(".RBtn11").hide()
                                $(".RBtn12").hide()
                                $(".RBtn13").hide()
                                
                                $(".NBtn01").show().prop("disabled", false)
                                $(".NBtn02").show().prop("disabled", false)
                                $(".NBtn03").show().prop("disabled", false)
                                $(".NBtn04").show().prop("disabled", false)
                                $(".NBtn05").show().prop("disabled", false)
                                $(".NBtn06").show().prop("disabled", false)
                                $(".NBtn07").show().prop("disabled", false)
                                $(".NBtn08").show().prop("disabled", false)
                                $(".NBtn09").show().prop("disabled", false)
                                $(".NBtn10").show().prop("disabled", false)
                                $(".NBtn11").show().prop("disabled", false)
                                $(".NBtn12").show().prop("disabled", false)
                                $(".NBtn13").show().prop("disabled", false)
                        },
                        'افزودن یا اصلاح متن درست': function() {//NBtn01
                                $(".textbox").val($(".textbox").val() +'-Nدرست')
                        },
                        'افزودن منبع، الگو، رده و..': function() {//NBtn02
                                $(".textbox").val($(".textbox").val() +'-Nمنبع')
                        },
                        'ایجاد مناسب': function() {//NBtn03
                                $(".textbox").val($(".textbox").val() +'-Nایجاد')
                        },
                        'رفع املاء': function() {//NBtn04
                                $(".textbox").val($(".textbox").val() +'-Nاملا')
                        },
                        'رفع گرامر': function() {//NBtn05
                                $(".textbox").val($(".textbox").val() +'-Nگرامر')
                        },
                        'اصلاح سینتکس ویکی': function() {//NBtn07
                                $(".textbox").val($(".textbox").val() +'-Nسینتکس')
                        },
                        'اصلاح یا افزودن سجاوندی': function() {//NBtn06
                                $(".textbox").val($(".textbox").val() +'-Nسجاوندی')
                        },
                        'ابزار خودکار': function() {//NBtn08
                                $(".textbox").val($(".textbox").val() +'-Nابزارها')
                        },
                        'حذف متن نادرست یا نامناسب': function() {//NBtn09
                                $(".textbox").val($(".textbox").val() +'-Nحذف نامناسب')
                        },
                        'واگردانی یا خنثی‌ درست': function() {//NBtn10
                                $(".textbox").val($(".textbox").val() +'-Nواگردانی')
                        },
                        'ویرایش موثر': function() {//NBtn11
                                $(".textbox").val($(".textbox").val() +'-Nموثر')
                        },
                        'پاسخ به بحث': function() {//NBtn12
                                $(".textbox").val($(".textbox").val() +'-Nپاسخ')
                        },
                        'ویرایش نامهم یا سایر موردها': function() {//NBtn13
                                $(".textbox").val($(".textbox").val() +'-Nسایر')
                        },
                        'ذخیره': function() {
                                addScore( diffId,$(".textbox").val())
                                //mw.notify('ذخیره شد');
                                $(".textbox").val('');
                                if (second!=='diff'){ 
                                    var casenum = find_loc(mytarget)
                                    $diffDialog.dialog('close')
                                    otherCase(casenum,true)// مورد پایین
                                }
                        },
                        '↑ مورد بالا': function() {
                            var casenum = find_loc(mytarget)
                            $diffDialog.dialog('close')
                            //clicked_item (mylist[casenum-1],2)
                            otherCase(casenum,false)// مورد بالا
                        },
                        'مورد پایین ↓': function() {
                            var casenum = find_loc(mytarget)
                            $diffDialog.dialog('close')
                            otherCase(casenum,true)// مورد پایین
                        }
                    };
                    if (second=='diff'){
                        newheight=150
                    }                        
                    $diffDialog = $('<div id="QPwindow2" style="text-align:right;">').append($diffContent1).append($diffContent).dialog({
                        width: newwidth,
                        height: newheight,
                        draggable: false,
                        resizable: true,
                        resizeStop: function(event, ui) {
                            newheight = $(this).outerHeight()
                        },
                        buttons: buttons
                    });
                    $diffDialog.dialog('widget').css({
                        position: 'fixed',
                        bottom: '0',
                        top: 'auto'
                    });
                    $(":button:contains('↑ مورد بالا')").before(textBox);
                    $(":button:contains('مورد پایین ↓')").after(labelBox);

                    $(":button:contains('ویرایش درست است')").before('<br>');
                    $(":button:contains('ذخیره')").before('<br>');
                    var revertBtn = $(":button:contains('واگردانی می‌کنم:')").prop('title', 'ویرایش مشکل دارد اگر من بودم آن را حذف یا واگردانی یا خنثی می‌کردم یا درخواست حذف می‌دادم').prop('class', 'revertBtn').css('color', 'red');

                    var RBtn01 = $(":button:contains('افزودن متن نامناسب')").prop('title', 'افزودن متنی که تقریباً گرامرش درست است ولی مفهومش مناسب نیست یا جانبدارانه است یا منبع ضعیف دارد یا مفهوم مقاله را با مشکل مواجه می‌کند').prop('class', 'RBtn01');
                    var RBtn02 = $(":button:contains('تبلیغ')").prop('title', 'تبلیغ، اسپمینگ پیوند اینترنتی، شماره تلفن شخصی و…').prop('class', 'RBtn02');
                    var RBtn03 = $(":button:contains('کپی‌کاری')").prop('title', 'کپی‌کاری با منبع یا بدون منبع (منبع معتبر یا نامعتبر)').prop('class', 'RBtn03');
                    var RBtn04 = $(":button:contains('عبارت نامفهوم')").prop('title', 'عبارت نامفهوم، چرندیات، ایموجی و…').prop('class', 'RBtn04');
                    var RBtn05 = $(":button:contains('فحاشی، توهین')").prop('title', 'فحاشی، توهین یا افشای اطلاعات شخصی').prop('class', 'RBtn05');
                    var RBtn06 = $(":button:contains('ایجاد مقاله واجد حذف')").prop('title', 'ایجاد مقاله نامناسب که درخواست حذف می‌دهم (حذف سریع یا زمان‌دار)').prop('class', 'RBtn06');
                    var RBtn07 = $(":button:contains('خراب‌کردن سینتکس ویکی')").prop('title', 'خراب کردن نحوهٔ نمایش مقاله از نظر سینتکس ویکی (خراب کردن سینتکس ویکی) یا خرابکاری در پیوند داخلی').prop('class', 'RBtn07');
                    var RBtn08 = $(":button:contains('دستکاری اعداد و آمار، پیوند')").prop('title', 'دستکاری آمار و اعداد یا پیوندهای داخلی به نحوی که جانبدارانه باشد یا نادرست باشد یا با منبع تطبیق نداشته باشد (خرابکاری باشد)').prop('class', 'RBtn08');
                    var RBtn09 = $(":button:contains('خراب‌کردن گرامر یا املاء')").prop('title', 'خراب کردن گرامر یا ساختار متن').prop('class', 'RBtn09');
                    var RBtn10 = $(":button:contains('حذف نادرست مطلب')").prop('title', 'حذف متن، تصویر، رده یا الگویی که درست است (ممکن است متن منبع داشته باشد یا منبع نداشته)').prop('class', 'RBtn10');
                    var RBtn11 = $(":button:contains('خرابکاری عمدی')").prop('title', 'خرابکاری عمدی صورت گرفته و کاربر حسن نیت ندارد و بهتر است با به وی هشدار داده شود یا بسته شود.').prop('class', 'RBtn11');
                    var RBtn12 = $(":button:contains('کاربر تحریم')").prop('title', 'کاربر تحریم یا بسته شده که باید واگردانی شود.').prop('class', 'RBtn12');
                    var RBtn13 = $(":button:contains('سایر دلایل')").prop('title', 'سایر موارد در بالا نیست.').prop('class', 'RBtn13');
                    
                    var normalBtn = $(":button:contains('ویرایش درست است:')").prop('title', 'ویرایش مشکلی ندارد و اگر من بودم آن را رها می‌کردم و واگردانی یا خنثی نمی‌کردم.').prop('class', 'normalBtn').css('color', 'green');

                    var NBtn01 = $(":button:contains('افزودن یا اصلاح متن درست')").prop('title', 'افزودن یا اصلاح متن درست و مناسب یا ترجمه (با منبع یا بدون منبع)').prop('class', 'NBtn01');
                    var NBtn02 = $(":button:contains('افزودن منبع، الگو، رده و..')").prop('title', 'افزودن یادکرد یا منبع، تصویر مناسب، الگو، رده یا جدول مناسب').prop('class', 'NBtn02');
                    var NBtn03 = $(":button:contains('ایجاد مناسب')").prop('title', 'ایجاد مقاله مناسب').prop('class', 'NBtn03');
                    var NBtn04 = $(":button:contains('رفع املاء')").prop('title', 'رفع غلط املایی (زمانی که کلمه در ویرایش قبل غلط املایی داشته)').prop('class', 'NBtn04');
                    var NBtn05 = $(":button:contains('رفع گرامر')").prop('title', 'رفع مشکل انشایی و گرامری').prop('class', 'NBtn05');
                    var NBtn06 = $(":button:contains('اصلاح یا افزودن سجاوندی')").prop('title', 'اصلاح یا افزودن سجاوندی یا فاصله یا نویسه‌های پنهان').prop('class', 'NBtn06');
                    var NBtn07 = $(":button:contains('اصلاح سینتکس ویکی')").prop('title', 'اصلاح سینتکس ویکی یا ویکی‌سازی یا اصلاح پیوند داخلی').prop('class', 'NBtn07');
                    var NBtn08 = $(":button:contains('ابزار خودکار')").prop('title', 'ابزارهای خودکار (مانند ربات، جاوااسکریپت مانند ابرابزار، وپ:وخ و…)').prop('class', 'NBtn08');
                    var NBtn09 = $(":button:contains('حذف متن نادرست یا نامناسب')").prop('title', 'حذف متن، تصویر یا الگو یا رده نادرست یا نامناسب').prop('class', 'NBtn09');
                    var NBtn10 = $(":button:contains('واگردانی یا خنثی‌ درست')").prop('title', 'واگردانی یا خنثی‌سازی درست بوده').prop('class', 'NBtn10');
                    var NBtn11 = $(":button:contains('ویرایش موثر')").prop('title', 'ویرایش به ارتقا مقاله بسیار کمک کرده و کاربر شایسته تقدیر یا نشان است. معمولا برای ویرایش‌های استاندارد یا ترجمه‌های خوب و منبع‌دار این برچسب را می‌زنیم.').prop('class', 'NBtn11');
                    var NBtn12 = $(":button:contains('پاسخ به بحث')").prop('title', 'پاسخ به بحث، که مشکل فحاشی و تمسخر و... نداشته باشد و برای آن پاسخ کاربر تذکر نگیرد یا بسته نشود! یا انصراف از بحث و حذف متن توسط خود کاربر').prop('class', 'NBtn12');
                    var NBtn13 = $(":button:contains('ویرایش نامهم یا سایر موردها')").prop('title', 'سایر مواردی که در بالا نیست یا ویرایش نامهم یعنی ویرایشی که بود و نبودش زیاد تفاوت مفهومی و ظاهری برای متن و ویکی‌پدیا ندارد و از کنارش می‌گذریم!').prop('class', 'NBtn13');

                    var SaveBtn10 = $(":button:contains('ذخیره')").prop('title', 'ذخیره موارد انتخاب شده').prop('class', 'SaveBtn10');
                    
                    nextBtn = $(":button:contains('مورد پایین ↓')").prop('title', '(کلید ↓) مورد پایین').prop('class', 'nextBtn');
                    beforeBtn = $(":button:contains('↑ مورد بالا')").prop('title', 'مورد بالا (کلید ↑)').prop('class', 'beforeBtn');
                    $(".RBtn01").hide()
                    $(".RBtn02").hide()
                    $(".RBtn03").hide()
                    $(".RBtn04").hide()
                    $(".RBtn05").hide()
                    $(".RBtn06").hide()
                    $(".RBtn07").hide()
                    $(".RBtn08").hide()
                    $(".RBtn09").hide()
                    $(".RBtn10").hide()
                    $(".RBtn11").hide()
                    $(".RBtn12").hide()
                    $(".RBtn13").hide()
                    
                    $(".NBtn01").hide()
                    $(".NBtn02").hide()
                    $(".NBtn03").hide()
                    $(".NBtn04").hide()
                    $(".NBtn05").hide()
                    $(".NBtn06").hide()
                    $(".NBtn07").hide()
                    $(".NBtn08").hide()
                    $(".NBtn09").hide()
                    $(".NBtn10").hide()
                    $(".NBtn11").hide()
                    $(".NBtn12").hide()
                    $(".NBtn13").hide()
                    if (second=='diff'){
                        diffId = mytarget.match(/[&?]diff=([^&]+)/);
                        if (diffId[1]!=='prev'){
                            diffId=mytarget.match(/[&?]diff=(\d+)/)[1]; 
                        }else{
                            diffId=mytarget.match(/[&?]oldid=(\d+)/)[1]
                        }
                        nextBtn.hide()
                        beforeBtn.hide()
                        $diffDialog.dialog('isOpen') || $diffDialog.dialog('open').dialog('widget').css({
                                'top': 'auto'
                            }).css('float', 'left');
                    }
                    var self = mytarget,
                        diffHref = $(mytarget).find('a[href*=oldid]')
                        .filter(function() {
                            return !$(mytarget)
                                .hasClass('WLM-icon'); // WLM collision fix
                        })
                        .prop('href'),
                        unpatrolled = $(mytarget).find('.unpatrolled').length;

                    diffTitle = $(mytarget).find('.mw-changeslist-title').text();
                     var historys=false
                    if (!diffHref){
                        var casenum = find_loc(mytarget)
                        $diffDialog.dialog('close')
                        otherCase(casenum,true)// مورد پایین
                        mw.notify('موردی را که انتخاب کردید تفاوت ویرایشی ندارد! مورد بعدی بررسی می‌شود.');
                    }
                    if (!diffTitle){
                        diffTitle=decodeURIComponent(diffHref.match(/title\=([^&\=]+)/g)[0].replace('title=', '') )
                        var historys=true
                    }
                    //alert(diffHref)
                    var param = {
                        action: 'query',
                        prop: 'revisions',
                        titles: diffTitle,
                        rvlimit: 50,
                        rvprop: 'user|comment'
                    };
                    var api = new mw.Api();
                    api.get(param).done(function(res1) {
                        if (res1 === null) {
                            $diffContent.html('در زمان دریافت اطلاعات خطایی رخ داد. دوباره تلاش کنید!');
                            return false;
                        }

                        if ($(mytarget).find('.mw-changeslist-line-inner').text().match(/   (.*?) بحث مشارکت‌ها /g)) {
                            username = $(mytarget).find('.mw-changeslist-line-inner').text().match(/   (.*?) بحث مشارکت‌ها /g)[0].replace('بحث', '').replace('مشارکت‌ها', '').trim();
                            username = username.replace('/\u200F/g', '').replace('\u200F', '')
                        }else{
                            if ($(mytarget).find('.mw-changeslist-line-inner').text().match(/   (.*?) بحث /g)) {// It is IP
                                username = $(mytarget).find('.mw-changeslist-line-inner').text().match(/   (.*?) بحث /g)[0].replace('بحث', '').trim();
                            }else{
                                username='' // It is in history
                            }
                        }
                        if (username.split('   ').length>1){
                                username=username.split('   ')[1]
                        }
                        if (username.split('  ').length>1){
                                username=username.split('  ')[1]
                        }
                        username=username.replace('بحث', '').replace('مشارکت‌ها', '').trim()
                        //alert (username)
                        
                        if (self == lastRequset) {
                            return;
                        }
                        $diffContent.html($.createSpinner());
                        var param = {
                            action: 'query',
                            prop: 'revisions',
                        };
                        var isWikidata = false;
                        //alert(diffHref)
                        if (diffHref) {
                            if (historys) {
                                //alert($(mytarget).prop('outerHTML'))
                                //diffId = diffHref.match(/[&?]diff=(\d+)&oldid=(\d+)/)[2];
                                //diffId=mytarget.match(/[&?]diff=((\d+))/)[1]; 
                                diffId=diffHref.match(/[&?]oldid=(\d+)/)[1]
                                diffId2 = diffId;
                            }else{
                                
                                //diffId = diffHref.match(/[&?]diff=(\d+)&oldid=(\d+)/)[1];
                                //diffId2 = diffHref.match(/[&?]diff=(\d+)&oldid=(\d+)/)[2];
                                diffId=diffHref.match(/[&?]diff=(\d+)/)[1]; 
                                diffId2=diffHref.match(/[&?]oldid=(\d+)/)[1]
                            }
                            isWikidata = diffHref.match(/www\.wikidata\.org/);
                            param.rvprop = 'timestamp|comment';
                            param.rvdiffto = 'prev';
                            param.revids = diffId;
                        } else {
                            diffId = 0;
                            param.rvprop = 'content|comment';
                            param.titles = diffTitle;
                        }
                        lastComment = res1.query.pages[Object.keys(res1.query.pages)[0]].revisions[0]["comment"];
                        if (lastComment === null) {
                            $diffContent.html('در زمان دریافت اطلاعات خطایی رخ داد. دوباره تلاش کنید!');
                            return false;
                        }
                        if (lastComment.match(/\[\[Special\:Contributions\/(.*?)\|/)) {
                            lastRevertedUser = lastComment.match(/\[\[Special\:Contributions\/(.*?)\|/)[1]
                        } else {
                            lastRevertedUser = ''
                            lastComment = ''
                        }
                        if (lastComment.match(/(واگردان|بازگردان|برگردان|خنثی)/g) && lastRevertedUser === username) {
                            lastRevert = true
                        } else {
                            lastRevert = false
                        }

                        var api = isWikidata ? new mw.ForeignApi('https://www.wikidata.org/w/api.php') : new mw.Api();

                        api.get(param).done(function(res) {
                            var backColor = ''
                            var s1 = true
                            
                            $(self).addClass('changeslist-entry-active');
                            if (lastRequset) {
                                $(lastRequset).addClass('changeslist-entry-visited');
                                $(lastRequset).removeClass('changeslist-entry-active');
                            }
                            lastRequset = self;
                            if (res === null) {
                                $diffContent.html('در زمان دریافت اطلاعات خطایی رخ داد. دوباره تلاش کنید!');
                                return false;
                            }
                            var revision = res.query.pages[Object.keys(res.query.pages)[0]].revisions[0];
                            var diffString = diffHref ? revision.diff["*"] : revision['*'];
                            var editSummary=revision['comment']
                            if (diffString === null) {
                                $diffContent.html('در زمان دریافت اطلاعات خطایی رخ داد. دوباره تلاش کنید!');
                                return false;
                            }
                            var trTemp = $('<tr><td class="diff-marker">&nbsp;</td><td class="diff-context"></td></tr>');
                            var newTable = $('<table class="diff"></table>')
                                .html('<colgroup><col class="diff-marker"><col class="diff-content"><col class="diff-marker"><col class="diff-content"></colgroup>');
                            var topTable = $('<table class="diff"></table>')
                                .html('<colgroup><col class="diff-marker"><col class="diff-content"><col class="diff-marker"><col class="diff-content"></colgroup>');
                            var p1 = '"//fa.wikipedia.org/w/index.php?title=' + diffTitle + '&diff=prev&oldid=' + diffId2 + '"'
                            var p2 = '"//fa.wikipedia.org/w/index.php?title=' + diffTitle + '&diff=next&oldid=' + diffId + '"'
                            if (!$(mytarget).find('.mw-rollback-link').text()) { // واگردانی نباشد
                                if (!diffHref) {
                                    //console.log('New')
                                    //ویرایش نو
                                    var p1 = "'javascript: void(0)' class='disabled'"
                                }
                            } else {
                                //console.log('Last')
                                //ویرایش آخر
                                var p2 = "'javascript: void(0)' class='disabled'"
                            }
                            topTable.append($('<tr><td colspan="4" align="center" class="diff-context2"><a href=' + p1 + ' target="_blank">→ تفاوت ویرایش قدیمی‌تر</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="//fa.wikipedia.org/w/index.php?title=' + diffTitle + '&&action=history" target="_blank">[تاریخچه]</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href=' + p2 + ' target="_blank">تفاوت ویرایش جدیدتر ←</a></td></tr>'));
                            if (lastRevert||!unpatrolled) {
                                var checkmarks=' ✔ '
                            }else{
                                var checkmarks=''
                            }
                            if (editSummary.replace(/\/\*(.*?)\*\//g,'').trim()){
                                topTable.append($('<tr><td colspan="4" align="center" class="diff-lineno"><p style="color:black"><span id="CheckMark">'+checkmarks+'</span>&nbsp;ویرایش شده توسط&nbsp;&nbsp;&nbsp;<a href="//fa.wikipedia.org/wiki/کاربر:' + username + '" target="_blank">' + username + '</a>&nbsp;<a href="//fa.wikipedia.org/wiki/بحث_کاربر:' + username + '" target="_blank">(بحث)</a>&nbsp;&nbsp;(خلاصه ویرایش:&nbsp;'+editSummary.replace(/\/\*(.*?)\*\//g,'').trim()+')</p></td></tr>'));
                            }else{
                                topTable.append($('<tr><td colspan="4" align="center" class="diff-lineno"><p style="color:black"><span id="CheckMark">'+checkmarks+'</span>&nbsp;ویرایش شده توسط&nbsp;&nbsp;&nbsp;<a href="//fa.wikipedia.org/wiki/کاربر:' + username + '" target="_blank">' + username + '</a>&nbsp;<a href="//fa.wikipedia.org/wiki/بحث_کاربر:' + username + '" target="_blank">(بحث)</a></p></td></tr>'));

                            }
                            if (!$(mytarget).find('.mw-rollback-link').text()) {
                                if (diffHref) {
                                    if (lastRevert) {
                                        lastRevert = false
                                        if (!unpatrolled) {
                                            topTable.append($('<tr><td colspan="2" class="diff-marker2">&nbsp;</td><td colspan="2" align="center" class="diff-lineno"><p style="color:red;">در آخرین نسخهٔ این صفحه، ویرایش‌های کاربر:' + username + ' واگردانی یا خنثی‌سازی شده‌است و </p><p style="color:MediumSeaGreen;">گشت هم خورده‌است</p><p style="color:red;"> در نتیجه دکمهٔ «مورد پایین» یا «مورد بالا» را بزنید!</p></td></tr>'));
                                            backColor = '#edfbd3'
                                            s1 = false
                                        } else {
                                            topTable.append($('<tr><td colspan="2" class="diff-marker2">&nbsp;</td><td colspan="2" align="center" class="diff-lineno"><p style="color:red;">در آخرین نسخهٔ این صفحه، ویرایش‌های کاربر:' + username + ' واگردانی یا خنثی‌سازی شده‌است؛ در نتیجه می‌توانید این نسخه را </p><p style="color:MediumSeaGreen;">برچسب گشت بزنید!</p></td></tr>'));
                                            backColor = '#edfbd3'
                                            s1 = false
                                        }

                                    } else {
                                        if (unpatrolled) {
                                            topTable.append($('<tr><td colspan="2" class="diff-marker2">&nbsp;</td><td colspan="2" align="center" class="diff-lineno"><p style="color:#3ec6d8;">این ویرایش آخرین نسخه نیست!</p></td></tr>'));
                                        }
                                    }
                                }
                            }
                            if (!unpatrolled && backColor !== '#edfbd3') {
                                topTable.append($('<tr><td colspan="4" align="center" class="diff-lineno"><p style="color:MediumSeaGreen;">این نسخه برچسب گشت‌خورده!</p></td></tr>'));
                                backColor = '#edfbd3' //سبز
                                s1 = false
                            } else {
                                if ($(mytarget).find('.mw-changeslist-line-inner').text().match(/ویرایش به وسیلهٔ ابرابزار/g)) {
                                    topTable.append($('<tr><td colspan="2" class="diff-marker2">&nbsp;</td><td colspan="2" align="center" class="diff-lineno"><p style="color:#e9b2f7;">خلاصه ویرایش: ویرایش خودکار به کمک ابرابزار</p></td></tr>'));
                                    backColor = '#f2f6ff' //آبی کم‌رنگ
                                    s1 = false
                                }
                                if ($(mytarget).find('.mw-changeslist-line-inner').text().match(/‏جایگزینی با اشتباه‌یاب:/g)) {
                                    topTable.append($('<tr><td colspan="2" class="diff-marker2">&nbsp;</td><td colspan="2" align="center" class="diff-lineno"><p style="color:#e9b2f7;">خلاصه ویرایش: ویرایش نیمه خودکار به کمک اشتباه‌یاب</p></td></tr>'));
                                }
                            }
                            if (s1) {
                                if ($(mytarget)[0]['outerHTML'].search(/mw\-changeslist\-damaging\-maybebad/i) > 0) {
                                    backColor = '#fcfad1' // نارنجی کم رنگ
                                    //console.log('O')
                                } else {
                                    if ($(mytarget)[0]['outerHTML'].search(/mw\-changeslist\-damaging\-verylikelybad/i) > 0) {
                                        backColor = '#f7afaf' // قرمز پررنگ
                                        //console.log('R')
                                    } else {
                                        if ($(mytarget)[0]['outerHTML'].search(/mw\-changeslist\-damaging\-likelygood/i) > 0) {
                                            backColor = '#f2f2f2' // سفید
                                            //console.log('W1')
                                        }
                                    }
                                }
                            }
                            if (backColor == '#fcfad1') {
                                topTable.append($('<tr><td colspan="4" align="center" class="diff-lineno"><p style="color:red">این ویرایش توسط سامانه ORES (سامانه ارزشیابی ویرایش) به عنوان «مشکوک به خرابکاری» شناخته شده‌است</p></td></tr>'));
                            }
                            if (backColor == '#f7afaf') {
                                topTable.append($('<tr><td colspan="4" align="center" class="diff-lineno"><p style="color:#b70c0c">این ویرایش توسط سامانه ORES (سامانه ارزشیابی ویرایش) به عنوان به «خرابکاری» شناخته شده‌است</p></td></tr>'));
                            }
                            if (!diffHref) {
                                newTable.append($('<tr><td colspan="4" class="diff-lineno">صفحهٔ جدید</td></tr>'));
                                var rows = diffString.split('\n');
                                for (var tr in rows) {
                                    var curTr = trTemp.clone();
                                    curTr.find('.diff-context').first().text(rows[tr]);
                                    newTable.append(curTr);
                                }
                            } else {
                                newTable.append(diffString);
                            }
                            $diffDialog.dialog('option', 'title', '<i><a href="//fa.wikipedia.org/wiki/' + diffTitle + '" target="_blank">' + diffTitle + '</a></i>');
                            $diffContent1.html(topTable);
                            $diffContent.html(newTable);
                            if (!backColor) {
                                backColor = '#f2f2f2' //سفید
                                console.log('W2')
                            }
                            $diffDialog.css({
                                'background-color': backColor
                            })
                            $diffDialog.dialog('isOpen') || $diffDialog.dialog('open').dialog('widget').css({
                                //'height': newheight,
                                'top': 'auto'
                            }).css('float', 'left');
                            backColor = ''
                        })
                      });
                };
            }
            mw.hook('wikipage.content').add(qRcDiffHandler);
        })();
    });
});