From 6d3c65b5b022c4844710a50a6cf12f18f16c40d9 Mon Sep 17 00:00:00 2001 From: Geoffrey Mon Date: Sat, 6 Jun 2015 20:51:41 -0400 Subject: [PATCH] Use notification on successful preferences save "Now 98.6% leaner!" * Use Xml::tags() for cleaner (old) successbox generation. * Use #mw-preferences-success for the old successbox to make its removal more specific. * Use the mw.notify box for saved prefs message. * Remove box on keydown or mousedown in #preftoc or .prefsection. * Remove success=1 querystring on load to prevent unnecessary reappearance of notification on reload. Bug: T19496 Change-Id: Ibecbe21aa52ddc061d4bb27815f6fa5161a96735 --- includes/specials/SpecialPreferences.php | 6 +++++- resources/Resources.php | 2 ++ .../mediawiki.special.preferences.css | 5 +++++ .../mediawiki.special.preferences.js | 19 ++++++++++++++++++- 4 files changed, 30 insertions(+), 2 deletions(-) diff --git a/includes/specials/SpecialPreferences.php b/includes/specials/SpecialPreferences.php index 7371da7490..f2a315e2f6 100644 --- a/includes/specials/SpecialPreferences.php +++ b/includes/specials/SpecialPreferences.php @@ -50,7 +50,11 @@ class SpecialPreferences extends SpecialPage { if ( $this->getRequest()->getCheck( 'success' ) ) { $out->wrapWikiMsg( - "
\n$1\n
", + Xml::tags( + 'div', + array( 'class' => 'successbox', 'id' => 'mw-preferences-success' ), + '$1' + ), 'savedprefs' ); } diff --git a/resources/Resources.php b/resources/Resources.php index a0c0744d20..da5bcf1b5e 100644 --- a/resources/Resources.php +++ b/resources/Resources.php @@ -1530,10 +1530,12 @@ return array( 'prefs-tabs-navigation-hint', 'prefswarning-warning', 'saveprefs', + 'savedprefs', ), 'dependencies' => array( 'mediawiki.language', 'mediawiki.confirmCloseWindow', + 'mediawiki.notification', ), ), 'mediawiki.special.recentchanges' => array( diff --git a/resources/src/mediawiki.special/mediawiki.special.preferences.css b/resources/src/mediawiki.special/mediawiki.special.preferences.css index e27e34a035..0e71d30b78 100644 --- a/resources/src/mediawiki.special/mediawiki.special.preferences.css +++ b/resources/src/mediawiki.special/mediawiki.special.preferences.css @@ -19,3 +19,8 @@ height: 0; zoom: 1; } + +/* When JS is enabled, .successbox is replaced with a mw.notification */ +.successbox { + display: none; +} diff --git a/resources/src/mediawiki.special/mediawiki.special.preferences.js b/resources/src/mediawiki.special/mediawiki.special.preferences.js index a385ad31af..893db9827e 100644 --- a/resources/src/mediawiki.special/mediawiki.special.preferences.js +++ b/resources/src/mediawiki.special/mediawiki.special.preferences.js @@ -1,3 +1,4 @@ + /*! * JavaScript for Special:Preferences */ @@ -5,7 +6,8 @@ jQuery( function ( $ ) { var $preftoc, $preferences, $fieldsets, $legends, hash, labelFunc, $tzSelect, $tzTextbox, $localtimeHolder, servertime, - $checkBoxes, allowCloseWindow; + $checkBoxes, allowCloseWindow, + notif; labelFunc = function () { return this.id.replace( /^mw-prefsection/g, 'preftab' ); @@ -84,6 +86,21 @@ jQuery( function ( $ ) { } } + // If there is a #mw-preferences-success box and javascript is enabled, use a slick notification instead! + if ( $( '#mw-preferences-success' ).length ) { + notif = mediaWiki.notification.notify( mediaWiki.message( 'savedprefs' ), { autoHide: false } ); + $( '#preftoc, .prefsection' ).one( 'change keydown mousedown', function () { // 'change' event not reliable! + if ( notif ) { + notif.close(); + } + } ); + + // Remove now-unnecessary success=1 querystring to prevent reappearance of notification on reload + if ( history.replaceState ) { + history.replaceState( {}, document.title, document.URL.replace( /&?success=1/, '' ) ); + } + } + // Populate the prefToc $legends.each( function ( i, legend ) { var $legend = $( legend ), -- 2.20.1