MediaWiki:Gadget-refreshOverview.js

// $(function {		var dataDiv = document.getElementById('data-ns-pageinfo');	if (! dataDiv) return;	var $dataDiv = $(dataDiv);	var overviewPage = $dataDiv.attr('data-overviewpage');	// add refresh data link	$(mw.util.addPortletLink('p-views', 'javascript:;', 'Refresh Overview', 'ca-refresh-overview', 'Refresh event overview page')).click(function { var a = new mw.Api; function refreshPage(page) { if (! overviewPage) { return $.Deferred.resolve; }			return a.postWithToken('csrf', {				action : 'purge',				titles : page			}).then(function(data){				console.log('refreshed');				return page;			}, function(code, data){				console.log(code);				statuscolor = 'gadget-action-fail';				return page;			}); }		function blankEditPage(page) { // currently we aren't actually using this, hopefully that's k			return a.postWithToken('csrf',{				action : 'edit',				title : page,				appendtext : ''			}).then(function(data) {				console.log('blank edited');			}, raiseError); }		function getWikitext { if (! page ) return $.Deferred.resolve; return a.postWithToken('csrf',{				action : 'expandtemplates',				prop : 'wikitext',				text : ''			}).then(function(data) {				console.log('got wikitext from ' + template);				return data.expandtemplates.wikitext;			}, raiseError); }		function saveWikitext(wikitext) { if (! wikitext) { console.log('wikitext was empty'); return $.Deferred.resolve; }			console.log('saving wikitext...'); return a.postWithToken('csrf',{				action : 'edit',				title : page,				text : wikitext,				summary : 'Auto update via Refresh Overview',				tags: 'refresh_overview'			}).then(function(data) {				console.log('saved wikitext to ' + page);			}, raiseError); }		function getPBData { if (! $dataDiv.attr('data-pickban')) return $.Deferred.resolve; console.log('Fetching Pick/Ban Data...'); return a.get({				action : 'parse',				text : '',				prop : 'text'			}).then(function(data) {				var str = data.parse.text['*'];				console.log(str);				var tbl1 = str.split('*****');				str = tbl1[1];				console.log(str);				var tbl = str.split(';');				for (game in tbl) {					tbl[game] = tbl[game].split(',');				}				return tbl;			}); }		function updatePB(tbl) { console.log('updatepb'); if (! tbl || tbl.length == 0 || tbl[0] == '') { console.log('No PB to update'); return $.Deferred.resolve; }			var game = tbl.shift; var page = game[0]; var templatesToChange = [ makeGameDict(game) ]; while (tbl.length > 0 && tbl[0][0] == page) { templatesToChange.push(makeGameDict(tbl.shift)); }			return a.get({				action : 'query',				prop : 'revisions',				titles : page,				rvprop : 'content'			}).then(function(data) {				var content;				for (p in data.query.pages) {					content = data.query.pages[p].revisions[0]["*"];				}				var listOfTemplates = content.split(/\{\{PicksAndBans(?!\/)/);				for (i in templatesToChange) {					var thisgame = templatesToChange[i];					// don't have to offset by 1 because the first one (0) is before any template					var template = listOfTemplates[thisgame.N];					template = template.replace(/\|team1score=\s*\|/, '|team1score=' + thisgame.score1 + ' |')					template = template.replace(/\|team2score=\s*\|/, '|team2score=' + thisgame.score2 + ' |')					template = template.replace(/\|winner=(\s*)\|/,'|winner=' + thisgame.winner + ' $1|');					listOfTemplates[thisgame.N] = template;					if (thisgame.bestof && thisgame.serieswinner) {						deleteExtraGames(listOfTemplates, thisgame); }				}				var text = listOfTemplates.join('{{PicksAndBans'); text = text.replace(/\{\{PicksAndBansDELETE/g,''); return a.postWithToken('csrf', {					action : 'edit',					title : page,					text : text,					summary : 'Updating pick-ban results via RefreshOverview',					tags: 'refresh_overview'				}).then(function(data) {					return updatePB(tbl);				}, raiseError); }, raiseError);		}		function raiseError(code, data) {			console.log(code);			statuscolor = 'gadget-action-fail';			return $.Deferred.reject(code);		}		function makeGameDict(game) {			return {				N : parseInt(game[1]),				score1 : game[2],				score2 : game[3],				winner : game[4],				bestof : parseInt(game[5]),				serieswinner : parseInt(game[6])			}		}		function deleteExtraGames(listOfTemplates, thisgame) {			var score1 = parseInt(thisgame.score1);			var score2 = parseInt(thisgame.score2);			score1 = score1 ? score1 : 0;			score2 = score2 ? score2 : 0;			if (Math.max(score1, score2) > thisgame.bestof / 2) {				for (j = 1; j <= thisgame.bestof - score1 - score2; j++) {					var indexToDelete = thisgame.N + j;					var templateToDelete = listOfTemplates[indexToDelete];					if (templateToDelete.match(/game1\s*=\s*Yes/i)) {						console.log("Won't delete " + indexToDelete + " because it contains a game 1"); }					else { console.log('Will delete ' + indexToDelete); templateToDelete = templateToDelete.replace(/[^\}]*\}\}/,'DELETE'); listOfTemplates[indexToDelete] = templateToDelete; }				}			}		}		clearDisplayColor('ca-refresh-overview'); // make sure to include : before the template name in the attr if needed var template = $dataDiv.attr('data-template-link'); var page = $dataDiv.attr('data-page-link'); var statuscolor = 'gadget-action-success'; refreshPage(overviewPage) //.then(blankEditPage) .then(getWikitext) .then(saveWikitext) .then(getPBData) .then(updatePB) .then(function {			console.log('Done!');			displayColor(statuscolor, 'ca-refresh-overview');		}) .fail(function(code) {			console.log('failed rip');			if (code) console.log(code);			displayColor(statuscolor, 'ca-refresh-overview');		}); }); }); //