MediaWiki:Gadget-RelatedArticles.js

Материал из rock63.ru
Перейти к: навигация, поиск

Замечание. Возможно, после сохранения вам придётся очистить кэш своего браузера, чтобы увидеть изменения.

  • Firefox / Safari: Удерживая клавишу Shift, нажмите на панели инструментов Обновить либо нажмите Ctrl-F5 или Ctrl-R (⌘-R на Mac)
  • Google Chrome: Нажмите Ctrl-Shift-R (⌘-Shift-R на Mac)
  • Internet Explorer: Удерживая Ctrl, нажмите Обновить либо нажмите Ctrl-F5
  • Opera: Перейдите в Menu → Настройки (Opera → Настройки на Mac), а затем Безопасность → Очистить историю посещений → Кэшированные изображения и файлы
mw.loader.using('ext.cards').done(function() {
    var api = api = new mw.Api(),
        gateway = new mw.cards.CardsGateway({api: api});

    var relatedArticles = [],
        articleTitles = [];

    $('.firstHeading').each(function() {
        articleTitles.push($(this).text());
    });

    api.get({
        action: 'query',
        prop: 'linkshere',
        titles: articleTitles.join('|'),
        lhshow: '!redirect',
        lhnamespace: [0].join('|'),
        formatversion: 2
    }).done(function(data) {
        if (data.query && data.query.pages) {
            $.map(data.query.pages, function(page) {
                if (page.linkshere) {
                    $.map(page.linkshere, function(linkhere) {
                        relatedArticles.push(linkhere.title);
                    });
                }
            });
        }

        if (relatedArticles.length) {
            relatedArticles.sort(function() {
                return 0.5 - Math.random()
            });
            if (relatedArticles.length > 3) {
                relatedArticles = relatedArticles.slice(0, 3);
            }
            gateway.getCards(relatedArticles, 200).done(function(cards) {
                var $body = $('#mw-content-text'),
                    $header = $('<h2/>', {
                        text: 'Связанные страницы'
                    });
                $body.append($header);
                $body.append(cards.$el);
            });
        }
    });
});