MediaWiki
Difference between revisions of "LanguagesGallery.js"
m |
m |
||
Line 55: | Line 55: | ||
// Template | // Template | ||
var tpl = function(lang){ | var tpl = function(lang){ | ||
− | return `<div> | + | return |
+ | `<div> | ||
<h2>${lang.label} (${lang.iso||lang.qid})</h2> | <h2>${lang.label} (${lang.iso||lang.qid})</h2> | ||
<span>Recordings: ${lang.recordsF+lang.recordsM} (${lang.recordsF}|${lang.recordsM})</span> | <span>Recordings: ${lang.recordsF+lang.recordsM} (${lang.recordsF}|${lang.recordsM})</span> | ||
Line 84: | Line 85: | ||
speakersFemales = [{ qid: 'Q209', genderF: 3, recordsF: 60 }, { qid: 'Q21', genderF: 21, recordsF:15046 }], | speakersFemales = [{ qid: 'Q209', genderF: 3, recordsF: 60 }, { qid: 'Q21', genderF: 21, recordsF:15046 }], | ||
speakersMales = [{ qid: 'Q209', genderM: 7, recordsM: 112 }, { qid: 'Q21', genderM: 85, recordsM:82964 }], | speakersMales = [{ qid: 'Q209', genderM: 7, recordsM: 112 }, { qid: 'Q21', genderM: 85, recordsM:82964 }], | ||
+ | natives = [{ qid: 'Q209', population: 300000 }, { qid: 'Q21', population:80000000 }]; | ||
+ | |||
+ | // Mergings | ||
+ | var merge1 = merge2ArraysBySameId(languages,speakersFemales,'qid'); | ||
+ | var merge2 = merge2ArraysBySameId(merge1,speakersMales,'qid'); | ||
+ | var final = merge2ArraysBySameId(merge2,natives,'qid'); | ||
+ | console.log(JSON.stringify(final)) | ||
+ | |||
+ | var _10k = final.filter(item => item.recordsF+item.recordsM > 9999); | ||
+ | console.log('_10k: ', _10k) | ||
+ | _10k.forEach(item => $('#lg-10k').append(tpl(item)) ) | ||
+ | |||
+ | var _1k = final.filter(item => item.recordsF+item.recordsM > 999 && item.recordsF+item.recordsM <10000); | ||
+ | console.log('_1k: ', _1k) | ||
+ | _1k.forEach(item => $('#lg-1k').append(tpl(item)) ) | ||
+ | |||
+ | var _1 = final.filter(item => item.recordsF+item.recordsM > 0 && item.recordsF+item.recordsM <1000); | ||
+ | console.log('_1: ', _1) | ||
+ | _1.forEach(item => $('#lg-1').append(tpl(item)) ) | ||
+ | |||
+ | |||
+ | /* *************************************************************** */ | ||
+ | /* PAGE INTERACTIONS ********************************************* */ | ||
+ | // Show more/less cards for this section | ||
+ | // Show more/less infor overall | ||
+ | /* *************************************************************** */ | ||
+ | /* LanguageGallery script **************************************** */ | ||
+ | // Description: given json data provided in MediaWiki pages, merge those data, project language cards. | ||
+ | // Usage: [[Template:LanguagesGallery]] | ||
+ | // Usage: open [[Template:LanguagesGallery]] > Open, loads > Click for more. | ||
+ | // Hack pad:https://jsfiddle.net/hugolpz/vnz238xq/ | ||
+ | // Documentations: | ||
+ | // Author: Yug | ||
+ | |||
+ | /* *************************************************************** */ | ||
+ | /* DATA ********************************************************** */ | ||
+ | // Sources | ||
+ | var sources = [ | ||
+ | { page: 'LanguageGalleryData.js'}, | ||
+ | { page: 'LanguageGalleryData.js'},/* | ||
+ | { page: 'LanguageSpeakersFemaleData.js'}, | ||
+ | { page: 'LanguageSpeakersMaleData.js'}, | ||
+ | { page: 'LanguageWikidataData.js'},*/ | ||
+ | ]; | ||
+ | |||
+ | /* *************************************************************** */ | ||
+ | // Clean data | ||
+ | var cleanResponseDataBindings = function(dataBindings){ | ||
+ | var res = dataBindings.map(item => { | ||
+ | var keys = Object.keys(item); | ||
+ | var obj = {}; | ||
+ | for(var i=0;i<keys.length;i++){ | ||
+ | var key = keys[i], | ||
+ | val = item[key].value; | ||
+ | obj[key]=val; | ||
+ | } | ||
+ | return obj | ||
+ | }); | ||
+ | return res; | ||
+ | } | ||
+ | |||
+ | /* *************************************************************** */ | ||
+ | // Merge data by common property | ||
+ | var merge2ArraysBySameId = function(arr1,arr2,id1){ | ||
+ | return arr1.map( item1 => { | ||
+ | var identical = arr2.find(obj => obj[id1] === item1[id1]); | ||
+ | return Object.assign(identical, item1) | ||
+ | } ); | ||
+ | } | ||
+ | |||
+ | |||
+ | /* *************************************************************** */ | ||
+ | // SORT ? | ||
+ | |||
+ | /* *************************************************************** */ | ||
+ | /* HTML TEMPLATE ************************************************* */ | ||
+ | // Beautity numbers | ||
+ | //console.log(10000.toLocaleString()); // "10,000" | ||
+ | |||
+ | // Template | ||
+ | var tpl = function(lang){ | ||
+ | return `<div> | ||
+ | <h2>${lang.label} (${lang.iso||lang.qid})</h2> | ||
+ | <span>Recordings: ${lang.recordsF+lang.recordsM} (${lang.recordsF}|${lang.recordsM})</span> | ||
+ | <span>Speakers: ${lang.speakersF+lang.speakersM} (${lang.speakersF}|${lang.speakersM})</span> | ||
+ | <span>Population: ${lang.population.toLocaleString()}</span> | ||
+ | <div>` | ||
+ | } | ||
+ | |||
+ | /* *************************************************************** */ | ||
+ | /* INJECTIONS **************************************************** */ | ||
+ | |||
+ | |||
+ | |||
+ | // Fetch data -> NOTE : this is asynchroneous so the data is available too late. Need fix. | ||
+ | var result = {}; // final object containing consolidated result | ||
+ | $.when( | ||
+ | $.getJSON('/index.php?title=MediaWiki:'+sources[0].page+'.js&action=raw&ctype=text/javascript', | ||
+ | function (data) { console.log(sources[0].page); result[sources[0].page] = data; }), | ||
+ | $.getJSON('https://lingualibre.org/index.php?title=MediaWiki:'+sources[0].page+'.js&action=raw&ctype=text/javascript', | ||
+ | function (data) { console.log(sources[1].page); result[sources[0].page+'2'] = data; }) | ||
+ | ).done(function() { | ||
+ | console('Yug: ', result) | ||
+ | // use `result` | ||
+ | }); | ||
+ | |||
+ | //Temporary fake data, clean: | ||
+ | const languages = [{ qid: 'Q209', label: 'Breton', iso:'bre' }, { qid: 'Q21', label: 'French', iso: 'fra' }], | ||
+ | speakersFemales = [{ qid: 'Q209', speakersF: 3, recordsF: 60 }, { qid: 'Q21', speakersF: 21, recordsF:15046 }], | ||
+ | speakersMales = [{ qid: 'Q209', speakersM: 7, recordsM: 112 }, { qid: 'Q21', speakersM: 85, recordsM:82964 }], | ||
natives = [{ qid: 'Q209', population: 300000 }, { qid: 'Q21', population:80000000 }]; | natives = [{ qid: 'Q209', population: 300000 }, { qid: 'Q21', population:80000000 }]; | ||
Revision as of 21:37, 19 January 2022
/* *************************************************************** */
/* LanguageGallery script **************************************** */
// Description: given json data provided in MediaWiki pages, merge those data, project language cards.
// Usage: [[Template:LanguagesGallery]]
// Usage: open [[Template:LanguagesGallery]] > Open, loads > Click for more.
// Hack pad:https://jsfiddle.net/hugolpz/vnz238xq/
// Documentations:
// Author: Yug
/* *************************************************************** */
/* DATA ********************************************************** */
// Sources
var sources = [
{ page: 'LanguageGalleryData.js'},
{ page: 'LanguageGalleryData.js'},/*
{ page: 'LanguageSpeakersFemaleData.js'},
{ page: 'LanguageSpeakersMaleData.js'},
{ page: 'LanguageWikidataData.js'},*/
];
/* *************************************************************** */
// Clean data
var cleanResponseDataBindings = function(dataBindings){
var res = dataBindings.map(item => {
var keys = Object.keys(item);
var obj = {};
for(var i=0;i<keys.length;i++){
var key = keys[i],
val = item[key].value;
obj[key]=val;
}
return obj
});
return res;
}
/* *************************************************************** */
// Merge data by common property
var merge2ArraysBySameId = function(arr1,arr2,id1){
return arr1.map( item1 => {
var identical = arr2.find(obj => obj[id1] === item1[id1]);
return Object.assign(identical, item1)
} );
}
/* *************************************************************** */
// SORT ?
/* *************************************************************** */
/* HTML TEMPLATE ************************************************* */
// Beautity numbers
//console.log(10000.toLocaleString()); // "10,000"
// Template
var tpl = function(lang){
return
`<div>
<h2>${lang.label} (${lang.iso||lang.qid})</h2>
<span>Recordings: ${lang.recordsF+lang.recordsM} (${lang.recordsF}|${lang.recordsM})</span>
<span>Speakers: ${lang.speakersF+lang.speakersM} (${lang.speakersF}|${lang.speakersM})</span>
<span>Population: ${lang.population.toLocaleString()}</span>
<div>`
}
/* *************************************************************** */
/* INJECTIONS **************************************************** */
// Fetch data -> NOTE : this is asynchroneous so the data is available too late. Need fix.
var result = {}; // final object containing consolidated result
$.when(
$.getJSON('/index.php?title=MediaWiki:'+sources[0].page+'.js&action=raw&ctype=text/javascript',
function (data) { console.log(sources[0].page); result[sources[0].page] = data; }),
$.getJSON('https://lingualibre.org/index.php?title=MediaWiki:'+sources[0].page+'.js&action=raw&ctype=text/javascript',
function (data) { console.log(sources[1].page); result[sources[0].page+'2'] = data; }),
).done(function() {
console('Yug: ', result)
// use `result`
});
//Temporary fake data, clean:
const languages = [{ qid: 'Q209', label: 'Breton', iso:'bre' }, { qid: 'Q21', label: 'French', iso: 'fra' }],
speakersFemales = [{ qid: 'Q209', genderF: 3, recordsF: 60 }, { qid: 'Q21', genderF: 21, recordsF:15046 }],
speakersMales = [{ qid: 'Q209', genderM: 7, recordsM: 112 }, { qid: 'Q21', genderM: 85, recordsM:82964 }],
natives = [{ qid: 'Q209', population: 300000 }, { qid: 'Q21', population:80000000 }];
// Mergings
var merge1 = merge2ArraysBySameId(languages,speakersFemales,'qid');
var merge2 = merge2ArraysBySameId(merge1,speakersMales,'qid');
var final = merge2ArraysBySameId(merge2,natives,'qid');
console.log(JSON.stringify(final))
var _10k = final.filter(item => item.recordsF+item.recordsM > 9999);
console.log('_10k: ', _10k)
_10k.forEach(item => $('#lg-10k').append(tpl(item)) )
var _1k = final.filter(item => item.recordsF+item.recordsM > 999 && item.recordsF+item.recordsM <10000);
console.log('_1k: ', _1k)
_1k.forEach(item => $('#lg-1k').append(tpl(item)) )
var _1 = final.filter(item => item.recordsF+item.recordsM > 0 && item.recordsF+item.recordsM <1000);
console.log('_1: ', _1)
_1.forEach(item => $('#lg-1').append(tpl(item)) )
/* *************************************************************** */
/* PAGE INTERACTIONS ********************************************* */
// Show more/less cards for this section
// Show more/less infor overall
/* *************************************************************** */
/* LanguageGallery script **************************************** */
// Description: given json data provided in MediaWiki pages, merge those data, project language cards.
// Usage: [[Template:LanguagesGallery]]
// Usage: open [[Template:LanguagesGallery]] > Open, loads > Click for more.
// Hack pad:https://jsfiddle.net/hugolpz/vnz238xq/
// Documentations:
// Author: Yug
/* *************************************************************** */
/* DATA ********************************************************** */
// Sources
var sources = [
{ page: 'LanguageGalleryData.js'},
{ page: 'LanguageGalleryData.js'},/*
{ page: 'LanguageSpeakersFemaleData.js'},
{ page: 'LanguageSpeakersMaleData.js'},
{ page: 'LanguageWikidataData.js'},*/
];
/* *************************************************************** */
// Clean data
var cleanResponseDataBindings = function(dataBindings){
var res = dataBindings.map(item => {
var keys = Object.keys(item);
var obj = {};
for(var i=0;i<keys.length;i++){
var key = keys[i],
val = item[key].value;
obj[key]=val;
}
return obj
});
return res;
}
/* *************************************************************** */
// Merge data by common property
var merge2ArraysBySameId = function(arr1,arr2,id1){
return arr1.map( item1 => {
var identical = arr2.find(obj => obj[id1] === item1[id1]);
return Object.assign(identical, item1)
} );
}
/* *************************************************************** */
// SORT ?
/* *************************************************************** */
/* HTML TEMPLATE ************************************************* */
// Beautity numbers
//console.log(10000.toLocaleString()); // "10,000"
// Template
var tpl = function(lang){
return `<div>
<h2>${lang.label} (${lang.iso||lang.qid})</h2>
<span>Recordings: ${lang.recordsF+lang.recordsM} (${lang.recordsF}|${lang.recordsM})</span>
<span>Speakers: ${lang.speakersF+lang.speakersM} (${lang.speakersF}|${lang.speakersM})</span>
<span>Population: ${lang.population.toLocaleString()}</span>
<div>`
}
/* *************************************************************** */
/* INJECTIONS **************************************************** */
// Fetch data -> NOTE : this is asynchroneous so the data is available too late. Need fix.
var result = {}; // final object containing consolidated result
$.when(
$.getJSON('/index.php?title=MediaWiki:'+sources[0].page+'.js&action=raw&ctype=text/javascript',
function (data) { console.log(sources[0].page); result[sources[0].page] = data; }),
$.getJSON('https://lingualibre.org/index.php?title=MediaWiki:'+sources[0].page+'.js&action=raw&ctype=text/javascript',
function (data) { console.log(sources[1].page); result[sources[0].page+'2'] = data; })
).done(function() {
console('Yug: ', result)
// use `result`
});
//Temporary fake data, clean:
const languages = [{ qid: 'Q209', label: 'Breton', iso:'bre' }, { qid: 'Q21', label: 'French', iso: 'fra' }],
speakersFemales = [{ qid: 'Q209', speakersF: 3, recordsF: 60 }, { qid: 'Q21', speakersF: 21, recordsF:15046 }],
speakersMales = [{ qid: 'Q209', speakersM: 7, recordsM: 112 }, { qid: 'Q21', speakersM: 85, recordsM:82964 }],
natives = [{ qid: 'Q209', population: 300000 }, { qid: 'Q21', population:80000000 }];
// Mergings
var merge1 = merge2ArraysBySameId(languages,speakersFemales,'qid');
var merge2 = merge2ArraysBySameId(merge1,speakersMales,'qid');
var final = merge2ArraysBySameId(merge2,natives,'qid');
console.log(JSON.stringify(final))
var _10k = final.filter(item => item.recordsF+item.recordsM > 9999);
console.log('_10k: ', _10k)
_10k.forEach(item => $('#lg-10k').append(tpl(item)) )
var _1k = final.filter(item => item.recordsF+item.recordsM > 999 && item.recordsF+item.recordsM <10000);
console.log('_1k: ', _1k)
_1k.forEach(item => $('#lg-1k').append(tpl(item)) )
var _1 = final.filter(item => item.recordsF+item.recordsM > 0 && item.recordsF+item.recordsM <1000);
console.log('_1: ', _1)
_1.forEach(item => $('#lg-1').append(tpl(item)) )
/* *************************************************************** */
/* PAGE INTERACTIONS ********************************************* */
// Show more/less cards for this section
// Show more/less infor overall