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

از پژوهشکده امر به معروف
نسخهٔ تاریخ ‏۱۱ اسفند ۱۳۹۴، ساعت ۱۳:۰۷ توسط Admin (نظرات | مشارکت‌ها) (صفحه‌ای تازه حاوی «jslint indent: 2, browser: true: global jQuery, mediaWiki, persianWikiTools, alert: var DateVar = ''; function ConvertYearToFarsi(yea...» ایجاد کرد)

(تفاوت) → نسخهٔ قدیمی‌تر | نمایش نسخهٔ فعلی (تفاوت) | نسخهٔ جدیدتر ← (تفاوت)
پرش به: ناوبری، جستجو

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

  • فایرفاکس / سافاری: کلید Shift را نگه دارید و روی دکمهٔ Reload کلیک کنید، یا کلید‌های Ctrl-F5 یا Ctrl-R را با هم فشار دهید (در رایانه‌های اپل مکینتاش کلید‌های ⌘-R)
  • گوگل کروم: کلیدهای Ctrl+Shift+R را با هم فشار دهید (در رایانه‌های اپل مکینتاش کلید‌های ⌘-Shift-R)
  • اینترنت اکسپلورر: کلید Ctrl را نگه‌دارید و روی دکمهٔ Refresh کلیک کنید، یا کلید‌های Ctrl-F5 را با هم فشار دهید
  • اپرا: حافظهٔ نهانی مرورگر را از طریق منوی Tools → Preferences پاک کنید
/*jslint indent: 2, browser: true*/
/*global jQuery, mediaWiki, persianWikiTools, alert*/
var DateVar = '';
function ConvertYearToFarsi(year) {
    var i = 0;
    for (i = 0; i <= 9; i = i + 1) {
        year = year.replace(new RegExp('[' + '0123456789' [i] + ']', 'g'), '۰۱۲۳۴۵۶۷۸۹' [i]);
    }
    return year
}
function checkredirect(ar_title) {
params = { action: "query", prop: "info", titles: ar_title, format: "json" }
mw.loader.using('mediawiki.api', function () {( new mw.Api() ).get(params).done(function (data) {
        if("redirect" in data["query"]["pages"][Object.keys(data["query"]["pages"])]) {alert("این مقاله منتقل شده است. حواستان باشد که دستی درست کنید.");}}
    );
} );
}

function ConvertMonthToFarsi(month) {
    if (month == 'January') {
        return 'ژانویه'
    };
    if (month == 'February') {
        return 'فوریه'
    };
    if (month == 'March') {
        return 'مارس'
    };
    if (month == 'April') {
        return 'آوریل'
    };
    if (month == 'May') {
        return 'مه'
    };
    if (month == 'June') {
        return 'ژوئن'
    };
    if (month == 'July') {
        return 'ژوئیه'
    };
    if (month == 'August') {
        return 'اوت'
    };
    if (month == 'September') {
        return 'سپتامبر'
    };
    if (month == 'October') {
        return 'اکتبر'
    };
    if (month == 'November') {
        return 'نوامبر'
    };
    if (month == 'December') {
        return 'دسامبر'
    };
}
function creationdate(title, callback) {
    mw.loader.using( 'mediawiki.api', function () {
    ( new mw.Api() ).get( {
        action: 'query',
        prop: 'revisions',
        titles: title,
        rvprop: 'timestamp',
        rvdir: 'newer',
        format: 'json',
        rvlimit: '1',
    } ).done(function ( data ) {
        DateVar = data["query"]["pages"][Object.keys(data["query"]["pages"])]["revisions"][0]["timestamp"];
        callback(DateVar);
    });
} );
}
function ArchiveMonth(DateVar, callback) {
    var ArchiveMonthLink = '';
    var crdate = new Date(DateVar);
    var ArchiveMonthLink = ConvertMonthToFarsi(crdate.getUTCMonthName()) + ' ' + ConvertYearToFarsi(String(crdate.getUTCFullYear()));
    callback(ArchiveMonthLink);
}
(function ($, mw) {
    'use strict';

    function loadPage(title, callback) {
        new mw.Api().get({
            action: 'query',
            prop: 'revisions',
            titles: title,
            rvprop: 'content',
            format: 'json'
        }).done(function (data) {
        try {
            callback($.map(data.query.pages, function (value) {
                return value;
            })[0].revisions[0]['*']);
        }
        catch (exception) {
            callback('');}
        }).fail(function (data) {
            callback($.map(data.query.pages, function (value) {
                return value;
            })[0].revisions[0]);
        });
    }
    function ProtectPageRefresh(page, summary) {
        prottok(function (prottokk) {
            protectPage(page, summary, prottokk);
        });
    }
    function prottok(callback) {
        new mw.Api().post({
            action: 'tokens',
            type: 'protect'
        }).done(function (data) {
            if (data.error && data.error.info) {
                mw.notify(data.error.info);
            } else {
                callback(data.tokens.protecttoken);
            }
        }).fail(function (data) {
            mw.notify(data);
        });
    }
    function protectPage(title, summary, prottokk) {
        new mw.Api().post({
            action: 'protect',
            title: title,
            reason: summary,
            token: prottokk,
            protections: 'create=sysop',
            expiry: '1 year',
        }).done(function (data) {
            if (data.error && data.error.info) {
                mw.notify(data.error.info);
            } else {
                mw.notify('مقاله محافظت شد!');
            }
        }).fail(function (data) {
            mw.notify(data);
        });
    }
    function savePage(title, text, summary, callback) {
        new mw.Api().post({
            action: 'edit',
            title: title,
            text: text,
            summary: summary,
            minor: '',
            token: mw.user.tokens.get('editToken')
        }).done(function (data) {
            if (data.error && data.error.info) {
                mw.notify(data.error.info);
            } else {
                callback();
            }
        }).fail(function (data) {
            mw.notify(data);
        });
    }

    function ClosePage(text, comment) {
        text = text.replace('/<noinclude' + '>\{\{(?:این الگو را زمان بستن نبح حذف کن|REMOVE THIS TEMPLATE WHEN CLOSING THIS AfD)\|.+?\}\}</noinclude' + '\/>\n?/g', '');
        text = '{{آغاز بایگانی حذف}}\n\n' + comment + ' ~~' + '~~\n' + text + '\n{{پایان بایگانی حذف}}';
        mw.notify('نظرخواهی بسته شد!');
        return text;
    }

    function CloseTalkPage(text,article_name, comment) {
        text = '{{پیشینه حذف| تاریخ =~~' + '~~' + '~| نتیجه =' + comment + ' | صفحه =' + article_name.replace(/\_/g, ' ') + ' |کوچک=}}\n\n' + text;
        text  = text.replace("صفحه =ویکی‌پدیا:نظرخواهی برای حذف/", "صفحه =")
        mw.notify('الگو پیشینه حذف به بحث صفحه افزوده شد!');
        return text;
    }

    function ArchivePage(text, pagelink, comment) {
        text = text + '\n* [[' + pagelink.replace(/\_/g, ' ') + ']] -- ' + comment + ' ~~' + '~~'
        mw.notify('بایگانی به‌روز شد.');
        return text;
    }

    function RemoveLink(text, pagelink) {
        var text2 = text;
        pagelink = pagelink.replace(/\_/g, ' ');
        text = text.replace('{{' + pagelink + '}}\n', '')
        if (text2 == text) {
            mw.notify('توجه:برداشتن نظرخواهی از وپ:نبح با خطا مواجه شد!')
        } else {
            mw.notify('نظرخواهی از وپ:نبح برداشته شد!')
        }
        return text;
    }

    function RemoveTemplate(text) {
        var text2 = text;
        text = text.replace(/(\<!--(.+?)--\>\n*|)\{\{(نظرخواهی برای حذف|پیشنهاد حذف\s?۲)(.+?|)\}\}(\n*\<!--(.+?)--\>|)(\n*\<!--(.+?)--\>|)/g, '');
        text = text.replace(/\<!-- قبلاً پیشنهاد حذف داده شده‌است(.+?)--\>/g, '');
        text = text.replace(/\<noinclude\>\n\<\/noinclude\>/g, '');
        if (text2 == text) {
            mw.notify('توجه:برداشتن الگو از مقاله با مشکل مواجه شد!');
        } else {
            mw.notify('الگو پیشنهاد حذف از صفحه برداشته شد!');
        }
        text=text.trim()
        return text;
    }

    function loadSavePageRefresh(page, replaceCallback, summary) {
        loadPage(page, function (text) {
            savePage(page, replaceCallback(text), summary, function () {
                //window.location = mw.util.getUrl(page) + '?action=purge';
            });
        });
    }
    function DeletePageRefresh(page, summary) {
        deltok(function (deltokk) {
            deletePage(page, summary, deltokk, ProtectPageRefresh);
        });
    }
    function deltok(callback) {
        new mw.Api().post({
            action: 'tokens',
            type: 'delete'
        }).done(function (data) {
            if (data.error && data.error.info) {
                mw.notify(data.error.info);
            } else {
                callback(data.tokens.deletetoken);
            }
        }).fail(function (data) {
            mw.notify(data);
        });
    }
    function deletePage(title, summary, deltokk, callback) {
        new mw.Api().post({
            action: 'delete',
            title: title,
            reason: summary,
            token: deltokk,
        }).done(function (data) {
            if (data.error && data.error.info) {
                mw.notify(data.error.info);
            } else {
                mw.notify('مقاله حذف شد!');
                callback(title, 'محافظت صفحه بر اساس [[ویکی‌پدیا:نظرخواهی_برای_حذف/' + title + '|نظرخواهی برای حذف]] ([[مدیاویکی:Gadget-AfD.js|ابزار جمع‌بندی]])' );
            }
        }).fail(function (data) {
            mw.notify(data);
        });
        if (title.search(/کاربر:|الگو:|رده:|ویکی‌پدیا:|درگاه:|راهنما:/) > -1 ) {
            var TalkLink = 'بحث ' + title;
        } else {
            var TalkLink = 'بحث:' + title;
        }
        new mw.Api().post({
            action: 'delete',
            title: TalkLink,
            reason: summary,
            token: deltokk,
        }).done(function (data) {
            if (data.error && data.error.info) {
                mw.notify(data.error.info);
            } else {
                mw.notify('بحث مقاله حذف شد!');
            }
        }).fail(function (data) {
            mw.notify(data);
        });
    }
    if (mw.config.get('wgAction') === 'view' && (mw.config.get('wgPageName').search("ویکی‌پدیا:نظرخواهی_برای_حذف") > -1)) {
        $(function () {
            $(mw.util.addPortletLink('p-views', '#', 'جمع‌بندی', 'ca-afd', 'ابزار جمع‌بندی'))
                .click(function (e) {
                    e.preventDefault();
                    var comment = prompt('لطفاً نتیجه جمع‌بندی را با عبارت‌های «بماند» یا «حذف شود» یا «ادغام شود» اعلام نمائید.');
                    if (comment) {
                        var OurPage = mw.config.get('wgPageName');
                        var article_name = mw.config.get('wgPageName');
                        article_name = article_name.replace("ویکی‌پدیا:نظرخواهی_برای_حذف/", "").replace(/ \(بار دوم\)$/, "");
                        //Closing The RFD page
                        checkredirect(article_name)
                        loadSavePageRefresh(OurPage,
                            function (text) {
                                return ClosePage(text, comment);
                            },
                            'بستن نظرخواهی [[وپ:نبح]] ([[مدیاویکی:Gadget-AfD.js|ابزار جمع‌بندی]])'
                        );
                        if (comment.search("حذف شود") == -1) {
                            if (article_name.search(/کاربر:|الگو:|رده:|ویکی‌پدیا:|درگاه:|راهنما:/) > -1) {
                                var TalkLink = 'بحث ';
                            } else {
                                var TalkLink = 'بحث:';
                            }
                            loadSavePageRefresh(TalkLink + article_name,
                            function (text) {
                                return CloseTalkPage(text, OurPage, comment);
                            },
                            '/'+'*افزودن [[الگو:پیشینه حذف]] به بحث صفحه ([[مدیاویکی:Gadget-AfD.js|ابزار جمع‌بندی]])*'+'/'
                            );
                        }
                        //Archiving the RFD link
                        creationdate(OurPage, function(archlink) {ArchiveMonth(archlink, function (month) { loadSavePageRefresh('ویکی‌پدیا:نظرخواهی_برای_حذف/بایگانی/' + month,
                            function (text) {
                                return ArchivePage(text, OurPage, comment);
                            },
                            '/'+'*بایگانی نظرخواهی [[وپ:نبح]] ([[مدیاویکی:Gadget-AfD.js|ابزار جمع‌بندی]])*'+'/'
                        )})});
                        //Remove RFD link form wp:RFD
                        loadSavePageRefresh('ویکی‌پدیا:نظرخواهی_برای_حذف',
                            function (text) {
                                return RemoveLink(text, OurPage);
                            },
                            '/'+'*حذف [['+OurPage.replace(/\_/g, ' ')+']] از [[وپ:نبح]] ([[مدیاویکی:Gadget-AfD.js|ابزار جمع‌بندی]])*'+'/'
                        );
                        if (comment.search("حذف شود") > -1) {
                            //Deleting the Article
                            DeletePageRefresh(article_name, 'حذف صفحه بر اساس [[' + OurPage + '|نظرخواهی برای حذف]] ([[مدیاویکی:Gadget-AfD.js|ابزار جمع‌بندی]])' );
                        } else {
                            //Removing RFD template from article
                            if (comment.search("ادغام شود") > -1) {
                                var comment2 = prompt('عنوان مقاله‌ای را که باید با آن ادغام شود بنویسید.')
                                var ExtraSum='و افزودن {{ادغام با|'+comment2 +'}} '
                            } else {
                                var ExtraSum=''
                            }
                            loadSavePageRefresh(article_name,
                                function (text) {
                                    if (comment.search("ادغام شود") > -1) {
                                       text=RemoveTemplate(text);
                                       text='{{ادغام با|'+comment2 +'}}\n'+text;
                                    } else {
                                       text=RemoveTemplate(text);
                                    }
                                    return text
                                },
                                '/'+'*حذف [[الگو:پیشنهاد حذف]] از مقاله '+ExtraSum+'([[مدیاویکی:Gadget-AfD.js|ابزار جمع‌بندی]])*'+'/'
                            );
                        }
                        //mw.notify('جمع بندی با موفقیت انجام پذیرفت');
                    }
                })
                .insertBefore('#ca-view');
        });
    }
}(jQuery, mediaWiki));