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

Reply via email to