Henning Snater has uploaded a new change for review. https://gerrit.wikimedia.org/r/183498
Change subject: Rearranged entity view header ...................................................................... Rearranged entity view header This change is the first step in rearranging the entity view's header according to the new UI layout. Major aspects: - Editable entity terms (as well as entity terms in additional languages) are displayed in a table below the entity header containing the entity terms in the UI language. By default, the table is hidden on page load. - Added user setting to show entity terms on page load. - Removed dedicated labelview, descriptionview, aliasesview for altering the entity terms in the UI language from the static header section. - Instead of the entity terms in the additional languages only, the entity terms of the UI language are wrapped in entitytermsview as well. - Removed TermBoxView.php as the logic is merged with the one FingerprintView.php and the need to render certain components (label-/description-/aliasesview) twice is removed. - Added updated CSS definitions to parent widgets removing definitions too specific from labelview and descriptionview in particular. - Removed "wikibase-firstHeading" template cloning native "firstHeading" DOM element. - Removed table of content item pointing to the entity terms since the entity terms are integrated into the header section. - Removed obsolete toolbar definitions for label-, description- and aliasesview. Refers to ->75656, ->75657. Change-Id: I21c7d4a466b8da7006b1a9215f85b7b5924ba71e --- M lib/resources/jquery.wikibase/jquery.wikibase.aliasesview.js M lib/resources/jquery.wikibase/jquery.wikibase.descriptionview.js M lib/resources/jquery.wikibase/jquery.wikibase.entitytermsforlanguagelistview.js M lib/resources/jquery.wikibase/jquery.wikibase.entitytermsforlanguageview.js M lib/resources/jquery.wikibase/jquery.wikibase.entitytermsview.js M lib/resources/jquery.wikibase/jquery.wikibase.entityview.js M lib/resources/jquery.wikibase/jquery.wikibase.labelview.js M lib/resources/jquery.wikibase/resources.php M lib/resources/jquery.wikibase/themes/default/jquery.wikibase.aliasesview.css M lib/resources/jquery.wikibase/themes/default/jquery.wikibase.descriptionview.css M lib/resources/jquery.wikibase/themes/default/jquery.wikibase.entitytermsforlanguagelistview.css M lib/resources/jquery.wikibase/themes/default/jquery.wikibase.entitytermsforlanguageview.css M lib/resources/jquery.wikibase/themes/default/jquery.wikibase.entitytermsview.css M lib/resources/jquery.wikibase/themes/default/jquery.wikibase.labelview.css D lib/resources/jquery.wikibase/toolbar/controller/definitions/edittoolbar/aliasesview.js D lib/resources/jquery.wikibase/toolbar/controller/definitions/edittoolbar/descriptionview.js M lib/resources/jquery.wikibase/toolbar/controller/definitions/edittoolbar/entitytermsview.js D lib/resources/jquery.wikibase/toolbar/controller/definitions/edittoolbar/labelview.js M lib/resources/jquery.wikibase/toolbar/controller/resources.php M lib/resources/wikibase.css M repo/Wikibase.hooks.php M repo/i18n/en.json M repo/i18n/qqq.json M repo/includes/View/EntityView.php M repo/includes/View/EntityViewPlaceholderExpander.php M repo/includes/View/FingerprintView.php D repo/includes/View/TermBoxView.php M repo/resources/Resources.php M repo/resources/templates.php M repo/resources/wikibase.ui.entityViewInit.js M repo/tests/phpunit/includes/View/EntityViewPlaceholderExpanderTest.php M repo/tests/phpunit/includes/View/EntityViewTest.php M repo/tests/phpunit/includes/View/FingerprintViewTest.php D repo/tests/phpunit/includes/View/TermBoxViewTest.php 34 files changed, 701 insertions(+), 1,267 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase refs/changes/98/183498/1 diff --git a/lib/resources/jquery.wikibase/jquery.wikibase.aliasesview.js b/lib/resources/jquery.wikibase/jquery.wikibase.aliasesview.js index 4decdff..a3270e7 100644 --- a/lib/resources/jquery.wikibase/jquery.wikibase.aliasesview.js +++ b/lib/resources/jquery.wikibase/jquery.wikibase.aliasesview.js @@ -27,13 +27,11 @@ template: 'wikibase-aliasesview', templateParams: [ '', // additional class - mw.msg( 'wikibase-aliases-label' ), // label '', // list items '' // toolbar ], templateShortCuts: { - '$label': '.wikibase-aliasesview-label', - '$list': 'ul' + $list: 'ul' }, value: null, helpMessage: mw.msg( 'wikibase-aliases-input-help-message' ), @@ -54,7 +52,6 @@ PARENT.prototype._create.call( this ); this.element.removeClass( 'wb-empty' ); - this.$label.text( mw.msg( 'wikibase-aliases-label' ) ); if( this.$list.children( 'li' ).length !== this.options.value.getTexts().length ) { this.draw(); diff --git a/lib/resources/jquery.wikibase/jquery.wikibase.descriptionview.js b/lib/resources/jquery.wikibase/jquery.wikibase.descriptionview.js index 564a913..90e92db 100644 --- a/lib/resources/jquery.wikibase/jquery.wikibase.descriptionview.js +++ b/lib/resources/jquery.wikibase/jquery.wikibase.descriptionview.js @@ -141,6 +141,10 @@ $input.val( descriptionText ); } + if( $.fn.inputautoexpand ) { + $input.inputautoexpand(); + } + this.$text.empty().append( $input ); }, diff --git a/lib/resources/jquery.wikibase/jquery.wikibase.entitytermsforlanguagelistview.js b/lib/resources/jquery.wikibase/jquery.wikibase.entitytermsforlanguagelistview.js index 4373afc..cf3af83 100644 --- a/lib/resources/jquery.wikibase/jquery.wikibase.entitytermsforlanguagelistview.js +++ b/lib/resources/jquery.wikibase/jquery.wikibase.entitytermsforlanguagelistview.js @@ -50,9 +50,23 @@ options: { template: 'wikibase-entitytermsforlanguagelistview', templateParams: [ - '' // tbodys + function() { + return mw.msg( 'wikibase-entitytermsforlanguagelistview-language' ); + }, + function() { + return mw.msg( 'wikibase-entitytermsforlanguagelistview-label' ); + }, + function() { + return mw.msg( 'wikibase-entitytermsforlanguagelistview-aliases' ); + }, + function() { + return mw.msg( 'wikibase-entitytermsforlanguagelistview-description' ); + }, + '' // entitytermsforlanguageview ], - templateShortCuts: {}, + templateShortCuts: { + $listview: '.wikibase-entitytermsforlanguagelistview-listview' + }, value: [], entityId: null, entityChangersFactory: null @@ -87,7 +101,7 @@ */ destroy: function() { // When destroying a widget not initialized properly, listview will not have been created. - var listview = this.element.data( 'listview' ); + var listview = this.$listview.data( 'listview' ); if( listview ) { listview.destroy(); @@ -128,7 +142,7 @@ } ); - this.element + this.$listview .listview( { listItemAdapter: new $.wikibase.listview.ListItemAdapter( { listItemWidget: listItemWidget, @@ -144,8 +158,7 @@ }; } } ), - value: self.options.value || null, - listItemNodeName: 'TBODY' + value: self.options.value || null } ); }, @@ -153,7 +166,7 @@ * @return {boolean} */ isValid: function() { - var listview = this.element.data( 'listview' ), + var listview = this.$listview.data( 'listview' ), lia = listview.listItemAdapter(), isValid = true; @@ -169,7 +182,7 @@ * @return {boolean} */ isInitialValue: function() { - var listview = this.element.data( 'listview' ), + var listview = this.$listview.data( 'listview' ), lia = listview.listItemAdapter(), currentValue = []; @@ -205,13 +218,15 @@ this._isInEditMode = true; this.element.addClass( 'wb-edit' ); - var listview = this.element.data( 'listview' ), + var listview = this.$listview.data( 'listview' ), lia = listview.listItemAdapter(); listview.items().each( function() { var entitytermsforlanguageview = lia.liInstance( $( this ) ); entitytermsforlanguageview.startEditing(); } ); + + this.updateInputSize(); this._trigger( 'afterstartediting' ); }, @@ -232,7 +247,7 @@ this.disable(); - var listview = this.element.data( 'listview' ), + var listview = this.$listview.data( 'listview' ), lia = listview.listItemAdapter(); // TODO: This widget should not need to queue the requests of its encapsulated widgets. @@ -285,7 +300,7 @@ _resetEditMode: function() { this.enable(); - var listview = this.element.data( 'listview' ), + var listview = this.$listview.data( 'listview' ), lia = listview.listItemAdapter(); listview.items().each( function() { @@ -311,10 +326,45 @@ }, /** + * Updates the size of the input boxes by triggering the inputautoexpand plugin's `expand()` + * function. + */ + updateInputSize: function() { + var listview = this.$listview.data( 'listview' ), + lia = listview.listItemAdapter(); + + listview.items().each( function() { + var entitytermsforlanguageview = lia.liInstance( $( this ) ); + + $.each( ['label', 'description'], function() { + var $view = entitytermsforlanguageview['$' + this + 'view'], + autoExpandInput = $view.find( 'input' ).data( 'inputautoexpand' ); + + if( autoExpandInput ) { + autoExpandInput.options( { + maxWidth: $view.width() + } ); + autoExpandInput.expand( true ); + } + } ); + + var $aliasesview = entitytermsforlanguageview.$aliasesview; + + $aliasesview.find( 'input' ).each( function() { + var autoExpandInput = $( this ).data( 'inputautoexpand' ); + autoExpandInput.options( { + maxWidth: $aliasesview.width() + } ); + autoExpandInput.expand( true ); + } ); + } ); + }, + + /** * @see jQuery.ui.TemplatedWidget.focus */ focus: function() { - var listview = this.element.data( 'listview' ), + var listview = this.$listview.data( 'listview' ), $items = listview.items(); if( $items.length ) { @@ -342,7 +392,7 @@ removeError: function() { this.element.removeClass( 'wb-error' ); - var listview = this.element.data( 'listview' ), + var listview = this.$listview.data( 'listview' ), lia = listview.listItemAdapter(); listview.items().each( function() { @@ -359,7 +409,7 @@ return this.option( 'value', value ); } - var listview = this.element.data( 'listview' ), + var listview = this.$listview.data( 'listview' ), lia = listview.listItemAdapter(); value = []; @@ -383,7 +433,7 @@ var response = PARENT.prototype._setOption.apply( this, arguments ); if( key === 'disabled' ) { - this.element.data( 'listview' ).option( key, value ); + this.$listview.data( 'listview' ).option( key, value ); } return response; diff --git a/lib/resources/jquery.wikibase/jquery.wikibase.entitytermsforlanguageview.js b/lib/resources/jquery.wikibase/jquery.wikibase.entitytermsforlanguageview.js index a3e48ec..764183e 100644 --- a/lib/resources/jquery.wikibase/jquery.wikibase.entitytermsforlanguageview.js +++ b/lib/resources/jquery.wikibase/jquery.wikibase.entitytermsforlanguageview.js @@ -59,14 +59,15 @@ mw.config.get( 'wgTitle' ), mw.config.get( 'wgNamespaceNumber' ) ); - return title.getUrl( { setlang: this.options.value.language } ); - }, - function() { - return wb.getLanguageNameByCode( this.options.value.language ); + return mw.wbTemplate( 'wikibase-entitytermsforlanguageview-language', + title.getUrl( { setlang: this.options.value.language } ), + wb.getLanguageNameByCode( this.options.value.language ) + ); }, '', // label + '', // aliases '', // description - '' // aliases + '' // toolbar placeholder ], templateShortCuts: { $language: '.wikibase-entitytermsforlanguageview-language', @@ -194,9 +195,9 @@ if( widgetName === 'aliasesview' ) { options.aliasesChanger = self.options.entityChangersFactory.getAliasesChanger(); - } else if ( widgetName === 'descriptionview' ) { + } else if( widgetName === 'descriptionview' ) { options.descriptionsChanger = self.options.entityChangersFactory.getDescriptionsChanger(); - } else if ( widgetName === 'labelview' ) { + } else if( widgetName === 'labelview' ) { options.labelsChanger = self.options.entityChangersFactory.getLabelsChanger(); options.entityId = self.options.entityId; } diff --git a/lib/resources/jquery.wikibase/jquery.wikibase.entitytermsview.js b/lib/resources/jquery.wikibase/jquery.wikibase.entitytermsview.js index fd24fd4..0d39a6c 100644 --- a/lib/resources/jquery.wikibase/jquery.wikibase.entitytermsview.js +++ b/lib/resources/jquery.wikibase/jquery.wikibase.entitytermsview.js @@ -53,14 +53,22 @@ options: { template: 'wikibase-entitytermsview', templateParams: [ - function() { - return mw.msg( 'wikibase-terms' ); - }, + '', // label class + '', // labelview + '', // aliases class + '', // aliasesview + '', // description class + '', // descriptionview '', // entitytermsforlanguagelistview - '' // edit section + '', // additional entitytermsforlanguagelistview container class(es) + '' // toolbar placeholder ], templateShortCuts: { - $h: 'h2' + $headingLabel: '.wikibase-entitytermsview-heading-label', + $headingAliases: '.wikibase-entitytermsview-heading-aliases', + $headingDescription: '.wikibase-entitytermsview-heading-description', + $entitytermsforlanguagelistviewContainer: + '.wikibase-entitytermsview-entitytermsforlanguagelistview' }, value: [], entityId: null, @@ -98,10 +106,41 @@ = this.element.find( '.wikibase-entitytermsforlanguagelistview' ); if( !this.$entitytermsforlanguagelistview.length ) { - this.$entitytermsforlanguagelistview = $( '<table/>' ).appendTo( this.element ); + this.$entitytermsforlanguagelistview = $( '<div/>' ) + .appendTo( this.$entitytermsforlanguagelistviewContainer ); } this._createEntitytermsforlanguagelistview(); + + var self = this; + + this.element + .on( + this.widgetEventPrefix + 'change.' + this.widgetName + + ' ' + this.widgetEventPrefix + 'afterstopediting.' + this.widgetName, + function() { + $.each( self.value(), function() { + if( this.language === mw.config.get( 'wgUserLanguage' ) ) { + var $labelChildren = self.$headingLabel.children(); + self.$headingLabel.text( this.label.getText() ).append( $labelChildren ); + self.$headingDescription.text( this.description.getText() ); + + var aliasesTexts = this.aliases.getTexts(), + $ul = self.$headingAliases.children( 'ul' ).empty(); + + for( var i = 0; i < aliasesTexts.length; i++ ) { + $ul.append( + mw.wbTemplate( 'wikibase-entitytermsview-aliases-alias', + aliasesTexts[i] + ) + ); + } + + return false; + } + } ); + } + ); }, /** @@ -120,6 +159,7 @@ this.$entitytermsforlanguagelistview.remove(); } + this.element.off( '.' + this.widgetName ); this.element.removeClass( 'wikibase-entitytermsview' ); PARENT.prototype.destroy.call( this ); }, diff --git a/lib/resources/jquery.wikibase/jquery.wikibase.entityview.js b/lib/resources/jquery.wikibase/jquery.wikibase.entityview.js index 69b8918..47b8107 100644 --- a/lib/resources/jquery.wikibase/jquery.wikibase.entityview.js +++ b/lib/resources/jquery.wikibase/jquery.wikibase.entityview.js @@ -62,19 +62,16 @@ '', // main content '' // sidebar ], - templateShortCuts: {}, + templateShortCuts: { + $main: '.wikibase-entityview-main', + $side: '.wikibase-entityview-side' + }, value: null, languages: null, entityStore: null, valueViewBuilder: null, dataTypeStore: null }, - - /** - * @property {jQuery} - * @protected - */ - $toc: null, /** * @property {jQuery} @@ -98,7 +95,7 @@ * @property {jQuery|null} * @protected */ - $fingerprints: null, + $entityTerms: null, /** * @inheritdoc @@ -133,12 +130,7 @@ this.element.data( $.wikibase.entityview.prototype.widgetName, this ); - this.$toc = $( '.toc', this.element ); - - this._initLabel(); - this._initDescription(); - this._initAliases(); - this._initFingerprints(); + this._initEntityTerms(); this._attachEventHandlers(); }, @@ -146,120 +138,55 @@ /** * @protected */ - _initLabel: function() { - this.$label = $( '.wb-firstHeading .wikibase-labelview', this.element ).first(); - if( !this.$label.length ) { - this.$label = $( '<div/>' ); - mw.wbTemplate( 'wikibase-firstHeading', - this.options.value.getId(), - this.$label - ).appendTo( this.element ); - } + _initEntityTerms: function() { + var i; - // FIXME: entity object should not contain fallback strings - var label = this.options.value.getFingerprint().getLabelFor( this.options.languages[0] ) - || new wb.datamodel.Term( this.options.languages[0], '' ); + this.$entityTerms = $( '.wikibase-entitytermsview', this.element ); - this.$label.labelview( { - value: label, - helpMessage: mw.msg( - 'wikibase-description-input-help-message', - wb.getLanguageNameByCode( this.options.languages[0] ) - ), - entityId: this.options.value.getId(), - labelsChanger: this.options.entityChangersFactory.getLabelsChanger(), - showEntityId: true - } ); - }, + if( !this.$entityTerms.length ) { + this.$entityTerms = $( '<div/>' ).prepend( this.$main ); + } else { + var $entitytermsforlanguageview = this.$entityTerms + .find( '.wikibase-entitytermsforlanguageview' ); - /** - * @protected - */ - _initDescription: function() { - this.$description = $( '.wikibase-descriptionview', this.element ).first(); - if( !this.$description.length ) { - this.$description = $( '<div/>' ).appendTo( this.element ); - } - - // FIXME: entity object should not contain fallback strings - var description = this.options.value.getFingerprint().getDescriptionFor( - this.options.languages[0] - ) || new wb.datamodel.Term( this.options.languages[0], '' ); - - this.$description.descriptionview( { - value: description, - helpMessage: mw.msg( - 'wikibase-description-input-help-message', - wb.getLanguageNameByCode( this.options.languages[0] ) - ), - descriptionsChanger: this.options.entityChangersFactory.getDescriptionsChanger() - } ); - }, - - /** - * @protected - */ - _initAliases: function() { - this.$aliases = $( '.wikibase-aliasesview', this.element ).first(); - if( !this.$aliases.length ) { - this.$aliases = $( '<div/>' ).appendTo( this.element ); - } - - var aliases = this.options.value.getFingerprint().getAliasesFor( this.options.languages[0] ) - || new wb.datamodel.MultiTerm( this.options.languages[0], [] ); - - this.$aliases.aliasesview( { - value: aliases, - aliasesChanger: this.options.entityChangersFactory.getAliasesChanger() - } ); - }, - - /** - * @protected - */ - _initFingerprints: function() { - var self = this; - - if( this.options.languages.length === 1 ) { - return; - } - - this.$fingerprints = $( '.wikibase-entitytermsview', this.element ); - - 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() - ); + // Scrape languages from static HTML: + var scrapedLanguages = []; + if( $entitytermsforlanguageview.length > 0 ) { + $entitytermsforlanguageview.each( function() { + $.each( $( this ).attr( 'class' ).split( ' ' ), function() { + if( this.indexOf( 'wikibase-entitytermsforlanguageview-' ) === 0 ) { + scrapedLanguages.push( + this.split( 'wikibase-entitytermsforlanguageview-' )[1] + ); + return false; + } + } ); + } ); } - this.$fingerprints = $( '<div/>' ).insertAfter( $precedingNode ); - } else { - // Scrape languages from static HTML: - // FIXME: Currently, this simply overrules the languages options. - self.options.languages = []; - this.$fingerprints.find( '.wikibase-entitytermsforlanguageview' ).each( function() { - $.each( $( this ).attr( 'class' ).split( ' ' ), function() { - if( this.indexOf( 'wikibase-entitytermsforlanguageview-' ) === 0 ) { - self.options.languages.push( - this.split( 'wikibase-entitytermsforlanguageview-' )[1] - ); - return false; + var mismatch = scrapedLanguages.length !== this.options.languages.length; + + if( !mismatch ) { + for( i = 0; i < scrapedLanguages.length; i++ ) { + if( scrapedLanguages[i] !== this.options.languages[i] ) { + mismatch = true; + break; } - } ); - } ); + } + } + + if( mismatch ) { + // TODO: While this triggers rebuilding the whole DOM structure, the user interface + // language is always rendered statically and would not need to be re-rendered. + // However, that requires additional logic in respective widgets. + $entitytermsforlanguageview.remove(); + } } var fingerprint = this.options.value.getFingerprint(), value = []; - for( var i = 1; i < this.options.languages.length; i++ ) { + for( i = 0; i < this.options.languages.length; i++ ) { value.push( { language: this.options.languages[i], label: fingerprint.getLabelFor( this.options.languages[i] ) @@ -271,7 +198,7 @@ } ); } - this.$fingerprints.entitytermsview( { + this.$entityTerms.entitytermsview( { value: value, entityId: this.options.value.getId(), entityChangersFactory: this.options.entityChangersFactory, @@ -340,39 +267,9 @@ this.$label.data( 'labelview' )[state](); this.$description.data( 'descriptionview' )[state](); this.$aliases.data( 'aliasesview' )[state](); - if( this.$fingerprints ) { - this.$fingerprints.data( 'entitytermsview' )[state](); + if( this.$entityTerms ) { + this.$entityTerms.data( 'entitytermsview' )[state](); } - }, - - /** - * Adds an item to the table of contents. - * @protected - * - * @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/jquery.wikibase.labelview.js b/lib/resources/jquery.wikibase/jquery.wikibase.labelview.js index aa6c774..4e2ab8e 100644 --- a/lib/resources/jquery.wikibase/jquery.wikibase.labelview.js +++ b/lib/resources/jquery.wikibase/jquery.wikibase.labelview.js @@ -72,8 +72,6 @@ var self = this; - this.element.attr( 'id', 'wb-firstHeading-' + this.options.entityId ); - this.element .on( 'labelviewafterstartediting.' + this.widgetName @@ -156,6 +154,10 @@ $input.val( labelText ); } + if( $.fn.inputautoexpand ) { + $input.inputautoexpand(); + } + this.$text.empty().append( $input ); }, diff --git a/lib/resources/jquery.wikibase/resources.php b/lib/resources/jquery.wikibase/resources.php index f6f91c1..2df0616 100644 --- a/lib/resources/jquery.wikibase/resources.php +++ b/lib/resources/jquery.wikibase/resources.php @@ -31,7 +31,6 @@ 'wikibase.datamodel.MultiTerm', ), 'messages' => array( - 'wikibase-aliases-label', 'wikibase-aliases-input-help-message', 'wikibase-alias-edit-placeholder', ), @@ -169,6 +168,7 @@ 'dependencies' => array( 'jquery.ui.TemplatedWidget', 'jquery.wikibase.entitytermsforlanguagelistview', + 'mediawiki.user', ), 'messages' => array( 'wikibase-terms', @@ -188,6 +188,10 @@ 'wikibase.getLanguageNameByCode', ), 'messages' => array( + 'wikibase-entitytermsforlanguagelistview-aliases', + 'wikibase-entitytermsforlanguagelistview-description', + 'wikibase-entitytermsforlanguagelistview-label', + 'wikibase-entitytermsforlanguagelistview-language', 'wikibase-fingerprintview-input-help-message', ), ), @@ -205,6 +209,7 @@ 'jquery.wikibase.labelview', 'mediawiki.Title', 'wikibase.getLanguageNameByCode', + 'wikibase.templates', ), 'messages' => array( 'wikibase-fingerprintview-input-help-message', diff --git a/lib/resources/jquery.wikibase/themes/default/jquery.wikibase.aliasesview.css b/lib/resources/jquery.wikibase/themes/default/jquery.wikibase.aliasesview.css index 83d96e9..12cf1cc 100644 --- a/lib/resources/jquery.wikibase/themes/default/jquery.wikibase.aliasesview.css +++ b/lib/resources/jquery.wikibase/themes/default/jquery.wikibase.aliasesview.css @@ -16,7 +16,6 @@ } .wikibase-aliasesview-label { - font-size: 84%; /* using #contentSub font-size */ float: left; font-weight: bold; margin-right: 1em; @@ -45,7 +44,6 @@ } .wikibase-aliasesview li { - font-size: 84%; float: left; margin: 0.2em 12px 0.2em 0; display: inline; @@ -67,11 +65,6 @@ .wikibase-aliasesview .tagadata-choice input { padding-top: 0 !important; padding-bottom: 0 !important; -} - -.wikibase-aliasesview.wb-edit { - background-color: #D6F3FF; - white-space: normal; /* required by FF for not(!) wrapping toolbar when there is only one line of aliases */ } .wikibase-aliasesview.wb-edit ul { diff --git a/lib/resources/jquery.wikibase/themes/default/jquery.wikibase.descriptionview.css b/lib/resources/jquery.wikibase/themes/default/jquery.wikibase.descriptionview.css index c1b7f2d..c3e2bbd 100644 --- a/lib/resources/jquery.wikibase/themes/default/jquery.wikibase.descriptionview.css +++ b/lib/resources/jquery.wikibase/themes/default/jquery.wikibase.descriptionview.css @@ -2,48 +2,11 @@ * @licence GNU GPL v2+ * @author H. Snater < mediaw...@snater.com > */ - -.wikibase-descriptionview { - float: left; - margin-top: -2px; /* move to top decreasing space between label and description */ - width: 100%; -} - -div.wikibase-descriptionview.wb-edit { - background-color: #D6F3FF; -} -div.wikibase-descriptionview.wb-empty { +.wikibase-descriptionview.wb-empty { background-color: inherit; } -.wikibase-descriptionview .wikibase-descriptionview-container { - padding-left: 10px; - position: relative; -} - -.wikibase-descriptionview.wb-edit .wikibase-descriptionview-container { - padding-left: 7px; -} - -.wikibase-descriptionview .wikibase-descriptionview-text { - display: block; - padding: 0.1em 19em 0.1em 0; - line-height: 2; /* force height to be able to align toolbar */ -} - -.wikibase-descriptionview .wikibase-descriptionview-text > div { - display: inline; -} - .wikibase-descriptionview input { - width: 100%; - padding: 0 2px; - font-size: 1em; /* prevent IE from automatically resizing the font within the input box */ -} - -.wikibase-descriptionview .wikibase-edittoolbar-container { - line-height: 2; - position: absolute; - right: 0; - top: 0; + font-family: inherit; + font-size: inherit; } diff --git a/lib/resources/jquery.wikibase/themes/default/jquery.wikibase.entitytermsforlanguagelistview.css b/lib/resources/jquery.wikibase/themes/default/jquery.wikibase.entitytermsforlanguagelistview.css index d4d84cb..38d32c7 100644 --- a/lib/resources/jquery.wikibase/themes/default/jquery.wikibase.entitytermsforlanguagelistview.css +++ b/lib/resources/jquery.wikibase/themes/default/jquery.wikibase.entitytermsforlanguagelistview.css @@ -3,21 +3,132 @@ * @author H. Snater < mediaw...@snater.com > */ .wikibase-entitytermsforlanguagelistview { + border: 1px solid #C9C9C9; + display: table; + padding-bottom: 1em; + table-layout: fixed; + width: 100%; + word-wrap: break-word; +} +.wikibase-entitytermsforlanguagelistview.wb-edit { + border-color: #2779AA; +} + +.wikibase-entitytermsforlanguagelistview .wikibase-entitytermsforlanguagelistview-header { + display: table-header-group; +} + +.wikibase-entitytermsforlanguagelistview .wikibase-entitytermsforlanguagelistview-header .wikibase-entitytermsforlanguagelistview-header-row { + display: table-row; +} + +.wikibase-entitytermsforlanguagelistview .wikibase-entitytermsforlanguagelistview-header .wikibase-entitytermsforlanguagelistview-header-row .wikibase-entitytermsforlanguagelistview-cell { + background-color: #E8E8E8; + border-right: 1px solid white; + display: table-cell; + padding-left: 0.4em; + vertical-align: top; +} +.wikibase-entitytermsforlanguagelistview .wikibase-entitytermsforlanguagelistview-header .wikibase-entitytermsforlanguagelistview-header-row .wikibase-entitytermsforlanguagelistview-cell:last-child { + border-right: 0; +} +.wikibase-entitytermsforlanguagelistview.wb-edit .wikibase-entitytermsforlanguagelistview-header .wikibase-entitytermsforlanguagelistview-header-row .wikibase-entitytermsforlanguagelistview-cell { + background: #D6F3FF; +} + +.wikibase-entitytermsforlanguagelistview .wikibase-entitytermsforlanguagelistview-header .wikibase-entitytermsforlanguagelistview-header-row .wikibase-entitytermsforlanguagelistview-language { + width: 15%; +} +.wikibase-entitytermsforlanguagelistview .wikibase-entitytermsforlanguagelistview-header .wikibase-entitytermsforlanguagelistview-header-row .wikibase-entitytermsforlanguagelistview-label { + width: 25%; +} +.wikibase-entitytermsforlanguagelistview .wikibase-entitytermsforlanguagelistview-header .wikibase-entitytermsforlanguagelistview-header-row .wikibase-entitytermsforlanguagelistview-aliases { + width: 25%; +} +.wikibase-entitytermsforlanguagelistview .wikibase-entitytermsforlanguagelistview-header .wikibase-entitytermsforlanguagelistview-header-row .wikibase-entitytermsforlanguagelistview-description { + width: 35%; +} + +.wikibase-entitytermsforlanguagelistview .wikibase-entitytermsforlanguagelistview-listview { + display: table-row-group; +} + +.wikibase-entitytermsforlanguagelistview .wikibase-entitytermsforlanguagelistview-listview .wikibase-entitytermsforlanguageview { + display: table-row; +} + +.wikibase-entitytermsforlanguagelistview .wikibase-entitytermsforlanguagelistview-listview .wikibase-entitytermsforlanguageview .wikibase-entitytermsforlanguageview-language, +.wikibase-entitytermsforlanguagelistview .wikibase-entitytermsforlanguagelistview-listview .wikibase-entitytermsforlanguageview .wikibase-entitytermsforlanguageview-label, +.wikibase-entitytermsforlanguagelistview .wikibase-entitytermsforlanguagelistview-listview .wikibase-entitytermsforlanguageview .wikibase-entitytermsforlanguageview-aliases, +.wikibase-entitytermsforlanguagelistview .wikibase-entitytermsforlanguagelistview-listview .wikibase-entitytermsforlanguageview .wikibase-entitytermsforlanguageview-description { + display: table-cell; + line-height: 136%; + overflow: hidden; + padding-left: 0.4em; + padding-top: 0.8em; + text-overflow: ellipsis; + vertical-align: top; +} + +.wikibase-entitytermsforlanguagelistview .wikibase-entitytermsforlanguagelistview-listview .wikibase-entitytermsforlanguageview .wikibase-entitytermsforlanguageview-language { + width: 4%; + word-wrap: normal; +} + +.wikibase-entitytermsforlanguagelistview .wikibase-entitytermsforlanguagelistview-listview .wikibase-entitytermsforlanguageview .wikibase-entitytermsforlanguageview-label .wikibase-labelview .wikibase-labelview-container, +.wikibase-entitytermsforlanguagelistview .wikibase-entitytermsforlanguagelistview-listview .wikibase-entitytermsforlanguageview .wikibase-entitytermsforlanguageview-aliases .wikibase-aliasesview .wikibase-aliasesview-list-item, +.wikibase-entitytermsforlanguagelistview .wikibase-entitytermsforlanguagelistview-listview .wikibase-entitytermsforlanguageview .wikibase-entitytermsforlanguageview-description .wikibase-descriptionview .wikibase-descriptionview-container { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.wikibase-entitytermsforlanguagelistview .wikibase-entitytermsforlanguagelistview-listview .wikibase-entitytermsforlanguageview .wikibase-entitytermsforlanguageview-label input, +.wikibase-entitytermsforlanguagelistview .wikibase-entitytermsforlanguagelistview-listview .wikibase-entitytermsforlanguageview .wikibase-entitytermsforlanguageview-description input { + border: 0; border-bottom: 1px solid #C9C9C9; - border-right: 1px solid #C9C9C9; - border-spacing: 0; + outline: none; +} +.wikibase-entitytermsforlanguagelistview .wikibase-entitytermsforlanguagelistview-listview .wikibase-entitytermsforlanguageview .wikibase-entitytermsforlanguageview-label input:focus, +.wikibase-entitytermsforlanguagelistview .wikibase-entitytermsforlanguagelistview-listview .wikibase-entitytermsforlanguageview .wikibase-entitytermsforlanguageview-description input:focus { + border-color: #0b0080; +} + +.wikibase-entitytermsforlanguagelistview .wikibase-entitytermsforlanguagelistview-listview .wikibase-entitytermsforlanguageview .wikibase-entitytermsforlanguageview-aliases li { + background: none; + border: 0; clear: both; + margin: 0; + padding: 0; width: 100%; } -.wikibase-entitytermsforlanguagelistview tr td { - background: #F8F8F8; +.wikibase-entitytermsview .wikibase-entitytermsview-entitytermsforlanguagelistview .wikibase-entitytermsforlanguageview .wikibase-entitytermsforlanguageview-language { + word-wrap: normal; } -.wikibase-entitytermsforlanguagelistview tbody:nth-child(even) td { - background: #F0F0F0; +.wikibase-entitytermsforlanguagelistview .wikibase-entitytermsforlanguagelistview-listview .wikibase-entitytermsforlanguageview .wikibase-entitytermsforlanguageview-aliases .wikibase-aliasesview-list { + padding: 0; } -.wikibase-entitytermsforlanguagelistview .wb-edit tr td { - background: #D6F3FF; +.wikibase-entitytermsforlanguagelistview .wikibase-entitytermsforlanguagelistview-listview .wikibase-entitytermsforlanguageview .wikibase-entitytermsforlanguageview-aliases .tagadata-label-text { + padding: 0; +} + +.wikibase-entitytermsforlanguagelistview .wikibase-entitytermsforlanguagelistview-listview .wikibase-entitytermsforlanguageview .wikibase-entitytermsforlanguageview-aliases .tagadata-close { + display: none; +} + +.wikibase-entitytermsforlanguagelistview .wikibase-entitytermsforlanguagelistview-listview .wikibase-entitytermsforlanguageview .wikibase-entitytermsforlanguageview-aliases .ui-state-default { + color: #000000; +} + +.wikibase-entitytermsforlanguagelistview .wikibase-entitytermsforlanguagelistview-listview .wikibase-entitytermsforlanguageview .wikibase-entitytermsforlanguageview-aliases input { + border-bottom: 1px solid #C9C9C9; +} +.wikibase-entitytermsforlanguagelistview .wikibase-entitytermsforlanguagelistview-listview .wikibase-entitytermsforlanguageview .wikibase-entitytermsforlanguageview-aliases input:focus { + border-color: #0b0080; +} +.wikibase-entitytermsforlanguagelistview .wikibase-entitytermsforlanguagelistview-listview .wikibase-entitytermsforlanguageview .wikibase-entitytermsforlanguageview-aliases li.tagadata-choice-modified .tagadata-label-text { + font-style: italic; } diff --git a/lib/resources/jquery.wikibase/themes/default/jquery.wikibase.entitytermsforlanguageview.css b/lib/resources/jquery.wikibase/themes/default/jquery.wikibase.entitytermsforlanguageview.css index ffce513..c2a181a 100644 --- a/lib/resources/jquery.wikibase/themes/default/jquery.wikibase.entitytermsforlanguageview.css +++ b/lib/resources/jquery.wikibase/themes/default/jquery.wikibase.entitytermsforlanguageview.css @@ -2,81 +2,8 @@ * @licence GNU GPL v2+ * @author H. Snater < mediaw...@snater.com > */ -.wikibase-entitytermsforlanguageview-language { - width: 25%; - word-wrap: break-word; - padding-left: 10px; - border-left: 1px solid #C9C9C9; -} - -.wikibase-entitytermsforlanguageview-label, -.wikibase-entitytermsforlanguageview-description, -.wikibase-entitytermsforlanguageview-aliases { - width: 75%; - word-wrap: break-word; - padding-left: 10px; -} - -.wikibase-entitytermsforlanguageview tr td:first-child + td + td { - width: 25%; -} - -.wikibase-entitytermsforlanguageview td { - border-top: 1px solid #C9C9C9; -} - -.wikibase-entitytermsforlanguageview td:last-child { - padding-left: 10px; -} - -.wikibase-entitytermsforlanguageview-label { - padding: 10px; -} - -.wikibase-entitytermsforlanguageview .wikibase-entitytermsforlanguageview-label input, -.wikibase-entitytermsforlanguageview .wikibase-entitytermsforlanguageview-description input { - font-family: inherit; - width: 100%; -} - -.wikibase-entitytermsforlanguageview .wikibase-descriptionview .wikibase-descriptionview-container { - padding-left: 0; -} - -.wikibase-entitytermsforlanguageview .wikibase-descriptionview .wikibase-descriptionview-text { - line-height: 1.4; - padding-right: 0; -} - -.wikibase-entitytermsforlanguageview .wikibase-labelview, -.wikibase-entitytermsforlanguageview .wikibase-descriptionview, -.wikibase-entitytermsforlanguageview .wikibase-aliasesview { - display: block; - float: none; - margin-top: 0; - padding: 10px; - width: auto; -} - -.wikibase-entitytermsforlanguageview .wikibase-aliasesview .wikibase-aliasesview-container { - display: inline-block !important; - padding-left: 0; - padding-right: 0; - width: 100%; -} - -.wikibase-entitytermsforlanguageview.wb-edit .wikibase-aliasesview-list { - font-size: 84%; -} - -.wikibase-entitytermsforlanguageview.wb-edit .wikibase-aliasesview-list * { - font-size: 100%; -} - -.wikibase-entitytermsforlanguageview.wb-edit .wikibase-labelview, -.wikibase-entitytermsforlanguageview.wb-edit .wikibase-descriptionview, -.wikibase-entitytermsforlanguageview.wb-edit .wikibase-aliasesview { - padding: 9px 8px 9px 7px; +.wikibase-entitytermsforlanguageview input { + background-color: transparent; } .wikibase-entitytermsforlanguageview .wb-error { diff --git a/lib/resources/jquery.wikibase/themes/default/jquery.wikibase.entitytermsview.css b/lib/resources/jquery.wikibase/themes/default/jquery.wikibase.entitytermsview.css index 30e7168..fd9c89e 100644 --- a/lib/resources/jquery.wikibase/themes/default/jquery.wikibase.entitytermsview.css +++ b/lib/resources/jquery.wikibase/themes/default/jquery.wikibase.entitytermsview.css @@ -4,11 +4,60 @@ */ .wikibase-entitytermsview { float: left; + margin-bottom: 1em; + position: relative; width: 100%; } -.wikibase-entitytermsview h2 { - width: auto; +.wikibase-entitytermsview .wikibase-entitytermsview-heading .wikibase-entitytermsview-heading-label .wikibase-entitytermsview-heading-label-id { + color: grey; + font-size: 0.6em; + margin-left: 0.4em; +} +.wikibase-entitytermsview .wikibase-entitytermsview-heading .wikibase-entitytermsview-heading-label .wikibase-entitytermsview-heading-label-id:before { + /* Prevent id being hidden in ellipsis on very long labels: */ + content: ' '; +} + +.wikibase-entitytermsview .wikibase-entitytermsview-heading .wikibase-entitytermsview-heading-aliases ul { + color: grey; + overflow: hidden; + margin: 0; + text-overflow: ellipsis; +} +.wikibase-entitytermsview .wikibase-entitytermsview-heading .wikibase-entitytermsview-heading-aliases li { + display: inline; +} +.wikibase-entitytermsview .wikibase-entitytermsview-heading .wikibase-entitytermsview-heading-aliases li::before, +.wikibase-entitytermsview .wikibase-entitytermsview-heading .wikibase-entitytermsview-heading-aliases li:before { + content: '|'; + padding: 0 0.4em; +} +.wikibase-entitytermsview .wikibase-entitytermsview-heading .wikibase-entitytermsview-heading-aliases li:first-child:before { + content: ''; + padding: 0; +} + +.wikibase-entitytermsview .wikibase-entitytermsview-heading .wikibase-entitytermsview-heading-label { + max-width: 25em; +} + +.wikibase-entitytermsview .wikibase-entitytermsview-heading .wikibase-entitytermsview-heading-label, +.wikibase-entitytermsview .wikibase-entitytermsview-heading .wikibase-entitytermsview-heading-description { + overflow: hidden; + text-overflow: ellipsis; +} + +.wikibase-entitytermsview .wikibase-entitytermsview-entitytermsforlanguagelistview { + margin-top: 2em; +} +.wikibase-entitytermsview .wikibase-entitytermsview-entitytermsforlanguagelistview-collapsed { + display: none; +} + + +.wikibase-entitytermsview > .wikibase-toolbar-container { + line-height: 3; } .wikibase-entitytermsview .wikibase-toolbar-container .wikibase-toolbar-container { diff --git a/lib/resources/jquery.wikibase/themes/default/jquery.wikibase.labelview.css b/lib/resources/jquery.wikibase/themes/default/jquery.wikibase.labelview.css index ba4d6c0..3842cea 100644 --- a/lib/resources/jquery.wikibase/themes/default/jquery.wikibase.labelview.css +++ b/lib/resources/jquery.wikibase/themes/default/jquery.wikibase.labelview.css @@ -2,106 +2,11 @@ * @licence GNU GPL v2+ * @author H. Snater < mediaw...@snater.com > */ -/* TODO: Re-evaluate all styles and clean-up */ -/* TODO: Move firstHeading specific styles out of here */ - -.wikibase-labelview { - float: left; - position: relative; - width: 100%; -} - -.wb-firstHeading .wikibase-labelview.wb-edit:not(.wb-empty) { - background-color: #D6F3FF; -} - -.wb-firstHeading .wikibase-labelview-container { - margin: .3em .3em .13em 0; - padding-right: 19em; -} - -.wb-firstHeading .wikibase-labelview .wikibase-labelview-container { - margin-left: 10px; - word-wrap: break-word; -} - -.wb-firstHeading .wikibase-labelview.wb-edit .wikibase-labelview-container { - margin-left: 7px; -} - -.wb-firstHeading .wikibase-labelview-text { - font-size: 188%; - line-height: 1.2; -} - -.wikibase-labelview .wikibase-labelview-entityid { - color: #A1A1A1; -} - -#content .wb-firstHeading { - font-size: 100%; /* required since Gerrit Ic5ba836364d04b2c3814777b69b5f47fce25292a */ -} - -.wb-firstHeading { - border-bottom: 0; - margin-bottom: 0; /* FIXME: Should be removed if the Typography refresh is stable */ - padding-top: 0; /* FIXME: Should be removed if the Typography refresh is stable */ - clear: both; /* so success bar after new item created won't float heading */ -} - -.wb-firstHeading span { - line-height: 100%; -} - -.wikibase-labelview .wikibase-labelview-entityid { - /* In RTL UI, if the last word of the label is LTR, - * the supplement will get jumbled without isolation */ - unicode-bidi: -moz-isolate; - unicode-bidi: -webkit-isolate; - unicode-bidi: isolate; +.wikibase-labelview.wb-empty { + background-color: inherit; } .wikibase-labelview input { - width: 100%; font-family: inherit; font-size: inherit; - height: 1.2em; -} - -.wb-firstHeading .wikibase-toolbar { - font-size: 100%; - line-height: 1.2; /* adjust to height of value */ - padding-top: 1px; /* even out border of input box */ -} - -.wb-firstHeading .wikibase-labelview .wikibase-toolbar-wrapper { - position: absolute; - margin-top: .3em; /* see .wikibase-labelview-container */ - right: 0; - top: 0; - width: 18em; -} - -.wb-firstHeading .wikibase-labelview .wikibase-toolbar-wrapper > .wikibase-toolbar-container { - font-size: 188%; - position: static; - width: auto; -} - -.wb-firstHeading .wikibase-labelview .wikibase-toolbar-wrapper > .wikibase-toolbar-container > * { - font-family: sans-serif; - font-size: 53%; -} - -/* The wait message displayed when saving the label has to be customized due to diverging font -sizes and line heights within the heading */ -.wikibase-labelview .wb-actionmsg { - display: inline-block; - font-size: 188%; - line-height: 1.2; - padding-top: 1px; - margin: 0; -} -.wikibase-labelview .wb-actionmsg span { - font-size: 53%; } diff --git a/lib/resources/jquery.wikibase/toolbar/controller/definitions/edittoolbar/aliasesview.js b/lib/resources/jquery.wikibase/toolbar/controller/definitions/edittoolbar/aliasesview.js deleted file mode 100644 index ba920c4..0000000 --- a/lib/resources/jquery.wikibase/toolbar/controller/definitions/edittoolbar/aliasesview.js +++ /dev/null @@ -1,86 +0,0 @@ -( function( $ ) { - 'use strict'; - -/** - * @ignore - * - * @licence GNU GPL v2+ - * @author H. Snater < mediaw...@snater.com > - */ -$.wikibase.toolbarcontroller.definition( 'edittoolbar', { - id: 'aliasesview', - events: { - aliasesviewcreate: function( event, toolbarcontroller ) { - var $aliasesview = $( event.target ), - aliasesview = $aliasesview.data( 'aliasesview' ), - $container = $aliasesview.find( 'ul' ).next( 'span' ); - - if( !$container.length ) { - $container = $( '<span/>' ).insertAfter( $aliasesview.find( 'ul' ) ); - } - - $aliasesview.edittoolbar( { - $container: $container, - interactionWidget: aliasesview - } ); - - $aliasesview.on( 'keyup', function( event ) { - if( aliasesview.option( 'disabled' ) ) { - return; - } - if( event.keyCode === $.ui.keyCode.ESCAPE ) { - aliasesview.stopEditing( true ); - } else if( event.keyCode === $.ui.keyCode.ENTER ) { - aliasesview.stopEditing( false ); - } - } ); - - $aliasesview.one( 'edittoolbaredit', function() { - toolbarcontroller.registerEventHandler( - event.data.toolbar.type, - event.data.toolbar.id, - aliasesview.widgetEventPrefix + 'change', - function( event ) { - var $aliasesview = $( event.target ), - aliasesview = $aliasesview.data( 'aliasesview' ), - edittoolbar = $aliasesview.data( 'edittoolbar' ), - btnSave = edittoolbar.getButton( 'save' ), - enable = aliasesview.isValid() && !aliasesview.isInitialValue(); - - btnSave[enable ? 'enable' : 'disable'](); - } - ); - } ); - }, - aliasesviewdisable: function( event ) { - var $aliasesview = $( event.target ), - aliasesview = $aliasesview.data( 'aliasesview' ), - edittoolbar = $aliasesview.data( 'edittoolbar' ), - btnSave = edittoolbar.getButton( 'save' ), - enable = aliasesview.isValid() && !aliasesview.isInitialValue(), - currentAliases = aliasesview.value(); - - btnSave[enable ? 'enable' : 'disable'](); - - if( aliasesview.option( 'disabled' ) || currentAliases && currentAliases.length ) { - return; - } - - if( !currentAliases ) { - edittoolbar.disable(); - } - }, - edittoolbaredit: function( event, toolbarcontroller ) { - var $aliasesview = $( event.target ), - aliasesview = $aliasesview.data( 'aliasesview' ); - - if( !aliasesview ) { - return; - } - - aliasesview.focus(); - } - } -} ); - -}( jQuery ) ); diff --git a/lib/resources/jquery.wikibase/toolbar/controller/definitions/edittoolbar/descriptionview.js b/lib/resources/jquery.wikibase/toolbar/controller/definitions/edittoolbar/descriptionview.js deleted file mode 100644 index 3824915..0000000 --- a/lib/resources/jquery.wikibase/toolbar/controller/definitions/edittoolbar/descriptionview.js +++ /dev/null @@ -1,122 +0,0 @@ -( function( $ ) { - 'use strict'; - -/** - * @ignore - * - * @licence GNU GPL v2+ - * @author H. Snater < mediaw...@snater.com > - */ -$.wikibase.toolbarcontroller.definition( 'edittoolbar', { - id: 'descriptionview', - selector: '.wikibase-descriptionview:not(.wb-terms-description)', - events: { - descriptionviewcreate: function( event, toolbarcontroller ) { - var $descriptionview = $( event.target ), - descriptionview = $descriptionview.data( 'descriptionview' ), - $container = $descriptionview.find( '.wikibase-toolbar-container' ); - - if( !$container.length ) { - $container = $( '<span/>' ).appendTo( - $descriptionview.find( '.wikibase-descriptionview-container' ) - ); - } - - $descriptionview.edittoolbar( { - $container: $container, - interactionWidget: descriptionview - } ); - - $descriptionview.on( 'keyup', function( event ) { - if( descriptionview.option( 'disabled' ) ) { - return; - } - if( event.keyCode === $.ui.keyCode.ESCAPE ) { - descriptionview.stopEditing( true ); - } else if( event.keyCode === $.ui.keyCode.ENTER ) { - descriptionview.stopEditing( false ); - } - } ); - - if( descriptionview.value().getText() === '' ) { - descriptionview.toEditMode(); - $descriptionview.data( 'edittoolbar' ).toEditMode(); - $descriptionview.data( 'edittoolbar' ).disable(); - } - - $descriptionview - .off( 'descriptionviewafterstopediting.edittoolbar' ) - .on( 'descriptionviewafterstopediting.edittoolbar', function( event ) { - var edittoolbar = $( event.target ).data( 'edittoolbar' ); - if( descriptionview.value().getText() !== '' ) { - edittoolbar.toNonEditMode(); - edittoolbar.enable(); - edittoolbar.toggleActionMessage( function() { - edittoolbar.getButton( 'edit' ).focus(); - } ); - } else { - descriptionview.toEditMode(); - edittoolbar.toEditMode(); - edittoolbar.toggleActionMessage( function() { - descriptionview.focus(); - } ); - edittoolbar.disable(); - } - } ); - }, - 'descriptionviewchange descriptionviewafterstartediting descriptionviewafterstopediting': function( event ) { - var $descriptionview = $( event.target ), - descriptionview = $descriptionview.data( 'descriptionview' ), - edittoolbar = $descriptionview.data( 'edittoolbar' ), - btnSave = edittoolbar.getButton( 'save' ), - enableSave = descriptionview.isValid() && !descriptionview.isInitialValue(), - btnCancel = edittoolbar.getButton( 'cancel' ), - currentDescription = descriptionview.value().getText(), - disableCancel = currentDescription === '' && descriptionview.isInitialValue(); - - btnSave[enableSave ? 'enable' : 'disable'](); - btnCancel[disableCancel ? 'disable' : 'enable'](); - - if( event.type === 'descriptionviewchange' ) { - if( !descriptionview.isInitialValue() ) { - descriptionview.startEditing(); - } else if( - descriptionview.isInitialValue() - && descriptionview.value().getText() === '' - ) { - descriptionview.cancelEditing(); - } - } - }, - descriptionviewdisable: function( event ) { - var $descriptionview = $( event.target ), - descriptionview = $descriptionview.data( 'descriptionview' ), - edittoolbar = $descriptionview.data( 'edittoolbar' ), - btnSave = edittoolbar.getButton( 'save' ), - enable = descriptionview.isValid() && !descriptionview.isInitialValue(), - currentDescription = descriptionview.value().getText(); - - btnSave[enable ? 'enable' : 'disable'](); - - if( descriptionview.option( 'disabled' ) || currentDescription !== '' ) { - return; - } - - if( currentDescription === '' ) { - edittoolbar.disable(); - } - }, - edittoolbaredit: function( event, toolbarcontroller ) { - var $descriptionview = $( event.target ).closest( ':wikibase-edittoolbar' ), - descriptionview = $descriptionview.data( 'descriptionview' ); - - if( !descriptionview ) { - return; - } - - descriptionview.focus(); - } - } -} ); - -}( jQuery ) ); diff --git a/lib/resources/jquery.wikibase/toolbar/controller/definitions/edittoolbar/entitytermsview.js b/lib/resources/jquery.wikibase/toolbar/controller/definitions/edittoolbar/entitytermsview.js index 9661b53..bb59a69 100644 --- a/lib/resources/jquery.wikibase/toolbar/controller/definitions/edittoolbar/entitytermsview.js +++ b/lib/resources/jquery.wikibase/toolbar/controller/definitions/edittoolbar/entitytermsview.js @@ -1,4 +1,4 @@ -( function( $ ) { +( function( $, mw ) { 'use strict'; /** @@ -15,13 +15,10 @@ entitytermsviewcreate: function( event, toolbarcontroller ) { var $entitytermsview = $( event.target ), entitytermsview = $entitytermsview.data( 'entitytermsview' ), - $headingContainer = $entitytermsview.find( - '.wikibase-entitytermsview-heading-container' - ), - $container = $headingContainer.children( '.wikibase-toolbar-container' ); + $container = $entitytermsview.children( '.wikibase-toolbar-container' ); if( !$container.length ) { - $container = $( '<div/>' ).appendTo( $headingContainer ); + $container = $( '<div/>' ).appendTo( $container ); } $entitytermsview.edittoolbar( { @@ -49,6 +46,17 @@ btnSave[enable ? 'enable' : 'disable'](); }, + entitytermsviewafterstopediting: function( event ) { + var $entitytermsview = $( event.target ), + entitytermsview = $entitytermsview.data( 'entitytermsview' ); + + if( + entitytermsview.$entitytermsforlanguagelistviewContainer.is( ':visible' ) + && !mw.user.options.get( 'wikibase-entiytermsview-showEntitytermslistview' ) + ) { + entitytermsview.$entitytermsforlanguagelistviewContainer.slideUp( 'fast' ); + } + }, entitytermsviewdisable: function( event ) { var $entitytermsview = $( event.target ), entitytermsview = $entitytermsview.data( 'entitytermsview' ), @@ -58,12 +66,22 @@ btnSave[enable ? 'enable' : 'disable'](); }, - toolbareditgroupedit: function( event, toolbarcontroller ) { + edittoolbaredit: function( event, toolbarcontroller ) { var $entitytermsview = $( event.target ), entitytermsview = $entitytermsview.data( 'entitytermsview' ); if( !entitytermsview ) { return; + } + + if( !entitytermsview.$entitytermsforlanguagelistviewContainer.is( ':visible' ) ) { + entitytermsview.$entitytermsforlanguagelistviewContainer.slideDown( { + complete: function() { + entitytermsview.$entitytermsforlanguagelistview + .data( 'entitytermsforlanguagelistview' ).updateInputSize(); + }, + duration: 'fast' + } ); } entitytermsview.focus(); @@ -72,4 +90,4 @@ } ); -}( jQuery ) ); +}( jQuery, mediaWiki ) ); diff --git a/lib/resources/jquery.wikibase/toolbar/controller/definitions/edittoolbar/labelview.js b/lib/resources/jquery.wikibase/toolbar/controller/definitions/edittoolbar/labelview.js deleted file mode 100644 index f04ee1d..0000000 --- a/lib/resources/jquery.wikibase/toolbar/controller/definitions/edittoolbar/labelview.js +++ /dev/null @@ -1,122 +0,0 @@ -( function( $, mw ) { - 'use strict'; - -/** - * @ignore - * - * @licence GNU GPL v2+ - * @author H. Snater < mediaw...@snater.com > - */ -$.wikibase.toolbarcontroller.definition( 'edittoolbar', { - id: 'labelview', - selector: '.wikibase-labelview:not(.wb-terms-label)', - events: { - labelviewcreate: function( event, toolbarcontroller ) { - var $labelview = $( event.target ), - labelview = $labelview.data( 'labelview' ), - $container = $labelview.find( '.wikibase-toolbar-container' ); - - // TODO: Remove toolbar-wrapper that is firstHeading specific (required to reset font - // size) - if( !$container.length ) { - $container = $( '<span/>' ).appendTo( - mw.wbTemplate( 'wikibase-toolbar-wrapper', '' ) - .appendTo( $labelview.find( '.wikibase-labelview-container' ) ) - ); - } - - $labelview.edittoolbar( { - $container: $container, - interactionWidget: labelview - } ); - - $labelview.on( 'keyup', function( event ) { - if( labelview.option( 'disabled' ) ) { - return; - } - if( event.keyCode === $.ui.keyCode.ESCAPE ) { - labelview.stopEditing( true ); - } else if( event.keyCode === $.ui.keyCode.ENTER ) { - labelview.stopEditing( false ); - } - } ); - - if( labelview.value().getText() === '' ) { - labelview.toEditMode(); - $labelview.data( 'edittoolbar' ).toEditMode(); - $labelview.data( 'edittoolbar' ).disable(); - } - - $labelview - .off( 'labelviewafterstopediting.edittoolbar' ) - .on( 'labelviewafterstopediting.edittoolbar', function( event ) { - var edittoolbar = $( event.target ).data( 'edittoolbar' ); - if( labelview.value().getText() !== '' ) { - edittoolbar.toNonEditMode(); - edittoolbar.enable(); - edittoolbar.toggleActionMessage( function() { - edittoolbar.getButton( 'edit' ).focus(); - } ); - } else { - labelview.toEditMode(); - edittoolbar.toEditMode(); - edittoolbar.toggleActionMessage( function() { - labelview.focus(); - } ); - edittoolbar.disable(); - } - } ); - }, - 'labelviewchange labelviewafterstartediting labelviewafterstopediting': function( event ) { - var $labelview = $( event.target ), - labelview = $labelview.data( 'labelview' ), - edittoolbar = $labelview.data( 'edittoolbar' ), - btnSave = edittoolbar.getButton( 'save' ), - enableSave = labelview.isValid() && !labelview.isInitialValue(), - btnCancel = edittoolbar.getButton( 'cancel' ), - currentLabel = labelview.value().getText(), - disableCancel = currentLabel === '' && labelview.isInitialValue(); - - btnSave[enableSave ? 'enable' : 'disable'](); - btnCancel[disableCancel ? 'disable' : 'enable'](); - - if( event.type === 'labelviewchange' ) { - if( !labelview.isInitialValue() ) { - labelview.startEditing(); - } else if( labelview.isInitialValue() && labelview.value().getText() === '' ) { - labelview.cancelEditing(); - } - } - }, - labelviewdisable: function( event ) { - var $labelview = $( event.target ), - labelview = $labelview.data( 'labelview' ), - edittoolbar = $labelview.data( 'edittoolbar' ), - btnSave = edittoolbar.getButton( 'save' ), - enable = labelview.isValid() && !labelview.isInitialValue(), - currentLabel = labelview.value().getText(); - - btnSave[enable ? 'enable' : 'disable'](); - - if( labelview.option( 'disabled' ) || currentLabel !== '' ) { - return; - } - - if( currentLabel === '' ) { - edittoolbar.disable(); - } - }, - edittoolbaredit: function( event, toolbarcontroller ) { - var $labelview = $( event.target ), - labelview = $labelview.data( 'labelview' ); - - if( !labelview ) { - return; - } - - labelview.focus(); - } - } -} ); - -}( jQuery, mediaWiki ) ); diff --git a/lib/resources/jquery.wikibase/toolbar/controller/resources.php b/lib/resources/jquery.wikibase/toolbar/controller/resources.php index 65e7da9..02071f4 100644 --- a/lib/resources/jquery.wikibase/toolbar/controller/resources.php +++ b/lib/resources/jquery.wikibase/toolbar/controller/resources.php @@ -79,28 +79,6 @@ ), - 'jquery.wikibase.toolbarcontroller.definitions.edittoolbar.aliasesview' => $moduleTemplate + array( - 'scripts' => array( - 'definitions/edittoolbar/aliasesview.js', - ), - 'dependencies' => array( - 'jquery.wikibase.aliasesview', - 'jquery.wikibase.edittoolbar', - 'jquery.wikibase.toolbarcontroller', - ), - ), - - 'jquery.wikibase.toolbarcontroller.definitions.edittoolbar.descriptionview' => $moduleTemplate + array( - 'scripts' => array( - 'definitions/edittoolbar/descriptionview.js', - ), - 'dependencies' => array( - 'jquery.wikibase.descriptionview', - 'jquery.wikibase.edittoolbar', - 'jquery.wikibase.toolbarcontroller', - ), - ), - 'jquery.wikibase.toolbarcontroller.definitions.edittoolbar.entitytermsview' => $moduleTemplate + array( 'scripts' => array( 'definitions/edittoolbar/entitytermsview.js', @@ -109,18 +87,7 @@ 'jquery.wikibase.entitytermsview', 'jquery.wikibase.edittoolbar', 'jquery.wikibase.toolbarcontroller', - ), - ), - - 'jquery.wikibase.toolbarcontroller.definitions.edittoolbar.labelview' => $moduleTemplate + array( - 'scripts' => array( - 'definitions/edittoolbar/labelview.js', - ), - 'dependencies' => array( - 'jquery.wikibase.edittoolbar', - 'jquery.wikibase.labelview', - 'jquery.wikibase.toolbarcontroller', - 'wikibase.templates', + 'mediawiki.user', ), ), diff --git a/lib/resources/wikibase.css b/lib/resources/wikibase.css index ed1d39e..8abc1ca 100644 --- a/lib/resources/wikibase.css +++ b/lib/resources/wikibase.css @@ -85,7 +85,6 @@ .wikibase-entityview input { /* prevent browsers from applying their default styles */ - padding: 0 2px; border: 1px solid #AAA; border-radius: 0; box-sizing: border-box; @@ -148,51 +147,7 @@ font-style: italic; } -.wikibase-entityview .wikibase-movetoolbar-container { - right: 10px; - width: auto; -} - -ul.tagadata { - padding: 0; -} - -li.tagadata-choice-modified .tagadata-label-text { - /* highlight new tags since initialization */ - text-decoration: underline; -} - /********** /BASIC LAYOUT **********/ - - -/********** TERMS **********/ - -h2.wb-terms-heading { - float: left; - width: 100%; - margin-top: 0.6em; - margin-bottom: 0.2em; - padding-left: 10px; - border-bottom: none; -} - -table.wb-terms { - border-spacing: 0; - width: 100%; - border-bottom: 1px solid #C9C9C9; - clear: both; - border-right: 1px solid #C9C9C9; -} - -.wb-terms tr td { - background: #F8F8F8; -} - -.wb-terms tbody:nth-child(even) td { - background: #F0F0F0; -} - -/********** /TERMS **********/ /********** CLAIMS **********/ diff --git a/repo/Wikibase.hooks.php b/repo/Wikibase.hooks.php index 1e18ad0..fe0ccf3 100644 --- a/repo/Wikibase.hooks.php +++ b/repo/Wikibase.hooks.php @@ -426,6 +426,19 @@ 'type' => 'api' ); + if( class_exists( 'Babel' ) ) { + $preferences['wikibase-entiytermsview-showEntitytermslistview'] = array( + 'type' => 'toggle', + 'label-message' => 'wikibase-setting-entitytermsview-showEntitytermslistview', + 'help-message' => 'wikibase-setting-entitytermsview-showEntitytermslistview-help', + 'section' => 'rendering/advancedrendering', + ); + } else if( $user->getBoolOption( 'wikibase-entiytermsview-showEntitytermslistview' ) ) { + // Clear setting after uninstalling Babel extension. + unset( $user->mOptions['wikibase-entiytermsview-showEntitytermslistview'] ); + $user->saveSettings(); + } + wfProfileOut( __METHOD__ ); return true; } diff --git a/repo/i18n/en.json b/repo/i18n/en.json index 290455d..d5ae5ab 100644 --- a/repo/i18n/en.json +++ b/repo/i18n/en.json @@ -25,6 +25,12 @@ "wikibase-addreference": "add reference", "wikibase-save-inprogress": "Saving…", "wikibase-remove-inprogress": "Removing…", + "wikibase-setting-entitytermsview-showEntitytermslistview": "Show labels, aliases and descriptions in all my languages on page load", + "wikibase-setting-entitytermsview-showEntitytermslistview-help": "Personal languages additional to the user interface language may be set using the [[mw:Extension:Babel|Babel extension]] syntax on the user page.", + "wikibase-entitytermsforlanguagelistview-aliases": "Also known as", + "wikibase-entitytermsforlanguagelistview-description": "Description", + "wikibase-entitytermsforlanguagelistview-label": "Label", + "wikibase-entitytermsforlanguagelistview-language": "Language", "wikibase-label-empty": "No label defined yet", "wikibase-label-edit-placeholder": "enter a label", "wikibase-label-edit-placeholder-language-aware": "enter a label in $1", diff --git a/repo/i18n/qqq.json b/repo/i18n/qqq.json index d7a572e..188e7fb 100644 --- a/repo/i18n/qqq.json +++ b/repo/i18n/qqq.json @@ -51,6 +51,12 @@ "wikibase-addreference": "Label of the link to add a reference (see [[d:Wikidata:Glossary]]) to a statement.", "wikibase-save-inprogress": "[[File:Screenshot WikidataRepo 2012-05-25 L.png|right|350px]]\n[[File:Screenshot WikidataRepo 2012-05-25 J.png|right|350px]]\n[[File:Screenshot WikidataRepo 2012-05-25 K.png|right|350px]]\nThis is a generic placeholder message used while a save is in progress, and replaces the save and cancel links.\n{{Identical|Saving}}", "wikibase-remove-inprogress": "[[File:Screenshot WikidataRepo 2012-05-25 L.png|right|350px]]\n[[File:Screenshot WikidataRepo 2012-05-25 M.png|right|350px]]\nThis is a generic placeholder message used while a remove is in progress, and replaces the edit and remove.", + "wikibase-setting-entitytermsview-showEntitytermslistview": "Label for the user setting that allows showing labels, aliases and descriptions in all of the user's languages on page load. The settings is available only if the [[mw:Extension:Babel|Babel extension]] is installed.", + "wikibase-setting-entitytermsview-showEntitytermslistview-help": "Help message for the user setting that allows showing labels, aliases and descriptions in all of the user's languages on page load. The settings is available only if the [[mw:Extension:Babel|Babel extension]] is installed. Hence, the help message may contain advice on how to activate languages additional to the user interface language.", + "wikibase-entitytermsforlanguagelistview-aliases": "List of labels, aliases and descriptions in one or more languages: Heading of the \"aliases\" column. (see [[d:Wikidata:Glossary]])", + "wikibase-entitytermsforlanguagelistview-description": "List of labels, aliases and descriptions in one or more languages: Heading of the \"description\" column. (see [[d:Wikidata:Glossary]])", + "wikibase-entitytermsforlanguagelistview-label": "List of labels, aliases and descriptions in one or more languages: Heading of the \"label\" column. (see [[d:Wikidata:Glossary]])", + "wikibase-entitytermsforlanguagelistview-language": "List of labels, aliases and descriptions in one or more languages: Heading of the \"language\" column. (see [[d:Wikidata:Glossary]])", "wikibase-label-empty": "Placeholder message displayed instead of the item's label in case no label has been specified yet. This message is displayed only when the user has JavaScript disabled. (When JavaScript is enabled, an input box will be displayed instead.)", "wikibase-label-edit-placeholder": "[[File:Screenshot WikidataRepo 2012-05-13 G.png|right|0x150px]]\nThis is a generic text used as a placeholder while editing a new label. See also Wikidatas glossary on [[d:Wikidata:Glossary#languageattribute-label|label]].", "wikibase-label-edit-placeholder-language-aware": "Like {{msg-mw|Wikibase-label-edit-placeholder}}, but language aware. $1 is the autonym of the language.", diff --git a/repo/includes/View/EntityView.php b/repo/includes/View/EntityView.php index 6d8b1cb..4c16959 100644 --- a/repo/includes/View/EntityView.php +++ b/repo/includes/View/EntityView.php @@ -159,9 +159,11 @@ $entity = $entityRevision->getEntity(); - $html = $this->getHtmlForFingerprint( $entity ); + $html = $this->getHtmlForFingerprint( + $entity, + $this->getHtmlForTermBox( $entityRevision ) + ); $html .= $this->getHtmlForToc(); - $html .= $this->getHtmlForTermBox( $entityRevision ); wfProfileOut( __METHOD__ ); return $html; @@ -182,11 +184,18 @@ * Builds and returns the HTML for the entity's fingerprint. * * @param Entity $entity + * @param string $termBoxHtml * * @return string */ - private function getHtmlForFingerprint( Entity $entity ) { - return $this->fingerprintView->getHtml( $entity->getFingerprint(), $entity->getId(), $this->editable ); + private function getHtmlForFingerprint( Entity $entity, $termBoxHtml ) { + return $this->fingerprintView->getHtml( + $entity->getFingerprint(), + $entity->getId(), + $termBoxHtml, + $this->textInjector, + $this->editable + ); } /** @@ -197,18 +206,14 @@ private function getHtmlForToc() { $tocSections = $this->getTocSections(); - if ( count( $tocSections ) < 2 ) { - // Including the marker for the termbox toc entry, there is fewer - // 3 sections. MediaWiki core doesn't show a TOC unless there are - // at least 3 sections, so we shouldn't either. + if ( count( $tocSections ) < 3 ) { + // MediaWiki core doesn't show a TOC unless there are at least 3 sections, so we + //shouldn't either. return ''; } - // Placeholder for the TOC entry for the term box (which may or may not be used for a given user). - // EntityViewPlaceholderExpander must know about the 'termbox-toc' name. - $tocContent = $this->textInjector->newMarker( 'termbox-toc' ); - - $i = 1; + $tocContent = ''; + $i = 0; foreach ( $tocSections as $id => $message ) { $tocContent .= $this->templateFactory->render( 'wb-entity-toc-section', diff --git a/repo/includes/View/EntityViewPlaceholderExpander.php b/repo/includes/View/EntityViewPlaceholderExpander.php index a087942..b22c98b 100644 --- a/repo/includes/View/EntityViewPlaceholderExpander.php +++ b/repo/includes/View/EntityViewPlaceholderExpander.php @@ -191,35 +191,14 @@ $entityId, isset( $args[1] ) ? intval( $args[1] ) : 0 ); - - case 'termbox-toc': - return $this->renderTermBoxTocEntry(); + case 'entityViewPlaceholder-entitytermsview-entitytermsforlanguagelistview-class': + return $this->user->getOption( 'wikibase-entiytermsview-showEntitytermslistview' ) + ? '' : 'wikibase-entitytermsview-entitytermsforlanguagelistview-collapsed'; default: wfWarn( "Unknown placeholder: $name" ); return '(((' . htmlspecialchars( $name ) . ')))'; } - } - - /** - * Generates HTML to be injected into the TOC as a link to the term box. - * - * @return string HTML - */ - public function renderTermBoxTocEntry() { - $languages = $this->getExtraUserLanguages(); - - if ( !$languages ) { - return ''; - } - - $html = $this->templateFactory->render( 'wb-entity-toc-section', - 0, // section number, not really used, it seems - 'wb-terms', - wfMessage( 'wikibase-terms' )->inLanguage( $this->uiLanguage )->text() - ); - - return $html; } /** @@ -232,11 +211,10 @@ * @return string HTML */ public function renderTermBox( EntityId $entityId, $revisionId ) { - $languages = $this->getExtraUserLanguages(); - - if ( !$languages ) { - return ''; - } + $languages = array_merge( + array( $this->uiLanguage->getCode() ), + $this->getExtraUserLanguages() + ); try { // we may want to cache this... @@ -251,8 +229,17 @@ return ''; } - $termBoxView = new TermBoxView( $this->templateFactory, $this->uiLanguage ); - $html = $termBoxView->renderTermBox( $this->targetPage, $entity->getFingerprint(), $languages ); + $fingerprintView = new FingerprintView( + $this->templateFactory, + null, + $this->uiLanguage->getCode() + ); + $html = $fingerprintView->getEntityTermsForLanguageListView( + $entity->getFingerprint(), + $languages, + $this->targetPage, + $this->user->getOption( 'wikibase-entiytermsview-showEntitytermslistview' ) + ); return $html; } diff --git a/repo/includes/View/FingerprintView.php b/repo/includes/View/FingerprintView.php index 2de3a84..8902e01 100644 --- a/repo/includes/View/FingerprintView.php +++ b/repo/includes/View/FingerprintView.php @@ -2,11 +2,14 @@ namespace Wikibase\Repo\View; +use Message; +use Title; use Wikibase\DataModel\Entity\EntityId; use Wikibase\DataModel\Term\AliasGroupList; use Wikibase\DataModel\Term\Fingerprint; use Wikibase\DataModel\Term\TermList; use Wikibase\Template\TemplateFactory; +use Wikibase\Utils; /** * Generates HTML to display the fingerprint of an entity @@ -17,6 +20,7 @@ * * @author Thiemo Mättig * @author Bene* < benestar.wikime...@gmail.com > + * @author H. Snater < mediaw...@snater.com > */ class FingerprintView { @@ -26,7 +30,7 @@ private $templateFactory; /** - * @var SectionEditLinkGenerator + * @var SectionEditLinkGenerator|null */ private $sectionEditLinkGenerator; @@ -37,12 +41,12 @@ /** * @param TemplateFactory $templateFactory - * @param SectionEditLinkGenerator $sectionEditLinkGenerator + * @param SectionEditLinkGenerator|null $sectionEditLinkGenerator * @param string $languageCode */ public function __construct( TemplateFactory $templateFactory, - SectionEditLinkGenerator $sectionEditLinkGenerator, + SectionEditLinkGenerator $sectionEditLinkGenerator = null, $languageCode ) { $this->sectionEditLinkGenerator = $sectionEditLinkGenerator; @@ -53,108 +57,203 @@ /** * @param Fingerprint $fingerprint the fingerprint to render * @param EntityId|null $entityId the id of the fingerprint's entity + * @param string $termBoxHtml + * @param TextInjector $textInjector * @param bool $editable whether editing is allowed (enabled edit links) * * @return string */ - public function getHtml( Fingerprint $fingerprint, EntityId $entityId = null, $editable = true ) { + public function getHtml( + Fingerprint $fingerprint, + EntityId $entityId = null, + $termBoxHtml, + TextInjector $textInjector, + $editable = true + ) { $labels = $fingerprint->getLabels(); $descriptions = $fingerprint->getDescriptions(); $aliasGroups = $fingerprint->getAliasGroups(); - $html = ''; - - $html .= $this->getHtmlForLabel( $labels, $entityId, $editable ); - $html .= $this->getHtmlForDescription( $descriptions, $entityId, $editable ); - $html .= $this->templateFactory->render( 'wb-entity-header-separator' ); - $html .= $this->getHtmlForAliases( $aliasGroups, $entityId, $editable ); - - return $html; + return $this->templateFactory->render( 'wikibase-entitytermsview', + $labels->hasTermForLanguage( $this->languageCode ) ? '' : 'wb-empty', + $this->getHtmlForLabel( $labels, $entityId ), + $aliasGroups->hasGroupForLanguage( $this->languageCode ) ? '' : 'wb-empty', + $this->getHtmlForAliases( $aliasGroups ), + $descriptions->hasTermForLanguage( $this->languageCode ) ? '' : 'wb-empty', + $this->getDescriptionText( $descriptions ), + $termBoxHtml, + $textInjector->newMarker( + 'entityViewPlaceholder-entitytermsview-entitytermsforlanguagelistview-class' + ), + $this->getHtmlForEditSection( 'SetLabel', $entityId, $editable ) + ); } /** * @param TermList $labels the list of labels to render * @param EntityId|null $entityId the id of the fingerprint's entity - * @param bool $editable whether editing is allowed (enabled edit links) * * @return string */ - private function getHtmlForLabel( TermList $labels, EntityId $entityId = null, $editable ) { - $hasLabel = $labels->hasTermForLanguage( $this->languageCode ); + private function getHtmlForLabel( TermList $labels, EntityId $entityId = null ) { $id = 'new'; $idInParentheses = ''; - $editSection = $this->templateFactory->render( 'wikibase-toolbar-wrapper', - $this->getHtmlForEditSection( 'SetLabel', $entityId, $editable ) - ); - if ( $entityId !== null ) { + if( !is_null( $entityId ) ) { $id = $entityId->getSerialization(); $idInParentheses = wfMessage( 'parentheses', $id )->text(); } - if ( $hasLabel ) { - return $this->templateFactory->render( 'wikibase-firstHeading', - $id, - $this->templateFactory->render( 'wikibase-labelview', - '', - htmlspecialchars( $labels->getByLanguage( $this->languageCode )->getText() ), - $idInParentheses, - $editSection - ) - ); - } else { - return $this->templateFactory->render( 'wikibase-firstHeading', - $id, - $this->templateFactory->render( 'wikibase-labelview', - 'wb-empty', - wfMessage( 'wikibase-label-empty' )->escaped(), - $idInParentheses, - $editSection - ) - ); - } + return $this->templateFactory->render( 'wikibase-entitytermsview-heading-label', + $labels->hasTermForLanguage( $this->languageCode ) + ? htmlspecialchars( $labels->getByLanguage( $this->languageCode )->getText() ) + : wfMessage( 'wikibase-label-empty' )->escaped(), + $idInParentheses + ); } /** * @param TermList $descriptions the list of descriptions to render - * @param EntityId|null $entityId the id of the fingerprint's entity - * @param bool $editable whether editing is allowed (enabled edit links) * * @return string */ - private function getHtmlForDescription( TermList $descriptions, EntityId $entityId = null, $editable ) { - $hasDescription = $descriptions->hasTermForLanguage( $this->languageCode ); - $editSection = $this->getHtmlForEditSection( 'SetDescription', $entityId, $editable ); - - if ( $hasDescription ) { - return $this->templateFactory->render( 'wikibase-descriptionview', - '', - htmlspecialchars( $descriptions->getByLanguage( $this->languageCode )->getText() ), - $editSection - ); + private function getDescriptionText( TermList $descriptions ) { + if ( $descriptions->hasTermForLanguage( $this->languageCode ) ) { + $text = $descriptions->getByLanguage( $this->languageCode )->getText(); + return htmlspecialchars( $text ); } else { - return $this->templateFactory->render( 'wikibase-descriptionview', - 'wb-empty', - wfMessage( 'wikibase-description-empty' )->escaped(), - $editSection - ); + return wfMessage( 'wikibase-description-empty' )->escaped(); } } /** * @param AliasGroupList $aliasGroups the list of alias groups to render - * @param EntityId|null $entityId the id of the fingerprint's entity - * @param bool $editable whether editing is allowed (enabled edit links) * * @return string */ - private function getHtmlForAliases( AliasGroupList $aliasGroups, EntityId $entityId = null, $editable ) { - $hasAliases = $aliasGroups->hasGroupForLanguage( $this->languageCode ); - $editSection = $this->getHtmlForEditSection( 'SetAliases', $entityId, $editable, 'edit' ); - - if ( $hasAliases ) { + private function getHtmlForAliases( AliasGroupList $aliasGroups ) { + if ( $aliasGroups->hasGroupForLanguage( $this->languageCode ) ) { $aliasesHtml = ''; $aliases = $aliasGroups->getByLanguage( $this->languageCode )->getAliases(); + foreach ( $aliases as $alias ) { + $aliasesHtml .= $this->templateFactory->render( + 'wikibase-entitytermsview-aliases-alias', + htmlspecialchars( $alias ) + ); + } + + return $this->templateFactory->render( 'wikibase-entitytermsview-aliases', $aliasesHtml ); + } else { + return $this->templateFactory->render( 'wikibase-entitytermsview-aliases', + wfMessage( 'wikibase-aliases-empty' )->escaped() + ); + } + } + + /** + * @param Fingerprint $fingerprint + * @param string[] $languageCodes + * @param Title|null $title + * @param boolean $showEntitytermslistview + * + * @return string + */ + public function getEntityTermsForLanguageListView( + Fingerprint $fingerprint, + $languageCodes, + Title $title = null, + $showEntitytermslistview = false + ) { + wfProfileIn( __METHOD__ ); + + $entityTermsForLanguageViewsHtml = ''; + + foreach( $languageCodes as $languageCode ) { + $entityTermsForLanguageViewsHtml .= $this->getEntityTermsForLanguageView( + $fingerprint, + $languageCode, + $title + ); + } + + $html = $this->templateFactory->render( 'wikibase-entitytermsforlanguagelistview', + $this->msg( 'wikibase-entitytermsforlanguagelistview-language' ), + $this->msg( 'wikibase-entitytermsforlanguagelistview-label' ), + $this->msg( 'wikibase-entitytermsforlanguagelistview-aliases' ), + $this->msg( 'wikibase-entitytermsforlanguagelistview-description' ), + $entityTermsForLanguageViewsHtml + ); + + wfProfileOut( __METHOD__ ); + return $html; + } + + /** + * @param Fingerprint $fingerprint + * @param string $languageCode + * @param Title|null $title + * + * @return string + */ + private function getEntityTermsForLanguageView( + Fingerprint $fingerprint, + $languageCode, + Title $title = null + ) { + $labels = $fingerprint->getLabels(); + $descriptions = $fingerprint->getDescriptions(); + $aliasGroups = $fingerprint->getAliasGroups(); + + $hasLabel = $labels->hasTermForLanguage( $languageCode ); + $hasDescription = $descriptions->hasTermForLanguage( $languageCode ); + + return $this->templateFactory->render( 'wikibase-entitytermsforlanguageview', + $languageCode, + $this->templateFactory->render( 'wikibase-entitytermsforlanguageview-language', + is_null( $title ) + ? '#' + : $title->getLocalURL( array( 'setlang' => $languageCode ) ), + htmlspecialchars( Utils::fetchLanguageName( $languageCode ) ) + ), + $this->templateFactory->render( 'wikibase-labelview', + $hasLabel ? '' : 'wb-empty', + htmlspecialchars( $hasLabel + ? $labels->getByLanguage( $languageCode )->getText() + : $this->msg( 'wikibase-label-empty' )->text() + ), + '', + '' + ), + $this->getAliasesView( $aliasGroups, $languageCode ), + $this->templateFactory->render( 'wikibase-descriptionview', + $hasDescription ? '' : 'wb-empty', + htmlspecialchars( $hasDescription + ? $descriptions->getByLanguage( $languageCode )->getText() + : $this->msg( 'wikibase-description-empty' )->text() + ), + '', + '' + ), + '' + ); + } + + /** + * @param AliasGroupList $aliasGroups + * @param string $languageCode + * + * @return string + */ + private function getAliasesView( AliasGroupList $aliasGroups, $languageCode ) { + if ( !$aliasGroups->hasGroupForLanguage( $languageCode ) ) { + return $this->templateFactory->render( 'wikibase-aliasesview', + 'wb-empty', + '', + '' + ); + } else { + $aliasesHtml = ''; + $aliases = $aliasGroups->getByLanguage( $languageCode )->getAliases(); foreach ( $aliases as $alias ) { $aliasesHtml .= $this->templateFactory->render( 'wikibase-aliasesview-list-item', @@ -164,16 +263,8 @@ return $this->templateFactory->render( 'wikibase-aliasesview', '', - wfMessage( 'wikibase-aliases-label' )->escaped(), $aliasesHtml, - $editSection - ); - } else { - return $this->templateFactory->render( 'wikibase-aliasesview', - 'wb-empty', - wfMessage( 'wikibase-aliases-empty' )->escaped(), - '', - $editSection + '' ); } } @@ -186,8 +277,13 @@ * * @return string */ - private function getHtmlForEditSection( $specialPageName, EntityId $entityId = null, $editable, $action = 'edit' ) { - if ( $entityId === null || !$editable ) { + private function getHtmlForEditSection( + $specialPageName, + EntityId $entityId = null, + $editable, + $action = 'edit' + ) { + if ( $entityId === null || !$editable || is_null( $this->sectionEditLinkGenerator ) ) { return ''; } @@ -199,4 +295,12 @@ ); } + /** + * @param $key + * + * @return Message + */ + private function msg( $key ) { + return wfMessage( $key )->inLanguage( $this->languageCode ); + } } diff --git a/repo/includes/View/TermBoxView.php b/repo/includes/View/TermBoxView.php deleted file mode 100644 index c270714..0000000 --- a/repo/includes/View/TermBoxView.php +++ /dev/null @@ -1,158 +0,0 @@ -<?php - -namespace Wikibase\Repo\View; - -use Language; -use Message; -use Title; -use Wikibase\DataModel\Term\AliasGroupList; -use Wikibase\DataModel\Term\Fingerprint; -use Wikibase\Template\TemplateFactory; -use Wikibase\Utils; - -/** - * Generates HTML for displaying the term box, that is, the box - * of labels and descriptions for additional languages a user understands. - * - * @since 0.5 - * @licence GNU GPL v2+ - * - * @author Daniel Kinzler - * @author Denny Vrandecic - */ -class TermBoxView { - - /** - * @var TemplateFactory - */ - private $templateFactory; - - /** - * @var SectionEditLinkGenerator - */ - private $sectionEditLinkGenerator; - - /** - * @var Language - */ - private $language; - - public function __construct( TemplateFactory $templateFactory, Language $language ) { - $this->language = $language; - $this->templateFactory = $templateFactory; - $this->sectionEditLinkGenerator = new SectionEditLinkGenerator( $templateFactory ); - } - - /** - * @param $key - * - * @return Message - */ - private function msg( $key ) { - return wfMessage( $key )->inLanguage( $this->language ); - } - - /** - * Builds and returns the HTML representing a WikibaseEntity's collection of terms. - * - * @since 0.4 - * - * @param Title $title The title of the page the term box is to be shown on - * @param Fingerprint $fingerprint the Fingerprint to render - * @param string[] $languageCodes list of language codes to show terms for - * @param bool $editable whether editing is allowed (enabled edit links) - * - * @return string - */ - public function renderTermBox( Title $title, Fingerprint $fingerprint, array $languageCodes, $editable = true ) { - if ( empty( $languageCodes ) ) { - return ''; - } - - wfProfileIn( __METHOD__ ); - - $labels = $fingerprint->getLabels(); - $descriptions = $fingerprint->getDescriptions(); - $aliasGroups = $fingerprint->getAliasGroups(); - - $tbody = ''; - - foreach ( $languageCodes as $languageCode ) { - $hasLabel = $labels->hasTermForLanguage( $languageCode ); - $hasDescription = $descriptions->hasTermForLanguage( $languageCode ); - - $tbody .= $this->templateFactory->render( 'wikibase-entitytermsforlanguageview', - $languageCode, - $title->getLocalURL( array( 'setlang' => $languageCode ) ), - htmlspecialchars( Utils::fetchLanguageName( $languageCode ) ), - $this->templateFactory->render( 'wikibase-labelview', - $hasLabel ? '' : 'wb-empty', - htmlspecialchars( $hasLabel - ? $labels->getByLanguage( $languageCode )->getText() - : $this->msg( 'wikibase-label-empty' )->text() - ), - '', - '' - ), - $this->templateFactory->render( 'wikibase-descriptionview', - $hasDescription ? '' : 'wb-empty', - htmlspecialchars( $hasDescription - ? $descriptions->getByLanguage( $languageCode )->getText() - : $this->msg( 'wikibase-description-empty' )->text() - ), - '', - '' - ), - $this->getHtmlForAliases( $aliasGroups, $languageCode ) - ); - } - - $html = $this->templateFactory->render( 'wikibase-entitytermsview', - $this->msg( 'wikibase-terms' )->text(), - $this->templateFactory->render( 'wikibase-entitytermsforlanguagelistview', $tbody ), - $this->sectionEditLinkGenerator->getHtmlForEditSection( - 'SpecialPages', - array(), - 'edit', - $this->msg( 'wikibase-edit' ), - $editable - ) - ); - - wfProfileOut( __METHOD__ ); - return $html; - } - - /** - * @param AliasGroupList $aliasGroups - * @param string $languageCode - * - * @return string - */ - private function getHtmlForAliases( AliasGroupList $aliasGroups, $languageCode ) { - if ( !$aliasGroups->hasGroupForLanguage( $languageCode ) ) { - return $this->templateFactory->render( 'wikibase-aliasesview', - 'wb-empty', - wfMessage( 'wikibase-aliases-empty' )->escaped(), - '', - '' - ); - } else { - $aliasesHtml = ''; - $aliases = $aliasGroups->getByLanguage( $languageCode )->getAliases(); - foreach ( $aliases as $alias ) { - $aliasesHtml .= $this->templateFactory->render( - 'wikibase-aliasesview-list-item', - htmlspecialchars( $alias ) - ); - } - - return $this->templateFactory->render( 'wikibase-aliasesview', - '', - wfMessage( 'wikibase-aliases-label' )->escaped(), - $aliasesHtml, - '' - ); - } - } -} diff --git a/repo/resources/Resources.php b/repo/resources/Resources.php index 6464cbd..3f8bfc4 100644 --- a/repo/resources/Resources.php +++ b/repo/resources/Resources.php @@ -156,10 +156,7 @@ 'jquery.wikibase.toolbarcontroller.definitions.addtoolbar.referenceview-snakview', 'jquery.wikibase.toolbarcontroller.definitions.addtoolbar.statementview-referenceview', 'jquery.wikibase.toolbarcontroller.definitions.addtoolbar.statementview-snakview', - 'jquery.wikibase.toolbarcontroller.definitions.edittoolbar.aliasesview', - 'jquery.wikibase.toolbarcontroller.definitions.edittoolbar.descriptionview', 'jquery.wikibase.toolbarcontroller.definitions.edittoolbar.entitytermsview', - 'jquery.wikibase.toolbarcontroller.definitions.edittoolbar.labelview', 'jquery.wikibase.toolbarcontroller.definitions.edittoolbar.referenceview', 'jquery.wikibase.toolbarcontroller.definitions.edittoolbar.sitelinkgroupview', 'jquery.wikibase.toolbarcontroller.definitions.edittoolbar.statementview', diff --git a/repo/resources/templates.php b/repo/resources/templates.php index a47b1a1..d84b7a1 100644 --- a/repo/resources/templates.php +++ b/repo/resources/templates.php @@ -142,18 +142,6 @@ </div> HTML; - $templates['wikibase-firstHeading'] = -// add an h1 for displaying the entity's label; the actual firstHeading is being hidden by -// css since the original MediaWiki DOM does not represent a Wikidata entity's structure -// where the combination of label and description is the unique "title" of an entity which -// should not be semantically disconnected by having elements in between, like siteSub, -// contentSub and jump-to-nav -<<<HTML -<h1 id="wb-firstHeading-$1" class="wb-firstHeading"> - <!-- wikibase-labelview -->$2 -</h1> -HTML; - $templates['wikibase-labelview'] = <<<HTML <div class="wikibase-labelview $1" dir="auto"> @@ -178,11 +166,8 @@ $templates['wikibase-aliasesview'] = <<<HTML <div class="wikibase-aliasesview $1"> - <div class="wikibase-aliasesview-container"> - <span class="wikibase-aliasesview-label">$2</span> - <ul class="wikibase-aliasesview-list">$3</ul> - <!-- wb-toolbar -->$4 - </div> + <ul class="wikibase-aliasesview-list">$2</ul> + <!-- wikibase-toolbar -->$3 </div> HTML; @@ -194,39 +179,60 @@ $templates['wikibase-entitytermsview'] = <<<HTML <div class="wikibase-entitytermsview"> - <div class="wikibase-entitytermsview-heading-container"> - <h2 id="wb-terms" class="wb-section-heading wikibase-entitytermsview-heading">$1</h2> - <!-- wikibase-toolbar -->$3 + <div class="wikibase-entitytermsview-heading"> + <h1 class="wikibase-entitytermsview-heading-label $1"><!-- wikibase-entitytermsview-label -->$2</h1> + <div class="wikibase-entitytermsview-heading-aliases $3"><!-- wikibase-entitytermsview-aliases -->$4</div> + <div class="wikibase-entitytermsview-heading-description $5">$6</div> </div> - <!-- wikibase-entitytermsforlanguagelistview -->$2 + <!-- ? wikibase-toolbar -->$9 + <div class="wikibase-entitytermsview-entitytermsforlanguagelistview $8"><!-- wikibase-entitytermsforlanguagelistview -->$7</div> </div> +HTML; + + $templates['wikibase-entitytermsview-heading-label'] = +<<<HTML +$1<span class="wikibase-entitytermsview-heading-label-id">$2</span> +HTML; + + $templates['wikibase-entitytermsview-aliases'] = +<<<HTML +<ul class="wikibase-entitytermsview-aliases"><!-- wikibase-entitytermsview-aliases-alias -->$1</ul> +HTML; + + $templates['wikibase-entitytermsview-aliases-alias'] = +<<<HTML +<li class="wikibase-entitytermsview-aliases-alias">$1</li> HTML; $templates['wikibase-entitytermsforlanguagelistview'] = <<<HTML -<table class="wikibase-entitytermsforlanguagelistview"> - <colgroup> - <col class="wikibase-entitytermsforlanguagelistview-language" /> - <col class="wikibase-entitytermsforlanguagelistview-label wikibase-entitytermsforlanguagelistview-description wikibase-entitytermsforlanguagelistview-aliases" /> - </colgroup> - <!-- [0,*] wikibase-entitytermsforlanguageview -->$1 -</table> +<div class="wikibase-entitytermsforlanguagelistview"> + <div class="wikibase-entitytermsforlanguagelistview-header"> + <div class="wikibase-entitytermsforlanguagelistview-header-row"> + <div class="wikibase-entitytermsforlanguagelistview-cell wikibase-entitytermsforlanguagelistview-language">$1</div> + <div class="wikibase-entitytermsforlanguagelistview-cell wikibase-entitytermsforlanguagelistview-label">$2</div> + <div class="wikibase-entitytermsforlanguagelistview-cell wikibase-entitytermsforlanguagelistview-aliases">$3</div> + <div class="wikibase-entitytermsforlanguagelistview-cell wikibase-entitytermsforlanguagelistview-description">$4</div> + </div> + </div> + <div class="wikibase-entitytermsforlanguagelistview-listview"><!-- [0,*] wikibase-entitytermsforlanguageview -->$5</div> +</div> HTML; $templates['wikibase-entitytermsforlanguageview'] = <<<HTML -<tbody class="wikibase-entitytermsforlanguageview wikibase-entitytermsforlanguageview-$1" > - <tr> - <td class="wikibase-entitytermsforlanguageview-language" rowspan="3"><a href="$2">$3</a></td> - <td class="wikibase-entitytermsforlanguageview-label">$4</td> - </tr> - <tr> - <td class="wikibase-entitytermsforlanguageview-description">$5</td> - </tr> - <tr> - <td class="wikibase-entitytermsforlanguageview-aliases">$6</td> - </tr> -</tbody> +<div class="wikibase-entitytermsforlanguageview wikibase-entitytermsforlanguageview-$1" > + <div class="wikibase-entitytermsforlanguageview-language"><!-- wikibase-entitytermsforlanguageview-language -->$2</div> + <div class="wikibase-entitytermsforlanguageview-label">$3</div> + <div class="wikibase-entitytermsforlanguageview-aliases">$4</div> + <div class="wikibase-entitytermsforlanguageview-description">$5</div> + <!-- ? wikibase-toolbar -->$6 +</div> +HTML; + + $templates['wikibase-entitytermsforlanguageview-language'] = +<<<HTML +<a href="$1">$2</a> HTML; $templates['wikibase-sitelinkgrouplistview'] = diff --git a/repo/resources/wikibase.ui.entityViewInit.js b/repo/resources/wikibase.ui.entityViewInit.js index 9cd2f4d..4c5adf5 100644 --- a/repo/resources/wikibase.ui.entityViewInit.js +++ b/repo/resources/wikibase.ui.entityViewInit.js @@ -41,10 +41,7 @@ 'referenceview-snakview' ], edittoolbar: [ - 'aliasesview', 'statementview', - 'descriptionview', - 'labelview', 'entitytermsview', 'referenceview', 'sitelinkgroupview' @@ -62,13 +59,10 @@ var $target = $( event.target ), gravity = 'sw'; - if( - $target.data( 'labelview' ) - || $target.data( 'descriptionview' ) - || $target.data( 'aliasesview' ) - || $target.data( 'sitelinkgroupview' ) - ) { + if( $target.data( 'sitelinkgroupview' ) ) { gravity = 'nw'; + } else if( $target.data( 'entitytermsview' ) ) { + gravity = 'w'; } showCopyrightTooltip( $entityview, $( event.target ), gravity ); @@ -137,14 +131,21 @@ ), dataTypeStore: dataTypeStore } ) - .on( 'labelviewchange labelviewafterstopediting', function( event ) { - var $labelview = $( event.target ), - labelview = $labelview.data( 'labelview' ), - label = labelview.value().getText(); + .on( 'entitytermsviewchange entitytermsviewafterstopediting', function( event ) { + var $entitytermsview = $( event.target ), + entitytermsview = $entitytermsview.data( 'entitytermsview' ); - $( 'title' ).text( - mw.msg( 'pagetitle', label !== '' ? label : mw.config.get( 'wgTitle' ) ) - ); + $.each( entitytermsview.value(), function() { + if( this.language === mw.config.get( 'wgUserLanguage' ) ) { + var label = this.label.getText(); + + $( 'title' ).text( + mw.msg( 'pagetitle', label !== '' ? label : mw.config.get( 'wgTitle' ) ) + ); + + return false; + } + } ); } ) .on( 'entityviewafterstartediting', function() { triggerAnonymousEditWarning( entity.getType() ); diff --git a/repo/tests/phpunit/includes/View/EntityViewPlaceholderExpanderTest.php b/repo/tests/phpunit/includes/View/EntityViewPlaceholderExpanderTest.php index 60d5269..3ac62bd 100644 --- a/repo/tests/phpunit/includes/View/EntityViewPlaceholderExpanderTest.php +++ b/repo/tests/phpunit/includes/View/EntityViewPlaceholderExpanderTest.php @@ -127,23 +127,8 @@ $entityRevisionLookup = $this->getEntityRevisionLookup( $item ); $expander = $this->newExpander( $this->newUser( false ), $entityRevisionLookup, $item->getId() ); - $html = $expander->getHtmlForPlaceholder( 'termbox-toc' ); - $this->assertInternalType( 'string', $html ); - $html = $expander->getHtmlForPlaceholder( 'termbox', 'Q23' ); $this->assertInternalType( 'string', $html ); - } - - public function testRenderTermBoxTocEntry() { - $item = $this->getItem(); - $entityRevisionLookup = $this->getEntityRevisionLookup( $item ); - $expander = $this->newExpander( $this->newUser( false ), $entityRevisionLookup, $item->getId() ); - - // According to the mock objects, this should generate a term box for - // 'de' and 'ru', since 'en' is already covered by the interface language. - $html = $expander->renderTermBoxTocEntry( new ItemId( 'Q23' ) ); - $this->assertNotNull( $html ); - $this->assertRegExp( '/#wb-terms/', $html ); } public function renderTermBox() { diff --git a/repo/tests/phpunit/includes/View/EntityViewTest.php b/repo/tests/phpunit/includes/View/EntityViewTest.php index e72a1a6..db0689d 100644 --- a/repo/tests/phpunit/includes/View/EntityViewTest.php +++ b/repo/tests/phpunit/includes/View/EntityViewTest.php @@ -67,6 +67,9 @@ ) { $output = $view->getHtml( $entityRevision, $entityInfo, $editable ); $this->assertRegexp( $regexp, $output ); + + $entityId = $entityRevision->getEntity()->getId()->getSerialization(); + $this->assertRegExp( '/id="wb-[a-z]+-' . $entityId . '"/', $output ); } public abstract function provideTestGetHtml(); diff --git a/repo/tests/phpunit/includes/View/FingerprintViewTest.php b/repo/tests/phpunit/includes/View/FingerprintViewTest.php index de4ed25..5567fb7 100644 --- a/repo/tests/phpunit/includes/View/FingerprintViewTest.php +++ b/repo/tests/phpunit/includes/View/FingerprintViewTest.php @@ -7,6 +7,7 @@ use Wikibase\DataModel\Term\Fingerprint; use Wikibase\Repo\View\FingerprintView; use Wikibase\Repo\View\SectionEditLinkGenerator; +use Wikibase\Repo\View\TextInjector; use Wikibase\Template\TemplateFactory; use Wikibase\Template\TemplateRegistry; @@ -32,9 +33,6 @@ $msgCache->replace( 'Wikibase-label-empty', '<strong class="test">No label</strong>' ); $msgCache->replace( 'Wikibase-description-empty', '<strong class="test">No description</strong>' ); $msgCache->replace( 'Wikibase-aliases-empty', '<strong class="test">No aliases</strong>' ); - - // Mock for the only other message in the class - $msgCache->replace( 'Wikibase-aliases-label', '<strong class="test">A. k. a.:</strong>' ); } protected function tearDown() { @@ -71,7 +69,7 @@ public function testGetHtml_containsTermsAndAliases() { $fingerprintView = $this->getFingerprintView(); $fingerprint = $this->getFingerprint(); - $html = $fingerprintView->getHtml( $fingerprint ); + $html = $fingerprintView->getHtml( $fingerprint, null, '', new TextInjector() ); $this->assertContains( htmlspecialchars( $fingerprint->getLabel( 'en' )->getText() ), $html ); $this->assertContains( htmlspecialchars( $fingerprint->getDescription( 'en' )->getText() ), $html ); @@ -95,12 +93,10 @@ */ public function testGetHtml_isEditable( Fingerprint $fingerprint, ItemId $entityId, $languageCode ) { $fingerprintView = $this->getFingerprintView( $languageCode ); - $html = $fingerprintView->getHtml( $fingerprint, $entityId ); + $html = $fingerprintView->getHtml( $fingerprint, $entityId, '', new TextInjector() ); $idString = $entityId->getSerialization(); $this->assertRegExp( '@<a href="[^"]*\bSpecial:SetLabel/' . $idString . '/' . $languageCode . '"@', $html ); - $this->assertRegExp( '@<a href="[^"]*\bSpecial:SetDescription/' . $idString . '/' . $languageCode . '"@', $html ); - $this->assertRegExp( '@<a href="[^"]*\bSpecial:SetAliases/' . $idString . '/' . $languageCode . '"@', $html ); } /** @@ -108,7 +104,7 @@ */ public function testGetHtml_isNotEditable( Fingerprint $fingerprint, ItemId $entityId, $languageCode ) { $fingerprintView = $this->getFingerprintView( $languageCode ); - $html = $fingerprintView->getHtml( $fingerprint, $entityId, false ); + $html = $fingerprintView->getHtml( $fingerprint, $entityId, '', new TextInjector(), false ); $this->assertNotContains( '<a ', $html ); } @@ -119,7 +115,7 @@ $fingerprint->setLabel( 'en', '<a href="#">evil html</a>' ); $fingerprint->setDescription( 'en', '<script>alert( "xss" );</script>' ); $fingerprint->setAliasGroup( 'en', array( '<b>bold</b>', '<i>italic</i>' ) ); - $html = $fingerprintView->getHtml( $fingerprint ); + $html = $fingerprintView->getHtml( $fingerprint, null, '', new TextInjector() ); $this->assertContains( 'evil html', $html, 'make sure it works' ); $this->assertNotContains( 'href="#"', $html ); @@ -151,14 +147,14 @@ */ public function testGetHtml_isMarkedAsEmptyValue( Fingerprint $fingerprint ) { $fingerprintView = $this->getFingerprintView(); - $html = $fingerprintView->getHtml( $fingerprint ); + $html = $fingerprintView->getHtml( $fingerprint, null, '', new TextInjector() ); $this->assertContains( 'wb-empty', $html ); } public function testGetHtml_isNotMarkedAsEmpty() { $fingerprintView = $this->getFingerprintView(); - $html = $fingerprintView->getHtml( $this->getFingerprint() ); + $html = $fingerprintView->getHtml( $this->getFingerprint(), null, '', new TextInjector() ); $this->assertNotContains( 'wb-empty', $html ); } @@ -168,32 +164,19 @@ */ public function testGetHtml_withEntityId( Fingerprint $fingerprint, ItemId $entityId, $languageCode ) { $fingerprintView = $this->getFingerprintView( $languageCode ); - $html = $fingerprintView->getHtml( $fingerprint, $entityId ); + $html = $fingerprintView->getHtml( $fingerprint, $entityId, '', new TextInjector() ); $idString = $entityId->getSerialization(); - $this->assertNotContains( 'id="wb-firstHeading-new"', $html ); - $this->assertContains( 'id="wb-firstHeading-' . $idString . '"', $html ); $this->assertContains( '(' . $idString . ')', $html ); $this->assertContains( '<a ', $html ); } public function testGetHtml_withoutEntityId() { $fingerprintView = $this->getFingerprintView(); - $html = $fingerprintView->getHtml( Fingerprint::newEmpty() ); + $html = $fingerprintView->getHtml( Fingerprint::newEmpty(), null, '', new TextInjector() ); - $this->assertContains( 'id="wb-firstHeading-new"', $html ); - $this->assertNotContains( 'id="wb-firstHeading-Q', $html ); $this->assertNotContains( '(new)', $html ); $this->assertNotContains( '<a ', $html ); - } - - public function testGetHtml_containsAliasesLabel() { - $fingerprintView = $this->getFingerprintView(); - $html = $fingerprintView->getHtml( $this->getFingerprint() ); - - $this->assertContains( 'A. k. a.:', $html ); - $this->assertContains( 'strong', $html, 'make sure the setUp works' ); - $this->assertNotContains( '<strong class="test">', $html ); } /** @@ -201,7 +184,7 @@ */ public function testGetHtml_containsIsEmptyPlaceholders( Fingerprint $fingerprint, $message ) { $fingerprintView = $this->getFingerprintView(); - $html = $fingerprintView->getHtml( $fingerprint ); + $html = $fingerprintView->getHtml( $fingerprint, null, '', new TextInjector() ); $this->assertContains( $message, $html ); $this->assertContains( 'strong', $html, 'make sure the setUp works' ); diff --git a/repo/tests/phpunit/includes/View/TermBoxViewTest.php b/repo/tests/phpunit/includes/View/TermBoxViewTest.php deleted file mode 100644 index 0ea9e1c..0000000 --- a/repo/tests/phpunit/includes/View/TermBoxViewTest.php +++ /dev/null @@ -1,58 +0,0 @@ -<?php - -namespace Wikibase\Test; - -use Language; -use Title; -use Wikibase\DataModel\Entity\Item; -use Wikibase\DataModel\Entity\ItemId; -use Wikibase\Repo\View\TermBoxView; -use Wikibase\Template\TemplateFactory; -use Wikibase\Template\TemplateRegistry; - -/** - * @covers Wikibase\Repo\View\TermBoxView - * - * @group Wikibase - * @group WikibaseRepo - * @group EntityView - * - * @licence GNU GPL v2+ - * @author Daniel Kinzler - */ -class TermBoxViewTest extends \PHPUnit_Framework_TestCase { - - public function testRenderTermBox() { - $language = Language::factory( 'qqx' ); // so we can look for message keys in the output - $templateFactory = new TemplateFactory( TemplateRegistry::getDefaultInstance() ); - $view = new TermBoxView( $templateFactory, $language ); - - $title = $this->getMockBuilder( 'Title' ) - ->disableOriginalConstructor() - ->getMock(); - - $entity = Item::newEmpty(); - $entity->setId( new ItemId( 'Q23' ) ); - - $fingerprint = $entity->getFingerprint(); - $fingerprint->setLabel( 'en', 'Moskow' ); - $fingerprint->setLabel( 'de', 'Moskau' ); - - $fingerprint->setDescription( 'de', 'Hauptstadt Russlands' ); - - $entity->setFingerprint( $fingerprint ); - - $languages = array( 'de', 'ru' ); - - $html = $view->renderTermBox( $title, $entity->getFingerprint(), $languages ); - - $this->assertNotRegExp( '/Moskow/', $html, 'unexpected English label, should not be there' ); - - $this->assertRegExp( '/Moskau/', $html, 'expected German label' ); - $this->assertRegExp( '/Hauptstadt/', $html, 'expected German description' ); - - $this->assertRegExp( '/wikibase-label-empty/', $html, 'expected label-empty message for "ru"' ); - $this->assertRegExp( '!<h2 id="wb-terms".*?>\(wikibase-terms\)</h2>!', $html, 'expected h2 header' ); - } - -} -- To view, visit https://gerrit.wikimedia.org/r/183498 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I21c7d4a466b8da7006b1a9215f85b7b5924ba71e Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/Wikibase Gerrit-Branch: master Gerrit-Owner: Henning Snater <henning.sna...@wikimedia.de> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits