پرش به محتوا

مدیاویکی:Sidebar-related.js

از ویکی‌پدیا، دانشنامهٔ آزاد

نکته: برای دیدن تغییرات، ممکن است نیاز باشد که حافظهٔ نهانی مرورگر خود را پس از انتشار پاک‌سازی کنید. گوگل کروم، فایرفاکس، مایکروسافت اج و سافاری: کلید Shift را نگه دارید و روی دکمهٔ Reload در نوار ابزار مرورگر کلیک کنید. برای آگاهی از جزئیات و نحوهٔ پاک‌سازی حافظهٔ نهانی سایر مرورگرها، صفحهٔ ویکی‌پدیا:میانگیر مرورگرتان را خالی کنید را ببینید.

// From https://ru.wikipedia.org/w/index.php?title=MediaWiki:Sidebar-related.js&action=history
var addLink = function(list, label, site, page) {
    var url = '//';
    if (site == 'wikidata') {
        url += 'www.' + site;
    } else if (site == 'commons') {
        url += site + '.wikimedia';
    } else {
        url += 'fa.' + site;
    }
    url += '.org/wiki/' + mw.util.wikiUrlencode(page);
    $('<li>')
      .addClass('interlanguage-link interwiki-' + site)
      .append(
          $('<a>').attr({
            href: url,
            title: label + ': ' + page
          }).text(label)
      )
      .appendTo(list);
};

var addRelatedSites = function() {
    if (typeof mw.config.get('wgWikibaseItemId') === 'undefined' ||
        mw.config.get('wgAction') !== 'view' ||
        mw.config.get('wgNamespaceNumber') % 2
    ) {
        return;
    }

    var p_lang = $('#p-lang');
    if (!p_lang.length) {
        return;
    }

    $.ajax({
        url: '//www.wikidata.org/w/api.php',
        data: {
            'format': 'json',
            'action': 'wbgetentities',
            'props': 'sitelinks|claims',
            'ids': mw.config.get('wgWikibaseItemId')
        },
        dataType: 'jsonp'
    }).done(function (data) {
        if (data.success) {
            for (var i in data.entities) {
                if (i == -1) {
                    return;
                }
                var p_rs = p_lang.clone().attr('id', 'p-relatedsites'),
                    p_rs_list = p_rs.find('ul').empty();
                p_rs.find('div.after-portlet-lang').remove();

                if (mw.user.options.get('skin') === 'vector' || mw.user.options.get('skin') === 'vector-2022') {
                    // Vector
                    p_rs.attr('aria-labelledby', 'p-relatedsites-label');
                    p_rs_list.attr('id', 'p-relatedsites-list');
                    p_rs.find('h3').attr('id', 'p-relatedsites-label').text('در سایر پروژه‌ها');
                    var p_lang_label = p_lang.find('h3');
                    if (p_lang_label.attr('tabindex')) {
                        var tabindex = parseInt(p_lang_label.attr('tabindex'), 10) + 1;
                        p_lang_label.attr('tabindex', tabindex);
                    }
                } else {
                    // Monobook & Modern
                    p_rs.find('h3').text('В других проектах');
                    if (!p_rs.find('div.pBody').length) {
                        $('<div>')
                            .addClass('pBody')
                            .append('<ul>')
                            .appendTo(p_rs);
                        p_rs_list = p_rs.find('ul');
                    }
                }

                var links = data.entities[i].sitelinks;
                addLink(p_rs_list, 'ویکی‌داده', 'wikidata', mw.config.get('wgWikibaseItemId'));
                $('#t-wikibase').hide();

                var claims = data.entities[i].claims;
                if (claims && claims.P373 && claims.P373[0] &&
                    claims.P373[0].mainsnak.datavalue
                ) {
                    var cat_name = claims.P373[0].mainsnak.datavalue.value;
                    addLink(p_rs_list, 'ویکی‌انبار', 'commons', 'Category:' + cat_name);
                }

                for (var proj in links) {
                    if (proj == 'commonswiki') {
                        if (!p_rs_list.find('.interwiki-commons').length) {
                            addLink(p_rs_list, 'ویکی‌انبار', 'commons', links[proj].title);
                        }
                    }
                    else if (proj == 'fawikisource') {
                        addLink(p_rs_list, 'ویکی‌نبشته', 'wikisource', links[proj].title);
                    }
                    else if (proj == 'fawikiquote') {
                        addLink(p_rs_list, 'ویکی‌گفتاورد', 'wikiquote', links[proj].title);
                    }
                }

                if (p_rs_list.children().length) {
                    p_rs.insertBefore(p_lang);
                }
            }
        }
    });
};

$.when(
  $.ready,
  mw.loader.using('mediawiki.util')
).done(addRelatedSites);