* @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' ),
)
);
}
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' ),
)
);
}
$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 ";
}
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
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]);
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);