User:Tom/monobook.js

From Homestar Runner Wiki

< User:Tom(Difference between revisions)
Jump to: navigation, search
m (Try fix-diff-width script.)
m (Slight cleanup.)
 
(includes 1 intermediate revision)
Line 1: Line 1:
-
function morelinks() {
+
function morelinks() {
   var tabs = document.getElementById('p-cactions').cloneNode(true);
   var tabs = document.getElementById('p-cactions').cloneNode(true);
   tabs.id = 'mytabs';
   tabs.id = 'mytabs';
   var listitems = tabs.getElementsByTagName('LI');
   var listitems = tabs.getElementsByTagName('LI');
   for (i=0;i<listitems.length;i++) {
   for (i=0;i<listitems.length;i++) {
-
     if(listitems[i].id) listitems[i].id = 'mytabs-' + listitems[i].id;
+
     if(listitems[i].id) { listitems[i].id = 'mytabs-' + listitems[i].id; }
   }
   }
   document.getElementById('column-content').appendChild(tabs);
   document.getElementById('column-content').appendChild(tabs);
-
}
+
}
-
if (window.addEventListener) window.addEventListener("load",morelinks,false);
+
if (window.addEventListener) { window.addEventListener("load",morelinks,false); }
-
else if (window.attachEvent) window.attachEvent("onload",morelinks);
+
else if (window.attachEvent) { window.attachEvent("onload",morelinks); }
  gsBlockInsertBefore = 'pt-mycontris';
  gsBlockInsertBefore = 'pt-mycontris';
Line 19: Line 19:
   var a = document.createElement( 'a' );
   var a = document.createElement( 'a' );
   a.appendChild( document.createTextNode( 'Block user' ) );
   a.appendChild( document.createTextNode( 'Block user' ) );
-
   a.href = 'http://www.hrwiki.org/index.php/Special:Blockip'
+
   a.href = 'http://www.hrwiki.org/index.php/Special:Blockip';
   li.appendChild( a );
   li.appendChild( a );
   if ( ! gsBlockInsertBefore )
   if ( ! gsBlockInsertBefore )
Line 31: Line 31:
   }
   }
  }
  }
-
  if ( window.addEventListener ) window.addEventListener( 'load', BlockLink, false );
+
  if ( window.addEventListener ) { window.addEventListener( 'load', BlockLink, false ); }
-
  else if ( window.attachEvent ) window.attachEvent( 'onload', BlockLink );
+
  else if ( window.attachEvent ) { window.attachEvent( 'onload', BlockLink ); }
-
 
+
-
//http://en.wikipedia.org/wiki/Wikipedia:WikiProject_User_scripts/Scripts/Fix_diff_width
+
-
// inline style sheet to keep this whole thing self-contained:
+
-
document.write('<style type="text/css">' +
+
-
    ' .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"); }') +
+
-
    '<'+'/style>');
+
-
 
+
-
addOnloadHook(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);
+
-
    }
+
-
});
+

Current revision as of 01:56, 24 March 2006

 function morelinks() {
  var tabs = document.getElementById('p-cactions').cloneNode(true);
  tabs.id = 'mytabs';
  var listitems = tabs.getElementsByTagName('LI');
  for (i=0;i<listitems.length;i++) {
    if(listitems[i].id) { listitems[i].id = 'mytabs-' + listitems[i].id; }
  }
  document.getElementById('column-content').appendChild(tabs);
 }
 if (window.addEventListener) { window.addEventListener("load",morelinks,false); }
 else if (window.attachEvent) { window.attachEvent("onload",morelinks); }

 gsBlockInsertBefore = 'pt-mycontris';
 function BlockLink()
 {
   var user = document.getElementById( 'pt-userpage').firstChild.firstChild.data;
   var li = document.createElement( 'li' );
   li.id = 'pt-Block';
   var a = document.createElement( 'a' );
   a.appendChild( document.createTextNode( 'Block user' ) );
   a.href = 'http://www.hrwiki.org/index.php/Special:Blockip';
   li.appendChild( a );
   if ( ! gsBlockInsertBefore )
   {
      document.getElementById( 'pt-logout' ).parentNode.appendChild( li );
   }
   else
   {
       var before = document.getElementById( gsBlockInsertBefore );
       before.appendChild( li, before );
   }
 }
 if ( window.addEventListener ) { window.addEventListener( 'load', BlockLink, false ); }
 else if ( window.attachEvent ) { window.attachEvent( 'onload', BlockLink ); }
Personal tools