利用者:Dragoniez/scripts/WatchAll.js

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

多くの WindowsLinux のブラウザ

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

Mac における Safari

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

Mac における ChromeFirefox

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

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

/**********************
 * WatchAll
 * Author: Dragoniez
 * Version: 1.1
 **********************/
//<nowiki>
$(function(){

    const SPN = mw.config.get('wgCanonicalSpecialPageName');
    if (SPN === 'Contributions' || SPN === 'Log') {

        $(mw.util.addPortletLink('p-cactions', '#', 'ウォッチ', 'ca-wa', '(投稿)記録にあるページを全てウォッチリストに追加', null, '#ca-move'))
        .click(function(e){
            
            e.preventDefault();
            
            let $pageLinkSelector;
            if (SPN === 'Contributions') {
                $pageLinkSelector = $('.mw-contributions-title');
            } else if (SPN === 'Log') {
                $pageLinkSelector = $('.mw-changeslist-links').nextAll('a');
            }

            let pages = [];
            $pageLinkSelector.each(function(index, obj) {
                if ($.inArray($(obj).text(), pages) === -1) {
                    pages.push($(obj).text().replace(/\({1}(管|ビ|ス|CU|OS|オ|削|巻|イ|フ)\){1}/g, ''));
                }
            });
            let pagesCnt = pages.length;
            if (pagesCnt === 0) {
                alert('このページにはウォッチリストに登録可能なページへのリンクがありません');
                return;
            }
            console.log(pages);
            
            async function getWatchToken() {
                return new Promise(function(resolve, reject) {
                    new mw.Api().get({
                        'action': 'query',
                        'format': 'json',
                        'meta': 'tokens',
                        'type': 'watch'
                    }).then(function(res){
                        if (res && res.query && res.query.tokens) {                            
                            resolve(res.query.tokens.watchtoken);
                        } else {
                            resolve(undefined);
                        }
                    }).catch(function(){
                        resolve(undefined);
                    });
                });
            }

            function addToWatchlist(token) {
                $.ajax({
                    'url': mw.util.wikiScript('api'),
                    'data': {
                        'format': 'json',
                        'action': 'watch',
                        'titles': pages.slice(0, 50).join('|'),
                        'token': token
                    },
                    'dataType': 'json',
                    'type': 'POST',
                    success: function() {
                        if (pages.length > 50) {
                            pages.splice(0, 50);
                            addToWatchlist(token);
                        } else {
                            alert(pagesCnt + 'ページをウォッチリストに追加しました');
                        }
                    }
                });
            }

            async function execute() {
                let token = await getWatchToken();
                addToWatchlist(token);
            }

            execute();
            
        });
    }
});
//</nowiki>