Leaguepedia | League of Legends Esports Wiki
Advertisement

CSS and Javascript changes must comply with the wiki design rules.


Note: After saving, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Clear the cache in Tools → Preferences
$( function () {
	if(mw.config.get('wgTitle') != 'Gadgets-definition') {
		return;
	}
	
	var splitText = '\n<!-- START SYNC -->';
	var newText;
	var cw = 0;
	var thisWiki = mw.config.get('wgServerName');
	var pages = []; // will be actual page list
	
	var getGDContents = function(apipath) {
		return apipath.get({
			action:'query',
			prop:'revisions',
			rvprop:'content',
			rvlimit:1,
			titles:'MediaWiki:Gadgets-definition'
		}).then(function(data){
			var gdtext;
			if (data.query.pages['-1'] != undefined) {
				gdtext = '';
			}
			else {
				for (p in data.query.pages) { // loop of one thing
					gdtext = data.query.pages[p].revisions[0]['*'];
				}
			}
			return gdtext;
		}, function(code, data) {
			return 'Could not get data. Reason: ' + code;
		});
	}
	
	var updateGDPage = function() {
		if (cw == allWikis.length) {
			cw = 0;
			return $.Deferred().resolve();
		}
		if (allWikis[cw]+".fandom.com" == thisWiki) { 
			cw++;
			return updateGDPage();
		}
		var fa = new mw.ForeignApi("https://"+allWikis[cw]+".fandom.com/api.php");
		return getGDContents(fa).then(function(gdtext) {
			var oldtext = gdtext.split(splitText)[0];
			return fa.postWithToken('csrf', {
				action:'edit',
				title:'MediaWiki:Gadgets-definition',
				text:oldtext + splitText + newText
			}).then(function() {
				console.log('Saved gadget definition page on wiki ' + allWikis[cw]);
				cw++;
				return updateGDPage();
			}, function(code, data) {
				console.log('Saving gadget page failed on wiki ' + allWikis[cw] + ', reason: ' + code);
				cw++;
				return updateGDPage();
			});
		}, function(error) {
			console.log(error);
			cw++;
			return updateGDPage();
		});
	}
	
	$(mw.util.addPortletLink(
		'p-cactions',
		'javascript:;',
		'!Sync Gadgets',
		'ca-sync-gadgets',
		'Sync Gadgets'
	)).click(function() {
		if (! confirm('Proceed? Check console to see progress. It will take a while.')) {
			return;
		}
		var gadgets = []; // gadgets without Mediawiki:Gadget- prefix
		var a = new mw.Api();
		getGDContents(a).then(function(gdtext) {
			newText = gdtext.split(splitText)[1];
			lines = newText.split('\n');
			for (l in lines) {
				line = lines[l];
				// ignore lines that are comments or headings
				if (line.charAt(0) == '*') {
					gadgets.push(line.match(/\* (\w+)/)[1]);
					var regex = /\|(\w*\.(?:css|js))/g;
					while (matches = regex.exec(line)) {
						gadgets.push(matches[1]);
					}
				}
			}
			for (g in gadgets) {
				pages.push('MediaWiki:Gadget-' + gadgets[g]);
			}
		})
		.then(updateGDPage)
		.then(function() {
			syncPages(pages, 'Automatically syncing global gadgets across wikis');
		})
		.fail(function(error) {
			console.log(error);
		});
	});
	return;
});
Advertisement