MediaWiki:Jony.js

From The iPhone Wiki
Revision as of 00:21, 8 November 2018 by 5urd (talk | contribs) (fix bottom left corners too)
Jump to: navigation, search

Note: After saving, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Go to Menu → Settings (Opera → Preferences on a Mac) and then to Privacy & security → Clear browsing data → Cached images and files.
/**
 * The iPhone Wiki MediaWiki:jony.js
 *   - JavaScript to fix issues regarding the Jony theme
 * Copyright (c) 2013-2018 Cole Johnson <coleharrisjohnson@gmail.com>
 * Licensed under CC BY-SA 4.0 <http://creativecommons.org/licenses/by-sa/4.0/>
 **/

// Automatically adds the "nobborderplz" class to applicable table cells
function autoAddNoBBorderPlzClass() {
    var tables = $("table[class=wikitable]");
    
    for (var tableIdx = 0; tableIdx < tables.length; tableIdx++) {
        var children = tables[tableIdx].children;
        if (children.length > 0 && children[0].localName == "tbody") {
            children = children[0].children; // skip the tbody tag
        }
        var height = children.length;
        for (var rowIdx = 0; rowIdx < height; rowIdx++) {
            var row = children[rowIdx].children;
            var width = row.length; // not true number of columns if there's a rowspan spanning through
            var dist = height - rowIdx;
            for (var colIdx = 0; colIdx < width; colIdx++) {
                var cell = row[colIdx];
                if (cell.rowSpan != 1 && cell.rowSpan == dist) {
                    // this is the last cell in a column, and it has a rowspan reaching the bottom of the table
                    if (cell.className == undefined || cell.className == "") {
                        cell.className = "nobborderplz";
                    } else {
                        cell.className = cell.className + " nobborderplz";
                    }
                }
            }
        }
    }
}

function fixBottomRightTableCorners() {
    var tables = $("table[class=wikitable]");
    
    for (var tableIdx = 0; tableIdx < tables.length; tableIdx++) {
        var fixedCorner = false;
        var children = tables[tableIdx].children;
        if (children.length > 0 && children[0].localName == "tbody") {
            children = children[0].children; // skip the tbody tag
        }
        var height = children.length;
        for (var rowIdx = 0; rowIdx < height; rowIdx++) {
            var row = children[rowIdx].children;
            var width = row.length; // not true number of columns if there's a rowspan spanning through
            var dist = height - rowIdx;
            var cell = row[width - 1];
            if (cell.rowSpan != 1 && cell.rowSpan == dist) {
                // this is the last cell in a row, and it has a rowspan reaching the bottom of the table
                fixedCorner = true;
                if (cell.style == undefined || cell.style == "") {
                    cell.style = "border-bottom-right-radius: 6px";
                } else {
                    cell.style = cell.style + ";border-bottom-right-radius: 6px";
                }
            }
        }
        
        if (fixedCorner) {
            // unround the last row's last column's corner
            var lastRow = children[height - 1].children;
            var lastColumnCell = lastRow[lastRow.length - 1];
            if (lastColumnCell.style == undefined || lastColumnCell.style == "") {
                lastColumnCell.style = "border-bottom-right-radius: 0px";
            } else {
                lastColumnCell.style = lastColumnCell.style + ";border-bottom-right-radius: 0px";
            }
        }
    }
}

function fixBottomLeftTableCorners() {
    var tables = $("table[class=wikitable]");
    
    for (var tableIdx = 0; tableIdx < tables.length; tableIdx++) {
        var fixedCorner = false;
        var children = tables[tableIdx].children;
        if (children.length > 0 && children[0].localName == "tbody") {
            children = children[0].children; // skip the tbody tag
        }
        var height = children.length;
        for (var rowIdx = 0; rowIdx < height; rowIdx++) {
            var row = children[rowIdx].children;
            //var width = row.length; // not true number of columns if there's a rowspan spanning through
            var dist = height - rowIdx;
            var cell = row[0];
            if (cell.rowSpan != 1 && cell.rowSpan == dist) {
                // this is the first cell in a row, and it has a rowspan reaching the bottom of the table
                fixedCorner = true;
                if (cell.style == undefined || cell.style == "") {
                    cell.style = "border-bottom-right-radius: 6px";
                } else {
                    cell.style = cell.style + ";border-bottom-right-radius: 6px";
                }
            }
        }
        
        if (fixedCorner) {
            // unround the last row's first column's corner
            var lastRow = children[height - 1].children;
            var firstColumnCell = lastRow[0];
            if (firstColumnCell.style == undefined || firstColumnCell.style == "") {
                firstColumnCell.style = "border-bottom-right-radius: 0px";
            } else {
                firstColumnCell.style = firstColumnCell.style + ";border-bottom-right-radius: 0px";
            }
        }
    }
}

autoAddNoBBorderPlzClass();
fixBottomRightTableCorners();
fixBottomLeftTableCorners();