ميدياويكي:Gadget-CatMaker.js

ملاحظة: بعد الحفظ، قد يلزمك إفراغ الكاش لرؤية التغييرات.

/*global mw, $, prompt, location*/
/*jslint indent: 2*/
/*!
 * @author User:Ebraminio, User:Yamaha5
 * Translated to Arabic by User:Elph
 */
$(function () {
    //mw.notify('إصدار '+'۲.۰۲');
    mw.loader.using(['jquery.ui'], function () {
        var formFind = '<div id="catmaker" title="إنشاء تلقائي للتصنيفات"><form>';
        formFind += '<p>تُستخدم هذه الأداة لإنشاء تصنيف أو عدة تصانيف معادلة للإنجليزية.</p>';
        formFind += '<p>التصنيف الإنجليزي <input type="text" id="enlink1" size="30" value="Category:" dir="LTR"/> ';
        formFind += ' التصنيف العربي <input type="text" id="falink1" size="30" value="تصنيف:"/></p>';
        formFind += '<p>التصنيف الإنجليزي <input type="text" id="enlink2" size="30" value="Category:" dir="LTR"/> ';
        formFind += ' التصنيف العربي <input type="text" id="falink2" size="30" value="تصنيف:"/></p>';
        formFind += '<p>التصنيف الإنجليزي <input type="text" id="enlink3" size="30" value="Category:" dir="LTR"/> ';
        formFind += ' التصنيف العربي <input type="text" id="falink3" size="30" value="تصنيف:"/></p>';
        formFind += '<p>التصنيف الإنجليزي <input type="text" id="enlink4" size="30" value="Category:" dir="LTR"/> ';
        formFind += ' التصنيف العربي <input type="text" id="falink4" size="30" value="تصنيف:"/></p>';
        formFind += '<p>التصنيف الإنجليزي <input type="text" id="enlink5" size="30" value="Category:" dir="LTR"/> ';
        formFind += ' التصنيف العربي <input type="text" id="falink5" size="30" value="تصنيف:"/></p>';
        formFind += '</form></div>';
        var messageFind = $(formFind).appendTo('#content');
        messageFind.dialog({
            autoOpen: false,
            modal: true,
            width: 660,
            buttons: [{
                id: 'catmaker-button-import',
                text: 'إنشاء التصنيف',
                click: function () {
                    var enlink1 = document.getElementById("enlink1").value.trim();
                    var falink1 = document.getElementById("falink1").value.trim();
                    var enlink2 = document.getElementById("enlink2").value.trim();
                    var falink2 = document.getElementById("falink2").value.trim();
                    var enlink3 = document.getElementById("enlink3").value.trim();
                    var falink3 = document.getElementById("falink3").value.trim();
                    var enlink4 = document.getElementById("enlink4").value.trim();
                    var falink4 = document.getElementById("falink4").value.trim();
                    var enlink5 = document.getElementById("enlink5").value.trim();
                    var falink5 = document.getElementById("falink5").value.trim();
                    var PurgePage=true;
                    if (falink2 !=='تصنيف:' ||falink3 !=='تصنيف:'||falink4 !=='تصنيف:'||falink5 !=='تصنيف:'){
                        PurgePage=false;
                    }
                    if (enlink1 !=='Category:' && falink1 !=='تصنيف:'){
                        mw.notify('بدء إنشاء '+falink1+' !');
                        StartCreating(falink1,enlink1,PurgePage);
                    }
                    setTimeout(function(){
                    if (enlink2 !=='Category:' && falink2 !=='تصنيف:'){
                        mw.notify('بدء إنشاء '+falink2+' !');
                        StartCreating(falink2,enlink2,PurgePage);
                    }
                    if (enlink3 !=='Category:' && falink3 !=='تصنيف:'){
                        mw.notify('بدء إنشاء '+falink3+' !');
                        StartCreating(falink3,enlink3,PurgePage);
                    }
                    if (enlink4 !=='Category:' && falink4 !=='تصنيف:'){
                       mw.notify('بدء إنشاء '+falink4+' !');
                        StartCreating(falink4,enlink4,PurgePage);
                    }
                    if (enlink5 !=='Category:' && falink5 !=='تصنيف:'){
                       mw.notify('بدء إنشاء '+falink5+' !');
                        StartCreating(falink5,enlink5,PurgePage);
                    }
                    },1000);
                    /*
                    setTimeout(function(){
                    if (PurgePage === false){
                           location.reload();
                    }},15000);*/
                }
            }]
        });

        var CatMakerLink = mw.util.addPortletLink('p-tb', '#', 'منشئ \u200cالتصانيف', 'ca-catmaker', 'إنشاء تلقائي للتصنيفات');
        $(CatMakerLink).click(show);
    });


    function show() {
        $('div#catmaker').dialog('open');
    }

    function StartCreating(falink,enlink,PurgePage) {
        if ((enlink=='Category:'||falink=='تصنيف:')&& PurgePage){
           alert ('يرجى كتابة اسم التصنيفات!');
           return;
        }
        catParents(enlink).done(function (x) {
            $.when.apply(null, $.map(x, function (y) {
                return faWikiName(y);
            })).done(function () {
                var CatText=$.map(arguments, function (x) {
                        return '[[' + x + ']]';
                    }).join('\n')+'\n[[en:'+enlink+']]';
                CatText=CatText.replace(/\[\[undefined\]\]/g, '');
                CatText=CatText.replace(/\n\n/g, '\n');
                savePage(falink,
                    CatText,
                    'إنشاء تصنيفات باستخدام منشئ \u200cالتصانيف',
                    function () {
                        mw.notify('تم إنشاء  '+falink+' بنجاح. انتظر قليلا.',{ autoHide: false});
                       if (PurgePage){
                           window.location = mw.util.getUrl(falink) + '?action=purge';
                       }
                    }
                );
            });
        });
    }
    function savePage(title, text, summary, callback) {
		new mw.Api().create( title,
		    { summary: summary },
		    text
		).done(function (data) {
            if (data.error && data.error.info) {
                mw.notify(data.error.info);
            } else {
                callback();
            }
        }).fail(function (data) {
            mw.notify(data);
        });
    }

    function faWikiName(title) {
        'use strict';
        return $.ajax({
            url: '//en.wikipedia.org/w/api.php',
            data: {
                action: 'query',
                prop: 'langlinks',
                titles: title,
                redirects: 1,
                format: 'json',
                lllimit: 500
            },
            dataType: 'jsonp'
        }).then(function (data) {
            return $.grep($.map(data.query.pages, function (x) {
                return x;
            })[0].langlinks, function (x) {
                return x.lang === 'ar';
            })[0];
        }).then(function (x) {
            if (x){
                return x['*'];
            }
        });
    }

    function catParents(title) {
        'use strict';
        return $.ajax({
            url: '//en.wikipedia.org/w/api.php',
            data: {
                action: 'query',
                prop: 'categories',
                titles: title,
                clshow: '!hidden',
                cllimit: 500,
                format: 'json'
            },
            dataType: 'jsonp'
        }).then(function (data) {
            return $.map($.map(data.query.pages, function (x) {
                return x;
            })[0].categories, function (x) {
                return x.title;
            });
        });
    }
}(jQuery, mediaWiki));