User:Bargioni/WikiBridge.js
Appearance
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.
/**
* WikiBridge - a brilliant idea of user:Gentile64, written by user:Bargioni
* Add a tabbed section to Wikidata items showing some paragraphs from Wikipedias
* chosen by the Babel languages of the logged in user
*
* Version2 : I18n
*/
if( typeof(WikiBridge_conf) == "undefined" ) {
importScript( 'User:Bargioni/WikiBridge_conf.js' );
}
function WikiBridge_source(UL,T) {
var url = 'https://'+UL+'.wikipedia.org/wiki/'+T;
return ' \
\
+ url + '">' + url + '';
}
function absolute_links(UL) {
var L = $('a[rel="mw:WikiLink"]').add('figure a').not('.WikiBridge_link').each(function(i,e) {
var href = 'https://'+UL+'.wikipedia.org/wiki/'+$(e).attr('href');
$(e).attr('href',href);
// $(e).removeClass('mw-redirect');
$(e).addClass('WikiBridge_link');
$(e).attr('target','_blank');
});
return L.length; // unuseful :-)
}
function WikiBridge_builder() {
var H = []; // gather the html code of the tabs
H.push('');
H.push('WikiBridge ×');
H.push(''
);
if(!wb || !wb.getUserLanguages || !mw.uls || !mw.uls.getFrequentLanguageList) return; // A few cases of this? Did a dependency not yet loaded?
var user_langs = wb.getUserLanguages();
// create tabs
for (var i = 0; i < user_langs.length; i++) {
var user_lang = user_langs[i];
if (user_lang != 'mul') H.push('+ user_lang+'">+user_lang+'">'+user_lang+'');
}
// create info tab
H.push('ⓘ '); // ⓘ info icon
H.push('');
// add a div for each tab
for (i = 0; i < user_langs.length; i++) {
let user_lang = user_langs[i];
if (user_lang == 'mul') continue; // added 2025-02-04
H.push('');
}
// add a div for the info tab
var U = WikiBridge_conf[user_langs[0]];
var info = U ? U.info : 'missing info';
if(U && U.en && U.en.info) info = U.en.info;
H.push('');
H.push('');
// append the WikiBridge
$('.wikibase-entitytermsview-entitytermsforlanguagelistview').append(H.join(''));
// activate the WikiBridge
$('#WikiBridge_tabs').tabs();
// style some components of the WikiBridge
$('#WikiBridge_close').css({'float':'right', 'font-size':'12pt', 'position':'relative', 'left':'-10px', 'top':'6px'});
$('#WikiBridge_name').css({'font-size':'11.2pt'});
$('#WikiBridge_close').css({'color':'rgb(39, 121, 170)'});
$('#WikiBridge_tabs').css('font-size','1em');
// get sentences from Wikipedias to fill in the div of each tab
for (i = 0; i < user_langs.length; i++) {
let user_lang = user_langs[i];
if (user_lang == 'mul') continue; // added 2025-02-04
var wkp_link = $('div[data-wb-sitelinks-group="wikipedia"] .wikibase-sitelinkview-page[lang="'+user_lang+'"] a').attr('href');
if (wkp_link && wkp_link.indexOf('Category') == -1) {
var msg = WikiBridge_conf[user_lang] ? WikiBridge_conf[user_lang].loading : WikiBridge_conf.en.loading;
$('#wkp_text_' + user_lang).text(msg);
var parts = wkp_link.split(/\//);
// var title = parts[parts.length - 1]; // looks like this is not valid for subpages, susbstituted with 3 lines
parts.splice(0,4);
var title = parts.join('/');
if (title.indexOf('%') == -1) title = encodeURIComponent(title);
var url = 'https://'+user_lang+'.wikipedia.org/api/rest_v1/page/html/'+title;
$.get( url, function(R) {
var U = this.url;
var parts = U.split(/\//);
var T = decodeURI(parts[parts.length - 1]);
var UL = (parts[2].split(/\./))[0];
var H = $.parseHTML(R);
// console.log(U,H); // test
var myText = H[15].innerHTML || H[16].innerHTML || H[17].innerHTML || H[18].innerHTML || H[19].innerHTML || H[20].innerHTML || '???';
myText += ''
+ WikiBridge_source(UL,T) + '';
$('#wkp_text_'+UL).html(myText);
$('.wkp_text table').remove();
$('.wkp_text .mw-reflink-text').remove();
$('.wkp_text div').remove();
$('.wkp_text figure').remove();
$('.WikiBridge_source').css({'background-color':'white'});
absolute_links(UL);
})
.fail(function() {
var U = this.url;
var parts = U.split(/\//);
var UL = (parts[2].split(/\./))[0];
// $('#wkp_text_'+UL).text('An error occurred while retrieving the Wikipedia page '+this.url);
var msg = WikiBridge_conf[U] ? WikiBridge_conf[U].error_loading : WikiBridge_conf.en.error_loading;
$('#wkp_text_'+UL).text(msg + this.url);
$('#Wiki_Bridge_lang_'+UL).css('color','red');
});
}
else {
var qm = 'https://upload.wikimedia.org/wikipedia/commons/4/4b/Question_Mark_1.svg';
qm = '
+qm+'" width="24px"/>';
let msg = WikiBridge_conf[user_lang] ? WikiBridge_conf[user_lang].create_new : WikiBridge_conf.en.create_new;
$('#wkp_text_'+user_lang).html(qm + msg);
$('#Wiki_Bridge_lang_'+user_lang).css('color','red');
}
}
}
function WikiBridge_waitForConfig(func){
if(typeof WikiBridge_conf !== "undefined"){
func();
}
else{
setTimeout(WikiBridge_waitForConfig, 100, func);
}
}
$( function($) {
WikiBridge_waitForConfig(function() {
// preference loaded, let's go on
WikiBridge_builder();
});
});