User:ערן/WeaselWords.js

/* Written by User:Ravid ziv and User:ערן mw.hook( 've.activationComplete' ).add(function{	//importStylesheetURI('//tools.wmflabs.org/eranbot/clippy.css');	//$.getScript('//tools.wmflabs.org/eranbot/clippy.min.js')

var loadedAgent; var weasleWords = []; var warningsForWeasleWords = []; var WEASLE_WORD_PAGE = mw.config.get('WEASLE_WORD_PAGE') || "Wikipedia:Manual of Style/Words to watch/Config"

function loadAgent(callback){ callback(loadedAgent); /*		if(loadedAgent) { callback(loadedAgent); }		else {			clippy.load('Clippy', function(agent) {				loadedAgent = agent;				agent._balloon.CLOSE_BALLOON_DELAY=8000;				agent.show;				if ( $('body').hasClass('ltr') ) {					agent.moveTo(50,50);				} else {					agent.moveTo($('#mw-panel').position.left, 50);				}				agent._el.dblclick(function{agent.hide});				callback(loadedAgent);			}); }		*/	}

function showWarning(warn, x, y){ loadAgent(function(agent) {			mw.notify(warn);			/*			agent.speak(warn);			if (x && y) {				agent.moveTo(x,y);			}			*/		}); }

function loadWeaselWords {		var api = new mw.Api; api.get({			action:'parse',			page: WEASLE_WORD_PAGE,			prop: 'wikitext'			}).done(function (data) {				var text = data.parse.wikitext['*'].split('-')[1]				var genrealWeasleWords = text.split('\n*');

for (var i=0;i<genrealWeasleWords.length;i++) {					var splitedweasleWords = genrealWeasleWords[i].split("//"); if ( splitedweasleWords.length !== 2 ) continue; weasleWords.push( new RegExp( splitedweasleWords[0], 'i' ) ); warningsForWeasleWords.push(splitedweasleWords[1]); }				searchWeasleWarnings( getText.join('\n') ); });	}

function searchWeasleWarnings( text, ignoreWarning ){ var warnings = []; for (var i=0; i0 && !ignoreWarning ) { showWarning( warnings.join('\n') ); }		return warnings.length>0; }	function extractText{ var nodes = []; function getTextNodes( obj ) { var i;

for ( i = 0; i < obj.children.length; i++ ) { if ( obj.children[i].type == 'text'){ nodes.push(obj.children[i]); }

if ( obj.children[i].children ) { getTextNodes( obj.children[i] ); }			}		}		getTextNodes(model.documentModel.getDocumentNode); return nodes; }

function getText { var textNodes = extractText; var firstIndex = 0; var numReplacements = 0; var text = [];

for (var nodeI = 0; nodeI < textNodes.length; nodeI++) { var node = textNodes[nodeI]; var nodeRange = node.getRange; var nodeData = model.getLinearFragment( nodeRange ).getData; var nodeText = $.map(nodeData, function( e ){					if ( e instanceof Array){ return e[0]; } else { return e; }				}).join(''); ;

text.push(nodeText);

}

return text; };

var view = ve.init.target.getSurface.getView; var doc = view.getDocument; var model = ve.init.target.getSurface.getModel; var cachedNode = null; //while editing - only on current node model.on( 'documentUpdate', function {	try	{

var text, selection = model.getSelection, node = doc.getBranchNodeFromOffset( selection.getRange.start ), textMatches; if ( !( node instanceof ve.ce.ContentBranchNode ) ) { return; }		var hasWarnings = searchWeasleWarnings( $( node.$element[0] ).text, $( node.$element[0] ).data( 'weaselWords' ) ); if (hasWarnings){ $( node.$element[0] ).data( 'weaselWords', true); } else { $( node.$element[0] ).data( 'weaselWords', null); }	}	catch(e){ //the ve objects are not stable and it will 100% break some day so just ignore errors.... console.log(e); }	}	);

// loadAgent(function{}) loadWeaselWords; });