From 36174b76ea9ff6c2e75361865f21b75f212285fa Mon Sep 17 00:00:00 2001 From: Derk-Jan Hartman Date: Fri, 16 May 2014 15:52:52 +0200 Subject: [PATCH] History: Simplify checkboxes script on History pages This should reduce the amount of variables constructed and also switches to a class based implementation, which allows us to do the same with fewer calls touching the DOM. Not supported by IE6. Bug: 51561 Change-Id: I4596b3667f990ef1d8c7ca753e1d80fe285d5614 --- resources/Resources.php | 1 + .../mediawiki.action.history.css | 4 ++ .../mediawiki.action.history.js | 51 +++++++------------ 3 files changed, 23 insertions(+), 33 deletions(-) create mode 100644 resources/src/mediawiki.action/mediawiki.action.history.css diff --git a/resources/Resources.php b/resources/Resources.php index ac83302bcf..ea7d3975cf 100644 --- a/resources/Resources.php +++ b/resources/Resources.php @@ -1024,6 +1024,7 @@ return array( ), 'mediawiki.action.history' => array( 'scripts' => 'resources/src/mediawiki.action/mediawiki.action.history.js', + 'styles' => 'resources/src/mediawiki.action/mediawiki.action.history.css', 'group' => 'mediawiki.action.history', ), 'mediawiki.action.history.diff' => array( diff --git a/resources/src/mediawiki.action/mediawiki.action.history.css b/resources/src/mediawiki.action/mediawiki.action.history.css new file mode 100644 index 0000000000..603a965798 --- /dev/null +++ b/resources/src/mediawiki.action/mediawiki.action.history.css @@ -0,0 +1,4 @@ +#pagehistory li.before input[name="oldid"], +#pagehistory li.after input[name="diff"] { + visibility: hidden; +} diff --git a/resources/src/mediawiki.action/mediawiki.action.history.js b/resources/src/mediawiki.action/mediawiki.action.history.js index 8aa5a1fb2e..ac48c596ae 100644 --- a/resources/src/mediawiki.action/mediawiki.action.history.js +++ b/resources/src/mediawiki.action/mediawiki.action.history.js @@ -12,54 +12,39 @@ jQuery( function ( $ ) { * @param e {jQuery.Event} */ function updateDiffRadios() { - var diffLi = false, // the li where the diff radio is checked - oldLi = false; // the li where the oldid radio is checked + var nextState = 'before', + $li, + $inputs, + $oldidRadio, + $diffRadio; if ( !$lis.length ) { return true; } $lis - .removeClass( 'selected' ) .each( function () { - var $li = $( this ), - $inputs = $li.find( 'input[type="radio"]' ), - $oldidRadio = $inputs.filter( '[name="oldid"]' ).eq( 0 ), - $diffRadio = $inputs.filter( '[name="diff"]' ).eq( 0 ); + $li = $( this ); + $inputs = $li.find( 'input[type="radio"]' ); + $oldidRadio = $inputs.filter( '[name="oldid"]' ).eq( 0 ); + $diffRadio = $inputs.filter( '[name="diff"]' ).eq( 0 ); + + $li.removeClass( 'selected between before after' ); if ( !$oldidRadio.length || !$diffRadio.length ) { return true; } if ( $oldidRadio.prop( 'checked' ) ) { - oldLi = true; - $li.addClass( 'selected' ); - $oldidRadio.css( 'visibility', 'visible' ); - $diffRadio.css( 'visibility', 'hidden' ); - + $li.addClass( 'selected after' ); + nextState = 'after'; } else if ( $diffRadio.prop( 'checked' ) ) { - diffLi = true; - $li.addClass( 'selected' ); - $oldidRadio.css( 'visibility', 'hidden' ); - $diffRadio.css( 'visibility', 'visible' ); - - // This list item has neither checked + $li.addClass( 'selected ' + nextState ); + nextState = 'between'; } else { - // We're below the selected radios - if ( diffLi && oldLi ) { - $oldidRadio.css( 'visibility', 'visible' ); - $diffRadio.css( 'visibility', 'hidden' ); - - // We're between the selected radios - } else if ( diffLi ) { - $diffRadio.css( 'visibility', 'visible' ); - $oldidRadio.css( 'visibility', 'visible' ); - - // We're above the selected radios - } else { - $diffRadio.css( 'visibility', 'visible' ); - $oldidRadio.css( 'visibility', 'hidden' ); - } + // This list item has neither checked + // apply the appropriate class following the previous item. + $li.addClass( nextState ); } } ); -- 2.20.1