משתמש:ערן/wikidataTemplateData.js

הערה: לאחר הפרסום, ייתכן שיהיה צורך לנקות את זיכרון המטמון (cache) של הדפדפן כדי להבחין בשינויים.

  • פיירפוקס / ספארי: להחזיק את המקש Shift בעת לחיצה על טעינה מחדש (Reload) או ללחוץ על צירוף המקשים Ctrl-F5 או Ctrl-R (במחשב מק: ⌘-R).
  • גוגל כרום: ללחוץ על צירוף המקשים Ctrl-Shift-R (במחשב מק: ⌘-Shift-R).
  • אדג': להחזיק את המקש Ctrl בעת לחיצה על רענן (Refresh) או ללחוץ על צירוף המקשים Ctrl-F5.
if (mw.config.get( 'wgNamespaceNumber' ) === 10 && mw.config.get('wgAction') ==='edit') 
$(function(){

//copied from TemplateData ext
function findModelInString( templateDataString ) {
	var parts;

	parts = templateDataString.match(
		/<templatedata>([\s\S]*?)<\/templatedata>/i
	);

	if ( parts && parts[ 1 ] && parts[ 1 ].trim().length > 0 ) {
		return parts[ 1 ].trim();
	} else {
		return null;
	}
};

function replaceTemplateData( newTemplateData ) {
	var matches, templateDataOutput,
		templateDataJSON = JSON.stringify( newTemplateData, null, '\t' ),
		templatedataPattern = /(<templatedata>\s*)([\s\S]*?)\s*<\/templatedata>/i,
		$textarea = $('#wpTextbox1'), isPageSubLevel=false,
		originalWikitext = $textarea.val();

	if ( ( matches = originalWikitext.match( templatedataPattern ) ) ) {
		// Move cursor to select withing existing <templatedata> and whitespace
		$textarea.textSelection( 'setSelection', {
			start: matches.index + matches[ 1 ].length,
			end: matches.index + matches[ 1 ].length + matches[ 2 ].length
		} );
		templateDataOutput = templateDataJSON;
	} else {
		$textarea.textSelection( 'setSelection', { start: originalWikitext.length } );

		templateDataOutput = '<templatedata>\n' + templateDataJSON + '\n</templatedata>';

		if ( !isPageSubLevel ) {
			if ( ( matches = originalWikitext.match( /<\/noinclude>\s*$/ ) ) ) {
				// Move cursor inside </noinclude>
				$textarea.textSelection( 'setSelection', { start: matches.index } );
			} else {
				// Wrap in new <noinclude>s
				templateDataOutput = '<noinclude>\n' + templateDataOutput + '\n</noinclude>\n';
			}
		}

		if ( originalWikitext.substr( -1 ) !== '\n' ) {
			templateDataOutput = '\n' + templateDataOutput;
		}
	}
	$textarea.textSelection( 'replaceSelection', templateDataOutput );
};


	function addWikidataMap(){
		var paramExtractor = /\| *(.+)-ויקינתונים(?!-פרטים).*= *(P[0-9]+)/g,
			wikidataMap = {}, txt = $('#wpTextbox1').val(), m;
		while ( m = paramExtractor.exec(txt) ) wikidataMap[m[2]] = m[1];

		if ( $.isEmptyObject( wikidataMap ) ) {
			mw.notify('לא נמצאו פרמטרי ויקינתונים.')
			return;
		}

		var td = findModelInString(txt), tdObject;

if ( td !== null ) {
		try {
			tdObject = JSON.parse( td );
		} catch ( err ) {
			// The json object is invalid. There's no need to continue.
			return ;
		}
	}
		
		if (!tdObject.maps) tdObject['maps'] = {}
		if (!tdObject.maps.wikidata) tdObject.maps.wikidata = wikidataMap; // add
		else for (var k in wikidataMap) tdObject.maps.wikidata[k] = wikidataMap[k]; //extend
		replaceTemplateData(tdObject);
		mw.notify('מפת ויקינתונים עודכנה.')
	}

	$( '#mw-content-text' ).prepend( new OO.ui.ButtonWidget( {
		label: 'מפת ויקינתונים'
	} ).on('click', addWikidataMap).$element);
});