コンテンツにスキップ

英文维基 | 中文维基 | 日文维基 | 草榴社区

利用者:にょきにょき/強化記事推薦済みチェック.js

お知らせ: 保存した後、ブラウザのキャッシュをクリアしてページを再読み込みする必要があります。

多くの WindowsLinux のブラウザ

  • Ctrl を押しながら F5 を押す。

Mac における Safari

  • Shift を押しながら、更新ボタン をクリックする。

Mac における ChromeFirefox

  • Cmd Shift を押しながら R を押す。

詳細についてはWikipedia:キャッシュを消すをご覧ください。

////// Wikipedia:メインページ強化記事投票所の推薦項目について
////// Wikipedia:最近大幅加筆された記事において推薦済みになっているか確認するスクリプト
//
// このスクリプトはWikipedia:メインページ強化記事投票所およびWikipedia:メインページ強化記事投票所/項目候補で機能します。
// Wikipedia:メインページ新着投票所では機能しません。仕様です。
//
////// 利用方法:
// 利用者のcommon.jsに
// mw.loader.load( '//ja-two.iwiki.icu/w/index.php?title=このスクリプトのある場所/このスクリプトの名前&action=raw&ctype=text/javascript' );
// と、してください。
// 利用者:にょきにょき/強化記事推薦済みチェック.jsに存在すると思いますので、
// mw.loader.load( '//ja-two.iwiki.icu/w/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85:%E3%81%AB%E3%82%87%E3%81%8D%E3%81%AB%E3%82%87%E3%81%8D/%E5%BC%B7%E5%8C%96%E8%A8%98%E4%BA%8B%E6%8E%A8%E8%96%A6%E6%B8%88%E3%81%BF%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF.js&action=raw&ctype=text/javascript' );
// で、OKなはずです(長い…)。
//
// このスクリプトはWikipedia:メインページ強化記事投票所を表示するたびに、Wikipedia:最近大幅加筆された記事をチェックしにいきますので、
// あなたのコンピューターやネットワークに負担がかかります。また、ウィキペディアのサーバーにも負荷がかかりますのでこの点はご留意ください。
// なお、現時点でのメディアウィキおよび、強化記事投票所の仕様を元に制作していますので、仕様が変わると動作しません。

(function($){
    function Page(title) {
        this.title = title;
        this.escapedTitle = title.replace(/[\\\*\+\.\?\{\}\(\)\[\]\^\$\-\|\/]/g, '\\$&')
                                 .replace(/[ _]/, '[ _]');
        this.listed = false;
        this.checked = false;
    }

    function getContentFromJSON(data) {
        var pageid = Object.keys(data.query.pages)[0];
        return data.query.pages[pageid].revisions[0]['*'];
    }

    function getArticles() {
        var articles = [];
        $('h3 > span.mw-headline > a').each(function() {
            articles.push(new Page(this.title));
        });
        return articles;
    }

    function getPageContent(pagename) {
        var deferred = new $.Deferred();
        $.getJSON('/w/api.php', {
            action: 'query',
            prop: 'revisions',
            rvprop: 'content',
            format: 'json',
            titles: pagename,
        })
         .done(function(data) {
            deferred.resolve(getContentFromJSON(data));
        })
         .fail(function() {
            // Need some code here.
        });
        return deferred.promise();
    }

    function putResult(pages) {
        var i;
        var img = $('<img>').attr({ // テンプレート
            height: '14px',
            width: '14px',
        });
        for(i=0; i<pages.length; i++) {
            var e = $("h3 > span.mw-headline > a[title = '" + pages[i].title + "'").parent();
            if(pages[i].listed === false) {
                e.append(img.clone().attr({
                    src: '//upload.wikimedia.org/wikipedia/commons/c/c4/Ambox_blue_question.svg',
                    title: 'この記事は最近大幅加筆された記事に掲載されていません。',
                }));
            } else {
                if(pages[i].checked) {
                    e.append(img.clone().attr({
                        src: '//upload.wikimedia.org/wikipedia/commons/f/fb/Yes_check.svg',
                        title: 'この記事は最近大幅加筆された記事においてチェック済みです。',
                    }));
                } else {
                    e.append(img.clone().attr({
                        src: '//upload.wikimedia.org/wikipedia/commons/b/ba/Red_x.svg',
                        title: 'この記事は最近大幅加筆された記事に掲載済みですが、チェックが未記入です。',
                    }));
                }
            }
        }
    }

    function checkListSubpages(pages, data) {
        var i;
        for(i=0; i<pages.length; i++) {
            var re = new RegExp('\\{\\{\\s*加筆報告\\s*\\|\\s*' + pages[i].escapedTitle + '\\s*\\|[^\\n]*');
            if(re.exec(data)) {
                pages[i].listed = true;
                if(RegExp.lastMatch.match(/\{\{レ(\|14)?\}\}/)) {
                    pages[i].checked = true;
                }
            }
        }
    }

    function check_kahitu_list(pages) {
        getPageContent('Wikipedia:最近大幅加筆された記事').done(function(data) {
            var subpageRe = new RegExp('\\{\\{(/\\d+年)\\}\\}', 'g');  //{{/数字年}}(例:{{/2016年}})を探す。
            var subpages =[];
            var match;
            var checker = function(data) {
                checkListSubpages(pages, data);
            };
            while(match = subpageRe.exec(data)) {
            // {{/2016年}}と{{/2015年}}が同時に掲載されている状況も考慮しておく。
                subpages.push(getPageContent('Wikipedia:最近大幅加筆された記事' + match[1]).done(checker));
            }
            $.when.apply(null, subpages).done(function() {
                putResult(pages);
            });
        });
    }

    if(mw.config.get('wgPageName') === 'Wikipedia:メインページ強化記事投票所/項目候補' ||
       mw.config.get('wgPageName') === 'Wikipedia:メインページ強化記事投票所') {
            check_kahitu_list(getArticles());
    }
})(jQuery);