jenkins-bot has submitted this change and it was merged. ( 
https://gerrit.wikimedia.org/r/375973 )

Change subject: Add tooltips when attaching the handler
......................................................................


Add tooltips when attaching the handler

The tooltips are not right while loading and for clients with disabled
JavaScript.

Add the title attribute with JavaScript instead of PHP.

Centralize attaching in new function attachHandler.

Change-Id: I2a1b29ca204b61b5fec1d3244528e3f3d8ed6ad7
---
M CategoryTreeFunctions.php
M modules/ext.categoryTree.js
2 files changed, 147 insertions(+), 139 deletions(-)

Approvals:
  Krinkle: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/CategoryTreeFunctions.php b/CategoryTreeFunctions.php
index 52a4f00..2ac0cd7 100644
--- a/CategoryTreeFunctions.php
+++ b/CategoryTreeFunctions.php
@@ -629,11 +629,9 @@
                                $tag = 'span';
                                if ( $children == 0 ) {
                                        $txt = wfMessage( 
'categorytree-expand-bullet' )->plain();
-                                       $linkattr[ 'title' ] = wfMessage( 
'categorytree-expand' )->plain();
                                        $linkattr[ 'data-ct-state' ] = 
'collapsed';
                                } else {
                                        $txt = wfMessage( 
'categorytree-collapse-bullet' )->plain();
-                                       $linkattr[ 'title' ] = wfMessage( 
'categorytree-collapse' )->plain();
                                        $linkattr[ 'data-ct-loaded' ] = true;
                                        $linkattr[ 'data-ct-state' ] = 
'expanded';
                                }
diff --git a/modules/ext.categoryTree.js b/modules/ext.categoryTree.js
index a30ee38..9e48711 100644
--- a/modules/ext.categoryTree.js
+++ b/modules/ext.categoryTree.js
@@ -12,158 +12,168 @@
 
 ( function ( $, mw ) {
 
-       mw.hook( 'wikipage.content' ).add( function ( $content ) {
+       /**
+        * Attach click handler to buttons
+        *
+        * @param {jQuery} $content
+        */
+       function attachHandler( $content ) {
+               $content.find( '.CategoryTreeToggle' )
+                       .click( handleNode )
+                       .attr( 'title', function () {
+                               return mw.msg(
+                                       $( this ).data( 'ct-state' ) === 
'collapsed' ?
+                                       'categorytree-expand' :
+                                       'categorytree-collapse'
+                               );
+                       } )
+                       .addClass( 'CategoryTreeToggleHandlerAttached' );
+       }
+
+       /**
+        * Handles clicks on the expand buttons, and calls the appropriate 
function
+        *
+        * @context {Element} CategoryTreeToggle
+        */
+       function handleNode() {
+               var $link = $( this );
+               if ( $link.data( 'ct-state' ) === 'collapsed' ) {
+                       expandNode( $link );
+               } else {
+                       collapseNode( $link );
+               }
+       }
+
+       /**
+        * Expands a given node (loading it's children if not loaded)
+        *
+        * @param {jQuery} $link
+        */
+       function expandNode( $link ) {
+               // Show the children node
+               var $children = $link.parents( '.CategoryTreeItem' )
+                               .siblings( '.CategoryTreeChildren' );
+               $children.show();
+
+               $link
+                       .text( mw.msg( 'categorytree-collapse-bullet' ) )
+                       .attr( 'title', mw.msg( 'categorytree-collapse' ) )
+                       .data( 'ct-state', 'expanded' );
+
+               if ( !$link.data( 'ct-loaded' ) ) {
+                       loadChildren( $link, $children );
+               }
+       }
+
+       /**
+        * Collapses a node
+        *
+        * @param {jQuery} $link
+        */
+       function collapseNode( $link ) {
+               // Hide the children node
+               $link.parents( '.CategoryTreeItem' )
+                       .siblings( '.CategoryTreeChildren' ).hide();
+
+               $link
+                       .text( mw.msg( 'categorytree-expand-bullet' ) )
+                       .attr( 'title', mw.msg( 'categorytree-expand' ) )
+                       .data( 'ct-state', 'collapsed' );
+       }
+
+       /**
+        * Loads children for a node via an HTTP call
+        *
+        * @param {jQuery} $link
+        * @param {jQuery} $children
+        */
+       function loadChildren( $link, $children ) {
+               var $linkParentCTTag, ctTitle, ctMode, ctOptions;
 
                /**
-                * Handles clicks on the expand buttons, and calls the 
appropriate function
-                *
-                * @context {Element} CategoryTreeToggle
+                * Error callback
                 */
-               function handleNode() {
-                       var $link = $( this );
-                       if ( $link.data( 'ct-state' ) === 'collapsed' ) {
-                               expandNode( $link );
-                       } else {
-                               collapseNode( $link );
-                       }
+               function error() {
+                       var $retryLink;
+
+                       $retryLink = $( '<a>' )
+                               .text( mw.msg( 'categorytree-retry' ) )
+                               .attr( 'href', '#' )
+                               .click( function ( e ) {
+                                       e.preventDefault();
+                                       loadChildren( $link, $children );
+                               } );
+
+                       $children
+                               .text( mw.msg( 'categorytree-error' ) + ' ' )
+                               .append( $retryLink );
                }
 
-               /**
-                * Expands a given node (loading it's children if not loaded)
-                *
-                * @param {jQuery} $link
-                */
-               function expandNode( $link ) {
-                       // Show the children node
-                       var $children = $link.parents( '.CategoryTreeItem' )
-                                       .siblings( '.CategoryTreeChildren' );
-                       $children.show();
+               $link.data( 'ct-loaded', true );
 
-                       $link
-                               .text( mw.msg( 'categorytree-collapse-bullet' ) 
)
-                               .attr( 'title', mw.msg( 'categorytree-collapse' 
) )
-                               .data( 'ct-state', 'expanded' );
+               $children.append(
+                       $( '<i class="CategoryTreeNotice"></i>' )
+                               .text( mw.msg( 'categorytree-loading' ) )
+               );
 
-                       if ( !$link.data( 'ct-loaded' ) ) {
-                               loadChildren( $link, $children );
-                       }
+               $linkParentCTTag = $link.parents( '.CategoryTreeTag' );
+
+               // Element may not have a .CategoryTreeTag parent, fallback to 
defauls
+               // Probably a CategoryPage (@todo: based on what?)
+               ctTitle = $link.data( 'ct-title' );
+               ctMode = $linkParentCTTag.data( 'ct-mode' );
+               ctMode = typeof ctMode === 'number' ? ctMode : undefined;
+               ctOptions = JSON.stringify( $linkParentCTTag.data( 'ct-options' 
) );
+               if ( !ctOptions ) {
+                       ctOptions = mw.config.get( 
'wgCategoryTreePageCategoryOptions' );
                }
 
-               /**
-                * Collapses a node
-                *
-                * @param {jQuery} $link
-                */
-               function collapseNode( $link ) {
-                       // Hide the children node
-                       $link.parents( '.CategoryTreeItem' )
-                               .siblings( '.CategoryTreeChildren' ).hide();
-
-                       $link
-                               .text( mw.msg( 'categorytree-expand-bullet' ) )
-                               .attr( 'title', mw.msg( 'categorytree-expand' ) 
)
-                               .data( 'ct-state', 'collapsed' );
+               // Mode and options have defaults or fallbacks, title does not.
+               // Don't make a request if there is no title.
+               if ( typeof ctTitle !== 'string' ) {
+                       error();
+                       return;
                }
 
-               /**
-                * Loads children for a node via an HTTP call
-                *
-                * @param {jQuery} $link
-                * @param {jQuery} $children
-                */
-               function loadChildren( $link, $children ) {
-                       var $linkParentCTTag, ctTitle, ctMode, ctOptions;
+               new mw.Api().get( {
+                       action: 'categorytree',
+                       category: ctTitle,
+                       options: ctOptions,
+                       uselang: mw.config.get( 'wgUserLanguage' ),
+                       formatversion: 2
+               } ).done( function ( data ) {
+                       data = data.categorytree.html;
 
-                       /**
-                        * Error callback
-                        */
-                       function error() {
-                               var $retryLink;
-
-                               $retryLink = $( '<a>' )
-                                       .text( mw.msg( 'categorytree-retry' ) )
-                                       .attr( 'href', '#' )
-                                       .click( function ( e ) {
-                                               e.preventDefault();
-                                               loadChildren( $link, $children 
);
-                                       } );
-
-                               $children
-                                       .text( mw.msg( 'categorytree-error' ) + 
' ' )
-                                       .append( $retryLink );
-                       }
-
-                       $link.data( 'ct-loaded', true );
-
-                       $children.append(
-                               $( '<i class="CategoryTreeNotice"></i>' )
-                                       .text( mw.msg( 'categorytree-loading' ) 
)
-                       );
-
-                       $linkParentCTTag = $link.parents( '.CategoryTreeTag' );
-
-                       // Element may not have a .CategoryTreeTag parent, 
fallback to defauls
-                       // Probably a CategoryPage (@todo: based on what?)
-                       ctTitle = $link.data( 'ct-title' );
-                       ctMode = $linkParentCTTag.data( 'ct-mode' );
-                       ctMode = typeof ctMode === 'number' ? ctMode : 
undefined;
-                       ctOptions = JSON.stringify( $linkParentCTTag.data( 
'ct-options' ) );
-                       if ( !ctOptions ) {
-                               ctOptions = mw.config.get( 
'wgCategoryTreePageCategoryOptions' );
-                       }
-
-                       // Mode and options have defaults or fallbacks, title 
does not.
-                       // Don't make a request if there is no title.
-                       if ( typeof ctTitle !== 'string' ) {
-                               error();
-                               return;
-                       }
-
-                       new mw.Api().get( {
-                               action: 'categorytree',
-                               category: ctTitle,
-                               options: ctOptions,
-                               uselang: mw.config.get( 'wgUserLanguage' ),
-                               formatversion: 2
-                       } ).done( function ( data ) {
-                               data = data.categorytree.html;
-
-                               if ( data === '' ) {
-                                       switch ( ctMode ) {
-                                               // CategoryTreeMode::CATEGORIES 
= 0
-                                               case 0:
-                                                       data = mw.msg( 
'categorytree-no-subcategories' );
-                                                       break;
-                                               // CategoryTreeMode::PAGES = 10
-                                               case 10:
-                                                       data = mw.msg( 
'categorytree-no-pages' );
-                                                       break;
-                                               // CategoryTreeMode::PARENTS = 
100
-                                               case 100:
-                                                       data = mw.msg( 
'categorytree-no-parent-categories' );
-                                                       break;
-                                               // CategoryTreeMode::ALL = 20
-                                               default:
-                                                       data = mw.msg( 
'categorytree-nothing-found' );
-                                       }
-
-                                       data = $( '<i 
class="CategoryTreeNotice"></i>' ).text( data );
+                       if ( data === '' ) {
+                               switch ( ctMode ) {
+                                       // CategoryTreeMode::CATEGORIES = 0
+                                       case 0:
+                                               data = mw.msg( 
'categorytree-no-subcategories' );
+                                               break;
+                                       // CategoryTreeMode::PAGES = 10
+                                       case 10:
+                                               data = mw.msg( 
'categorytree-no-pages' );
+                                               break;
+                                       // CategoryTreeMode::PARENTS = 100
+                                       case 100:
+                                               data = mw.msg( 
'categorytree-no-parent-categories' );
+                                               break;
+                                       // CategoryTreeMode::ALL = 20
+                                       default:
+                                               data = mw.msg( 
'categorytree-nothing-found' );
                                }
 
-                               $children
-                                       .html( data )
-                                       .find( '.CategoryTreeToggle' )
-                                               .click( handleNode )
-                                               .addClass( 
'CategoryTreeToggleHandlerAttached' );
+                               data = $( '<i class="CategoryTreeNotice"></i>' 
).text( data );
+                       }
 
-                       } )
-                       .fail( error );
-               }
+                       $children.html( data );
+                       attachHandler( $children );
 
-               // Register click events
-               $content.find( '.CategoryTreeToggle' )
-               .click( handleNode )
-               .addClass( 'CategoryTreeToggleHandlerAttached' );
-       } );
+               } )
+               .fail( error );
+       }
+
+       // Register click events
+       mw.hook( 'wikipage.content' ).add( attachHandler );
 
 }( jQuery, mediaWiki ) );

-- 
To view, visit https://gerrit.wikimedia.org/r/375973
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I2a1b29ca204b61b5fec1d3244528e3f3d8ed6ad7
Gerrit-PatchSet: 2
Gerrit-Project: mediawiki/extensions/CategoryTree
Gerrit-Branch: master
Gerrit-Owner: Fomafix <foma...@googlemail.com>
Gerrit-Reviewer: Fomafix <foma...@googlemail.com>
Gerrit-Reviewer: Krinkle <krinklem...@gmail.com>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to