The checkboxes are replaced by two columns of radio boxes. If js is available it does some styling tasks/makes sure sensible version combinations are selected.
{
global $wgTitle;
$this->lastdate = $this->lastline = "";
- $url = $wgTitle->getFullURL("-");
- $s = "\n<script type='text/javascript'>
- /*<![CDATA[*/
- var sel = -1;
- function anysel(oid){
- row = document.getElementById(\"ver\" + oid);
- if( row.selected ){
- row.style.backgroundColor=row.oldbg;
- row.selected = 0;
- sel = -1;
- } else {
- row.oldbg = row.style.backgroundColor;
- row.style.backgroundColor=\"lightgrey\";
- row.selected = 1;
- if( sel == -1){
- sel = oid;
- } else {
- dodiff(sel, oid);
- }
- }
- return false;
- }
- function dodiff(oldid, diff){
- if( (diff < oldid && diff != 0) || oldid == 0 ){
- tmp = oldid; oldid = diff; diff = tmp;
- }
- u = \"{$url}diff=\" + diff + \"&oldid=\" + oldid;
- location.href=u;
- }
- /*]]>*/
- </script>";
- $s .= "\n<p>" . wfMsg( "histlegend" ) . "</p>\n<ul class='special'>";
+ $s = "\n<p>" . wfMsg( "histlegend" ).'</p>';
+ $s .="\n<form id=\"pagehistory\" name=\"pagehistory\" action=\"" . $wgTitle->getFullURL("-") . "\" method=\"get\">";
+ $s .= "<input type=\"hidden\" name=\"title\" value=\"".urlencode($wgTitle->getPrefixedDbKey())."\"/>\n";
+ $s .= "" . "\n<ul>";
return $s;
}
$s = $skip ? "" : preg_replace( "/!OLDID![0-9]+!/", $last, $this->lastline );
$s .= "</ul>\n";
+ if( $this->linesonpage > 1) {
+ $s .= '<button type="submit">'.wfMsg('compareselectedversions')."</button><br/><br/>\n";
+ }
+ $s .= "</form>\n";
return $s;
}
$curlink = $cur;
}
$arbitrary = "";
- if( $this->linesonpage > 1)
- $arbitrary = "<input type='checkbox' onclick='anysel($oid)' title='Select any two versions to diff them' />";
- $s .= "({$curlink}) (!OLDID!{$oid}!) $arbitrary . .";
+ if( $this->linesonpage > 1) {
+ # XXX: move title texts to javascript
+ $checkmark = "";
+ if ( !$oid ) {
+ $arbitrary = '<input type="radio" style="visibility:hidden" name="oldid" value="'.$oid.'" title="'.wfMsg('selectolderversionfordiff').'" />';
+ $checkmark = ' checked="checked"';
+ } else {
+ if( $counter == 2 ) $checkmark = ' checked="checked"';
+ $arbitrary = '<input type="radio" name="oldid" value="'.$oid.'" title="'.wfMsg('selectolderversionfordiff').'"'.$checkmark.' />';
+ $checkmark = '';
+ }
+ $arbitrary .= '<input type="radio" name="diff" value="'.$oid.'" title="'.wfMsg('selectnewerversionfordiff').'"'.$checkmark.' />';
+ }
$M = wfMsg( "minoreditletter" );
if ( $isminor ) {
- $s .= " <strong>{$M}</strong>";
+ $s .= "<span class='hflag'>{$M}</span>";
}
- $s .= " <span id='ver$oid'>{$link} . . {$ul}</span>";
+ $s .= "({$curlink}) (!OLDID!{$oid}!) $arbitrary {$link} <span class='hlinedesc'>{$ul}</span>";
if ( "" != $c && "*" != $c ) {
"last" => "last",
"orig" => "orig",
"histlegend" => "Legend: (cur) = difference with current version,
-(last) = difference with preceding version, M = minor edit",
+(last) = difference with preceding version, M = minor edit.<br/>Select any two versions and hit enter or the button at the bottom.",
# Diffs
#
"loadingrev" => "loading revision for diff",
"lineno" => "Line $1:",
"editcurrent" => "Edit the current version of this page",
+'selectnewerversionfordiff' => 'Select a newer version for comparison',
+'selectolderversionfordiff' => 'Select an older version for comparison',
+'compareselectedversions' => 'Compare selected versions',
# Search results
#
margin-right:0.5em;
}
+/* Page history styling */
+/* automatically generated edit summaries */
+.autocomment { color: gray; }
+#pagehistory span.hlinedesc { margin-left: 1.4em }
+#pagehistory span.hflag {
+ margin-left: -1em;
+ font-weight: bold;
+}
+#pagehistory li {
+ border: 1px solid White;
+ padding-left: 1em;
+}
+#pagehistory li.selected {
+ background-color:#f9f9f9;
+ border:1px dashed #aaaaaa;
+}
+
table.diff {
background:white;
}
img { border: none; }
img.tex { vertical-align: middle; }
-/* automatically generated edit summaries */
-.autocomment { color: gray; }
#toc {
border: 1px solid #8888aa;
var is_opera_seven = (window.opera && document.childNodes);
}
+// add any onload functions in this hook (please don't hard-code any events in the xhtml source)
+function onloadhook () {
+ // don't run anything below this for non-dom browsers
+ if(!(document.getElementById && document.getElementsByTagName)) return;
+ histrowinit();
+}
+if (window.addEventListener) window.addEventListener("load",onloadhook,false);
+else if (window.attachEvent) window.attachEvent("onload",onloadhook);
+
+
// document.write special stylesheet links
function addcss ( stylepath ) {
if (is_opera_preseven) {
}
}
+// page history stuff
+// attach event handlers to the input elements on history page
+function histrowinit () {
+ hf = document.getElementById('pagehistory');
+ if(!hf) return;
+ lis = hf.getElementsByTagName('li');
+ for (i=0;i<lis.length;i++) {
+ inputs=lis[i].getElementsByTagName('INPUT');
+ if(inputs[0] && inputs[1]) {
+ inputs[0].onclick = diffcheck;
+ inputs[1].onclick = diffcheck;
+ }
+ }
+ diffcheck();
+}
+// check selection and tweak visibility/class onclick
+function diffcheck() {
+ var dli = false; // the li where the diff radio is checked
+ var oli = false; // the li where the oldid radio is checked
+ hf = document.getElementById('pagehistory');
+ if(!hf) return;
+ lis = hf.getElementsByTagName('li');
+ for (i=0;i<lis.length;i++) {
+ inputs=lis[i].getElementsByTagName('INPUT');
+ if(inputs[1] && inputs[0]) {
+ if(inputs[1].checked || inputs[0].checked) { // this row has a checked radio button
+ if(inputs[1].checked && inputs[0].checked && inputs[0].value == inputs[1].value) return false;
+ if(oli) { // it's the second checked radio
+ if(inputs[1].checked) {
+ oli.className = "selected";
+ return false
+ }
+ } else if (inputs[0].checked) {
+ return false;
+ }
+ if(inputs[0].checked) dli = lis[i];
+ if(!oli) inputs[0].style.visibility = 'hidden';
+ if(dli) inputs[1].style.visibility = 'hidden';
+ lis[i].className = "selected";
+ oli = lis[i];
+ } else { // no radio is checked in this row
+ if(!oli) inputs[0].style.visibility = 'hidden';
+ else inputs[0].style.visibility = 'visible';
+ if(dli) inputs[1].style.visibility = 'hidden';
+ else inputs[1].style.visibility = 'visible';
+ lis[i].className = "";
+ }
+ }
+ }
+}
+
// Timezone stuff
// tz in format [+-]HHMM
function checkTimezone( tz, msg ) {
}
}
+
function toggleToc() {
var toc = document.getElementById('tocinside');
var showlink=document.getElementById('showlink');