User:Njardarlogar/ToolTest.js

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

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
var STORAGE_KEY = 'non-nn-lexeme';
var LANGUAGES = {'Old Norse' : 'Q35505', Nynorsk : 'Q25164'};
var namespaceNumber = mw.config.get('wgNamespaceNumber');

/**
 * Get language name from QID
 */
function getLanguageName(ID) {
	for (var languageName in LANGUAGES) {
		if (LANGUAGES[languageName] === ID) {
			return languageName;
		}
	}
	return null;
}

/**
 * Retrieve the stored lexeme
 */
function getStoredLexeme() {
	return JSON.parse(mw.storage.get(STORAGE_KEY));
}

/**
 * Basic string representation of a lexeme.
 */
function lexemeToString(lexeme) {
	return '"' + lexeme.ID + ' / ' + lexeme.lemma +  '" (' + getLanguageName(lexeme.language) + ')';
}

/**
 * Manage storage
 */
function manageStoredLexemes(newLexeme) {
	var storedLexeme = getStoredLexeme();
	if (storedLexeme === null) { // first of a pair
		storeLexeme(newLexeme);
	}
	else { // second of a pair
		setEtymology(newLexeme);
	}
}

function setEtymology(newLexeme) {
	var storedLexeme = getStoredLexeme();
	
	if (storedLexeme.language !== newLexeme.language) {
		var originLexeme = newLexeme;
		var derivedLexeme = storedLexeme;
		
		if (storedLexeme.language === LANGUAGES['Old Norse']) {
			originLexeme = storedLexeme;
			derivedLexeme = newLexeme;
		}
	
		mw.notify(lexemeToString(originLexeme) + ' → ' + lexemeToString(derivedLexeme));
		
		deleteStoredLexeme();
	}
	else {
		mw.notify('Lexemes have the same language; etymology not set.');
	}
}

/**
 * Store lexeme
 */
function storeLexeme (lexeme) {
	if (lexeme !== null) {
		mw.storage.set(STORAGE_KEY, JSON.stringify(lexeme));
		mw.notify('Lexeme ' + lexemeToString(lexeme) + ' stored.');	
	}
	else {
		mw.notify('No valid lexeme to store.');
	}
}

/**
 * Delete stored lexeme
 */
function deleteStoredLexeme() {
	var storedLexeme = getStoredLexeme();
	if (storedLexeme !== null) {
		mw.storage.remove(STORAGE_KEY);
		mw.notify('Stored lexeme "' + lexemeToString(storedLexeme) + ' deleted.');
	}
	else {
		mw.notify('No valid lexeme to delete.');
	}
}

function main(lexemeEntity) {
	console.log(JSON.stringify(lexemeEntity));
	
	var lexeme = {ID : lexemeEntity.id, language : lexemeEntity.language,
		lemma : lexemeEntity.lemmas[Object.keys(lexemeEntity.lemmas)[0]].value
	};
	
	$(function () {
		$(mw.util.addPortletLink(
		'p-cactions',
		'#',
		'non → nn',
		'ca-non-nn-select'
		)).click(function (event) {
			manageStoredLexemes(lexeme);
		});
		$(mw.util.addPortletLink(
		'p-cactions',
		'#',
		'reset storage',
		'ca-non-nn-reset'
		)).click(function (event) {
			deleteStoredLexeme();
		});
	});
}

mw.hook( 'wikibase.entityPage.entityLoaded' ).add(function (entity) {
	if (namespaceNumber === 146) {
		main(entity);
	}
});