User:Envlh/FrenchLexemes.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)
- Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
/**
Adds buttons to quickly improve French lexemes:
* missing gender (P5185) on nouns and nominal locutions
* missing group (P5186) on verbs
* missing auxiliary (P5401) on verbs
* more precise lexical categories on nouns with spaces and locutions
To use it, add the following line to [[Special:MyPage/common.js]]:
importScript('User:Envlh/FrenchLexemes.js');
**/
mw.loader.using('mediawiki.api').then(function() {
( function ( mw ) {
var lid = mw.config.get('wbEntityId');
var api = new mw.Api();
function isFrench() {
var a = document.querySelector('.language-lexical-category-widget_language a');
return (a != null) && (a.title == 'Q150');
}
function isNoun() {
var a = document.querySelector('.language-lexical-category-widget_lexical-category a');
return (a != null) && (a.title == 'Q1084');
}
function isVerb() {
var a = document.querySelector('.language-lexical-category-widget_lexical-category a');
return (a != null) && (a.title == 'Q24905');
}
function isLocution() {
var a = document.querySelector('.language-lexical-category-widget_lexical-category a');
return (a != null) && (a.title == 'Q3257782');
}
function isLocutionNominale() {
var a = document.querySelector('.language-lexical-category-widget_lexical-category a');
return (a != null) && (a.title == 'Q29888377');
}
function lemmaContainsSpace() {
var lemmas = document.querySelectorAll('.lemma-widget_lemma-value');
var found = false;
var i = 0;
while ((!found) && (i < lemmas.length)) {
found = lemmas[i].innerHTML.includes(' ');
i++;
}
return found;
}
function hasProperty(pid) {
return document.getElementById(pid) != null;
}
function addFormLocution() {
var div = document.createElement('div');
div.setAttribute('id', 'form-locution');
div.innerHTML = '<p>Catégorie lexicale : <button id="button-locution-Q29888377">Locution nominale</button> <button id="button-locution-Q10976085">Locution verbale</button> <button id="button-locution-Q12734432">Locution adjectivale</button></p>';
document.getElementById('claims').before(div);
document.getElementById('button-locution-Q29888377').addEventListener('click', function() { setLexicalCategory('Q29888377'); }, false);
document.getElementById('button-locution-Q10976085').addEventListener('click', function() { setLexicalCategory('Q10976085'); }, false);
document.getElementById('button-locution-Q12734432').addEventListener('click', function() { setLexicalCategory('Q12734432'); }, false);
}
function addFormGender() {
var div = document.createElement('div');
div.setAttribute('id', 'form-P5185');
div.innerHTML = '<p>Genre : <button id="button-P5185-Q1775415">Féminin</button> <button id="button-P5185-Q499327">Masculin</button></p>';
document.getElementById('claims').before(div);
document.getElementById('button-P5185-Q1775415').addEventListener('click', function() { addStatement('P5185', 'Q1775415'); }, false);
document.getElementById('button-P5185-Q499327').addEventListener('click', function() { addStatement('P5185', 'Q499327'); }, false);
}
function addFormGroup() {
var div = document.createElement('div');
div.setAttribute('id', 'form-P5186');
div.innerHTML = '<p>Groupe : <button id="button-P5186-Q2993354">Premier</button> <button id="button-P5186-Q2993353">Deuxième</button> <button id="button-P5186-Q2993358">Troisième</button></p>';
document.getElementById('claims').before(div);
document.getElementById('button-P5186-Q2993354').addEventListener('click', function() { addStatement('P5186', 'Q2993354'); }, false);
document.getElementById('button-P5186-Q2993353').addEventListener('click', function() { addStatement('P5186', 'Q2993353'); }, false);
document.getElementById('button-P5186-Q2993358').addEventListener('click', function() { addStatement('P5186', 'Q2993358'); }, false);
}
function addFormAuxiliary() {
var div = document.createElement('div');
div.setAttribute('id', 'form-P5401');
div.innerHTML = '<p>Auxiliaire : <button id="button-P5401-L1886">Avoir</button> <button id="button-P5401-L1882">Être</button></p>';
document.getElementById('claims').before(div);
document.getElementById('button-P5401-L1886').addEventListener('click', function() { addStatement('P5401', 'L1886'); }, false);
document.getElementById('button-P5401-L1882').addEventListener('click', function() { addStatement('P5401', 'L1882'); }, false);
}
function addStatement(property, value) {
tag = document.getElementById('form-' + property);
tag.style.color = 'red';
tag.style.fontWeight = 'bold';
tag.innerHTML = '<p>Ajout de ' + property + ' = ' + value + '...</p>';
var entity_type = null;
var first_letter = value.substring(0, 1);
if (first_letter == 'Q') {
entity_type = 'item';
} else if (first_letter == 'L') {
entity_type = 'lexeme';
} else {
console.error('Unsupported value.');
return;
}
api.postWithEditToken( {
action : 'wbcreateclaim',
entity : lid,
snaktype : 'value',
property : property,
value : '{"entity-type":"' + entity_type + '","id":\"' + value + '\"}',
summary: '[[User:Envlh/FrenchLexemes.js]]',
} )
.done(function( data ) {
tag.innerHTML = '<p>' + property + ' = ' + value + ' ajouté ! Rechargez la page.</p>';
} )
.fail(function( data ) {
tag.innerHTML = '<p>Erreur lors de l\'appel à l\'API :(</p>';
} )
}
function setLexicalCategory(id) {
tag = document.getElementById('form-locution');
tag.style.color = 'red';
tag.style.fontWeight = 'bold';
tag.innerHTML = '<p>Modification de la catégorie lexicale...</p>';
api.get( {
'action': 'wbgetentities',
'ids': lid,
'props': 'info'
} )
.done( function ( data ) {
var d = {};
d['lemmas'] = data['entities'][lid]['lemmas'];
d['language'] = data['entities'][lid]['language'];
d['lexicalCategory'] = id;
api.postWithEditToken( {
action : 'wbeditentity',
format: 'json',
id: lid,
data: JSON.stringify(d),
summary: 'lexical category changed to [[' + id + ']] [[User:Envlh/FrenchLexemes.js]]',
} )
.done(function( data ) {
tag.innerHTML = '<p>Catégorie lexicale modifiée ! Rechargez la page.</p>';
} )
.fail(function( data ) {
tag.innerHTML = '<p>Erreur lors du second appel à l\'API :(</p>';
} )
} )
.fail(function( data ) {
tag.innerHTML = '<p>Erreur lors du premier appel à l\'API :(</p>';
} )
}
function init() {
if (isFrench()) {
if (isLocution() || (isNoun() && lemmaContainsSpace())) {
addFormLocution();
}
if ((isNoun() || isLocutionNominale()) && !hasProperty('P5185')) {
addFormGender();
}
if (isVerb()) {
if (!hasProperty('P5186')) {
addFormGroup();
}
if (!hasProperty('P5401')) {
addFormAuxiliary();
}
}
}
}
init();
} ( mediaWiki ) );
});