(bug 16607) Added convenience checkboxes for revisiondelete to history pages
authorAaron Schulz <aaron@users.mediawiki.org>
Sat, 11 Apr 2009 17:38:21 +0000 (17:38 +0000)
committerAaron Schulz <aaron@users.mediawiki.org>
Sat, 11 Apr 2009 17:38:21 +0000 (17:38 +0000)
includes/DefaultSettings.php
includes/PageHistory.php
languages/messages/MessagesEn.php
maintenance/language/messages.inc
skins/common/history.js
skins/common/wikibits.js

index 74f5d5c..dc8dfea 100644 (file)
@@ -1477,7 +1477,7 @@ $wgCacheEpoch = '20030516000000';
  * to ensure that client-side caches don't keep obsolete copies of global
  * styles.
  */
-$wgStyleVersion = '209';
+$wgStyleVersion = '210';
 
 
 # Server-side caching:
index fde2167..4ea5488 100644 (file)
@@ -153,33 +153,48 @@ class PageHistory {
         * @return string HTML output
         */
        function beginHistoryList() {
-               global $wgTitle, $wgScript, $wgEnableHtmlDiff;
+               global $wgTitle, $wgUser, $wgScript, $wgEnableHtmlDiff;
                $this->lastdate = '';
                $s = wfMsgExt( 'histlegend', array( 'parse') );
-               $s .= Xml::openElement( 'form', array( 'action' => $wgScript, 'id' => 'mw-history-compare' ) );
+               if( $wgUser->isAllowed('deleterevision') ) {
+                       $revdel = SpecialPage::getTitleFor( 'Revisiondelete' );
+                       $s .= Xml::openElement( 'form',
+                               array(
+                                       'action' => $revdel->getFullUrl(),
+                                       'method' => 'get', 'id' => 'mw-history-revdeleteform',
+                                       'style'  => 'visibility:hidden;float:right;'
+                               )
+                       );
+                       $s .= Xml::hidden( 'target', $wgTitle->getPrefixedDbKey() );
+                       $s .= Xml::hidden( 'oldid', '', array('id'=>'revdel-oldid') );
+                       $s .= Xml::submitButton( wfMsg( 'showhideselectedversions' ) );
+                       $s .= Xml::closeElement( 'form' );
+               }
+               $s .= Xml::openElement( 'form', array( 'action' => $wgScript,
+                       'id' => 'mw-history-compare' ) );
                $s .= Xml::hidden( 'title', $wgTitle->getPrefixedDbKey() );
                if( $wgEnableHtmlDiff ) {
                        $s .= $this->submitButton( wfMsg( 'visualcomparison'),
                                array(
-                                               'name' => 'htmldiff',
-                                               'class'     => 'historysubmit',
-                                               'accesskey' => wfMsg( 'accesskey-visualcomparison' ),
-                                               'title'     => wfMsg( 'tooltip-compareselectedversions' ),
+                                       'name' => 'htmldiff',
+                                       'class'     => 'historysubmit',
+                                       'accesskey' => wfMsg( 'accesskey-visualcomparison' ),
+                                       'title'     => wfMsg( 'tooltip-compareselectedversions' ),
                                )
                        );
                        $s .= $this->submitButton( wfMsg( 'wikicodecomparison'),
                                array(
-                                               'class'     => 'historysubmit',
-                                               'accesskey' => wfMsg( 'accesskey-compareselectedversions' ),
-                                               'title'     => wfMsg( 'tooltip-compareselectedversions' ),
+                                       'class'     => 'historysubmit',
+                                       'accesskey' => wfMsg( 'accesskey-compareselectedversions' ),
+                                       'title'     => wfMsg( 'tooltip-compareselectedversions' ),
                                )
                        );
                } else {
                        $s .= $this->submitButton( wfMsg( 'compareselectedversions'),
                                array(
-                                               'class'     => 'historysubmit',
-                                               'accesskey' => wfMsg( 'accesskey-compareselectedversions' ),
-                                               'title'     => wfMsg( 'tooltip-compareselectedversions' ),
+                                       'class'     => 'historysubmit',
+                                       'accesskey' => wfMsg( 'accesskey-compareselectedversions' ),
+                                       'title'     => wfMsg( 'tooltip-compareselectedversions' ),
                                )
                        );
                }
@@ -198,25 +213,25 @@ class PageHistory {
                if( $wgEnableHtmlDiff ) {
                        $s .= $this->submitButton( wfMsg( 'visualcomparison'),
                                array(
-                                               'name' => 'htmldiff',
-                                               'class'     => 'historysubmit',
-                                               'accesskey' => wfMsg( 'accesskey-visualcomparison' ),
-                                               'title'     => wfMsg( 'tooltip-compareselectedversions' ),
+                                       'name' => 'htmldiff',
+                                       'class'     => 'historysubmit',
+                                       'accesskey' => wfMsg( 'accesskey-visualcomparison' ),
+                                       'title'     => wfMsg( 'tooltip-compareselectedversions' ),
                                )
                        );
                        $s .= $this->submitButton( wfMsg( 'wikicodecomparison'),
                                array(
-                                               'class'     => 'historysubmit',
-                                               'accesskey' => wfMsg( 'accesskey-compareselectedversions' ),
-                                               'title'     => wfMsg( 'tooltip-compareselectedversions' ),
+                                       'class'     => 'historysubmit',
+                                       'accesskey' => wfMsg( 'accesskey-compareselectedversions' ),
+                                       'title'     => wfMsg( 'tooltip-compareselectedversions' ),
                                )
                        );
                } else {
                        $s .= $this->submitButton( wfMsg( 'compareselectedversions'),
                                array(
-                                               'class'     => 'historysubmit',
-                                               'accesskey' => wfMsg( 'accesskey-compareselectedversions' ),
-                                               'title'     => wfMsg( 'tooltip-compareselectedversions' ),
+                                       'class'     => 'historysubmit',
+                                       'accesskey' => wfMsg( 'accesskey-compareselectedversions' ),
+                                       'title'     => wfMsg( 'tooltip-compareselectedversions' ),
                                )
                        );
                }
@@ -268,15 +283,23 @@ class PageHistory {
                $s = "($curlink) ($lastlink) $arbitrary";
 
                if( $wgUser->isAllowed( 'deleterevision' ) ) {
+                       // Hide JS by default for non-JS browsing
+                       $hidden = array( 'style' => 'visibility:hidden' );
+                       // If revision was hidden from sysops
                        if( !$rev->userCan( Revision::DELETED_RESTRICTED ) ) {
-                               // If revision was hidden from sysops
-                               $del = Xml::tags( 'span', array( 'class'=>'mw-revdelundel-link' ), '('.
-                                       $this->message['rev-delundel'].')' );
+                               $del = Xml::check( 'deleterevisions', false,
+                                       $hidden + array('disabled' => 'disabled') );
+                               $del .= Xml::tags( 'span', array( 'class'=>'mw-revdelundel-link' ),
+                                       '(' . $this->message['rev-delundel'] . ')' );
+                       // Otherwise, show the link...
                        } else {
+                               $jsCall = 'updateShowHideForm('.$rev->getId().',this.checked)';
+                               $del = Xml::check( 'showhiderevisions', false,
+                                       $hidden + array('onchange' => $jsCall) );
                                $query = array( 'target' => $this->mTitle->getPrefixedDbkey(),
-                                       'oldid' => $rev->getId()
-                               );
-                               $del = $this->mSkin->revDeleteLink( $query, $rev->isDeleted( Revision::DELETED_RESTRICTED ) );
+                                       'oldid' => $rev->getId() );
+                               $del .= $this->mSkin->revDeleteLink( $query,
+                                       $rev->isDeleted( Revision::DELETED_RESTRICTED ) );
                        }
                        $s .= " $del ";
                }
index 8620cca..8e8ce9c 100644 (file)
@@ -1396,6 +1396,7 @@ Note that using the navigation links will reset this column.',
 'difference'              => '(Difference between revisions)',
 'lineno'                  => 'Line $1:',
 'compareselectedversions' => 'Compare selected versions',
+'showhideselectedversions'  => 'Show/hide selected versions',
 'visualcomparison'        => 'Visual comparison',
 'wikicodecomparison'      => 'Wikitext comparison',
 'editundo'                => 'undo',
index 9c90eb4..ac182f0 100644 (file)
@@ -726,6 +726,7 @@ $wgMessageStructure = array(
                'difference',
                'lineno',
                'compareselectedversions',
+               'showhideselectedversions',
                'visualcomparison',
                'wikicodecomparison',
                'editundo',
index 6a84b99..599a3ee 100644 (file)
@@ -9,6 +9,16 @@ function historyRadios(parent) {
        return radios;
 }
 
+function deleteCheck(parent) {
+       var inputs = parent.getElementsByTagName('input');
+       for (var i = 0; i < inputs.length; i++) {
+               if (inputs[i].name == "showhiderevisions") {
+                       return inputs[i];
+               }
+       }
+       return null;
+}
+
 // check selection and tweak visibility/class onclick
 function diffcheck() {
        var dli = false; // the li where the diff radio is checked
@@ -74,13 +84,14 @@ function diffcheck() {
        return true;
 }
 
-// page history stuff
-// attach event handlers to the input elements on history page
+// Attach event handlers to the input elements on history page
 function histrowinit() {
        var hf = document.getElementById('pagehistory');
        if (!hf) {
                return;
        }
+       var df = document.getElementById('mw-history-revdeleteform');
+       if( df ) df.style.visibility = 'visible'; // Enable JS form
        var lis = hf.getElementsByTagName('li');
        for (var i = 0; i < lis.length; i++) {
                var inputs = historyRadios(lis[i]);
@@ -88,8 +99,28 @@ function histrowinit() {
                        inputs[0].onclick = diffcheck;
                        inputs[1].onclick = diffcheck;
                }
+               var check = deleteCheck(lis[i]);
+               if( df && check ) {
+                       check.style.visibility = 'visible'; // Enable JS form
+               }
        }
        diffcheck();
 }
 
+// Multi-item revision delete. 'checked' is the *previous* state.
+function updateShowHideForm( oldid, checked ) {
+       var formOldids = document.getElementById('revdel-oldid');
+       if( !formOldids ) return;
+       if( checked ) { // add on oldid if checked
+               if( formOldids.value ) {
+                       formOldids.value += ',' + oldid;
+               } else {
+                       formOldids.value = oldid;
+               }
+       } else if( formOldids.value ) { // remove oldid if unchecked
+               var reg = new RegExp( '(^|,)'+oldid+'($|,)' );
+               formOldids.value = formOldids.value.replace( reg, '' );
+       }
+}
+
 hookEvent("load", histrowinit);
index 397dac9..ca91418 100644 (file)
@@ -431,6 +431,7 @@ function checkboxClickHandler(e) {
        }
        for (var i = start; i <= finish; ++i ) {
                checkboxes[i].checked = endState;
+               if( i > start ) checkboxes[i].onchange(); // fire triggers
        }
        lastCheckbox = this.index;
        return true;