Նշում՝ Պահելէ ետք կրնայ ըլլալ որ պէտք ունենաք մաքրելու դիտարկիչին պաշարը (cache) փոփոխութիւնները կարենալ տեսնելու համար։

  • Firefox / Safari: Սեղմած պահել Shiftը մինչ կը սեղմէք Reload, կամ ալ սեղմել Ctrl-F5 կամ Ctrl-R (⌘-R Macի վրայ)
  • Google Chrome: Սեղմել Ctrl-Shift-R (⌘-Shift-R Macի վրայ)
  • Internet Explorer: Սեղմած պահելCtrl մինչ կը սեղմէք Refresh, կամ ալ սեղմել Ctrl-F5
  • Opera: Երթալ Menu → Settings (Opera → Preferences Macի վրայ) եւ ապա Privacy & security → մաքրել թերթատման տեղեկութիւնները → Պաշարի մէջ դրուած նկարներ եւ նիշքեր.
//<nowiki>
$.when($.ready).then(function() {
    var myApi = new mw.Api();
    var wbApi = new mw.ForeignApi('https://www.wikidata.org/w/api.php');
    var myCats = mw.config.get('wgCategories');
    var possibleCats = {
        'exists': {},
        'missing': {}
    };
    var data = {};
    var wdAdminQs = [
        'Q15647814', // Wikimedia administration category
        'Q30432511', // metacategory in Wikimedia projects
        'Q24046192', // Wikimedia category of stubs
        'Q20769287', // Wikimedia user category
        'Q23894233', // Wikimedia templates category
        'Q24514938', // Wikidata property usage tracking category
        'Q30330522', // unknown parameters category
        'Q38084761', // category for no label in Wikidata
        'Q58118449' // Wikimedia modules category
    ];

    function getOtherWikis() {
        var otherWikis = {};
        var interLanguageLinks = document.getElementsByClassName('interlanguage-link-target');
        for (var i = interLanguageLinks.length - 1; i >= 0; i--) {
            var code = interLanguageLinks[i].getAttribute('href').replace(/^https:\/\/(.+)\.wikipedia\.org.+$/, '$1');
            if (code === 'be-x-old') {
                code = 'be-tarask';
            }
            otherWikis[code] = {
                'title': decodeURIComponent(interLanguageLinks[i].getAttribute('href').replace(/^.+\/wiki\//, '')),
                'api': new mw.ForeignApi('https://' + code + '.wikipedia.org/w/api.php')
            };

        }
        return otherWikis;
    }

    function getWbData(wiki, title) {
        return wbApi.get({
            "action": "wbgetentities",
            "format": "json",
            "sites": wiki,
            "titles": title,
            "props": "sitelinks/urls"
        });
    }

    function isAdmin(item, isMissing) {
        return wbApi.get({
            "action": "wbgetclaims",
            "format": "json",
            "entity": item,
            "property": "P31"
        }).then(function(q) {
            var base = possibleCats.exists;
            if (isMissing) {
                base = possibleCats.missing;
            }
            base[item].hidden = false;
            for (var i = 0; i < q.claims.P31.length; i++) {
                if (wdAdminQs.includes(q.claims.P31[i].mainsnak.datavalue.value.id)) {
                    base[item].hidden = true;
                    break;
                }
            }
        });
    }

    function getOtherCategories(lang, data) {
        function WbHelper(x) {
            data[lang]['#doneCats']++;
            if (!x.entities['-1']) {
                var item = Object.keys(x.entities)[0];
                if (x.entities[item].sitelinks.hywwiki) {
                    if (!myCats.includes(x.entities[item].sitelinks.hywwiki.title.replace('Ստորոգութիւն:', ''))) {
                        isAdmin(item, false);
                        if (possibleCats.exists[item]) {
                            possibleCats.exists[item].count++;
                            possibleCats.exists[item].wikis.push(lang);
                        } else {
                            possibleCats.exists[item] = {
                                'count': 1,
                                'title': x.entities[item].sitelinks.hywwiki.title,
                                'wikis': [lang]
                            };
                        }
                    }
                } else {
                    isAdmin(item, true);
                    if (possibleCats.missing[item]) {
                        possibleCats.missing[item].count++;
                        possibleCats.missing[item].wikis.push(lang);
                    } else {
                        possibleCats.missing[item] = {
                            'count': 1,
                            'sitelinks': x.entities[item].sitelinks,
                            'wikis': [lang]
                        };
                    }
                }
            }
        }

        function catHelper(cat) {
            if (mw.config.get('wgNamespaceNumber') === 0 && cat.hidden === "") {
                data[lang]['#doneCats']++;
                return;
            }
            var titile = cat.title;
            getWbData((lang === 'be-tarask' ? 'be_x_oldwiki' : lang.replace(/\-/g, '_') + "wiki"), titile).then(function(x) {
                WbHelper(x);
            });
        }

        data[lang].api.get({
            "action": "query",
            "format": "json",
            "prop": "categories",
            "titles": data[lang].title,
            "clprop": "hidden",
            "indexpageids": true,
            "cllimit": 500
        }).then(function(query) {
            var id = query.query.pageids[0];
            var categories = query.query.pages[id].categories;
            data[lang]['#cats'] = categories.length;
            data[lang]['#doneCats'] = 0;
            for (var i in categories) {
                catHelper(categories[i]);
            }
        });
    }

    function findPossibleCats(possibleCats, data) {
        for (var lang in data) {
            getOtherCategories(lang, data);
        }
    }

    function getSorted(possibleCats) {
        function comp(a, b) {
            if (a.count > b.count) {
                return 1;
            }
            if (a.count < b.count) {
                return -1;
            }
            return 0;
        }
        var exists = [];
        var missing = [];
        for (var objExists in possibleCats.exists) {
            exists.push(possibleCats.exists[objExists]);
        }
        for (var objMissing in possibleCats.missing) {
            missing.push(possibleCats.missing[objMissing]);
        }
        return [exists.sort(comp).reverse(), missing.sort(comp).reverse()];
    }

    function processData(sortedCats) {
        function removeUncat(text) {
            return text.replace(/\{\{\s*([Uu]ncategorized|[Սս]տորոգութիւն չկա|[Կկ]չ)\s*[^}]*\}\}\s*(<!--.*?-->\s*)?/, '');
        }
        var div = '<input id="catSuggest-save" type="button" value="Ավելացնել ընդգծված կատեգորիաները"><div class="mw-ui-vform-field warningbox">Խնդրում ենք հաշվի առնել, որ այլ Վիքիպեդիայում կատեգորիայի առկայությունը չի նշանակում, որ այն պարտադիր պետք է լինի Հայերեն Վիքիպեդիայում։</div><div>';
        var table1 = '<table style="float: left;" class="wikitable">' +
            '<caption>Գոյություն ունեցող կատեգորիաներ</caption>' +
            '<thead><tr>' +
            '<th class="headerSort" tabindex="0" role="columnheader button">Կատեգորիա</th>' +
            '<th class="headerSort" tabindex="0" role="columnheader button">Վիքիներ</th></tr></thead><tbody>';
        for (var catExists in sortedCats[0]) {
            if (mw.config.get('wgNamespaceNumber') === 0 && !sortedCats[0][catExists].hidden) {
                table1 += '<tr><td class="catSuggest-potential">' + sortedCats[0][catExists].title.replace('Ստորոգութիւն:', '') + '</td><td>' + sortedCats[0][catExists].wikis.sort().join(', ') + '</td></tr>';
            }
        }

        table1 += '</tbody><tfoot></tfoot></table>';

        var table2 = '<table style="float: right;"  class="wikitable">' +
            '<caption>Գոյություն չունեցող կատեգորիաներ</caption>' +
            '<thead><tr>' +
            '<th class="headerSort" tabindex="0" role="columnheader button">Կատեգորիա</th>';
        for (var catMissing in sortedCats[1]) {
            if (mw.config.get('wgNamespaceNumber') === 0 && !sortedCats[1][catMissing].hidden) {
                table2 += '<tr><td><ul>';
                var rest = '<div class="toccolours mw-collapsible mw-collapsed" style="width:400px; overflow:auto;">';
                rest += '<div style="font-weight:bold;line-height:1.6;">Նույն կատեգորիան այլ լեզուներով</div>';
                rest += '<div class="mw-collapsible-content">';
                var isRest = false;
                table2 += '<div>Հետևյալ կատեգորիան կա հոդվածի համապատասխան լեզվով տարբերակում՝</div>';
                for (var sitelink in sortedCats[1][catMissing].sitelinks) {
                    var lc = sortedCats[1][catMissing].sitelinks[sitelink].site.replace(/^(.+)wiki$/g, "$1");
                    var cattitle = sortedCats[1][catMissing].sitelinks[sitelink].title;
                    var li = '<li>' + '<a href="' + sortedCats[1][catMissing].sitelinks[sitelink].url + '" class="extiw">' + sitelink + ':' + cattitle.substring(cattitle.indexOf(":") + 1) + '</a></li>';
                    if (sortedCats[1][catMissing].wikis.includes(lc)) {
                        table2 += li;
                    } else {
                        isRest = true;
                        rest += li;
                    }
                }
                if (isRest) {
                    table2 += rest + '</div>' + '</div>';
                }
                table2 += '</ul></td></tr>';
            }
        }
        table2 += '</tbody><tfoot></tfoot></table>';

        div += table1 + table2 + '</div>';

        $('#catSuggest-loading').remove();
        $('#catlinks').after(div);
        mw.loader.using('jquery.makeCollapsible').then(function() {
            $('.mw-collapsible').makeCollapsible();
        });

        $('.catSuggest-potential').on('click', function(e) {
            if (!$(e.target).attr('catSuggest-checked')) {
                $(e.target).attr('catSuggest-checked', 1);
                $(e.target).css("background-color", "yellow");
            } else {
                $(e.target).removeAttr('catSuggest-checked', undefined);
                $(e.target).css("background-color", "");
            }
        });
        var saveClicked = false;
        $('#catSuggest-save').on('click', function() {
            if (!saveClicked) {
                saveClicked = true;
                var selectedCats = '';
                $('td[catSuggest-checked]').each(function() {
                    selectedCats += '[[Ստորոգութիւն:' + $(this).text() + ']]\n';
                });
                selectedCats = selectedCats.trim();
                // get wikitext of this article
                myApi.get({
                    action: "query",
                    prop: "revisions",
                    rvprop: "content",
                    formatversion: "2",
                    titles: mw.config.get('wgTitle')
                }).then(function(data) {
                    var content = data.query.pages[0].revisions[0].content;
                    if (content) {
                        var newContent = content.replace(/((?:(?:\[\[(?:Ստորոգութիւն|Category):[^\[\]]+?\]\]\n?)+)?\[\[(?:Ստորոգութիւն|Category):[^\[\]]+?\]\])/i, '$1\n' + selectedCats.trim());
                        if (content === newContent) {
                            myApi.postWithToken('csrf', {
                                action: 'edit',
                                title: mw.config.get('wgPageName'),
                                text: removeUncat(newContent) + '\n' + selectedCats,
                                summary: 'catSuggest-ով +' + selectedCats.replace(/\n/g, ', ')
                            }).then(function() {
                                location.reload();
                            }, function() {
                                $('#catlinks').after('<div>Պահպանել չհաջողվեց, խնդրում ենք փորձել ձեռքով<textarea>' + selectedCats + '</textarea></div>');
                            });
                        } else {
                            myApi.postWithToken('csrf', {
                                action: 'edit',
                                title: mw.config.get('wgTitle'),
                                text: removeUncat(newContent),
                                summary: 'catSuggest-ով +' + selectedCats.replace(/\n/g, ', ')
                            }).then(function() {
                                location.reload();
                            }, function() {
                                $('#catlinks').after('<div>Պահպանել չհաջողվեց, խնդրում ենք փորձել ձեռքով<textarea>' + selectedCats + '</textarea></div>');
                            });
                        }
                    }
                });
            }

        });
    }
    var clicked = false;
    $(mw.util.addPortletLink('p-tb', '#catlinks', 'Գտնել կատեգորիա', 't-page-catSuggest', 'Առաջարկել կատեգորիա ըստ այլ լեզվի')).click(function() {
        if (!clicked) {
            clicked = true;
            $('#catlinks').after('<div style="text-align: center;" id="catSuggest-loading"><a style=" display:block; margin:auto;" title="Ahm masum [CC BY-SA 4.0 (https://creativecommons.org/licenses/by-sa/4.0)], via Wikimedia Commons" href="#catlinks"><img width="256" alt="Loading icon" src="https://upload.wikimedia.org/wikipedia/commons/b/b1/Loading_icon.gif"></a></div>');
            data = getOtherWikis();
            findPossibleCats(possibleCats, data);
            var attempts = 0;
            var isDone = setInterval(function() {
                attempts++;
                var doneSearch = true;
                var doneCheck = true
                for (var lang in data) {
                    if (typeof data[lang]['#cats'] === 'undefined' || data[lang]['#cats'] != data[lang]['#doneCats']) {
                        doneSearch = false;
                    }
                }

                for (var item in possibleCats.missing) {
                    if (typeof possibleCats.missing[item].hidden != "boolean") {
                        doneCheck = false;
                    }
                }
                for (var item in possibleCats.exists) {
                    if (typeof possibleCats.exists[item].hidden != "boolean") {
                        doneCheck = false;
                    }
                }

                if ((doneCheck && doneSearch) || attempts > 20) { // 20 վայրկյան սպասելուց հետո ցույց տալ ինչ հնարավոր է
                    clearInterval(isDone);
                    var sortedCats = getSorted(possibleCats);
                    processData(sortedCats);
                }
            }, 1000);
        }
    });
});
//</nowiki>