Jonas Kress (WMDE) has uploaded a new change for review. https://gerrit.wikimedia.org/r/266501
Change subject: Refactor more languages ...................................................................... Refactor more languages Change-Id: I2bd6ed3d3395ab7b3b5653b9c0d5918e66e73aae --- M view/resources/jquery/wikibase/jquery.wikibase.entitytermsforlanguagelistview.js 1 file changed, 79 insertions(+), 39 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase refs/changes/01/266501/1 diff --git a/view/resources/jquery/wikibase/jquery.wikibase.entitytermsforlanguagelistview.js b/view/resources/jquery/wikibase/jquery.wikibase.entitytermsforlanguagelistview.js index 7a8df33..2b9e912 100644 --- a/view/resources/jquery/wikibase/jquery.wikibase.entitytermsforlanguagelistview.js +++ b/view/resources/jquery/wikibase/jquery.wikibase.entitytermsforlanguagelistview.js @@ -71,6 +71,11 @@ _isInEditMode: false, /** + * @type {Object} + */ + _moreLanguagesItemsPerLanguage: {}, + + /** * @see jQuery.ui.TemplatedWidget._create */ _create: function() { @@ -216,56 +221,91 @@ * @private */ _createEntitytermsforlanguagelistviewMore: function() { - var self = this, - listview = this.$listview.data( 'listview' ), - lia = listview.listItemAdapter(), - languages = this._getAdditionalLanguages(), - itemsPerLanguage = {}; + var self = this; - if ( $.isEmptyObject( languages ) ) { + if ( $.isEmptyObject( this._getAdditionalLanguages() ) ) { return; } + var moreLanguagesButton = $( '<a/>' ).attr( 'href', '#' ) + .click( $.proxy( this._onMoreLanguagesButtonClicked, this ) ); + this.$entitytermsforlanguagelistviewMore = $( '<div/>' ) .addClass( 'wikibase-entitytermsforlanguagelistview-more' ) - .append( - $( '<a/>' ) - .attr( 'href', '#' ) - .text( mw.msg( 'wikibase-entitytermsforlanguagelistview-more' ) ) - .click( function() { - var $this = $( this ), - expanded = $.isEmptyObject( itemsPerLanguage ), - lang; + .append( moreLanguagesButton ); - if ( expanded ) { - for ( lang in languages ) { - var $li = listview.addItem( self._getValueForLanguage( lang ) ); - if ( self._isInEditMode ) { - lia.liInstance( $li ).startEditing(); - } - itemsPerLanguage[lang] = $li; - } - } else { - var top = $this.offset().top; - for ( lang in languages ) { - listview.removeItem( itemsPerLanguage[lang] ); - delete itemsPerLanguage[lang]; - } - self._scrollUp( $this, top ); - } - - $this.text( mw.msg( - 'wikibase-entitytermsforlanguagelistview-' + ( expanded ? 'less' : 'more' ) - ) ); - - return false; - } ) - ); - + this._toggleMoreLanguageButtonLabel(); this.element.after( this.$entitytermsforlanguagelistviewMore ); }, /** + * Click handler for more languages button + * @private + */ + _onMoreLanguagesButtonClicked: function ( event) { + var $button = $( event.target ); + + if ( !this._isMoreLanguagesExpanded() ) { + this._addMoreLanguages(); + } else { + this._removeMoreLanguages(); + this._scrollUp( $button, $button.offset().top ); + } + + this._toggleMoreLanguageButtonLabel(); + return false; + }, + + _isMoreLanguagesExpanded: function () { + return !$.isEmptyObject( this._moreLanguagesItemsPerLanguage ); + }, + + /** + * Remove 'more' languages to listview + * @private + */ + _removeMoreLanguages: function() { + var itemsPerLanguage = this._moreLanguagesItemsPerLanguage, + listview = this.$listview.data( 'listview' ), + languages = this._getAdditionalLanguages(); + + for ( var lang in languages ) { + listview.removeItem( itemsPerLanguage[lang] ); + delete itemsPerLanguage[lang]; + } + }, + + /** + * Add 'more' languages to listview + * @private + */ + _addMoreLanguages: function() { + var languages = this._getAdditionalLanguages(), + listview = this.$listview.data( 'listview' ), + lia = listview.listItemAdapter(); + + for ( var lang in languages ) { + var $li = listview.addItem( this._getValueForLanguage( lang ) ); + if ( this._isInEditMode ) { + lia.liInstance( $li ).startEditing(); + } + this._moreLanguagesItemsPerLanguage[lang] = $li; + } + }, + + /** + * Toggle more language button text ( more/less ) + * @private + */ + _toggleMoreLanguageButtonLabel: function() { + this.$entitytermsforlanguagelistviewMore + .find('a').text( mw.msg( + 'wikibase-entitytermsforlanguagelistview-' + + ( this._isMoreLanguagesExpanded() ? 'less' : 'more' ) + ) ); + }, + + /** * @return {Object} Map of additional language codes in this fingerprint. * @private */ -- To view, visit https://gerrit.wikimedia.org/r/266501 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I2bd6ed3d3395ab7b3b5653b9c0d5918e66e73aae Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/Wikibase Gerrit-Branch: master Gerrit-Owner: Jonas Kress (WMDE) <jonas.kr...@wikimedia.de> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits