User:Anne drew Andrew and Drew/gigawatch.js

/* Watch/unwatch all pages (up to 500) in a category */// @param maxPages Number of pages to watch/unwatch// @param act Action: watch or unwatchfunction watchPages(maxPages, act) {    // Make the ajax request to fetch category members    $.ajax({        url: mw.util.wikiScript('api'),        data: {            action: 'query',            list: 'categorymembers',            format: 'json',            cmtitle: mw.config.get('wgPageName'),            formatversion: 2,            cmprop: 'title',            cmtype: 'page',            cmlimit: maxPages        },        success: function (data) {            const categoryMembers = data.query.categorymembers;            // Check if we got anything            if (!categoryMembers) {                console.log('none found');            } else {                let result = [];                for (let i = 0; i < categoryMembers.length; i++) {                    result.push(categoryMembers[i].title);                }                const api = new mw.Api();                const apiCalls = [];                // Post the watch request                while (result.length) {                    const sliced = result.slice(0, 50);                    apiCalls.push(api.postWithToken('watch', {                        action: 'watch',                        titles: sliced.join('|'),                        formatversion: 2,                        format: 'json',                        ...(act === 'unwatch' && { unwatch: 'true' })                    }));                    result = result.slice(50);                }                Promise.all(apiCalls).then(() => {                    alert("Done!");                    if (act === 'watch') {                        $('#gigawatch').addClass('watched');                    }                    else {                        $('#gigawatch').removeClass('watched');                    }                });            }        }    });}$(document).ready(function () {    if (mw.config.get('wgCanonicalNamespace') == 'Category') {        $('#p-cactions').find('ul').append(            "<li><a title=\"Watch all pages in this category\" href=\"#\" id=\"gigawatch\">Watch all</a></li>\n"        );        $('#gigawatch').click(function () {            const maxPages = 500;            if ($('#gigawatch').hasClass('watched')) {                if (confirm('Are you sure you want to unwatch all pages in this category? (Restricted to top 500 pages only)')) {                    watchPages(maxPages, 'unwatch');                }            } else {                if (confirm('Are you sure you want to watch all pages in this category? (Restricted to top 500 pages only)')) {                    watchPages(maxPages, 'watch');                }            }        });    }});