User:לערי ריינהארט/monobook.js

/* commons:, meta:, b:, n:, q:, s:, wikt:, w: /* Work-around for 01229 */ /* source: w:en:Wikipedia:WikiProject User scripts/Scripts/Fix diff width This script adds scroll bars to wide diffs such as. It replaces the table-based diff layout with a CSS-based layout where the column width is always exactly 50%. Known to work in Firefox, Konqueror, Opera and at least some versions of Internet Explorer. This script is a workaround for Bug 01229. If you have any problems with this script, please let me know. */

// // inline style sheet to keep this whole thing self-contained: mw.util.addCSS(	 '.xdiff { width: 100%; background: white; }'	+ '.xdiff-row { width: 100%; margin: 0 0 3px 0; overflow: hidden; }'	+ '.xdiff-col { width: 49%; margin: 0; float: left; clear: none; position: relative; }'	+ '.xdiff-sign, .xdiff-outer, .xdiff-inner { display: block; margin: 0; }'	+ '.xdiff-sign { position: absolute; top: 0; left: 0; width: 2em; text-align: center; }'	+ '.xdiff-outer { padding: 0 0 0 2em; }'	+ '.xdiff-inner { overflow: auto; overflow-y: visible; width: 100%; }'	+ '.xdiff-inner.diff-addedline { font-size: 85%; background: #cfc; }'	+ '.xdiff-inner.diff-deletedline { font-size: 85%; background: #ffa; }'	+ '.xdiff-inner.diff-context { font-size: 85%; background: #eee; }'	+ (!document.recalc ? '' : // IE kluge: ' * html .xdiff-inner { padding-bottom: expression(this.scrollWidth > this.offsetWidth ? "16px" : 0); }' + ' * html .xdiff-sign { top: expression((this.parentNode.clientHeight - this.offsetHeight)/2 + "px"); }' ) );

$(function {   var diffSigns = new Array;    var fixDiffWidth = function  {        var tables = document.getElementsByTagName('table');

for (var i = 0; i < tables.length; i++) { if (tables[i].className != 'diff') continue; var rows = tables[i].getElementsByTagName('tr');

var diffDiv = document.createElement('div'); diffDiv.className = 'xdiff';

for (var j = 0; j < rows.length; j++) { var rowDiv = document.createElement('div'); rowDiv.className = 'xdiff-row';

var colDiv = null; var cols = rows[j].getElementsByTagName('td'); for (var k = 0; k < cols.length; k++) { if (!colDiv) { colDiv = document.createElement('div'); colDiv.className = 'xdiff-col'; rowDiv.appendChild(colDiv); }                   if (cols[k].getAttribute('colspan') == 2 || cols[k].className.substring(0,5) == 'diff-') { // use spans instead of divs so that an eventual non-js solution will look nice in lynx! var outerSpan = document.createElement('span'); var innerSpan = document.createElement('span'); outerSpan.className = 'xdiff-outer'; innerSpan.className = 'xdiff-inner ' + cols[k].className; innerSpan.style.textAlign = cols[k].getAttribute('align'); for (var node = cols[k].firstChild; node; node = node.nextSibling) innerSpan.appendChild(node.cloneNode(true)); innerSpan.appendChild(document.createTextNode(String.fromCharCode(0xa0))); // add nbsp outerSpan.appendChild(innerSpan); colDiv.appendChild(outerSpan); colDiv = null; // start new column }                   else if (cols[k].firstChild && (cols[k].firstChild.nextSibling || cols[k].firstChild.nodeType != 3 || cols[k].firstChild.nodeValue.match(/\S/))) { // use spans instead of divs so that an eventual non-js solution will look nice in lynx! var signSpan = document.createElement('span'); signSpan.className = 'xdiff-sign'; if (!signSpan.style.setExpression) diffSigns[diffSigns.length] = signSpan; for (var node = cols[k].firstChild; node; node = node.nextSibling) signSpan.appendChild(node.cloneNode(true)); colDiv.appendChild(signSpan); }               }                diffDiv.appendChild(rowDiv); }           tables[i].parentNode.replaceChild(diffDiv, tables[i]); }   };    // finally, a kluge to vertically center the +/- signs var centerDiffSigns = function { for (var i = 0; i < diffSigns.length; i++) { var parentHeight; if (!( parentHeight = diffSigns[i].parentNode )) continue; if (!( parentHeight = parentHeight.clientHeight )) continue; diffSigns[i].style.top = ((parentHeight - diffSigns[i].offsetHeight)/2) + "px"; }   };    fixDiffWidth; if (diffSigns.length) { hookEvent('resize', centerDiffSigns); setTimeout(centerDiffSigns, 250); } });

function bidiSwitchSetup { var editform = document.getElementById("editform"); if (editform == null) { return; }	bidiAddButton(editform, "Default", function(style) {		style.direction = "inherit";		style.unicodeBidi = "inherit";	}); bidiAddButton(editform, "dir=ltr", function(style) {		style.direction = "ltr";	}); bidiAddButton(editform, "dir=rtl", function(style) {		style.direction = "rtl";	}); bidiAddButton(editform, "bidi=normal", function(style) {		style.unicodeBidi = "normal";	}); bidiAddButton(editform, "bidi=override", function(style) {		style.unicodeBidi = "bidi-override";	}); }

function bidiAddButton(before, label, action) { var button = document.createElement("input"); button.type = "button"; button.value = label; button.onclick = function(event) { var box = document.getElementById("wpTextbox1"); if (box == null) { alert("Broken! Edit box missing."); } else { //var style = document.getOverrideStyle(box, null); var style = box.style; action(style); }	}	before.parentNode.insertBefore(button, before); }

hookEvent('load', bidiSwitchSetup);

/* Validation link to toolbar*/ $(function { mw.util.addPortletLink("p-tb", "http://validator.w3.org/check?uri=" + encodeURIComponent(location.href), "XHTML Validate", "t-validate")}); //