User:Greenpickle/rcnst.js: Difference between revisions

From Pikipedia, the Pikmin wiki
Jump to navigation Jump to search
(version 0.9.)
(version 1.0.)
Line 6: Line 6:
         for (i in choice) if (choice[i].tagName == "OPTION" && choice[i].value != "") nslist[choice[i].value] = choice[i].innerHTML;
         for (i in choice) if (choice[i].tagName == "OPTION" && choice[i].value != "") nslist[choice[i].value] = choice[i].innerHTML;
         loglist = [];
         loglist = [];
         days = document.getElementsByClassName("special");
         enhanced = true;
        for (i in days) {
        if (document.getElementById("bodyContent").innerHTML.indexOf('<a title="Special:RecentChanges" href="/index.php?title=Special:RecentChanges&amp;hideenhanced=1">Hide</a> grouped recent changes') == -1) enhanced = false;
            if (days[i].tagName != "UL") continue;
        if (enhanced) {
            items = days[i].childNodes;
            h4s = document.getElementsByTagName("h4");
            for (j = 0; j < items.length; j++) {
            days = [];
                if (items[j].tagName != "LI") continue;
            for (i = 0; i < h4s.length; i++) {
                logname = items[j].getElementsByTagName("a")[0].innerHTML;
                days[i] = h4s[i].nextSibling;
                if (logname != "diff" && logname != "hist" && loglist.indexOf(logname) == -1) loglist.push(logname);
                while (days[i].tagName != "DIV") days[i] = days[i].nextSibling;;
            }
            for (i in days) {
                if (days[i].tagName != "DIV") continue;
                items = days[i].childNodes;
                for (j = 0; j < items.length; j++) {
                    if (items[j].tagName != "TABLE") continue;
                    logname = items[j].getElementsByTagName("a");
                    if (logname[0].getAttribute("href") == "#") logname = logname[2];
                    else logname = logname[0];
                    if (logname.nextSibling.nodeValue.substring(0, 1) == ")" && loglist.indexOf(logname.innerHTML) == -1) loglist.push(logname.innerHTML);
                }
            }
        } else {
            days = document.getElementsByClassName("special");
            for (i in days) {
                if (days[i].tagName != "UL") continue;
                items = days[i].childNodes;
                for (j = 0; j < items.length; j++) {
                    if (items[j].tagName != "LI") continue;
                    logname = items[j].getElementsByTagName("a")[0].innerHTML;
                    if (logname != "diff" && logname != "hist" && loglist.indexOf(logname) == -1) loglist.push(logname);
                }
             }
             }
         }
         }
Line 55: Line 77:
         else RCNSTList[loglist[i]] = false;
         else RCNSTList[loglist[i]] = false;
     }
     }
     days = document.getElementsByClassName("special");
     if (enhanced) {
    for (i in days) {
        h4s = document.getElementsByTagName("h4");
        needh4 = false;
        days = [];
        if (days[i].tagName != "UL") continue;
        for (i = 0; i < h4s.length; i++) {
        items = days[i].childNodes;
            days[i] = h4s[i].nextSibling;
        for (j = 0; j < items.length; j++) {
            while (days[i].tagName != "DIV") days[i] = days[i].nextSibling;;
            if (items[j].tagName != "LI") continue;
        }
            page = items[j].getElementsByTagName("a");
        for (i in days) {
            if (page[0].innerHTML == "diff") n = 2;
            needh4 = false;
            else if (page[0].innerHTML == "hist") n = 1;
            if (days[i].tagName != "DIV") continue;
            if (page[0].innerHTML == "diff" || page[0].innerHTML == "hist") {
            items = days[i].childNodes;
                if (RCNSTPageListInclude.indexOf(page[n].innerHTML) != -1) visible = true;
            for (j = 0; j < items.length; j++) {
                else if (RCNSTPageListExclude.indexOf(page[n].innerHTML) != -1) visible = false;
                if (items[j].tagName != "TABLE") continue;
                page = items[j].getElementsByTagName("a");
                if (page[0].getAttribute("href") == "#") page = page[2];
                else page = page[0];
                if (page.nextSibling.nodeValue.substring(0, 1) == ")") visible = RCNSTList[page.innerHTML];
                 else {
                 else {
                     page = page[0].href;
                     if (RCNSTPageListInclude.indexOf(page.innerHTML) != -1) visible = true;
                     page = page.substring(page.indexOf("?title=") + 7);
                     else if (RCNSTPageListExclude.indexOf(page.innerHTML) != -1) visible = false;
                     page = page.substring(0, page.indexOf("&curid="));
                     else {
                    page = page.substring(0, page.indexOf(":")).replace("_", " ");
                        page = page.innerHTML;
                    page = nslist.indexOf(page);
                        page = page.substring(0, page.indexOf(":")).replace("_", " ");
                    if (page == -1) page = 0;
                        page = nslist.indexOf(page);
                    visible = RCNSTList[page];
                        if (page == -1) page = 0;
                        visible = RCNSTList[page];
                    }
                }
                div = items[j].nextSibling;
                if (!div.tagName) div = div.nextSibling;
                if (visible) {
                    if (items[j].className.indexOf(" rcnsthidden") != -1) items[j].className = items[j].className.substring(0, items[j].className.indexOf(" rcnsthidden"));
                    if (div) if (div.tagName == "DIV") if (div.className.indexOf(" rcnsthidden") != -1) div.className = div.className.substring(0, div.className.indexOf(" rcnsthidden"));
                    needh4 = true;
                } else {
                    if (items[j].className.indexOf(" rcnsthidden") == -1) items[j].className += " rcnsthidden";
                    if (div) if (div.tagName == "DIV") if (div.className.indexOf(" rcnsthidden") == -1) div.className += " rcnsthidden";
                 }
                 }
             } else visible = RCNSTList[page[0].innerHTML];
             }
            if (visible) {
            h4 = days[i].previousSibling;
                if (items[j].className.indexOf(" rcnsthidden") != -1) items[j].className =  items[j].className.substring(0, items[j].className.indexOf(" rcnsthidden"));
            while (h4.tagName != "H4") h4 = h4.previousSibling;
                needh4 = true;
            if (needh4) h4.removeAttribute("class");
            } else if (items[j].className.indexOf(" rcnsthidden") == -1) items[j].className += " rcnsthidden";
            else h4.className = "rcnsthidden";
        }
    } else {
        days = document.getElementsByClassName("special");
        for (i in days) {
            needh4 = false;
            if (days[i].tagName != "UL") continue;
            items = days[i].childNodes;
            for (j = 0; j < items.length; j++) {
                if (items[j].tagName != "LI") continue;
                page = items[j].getElementsByTagName("a");
                if (page[0].innerHTML == "diff") n = 2;
                else if (page[0].innerHTML == "hist") n = 1;
                if (page[0].innerHTML == "diff" || page[0].innerHTML == "hist") {
                    if (RCNSTPageListInclude.indexOf(page[n].innerHTML) != -1) visible = true;
                    else if (RCNSTPageListExclude.indexOf(page[n].innerHTML) != -1) visible = false;
                    else {
                        page = page[0].href;
                        page = page.substring(page.indexOf("?title=") + 7);
                        page = page.substring(0, page.indexOf("&curid="));
                        page = page.substring(0, page.indexOf(":")).replace("_", " ");
                        page = nslist.indexOf(page);
                        if (page == -1) page = 0;
                        visible = RCNSTList[page];
                    }
                } else visible = RCNSTList[page[0].innerHTML];
                if (visible) {
                    if (items[j].className.indexOf(" rcnsthidden") != -1) items[j].className =  items[j].className.substring(0, items[j].className.indexOf(" rcnsthidden"));
                    needh4 = true;
                } else if (items[j].className.indexOf(" rcnsthidden") == -1) items[j].className += " rcnsthidden";
            }
            h4 = days[i].previousSibling;
            while (h4.tagName != "H4") h4 = h4.previousSibling;
            if (needh4) h4.removeAttribute("class");
            else h4.className = "rcnsthidden";
         }
         }
        h4 = days[i].previousSibling;
        while (h4.tagName != "H4") h4 = h4.previousSibling;
        if (needh4) h4.removeAttribute("class");
        else h4.className = "rcnsthidden";
     }
     }
}
}

Revision as of 15:10, October 16, 2009

window.onload = function () {
    if ("".indexOf && "".substring && [].push) {
        if (document.body.className.indexOf("page-Special_RecentChanges") == -1) return;
        choice = document.getElementById("namespace").childNodes;
        nslist = [];
        for (i in choice) if (choice[i].tagName == "OPTION" && choice[i].value != "") nslist[choice[i].value] = choice[i].innerHTML;
        loglist = [];
        enhanced = true;
        if (document.getElementById("bodyContent").innerHTML.indexOf('<a title="Special:RecentChanges" href="/index.php?title=Special:RecentChanges&amp;hideenhanced=1">Hide</a> grouped recent changes') == -1) enhanced = false;
        if (enhanced) {
            h4s = document.getElementsByTagName("h4");
            days = [];
            for (i = 0; i < h4s.length; i++) {
                days[i] = h4s[i].nextSibling;
                while (days[i].tagName != "DIV") days[i] = days[i].nextSibling;;
            }
            for (i in days) {
                if (days[i].tagName != "DIV") continue;
                items = days[i].childNodes;
                for (j = 0; j < items.length; j++) {
                    if (items[j].tagName != "TABLE") continue;
                    logname = items[j].getElementsByTagName("a");
                    if (logname[0].getAttribute("href") == "#") logname = logname[2];
                    else logname = logname[0];
                    if (logname.nextSibling.nodeValue.substring(0, 1) == ")" && loglist.indexOf(logname.innerHTML) == -1) loglist.push(logname.innerHTML);
                }
            }
        } else {
            days = document.getElementsByClassName("special");
            for (i in days) {
                if (days[i].tagName != "UL") continue;
                items = days[i].childNodes;
                for (j = 0; j < items.length; j++) {
                    if (items[j].tagName != "LI") continue;
                    logname = items[j].getElementsByTagName("a")[0].innerHTML;
                    if (logname != "diff" && logname != "hist" && loglist.indexOf(logname) == -1) loglist.push(logname);
                }
            }
        }
        temp = RCNSTList;
        RCNSTList = [];
        for (i in nslist) {
            if (!include && (temp.indexOf(nslist[i]) != -1)) RCNSTList[i] = false;
            else if (include && (temp.indexOf(nslist[i])) == -1) RCNSTList[i] = false;
        }
        for (i in loglist) {
            if (!include && (temp.indexOf(loglist[i]) != -1)) RCNSTList[loglist[i]] = false;
            else if (include && (temp.indexOf(loglist[i])) == -1) RCNSTList[loglist[i]] = false;
        }
        s = RCNSTbeforecheckboxes;
        for (i in nslist) {
            if (RCNSTList[i] == false) insert = '';
            else insert = 'checked="checked"';
            s += RCNSTbeforecheckbox + '<input type="checkbox" ' + insert + 'name="RCNST' + i + '" onclick="RCNSTupdate()" /><label for="RCNST' + i + '">' + nslist[i] + '</label>' + RCNSTaftercheckbox;
        }
        for (i in loglist) {
            if (RCNSTList[loglist[i]] == false) insert = '';
            else insert = 'checked="checked"';
            s += RCNSTbeforecheckbox + '<input type="checkbox" ' + insert + 'name="RCNSTl' + i + '" onclick="RCNSTupdate()" /><label for="RCNSTl' + i + '">' + loglist[i] + '</label>' + RCNSTaftercheckbox;
        }
        s += RCNSTbeforecheckbox + '<input type="button" onclick="RCNSTall()" value="toggle all" />' + RCNSTaftercheckbox;
        s += RCNSTbeforecheckbox + '<input type="button" onclick="RCNSTinvert()" value="invert selection" />' + RCNSTaftercheckbox;
        s += RCNSTbeforecheckbox + '<input type="button" onclick="RCNSTrestore()" value="restore default" />' + RCNSTaftercheckbox;
        document.getElementsByClassName("rcoptions")[0].innerHTML += s;
        RCNSTupdate();
        RCNSTListStore = [];
        for (i in RCNSTList) RCNSTListStore[i] = RCNSTList[i];
    }
}
function RCNSTupdate () {
    for (i in nslist) {
        if (document.getElementsByName("RCNST" + i)[0].checked) RCNSTList[i] = true;
        else RCNSTList[i] = false;
    }
    for (i in loglist) {
        if (document.getElementsByName("RCNSTl" + i)[0].checked) RCNSTList[loglist[i]] = true;
        else RCNSTList[loglist[i]] = false;
    }
    if (enhanced) {
        h4s = document.getElementsByTagName("h4");
        days = [];
        for (i = 0; i < h4s.length; i++) {
            days[i] = h4s[i].nextSibling;
            while (days[i].tagName != "DIV") days[i] = days[i].nextSibling;;
        }
        for (i in days) {
            needh4 = false;
            if (days[i].tagName != "DIV") continue;
            items = days[i].childNodes;
            for (j = 0; j < items.length; j++) {
                if (items[j].tagName != "TABLE") continue;
                page = items[j].getElementsByTagName("a");
                if (page[0].getAttribute("href") == "#") page = page[2];
                else page = page[0];
                if (page.nextSibling.nodeValue.substring(0, 1) == ")") visible = RCNSTList[page.innerHTML];
                else {
                    if (RCNSTPageListInclude.indexOf(page.innerHTML) != -1) visible = true;
                    else if (RCNSTPageListExclude.indexOf(page.innerHTML) != -1) visible = false;
                    else {
                        page = page.innerHTML;
                        page = page.substring(0, page.indexOf(":")).replace("_", " ");
                        page = nslist.indexOf(page);
                        if (page == -1) page = 0;
                        visible = RCNSTList[page];
                    }
                }
                div = items[j].nextSibling;
                if (!div.tagName) div = div.nextSibling;
                if (visible) {
                    if (items[j].className.indexOf(" rcnsthidden") != -1) items[j].className = items[j].className.substring(0, items[j].className.indexOf(" rcnsthidden"));
                    if (div) if (div.tagName == "DIV") if (div.className.indexOf(" rcnsthidden") != -1) div.className = div.className.substring(0, div.className.indexOf(" rcnsthidden"));
                    needh4 = true;
                } else {
                    if (items[j].className.indexOf(" rcnsthidden") == -1) items[j].className += " rcnsthidden";
                    if (div) if (div.tagName == "DIV") if (div.className.indexOf(" rcnsthidden") == -1) div.className += " rcnsthidden";
                }
            }
            h4 = days[i].previousSibling;
            while (h4.tagName != "H4") h4 = h4.previousSibling;
            if (needh4) h4.removeAttribute("class");
            else h4.className = "rcnsthidden";
        }
    } else {
        days = document.getElementsByClassName("special");
        for (i in days) {
            needh4 = false;
            if (days[i].tagName != "UL") continue;
            items = days[i].childNodes;
            for (j = 0; j < items.length; j++) {
                if (items[j].tagName != "LI") continue;
                page = items[j].getElementsByTagName("a");
                if (page[0].innerHTML == "diff") n = 2;
                else if (page[0].innerHTML == "hist") n = 1;
                if (page[0].innerHTML == "diff" || page[0].innerHTML == "hist") {
                    if (RCNSTPageListInclude.indexOf(page[n].innerHTML) != -1) visible = true;
                    else if (RCNSTPageListExclude.indexOf(page[n].innerHTML) != -1) visible = false;
                    else {
                        page = page[0].href;
                        page = page.substring(page.indexOf("?title=") + 7);
                        page = page.substring(0, page.indexOf("&curid="));
                        page = page.substring(0, page.indexOf(":")).replace("_", " ");
                        page = nslist.indexOf(page);
                        if (page == -1) page = 0;
                        visible = RCNSTList[page];
                    }
                } else visible = RCNSTList[page[0].innerHTML];
                if (visible) {
                    if (items[j].className.indexOf(" rcnsthidden") != -1) items[j].className =  items[j].className.substring(0, items[j].className.indexOf(" rcnsthidden"));
                    needh4 = true;
                } else if (items[j].className.indexOf(" rcnsthidden") == -1) items[j].className += " rcnsthidden";
            }
            h4 = days[i].previousSibling;
            while (h4.tagName != "H4") h4 = h4.previousSibling;
            if (needh4) h4.removeAttribute("class");
            else h4.className = "rcnsthidden";
        }
    }
}
function RCNSTall () {
    on = false;
    for (i in RCNSTList) if (!RCNSTList[i]) on = true;
    for (i in nslist) RCNSTList[i] = on;
    for (i in loglist) RCNSTList[loglist[i]] = on;
    RCNSTsetboxes();
    RCNSTupdate();
}
function RCNSTinvert () {
    for (i in RCNSTList) {
        if (RCNSTList[i]) RCNSTList[i] = false;
        else RCNSTList[i] = true;
    }
    RCNSTsetboxes();
    RCNSTupdate();
}
function RCNSTrestore () {
    for (i in RCNSTListStore) RCNSTList[i] = RCNSTListStore[i];
    RCNSTsetboxes();
    RCNSTupdate();
}
function RCNSTsetboxes () {
    for (i in nslist) document.getElementsByName("RCNST" + i)[0].checked = RCNSTList[i];
    for (i in loglist) document.getElementsByName("RCNSTl" + i)[0].checked = RCNSTList[loglist[i]];
}