From d6229fdbab72d7a48531a1301a1f8f42355f7579 Mon Sep 17 00:00:00 2001 From: Aaron Schulz Date: Sat, 11 Apr 2009 17:38:21 +0000 Subject: [PATCH] (bug 16607) Added convenience checkboxes for revisiondelete to history pages --- includes/DefaultSettings.php | 2 +- includes/PageHistory.php | 79 ++++++++++++++++++++----------- languages/messages/MessagesEn.php | 1 + maintenance/language/messages.inc | 1 + skins/common/history.js | 35 +++++++++++++- skins/common/wikibits.js | 1 + 6 files changed, 88 insertions(+), 31 deletions(-) diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php index 74f5d5cd40..dc8dfead46 100644 --- a/includes/DefaultSettings.php +++ b/includes/DefaultSettings.php @@ -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: diff --git a/includes/PageHistory.php b/includes/PageHistory.php index fde2167ef5..4ea5488db2 100644 --- a/includes/PageHistory.php +++ b/includes/PageHistory.php @@ -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 "; } diff --git a/languages/messages/MessagesEn.php b/languages/messages/MessagesEn.php index 8620cca046..8e8ce9c47a 100644 --- a/languages/messages/MessagesEn.php +++ b/languages/messages/MessagesEn.php @@ -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', diff --git a/maintenance/language/messages.inc b/maintenance/language/messages.inc index 9c90eb40cc..ac182f0e52 100644 --- a/maintenance/language/messages.inc +++ b/maintenance/language/messages.inc @@ -726,6 +726,7 @@ $wgMessageStructure = array( 'difference', 'lineno', 'compareselectedversions', + 'showhideselectedversions', 'visualcomparison', 'wikicodecomparison', 'editundo', diff --git a/skins/common/history.js b/skins/common/history.js index 6a84b99728..599a3ee11d 100644 --- a/skins/common/history.js +++ b/skins/common/history.js @@ -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); diff --git a/skins/common/wikibits.js b/skins/common/wikibits.js index 397dac9124..ca91418cb3 100644 --- a/skins/common/wikibits.js +++ b/skins/common/wikibits.js @@ -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; -- 2.20.1