Anja Jentzsch has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/54836


Change subject: Show/hide the wikibase watchlist entries server side
......................................................................

Show/hide the wikibase watchlist entries server side

(Requires I79811e9f3e7431e3403cf93674667d624d3d4db2)

patchset 8: fixed & improved selenium tests

Change-Id: I267a755a70cdc7d4937ab70364b34e73da780ef0
---
M client/WikibaseClient.hooks.php
M client/WikibaseClient.php
M client/resources/Resources.php
D client/resources/wbclient.watchlist.css
D client/resources/wbclient.watchlist.js
D client/tests/qunit/wbclient.watchlist.tests.js
M client/tests/selenium/special/client_rc_and_wl_spec.rb
M selenium/lib/pages/watchlist_page.rb
8 files changed, 53 insertions(+), 301 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase 
refs/changes/36/54836/1

diff --git a/client/WikibaseClient.hooks.php b/client/WikibaseClient.hooks.php
index 1396a58..21badcf 100644
--- a/client/WikibaseClient.hooks.php
+++ b/client/WikibaseClient.hooks.php
@@ -97,32 +97,6 @@
        }
 
        /**
-        * Add new javascript testing modules. This is called after the 
addition of MediaWiki core test suites.
-        * @see 
https://www.mediawiki.org/wiki/Manual:Hooks/ResourceLoaderTestModules
-        *
-        * @since 0.4
-        *
-        * @param array &$testModules
-        * @param \ResourceLoader &$resourceLoader
-        *
-        * @return boolean
-        */
-        public static function onRegisterQUnitTests( array &$testModules, 
\ResourceLoader &$resourceLoader ) {
-               $testModules['qunit']['wikibase.client.watchlist.test'] = array(
-                       'scripts' => array(
-                               'tests/qunit/wbclient.watchlist.tests.js'
-                       ),
-                       'dependencies' => array(
-                               'wbclient.watchlist',
-                               'wbclient.watchlist.css'
-                       ),
-                       'localBasePath' => __DIR__,
-                       'remoteExtPath' => 'Wikibase/client'
-               );
-               return true;
-       }
-
-       /**
         * Deletes all the data stored on the repository.
         *
         * @since 0.2
@@ -503,7 +477,12 @@
 
                wfProfileIn( __METHOD__ );
 
-               if ( $wgRequest->getBool( 'enhanced', $wgUser->getOption( 
'usenewrc' ) ) === false ) {
+               if (
+                       // Don't act on activated enhanced watchlist
+                       $wgRequest->getBool( 'enhanced', $wgUser->getOption( 
'usenewrc' ) ) === false &&
+                       // Or in case the user disabled it
+                       $wgRequest->getBool( 'hideWikibase', 
!$wgUser->getOption( 'wlshowwikibase' ) ) === false
+               ) {
                        $dbr = wfGetDB( DB_SLAVE );
 
                        $newConds = array();
@@ -718,29 +697,6 @@
        }
 
        /**
-        * Adds a JS stuff that provides a toggle for wikibase edits on the 
watchlist
-        *
-        * @param \SpecialPage $special
-        * @param string $subpage
-        *
-        * @return bool
-        */
-       public static function onSpecialPageBeforeExecute( \SpecialPage 
$special, $subpage ) {
-               if ( $special->getName() === 'Watchlist' ) {
-                       $context = $special->getContext();
-
-                       if ( $context->getRequest()->getBool( 'enhanced', 
$context->getUser()->getOption( 'usenewrc' ) ) === false ) {
-                               $special->getOutput()->addModules( array(
-                                       'wbclient.watchlist.css',
-                                       'wbclient.watchlist',
-                               ) );
-                       }
-               }
-
-               return true;
-       }
-
-       /**
         * Register the parser functions.
         *
         * @param $parser \Parser
@@ -776,4 +732,27 @@
                return true;
        }
 
+       /**
+        * Modifies watchlist options to show a toggle for Wikibase changes
+        * @see 
https://www.mediawiki.org/wiki/Manual:Hooks/SpecialWatchlistFilters
+        *
+        * @since 0.4
+        *
+        * @param SpecialWatchlist $special
+        * @param array $filters
+        *
+        * @return bool
+        */
+       public static function onSpecialWatchlistFilters( $special, &$filters ) 
{
+               $user = $special->getContext()->getUser();
+
+               if ( $special->getContext()->getRequest()->getBool( 'enhanced', 
$user->getOption( 'usenewrc' ) ) === false ) {
+                       // Allow toggling wikibase changes in case the enhanced 
watchlist is disabled
+                       $filters['hideWikibase'] = array(
+                               'msg' => 'wikibase-rc-hide-wikidata',
+                               'default' => !$user->getBoolOption( 
'wlshowwikibase' )
+                       );
+               }
+               return true;
+       }
 }
diff --git a/client/WikibaseClient.php b/client/WikibaseClient.php
index 59dd8bf..174bfc3 100644
--- a/client/WikibaseClient.php
+++ b/client/WikibaseClient.php
@@ -103,7 +103,6 @@
 $wgHooks['ParserFirstCallInit'][]                      = 
'\Wikibase\ClientHooks::onParserFirstCallInit';
 $wgHooks['MagicWordwgVariableIDs'][]                   = 
'\Wikibase\ClientHooks::onMagicWordwgVariableIDs';
 $wgHooks['ParserGetVariableValueSwitch'][]             = 
'\Wikibase\ClientHooks::onParserGetVariableValueSwitch';
-$wgHooks['ResourceLoaderTestModules'][]             = 
'Wikibase\ClientHooks::onRegisterQUnitTests';
 $wgHooks['SkinTemplateOutputPageBeforeExec'][]         = 
'\Wikibase\ClientHooks::onSkinTemplateOutputPageBeforeExec';
 $wgHooks['SpecialMovepageAfterMove'][]                         = 
'\Wikibase\ClientHooks::onSpecialMovepageAfterMove';
 $wgHooks['SpecialWatchlistQuery'][]                    = 
'\Wikibase\ClientHooks::onSpecialWatchlistQuery';
@@ -111,8 +110,9 @@
 $wgHooks['SpecialRecentChangesFilters'][]                      = 
'\Wikibase\ClientHooks::onSpecialRecentChangesFilters';
 $wgHooks['GetPreferences'][]                                           = 
'\Wikibase\ClientHooks::onGetPreferences';
 $wgHooks['BeforePageDisplay'][]                                = 
'\Wikibase\ClientHooks::onBeforePageDisplay';
-$wgHooks['SpecialPageBeforeExecute'][]         = 
'\Wikibase\ClientHooks::onSpecialPageBeforeExecute';
 $wgHooks['ScribuntoExternalLibraries'][]      = 
'\Wikibase\ClientHooks::onScribuntoExternalLibraries';
+$wgHooks['SpecialWatchlistFilters'][]          = 
'\Wikibase\ClientHooks::onSpecialWatchlistFilters';
+
 // extension hooks
 $wgHooks['WikibasePollHandle'][]                        = 
'\Wikibase\ClientHooks::onWikibasePollHandle';
 $wgHooks['WikibaseDeleteData'][]                                   = 
'\Wikibase\ClientHooks::onWikibaseDeleteData';
diff --git a/client/resources/Resources.php b/client/resources/Resources.php
index 16bb5c8..9e63bec 100644
--- a/client/resources/Resources.php
+++ b/client/resources/Resources.php
@@ -26,19 +26,6 @@
                        'styles' => 'wbclient.watchlist.css',
                        'position' => 'top',
                ),
-               'wbclient.watchlist' => $moduleTemplate + array(
-                       'scripts' => array(
-                               'wbclient.watchlist.js'
-                       ),
-                       'dependencies' => array(
-                               'user.options'
-                       ),
-                       'messages' => array(
-                               'hide',
-                               'show',
-                               'wikibase-rc-hide-wikidata',
-                       ),
-               ),
                'wbclient.linkItem' => $moduleTemplate + array(
                        'scripts' => array(
                                'wbclient.linkItem.js'
diff --git a/client/resources/wbclient.watchlist.css 
b/client/resources/wbclient.watchlist.css
deleted file mode 100644
index ab3f9e2..0000000
--- a/client/resources/wbclient.watchlist.css
+++ /dev/null
@@ -1,3 +0,0 @@
-.wikibase-edit {
-       display: none;
-}
diff --git a/client/resources/wbclient.watchlist.js 
b/client/resources/wbclient.watchlist.js
deleted file mode 100644
index 95d2e69..0000000
--- a/client/resources/wbclient.watchlist.js
+++ /dev/null
@@ -1,108 +0,0 @@
-/**
- * JavaScript for Special:Watchlist
- */
-( function ( mw, $ ) {
-'use strict';
-
-var watchlist = {
-
-       /**
-        * @type bool
-        */
-       toggleOn : false,
-
-       /**
-        * Adds a toggle link for showing and hiding wikibase edits
-        */
-       getShowHideLink: function( toggleOn ) {
-               var $linkMsg = 'show';
-               if ( toggleOn ) {
-                       $linkMsg = 'hide';
-               }
-               return '<a id="wb-toggle-link" href="javascript:void(0);">' +
-                       mw.message( $linkMsg ).escaped() + '</a>';
-       },
-
-       getToggle: function( toggleLink ) {
-               return '<span id="wb-toggle">' +
-                       mw.message( 'wikibase-rc-hide-wikidata' 
).escaped().replace( '$1', toggleLink ) +
-                       '</span>';
-       },
-
-       addFilter: function() {
-               var $showLink = watchlist.getShowHideLink( watchlist.toggleOn );
-               var $wbToggle = watchlist.getToggle( $showLink );
-               $( '#mw-watchlist-form-namespaceselector' ).before( ' | ' + 
$wbToggle );
-               $( '#wb-toggle-link' ).click( watchlist.toggleWikibase );
-               watchlist.toggleSections( watchlist.getSections() );
-       },
-
-       getSections: function() {
-               return $( '.special' );
-       },
-
-       toggleSections: function( sections ) {
-               $( sections ).each( function() {
-                       watchlist.toggleSection( this );
-               });
-       },
-
-       /**
-        * Toggles the h4 date heading if that date has only wikibase changes
-        */
-       toggleSection: function( section ) {
-               if ( watchlist.hasWBEditsOnly( section ) ) {
-                       if ( watchlist.toggleOn === false ) {
-                               $( section ).prev().hide();
-                       } else {
-                               $( section ).prev().show();
-                       }
-               }
-       },
-
-       /**
-        * Determines if a list of changes are wikibase only
-        * @param element el
-        */
-       hasWBEditsOnly: function( section ) {
-               var $section = $( section ),
-                       $edits = $section.find( 'li' ),
-                       $wbEdits = $edits.filter( '.wikibase-edit' );
-
-               return $edits.length === $wbEdits.length;
-       },
-
-       /**
-        * Performs the toggle, showing or hiding the <li> elements for wikibase
-        * edits and the date section heading if the section has wikibase only 
edits.
-        */
-       toggleWikibase: function() {
-               watchlist.toggleOn = !watchlist.toggleOn;
-               $( '.wikibase-edit' ).toggle();
-               watchlist.toggleSections( watchlist.getSections() );
-               $( '#wb-toggle-link' ).html(
-                       watchlist.getShowHideLink( watchlist.toggleOn )
-               );
-       },
-
-       /**
-        * Initialises and adds the filter to the Special:Watchlist page
-        */
-       init: function () {
-               watchlist.addFilter();
-
-               if ( mw.user.options.get( 'wlshowwikibase' ) ) {
-                       watchlist.toggleWikibase();
-               }
-       }
-};
-
-$( document ).ready( watchlist.init );
-
-if ( !mw.wbclient ) {
-       mw.wbclient = {};
-}
-
-mw.wbclient.watchlist = watchlist;
-
-}( mediaWiki, jQuery ) );
diff --git a/client/tests/qunit/wbclient.watchlist.tests.js 
b/client/tests/qunit/wbclient.watchlist.tests.js
deleted file mode 100644
index 704874d..0000000
--- a/client/tests/qunit/wbclient.watchlist.tests.js
+++ /dev/null
@@ -1,113 +0,0 @@
-/**
- * QUnit tests description edit tool
- * @see https://www.mediawiki.org/wiki/Extension:WikibaseClient
- *
- * @since 0.4
- * @file
- * @ingroup WikibaseClient
- *
- * @licence GNU GPL v2+
- * @author Katie Filbert < aude.w...@gmail.com >
- */
-( function( mw, $, QUnit ) {
-       'use strict';
-
-       QUnit.module( 'wikibase.client.watchlist.test', 
QUnit.newMwEnvironment() );
-
-       QUnit.test( 'wikibase client toggle', function ( assert ) {
-               var $namespaceFilters, $env, $toggleLink, $wbToggle, 
$mockWatchlist,
-                       $sections, $watchlistSections;
-
-               $namespaceFilters =
-                       '<fieldset id="mw-watchlist-options">'
-                       + '<form method="post" action="/wiki/Special:Watchlist" 
id="mw-watchlist-form-namespaceselector"><hr />'
-                       + '<p><label for="namespace">Namespace:</label>&#160;'
-                       + '<select class="namespaceselector" id="namespace" 
name="namespace">'
-                       + '<option value="" selected="">all</option>'
-                       + '<option value="0">(Main)</option>'
-                       + '<option value="1">Talk</option>'
-                       + '<option value="2">User</option>'
-                       + '<option value="3">User talk</option>'
-                       + '<option value="4">Project</option>'
-                       + '<option value="5">Project talk</option>'
-                       + '<option value="6">File</option>'
-                       + '<option value="7">File talk</option>'
-                       + '<option value="8">MediaWiki</option>'
-                       + '<option value="9">MediaWiki talk</option>'
-                       + '<option value="10">Template</option>'
-                       + '<option value="11">Template talk</option>'
-                       + '<option value="12">Help</option>'
-                       + '<option value="13">Help talk</option>'
-                       + '<option value="14">Category</option>'
-                       + '<option value="15">Category talk</option>'
-                       + '</select>'
-                       + '</fieldset>';
-
-               $watchlistSections =
-                       '<h4>10 January 2013</h4>'
-                       + '<ul class="special">'
-                       + '<li class="mw-line-even 
mw-changeslist-line-not-watched watchlist-0-Japan"></li>'
-                       + '</ul>'
-                       + '<h4>9 January 2013</h4>'
-            + '<ul class="special">'
-            + '<li class="mw-line-odd mw-changeslist-line-not-watched 
watchlist-0-Japan wikibase-edit"></li>'
-            + '<li class="mw-line-even mw-changeslist-line-not-watched 
watchlist-0-Japan wikibase-edit"></li>'
-                       + '</ul>'
-                       + '<h4>8 January 2013</h4>'
-                       + '<ul class="special">'
-                       + '<li class="mw-line-even 
mw-changeslist-line-not-watched watchlist-0-Japan wikibase-edit"></li>'
-                       + '<li class="mw-line-even 
mw-changeslist-line-not-watched watchlist-0-Japan"></li>'
-                       + '</ul>';
-
-               $mockWatchlist = $( $namespaceFilters ).after( $( 
$watchlistSections ) );
-               $env = $( '<div>' ).html( $mockWatchlist ).appendTo( 'body' );
-
-               mw.wbclient.watchlist.addFilter();
-               strictEqual( mw.wbclient.watchlist.toggleOn, false, 'Wikibase 
toggle set to false by default' );
-
-               $toggleLink = mw.wbclient.watchlist.getShowHideLink( false );
-               strictEqual( $toggleLink, '<a id="wb-toggle-link" 
href="javascript:void(0);">Show</a>',
-                       'Wikibase toggle link html (show)' );
-
-               strictEqual(
-                       mw.wbclient.watchlist.getToggle( $toggleLink ),
-                       '<span id="wb-toggle"><a id="wb-toggle-link" 
href="javascript:void(0);">Show</a> Wikidata</span>',
-                       'Wikibase toggle html (show)'
-               );
-
-               $toggleLink = mw.wbclient.watchlist.getShowHideLink( true );
-               strictEqual( $toggleLink, '<a id="wb-toggle-link" 
href="javascript:void(0);">Hide</a>',
-            'Wikibase toggle link html (hide)' );
-
-        strictEqual(
-                       mw.wbclient.watchlist.getToggle( $toggleLink ),
-                       '<span id="wb-toggle"><a id="wb-toggle-link" 
href="javascript:void(0);">Hide</a> Wikidata</span>',
-            'Wikibase toggle html (hide)'
-               );
-
-               strictEqual(
-                       $( '#mw-watchlist-form-namespaceselector' 
).prev().attr( 'id' ), 'wb-toggle',
-                               'Toggle position before namespace selector' );
-
-               $sections = mw.wbclient.watchlist.getSections();
-               strictEqual( $sections.length, 3, 'Number of watchlist date 
sections' );
-               strictEqual( mw.wbclient.watchlist.hasWBEditsOnly( $sections[0] 
), false, 'Wikibase edits only (section 1)' );
-               strictEqual( mw.wbclient.watchlist.hasWBEditsOnly( $sections[1] 
), true, 'Wikibase edits only (section 2)' );
-               strictEqual( mw.wbclient.watchlist.hasWBEditsOnly( $sections[2] 
), false, 'Wikibase edits only (section 3)' );
-
-               mw.wbclient.watchlist.toggleOn = false;
-               mw.wbclient.watchlist.toggleSections( $sections );
-
-               strictEqual( $( $sections[0] ).prev().css( 'display' ), 
'block', 'Test section 0 hiding' );
-               strictEqual( $( $sections[1] ).prev().css( 'display' ), 'none', 
'Test section 1 hiding' );
-               strictEqual( $( $sections[2] ).prev().css( 'display' ), 
'block', 'Test section 2 hiding' );
-
-               mw.wbclient.watchlist.toggleOn = true;
-               mw.wbclient.watchlist.toggleSections( $sections );
-
-        strictEqual( $( $sections[1] ).prev().css( 'display' ), 'block', 'Test 
section 1 hiding' );
-
-               $env.remove();
-       });
-
-}( mediaWiki, jQuery, QUnit ) );
diff --git a/client/tests/selenium/special/client_rc_and_wl_spec.rb 
b/client/tests/selenium/special/client_rc_and_wl_spec.rb
index 10f57b6..8b8fe45 100755
--- a/client/tests/selenium/special/client_rc_and_wl_spec.rb
+++ b/client/tests/selenium/special/client_rc_and_wl_spec.rb
@@ -41,9 +41,8 @@
         page.watch_article(article_title)
       end
       visit_page(WatchlistPage) do |page|
-        
page.wlFirstResultUserLink_element.text.downcase.include?(WIKI_ADMIN_USERNAME.downcase).should
 be_false
-                   page.wlShowWikidataToggle?.should be_true
-        page.wlShowWikidataToggle
+        
page.wlFirstResultUserLinkNoWikidata_element.text.downcase.include?(WIKI_ADMIN_USERNAME.downcase).should
 be_false
+        page.show_wikibase
         page.wlFirstResultDiffLink?.should be_true
         page.wlFirstResultUserLink?.should be_true
         
page.wlFirstResultUserLink_element.text.downcase.include?(WIKI_ADMIN_USERNAME.downcase).should
 be_true
@@ -54,14 +53,14 @@
         page.wlFirstResultIDLink_element.text.include?(item_id).should be_true
       end
       visit_page(WatchlistPage) do |page|
-        page.wlShowWikidataToggle
+        page.show_wikibase
         page.wlFirstResultUserLink
       end
       on_page(ItemPage) do |page|
         page.mwFirstHeading.downcase.should == "user:" + 
WIKI_ADMIN_USERNAME.downcase
       end
       visit_page(WatchlistPage) do |page|
-        page.wlShowWikidataToggle
+        page.show_wikibase
         page.wlFirstResultHistoryLink
       end
       on_page(ClientPage) do |page|
@@ -69,7 +68,7 @@
         page.current_url.include?("action=history").should == true
       end
       visit_page(WatchlistPage) do |page|
-        page.wlShowWikidataToggle
+        page.show_wikibase
         page.wlFirstResultDiffLink
       end
       on_page(ClientPage) do |page|
@@ -77,14 +76,14 @@
         page.clientArticleTitle.include?("Difference").should == true
       end
       visit_page(WatchlistPage) do |page|
-        page.wlShowWikidataToggle
+        page.show_wikibase
         page.wlFirstResultLabelLink
       end
       on_page(ClientPage) do |page|
         page.clientArticleTitle.should == article_title
       end
       visit_page(WatchlistPage) do |page|
-        page.wlShowWikidataToggle
+        page.show_wikibase
         page.wlFirstResultIDLink
       end
       on_page(ItemPage) do |page|
@@ -98,7 +97,7 @@
       end
       visit_page(WatchlistPage) do |page|
         @browser.refresh
-        page.wlShowWikidataToggle
+        page.show_wikibase
         page.wait_until do
           page.clientFirstResultComment?
         end
@@ -125,7 +124,7 @@
       end
       visit_page(WatchlistPage) do |page|
         @browser.refresh
-        page.wlShowWikidataToggle
+        page.show_wikibase
         page.wait_until do
           page.clientFirstResultComment?
         end
@@ -234,10 +233,13 @@
       page.logout_user
     end
     visit_page(ClientLoginPage) do |page|
-      page.logout_user
+      page.login_with(CLIENT_ADMIN_USERNAME, CLIENT_ADMIN_PASSWORD)
     end
     visit_page(ClientPage) do |page|
       page.unwatch_article(article_title)
     end
+    visit_page(ClientLoginPage) do |page|
+      page.logout_user
+    end
   end
 end
diff --git a/selenium/lib/pages/watchlist_page.rb 
b/selenium/lib/pages/watchlist_page.rb
index 6dc29fd..311d9f1 100755
--- a/selenium/lib/pages/watchlist_page.rb
+++ b/selenium/lib/pages/watchlist_page.rb
@@ -12,12 +12,20 @@
   page_url WIKI_CLIENT_URL + 'Special:Watchlist'
 
   list_item(:wlFirstResult, :xpath => "//ul[@class='special']/li")
+  link(:wlFirstResultUserLinkNoWikidata, :xpath => 
"//ul[@class='special']/li/a[3]")
   link(:wlFirstResultDiffLink, :xpath => "//ul[@class='special']/li/a[1]")
   link(:wlFirstResultHistoryLink, :xpath => "//ul[@class='special']/li/a[2]")
   link(:wlFirstResultLabelLink, :xpath => "//ul[@class='special']/li/a[3]")
   link(:wlFirstResultIDLink, :xpath => "//ul[@class='special']/li/a[4]")
   link(:wlFirstResultUserLink, :xpath => "//ul[@class='special']/li/a[5]")
-  link(:wlShowWikidataToggle, :id => "wb-toggle-link")
   span(:clientFirstResultComment, :xpath => 
"//ul[@class='special']/li/span[contains(@class,'comment')]")
 
+  def hide_wikibase
+    navigate_to WIKI_CLIENT_URL + "Special:Watchlist" + "?hideWikibase=1"
+  end
+
+  def show_wikibase
+    navigate_to WIKI_CLIENT_URL + "Special:Watchlist" + "?hideWikibase=0"
+  end
+
 end

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I267a755a70cdc7d4937ab70364b34e73da780ef0
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: mw1.21-wmf12
Gerrit-Owner: Anja Jentzsch <anja.jentz...@wikimedia.de>
Gerrit-Reviewer: Hoo man <h...@online.de>

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

Reply via email to