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);
}
});