Anja Jentzsch has submitted this change and it was merged. 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(-) Approvals: Anja Jentzsch: Verified; Looks good to me, approved jenkins-bot: Checked 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> ' - + '<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: merged 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: Anja Jentzsch <anja.jentz...@wikimedia.de> Gerrit-Reviewer: Hoo man <h...@online.de> Gerrit-Reviewer: jenkins-bot _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits