User
Difference between revisions of "VIGNERON/common.js"
< User:VIGNERON
(+ Lid in the query) |
m (Add meaningful description.) |
||
Line 1: | Line 1: | ||
+ | /* *************************************************************** */ | ||
+ | /*Words Generator : Wikidata + Breton **************************************** */ | ||
+ | // Description: Creates a word generator for breton language, based on Wikidata's lexemes there. | ||
+ | // Usage: [[Special:RecordWizard]], step 3 | ||
+ | // Install: copy script or import script to your personal User:*/common.js | ||
+ | // Documentations: | ||
+ | // Author: VIGNERON | ||
+ | |||
'use strict'; | 'use strict'; | ||
Revision as of 10:47, 22 January 2022
/* *************************************************************** */
/*Words Generator : Wikidata + Breton **************************************** */
// Description: Creates a word generator for breton language, based on Wikidata's lexemes there.
// Usage: [[Special:RecordWizard]], step 3
// Install: copy script or import script to your personal User:*/common.js
// Documentations:
// Author: VIGNERON
'use strict';
if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'RecordWizard' ) {
mw.loader.using( 'ext.recordWizard.generator', function() {
var rw = mw.recordWizard;
/*
* This first part allows the creation of a basic generator
* and allows the RecordWizard to find it (and thus, add a button in the UI for it)
*
* Replace everywhere in this file "rw.generator.Demo" by a custom
* and unique class name, but always in the "rw.generator" namespace.
* For example it can be: rw.generator.SomethingCool
*/
rw.generator.Lexeme = function ( config ) {
rw.generator.Generator.call( this, config );
};
OO.inheritClass( rw.generator.Lexeme, rw.generator.Generator );
// This line defines an internal name for the generator
rw.generator.Lexeme.static.name = 'demo';
// And this one defines the name for the generator which will be displayed in the UI
rw.generator.Lexeme.static.title = 'My Demo';
/*
* This function should contain all the popup initialization stuff.
* We create here for example two text fields, with a custom layout.
* For more information, see OOui documentation:
* https://www.mediawiki.org/wiki/OOUI
*/
rw.generator.Lexeme.prototype.initialize = function () {
// The two text fields
this.aTextField = new OO.ui.TextInputWidget();
this.anotherTextField = new OO.ui.TextInputWidget();
// The custom layout
this.layout = new OO.ui.Widget( {
content: [
new OO.ui.FieldLayout( this.aTextField, {
align: 'top',
label: 'This field do something cool.'
}
),
new OO.ui.FieldLayout(
this.anotherTextField, {
align: 'top',
label: 'This one too!'
}
)
]
} );
// To be displayed, all the fields/widgets/... should be appended to "this.content.$element"
this.content.$element.append( this.layout.$element );
// Do not remove this line, it will initialize the popup itself
rw.generator.Generator.prototype.initialize.call( this );
};
/*
* This function will be called when the user press the "Done" button.
*
* Every words that you want to be added to the RecordWizard's word list
* have to be added to an array called "this.list".
*
* The returned value can either be True, or if you want to do some asynchrone
* stuff, you can return a jQuery promise
*/
rw.generator.Lexeme.prototype.fetch = function () {
// Get the values of our text fields
var generator = this,
demoText = this.aTextField.getValue(),
anotherDemoText = this.anotherTextField.getValue();
// Initialize a new promise
this.deferred = $.Deferred();
// Initialize our word list
this.list = [];
// Call to the Query Service (query already built, part to improve later)
this.LexemeQuery = new ( 'https://query.wikidata.org/bigdata/namespace/wdq/sparql?format=json&query=SELECT%20DISTINCT%20%3FlexemeLabel%20%3Flexeme%0AWITH%20{%0A%20%20SELECT%20%3Flexeme%20%3FlexemeLabel%20%3Flexical_category%20WHERE%20{%0A%20%20%20%20%3Flexeme%20a%20ontolex%3ALexicalEntry%20%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20dct%3Alanguage%20wd%3AQ12107%20%3B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20wikibase%3Alemma%20%3FlexemeLabel%20.%0A%20%20%20%20OPTIONAL%20{%0A%20%20%20%20%20%20%3Flexeme%20wikibase%3AlexicalCategory%20%3Flexical_category%20.%0A%20%20%20%20}%0A%20%20}%0A}%20AS%20%25results%0AWHERE%20{%0A%20%20INCLUDE%20%25results%0A%20%20OPTIONAL%20{%20%20%20%20%20%20%20%20%0A%20%20%20%20%3Flexical_category%20rdfs%3Alabel%20%3Flexical_categoryLabel%20.%0A%20%20%20%20FILTER%20(LANG(%3Flexical_categoryLabel)%20%3D%20%22en%22)%0A%20%20}%0A}%0A%20%20' );
// We process here the result of our request
// By adding each page title to our list
var i;
for ( var i=0; i < data.Lexemquery.length; i++ ) {
data.results.bindings[ i ].lexemeLabel.value;
}
// At this point we're not done yet, make the dialog closing process
// to wait the promise to be resolved or rejected
return this.deferred.promise();
};
} );
}