jenkins-bot has submitted this change and it was merged. Change subject: Integrated fingerprintgroupview into entityview ......................................................................
Integrated fingerprintgroupview into entityview Change-Id: I38cc93a9dbfae2ca9b2b04d2e12de58a0850acf0 --- M lib/resources/jquery.wikibase/jquery.wikibase.entityview.js M lib/resources/jquery.wikibase/resources.php M repo/resources/Resources.php D repo/resources/wikibase.initTermBox.js M repo/resources/wikibase.ui.entityViewInit.js 5 files changed, 105 insertions(+), 117 deletions(-) Approvals: Tobias Gritschacher: Looks good to me, approved jenkins-bot: Verified diff --git a/lib/resources/jquery.wikibase/jquery.wikibase.entityview.js b/lib/resources/jquery.wikibase/jquery.wikibase.entityview.js index 2d9aa3c..f8c2ac1 100644 --- a/lib/resources/jquery.wikibase/jquery.wikibase.entityview.js +++ b/lib/resources/jquery.wikibase/jquery.wikibase.entityview.js @@ -17,6 +17,7 @@ * @option {wikibase.store.EntityStore} entityStore * @option {wikibase.ValueViewBuilder} valueViewBuilder * @option {wikibase.AbstractedRepoApi} api + * @option {string[]} languages */ $.widget( 'wikibase.entityview', PARENT, { /** @@ -35,8 +36,14 @@ value: null, entityStore: null, valueViewBuilder: null, - api: null + api: null, + languages: [] }, + + /** + * @type {jQuery} + */ + $toc: null, /** * @type {jQuery} @@ -52,6 +59,11 @@ * @type {jQuery} */ $aliases: null, + + /** + * @type {jQuery} + */ + $fingerprints: null, /** * @type {jQuery} @@ -72,9 +84,12 @@ throw new Error( 'Required option(s) missing' ); } + this.$toc = $( '.toc', this.element ); + this._initLabel(); this._initDescription(); this._initAliases(); + this._initFingerprints(); this._initClaims(); this._initSiteLinks(); @@ -93,7 +108,7 @@ this.$label.labelview( { value: { language: mw.config.get( 'wgUserLanguage' ), - label: $( '.wikibase-labelview' ).hasClass( 'wb-empty' ) + label: this.$label.hasClass( 'wb-empty' ) ? null // FIXME: entity object should not contain fallback strings : this.options.value.getLabel( mw.config.get( 'wgUserLanguage' ) ) @@ -117,7 +132,7 @@ this.$description.descriptionview( { value: { language: mw.config.get( 'wgUserLanguage' ), - description: $( '.wikibase-descriptionview', this.element ).hasClass( 'wb-empty' ) + description: this.$description.hasClass( 'wb-empty' ) ? null // FIXME: entity object should not contain fallback strings : this.options.value.getDescription( mw.config.get( 'wgUserLanguage' ) ) @@ -142,6 +157,45 @@ language: mw.config.get( 'wgUserLanguage' ), aliases: this.options.value.getAliases( mw.config.get( 'wgUserLanguage' ) ) }, + entityId: this.options.value.getId(), + api: this.options.api + } ); + }, + + _initFingerprints: function() { + if( !this.options.languages.length ) { + return; + } + + this.$fingerprints = $( '.wikibase-fingerprintgroupview' ); + + if( !this.$fingerprints.length ) { + var $precedingNode = this.$toc; + + if( !$precedingNode.length ) { + $precedingNode = $( '.wikibase-aliasesview' ); + } else { + this._addTocItem( + '#wb-terms', + mw.msg( 'wikibase-terms' ), + this.$toc.find( 'li' ).first() + ); + } + + this.$fingerprints = $( '<div/>' ).insertAfter( $precedingNode ); + } + + var value = []; + for( var i = 0; i < this.options.languages.length; i++ ) { + value.push( { + language: this.options.languages[i], + label: this.options.value.getLabel( this.options.languages[i] ) || null, + description: this.options.value.getDescription( this.options.languages[i] ) || null + } ); + } + + this.$fingerprints.fingerprintgroupview( { + value: value, entityId: this.options.value.getId(), api: this.options.api } ); @@ -380,6 +434,35 @@ ] ); } ); + }, + + /** + * Adds an item to the table of contents. + * + * @param {string} href + * @param {string} text + * @param {jQuery} [$insertBefore] Omit to have the item inserted at the end + */ + _addTocItem: function( href, text, $insertBefore ) { + if( !this.$toc.length ) { + return; + } + + var $li = $( '<li>' ) + .addClass( 'toclevel-1' ) + .append( $( '<a>' ).attr( 'href', href ).text( text ) ); + + if( $insertBefore ) { + $li.insertBefore( $insertBefore ); + } else { + this.$toc.append( $li ); + } + + this.$toc.find( 'li' ).each( function( i, li ) { + $( li ) + .removeClass( 'tocsection-' + i ) + .addClass( 'tocsection-' + ( i + 1 ) ); + } ); } } ); diff --git a/lib/resources/jquery.wikibase/resources.php b/lib/resources/jquery.wikibase/resources.php index 931194e..327ab86 100644 --- a/lib/resources/jquery.wikibase/resources.php +++ b/lib/resources/jquery.wikibase/resources.php @@ -155,12 +155,16 @@ 'jquery.wikibase.claimgrouplistview', 'jquery.wikibase.claimlistview', 'jquery.wikibase.descriptionview', + 'jquery.wikibase.fingerprintgroupview', 'jquery.wikibase.labelview', 'jquery.wikibase.toolbarcontroller', 'jquery.wikibase.statementview', 'wikibase', 'wikibase.templates', ), + 'messages' => array( + 'wikibase-terms', + ), ), 'jquery.wikibase.labelview' => $moduleTemplate + array( diff --git a/repo/resources/Resources.php b/repo/resources/Resources.php index b52eb0f..16c9432 100644 --- a/repo/resources/Resources.php +++ b/repo/resources/Resources.php @@ -37,7 +37,6 @@ 'wikibase.experts', 'wikibase.formatters.getStore', 'wikibase.EntityInitializer', - 'wikibase.initTermBox', 'wikibase.parsers.getStore', 'wikibase.RepoApi', 'wikibase.sites', @@ -72,19 +71,6 @@ // implicitly required as dependency. 'wikibase.serialization.entities', ), - ), - - 'wikibase.initTermBox' => $moduleTemplate + array( - 'scripts' => array( - 'wikibase.initTermBox.js', - ), - 'dependencies' => array( - 'jquery.wikibase.fingerprintgroupview', - 'wikibase', - ), - 'messages' => array( - 'wikibase-terms', - ) ), 'wikibase.ui.entitysearch' => $moduleTemplate + array( diff --git a/repo/resources/wikibase.initTermBox.js b/repo/resources/wikibase.initTermBox.js deleted file mode 100644 index a7a060b..0000000 --- a/repo/resources/wikibase.initTermBox.js +++ /dev/null @@ -1,97 +0,0 @@ -/** - * @licence GNU GPL v2+ - * - * @author: H. Snater < mediaw...@snater.com > - */ -( function( $, mw, wb ) { -'use strict'; - -/** - * Term box initialization. - * The term box displays label and description in languages other than the user language. - * @since 0.5 - * - * @param {wikibase.datamodel.Entity} entity - * @param {wikibase.AbstractedRepoApi} api - */ -wb.initTermBox = function( entity, api ) { - mw.hook( 'wikibase.domready' ).add( function() { - var $fingerprintgroupview = $( '.wikibase-fingerprintgroupview' ), - userSpecifiedLanguages = mw.config.get( 'wbUserSpecifiedLanguages' ), - hasSpecifiedLanguages = userSpecifiedLanguages && userSpecifiedLanguages.length, - isUlsDefined = mw.uls !== undefined - && $.uls !== undefined - && $.uls.data !== undefined, - languageCodes = []; - - // Skip if having no extra languages is what the user wants - if( !$fingerprintgroupview.length && !hasSpecifiedLanguages && isUlsDefined ) { - // No term box present; Ask ULS to provide languages and generate plain HTML - languageCodes = mw.uls.getFrequentLanguageList().slice( 1, 4 ); - - if( !languageCodes.length ) { - return; - } - - var $precedingNode = $( '#toc' ); - - if( $precedingNode.length ) { - updateToc( $precedingNode ); - } else { - $precedingNode = $( '.wikibase-aliasesview' ); - } - - $fingerprintgroupview = $( '<div/>' ).insertAfter( $precedingNode ); - - } else { - // Scrape language codes of existing DOM structure: - // TODO: Find more sane way to figure out language code. - $fingerprintgroupview.find( '.wikibase-fingerprintview' ).each( function() { - $.each( $( this ).attr( 'class' ).split( ' ' ), function( i, cssClass ) { - if( cssClass.indexOf( 'wikibase-fingerprintview-' ) === 0 ) { - languageCodes.push( cssClass.replace( /wikibase-fingerprintview-/, '' ) ); - return false; - } - } ); - } ); - } - - var value = []; - for( var i = 0; i < languageCodes.length; i++ ) { - value.push( { - language: languageCodes[i], - label: entity.getLabel( languageCodes[i] ) || null, - description: entity.getDescription( languageCodes[i] ) || null - } ); - } - - $fingerprintgroupview.fingerprintgroupview( { - value: value, - entityId: entity.getId(), - api: api - } ); - } ); -}; - -/** - * @param {jQuery} $toc - */ -function updateToc( $toc ) { - $toc - .children( 'ul' ).prepend( - $( '<li>' ) - .addClass( 'toclevel-1' ) - .append( - $( '<a>' ) - .attr( 'href', '#wb-terms' ) - .text( mw.msg( 'wikibase-terms' ) ) - ) - ) - .find( 'li' ).each( function( i, li ) { - $( li ) - .removeClass( 'tocsection-' + i ) - .addClass( 'tocsection-' + ( i + 1 ) ); - } ); -} - -} )( jQuery, mediaWiki, wikibase ); diff --git a/repo/resources/wikibase.ui.entityViewInit.js b/repo/resources/wikibase.ui.entityViewInit.js index dd5bfd3..11d2faa 100644 --- a/repo/resources/wikibase.ui.entityViewInit.js +++ b/repo/resources/wikibase.ui.entityViewInit.js @@ -209,6 +209,19 @@ var entityStore = new wb.store.EntityStore( abstractedRepoApi ); wb.compileEntityStoreFromMwConfig( entityStore ); + var userLanguages = mw.config.get( 'wbUserSpecifiedLanguages' ), + isUlsDefined = mw.uls !== undefined + && $.uls !== undefined + && $.uls.data !== undefined, + languages = []; + + if( !userLanguages.length && isUlsDefined ) { + languages = mw.uls.getFrequentLanguageList().slice( 1, 4 ); + } else { + languages = $.merge( [], userLanguages ); + languages.splice( $.inArray( mw.config.get( 'wgUserLanguage' ), userLanguages ), 1 ); + } + $entityview .entityview( { value: entity, @@ -219,7 +232,8 @@ getParserStore( abstractedRepoApi ), mw ), - api: abstractedRepoApi + api: abstractedRepoApi, + languages: languages } ) .on( 'labelviewchange labelviewafterstopediting', function( event ) { var $labelview = $( event.target ), @@ -244,8 +258,6 @@ ); } } ); - - wb.initTermBox( entity, abstractedRepoApi ); } function registerEditRestrictionHandlers() { -- To view, visit https://gerrit.wikimedia.org/r/156548 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I38cc93a9dbfae2ca9b2b04d2e12de58a0850acf0 Gerrit-PatchSet: 8 Gerrit-Project: mediawiki/extensions/Wikibase Gerrit-Branch: master Gerrit-Owner: Henning Snater <henning.sna...@wikimedia.de> Gerrit-Reviewer: Tobias Gritschacher <tobias.gritschac...@wikimedia.de> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits