User:Suffusion of Yellow/autowatch.js

/* * Temporarily add pages linked from the Main Page to your watchlist. */ // //jshint esversion:8, esnext:false (function {	'use strict';

const storageKey = "AutoWatchLastChecked"; const pages = window.autoWatchPages || [ { title: "Main Page", expiryMin: 3600 * 24, expiryMax: 3600 * 36, checkInterval: 900, namespaces : "0" }	];

async function autoWatch(sourcePage) { let response = await (new mw.Api).get( {			action: "query",			titles: sourcePage.title,			generator: "links",			redirects: true,			gpllimit: "max",			gplnamespace: sourcePage.namespaces,			prop: "info",			inprop: "watched",			curtimestamp: true		});

// Use server time instead of Date.now in case our clock is wrong let now = Date.parse(response.curtimestamp);

let expiryMin = now + 1000 * sourcePage.expiryMin; let expiryMax = now + 1000 * sourcePage.expiryMax;

let toWatch = [];

for (let pageid in response.query.pages) { let page = response.query.pages[pageid];

// Ignore pages watched indefinitely if (page.watched !== undefined &&				page.watchlistexpiry == undefined) continue;

// Ignore pages watched for "long enough" if (page.watched !== undefined &&				Date.parse(page.watchlistexpiry) >= expiryMin) continue;

toWatch.push(page.title); }

for (let i = 0; i < toWatch.length; i += 50) { let response = await (new mw.Api).postWithToken("watch", {				action : "watch",				titles : toWatch.slice(i, i + 50).join("|"),				expiry : (new Date(expiryMax).toISOString)			}); }	}

async function autoWatchAll { let lastChecked;

try { lastChecked = JSON.parse(mw.storage.session.get(storageKey)) || { }; } catch(e) { lastChecked = { }; }

let now = Date.now; let updated = { };

for (let page of pages) { if (!lastChecked[page.title] ||				lastChecked[page.title] < now + 1000 * page.checkInterval ||				mw.config.get('wgPageName').replace(/_/g, ' ') == page.title) { await autoWatch(page); updated[page.title] = now; } else { updated[page.title] = lastChecked[page.title]; }		}

mw.storage.session.set(storageKey, JSON.stringify(updated)); }

mw.loader.using(["mediawiki.storage", "mediawiki.api"]).then(autoWatchAll); }); //