|
|
(32 intermediate revisions by 2 users not shown) |
Line 1: |
Line 1: |
− | /* Fix links to WIkipedia on P19 property*/
| |
− | $('div#P19 .wb-external-id').attr('href', $( 'div#P19 .wb-external-id' ).attr('href').replace(/\+/g, "_"));
| |
| | | |
− | /*OOui Tuto*/
| |
− |
| |
− | $( function () {
| |
− | var input = new OO.ui.TextInputWidget(),
| |
− | list = new OO.ui.SelectWidget();
| |
− |
| |
− | // Append to the wrapper
| |
− | $( '.wrapper' ).append(
| |
− | input.$element,
| |
− | list.$element
| |
− | );
| |
− | } );
| |
− |
| |
− | // Respond to 'enter' keypress
| |
− | input.on( 'enter', function () {
| |
− | // Add the item
| |
− | list.addItems( [
| |
− | new OO.ui.OptionWidget( {
| |
− | data: input.getValue(),
| |
− | label: input.getValue()
| |
− | } )
| |
− | ] );
| |
− | } );
| |
− |
| |
− | /*Display a drilldown interface for record*/
| |
− | list = new OO.ui.SelectWidget();
| |
− | var lang = new OO.ui.DropdownWidget( {
| |
− | label: 'Select a language',
| |
− | menu: {
| |
− | items: [
| |
− | new OO.ui.MenuOptionWidget( {
| |
− | data: 'French'
| |
− | } ),
| |
− | new OO.ui.MenuOptionWidget( {
| |
− | data: 'b',
| |
− | label: 'Second',
| |
− | indicator: 'clear'
| |
− | } ),
| |
− | new OO.ui.MenuOptionWidget( {
| |
− | data: 'c',
| |
− | label: 'Third'
| |
− | } ),
| |
− | new OO.ui.MenuOptionWidget( {
| |
− | data: 'c',
| |
− | label: 'The fourth option has an overly long label'
| |
− | } ),
| |
− | new OO.ui.MenuOptionWidget( {
| |
− | icon: 'feedback',
| |
− | data: 'd',
| |
− | label: 'The fifth option has an icon'
| |
− | } )
| |
− | ]
| |
− | }
| |
− | } );
| |
− |
| |
− | //lang = new OO.ui.DropdownWidget();
| |
− |
| |
− |
| |
− |
| |
− |
| |
− | AudioBox.prototype.display = function() {
| |
− | this.$node.find( '.ab-title' ).text( this.label );
| |
− | this.$node.find( '.ab-metadata' ).text( this.lang + ' - ' + this.speaker );
| |
− |
| |
− | this.audioNode.src = this.media;
| |
− | this.$node.find( '.ab-playbutton' ).click( this.audioNode.play.bind( this.audioNode ) );
| |
− | }
| |
− |
| |
− |
| |
− | function createAudioBoxes( data ) {
| |
− | if ( data.query === undefined || data.query.rwrecords === undefined || data.query.rwrecords.length < 2 ) {
| |
− | displayError( 'nodata' );
| |
− | return;
| |
− | }
| |
− |
| |
− | ab1 = new AudioBox( data.query.rwrecords[ 0 ], $( '.audiobox' ).eq( 0 ) );
| |
− | ab2 = new AudioBox( data.query.rwrecords[ 1 ], $( '.audiobox' ).eq( 1 ) );
| |
− | }
| |
− |
| |
− | function getRecords() {
| |
− | var api = new mw.Api();
| |
− | api.get( {
| |
− | action: 'query',
| |
− | format: 'json',
| |
− | list: 'rwrecords',
| |
− | rwrlimit: '2',
| |
− | rwrsort: 'pageid',
| |
− | rwrdir: 'descending',
| |
− | rwrformat: 'qid'
| |
− | } ).then( createAudioBoxes, displayError );
| |
− | }
| |
− |
| |
− | function displayError( code, error ) {
| |
− | console.warn( code, error );
| |
− | }
| |
− |
| |
− |
| |
− | if ( mw.config.get( 'wgPageName' ) === 'User:Nicolas_NALLET' ) {
| |
− | mw.loader.using( [ 'mediawiki.api', 'ext.recordWizard.wikibase' ] ).then( getRecords );
| |
− | $('.selectors').append(lang.$element);
| |
− | $('.selectors').append(list.$element);
| |
− | }
| |
− |
| |
− | var ab1;
| |
− |
| |
− |
| |
− | var AudioBox = function( recordQid, $node ) {
| |
− | this.wbRecord = new mw.recordWizard.wikibase.Item( recordQid );
| |
− |
| |
− | this.$node = $node;
| |
− | this.audioNode = document.createElement( 'audio' );
| |
− | this.audioNode.preload = 'auto';
| |
− |
| |
− | this.api = new mw.Api();
| |
− |
| |
− | this.recordQid = recordQid;
| |
− | this.langQid = null;
| |
− | this.speakerQid = null;
| |
− |
| |
− | this.label = '';
| |
− | this.media = '';
| |
− | this.lang = '';
| |
− | this.speaker = '';
| |
− |
| |
− | this.wbRecord.getFromApi( this.api ).then( this.processRecord.bind( this ), displayError );
| |
− | }
| |
− |
| |
− | AudioBox.prototype.processRecord = function() {
| |
− | this.label = this.wbRecord.getLabel( 'en' );
| |
− | this.media = 'https://commons.wikimedia.org/wiki/Special:FilePath/' + this.wbRecord.getStatements( 'P3' )[ 0 ].getValue();
| |
− | this.langQid = this.wbRecord.getStatements( 'P4' )[ 0 ].getValue();
| |
− | //this.langQid = this.wbRecord.getStatements( 'P4' )[ 0 ].getValue();
| |
− | this.speakerQid = this.wbRecord.getStatements( 'P5' )[ 0 ].getValue();
| |
− |
| |
− | this.api.get( {
| |
− | action: "wbgetentities",
| |
− | format: "json",
| |
− | ids: this.langQid + '|' + this.speakerQid,
| |
− | props: "labels",
| |
− | languages: mw.config.get( 'wgUserLanguage' ) + "|en",
| |
− | languagefallback: 1,
| |
− | } ).then( this.processLabels.bind( this ), displayError )
| |
− |
| |
− |
| |
− | function testQuery(){
| |
− |
| |
− | var query = "select ?record ?recordLabel ?locutorLabel ?languageLabel ?languageLevelLabel where { ?record prop:P2 entity:Q2 .?record prop:P5 ?locutor .?record prop:P4 ?language .?locutor llp:P4 ?languageStatement .?languageStatement llv:P4 ?language .?languageStatement llq:P16 ?languageLevel .SERVICE wikibase:label {bd:serviceParam wikibase:language '[AUTO_LANGUAGE],en' .} } ORDER BY ?languageLabel ?languageLevelLabel";
| |
− |
| |
− | // $('#bodyContentResearch').append(queryDataset);
| |
− | $.ajax({
| |
− | dataType: 'json',
| |
− | data: {
| |
− | queryLn: 'SPARQL',
| |
− | query: query ,
| |
− | limit: 'none',
| |
− | infer: 'true',
| |
− | //Accept: 'application/sparql-results+json'
| |
− | },
| |
− | success: createAudioBoxes,
| |
− | error: displayError
| |
− | });
| |
− | }
| |
− |
| |
− |
| |
− | /*$.sparql()
| |
− | .select(["?record", "?recordLabel", "locutorLabel", "languageLabel", "?languageLevelLabel"])
| |
− | .where("?record prop:P2 entity:Q2 \.
| |
− | ?record prop:P5 ?locutor \.
| |
− | ?record prop:P4 ?language \.
| |
− | ?locutor llp:P4 ?languageStatement \.
| |
− | ?languageStatement llv:P4 ?language \.
| |
− | ?languageStatement llq:P16 ?languageLevel \.
| |
− | SERVICE wikibase: label {bd:serviceParam wikibase:language '[AUTO_LANGUAGE],en' \.}")
| |
− | .orderby(["?languageLabel", "?languageLevelLabel"])*/
| |
− |
| |
− | //console.log(languages);
| |
− | //console.log(mw.config.get( 'wgUserLanguage' ));
| |
− | /*select ?record ?recordLabel ?locutorLabel ?languageLabel ?languageLevelLabel
| |
− | where {
| |
− | ?record prop:P2 entity:Q2 .
| |
− | ?record prop:P5 ?locutor .
| |
− | ?record prop:P4 ?language .
| |
− |
| |
− | ?locutor llp:P4 ?languageStatement .
| |
− | ?languageStatement llv:P4 ?language .
| |
− | ?languageStatement llq:P16 ?languageLevel .
| |
− |
| |
− | SERVICE wikibase:label {
| |
− | bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en" .
| |
− | }
| |
− | } ORDER BY ?languageLabel ?languageLevelLabel*/
| |
− | }
| |
− |
| |
− | AudioBox.prototype.processLabels = function( data ) {
| |
− | var langLabels;
| |
− |
| |
− | if ( data.entities === undefined || data.entities[ this.langQid ] === undefined || data.entities[ this.speakerQid ] === undefined ) {
| |
− | displayError( 'dataerror' );
| |
− | return;
| |
− | }
| |
− | langLabels = data.entities[ this.langQid ].labels;
| |
− |
| |
− | if ( langLabels[ mw.config.get( 'wgUserLanguage' ) ] !== undefined ) {
| |
− | this.lang = langLabels[ mw.config.get( 'wgUserLanguage' ) ].value;
| |
− | } else {
| |
− | this.lang = langLabels[ 'en' ].value;
| |
− | }
| |
− |
| |
− | this.speaker = data.entities[ this.speakerQid ].labels[ 'en' ].value;
| |
− |
| |
− | this.display();
| |
− | }
| |
− |
| |
− | AudioBox.prototype.display = function() {
| |
− | this.$node.find( '.ab-title' ).text( this.label );
| |
− | this.$node.find( '.ab-metadata' ).text( this.lang + ' - ' + this.speaker );
| |
− |
| |
− | this.audioNode.src = this.media;
| |
− | this.$node.find( '.ab-playbutton' ).click( this.audioNode.play.bind( this.audioNode ) );
| |
− | }
| |
− |
| |
− |
| |
− |
| |
− |
| |
− |
| |
− |
| |
− | function createAudioBoxes( data ) {
| |
− | if ( data.query === undefined || data.query.rwrecords === undefined || data.query.rwrecords.length < 1 ) {
| |
− | displayError( 'nodata' );
| |
− | return;
| |
− | }
| |
− | for (var i = 0; i < 100; i++) {
| |
− | ab1 = new AudioBox( data.query.rwrecords[ i ], $( '.audiobox' ).eq( i ) );
| |
− | $("body").append('<div class="audiobox"> <div class="ab-playbutton"><i></i></div> <div> <div class="ab-title">...</div> <div class="ab-metadata">...</div> </div> </div>');
| |
− | }
| |
− | //ab1 = new AudioBox( data.query.rwrecords[ 0 ], $( '.audiobox' ).eq( 0 ) );
| |
− | //ab2 = new AudioBox( data.query.rwrecords[ 1 ], $( '.audiobox' ).eq( 1 ) );
| |
− | }
| |
− |
| |
− | /*function getLastRecords() {
| |
− | var api = new mw.Api();
| |
− | api.get( {
| |
− | action: 'query',
| |
− | format: 'json',
| |
− | list: 'rwrecords',
| |
− | rwrlimit: '1',
| |
− | rwrsort: 'pageid',
| |
− | rwrdir: 'descending',
| |
− | rwrformat: 'qid'
| |
− | } ).then( createAudioBoxes, displayError );
| |
− | }*/
| |
− |
| |
− | function displayError( code, error ) {
| |
− | console.warn( code, error );
| |
− | }
| |
− |
| |
− | if ( mw.config.get( 'wgPageName' ) === 'User:NavidBoyWiki' ) {
| |
− | mw.loader.using( [ 'mediawiki.api', 'ext.recordWizard.wikibase' ] ).then( getLastRecords );
| |
− | }
| |