text:
User:Anas1712/common.js

/** See talk page for details **/

//JsMwApi documentation is at http://en.wiktionary.org/wiki/User_talk:Conrad.Irwin/Api.js function JsMwApi (api_url, request_type) {

if (!api_url) {		if (typeof(true) === 'undefined' || true == false) throw "Local API is not usable.";

api_url = wgScriptPath + "/api.php"; }

if (!request_type) {		if (api_url.indexOf('http://') == 0 || api_url.indexOf('https://') == 0) request_type = "remote"; else request_type = "local"; }	function call_api (query, callback) {		if(!query || !callback) throw "Insufficient parameters for API call";

query = serialise_query(query);

if(request_type == "remote") request_remote(api_url, query, callback, call_api.on_error || default_on_error); else request_local(api_url, query, callback, call_api.on_error || default_on_error);

}

var default_on_error = JsMwApi.prototype.on_error || function (xhr, callback, res) {		if (typeof(console) != 'undefined') console.log([xhr, res]);

callback(null); }

function get_xhr {		try{ return new XMLHttpRequest; }catch(e){ try { return new ActiveXObject("Msxml2.XMLHTTP"); }catch(e){ try { return new ActiveXObject("Microsoft.XMLHTTP"); }catch(e){ throw "Could not create an XmlHttpRequest"; }}}	}

function request_local (url, query, callback, on_error) {		var xhr = get_xhr;

xhr.open('POST', url + '?format=json', true); xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xhr.send(query); xhr.onreadystatechange = function {			if (xhr.readyState == 4) {				var res; if (xhr.status != 200) res = {error: { code: '_badresponse', info: xhr.status + " " + xhr.statusText }};				else {					try {						res = JSON.parse("("+xhr.responseText+")"); }					catch(e) {						res = {error: { code: '_badresult', info: "The server returned an incorrectly formatted response" }};					}				}				if (!res || res.error || res.warnings) on_error(xhr, callback, res); else callback(res); }		}	}

function request_remote (url, query, callback, on_error) {		if(! window.__JsMwApi__counter) window.__JsMwApi__counter = 0;

var cbname = '__JsMwApi__callback' + window.__JsMwApi__counter++;

window[cbname] = function (res) {			if (res.error || res.warnings) on_error(null, callback, res); else callback(res); }

var script = document.createElement('script'); script.setAttribute('type', 'text/javascript'); script.setAttribute('src', url + '?format=json&callback=window.' + cbname + '&' + query); document.getElementsByTagName('head')[0].appendChild(script); }

function serialise_query (obj) {		var amp = ""; var out = ""; if (String(obj) === obj) {			out = obj; }		else if (obj instanceof Array) {			for (var i=0; i < obj.length; i++) {				out += amp + serialise_query(obj[i]); amp = (out == '' || out.charAt(out.length-1) == '&') ? '' : '&';			}		}		else if (obj instanceof Object) {			for (var k in obj) {				if (obj[k] === true) out += amp + encodeURIComponent(k) + '=1'; else if (obj[k] === false) continue; else if (obj[k] instanceof Array) out += amp + encodeURIComponent(k) + '=' + encodeURIComponent(obj[k].join('|')); else if (obj[k] instanceof Object) throw "API parameters may not be objects"; else out += amp + encodeURIComponent(k) + '=' + encodeURIComponent(obj[k]); amp = '&'; }		}		else if (typeof(obj) !== 'undefined' && obj !== null) {			throw "An API query can only be a string or an object"; }		return out; }

// Make JSON.parse work var JSON = (typeof JSON == 'undefined' ? new Object : JSON);

if (typeof JSON.parse != 'function') JSON.parse = function (json) { return eval('(' + json + ')'); };

// Allow .prototype. extensions if (JsMwApi.prototype) {		for (var i in JsMwApi.prototype) {			call_api[i] = JsMwApi.prototype[i]; }	}	return call_api; }

JsMwApi.prototype.page = function (title) {

function call_with_page (params, callback) {		call_with_page.api([params, {title: title, titles: title}], callback); }

call_with_page.api = this;

call_with_page.edit = function (params, edit_function) {		if (typeof(params) == 'function') {			edit_function = params; params = null; }		params = [params, { action: "query", prop: ["info", "revisions"], intoken: "edit", rvprop: ["content", "timestamp"] }];

call_with_page(params, function (res)		{			if (!res || !res.query || !res.query.pages)				return edit_function(null);

// Get the first (and only) page from res.query.pages for (var pageid in res.query.pages) break; var page = res.query.pages[pageid];

var text = page.revisions ? page.revisions[0]['*'] : '';

function save_function (ntext, params, post_save) {				if (typeof(params) == 'function') {					post_save = params; params = null; }				params = [params, { action: "edit", text: ntext, token: page.edittoken, starttimestamp: page.starttimestamp, basetimestamp: (page.revisions ? page.revisions[0].timestamp : false) }];

call_with_page(params, post_save); }

edit_function(text, save_function, res);

});	}

call_with_page.parse = function (to_parse, callback) {		if (typeof to_parse == "function") {			callback = to_parse; to_parse = null; }		var params = (to_parse == null ? {page: title} : {title: title, text: to_parse});

call_with_page.api([{action: "parse", pst: true}, params], function (res)		{			if (!res || !res.parse || !res.parse.text)				callback(null, res);			else				callback(res.parse.text['*'], res);		}) }

call_with_page.parseFragment = function (to_parse, callback) {		call_with_page.parse(" \n" + to_parse + " ", function (parsed, res)		{			callback(parsed ? parsed.replace(/^ \n?/,).replace(/(\s*\n)?<\/div>\n*(\s*)?$/,) : parsed, res);		}) }

return call_with_page; } /** * Storage of "string" preferences. */ function CookiePreferences (context) {	//Repeated calls with the same context should get the same preferences object. if (arguments.callee[context]) return arguments.callee[context]; else arguments.callee[context] = this;

/**	 * Change the value of a preference and store into a cookie. */	this.set = function (name, value) {		if (value === null || storage[name] === value) return; storage[name] = value; updateCookie; }

/**	 * Get the value of a preference from the cookie or default *	 * If the preference isn't set, return the second argument or undefined. */	this.get = function (name, def) {		if (storage[name]) return storage[name]; else if (defaults[name]) return defaults[name]; else return def; }

/**	 * let the default for get(name) be value for this session */	this.setDefault = function(name, value) {		defaults[name] = value; }

var storage = {}; var defaults = {};

// Save storage into the cookie. function updateCookie {		var value = ""; for (var name in storage) {			value += '&' + encodeURIComponent(name) + "=" + encodeURIComponent(storage[name]); }

setCookie('preferences' + context, value) }	// Load storage from the cookie. // NOTE: If you wish to update the cookie format, both loading and storing // must continue to work for 30 days. function updateStorage {		var value = getCookie('preferences' + context, value) || ''; var pairs = value.split('&');

for (var i=1; i < pairs.length; i++) {			var val = pairs[i].split('=');

if (storage[val[0]] === val[1]) continue;

storage[val[0]] = val[1]; }	}

//__init__ updateStorage; } /** * A generic page editor for the current page. * * This is a singleton and it displays a small interface in the top left after * the first edit has been registered. * * @public * this.page * this.addEdit * this.error * */ function Editor {	//Singleton if (arguments.callee.instance) return arguments.callee.instance else arguments.callee.instance = this;

// @public - the JsMwApi object for the current page this.page = JsMwApi.page(wgPageName);

// get the current text of the article and call the callback with it // NOTE: This function also acts as a loose non-re-entrant lock to protect currentText. this.withCurrentText = function(callback) {		if (callbacks.length == 0) {			callbacks = [callback]; for (var i=0; i 0) {			return callbacks.push(callback); }

callbacks = [callback]; thiz.page.edit(function (text, _save)		{			if (text === null)				return thiz.error("Could not connect to server");

currentText = originalText = text; saveCallback = _save;

for (var i=0; i<callbacks.length; i++) {				callbacks[i](currentText); }			callbacks = [];

});	}	// A decorator for withCurrentText	function performSequentially(f)	{		return (function {			var the_arguments = arguments; thiz.withCurrentText(function 			{				f.apply(thiz, the_arguments);			}); });	}

// add an edit to the editstack function addEdit(edit, node, fromRedo) {		withPresenceShowing(false, function 		{			if (node)			{				nodestack.push(node);				node.style.cssText = "border: 2px #00FF00 dashed;"			}

if (! fromRedo) redostack = [];

var ntext = false; try {				ntext = edit.edit(currentText);

if (ntext && ntext != currentText) {					edit.redo; currentText = ntext; }				else return false; }			catch (e) {				this.error("ERROR:" + e); }

editstack.push(edit); });	}	this.addEdit = performSequentially(addEdit);

// display an error to the user this.error = function (message) { 		if (!errorlog) {			errorlog = newNode('ul',{style: "background-color: #FFDDDD; margin: 0px -10px -10px -10px; padding: 10px;"}); withPresenceShowing(true, function (presence)			{				presence.appendChild(errorlog);			}); }		errorlog.appendChild(newNode('li', message)); }

var thiz = this; // this is set incorrectly when private functions are used as callbacks.

var editstack = []; // A list of the edits that have been applied to get currentText var redostack = []; // A list of the edits that have been recently undone. var nodestack = []; // A lst of nodes to which we have added highlighting var callbacks = {}; // A list of onload callbacks (initially .length == undefined)

var originalText = ""; // What was the contents of the page before we fiddled? var currentText = ""; // What is the contents now?

var saveCallback; // The callback returned by the api's edit function to save.

var errorlog; // The ul for sticking errors in. var savelog; // The ul for save messages.

//Move an edit from the editstack to the redostack function undo {		if (editstack.length == 0) return false; var edit = editstack.pop; redostack.push(edit); edit.undo;

var text = originalText; for (var i=0; i < editstack.length; i++) {			var ntext = false; try {				ntext = editstack[i].edit(text); }			catch (e) {				thiz.error("ERROR:" + e); }			if (ntext && ntext != text) {				text = ntext; }			else {				editstack[i].undo; editstack = editstack.splice(0, i); break; }		}		currentText = text; return true; }	this.undo = performSequentially(undo);

//Move an edit from the redostack to the editstack function redo {		if (redostack.length == 0) return; var edit = redostack.pop; addEdit(edit, null, true); }	this.redo = performSequentially(redo);

function withPresenceShowing(broken, callback) {		if (arguments.callee.presence) {			arguments.callee.presence.style.display = "block"; return callback(arguments.callee.presence); }

var presence = newNode('div',{'style':"position: fixed; top:0px; left: 0px; background-color: #00FF00; z-index: 10;padding: 30px;"}) //Fix fixed positioning for IE6/ /*@cc_on @if (@_jscript_version <= 5.6) presence.style.cssText = "position: absolute; top: expression((dummy = (document.documentElement.scrollTop || document.body.scrollTop || 0)) + 'px'); background-color: #00FF00; z-index: 10000; padding: 30px;" @end @*/		window.setTimeout(function {			presence.style.backgroundColor = "#CCCCFF";			presence.style.padding = "10px";		}, 400);

presence.appendChild(newNode('div',{'style':"position: relative; top:0px; left:0px; margin: -10px; color: #0000FF;cursor:pointer;", click:performSequentially(close)},"X")) document.body.insertBefore(presence, document.body.firstChild);

var contents = newNode('p', {style: 'text-align: center'},			newNode('b', "Page Editing"), newNode('br'));

if (!broken) {			contents.appendChild(newNode('button',"Save Changes", {'title':'Save your changes ['+mw.util.tooltipAccessKeyPrefix+'s]','accesskey':'s','click': save})); contents.appendChild(newNode('br')); contents.appendChild(newNode('button',"Undo", {'title':'Undo last change ['+mw.util.tooltipAccessKeyPrefix+'z]','accesskey':'z','click': thiz.undo})); contents.appendChild(newNode('button', "Redo", {'click':thiz.redo})); }		presence.appendChild(contents);

arguments.callee.presence = presence; callback(presence); }

// Remove the button function close {		while (undo) ;

withPresenceShowing(true, function (presence)		{			presence.style.display = "none";			if (errorlog)			{				errorlog.parentNode.removeChild(errorlog);				errorlog = false;			}		}); }

//Send the currentText back to the server to save. function save {		thiz.withCurrentText(function 		{			if (editstack.length == 0)				return;

var cleanup_callbacks = callbacks; callbacks = []; var sum = {}; for (var i=0; i<editstack.length; i++) {				sum[editstack[i].summary] = true; if (editstack[i].after_save) cleanup_callbacks.push(editstack[i].after_save); }			var summary = ""; for (var name in sum) {				summary += name + " "; }			editstack = []; redostack = []; var saveLi = newNode('li', 'Saving:' + summary + "..."); withPresenceShowing(false, function (presence)			{				if (! savelog)				{					savelog = newNode('ul', {style: "background-color: #DDFFDD; margin: 0px -10px -10px -10px; padding: 10px;"});					presence.appendChild(savelog);				}				savelog.appendChild(saveLi);

if (originalText == currentText) return thiz.error("No changes were made to the page.");

else if (!currentText) return thiz.error("ERROR: page has become blank."); });

originalText = currentText; var nst = [] var node; while (node = nodestack.pop) {				nst.push(node); }			saveCallback(currentText, {summary: summary + "(Assisted)"}, function (res)			{				if (res == null)					return thiz.error("An error occurred while saving.");

try { saveLi.appendChild(newNode('span', newNode('b', " Saved "), newNode('a', {'href': wgScript + 						'?title=' + encodeURIComponent(mw.config.get('wgPageName')) + 						'&diff=' + encodeURIComponent(res.edit.newrevid) +						'&oldid=' + encodeURIComponent(res.edit.oldrevid)}, "(Show changes)"))); }catch(e){ if (res.error) {						thiz.error("Not saved: " + String(res.error.info)); }					else {						thiz.error(newNode('p',String(e))); }				}

for (var i=0; i < nst.length; i++) nst[i].style.cssText = "background-color: #0F0;border: 2px #0F0 solid;";

window.setTimeout(function {					var node;					while (node = nst.pop)						node.style.cssText = "";				}, 400);

// restore any callbacks that were waiting for currentText before we started for (var i=0; i < cleanup_callbacks.length; i++) thiz.withCurrentText(cleanup_callbacks[i]); });		});	} }

var util = { getVanillaIndexOf: function (str, text, pos) {		if (!pos) pos = 0; var cpos = 0, tpos = 0, wpos = 0, spos = 0; do {			cpos = text.indexOf('', pos) + 3;

else if (pos == wpos) pos = text.indexOf(' ', pos) + 9;

else if (pos == tpos) //FIXME pos = text.indexOf('}}', pos) + 2;

} while (pos < Infinity) return -1; },

validateNoWikisyntax: function(field, nonempty) {		return function(txt, error) {			if(/[\[\{\|#\}\]]/.test(txt)) return error("Please don't use wiki markup ([]{}#|) in the " + field +"."); if(nonempty && !txt) return error("Please specify a " + field + "."); return txt; }	},

escapeRe: function(txt) {		return txt.replace(/([\\{}(\|)[\].?*+])/g, "\\$1"); },

// pos is a position in the line containing the gloss getWikitextGloss: function (txt, pos) {		var g_start = txt.lastIndexOf('\n{'+'{trans-top', pos) + 1; var g_end = txt.indexOf('\n', pos); var g_line = txt.substr(g_start, g_end - g_start); g_line = g_line.replace("{"+"{trans-top}}", "{"+"{trans-top|Translations}}"); return g_line.replace(/\{\{trans-top\|(.*)\}\}/, "$1"); },

// get [start_pos, end_pos] of position of wikitext for trans_table containing node in text getTransTable: function (text, node, recursive) {		var gloss = util.getTransGloss(node); var pos = 0; var transect = []; while(pos > -1) {			pos = util.getVanillaIndexOf('{'+'{trans-top', text, pos+1)	// }} if (pos > -1 && util.matchGloss(util.getWikitextGloss(text, pos), gloss)) {				transect.push(pos); }		}		if (transect.length > 1) {			var poss = transect; transect = []; for (var i=0; i 1 && !recursive) transect = util.tieBreakTransTable(text, transect, node); }		if (transect.length == 1) {			pos = transect[0]; pos = util.getVanillaIndexOf("\n", text, pos) + 1; var endpos = text.indexOf('{'+'{trans-bottom}}', pos); if (endpos > -1 && pos > 0) return [pos, endpos]; }

return false; },

// try to narrow down the correct poss if multiple matching trans tables tieBreakTransTable: function (text, poss, node) {		if (node.nodeName.toLowerCase == 'div') {			while (node && !(node.className && node.className.indexOf('NavFrame') > -1)) node = node.parentNode;

var nodes = node.getElementsByTagName('table'); if (! nodes.length) return poss;

node = nodes[0]; }		else {			while (node && node.nodeName.toLowerCase != 'table') node = node.parentNode; }

var tables = document.getElementsByTagName('table'); var before_count = 0; var after_count = 0; var is_found = false; for (var i=0; i < tables.length; i++) {			if (tables[i].className.indexOf('translations') >= 0) {				var gloss = util.getTransGloss(tables[i]); if (gloss == "Translations to be checked") continue;

if (tables[i] == node) {					is_found = true; continue; }

var pos = util.getTransTable(text, tables[i], true);

if (pos) {					for (var j=0; j < poss.length; j++) {						if (poss[j] == pos) return util.tieBreakTransTable(poss.splice(j, 1), node); }				}				else {					var matched = 0; for (var j=0; j < poss.length; j++) {						if (util.matchGloss(util.getWikitextGloss(text, poss[j]), gloss) &&							 util.matchGloss(gloss, util.getWikitextGloss(text, poss[j]))) {							matched++; }					}					if (matched == poss.length) {						if (is_found) after_count++; else before_count++; }				}			}		}

if (before_count + 1 + after_count == poss.length) return [poss[before_count]]; else return poss; },

matchGloss: function (line, gloss) {		if (gloss.match(/^ *$/)) return !!(line.match(/\{\{trans-top\| *\}\}/) || line.match(/^ *$/)); var words = gloss.split(/\W+/); var pos = 0; for (var i=0; i < words.length; i++) {			pos = line.indexOf(words[i], pos); if (pos == -1) return false; }		return pos > -1; },

//User:Karelklic getTransGlossText: function (node) { var ret = ''; var children = node.childNodes; for (var i=0; i -1) ret += util.getTransGlossText(children[i]); else if (ret.match(/\w$/)) //Prevent new words from being created across node boundaries ret += " "; }		// all characters except a-zA-Z0-9 are changed to spaces return ret.replace(/\W/g, ' '); },

getTransGloss: function (ul) {		var node = ul; while (node && node.className.indexOf('NavFrame') == -1) node = node.parentNode;

if (!node) return '';

var children = node.childNodes; for (var i=0; i< children.length; i++) {			if(children[i].className && children[i].className.indexOf('NavHead') > -1) return util.getTransGlossText(children[i]); }		return ''; },

isTrreq: function (li) {		var spans = li.getElementsByTagName('span'); return (spans && spans.length > 0 && spans[0].className.indexOf("trreq") > -1) } };

/** * A small amount of common code that can be usefully applied to adder forms. * * An adder is assumed to be an object that has: * * .fields A object mapping field names to either validation functions used *         for text fields, or the word 'checkbox' * * .createForm  A function  that returns a newNode('form') to be added to the *             document (by appending to insertNode) * * .onsubmit  A function (values, register (wikitext, callback)) that accepts *           the validated set of values and processes them, the register *           function accepts wikitext and a continuation function to be  *            called with the result of rendering it. * * Before onsubmit or any validation functions are called, but after running * createForm, a new property .elements will be added to the adder which is a * dictionary mapping field names to HTML input elements. * * @param {editor} The current editor. * @param {adder} The relevant adder. * @param {insertNode} Where to insert this in the document. * @param {insertSibling} Where to insert this within insertNode. */ function AdderWrapper (editor, adder, insertNode, insertSibling) {	var form = adder.createForm var status = newNode('span');

form.appendChild(status); if (insertSibling) insertNode.insertBefore(form, insertSibling); else insertNode.appendChild(form);

adder.elements = {};

//This is all because IE doesn't reliably allow form.elements['name'] for (var i=0; i< form.elements.length; i++) {		adder.elements[form.elements[i].name] = form.elements[i]; }

form.onsubmit = function {		try {			var submit = true; var values = {}

status.innerHTML = ""; for (var name in adder.fields) {				if (adder.fields[name] == 'checkbox') {					values[name] = adder.elements[name].checked ? name : false; }				else {					adder.elements[name].style.border = ''; // clear error styles values[name] = adder.fields[name](adder.elements[name].value || '', function (msg) 					{						status.appendChild(newNode('span',{style:'color: red'}, newNode('img', {'src':'http://upload.wikimedia.org/wikipedia/commons/4/4e/MW-Icon-AlertMark.png'}), msg, newNode('br'))); 						adder.elements[name].style.border="solid #CC0000 2px";						return false					}); if (values[name] === false) submit = false; }			}			if (!submit) return false;

var loading = newNode('span', 'Loading...'); status.appendChild(loading); adder.onsubmit(values, function (text, callback)			{				editor.page.parseFragment(text, function (res) {					if (!res) return loading.appendChild(newNode('p', {style: 'color: red'}, "Could not connect to the server."));

callback(res); status.removeChild(loading); });			});  		}		catch(e) {			status.innerHTML = "ERROR:" + e.description; return false; }

return false; }

} // An adder for translations on en.wikt function TranslationAdders (editor) {	function TranslationLabeller (insertDiv) {		var original_span; var adder_form; var initial_value; var edit_button;

var editing = false;

var adderInterface = { 'fields': { 'gloss': function (txt, error) { return util.validateNoWikisyntax('gloss', true)(txt, error) } },			'createForm': function {				var thisId = "a" + String(Math.random).replace(".",""); return adder_form = newNode('form', {style:'display: inline', width: 'auto', click: kill_event}, 					newNode('label', {'for': thisId}, "Gloss: "),					newNode('input', {type: 'text', name:'gloss', value: initial_value, style: 'width: 50%', title: 'Insert a summary of the relevant definition', id: thisId}),					newNode('input', {type: 'submit', name: 'preview', value: 'Preview'}),					newNode('a', {href: '/wiki/Help:Glosses'}, 'Help?!')					); },			'onsubmit': function (values, render) {				render(values.gloss, function (new_html) {					if (editing)						toggle_editing(false);

var old_html = original_span.innerHTML; editor.addEdit({						'undo': function { original_span.innerHTML = old_html; if(!editing) toggle_editing;},						'redo': function  { original_span.innerHTML = new_html; if(editing) toggle_editing;},						'edit': function (text) { return perform_edit(text, values.gloss) },						'summary': 'tgloss:"' + (values.gloss.length > 50 ? values.gloss.substr(0, 50) + '...' : values.gloss + '"')					}, original_span); });			}		};

// The actual modification to the wikitext function perform_edit(wikitext, gloss) {			var pos = util.getTransTable(wikitext, insertDiv)[0] - 4; var g_start = wikitext.lastIndexOf('\n{'+'{trans-top', pos) + 1; var g_end = wikitext.indexOf('}}\n', pos) + 2;

if (g_start == 0 || wikitext.substr(g_start, g_end - g_start).indexOf("\n") > - 1) {				editor.error("Could not find translation table."); return wikitext; }			else {				return wikitext.substr(0, g_start) + '{'+'{trans-top|' + gloss + '}}' + wikitext.substr(g_end); }		}

// Don't open and close box when interacting with form. function kill_event(e) {			if (e && e.stopPropagation) e.stopPropagation; else window.event.cancelBubble = true; }

// What to do when the +/- button is clicked. function toggle_editing {			if (editing) {				adder_form.style.display = "none"; original_span.style.display = "inline"; editing = false; return; }			editing = true; edit_button.innerHTML = "Loading..."; editor.withCurrentText(function (currentText)			{				var pos = util.getTransTable(currentText, insertDiv);				edit_button.innerHTML = '±';

if (!pos) return editor.error("Could not find translation table");

var gloss_line = currentText.substr(currentText.lastIndexOf('\n', pos[0] - 2) + 1); gloss_line = gloss_line.substr(0, gloss_line.indexOf('\n')); initial_value = gloss_line.replace(/^\{\{trans-top(\|(.*)|)\}\}\s*$/,"$2");

if (initial_value.indexOf("\n") > 0) return editor.error("Internal error: guess spanning multiple lines");

if (!original_span) {					original_span = newNode('span', {'class':'wt-edit-recurse'}); for (var i=0; i<insertDiv.childNodes.length; i++) {						var child = insertDiv.childNodes[i]; if (child != edit_button && (!child.className || child.className != 'NavToggle')) {							original_span.appendChild(insertDiv.removeChild(child)); i--; }					}					insertDiv.appendChild(original_span);

new AdderWrapper(editor, adderInterface, insertDiv, original_span); }				original_span.style.display = "none"; adder_form.style.display = "inline"; adder_form.getElementsByTagName('input')[0].focus });		}		edit_button = newNode('a', '±', {href: '#', click: function (e) { 			if (e && e.preventDefault) e.preventDefault; kill_event(e); toggle_editing; return false; }, title:"Edit table heading", style:"padding:2px; margin-left: -5px;"});		insertDiv.insertBefore(edit_button, insertDiv.firstChild.nextSibling);	}

function TranslationAdder (insertUl) {		// Hippietrail var langmetadata = new LangMetadata ;

this.fields = { lang: function (txt, error) {				if (txt == 'en') return error("Please choose a foreign language. (fr, es, aaa)") if (/^[a-z]{2,3}(-[a-z\-]{1,7})?$/.test(txt)) return txt; return error("Please use a language code. (fr, es, aaa)") },			word: function (txt, error) {				if (txt == '{'+'{trreq}}') return txt;

if (txt.indexOf(',') == -1 || forceComma) {					forceComma = false; if (langmetadata.expectedCase(thiz.elements.lang.value, wgTitle, txt) || forceCase) {						forceCase = false; return util.validateNoWikisyntax('translation', true)(txt, error); }

if (prefs.get('case-knowledge', 'none') == 'none') {						return error(newNode('span', "Translations normally don't have capital letters. If you're certain it does, you can ", newNode('span', {style: "color: blue; text-decoration: underline; cursor: pointer;", click: function 								{									forceCase = true;									inputForm.onsubmit;									prefs.set('case-knowledge', 'guru');								}}, "continue by clicking here."))); }					else {						var msg = newNode('span',							newNode('span', {style: "color: blue; text-decoration: underline; cursor: pointer;", click: function {									prefs.set('case-knowledge', 'none') try{ msg.parentNode.removeChild(msg); } catch(e) {} editor.undo }}, "Please click undo"), " unless you are certain that this translation has a capital letter.");

error(msg) return txt; }				}

if (prefs.get('comma-knowledge', 'none') == 'none') {					return error(newNode('span', "You can only add one translation at a time. If this is one translation that contains a comma, you can ", newNode('span', {style: "color: blue; text-decoration: underline; cursor: pointer;", click: function 							{								forceComma = true;								inputForm.onsubmit;								prefs.set('comma-knowledge', 'guru')							}}, "add it by clicking here."))) }				else {					var msg = newNode('span',						newNode('span', {style: "color: blue; text-decoration: underline; cursor: pointer;", click: function {								prefs.set('comma-knowledge', 'none') try{ msg.parentNode.removeChild(msg); } catch(e) {} editor.undo }}, "Please click undo"), " if you were trying to create a list of translations in one go, this is currently not supported.");

error(msg) return txt; }			},			qual: util.validateNoWikisyntax('qualifier'), tr: util.validateNoWikisyntax('transcription'), alt: util.validateNoWikisyntax('page name'), sc: function (txt, error) {				if (txt && !/^((?:[a-z][a-z][a-z]?-)?[A-Z][a-z][a-z][a-z]|polytonic|unicode)$/.test(txt)) return error(newNode('span', "Please use a ", newNode('a',{href: '/wiki/Category:Script templates'},"script template"), "(e.g. fa-Arab, Deva, polytonic)"))

if (!txt) txt = prefs.get('script-' + thiz.elements.lang.value, langmetadata.guessScript(thiz.elements.lang.value) || ''); if (txt == 'Latn') txt = ''; return txt; },			nested: util.validateNoWikisyntax('nested'), m: 'checkbox', f: 'checkbox', n: 'checkbox', c: 'checkbox', p: 'checkbox' };

this.createForm = function {			var controls = { lang: newNode('input', {size:4, type:'text', name:'lang', value:prefs.get('curlang',''), title:'The two or three letter ISO 639 language code'}), transliteration: newNode('span', newNode('a', {href: '/wiki/Wiktionary:Transliteration'}, "Transliteration"), ": ", 									 newNode('input', {name: "tr", title: "The word transliterated into the Latin alphabet."}), " (e.g. ázbuka for азбука)"), qualifier: newNode('p', "Qualifier: ", newNode('input', {name: 'qual', title: "A qualifier for the word"}), " (e.g. literally, formally, slang)"), display: newNode('p',"Page name: ", newNode('input', {name: 'alt', title: "The word with all of the dictionary-only diacritics."}), " (e.g. amo for amō)"), script: newNode('p', newNode('a', {href: '/wiki/Category:Script_templates'},"Script template"),": ", 					newNode('input', {name: 'sc', size: 6, title: "The script template to render this word in."}), "(e.g. Cyrl for Cyrillic, Latn for Latin)", newNode('br')), nested: newNode('p', "Nesting: ", newNode('input', {name: 'nested', title: "The nesting of this language"}), " (e.g. Norwegian/Nynorsk)"), gender_m: newNode('span',newNode('input', {type: 'checkbox', name: 'm'}), 'masc. '), gender_f: newNode('span', newNode('input', {type: 'checkbox', name: 'f'}), 'fem. '), gender_n: newNode('span', newNode('input', {type: 'checkbox', name: 'n'}), 'neuter '), gender_c: newNode('span', newNode('input', {type: 'checkbox', name: 'c'}), 'common\u00A0gender '), plural: newNode('span', newNode('input', {type: 'checkbox', name: 'p'}), 'plural ', newNode('br')) };

controls.gender = newNode('p', controls.gender_m, controls.gender_f, controls.gender_n, controls.gender_c, controls.plural);

langInput = controls.lang;

var showButton = newNode('span',{'click': function 			{				if (!advancedMode)				{					advancedMode = true;					showButton.innerHTML = " Less";				}				else				{					advancedMode = false;					showButton.innerHTML = " More";				}				updateScriptGuess.call(langInput, true);			}, 'style':"color: #0000FF;cursor: pointer;"}, advancedMode ? " Less" : " More");

function autoTransliterate { if (thiz.elements.word.value == '{'+'{trreq}}') thiz.elements.alt.value = '' else thiz.elements.alt.value = langmetadata.generateAltForm(thiz.elements.lang.value, thiz.elements.word.value) || ''; }			function updateScriptGuess (preserve) { preserve = (preserve === true);

//show all arguments function show {					for (var i=0; i<arguments.length; i++) {						if (arguments[i].nodeName.toLowerCase == 'p') arguments[i].style.display = "block"; else arguments[i].style.display = "inline"; }

}				//hide all arguments function hide {					for (var i=0; i < arguments.length; i++) arguments[i].style.display = "none"; }				//if the first argument is false hide the remaining arguments, otherwise show them. function toggle (condition) {					if (condition) //eww... show.apply(this, [].splice.call(arguments, 1, arguments.length - 1)); else hide.apply(this, [].splice.call(arguments, 1, arguments.length - 1)); }

if (!preserve) langInput.value = langmetadata.cleanLangCode(langInput.value);

var guess = prefs.get('script-' + langInput.value, langmetadata.guessScript(langInput.value || '')); if (!preserve) {					if (guess) thiz.elements.sc.value = guess; else thiz.elements.sc.value = '';

thiz.elements.nested.value = langmetadata.getNested(langInput.value || '');

autoTransliterate; }

var lang = langInput.value;

if (!advancedMode) {					var g = langmetadata.getGenders(lang);

if (!lang) {						hide(controls.gender); }					else if (g == undefined) {						show(controls.gender,controls.gender_m, controls.gender_f, controls.gender_n, controls.gender_c); }					else {						toggle(g.indexOf('m') > -1, controls.gender); toggle(g.indexOf('m') > -1, controls.gender_m); toggle(g.indexOf('f') > -1, controls.gender_f); toggle(g.indexOf('n') > -1, controls.gender_n); toggle(g.indexOf('c') > -1, controls.gender_c); }

var p = langmetadata.hasPlural(lang);

toggle(p !== false, controls.plural); toggle(g || p, controls.gender);

toggle(guess && guess != 'Latn', controls.transliteration);

var alt = langmetadata.needsAlt(lang);

toggle(alt === true, controls.display);

hide(controls.qualifier, controls.nested); //only in more hide(controls.script); //should be in less when array returned from .getScripts

}				else {					show(controls.gender, controls.gender_m, controls.gender_f, controls.gender_n, controls.gender_c,						controls.plural, controls.transliteration, controls.qualifier, controls.display,						controls.script, controls.nested); }			} 			//autocomplete language names var langNameToCode={}; function langAutoFill(e){ e = (e || event).keyCode;if((e >= 33 && e <= 40) || e == 8 || e == 46 || e == 27 || e == 16){ return; }				var t = this, v = t.value; if(v.substr(0,1) != v.substr(0,1).toUpperCase){ return; }				JsMwApi({action:'query',rawcontinue:'',generator:'allpages',gapnamespace:10,gapprefix:'langrev/'+v,gaplimit:3,prop:'revisions',rvprop:'content'},function(r){					if(r.query && r.query.pages && t.value == v){						var l={}, ll={}						for(var i in r.query.pages){							var rqp = r.query.pages[i];ll = rqp.title < ll.title?ll:rqp;l = rqp.title > l.title?l:rqp;						}						if(!r['query-continue'] && ll.title.indexOf(l.title) == 0){							langNameToCode[l.title.substr(17)]=l.revisions[0]['*'];							if(l.title != "Template:langrev/"+v){								if (t.setSelectionRange){									t.setSelectionRange([t.value.length, t.value = l.title.substr(17)][0], t.value.length);								} else if (t.createTextRange) {									var z = t.createTextRange;									z.moveEnd('character', 0 - z.move('character', [t.value.length, t.value = l.title.substr(17)][0]) + t.value.length);									z.select								} }						}					}				})			}			langInput.onkeyup = langAutoFill;			langInput.onblur = function{				if(langNameToCode[this.value]){					this.value=langNameToCode[this.value]				}				updateScriptGuess.call(langInput)			}

window.setTimeout(function {updateScriptGuess.call(langInput)}, 0);

inputForm = newNode('form',						newNode('p', newNode('a',{href:"/wiki/User_talk:Conrad.Irwin/editor.js#Usage"},"Add translation"),' ', langInput, newNode('b',': '), newNode('input', {'name': 'word', size:20, change:autoTransliterate}), newNode('input',{'type': 'submit', 'value':'Preview translation'}), showButton ), 						controls.gender,						controls.transliteration,						controls.display,						controls.qualifier,						controls.script,						controls.nested					) return inputForm; }

this.onsubmit = function (values, render) {			// Use (no) for Bokmal per WT:ANO var wikt_lang = values.lang; if (wikt_lang == 'nb') wikt_lang = 'no';

var wikitext; if (values.word.indexOf('{'+'{trreq') == 0) wikitext = '{'+'{trreq|' + '{'+'{subst:' + values.lang + '|l=}}}}' else wikitext = '{'+'{subst:' + values.lang + '}}: ' + (values.qual? '{'+'{qualifier|' + values.qual + '}} ' : '') + '{'+'{t' + (langmetadata.hasWiktionary(wikt_lang) ? '' : 'ø') + '|' + (values.lang) + '|' + (values.alt ? values.alt : values.word) + (values.m ? '|m' : '') + (values.f ? '|f' : '') + (values.n ? '|n' : '') + (values.c ? '|c' : '') + (values.p ? '|p' : '') + (values.tr ? '|tr=' + values.tr : '') + ((values.alt && values.alt != values.word) ? '|alt=' + values.word : '') + (values.sc ? '|sc=' + values.sc : '') + '}}'; render(wikitext, function (html) { registerEdits(values, wikitext, html)}); if (!this.balancer) this.balancer = new TranslationBalancer(editor, insertUl.parentNode.parentNode.parentNode); }

var thiz = this; var prefs = new CookiePreferences('EditorJs'); var langInput; var inputForm; var advancedMode = prefs.get('more-display', 'none') != 'none'; var forceComma = false; var forceCase = false;

//Reset elements to default values. function resetElements {			if (prefs.get('more-display', 'none') != advancedMode ? 'block' : 'none') prefs.set('more-display', advancedMode ? 'block' : 'none'); //named for compatibility thiz.elements.word.value = thiz.elements.tr.value = thiz.elements.alt.value = thiz.elements.qual.value = ''; thiz.elements.m.checked = thiz.elements.f.checked = thiz.elements.n.checked = thiz.elements.c.checked = thiz.elements.p.checked = false; prefs.set('curlang', thiz.elements.lang.value); if ((thiz.elements.sc.value || 'Latn') != (prefs.get('script-'+thiz.elements.lang.value, langmetadata.guessScript(thiz.elements.lang.value) || 'Latn'))) {				prefs.set('script-'+thiz.elements.lang.value, thiz.elements.sc.value); thiz.elements.lang.update; }		}

// This is onsubmit after the wikitext has been rendered to give content function registerEdits (values, wikitext, content) {			var li = newNode('li',{'class': 'trans-'+values.lang}); li.innerHTML = content; var lang = getLangName(li); var summary = 't+' + values.lang + ':| values.word) + '';

var insertBefore = null; var nextLanguage = null;

var nestedHeading, nestedLang; var nestedLang; if (values.nested.indexOf('/') > -1) {				nestedLang = values.nested.replace(/.*\//, ''); nestedHeading = values.nested.replace(/\/.*/,''); if (nestedHeading == '') nestedHeading = lang; content = content.replace(/.*: /, nestedLang + ": "); wikitext = wikitext.replace("subst:", "").replace(/.*: /, nestedLang + ": "); }			else { 				nestedHeading = values.nested; nestedLang = lang; }			var nestedWikitext = "\n* " + nestedHeading + ":\n*: " + wikitext;

function addEdit (edit, span) {				editor.addEdit({					'undo': function 					{						edit.undo;						if (thiz.elements.word.value == "" && thiz.elements.tr.value == "" && thiz.elements.alt.value == "" && thiz.elements.qual.value == "")						{							var fields = ["lang","word","alt","qual","tr","sc"];							var cb = "mnfcp".split("");							for (var i=0; i < fields.length; i++)							{								thiz.elements[fields[i]].value = values[fields[i]];							}							for (var i=0; i < cb.length; i++)							{								thiz.elements[fields[i]].checked = values[fields[i]];							}						}					},					'redo': function 					{ 						edit.redo;						var fields = ["lang","word","alt","qual","tr","sc"];						for (var i=0; i < fields.length; i++)						{							if (thiz.elements[fields[i]].value != values[fields[i]])								return;						}						resetElements;					},					'edit': edit.edit,					'summary': summary				}, span); }

if (lang) {				//Get all li's in this table row. var lis = []; var ls = insertUl.parentNode.parentNode.getElementsByTagName('li'); for (var j=0; j < ls.length; j++) lis.push(ls[j]);

ls = insertUl.parentNode.parentNode.getElementsByTagName('dd'); for (var j=0; j < ls.length; j++) lis.push(ls[j]);

for (var j=0; j < lis.length; j++) {					if (lis[j].getElementsByTagName('form').length > 0) continue; var ln = getLangName(lis[j]); if (ln == lang) {						if (values.word == '{'+'{trreq}}') { addEdit({								'redo': function {},								'undo': function  {},								'edit': function  {									return editor.error("Can not add a translation request for a language with translations");								}							}); return resetElements; }						var span = newNode('span'); var parent = lis[j]; if (util.isTrreq(parent)) {							span.innerHTML = content; var trspan = parent.getElementsByTagName('span')[0]; addEdit({								'redo': function { parent.removeChild(trspan); parent.innerHTML = ""; parent.appendChild(span); },								'undo': function  { parent.removeChild(span); parent.appendChild(trspan); },								'edit': getEditFunction(values, wikitext, ln, values.lang, true, function (text, ipos) {									//Converting a Translation request into a translation var lineend = text.indexOf('\n', ipos); return text.substr(0, ipos) + wikitext + text.substr(lineend); })							}, span); return resetElements; }						else {							if (parent.getElementsByTagName('ul').length + parent.getElementsByTagName('dl').length == 0) {								span.innerHTML = ", " + content.substr(content.indexOf(':') + 1); addEdit({									'redo': function { parent.appendChild(span) },									'undo': function  { parent.removeChild(span) },									'edit': getEditFunction(values, wikitext, ln, values.lang, false, function (text, ipos) {												 //We are adding the wikitext to a list of translations that already exists. var lineend = text.indexOf('\n', ipos); var wt = wikitext.replace('subst:',''); wt = wt.substr(wt.indexOf(':') + 1); return text.substr(0, lineend) + "," + wt + text.substr(lineend); })								}, span); return resetElements; }							else {								var node = parent.firstChild; var hastrans = false; while (node) {									if (node.nodeType == 1) {										var nn = node.nodeName.toUpperCase; if (nn == 'UL' || nn == 'DL') {											// If we want to use the dialectical nesting for orthographical nesting // then we need to skip this (otherwise perfect) match. if (!hastrans && nestedHeading == ln) {												node = node.nextSibling; continue; }											span.innerHTML = (hastrans ? ", ": " ") + content.substr(content.indexOf(':') + 1); addEdit({												'redo': function { parent.insertBefore(span, node) },												'undo': function  { parent.removeChild(span) },												'edit': getEditFunction(values, wikitext, ln, values.lang, false, function (text, ipos) {															//Adding the translation to a language that has nested translations under it															var lineend = text.indexOf('\n', ipos); var wt = wikitext.replace('subst:',''); wt = wt.substr(wt.indexOf(':') + 1); return text.substr(0, lineend) + (hastrans ? "," : "") + wt + text.substr(lineend); })											}, span); return resetElements; }										else {											hastrans = true; }

}									node = node.nextSibling; }							}						}					}					else if (ln && ln > lang && (!nextLanguage || ln < nextLanguage) && lis[j].parentNode.parentNode.nodeName.toLowerCase != 'li') {						nextLanguage = ln; var parent = lis[j]; insertBefore = [ {								'redo': function {parent.parentNode.insertBefore(li, parent);}, 'undo': function {parent.parentNode.removeChild(li)}, 'edit': getEditFunction(values, wikitext, ln, getLangCode(parent), util.isTrreq(parent), function (text, ipos)										{											//Adding a new language's translation before another language's translation											var lineend = text.lastIndexOf('\n', ipos);											return text.substr(0, lineend) + "\n* " + wikitext + text.substr(lineend);										}) },li]; }				}			}			if (values.nested) {				nextLanguage = null; insertBefore = null; li.innerHTML = nestedHeading + ":" + "" + content + "";

var lis = insertUl.parentNode.parentNode.getElementsByTagName('li'); for (var j = 0; j < lis.length; j++) {					//Ignore the editor form if (lis[j].getElementsByTagName('form').length > 0) continue;

//Don't look at nested translations if (lis[j].parentNode.parentNode.nodeName.toLowerCase != 'td') continue;

var ln = getLangName(lis[j]); if (ln == nestedHeading) {						var sublis = lis[j].getElementsByTagName('li');

if (! sublis.length) sublis = lis[j].getElementsByTagName('dd');

if (sublis.length == 0) {							var parent = lis[j]; var dd = newNode('dd', {'class': 'trans-'+values.lang}); var dl = newNode('dl', dd); dd.innerHTML = content;

addEdit({								'redo': function {parent.appendChild(dl);},								'undo': function  {parent.removeChild(dl);},								'edit': getEditFunction(values, wikitext, nestedHeading, getLangCode(parent), util.isTrreq(parent), function (text, ipos) {											//Adding a new dl to an existing translation line var lineend = text.indexOf('\n', ipos); return text.substr(0, lineend) + "\n*: " + wikitext + text.substr(lineend); })							}, dd); return resetElements; }						else {							var dd = newNode(sublis[0].nodeName, {'class': 'trans-'+values.lang}); var linestart = dd.nodeName.toLowerCase == 'dd' ? '\n*: ' : '\n** '; dd.innerHTML = content; for (var k = 0; k < sublis.length; k++) {								var subln = getLangName(sublis[k]); var parent = sublis[k]; if (subln == nestedLang) { var span = newNode('span'); span.innerHTML = ", " + content.substr(content.indexOf(':') + 1); addEdit({										'redo': function { parent.appendChild(span) },										'undo': function  { parent.removeChild(span) },										'edit': getEditFunction(values, wikitext, nestedLang, values.lang, false, function (text, ipos) {													 // Adding the wikitext to a list of translations that already exists. var lineend = text.indexOf('\n', ipos); var wt = wikitext.replace('subst:',''); wt = wt.substr(wt.indexOf(':') + 1); return text.substr(0, lineend) + "," + wt + text.substr(lineend); })									}, span);

return resetElements; } else if (langmetadata.nestsBefore(nestedLang, subln)) {

addEdit({										'redo': function { parent.parentNode.insertBefore(dd, parent); },										'undo': function  { parent.parentNode.removeChild(dd); },										'edit': getEditFunction(values, wikitext, subln, getLangCode(parent), util.isTrreq(parent), function (text, ipos) {													// Adding a nested translation in-order var lineend = text.lastIndexOf('\n', ipos); return text.substr(0, lineend) + linestart + wikitext + text.substr(lineend); })									}, dd); return resetElements; }							}

addEdit({								'redo': function { parent.parentNode.appendChild(dd); },								'undo': function  { parent.parentNode.removeChild(dd); },								'edit': getEditFunction(values, wikitext, subln, getLangCode(parent), util.isTrreq(parent), function (text, ipos) {											// Adding a nested translation at the end of its group var lineend = text.indexOf('\n', ipos); return text.substr(0, lineend) + linestart + wikitext + text.substr(lineend); })							}, dd); return resetElements; }					}					else if (ln && ln > nestedHeading && (!nextLanguage || ln < nextLanguage)) {						nextLanguage = ln; var parent = lis[j]; insertBefore = [ {								'redo': function {parent.parentNode.insertBefore(li, parent);}, 'undo': function {parent.parentNode.removeChild(li)}, 'edit': getEditFunction(values, wikitext, ln, getLangCode(parent), util.isTrreq(parent), function (text, ipos)										{											//Adding a new nested translation section.											var lineend = text.lastIndexOf('\n', ipos);											return text.substr(0, lineend) + nestedWikitext + text.substr(lineend);										}) },li]; }				}				wikitext = nestedHeading + ":\n*: " + wikitext; }

li.className = "trans-" + values.lang; if (insertBefore) {				addEdit(insertBefore[0], insertBefore[1]); }			else {				//Append the translations to the end (no better way found) addEdit({					'redo': function {insertUl.appendChild(li);},					'undo': function  {insertUl.removeChild(li)},					'edit': getEditFunction(values, wikitext)				}, li); }			return resetElements; }

//Get the wikitext modification for the current form submission. function getEditFunction (values, wikitext, findLanguage, findLangCode, trreq, callback) {			return function(text) {				var p = util.getTransTable(text, insertUl);

if (!p) return editor.error("Could not find translation table for '" + values.lang + ":" + values.word + "'. Glosses should be unique");

var stapos = p[0]; var endpos = p[1];

if (findLanguage) {					var ipos = 0; if (trreq) {						ipos = text.indexOf('{'+'{trreq|'+findLanguage+'}}', stapos); if (ipos < 0 || ipos > endpos) ipos = text.indexOf('{'+'{trreq|'+findLangCode+'}}', stapos); if (ipos < 0 || ipos > endpos) ipos = text.indexOf('{'+'{trreq|{'+'{subst:'+findLangCode+'|l=}}}}', stapos); }

// If we have a nested trreq, then we still need to look for the non-trreq form of the heading language if (!trreq || ipos < 0 || ipos > endpos ) {						ipos = text.substr(stapos).search(RegExp("\\*[:*]? ?\\[\\[" + util.escapeRe(findLanguage) + "\\]\\]:")) + stapos; if (ipos < stapos || ipos > endpos) ipos = text.substr(stapos).search(RegExp('\\*[:*]? ?' + util.escapeRe(findLanguage) + ':')) + stapos; if (ipos < stapos || ipos > endpos) ipos = text.indexOf('{'+'{subst:'+findLangCode+'}}:', stapos); }

if (ipos >= stapos && ipos < endpos) {						return callback(text, ipos, trreq); }					else {						return editor.error("Could not find translation entry for '" + values.lang + ":" +values.word + "'. Please reformat"); }				}

return text.substr(0, endpos) + "* " + wikitext + "\n" + text.substr(endpos); };		}

// For an  in well-formed translation sections, return the language name. function getLangName(li) {			var guess = li.textContent || li.innerText;

if (guess) guess = guess.substr(0, guess.indexOf(':'));

if (guess == 'Template') { return false; }

return guess.replace(/^[\s\n]*/,''); }

// Try to get the language code from an  containing { {t t+ or t-	// }} function getLangCode(li) {			if (li.className.indexOf('trans-') == 0) return li.className.substr(6); var spans = li.getElementsByTagName('span'); for (var i=0; i < spans.length; i++) {				if (spans[i].lang) { return spans[i].lang; }			}			return false; }

}	var tables = document.getElementsByTagName('table'); for (var i=0; i -1 && util.getTransGloss(tables[i]) != 'Translations to be checked') {			var _lists = tables[i].getElementsByTagName('ul'); var lists = []; for (var j=0; j<_lists.length; j++) if (_lists[j].parentNode.nodeName.toLowerCase == 'td') lists.push(_lists[j]);

if (lists.length == 0) {				tables[i].getElementsByTagName('td')[0].appendChild(newNode('ul')); lists = tables[i].getElementsByTagName('ul'); }			if (lists.length == 1) {				var table = tables[i].getElementsByTagName('td')[2] if (table) {					table.appendChild(newNode('ul')); lists = tables[i].getElementsByTagName('ul'); }			}			if (lists) {				var li = newNode('li'); var ul = lists[lists.length - 1]; var table = tables[i]; if (table.getElementsByTagName('tbody').length > 0) table = table.getElementsByTagName('tbody')[0]; table.appendChild(newNode('tr', newNode('td'), newNode('td'), newNode('td', {'style':'text-align: left'},newNode('ul', li)))); new AdderWrapper(editor, new TranslationAdder(ul), li); if ((new CookiePreferences('EditorJs')).get('labeller') == 'true') {					var div = tables[i].parentNode.parentNode.getElementsByTagName('div')[0]; if (div.className.indexOf('NavHead') > -1) {						new TranslationLabeller(div) }				}			}		}	} }

function TranslationBalancer (editor, insertTable) {	var status;

//create the form function init {		var cns = insertTable.getElementsByTagName('tr')[0].childNodes; var tds = []; //Find all three table cells in the translation table. for (var i=0; i on the left side of the balancer. var left = tds[0].getElementsByTagName('ul'); if (left.length > 0) left = left[0]; else {			left = newNode('ul'); tds[0].appendChild(left); }

//Ensure that there is a  on the right side of the balancer. var right = tds[2].getElementsByTagName('ul'); if (right.length > 0) right = right[0]; else {			right = newNode('ul'); tds[2].appendChild(right); }

var moveLeft = newNode('input',{'type':'submit','name':'ml', 'value':'←', 'click': function{return prepareEdits('←', left, right)}}); var moveRight = newNode('input',{'type':'submit','name':'mr', 'value':'→', 'click': function{return prepareEdits('→', left, right)}}); status = newNode('span');

var form = newNode('form', moveLeft, newNode('br'), moveRight, newNode('br'), status); tds[1].appendChild(form); form.onsubmit = function { return false; } //Must be done after the appendChild for IE :(	}

function moveOneRight(left, right) {		var li = left.lastChild; while (li && li.nodeName.toLowerCase != 'li') li = li.previousSibling;

if (li) right.insertBefore(left.removeChild(li), right.firstChild); }

function moveOneLeft(left, right) {		var li = right.firstChild; while (li && li.nodeName.toLowerCase != 'li') li = li.nextSibling;

if (li) left.appendChild(right.removeChild(li)); }

//store the edit object with the editor function prepareEdits(direction, left, right) {		status.innerHTML = "Loading...";

editor.addEdit({			'redo': function { (direction == '→' ? moveOneRight : moveOneLeft)(left, right) },			'undo': function { (direction == '→' ? moveOneLeft : moveOneRight)(left, right) },			'edit': function (text) {return editWikitext(right, direction, text);},			'summary': 't-balance'		}); }

//get the wikitext modification function editWikitext(insertUl, direction, text) {		status.innerHTML = ""; //Find the position of the translation table var p = util.getTransTable(text, insertUl);

if (!p) return editor.error("Could not find translation table, please improve glosses.");

var stapos = p[0]; var endpos = p[1];

//Find the start and end of the { {trans-mid}} in the table var midpos = text.indexOf('{'+'{trans-mid}}', stapos); var midstart = text.lastIndexOf("\n", midpos); var midend = text.indexOf("\n", midpos);

if (midstart < stapos - 1 || midend > endpos) return editor.error("Could not find {'+'{trans-mid}}, please correct page.");

if (direction == '→') {			// Select the last list item of the left list (may be more than one line if nested translations are present) var linestart = text.lastIndexOf("\n", midstart - 3); while (/^[:*#;]$/.test(text.substr(linestart+2,1))) linestart = text.lastIndexOf("\n", linestart - 1);

if (linestart < stapos - 1 || linestart >= endpos) return editor.error("No translations to move");

return text.substr(0, linestart) //Everything before the item we are moving + text.substr(midstart, midend - midstart) //Then { {trans-mid}} + text.substr(linestart, midstart - linestart) //Then the item we are moving + text.substr(midend); //Then everything after { {trans-mid}} }		else if (direction == '←') {			// Select the first list item of the right list (may be more than one line if nested translations are present) var lineend = text.indexOf("\n", midend + 3); while (/^[:*#;]$/.test(text.substr(lineend+2,1))) lineend = text.indexOf("\n", lineend + 1);

if (lineend < stapos - 1 || lineend >= endpos) return editor.error("No translations to move");

return text.substr(0, midstart) //Everything before { {trans-mid}} + text.substr(midend, lineend - midend) //Then the item we are moving + text.substr(midstart, midend - midstart) //Then { {trans-mid}} + text.substr(lineend); //Then everything after the item we are moving }		return text; }	init; }

function LangMetadata {	//Singleton if (arguments.callee.instance) return arguments.callee.instance else arguments.callee.instance = this;

//

// FIXME: merge into above var c = 'Chinese';var a = 'Arabic'; var nesting = { aae:'Albanian/Arbëresh',aat:'Albanian/Arvanitika',als:'Albanian/Tosk',aln:'Albanian/Gheg', apj:'Apache',apm:'Apache',apw:'Apache', syr:'Aramaic',syc:'Aramaic', xcl:'Armenian',axm:'Armenian', // ang:'English',enm:'English', don't nest English (Encyclopetey) fro:'French',frm:'French', oge:'Georgian', gmh:'German',goh:'German',gsw:'German',ksh:'German',pfl:'German',sxu:'German', grc:'Greek/Ancient',gmy:'Greek/Mycenaean', //el:'Greek/Modern', don't nest modern greek (Atelaes) sga:'Irish',mga:'Irish', nb:'Norwegian/Bokmål',nn:'Norwegian/Nynorsk', mhr:'Mari',mrj:'Mari', cmg:'Mongolian', sro:'Sardinian',sdn:'Sardinian',src:'Sardinian',scd:'Sardinian', dsb:'Sorbian',hsb:'Sorbian', osp:'Spanish', owl:'Welsh',wlm:'Welsh', kmr:'Kurdish/Kurmanji',ckb:'Kurdish/Sorani', zh:c,yue:c,dng:c,gan:c,hak:c,czh:c,cjy:c,cmn:c,mnp:c,cdo:c,nan:c,czo:c,cpx:c,wuu:c,hsn:c,lzh:c, arq:a,aao:a,bbz:a,abv:a,shu:a,acy:a,adf:a,avl:a,arz:a,afb:a,ayh:a,acw:a,ayl:a,acm:a,ary:a, ars:a,apc:a,ayp:a,acx:a,aec:a,ayn:a,ssh:a,ajp:a,arb:a,apd:a,pga:a,acq:a,abh:a,aeb:a,auz:a }

var altForm = { ang: {from:"ĀāǢǣĊċĒēĠġĪīŌōŪūȲȳ", to:"AaÆæCcEeGgIiOoUuYy", strip:"\u0304\u0307"}, //macron and above dot ar: {strip:"\u064B\u064C\u064D\u064E\u064F\u0650\u0651\u0652"}, he: {strip:"\u05B0\u05B1\u05B2\u05B3\u05B4\u05B5\u05B6\u05B7\u05B8\u05B9\u05BA\u05BB\u05BC\u05BD\u05BF\u05C1\u05C2"}, hr: {from:"ȀȁÀàȂȃÁáĀāȄȅÈèȆȇÉéĒēȈȉÌìȊȋÍíĪīȌȍÒòȎȏÓóŌōȐȑȒȓŔŕȔȕÙùȖȗÚúŪū", to:"AaAaAaAaAaEeEeEeEeEeIiIiIiIiIiOoOoOoOoOoRrRrRrUuUuUuUuUu", strip:"\u030F\u0300\u0311\u0301\u0304"}, la: {from:"ĀāĒēĪīŌōŪū", to:"AaEeIiOoUu",strip:"\u0304"}, //macron lt: {from:"áãàéẽèìýỹñóõòúù", to:"aaaeeeiyynooouu", strip:"\u0340\u0301\u0303"}, ro: {from:"ŞŢşţ", to:"ȘȚșț"}, sh: {from:"ȀȁÀàȂȃÁáĀāȄȅÈèȆȇÉéĒēȈȉÌìȊȋÍíĪīȌȍÒòȎȏÓóŌōȐȑȒȓŔŕȔȕÙùȖȗÚúŪūѝ", to:"AaAaAaAaAaEeEeEeEeEeIiIiIiIiIiOoOoOoOoOoRrRrRrUuUuUuUuUuи", strip:"\u030F\u0300\u0311\u0301\u0304"}, sr: {from:"ȀȁÀàȂȃÁáĀāȄȅÈèȆȇÉéĒēȈȉÌìȊȋÍíĪīȌȍÒòȎȏÓóŌōȐȑȒȓŔŕȔȕÙùȖȗÚúŪū", to:"AaAaAaAaAaEeEeEeEeEeIiIiIiIiIiOoOoOoOoOoRrRrRrUuUuUuUuUu", strip:"\u030F\u0300\u0311\u0301\u0304"}, tr: {from:"ÂâÛû", to:"AaUu",strip:"\u0302"}, sl: {from: "áÁàÀâÂȃȂȁȀéÉèÈêÊȇȆȅȄíÍìÌîÎȋȊȉȈóÓòÒôÔȏȎȍȌŕŔȓȒȑȐúÚùÙûÛȗȖȕȔệỆộỘẹẸọỌ", to: "aAaAaAaAaAeEeEeEeEeEiIiIiIiIiIoOoOoOoOoOrRrRrRuUuUuUuUuUeEoOeEoO", strip: "\u0301\u0300\u0302\u0311\u030f\u0323"} }; 	//Returns true if the specified lang.wiktionary exists according to the meta list this.hasWiktionary = function(lang) {		if (metadata[lang]) return metadata[lang].hw; }

//Given a language code return a default script code. this.guessScript = function(lang) {		if (metadata[lang]) { // enwikt language template? (ur-Arab, polytonic) if (metadata[lang].wsc) { return metadata[lang].wsc; }			// ISO script code? (Arab, Grek) if (metadata[lang].sc) { if (typeof metadata[lang].sc == 'object') return metadata[lang].sc[0]; else return metadata[lang].sc; }		}

return false; }

// In a given language, would we expect a translation of the title to have the capitalisation // of word? this.expectedCase = function (lang, title, word) { if (lang == 'de' || lang == 'lb') return true;

if (title.substr(0, 1).toLowerCase != title.substr(0, 1)) return true;

return word.substr(0, 1).toLowerCase == word.substr(0, 1) }

//Returns a string of standard gender letters (mfnc) or an empty string this.getGenders = function(lang) {		if (metadata[lang]) return metadata[lang].g;	}

//Returns true if the specified lang has the concept of plural nouns this.hasPlural = function(lang) {		if (metadata[lang]) return metadata[lang].p;	}

//Returns true if the specified lang uses optional vowels or diacritics this.needsAlt = function(lang) {		if (metadata[lang]) return metadata[lang].alt && (!altForm[lang]); }

// Generates a form of the page name without any diacritics (for Latin, etc.) this.generateAltForm = function (lang, word) {		if (altForm[lang]) {			var alt = altForm[lang];

var map = {};

if (alt.from && alt.to) {				for (var i = 0; i < alt.from.length; i++) {					map[alt.from.charAt(i)] = alt.to.charAt(i); }			}			if (alt.strip) {				for (var i = 0; i < alt.strip.length; i++) {					map[alt.strip.charAt(i)] = ""; }			}

var input = word.split(""); var output = "";

for (var i = 0; i < input.length; i++) {				var repl = map[input[i]]; output += (repl == null) ? input[i] : repl; }			return output; }	}

//Given user input, return a language code. Normalises ISO 639-1 codes and names to 639-3. this.cleanLangCode = function(lang) {		var key = lang.toLowerCase.replace(' ',''); if (clean[key]) return clean[key]; else return lang; }

// Get the nesting for a given sub-language this.getNested = function (lang) {		if (nesting[lang]) return nesting[lang]; else return ""; }

function temporalSortKey(langname) {		return langname.replace(/^(Ancient|Classical|Old|Middle|Early Modern|Modern) (.*)/, function(m, modifier, name)			{				return ({Ancient: 0, Old: 1, Middle: 2, "Early Modern": 3, Modern: 4})[modifier] + name;			}); }	// For enforcing an ordering on nested languages. this.nestsBefore = function (a, b)	{ return temporalSortKey(a) < temporalSortKey(b); }

this.getScripts = function(lang) {		var script = metadata[lang]?metadata[lang].wsc || metadata[lang].sc:[]; return (typeof script === 'string' ? [script] : script) || []; } }

$(function {

// Check if we are on a sensible page var actions = window.location.toString.replace(/.*\?/, '&'); if (wgAction != 'view' || actions.indexOf('&printable=yes') > -1 || actions.indexOf('&diff=') > -1 || actions.indexOf('&oldid=') > -1) return;

// Check that we have not been disabled var prefs = new CookiePreferences('EditorJs'); if (prefs.get('enabled', 'true') == 'true') {		if (! window.loadedEditor) {			prefs.setDefault('labeller', wgUserName ? 'true' : 'false' ); window.loadedEditor = true; var editor = new Editor; TranslationAdders(editor); }	}

// The enable-disable button on WT:EDIT var node = document.getElementById('editor-js-disable-button');

if (node) {		node.innerHTML = ""; var toggle = newNode('span', {click: function 		{			if (prefs.get('enabled', 'true') == 'true')			{				toggle.innerHTML = "Enable";				prefs.set('enabled', 'false');			}			else			{				toggle.innerHTML = "Disable";				prefs.set('enabled', 'true');			}

} }, (prefs.get('enabled', 'true') == 'true' ? 'Disable' : 'Enable'))

node.appendChild(toggle); }

var node = document.getElementById("editor-js-labeller-button"); if (node) {		node.innerHTML = ""; var toggle2 = newNode('span', {click: function 		{			if (prefs.get('labeller') == 'true')			{				toggle2.innerHTML = "Enable";				prefs.set('labeller', 'false');			}			else			{				toggle2.innerHTML = "Disable";				prefs.set('labeller', 'true');			}

} }, (prefs.get('labeller') == 'true' ? 'Disable' : 'Enable'))

node.appendChild(toggle2);

} })

title: User:Anas1712/common.js


text:
-giig

Suffix

 * 1) used to express a converse relation or mutuality between two participants.
 * eqqiveqatigiipput - They live at peace with each other.

license: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/4.0/

title: -giig


text:
Silicon Beach

Proper noun

 * 1) Any of several coastal towns or cities that host hi-tech industries; examples include Los Angeles and Brighton

title: Silicon Beach


text:
ܟܠܬܐ

Etymology
From ; related to 🇨🇬 and 🇨🇬. For the alternative form without /t/ compare 🇨🇬.

Noun

 * 1) bride woman in the context of her own wedding
 * 2) daughter-in-law wife of one's child
 * 3) brother’s wife

Usage notes
Although most dialects use only the alternative form, some dialects that use both may reserve the alternative form for bride.

Etymology 1
From the root. Compare 🇨🇬 and 🇨🇬.

Noun

 * 1) bride
 * 2) any female affine: daughter-in-law, sister-in-law
 * 3)  clitoris, prepuce, foreskin
 * 4) poppy anemone,
 * 1) poppy anemone,

Etymology 2
From the root. Compare 🇨🇬 and 🇨🇬.

Noun

 * 1) veil, shroud, covering, wrap
 * 2) curtain, canopy, bedcover
 * 3) mosquito net
 * 4) girdle
 * 5)  angelic order
 * 6)  abundance
 * 7)  order of angels

title: ܟܠܬܐ


text:
dog-whistle politics

Noun

 * 1) Communicating (often contentious) political ideas in coded language, such that only a small group of voters understands them as they are meant to be understood.

title: dog-whistle politics


text: QWERTY phenomenon

title: QWERTY phenomenon


text:
healthspan

Etymology
From, modelled after.

Noun

 * 1) The length of time in one's life where one is in optimal health.

Related terms

 * gerospan

title: healthspan


text:
caapi

Noun

 * 1) A hallucinogen, obtained from the South American vine,, used medicinally by indigenous peoples of the Amazon.

title: caapi


text:
cacogeusia

Noun

 * 1)  An experience of a bad taste not due to ingested material

title: cacogeusia


text:
cacomelia

Noun

 * 1)  A congenital deformity of a limb

title: cacomelia


text:
cacoplastic

Adjective

 * 1)  Pertaining to, or causing, abnormal growth or formation.

title: cacoplastic


text: Category:ga:Horticulture

title: Category:ga:Horticulture


text:
ܚܙܘܐ

Etymology
Compare 🇨🇬.

Noun

 * 1) eyesight, the sense of sight
 * 2) vision, prophecy
 * 3) vision
 * 4)  miracles

Etymology
From the root related to seeing.

Noun

 * 1) sight, vision
 * 2) prophecy
 * 3) appearance, form, figure, aspect
 * 4) likeness, resemblance
 * 5) spectacle
 * 6)  miracles

Usage notes
The plural is usually used for the sense of "miracles" while the plural  is used for other senses.

title: ܚܙܘܐ


text:
osp

Etymology
From,.

Noun

 * 1) an aspen

Etymology
From, from. Cognates include 🇨🇬, 🇨🇬 and 🇨🇬. Akin to 🇨🇬.

Noun

 * 1) an aspen

Noun

 * 1) short for
 * 1) short for

Noun

 * 1) aspen

title: osp


text:
-kkuminar

Suffix

 * 1) used to express the quality of being good for something.
 * -> (qimmera) "(My dog) is a pleasure to be around"
 * -> (qimmera) "(My dog) is a pleasure to be around"
 * -> (qimmera) "(My dog) is a pleasure to be around"

title: -kkuminar


text:
Citations:healthspan

Noun: "the length of time in one's life where one is in optimal health"

 * 1992 — Mirabella, Volume 4, Issues 7-12, page 152:
 * An individual's healthspan, to a great extent, is written in the genes, says Richard Rivlin, MD, program director of the Clinical Nutrition Research Unit of Memorial Sloan-Kettering Cancer Center.
 * 1995 — Kay A. Van Norman, Exercise Programming for Older Adults, Human Kinetics (1995), ISBN 0873226577, page 3:
 * Improving the healthspan of older adults could dramatically lessen the impact of an aging population on the health care industry.
 * 1995 — Elizabeth Vierck, Health Smart: Your Personal Plan to Living Longer and Healthier, Prentice Hall (1995), ISBN 9780135011805, page 15:
 * Four life-style factors are linked to a shortened healthspan: (1) eating a poor diet, particularly one hight in fat,
 * 1996 — Elizabeth Lipski, Digestive Wellness, Keats Publishing (1996), ISBN 9780879836795, page 135:
 * Anyone who wants to can change their expectations and set goals of greater healthspan and well-being.
 * 1997 — Ed Rosenberg, Lois E. Layne, & Maureen Power, "Intergenerational Studies' Growing Pains: The Quest for Identity and Implications for Practice", in Intergenerational Approaches in Aging: Implications for Education, Policy and Practice (eds. Kevin Brabazon & Robert Disch), The Haworth Press (1997), ISBN 0789003562, page 19:
 * terms like "rectangularization of the survival curve" and "healthspan" describe longer, healthier lives for older Americans who are retiring earlier and seeking out new, more socially engaged roles
 * 1999 — The 21st Century (ed. Hilary D. Claggett), H. W. Wilson (1999), ISBN 9780824209667, page 136:
 * Moreover, many researchers believe it will be possible not only to extend life, but to make those extra years largely healthy and productive — expanding what longevity experts have dubbed "healthspan."
 * 1999 — Nicholas H. Dodman, Dogs Behaving Badly: An A-to-Z Guide to Understanding & Curing Behavioral Problems in Dogs, Bantam Books (1999), ISBN 9780553108736, page 52:
 * might consider that this is rather a hard-line approach, but it is a correct one from the lifespan and healthspan point of view.
 * 2000 — Peggy Canning (with Barbara C. McNurlin), Live Younger Longer with These Eleven Keys: The Body/Mind/Spirit Approach, Infinity Publishing (2000), ISBN 0741405733, page xi:
 * Extending your healthspan and longevity is no longer just a dream, it can become a reality.
 * 2001 — Mark P. Mattson, Ward A. Pedersen, & Carsten Culmsee, "Cellular and Molecular Mechanisms Underlying Synaptic Degeneration and Neuronal Death in Alzheimer's Disease", in Pathogenesis of Neurodegenerative Disorders (ed. Mark P. Mattson), Humana Press (2001), ISBN 0896038386, page 124:
 * At this point, the molecular and cellular mechanisms that promote increase healthspan of the brain are not known.
 * 2004 — David Petechuk, The Respiratory System, Greenwood Press (2004), ISBN 9780313324345, page xi:
 * This is primarily due to medical discoveries that increase not only lifespan but also healthspan, or the number of years that people live disease free.

title: Citations:healthspan


text:
-kkuutaar

Suffix

 * 1)  at a time
 * qulikkuutaarisaaseq - the decimal system
 * qulikkuutaarisaaseq - the decimal system
 * qulikkuutaarisaaseq - the decimal system

title: -kkuutaar


text:
Sulpician

Etymology
So called after the parish of St. Sulpice in Paris, of which the founder, Jean Jacques Olier, was pastor in 1643.

Noun

 * 1)  One of an order of priests established in France in 1642 to educate men for the ministry, and later introduced into Canada and the United States.

title: Sulpician


text: Sulpicians

title: Sulpicians


text:
bully tree

Noun

 * 1) Any of several West Indian trees of the family  of tropical trees that yield a milky sap.
 * 2)  spp.
 * 3)  (bulletwood),

title: bully tree


text: bully trees

title: bully trees


text: gutta-perchas

title: gutta-perchas


text:
taʼunö

Verb

 * 1) to be dirty

title: taʼunö


text: Sulpitian

title: Sulpitian


text: Sulpitians

title: Sulpitians


text:
sökhi

Verb

 * 1)  to be good

title: sökhi


text: idioplasm

title: idioplasm


text: trigrammic

title: trigrammic


text: Ignatius beans

title: Ignatius beans


text: waö

title: waö


text:
vauqueline

Noun

 * 1)  strychnine

title: vauqueline


text:
aonclle

Etymology
From, from , from.

Noun

 * 1)  uncle

title: aonclle


text:
tracheate

Adjective

 * 1)  Having tracheae.

Synonyms

 * tracheated

Noun

 * 1)  Any arthropod with tracheae; one of the Tracheata.

Verb

 * 1)  To form tracheae

title: tracheate


text: tracheates

title: tracheates


text:
subalternating

Adjective

 * 1) subalternate; successive

title: subalternating


text: pediluvies

title: pediluvies


text:
pediluvy

Noun

 * 1)  The bathing of the feet.
 * 2)  A bath for the feet.

title: pediluvy


text:
bötö

Verb

 * 1) to be injured, wounded

title: bötö


text:
draole

Etymology
Compare 🇨🇬.

Adjective

 * 1)  funny

title: draole


text:
seminose

Etymology
seed +.

Noun

 * 1)  A carbohydrate of the glucose group found in the thickened endosperm of certain seeds, and extracted as yellow syrup; D-mannose.

title: seminose


text:
ciaj

Noun

 * 1) pliers, tongs

title: ciaj


text: ciajn

title: ciajn


text:
tripodian

Noun

 * 1)  An ancient stringed instrument, resembling the Delphic tripod in form.

title: tripodian


text: tripodians

title: tripodians


text:
statarianly

Adverb

 * 1)  fixedly; steadily

title: statarianly


text:
bohou

Etymology
From, from.

Verb

 * 1) to be new

title: bohou


text:
Template:nrf-verb/documentation

Usage
All parameters are optional:
 * ger
 * The gerund form.

 * head
 * Specifies a different headword. Particularly useful for (idiomatic) phrases, which allow one to link individual words or subphrases.

title: Template:nrf-verb/documentation


text: Template:nrf-verb

title: Template:nrf-verb


text:
acataïr

Etymology
From, from. Compare 🇨🇬.

Verb

 * 1)  to buy

title: acataïr


text:
amendaïr

Verb

 * 1)  to improve

title: amendaïr


text:
apportaïr

Etymology
From, present active infinitive of , from +.

Verb

 * 1)  to bring

title: apportaïr


text:
cyclamin

Noun

 * 1)  A white amorphous substance, originally regarded as a glucoside but now known to be a triterpenoid glycoside, extracted from the corm of.

title: cyclamin


text:
instyle

Etymology
?

Verb

 * 1)  To style.

title: instyle


text: instyled

title: instyled


text: instyles

title: instyles


text: instyling

title: instyling


text:
arrêtaïr

Etymology
From, from , from +.

Verb

 * 1)  to stop

title: arrêtaïr


text: arrivaïr

title: arrivaïr


text:
doob grass

Etymology
, from. The first element is a.

title: doob grass


text:
attrapaïr

Verb

 * 1)  to catch

title: attrapaïr


text:
caontinuaïr

Etymology
Borrowed from, present active infinitive of.

Verb

 * 1)  to continue

title: caontinuaïr


text:
brulaïr

Etymology
From.

Verb

 * 1)  to burn

title: brulaïr


text:
Liparian

Adjective

 * 1) Of or relating to Lipari, the largest of the Aeolian Islands in the Tyrrhenian Sea off the north coast of Sicily, Italy.

Noun

 * 1) Someone from Lipari.

title: Liparian


text:
heteroptics

Noun

 * 1) hallucination; the vision of something that is not real.

title: heteroptics


text: connivencies

title: connivencies


text:
connivency

Noun

 * 1)  connivance

title: connivency


text:
atulö

Verb

 * 1)  to be correct

title: atulö


text:
fulham

Etymology
So called because loaded dice were supposed to have been chiefly made at Fulham, originally in Middlesex, England.

title: fulham


text:
diploetic

Adjective

 * 1)  diploic

title: diploetic


text:
rassassiaï

Adjective

 * 1)  full, satisfied

title: rassassiaï


text:
aveir sé

Verb

 * 1)  to be thirsty

title: aveir sé


text: hemicranies

title: hemicranies


text: hemicrany

title: hemicrany


text:
bunu

Etymology
From.

Verb

 * 1) to kill

Noun

 * 1)  cat

Etymology
From.

Verb

 * 1) to kill

Derived terms

 * mamumunu'

title: bunu


text:
mayfish

Noun

 * 1) A.

title: mayfish


text: sasheries

title: sasheries


text:
sashery

Noun

 * 1)  A collection of sashes; ornamentation by means of sashes.

title: sashery


text: Areopagist

title: Areopagist


text: Areopagists

title: Areopagists


text:
l'vaïr

Etymology
From, from , from.

Verb

 * 1)  to raise, lift
 * 2)  to get up

title: l'vaïr


text:
crop-ear

Noun

 * 1) A person or animal whose ears are cropped.

title: crop-ear


text: crop-ears

title: crop-ears


text:
ceduous

Etymology
From, from.

Adjective

 * 1)  Of a tree: fit to be felled.

title: ceduous


text:
r'mertcher

Etymology
Cognate to 🇨🇬.

Verb

 * 1)  to notice

title: r'mertcher


text:
r'paraïr

Etymology
From.

Verb

 * 1)  to clean

title: r'paraïr


text:
réfredger

Verb

 * 1)  to grow cold

title: réfredger


text:
ventaïr

Verb

 * 1)  to be windy, blow

title: ventaïr


text:
trouvaïr

Etymology
From, , from , present active infinitive of , from.

Verb

 * 1)  to find

title: trouvaïr


text:
trimmaïr

Etymology
From +.

Verb

 * 1)  to fix, set up

title: trimmaïr


text:
Otomanguean

Proper noun

 * 1) A large language family comprising several families of Native American languages.

title: Otomanguean


text:
travaillier

Etymology
From, from , from.

Verb

 * 1)  to work

title: travaillier


text:
trâlaïr

Verb

 * 1)  to travel

title: trâlaïr


text:
trachier

Etymology
From.

Verb

 * 1)  to search

title: trachier


text:
tcheure

Verb

 * 1)  to collect, fetch

title: tcheure


text: tcheir

title: tcheir


text:
User talk:208.81.184.4

 * The main talk page for editors at this IP address is found at w:User talk:208.81.184.4. Please consider posting comments there instead of here.

Restricted editing from this IP address
Due to a change in company internet usage policy, people using this IP address can no longer be involved with any change on any Wikimedia project which might in any way be considered an expression of "personal opinions on political, social, inflammatory or volatile subjects". This is being interpreted very broadly, and as such, this essentially precludes editors from this IP from participating above the most basic WikiGnome level (e.g. typos, misspellings, minor formatting fixes). Sorry for this unexpected change, and thanks to everyone with whom editor(s) from this IP have worked with in the past. -- 208.81.184.4 (talk) 22:48, 9 May 2012 (UTC)

title: User talk:208.81.184.4


text:
taempêtaïr

Verb

 * 1)  to be stormy

title: taempêtaïr


text:
stoffaïr

Etymology
From +.

Verb

 * 1)  to stuff

title: stoffaïr


text:
s'tcher

Etymology
From, , from , from.

Verb

 * 1)  to dry

title: s'tcher


text:
s'pllaindre

Verb

 * 1)  to complain

title: s'pllaindre


text:
méfiaïr

Etymology
From +  (compare 🇨🇬).

Verb

 * 1)  to beware

title: méfiaïr


text:
s'maïr

Etymology
From, from ,.

Verb

 * 1)  to sow seed

title: s'maïr


text:
lavalier

Etymology
From, named after the Duchesse de la Vallière, a mistress of King Louis XIV of France.

Noun

 * 1) An item of jewellery consisting of a pendant, sometimes with one stone, suspended from a necklace.
 * 2) A lavalier microphone.

Alternative forms

 * lavaliere

Derived terms

 * lavalier microphone

Translations

 * Hungarian:

 * Czech: mikroport
 * French: micro-cravate
 * Hungarian: csíptethető mikrofon, násfa-mikrofon
 * Polish:
 * Spanish: micrófono de solapa

title: lavalier


text: lavaliers

title: lavaliers


text:
cllergir

Verb

 * 1)  to clear

title: cllergir


text:
faigi

Verb

 * 1)  to see

title: faigi


text:
collectaïr

Etymology
Compare 🇨🇬.

Verb

 * 1)  to collect

title: collectaïr


text:
copaïr

Etymology
From, , from , , from , from.

Verb

 * 1)  to cut

title: copaïr


text:
coûtaïr

Etymology
From, from.

Verb

 * 1)  to cost

title: coûtaïr


text:
creitre

Etymology
From, from.

Verb

 * 1)  to grow, alternative form of creître.

title: creitre


text:
croindre

Verb

 * 1)  to fear, be afraid of

title: croindre


text:
chairoplane

Etymology
.

Noun

 * 1) A fairground ride, a variation on the carousel in which the chairs are suspended from the rotating top of the carousel.

title: chairoplane


text: chairoplanes

title: chairoplanes


text:
User talk:75.130.122.101

Hi. Please use WT:REE to request words instead of creating blank entries. Equinox ◑ 23:14, 9 May 2012 (UTC)

title: User talk:75.130.122.101


text: arpine

title: arpine


text:
dépensaïr

Etymology
From.

Verb

 * 1)  to spend

title: dépensaïr


text:
decidaïr

Etymology
From, from +.

Verb

 * 1)  to decide

title: decidaïr


text:
d'màndaïr

Etymology
From, from ,.

Verb

 * 1)  to ask

title: d'màndaïr


text:
d'meuraïr

Etymology
From (compare 🇨🇬).

Verb

 * 1)  to live, reside

title: d'meuraïr


text:
dounnaïr

Etymology
From, from , from.

Verb

 * 1)  to give

title: dounnaïr


text:
barred owl

Noun

 * 1) A large American owl  with dark brown transverse bars on the breast.

Translations

 * Cherokee: ᎤᎫᎫ
 * Finnish:
 * French: chouette rayée
 * Russian: пёстрая нея́сыть

title: barred owl


text: barred owls

title: barred owls


text: unharbor

title: unharbor


text:
oïmaïr mux

Verb

 * 1)  to prefer

title: oïmaïr mux


text:
papraïr

Verb

 * 1)  to wallpaper

title: papraïr


text: rambillaïr

title: rambillaïr


text: unharbored

title: unharbored


text:
ravissànt

Adjective

 * 1)  surprising

title: ravissànt


text:
d'visaïr

Etymology
Compare 🇨🇬.

Verb

 * 1)  to speak, talk

title: d'visaïr


text:
écànchier

Verb

 * 1)  to happen by chance

title: écànchier


text:
éprouvaïr

Etymology
From +  (compare 🇨🇬).

Verb

 * 1)  to try

title: éprouvaïr


text:
errousaïr

Verb

 * 1)  to water

title: errousaïr


text:
espéraïr

Etymology
From (compare 🇨🇬), from, from.

Verb

 * 1)  to hope

title: espéraïr


text:
frottaïr

Etymology
Probably from, present active infinitive of , frequentative of through its past participle.

Verb

 * 1)  to rub, rub down

title: frottaïr


text:
frumaïr

Etymology
From, from.

Verb

 * 1)  to close

title: frumaïr


text: gardaïr

title: gardaïr


text:
lavaïr

Etymology
From, from.

Verb

 * 1)  to wash

title: lavaïr


text:
libéraïr

Etymology
Borrowed from.

Verb

 * 1)  to free, liberate

title: libéraïr


text:
Hocktide

Etymology
Derived from an first element +.

Proper noun

 * 1)  A medieval English festival celebrated on the second Monday and Tuesday after Easter Sunday. The festivities involved men and women tying each other up and demanding a kiss or other payment for release.

title: Hocktide


text:
libératiaon

Etymology
From.

Noun

 * 1)  liberation

title: libératiaon


text: Hockday

title: Hockday


text:
söfu

Noun

 * 1) poison

title: söfu


text:
concertative

Etymology
The "quarrelsome" sense is from.

The concertation sense is a, replacing the suffix with.

Adjective

 * 1)  Related to concertation, especially in the context of tripartism.

title: concertative


text:
màncher

Etymology
From (compare 🇨🇬).

Verb

 * 1)  to miss

title: màncher


text: mouorir

title: mouorir


text:
muchier

Etymology
From, , , from , from , , from ,.

Verb

 * 1)  to hide

title: muchier


text:
oïmaïr

Etymology
From the conjugated forms of, , from.

Verb

 * 1)  to like, love

title: oïmaïr


text:
ouir

Etymology
From, from , present active infinitive of , from , from the root.

Verb

 * 1)  to hear

Etymology
From, present active infinitive of , a compound of (from the root ) and.

Verb

 * 1) to

Descendants
Via :

Via :
 * Eonavian: ouguir

title: ouir


text:
pâssaïr

Etymology
From, from , derived from.

Verb

 * 1)  to pass

title: pâssaïr


text:
pensaïr

Etymology
From, from.

Verb

 * 1)  to think

title: pensaïr


text:
portaïr

Etymology
From, from.

Verb

 * 1)  to carry
 * 2)  to wear

title: portaïr


text:
postaïr

Etymology
From +.

Verb

 * 1)  to post

title: postaïr


text:
pouôinturaïr

Etymology
(compare 🇨🇬, from )

Verb

 * 1)  to paint

title: pouôinturaïr


text:
pourménaïr

Verb

 * 1)  to go for a walk

title: pourménaïr


text:
pouvier

Etymology
From, , from early Old French , from for Classical , present active infinitive of. *Potēre was a regularized form from the root or formed on the basis of the present participle. The v is an epenthetic consonant added to avoid hiatus.

Verb

 * 1)  can, to be able to

title: pouvier


text:
pratitcher

Etymology
From, from , from , from , from , from.

Verb

 * 1)  to practise

title: pratitcher


text:
prèparaïr

Verb

 * 1)  to prepare

title: prèparaïr


text:
sanagö

Noun

 * 1) thief

title: sanagö


text:
raose

Noun

 * 1)  rose

title: raose


text:
ramassaïr

Etymology
From.

Verb

 * 1)  to pick up, gather

title: ramassaïr


text:
raombillaïr

Verb

 * 1)  to forget

title: raombillaïr


text:
s'i'vous pllait

Phrase

 * 1)  please, if you please

title: s'i'vous pllait


text:
sadistisch

Etymology
From.

Adjective

 * 1) sadistic

Adjective

 * 1) sadistic

title: sadistisch


text:
maette

Etymology
From, from.

Verb

 * 1)  to put

title: maette


text:
llierre

Etymology
From (compare 🇨🇬), from.

Verb

 * 1)  to read

title: llierre


text:
Citations:al desko

Adverb: "at a desk (typically used of eating)"

 * 1981 — Stephanie Mansfield, "The Last Memo", The Washington Post, 30 January 1981:
 * Lunches usually consist of cold sandwiches consumed al desko.
 * 1993 — Tony Gabrielle, "Whining and Dining With a Computer", Daily Press, 4 March 1993:
 * However, there is another office innovation that creates a problem when dining al desko.
 * 1994 — "Workers Are Increasingly In To Lunch", Philadelphia Daily News, 29 March 1994:
 * The number of folks who have taken to dining al desko is causing some new problems in the workplace.
 * 1997 — "Ahead of the Curve", Atlanta Journal-Constitution, 30 June 1997:
 * Busy professionals in the area say they welcome the new retailer and figure to hit the deli for lunch al-desko often.
 * 1998 — InfoWorld, 2 March 1998, page 27 (ad copy):
 * Looks like another night of dining al desko.
 * 2004 — Alex Elgar, "Dining 'Al desko'”, The CB Friday, 12 November 2004:
 * A recent study published in a British daily claimed that dining ‘al desko’ was fast becoming the new norm for office workers.
 * 2005 — Chris Lloyd, "A regal twist to a Real mystery, The Northern Echo, 18 June 2005:
 * I learn that because so many people now dine al-desko, the average desktop contains 400 times as many bacteria as a toilet seat.
 * 2005 — Ralph Berrier Jr., "Dining al desko," The Roanoke Times, 19 October 2005:
 * A recent survey by the American Dietetic Association revealed that 67 percent of Americans eat lunch at their desks, a lunchtime phenomenon that office workers have dubbed "dining al desko."

title: Citations:al desko


text:
arlevaïe

Alternative forms

 * , r’levaïe

Noun

 * 1)  afternoon

title: arlevaïe


text:
旦那

Etymology
From, , both used as transliterations of. Ultimately cognate with 🇨🇬 and, from.

Noun

 * 1)  generosity as one of the Buddhist perfections
 * 2)  a donation of money, goods, or service to monks or a temple
 * 3)  a person who makes such a donation: a patron
 * 4)  in the Japanese medieval period, overnight visitors to a shrine or temple
 * 5)  by extension, a gentleman
 * 6) broadly, a patron, a husband, a master:
 * 7)  a master of servants, a boss of employees, the master of the house
 * 8)  by extension, an honorific for one's own or someone else's husband
 * 9)  also by extension, used by shopkeepers to address a male customer or by an artisan to refer to one's own school or lineage
 * 10)  a term used by a concubine, mistress, or geisha to refer to one's own patron: a sugar daddy
 * 11)  a term used by female servants to refer to the mistress of the house
 * 1)  a term used by a concubine, mistress, or geisha to refer to one's own patron: a sugar daddy
 * 2)  a term used by female servants to refer to the mistress of the house

Usage notes
The, , and senses may be the most commonly used meanings in modern Japanese.

When referring to another person's husband, this term is often suffixed with as 旦那様 (danna-sama).

The sense in Buddhist contexts is often spelled.

Derived terms

 * : to act or behave masterfully
 * : an art or cultural pursuit studied by someone who is well-to-do as a means of passing the time
 * : a Buddhist temple supported by a household that has converted to Buddhism
 * : having patronage; someone that has patronage (generally female, such as a geisha)
 * : taking a master, as a servant; becoming a mistress or concubine
 * : a good customer

Idioms

 * : "to take a master", to find a patron → generally refers to a geisha or other female finding a male to look after their needs
 * : "not even the devil can match the master for getting down to hard work" → someone who rarely has to get involved in actual work will work very hard when they have to roll up their sleeves and do it themselves
 * : "fights between masters start from the guardsmen" → disputes between the powerful often arise from minor disputes among their employees or followers: petty foibles can lead to big battles
 * : "the master's beloved red eboshi hat" → are traditionally black, so a red eboshi indicates someone willing to go against tradition: no matter how strange, one must follow one's master
 * : "(better) in front of a pot than in front of a master" → it is better to be one's own master, even if it means being poor
 * : "three hundred for the master, five hundred for me" → people generally think of their own benefit more than the benefit of their masters or bosses

title: 旦那


text: だんな

title: だんな


text:
référencer

Etymology
From.

Verb

 * 1) to list (a product in a catalogue), to put (a product on the shelves)

title: référencer


text:
User talk:Speednat

Leave me a message Speednat (talk) 01:27, 10 May 2012 (UTC)

Template reference-book
You are using as if it were for references for "References" section. However, the template seems to be inteded for quotations of use: it has the parameter "quote", and it ends the work identification with a colon, suggesting a quotations is comming.

Furthermore, why are you providing all the empty parameters like this?

This can much more succintly be entered like this:

There are many templates used in the references sections that you can use as a model for formatting, such as and. You can find more of them at Category:Reference templates. They usually do not provide such details of ISBN, as that is not necessary for the identification of the source. Of course, they do not provide a page number, as that would be specific for a particular entry, and seems too much detail anyway. --Dan Polansky (talk) 21:17, 4 January 2013 (UTC)
 * On a second thought, ISBN is probably not a bad thing, as it provides a unique identification. But the editor of the work is superfluous, IMHO, as long as publisher is provided. --Dan Polansky (talk) 21:22, 4 January 2013 (UTC)

 * I have looked at the reference templates on file, but could not find the ones that I needed. Also, I also am not sure why I still use all of the parameters on the templates that I use. It probably was because I wanted to add as much info as possible, and when I filled it out I didn't delete the empty fields once I realized that they would remain empty. Regardless, I have fixed that now, which should allow for a cleaner "edit" page. I believe that they can be used for quotes; however I do use the template when I add a quote as that one seems to have been designed for quotes. Thanks for your input. Speednat (talk) 21:31, 4 January 2013 (UTC)
 * Okay. I ask you to no longer use {{temp|reference-book} in References sections. For common practices in referring to sources from "External links" section, see, , and Category:Reference templates. Furthermore, notice that Wiktionary does not depend on dictionaries to verify or source its definitions, relying on actualy quotes of use instead. --Dan Polansky (talk) 21:36, 4 January 2013 (UTC)
 * Thus, instead of the improper template, you can write this:
 *  Webster's Third International Dictionary of the English Language Unabridged, G. & C. Merriam Co., 1976 .
 * --Dan Polansky (talk) 21:38, 4 January 2013 (UTC)
 * I appreciate your zeal, but I believe that the templates I am and will continue to use are correct, as I have had many conversations with admins and other editors over my use of the "reference" templates. Speednat (talk) 21:41, 4 January 2013 (UTC)
 * I ask you to stop reverting me at Abyssinian primrose. Your use of the template is incorrect. --Dan Polansky (talk) 21:46, 4 January 2013 (UTC)
 * Please read the following This template is used to cite sources in Wiktionary. It is specifically for books. This is pulled off of the page for the reference-book template in question. It is very clear what it is to be used for and what I am using it for, citing a source, is correct. Please stop reverting my edits. Speednat (talk) 21:50, 4 January 2013 (UTC)
 * The template description is confusing. By looking at the template page, you may find it is tagged for RFM: WT:RFM. As I have pointed out to you, the template text ends with a colon, unsuitable for refernce section. Finally, the template formatting does not match what is customary in reference sections. --Dan Polansky (talk) 21:52, 4 January 2013 (UTC)

 * Dan is correct, that this is a citation / quotation template for use in supporting usage examples taken from reference books. It is not for the citing of factual information, and in fact we don't really care whether our words appeared in other dictionaries or not. --EncycloPetey (talk) 23:08, 4 January 2013 (UTC)

Source of quotations
How did you find the quotation that you have placed at Abyssine? --Dan Polansky (talk) 23:48, 4 January 2013 (UTC)
 * What did I do wrong now? Speednat (talk) 00:05, 5 January 2013 (UTC)
 * Will you answer my question? --Dan Polansky (talk) 00:11, 5 January 2013 (UTC)
 * I searched through the internet for the use of the word, am I not allowed to use the internet now? Speednat (talk) 00:16, 5 January 2013 (UTC)
 * So where in the Internet did you find the quotation that you have placed at Abyssine? --Dan Polansky (talk) 00:18, 5 January 2013 (UTC)
 * I am not going to waste my time communicating with you, if you persist on asking inane questions. I documented the quote. Leave me alone. Speednat (talk) 00:22, 5 January 2013 (UTC)
 * I cannot find the quote in the Internet. Thus, I am asking where you have found the quote. --Dan Polansky (talk) 00:23, 5 January 2013 (UTC)

a.c.
I've always seen alternating current abbreviated as AC or A.C.. Are you sure you've seen it written as a.c.? --EncycloPetey (talk) 01:05, 5 January 2013 (UTC)
 * quotes are in, I only threw those 2 quotes up, and 1 is shaky because, but I can find more if you need. Let me know Speednat (talk) 01:36, 5 January 2013 (UTC)

Template:productive
Please be more careful. When you created "Template:not productive", then moved it to "Template:productive", you left behind a redirect that changed all instances of (not productive) in entries to say (productive) instead. That's the opposite of what the entries should have said. I have deleted the redirect for you. --EncycloPetey (talk) 02:12, 5 January 2013 (UTC)

Copyright of collections of quotations
You have not answered my question in about the origin of your quotations in a satisfactory manner. Thus, there is an uresolved suspicion.

Be clear about this: collections of dictionary quotations are subject to copyright of the dictionary that collected them. While each individual quotation can be used in Wiktionary under fair-use rationale if not yet in public domain, the process of selection of quotations applied by editors of a dictionary creates a unique work. Thus, if you ever decide to copy a singificant portion of one dictionary's selection of quotations to Wiktionary, that is going to be a copyright violation. I am not saying you are doing that; however, if you have in part done that or are planning to do so, please refrain. --Dan Polansky (talk) 09:24, 5 January 2013 (UTC)

In case of doubt, please ask your advisor in the high school or university that you are studying. --Dan Polansky (talk) 09:26, 5 January 2013 (UTC)

 * Advisor, actually professor of my college research class asked and verified that I am correct in doing what I am doing. As long as citations are used, you may quote verbatim out of books, regardless of how often you do it. I didn't need my professor to tell me that, but since you asked, I obliged. This will be the final conversation with you on the subject of copyright violation I will have, as obviously you do not understand the fair use rules. Speednat (talk) 06:20, 9 January 2013 (UTC)
 * Can you state the question that you have asked the professor? You can quote verbatim out of copyrighted books, but you cannot use a copyrighted dictionary as a means of selection of these quotations. --Dan Polansky (talk) 13:19, 12 January 2013 (UTC)

acanthodean
Please note that for alt-forms, we do not add interproject links, translations, contexts, glosses, pronunciations, or anything else unless any of those would differ from the main page they are pointing to. All of these hold true for the page acanthodian:, so they are unnecessary. Thanks! —Μετάknowledge discuss/deeds 06:20, 3 February 2013 (UTC)

Template:borrowing
The lang parameter in refers to the language of the entry, not the language of the etymon. This is different from, hence the confusion.

Also please use a space after a fullstop.otherwise it looks really ugly. Mglovesfun (talk) 13:17, 3 February 2013 (UTC)

When to use {etyl|en}
Hello, you seem to have been misusing a lot. Doing that categorises a word into Category:English twice-borrowed terms, which is only appropriate if the word came from another language which had already borrowed it from English. Good examples are and, which are from  and   respecively, but have undergone semantic, orthographic and phonologic shift in the mean time and are now wholly separate English terms. is useful, but should only be used in certain uncommon cases, not any time an English word is from another English word. Thanks so much! —Μετάknowledge discuss/deeds 02:12, 18 March 2013 (UTC)
 * I should note that a lot of time, you can avoid using it by using etc more effectively. For example, see this edit I made to your etymology at . —Μετάknowledge discuss/deeds 02:14, 18 March 2013 (UTC)

Template:mul-proper noun
If you are interested, see Template_talk:mul-proper_noun. DCDuring TALK 00:03, 5 July 2013 (UTC)

Appalachian a- prefix
Why did you remove information about the use of the a- prefix in the Appalachian dialect? It still exists in use on a daily basis. Wōdenhelm (talk) 01:49, 19 July 2013 (UTC)

Unattested Acanthasitta
What makes you think Acanthasitta, which you created, is a real word, meeting WT:ATTEST? --Dan Polansky (talk) 09:47, 7 December 2013 (UTC)

 * I am not sure why you think you can single me out, but if you spent less time attacking me and more time searching for words and their usage you would find things like this. http://newzealandecology.org/nzje/free_issues/NZJEcol34_1_28.pdf or this http://www.boprc.govt.nz/media/33700/Wildland-091118-TaurangaEcolDistPhase1.pdf or this http://www.sahs.uk.net/BoTNHAS%20Trans%20Vol%20V,%20Part%20II.pdf on Page 186. Please before you attack me in the future, do your research with the same dedication that you use to, well, attack me. Sincerely Speednat (talk) 18:24, 8 January 2014 (UTC)
 * He's not singling you out- he haunts several other talk pages. I'm not sure whether to recommend an exorcist or a proctologist. Chuck Entz (talk) 14:55, 23 January 2014 (UTC)

Some new reference templates
FYI, I created some new reference templates for works that I saw were being cited quite often:, , and  (quod vide); they all allow one optional parameter, "page=", which specifies a page number. You can now use those templates rather than writing out the same long list of parameters over and over. More generally, if you find yourself citing the any reference work over and over, consider creating a dedicated template for it like those four, if there isn't one in Category:Reference templates already. Cheers, - -sche (discuss) 03:45, 10 February 2014 (UTC)
 * I've also created and . - -sche (discuss) 21:27, 10 February 2014 (UTC)

 * You Rock !! Speednat (talk) 00:54, 13 February 2014 (UTC)

title: User talk:Speednat


text:
loqlaq

Adjective

 * 1) Not thinking straight; not being careful in doing something.
 * 2) Being obscene, being immoral of doing anything approximate to sexual acts or words.
 * 3) Impolite, ill-mannered, inappropriate to elders
 * 1) Impolite, ill-mannered, inappropriate to elders
 * 1) Impolite, ill-mannered, inappropriate to elders

title: loqlaq


text: Appendix:Sinhalese Swadesh list

title: Appendix:Sinhalese Swadesh list


text:
User:Catsidhe

Lua
Lua sandbox

Irish
Proposed Irish Pronouns table for use in a template to add to the relevant lemmas.

 category=Irish lemmas namespace=0 count=20 addfirstcategorydate=true mode=ordered order=descending

Old Irish
Old Irish Nouns and proposed tables

 category=Old Irish lemmas namespace=0 count=20 addfirstcategorydate=true mode=ordered order=descending

User:Catsidhe/sga-nasal
Takes two arguments, but the second one is not needed (but possible for compatibility with the lenition template, and for future expansion of the concept) So it can be called as either  ,   , or  ord : makes no difference to the result.

 * Aes =
 * ball = a
 * daltae =
 * gásur =
 * óen =
 * triall =

User:Catsidhe/sga-lenite
Owing to some frankly ridiculous restrictions in the programming environment for string manipulation, this requires the first letter to be split off. It does not check for a string longer than 1 character. An initial consonant of longer than one character isn't an issue in Irish, but can come in to play for, eg., Breton.

Must be supplied with the first letter split off from the rest. The rest of the word should be the second variable:  . Do not put it outside the template as  ord , as lenition is suppressed for [s] followed by [c], [m], [p] or [t]. If the rest of the word is extracted, then this case cannot be detected.

 * cathóir = a
 * fer = a
 * scian = a
 * snam =
 * dúnta =

Templates

 * Template:sga-conj-attá Conjunction of  "to be"
 * Template:sga-conj-simplex Conjunction of simplex verbs
 * Template:sga-conj-complex Conjunction of complex verbs
 * Template:sga-decl-o-masc Declination of -o- stem masculine nouns

title: User:Catsidhe