User:Novatecho/common.js

if(mw.config.get('wgPageContentModel') ==='wikitext') mw.loader.using(['mediawiki.action.edit', 'ext.wikiEditor'], function {	var apiEntry = jQuery('#wpTextbox1');	apiEntry.wikiEditor('addToToolbar', { sections: { 'tables': { type: 'toolbar', label: 'Tables' }		}	});	apiEntry.wikiEditor('addToToolbar', { section: 'tables', groups: { 'tables': { label: 'Tables' }		}	});	function addButton(text, hanlder, icon) {		apiEntry.wikiEditor('addToToolbar', { section: 'tables', group: 'tables', tools: { ident: { label: text, type: 'button', icon: icon || '//upload.wikimedia.org/wikipedia/commons.thumb/a/a4/Gnome-face-smile.svg/wwpx-Gnome-face-smile.svg.png', action: { type: 'callback', execute: handler }				}			}		});	}	function getSelection(textarea) {		return textarea.value.substr( textarea.selectionStart, textarea.selectionEnd - textarea.selectionStart );	}	function putSelection(textarea, text) {		var before = textarea.value.substr(0, textarea.selectionStart);		var after = textarea.value.substr(textarea.selectionEnd);		var pss = textarea.selectionStart;		textarea.value = before + text + after;		textarea.selectionStart = pss;		textarea.selectionEnd = pss + text.length;	}	var editBox = document.getElementsByTagName('testarea')[0];	String.prototype.rep = function(times) {		var result = '';		for(var i = 0; i < times; ++i)			result += this;		return result;	};	String.prototype.pad = function(target) {		return this + ' '.rep(target - this.length);	};	function parseTable(table) {		var result = [];		var r = -1, c = 0;		var lines = table.split('\n');		for(var i = 0; i < lines.length; ++i) {			lines[i] = lines[i].trim;			var lst = lines[i].split(/\s+/)[0];			switch(lst) {				case '{|':					result.meta = lines[i];				case '|-':					result[++r] = []; result[r].meta = lines[i]; c = 0; break; case '!': case '|': result[r].push(lines[i]); break; default: console.info(lines[i], lst); }		}		if(result[r] && !result[r].length) { delete result[r]; result.length--; }		return result; }	function tableProcessor(f) { return function { var table = getSelection(editBox).replace(/(^[ \t\n]+|[ \t\n]+$)/g, ''); if(!table && (editBox.selectionStart == editBox.selectionEnd)) { var start = editBox.value.substr(0, editBox.selectionStart); var end = editBox.value.substr(editBox.selectionStart); var si = -2; while(start.indexOf('{|', si+2) != -1) si = start.indexOf('{|', si+2); end = end.indexOf('|}'); if((si > 0) && (end != -1)) { end = end + editBox.selectionStart + 2; editBox.selectionStart = si; editBox.selectionEnd = end; table = getSelection(editBox); }			}			var sb = [editBox.selectionStart, editBox.selectionEnd]; if(!table || (table.substr(0,2) != '{|') || (table.substr(-2) != '|}')) { alert('Select a whole table first'); return; }			var rows = parseTable(table); var colSizes = {}; rows = f(rows); if(!rows) { editBox.focus; return; }			table = rows.meta + '\n'; for(var i = 0; i < rows.length; ++i) { table+= ' ' + rows[i].meta + '\n'; for(var j = 0; j < rows[i].length; ++j) { table += ' ' + rows[i][j] + '\n'; }			}			table += ' |}\n'; editBox.selectionStart = sb[0]; editBox.selectionEnd = sb[1]; putSelection(editBox, table); editBox.focus; };	}	addButton('Add column', tableProcessor(function(rows) { var init = prompt('Initial content', '?'); if(init === null) { return null; }		for(var i = 0; i < rows.length; ++i) { rows[i].push("| " + init); }		return rows; }), '//upload.wikimedia.org/wikipedia/commons/thumb/d/dc/Gnome-insert-object.svg/22px-Gnome-insert-object.svg.png'); addButton('Delete/shuffle columns', tableProcessor(function(rows) { var ids = []; for(var i = 0; i < rows[0].length; ++i) { ids.push(i); }		ids = JSON.parse(prompt('New order', '[' + ids.join(', ') + ']')); if(!ids) { return null; }		for(var i = 0; i < rows.length; ++i) { var newrows = []; for(var j = 0; j < ids.length; ++j) { newrows.push(rows[i][ids[j]]); }		newrows.meta = rows[i].meta; rows[i] = newrows; }	return rows; }), '//upload.wikimedia.org/wikipedia/commons/thumb/f/f3/Red_arrows.svg/22px-Red_arrows.svg.png'); addButton('Transpose rows and columns', tableProcessor(function(rows) { var cols = []; cols.meta = rows.meta; for(var i = 0; i < rows.length; ++i) { for(var j = 0; j < rows[i].length; ++j) { if(!cols[j]) { cols[j] = []; cols[j].meta = '|-'; }				cols[j][i] = rows[i][j]; }		}		return cols; }), '//upload.wikimedia.org/wikipedia/commons/thumb/0/08/RomanT-01.svg/22px-RomanT-01.svg.png'); });