User:Hardwigg/show-more-languages.js
Jump to navigation
Jump to search
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)
- Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
/**
* Creates a portlet link (listed under 'Tools' in the sidebar) that prompts you
* to add more languages to the languages list view.
*
* To use, add the following line to your common.js:
* mw.loader.load( '//www.wikidata.org/w/index.php?title=User:Hardwigg/show-more-languages.js&action=raw&ctype=text/javascript', 'text/javascript' );
*
* To automatically load some languages, define the following variable *before*
* loading the script:
* window['show-more-languages.alwaysShow'] = 'en,fr';
*/
(function() {
/** Adds a language to the entitytermsforlanguagelistview
*
* @param {string} lang language code
*/
function showLanguage(lang) {
if ($('.wikibase-entitytermsforlanguagelistview.wb-edit').length) {
console.warn('Cannot show more languages while editing.');
mw.notify('Cannot show more languages while editing the languages listview.');
return;
}
if ($('.wikibase-entitytermsforlanguageview-' + lang).length) {
console.warn(lang + ' is already listed.');
mw.notify(lang + ' is already listed.');
return;
}
if (typeof($.uls.data.languages[lang]) == 'undefined') {
console.warn(lang + ' is not a recognized language.');
mw.notify(lang + ' is not a recognized language.');
return;
}
var ev = $('.wikibase-entityview').data().entityview;
if (!ev) return; // frontend code not ready
var fingerprint = ev.options.value.getFingerprint();
$('.wikibase-entitytermsforlanguagelistview-listview').data().listview.addItem({
language: lang,
label: fingerprint.getLabelFor( lang )
|| new wb.datamodel.Term( lang, '' ),
description: fingerprint.getDescriptionFor( lang )
|| new wb.datamodel.Term( lang, '' ),
aliases: fingerprint.getAliasesFor( lang )
|| new wb.datamodel.MultiTerm( lang, [] )
});
}
/** Add a language(s) to the entitytermsforlanguagelistview
*
* @param {string} [langs] comma-seprated string of language codes. If absent, prompts the user.
*/
function showMoreLanguages(langs) {
if ($('.wikibase-entitytermsforlanguagelistview.wb-edit').length) {
console.warn('Cannot show more languages while editing.');
mw.notify('Cannot show more languages while editing the languages listview.');
return;
}
if (!arguments.length) {
langs = prompt('Enter csv of language codes.\nEx: "en,fr,sq"', localStorage['show-more-languages.lastLanguage'] || '');
if (!langs) { // the cancelled
return;
}
}
langs = langs.replace(/\s/g, ''); // ignore whitespace
localStorage['show-more-languages.lastLanguage'] = langs;
langs = langs.split(',');
for(var i = 0; i < langs.length; ++i) {
showLanguage(langs[i]);
}
}
function init() {
var nameSpaceNum = mw.config.get('wgNamespaceNumber');
if (nameSpaceNum !== 0 && nameSpaceNum !== 120) { // Not on entity/property page
return;
}
// create portletLink
var portletLink = mw.util.addPortletLink(
'p-tb',
'javascript:;',
'Show more languages',
'p-show-more-languages'
);
$(portletLink).on('click', function() { showMoreLanguages(); } );
// $(portletLink).on('dblclick', function() { showMoreLanguages(localStorage['show-more-languages.lastLanguage']); });
// load languages which are always wanted
if(window['show-more-languages.alwaysShow']) {
showMoreLanguages(window['show-more-languages.alwaysShow']);
}
}
if (mw.config.get('wgNamespaceNumber') !== 0 && mw.config.get('wgNamespaceNumber') != 120) return;
init();
})();