Difference between revisions of "MediaWiki:Common.js"
Difference between revisions of "MediaWiki:Common.js"
(Created page with "→Any JavaScript here will be loaded for all users on every page load.: // By User:Pile0nades. // Makes the diff page display as a single column, instead of two. addOnload...") |
|||
Line 2: | Line 2: | ||
// By User:Pile0nades. | // By User:Pile0nades. | ||
// Makes the diff page display as a single column, instead of two. | // Makes the diff page display as a single column, instead of two. | ||
+ | $j(function() { | ||
+ | addOnloadHook(function() { | ||
+ | // ==UserScript== | ||
+ | // @name Wikipedia single column diffs | ||
+ | // @namespace http://mywebsite.com/myscripts | ||
+ | // @description Make Wikipedia diff pages read like patch-format diffs, only one column needed | ||
+ | // @include http://en.wikipedia.org/w/index.php?*&diff=* | ||
+ | // ==/UserScript== | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
+ | // remove the header for the previous revision, and add the next/prev links to the second header | ||
+ | var prevHeader = get("//table[@class='diff'][1]/tbody/tr[1]/td[@class='diff-otitle']"); | ||
+ | var nextHeader = get("//table[@class='diff'][1]/tbody/tr[1]/td[@class='diff-ntitle']"); | ||
+ | var oldedit = get("//table[@class='diff'][1]/tbody/tr[1]/td[@class='diff-otitle']/a[@id='differences-prevlink']"); | ||
+ | var newedit = get("//table[@class='diff'][1]/tbody/tr[1]/td[@class='diff-ntitle']/a[@id='differences-nextlink']"); | ||
+ | for (var i = 0; i < prevHeader.snapshotLength; i++) { | ||
+ | if (oldedit.snapshotLength != 0) { | ||
+ | nextHeader.snapshotItem(i).appendChild(oldedit.snapshotItem(0)); | ||
+ | } | ||
+ | if (oldedit.snapshotLength != 0 && newedit.snapshotLength != 0) { | ||
+ | nextHeader.snapshotItem(i).appendChild(document.createTextNode(" | ")); | ||
+ | } | ||
+ | if (newedit.snapshotLength != 0) { | ||
+ | nextHeader.snapshotItem(i).appendChild(newedit.snapshotItem(0)); | ||
+ | } | ||
+ | remove(prevHeader.snapshotItem(i)); | ||
+ | } | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
+ | // clone rows where the line changed but wasn't added/deleted, and delete where appropriate | ||
+ | var changedLines = get("//table[@class='diff'][1]/tbody/tr/td[@class='diff-addedline' and position()=4]/../td[@class='diff-deletedline' and position()=2]") | ||
+ | for (var i = 0; i < changedLines.snapshotLength; i++) { | ||
+ | var cell = changedLines.snapshotItem(i); | ||
− | + | cell.parentNode.parentNode.insertBefore( | |
− | + | cell.parentNode.cloneNode(true), | |
− | + | cell.parentNode | |
− | + | ); | |
− | + | remove(cell.previousSibling.previousSibling); | |
− | + | remove(cell); | |
− | + | } | |
− | |||
− | |||
− | |||
− | |||
+ | // delete blank cells in the first column to move the added lines into the first column | ||
+ | var blankcells = get("//table[@class='diff'][1]/tbody/tr/td[1]"); | ||
+ | for (var i = 0; i < blankcells.snapshotLength; i++) { | ||
+ | if (blankcells.snapshotItem(i).innerHTML == " ") { | ||
+ | remove(blankcells.snapshotItem(i)); | ||
+ | } | ||
+ | } | ||
− | // delete | + | // delete everything past the second td in each column |
− | var | + | var waste = get("//table[@class='diff'][1]/tbody/tr/td[2]"); |
− | for(var i = 0; i < | + | for (var i = 0; i < waste.snapshotLength; i++) { |
− | + | while (waste.snapshotItem(i).nextSibling) { | |
− | + | remove(waste.snapshotItem(i).nextSibling); | |
− | + | } | |
− | } | + | } |
− | // delete | + | // delete the 2nd line number cell in each column |
− | var | + | var line = get("//table[@class='diff'][1]/tbody/tr/td[@class='diff-lineno'][1]"); |
− | for(var i = 0; i < | + | for (var i = 0; i < line.snapshotLength; i++) { |
− | + | remove(line.snapshotItem(i)); | |
− | + | } | |
− | |||
− | } | ||
− | // delete the | + | // delete the extra cols |
− | var | + | var cols = get("//table[@class='diff'][1]/col"); |
− | for(var i = 0; i < | + | for (var i = 0; i < cols.snapshotLength; i++) { |
− | + | var col = cols.snapshotItem(i); | |
− | } | + | if (col.className == "diff-content") { |
+ | col.style.width = "98%"; | ||
+ | col.removeAttribute("class"); | ||
+ | } | ||
+ | if (i > 1) remove(col); | ||
+ | } | ||
− | // | + | // shorthand function to remove nodes |
− | + | function remove(node) { | |
− | + | node.parentNode.removeChild(node); | |
− | + | } | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | } | ||
− | |||
− | |||
− | |||
− | |||
− | + | // xpath function | |
− | // xpath function | + | function get(query) { |
− | function get(query) { | + | return document.evaluate( |
− | + | query, | |
− | + | document, | |
− | + | null, | |
− | + | XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, | |
− | + | null | |
− | + | ); | |
− | + | } | |
− | } | + | })}); |
− | }); | ||
// | // |
Revision as of 21:57, 2 July 2015
/* Any JavaScript here will be loaded for all users on every page load. */ // By User:Pile0nades. // Makes the diff page display as a single column, instead of two. $j(function() { addOnloadHook(function() { // ==UserScript== // @name Wikipedia single column diffs // @namespace http://mywebsite.com/myscripts // @description Make Wikipedia diff pages read like patch-format diffs, only one column needed // @include http://en.wikipedia.org/w/index.php?*&diff=* // ==/UserScript== // remove the header for the previous revision, and add the next/prev links to the second header var prevHeader = get("//table[@class='diff'][1]/tbody/tr[1]/td[@class='diff-otitle']"); var nextHeader = get("//table[@class='diff'][1]/tbody/tr[1]/td[@class='diff-ntitle']"); var oldedit = get("//table[@class='diff'][1]/tbody/tr[1]/td[@class='diff-otitle']/a[@id='differences-prevlink']"); var newedit = get("//table[@class='diff'][1]/tbody/tr[1]/td[@class='diff-ntitle']/a[@id='differences-nextlink']"); for (var i = 0; i < prevHeader.snapshotLength; i++) { if (oldedit.snapshotLength != 0) { nextHeader.snapshotItem(i).appendChild(oldedit.snapshotItem(0)); } if (oldedit.snapshotLength != 0 && newedit.snapshotLength != 0) { nextHeader.snapshotItem(i).appendChild(document.createTextNode(" | ")); } if (newedit.snapshotLength != 0) { nextHeader.snapshotItem(i).appendChild(newedit.snapshotItem(0)); } remove(prevHeader.snapshotItem(i)); } // clone rows where the line changed but wasn't added/deleted, and delete where appropriate var changedLines = get("//table[@class='diff'][1]/tbody/tr/td[@class='diff-addedline' and position()=4]/../td[@class='diff-deletedline' and position()=2]") for (var i = 0; i < changedLines.snapshotLength; i++) { var cell = changedLines.snapshotItem(i); cell.parentNode.parentNode.insertBefore( cell.parentNode.cloneNode(true), cell.parentNode ); remove(cell.previousSibling.previousSibling); remove(cell); } // delete blank cells in the first column to move the added lines into the first column var blankcells = get("//table[@class='diff'][1]/tbody/tr/td[1]"); for (var i = 0; i < blankcells.snapshotLength; i++) { if (blankcells.snapshotItem(i).innerHTML == " ") { remove(blankcells.snapshotItem(i)); } } // delete everything past the second td in each column var waste = get("//table[@class='diff'][1]/tbody/tr/td[2]"); for (var i = 0; i < waste.snapshotLength; i++) { while (waste.snapshotItem(i).nextSibling) { remove(waste.snapshotItem(i).nextSibling); } } // delete the 2nd line number cell in each column var line = get("//table[@class='diff'][1]/tbody/tr/td[@class='diff-lineno'][1]"); for (var i = 0; i < line.snapshotLength; i++) { remove(line.snapshotItem(i)); } // delete the extra cols var cols = get("//table[@class='diff'][1]/col"); for (var i = 0; i < cols.snapshotLength; i++) { var col = cols.snapshotItem(i); if (col.className == "diff-content") { col.style.width = "98%"; col.removeAttribute("class"); } if (i > 1) remove(col); } // shorthand function to remove nodes function remove(node) { node.parentNode.removeChild(node); } // xpath function function get(query) { return document.evaluate( query, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null ); } })}); //