コンテンツにスキップ

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

「利用者:Dragoniez/scripts/WatchAll.js」の版間の差分

削除された内容 追加された内容
WatchAll v1.0
(相違点なし)

2022年2月17日 (木) 22:46時点における版

/**********************
 * WatchAll
 * Author: Dragoniez
 * Version: 1.0
 **********************/
//<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;
            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, 49).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>