User:Awesome Aasim/infiniscroll.js

Source: Wikipedia, the free encyclopedia.
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
if (!infiniscroll) {
    var infiniscroll = {};
    // script that would add infinite scrolling to Special:Contribs, Special:Log, Special:NewPages, and a few other pages
    infiniscroll.urlparams = (new URL(location.href)).searchParams;
    infiniscroll.loading = false;
    $(document).ready(function () {
        if (!infiniscroll.urlparams.get("noinfiniscroll")) {
            var $ul = $('.mw-pager-navigation-bar').parent().children('ul').eq(0);
            $ul.before('<section class="mw-pager-body"></section>');
            $('.mw-pager-body').eq(0).append($ul);
            if ($('.mw-pager-body').length > 0 && (mw.config.get('wgAction') == 'history' || mw.config.get('wgNamespaceNumber') < 0)) {
                var start = function () {
                    $.get(location.href).done(function (result) {
                        $(".mw-pager-body").eq(0).html($(result).find(".mw-pager-body").eq(0).html());
                        $("#mw-content-text").prepend('<div class="mw-message-box-warning mw-message-box warningbox">Infinite scrolling enabled. Press &#9632; to disable.</div>');
                    }).fail(function () {
                        start();
                    });
                };
                start();
                infiniscroll.load = function () {
                    if (!infiniscroll.loading) {
                        infiniscroll.loading = true;
                        var oldnexthtml = $(".mw-nextlink").eq(1).html();
                        var oldnexttext = $(".mw-nextlink").eq(1).text();
                        var nextlink = $(".mw-nextlink").eq(1).attr("href");
                        if (nextlink) {
                            $(".mw-nextlink").eq(1).html('Loading...');
                            var oldselected = [0, 0];
                            $(".mw-pager-body").find("li").each(function (i) {
                                if ($(this).find('input').eq(0).prop("checked")) {
                                    oldselected[0] = i;
                                }
                                if ($(this).find('input').eq(1).prop("checked")) {
                                    oldselected[1] = i;
                                }
                            });
                            $.get(nextlink).done(function (result) {
                                $(result).find(".mw-pager-body").find("li").eq(0).find("input").eq(0).attr("style", null).prop("disabled", false);
					            var $ul = $(result).find('.mw-pager-navigation-bar').parent().children('ul').eq(0);
					            $ul.before('<section class="mw-pager-body"></section>');
					            $(result).find('.mw-pager-body').eq(0).append($ul);
					            console.log($(result).find('.mw-pager-body').eq(0).html());
                                $(".mw-pager-body").eq(0).append($(result).find(".mw-pager-body").eq(0).html());
                                $(".mw-pager-body").find("li").each(function () {
                                    if ($(this).find("input").eq(0).attr("style") || $(this).find("input").eq(0).attr("id")) {
                                        $(this).find("input").eq(0).attr("style", null);
                                        $(this).find("input").eq(0).attr("id", null);
                                        $(this).find("input").eq(0).prop("disabled", false);
                                    }
                                });
                                $(".mw-pager-body").find("li").eq(0).find("input").eq(0).attr("style", "visibility:hidden;");
                                $(".mw-pager-body").find("li").eq(oldselected[1]).find("input").eq(1).click();
                                $(".mw-pager-body").find("li").eq(oldselected[0]).find("input").eq(0).click();
                                if ($(result).find("a.mw-nextlink").eq(1).text()) {
                                    $(".mw-nextlink").eq(1).html(oldnexthtml);
                                    $(".mw-nextlink").eq(1).attr("href", $(result).find(".mw-nextlink").eq(1).attr("href"));
                                } else {
                                    document.getElementsByClassName("mw-nextlink")[1].outerHTML = oldnexttext;
                                    infiniscroll.loadHistory = function () {
                                        return false;
                                    };
                                }
                                $('.mw-pager-body').find('.mw-history-compareselectedversions').remove();
                                infiniscroll.loading = false;
                            }).fail(function () {
                                $(".mw-nextlink").eq(1).html(oldnexthtml);
                                infiniscroll.loading = false;
                            });
                        }
                    }
                };
                $(".mw-nextlink").eq(0).after(' | <a href="' + location.pathname + "?" + (function () { var a = (new URL(location.href)).searchParams; a.set("noinfiniscroll", 1); return a.toString(); })() + '">&#9632;</a>');
                $(".mw-nextlink").eq(1).click(function (e) {
                    e.preventDefault();
                    infiniscroll.load();
                });
                window.onscroll = function (ev) {
                    if ((window.innerHeight + window.scrollY) >= document.body.offsetHeight) {
                        infiniscroll.load();
                    }
                };
                infiniscroll.load();
            } else {
                infiniscroll.loadSpecialPage = function () {
                    // user contributions
                    if ($(".mw-contributions-list, .mw-pager-body").length > 0) {
                        $("#mw-content-text").prepend('<div class="mw-message-box-warning mw-message-box warningbox">Infinite scrolling enabled. Press &#9632; to disable.</div>');
                        infiniscroll.loadContribs = function () {
                            if (!infiniscroll.loading) {
                                infiniscroll.loading = true;
                                var oldnexthtml = $(".mw-nextlink").eq(1).html();
                                var oldnexttext = $(".mw-nextlink").eq(1).text();
                                var nextlink = $(".mw-nextlink").eq(1).attr("href");
                                if (nextlink) {
                                    $(".mw-nextlink").eq(1).html('Loading...');
                                    $.get(nextlink).done(function (result) {
                                        $(".mw-contributions-list, .mw-pager-body").eq(0).append($(result).find(".mw-contributions-list, .mw-pager-body").eq(0).html());
                                        if ($(result).find("a.mw-nextlink").eq(1).text()) {
                                            $(".mw-nextlink").eq(1).html(oldnexthtml);
                                            $(".mw-nextlink").eq(1).attr("href", $(result).find(".mw-nextlink").eq(1).attr("href"));
                                        } else {
                                            document.getElementsByClassName("mw-nextlink")[1].outerHTML = oldnexttext;
                                            infiniscroll.loadContribs = function () {
                                                return false;
                                            };
                                        }
                                        infiniscroll.loading = false;
                                    }).fail(function () {
                                        $(".mw-nextlink").eq(1).html(oldnexthtml);
                                        infiniscroll.loading = false;
                                    });
                                }
                            }
                        };
                        $(".mw-nextlink").eq(0).after(' | <a href="' + location.pathname + "?" + (function () { var a = (new URL(location.href)).searchParams; a.set("noinfiniscroll", 1); return a.toString(); })() + '">&#9632;</a>');
                        $(".mw-nextlink").eq(1).click(function (e) {
                            e.preventDefault();
                            infiniscroll.loadContribs();
                        });
                        window.onscroll = function (ev) {
                            if ((window.innerHeight + window.scrollY) >= document.body.offsetHeight) {
                                infiniscroll.loadContribs();
                            }
                        };
                    }
                    // log pages
                    else if ($(".mw-logevent-loglines, .mw-pager-body").length > 0) {
                        $("#mw-content-text").prepend('<div class="mw-message-box-warning mw-message-box warningbox">Infinite scrolling enabled. Press &#9632; to disable.</div>');
                        infiniscroll.loadLogs = function () {
                            if (!infiniscroll.loading) {
                                infiniscroll.loading = true;
                                var oldnexthtml = $(".mw-nextlink").eq(1).html();
                                var oldnexttext = $(".mw-nextlink").eq(1).text();
                                var nextlink = $(".mw-nextlink").eq(1).attr("href");
                                if (nextlink) {
                                    $(".mw-nextlink").eq(1).html('Loading...');
                                    $.get(nextlink).done(function (result) {
                                        $(".mw-logevent-loglines, .mw-pager-body").eq(0).append($(result).find(".mw-logevent-loglines, .mw-pager-body").eq(0).html());
                                        if ($(result).find("a.mw-nextlink").eq(1).text()) {
                                            $(".mw-nextlink").eq(1).html(oldnexthtml);
                                            $(".mw-nextlink").eq(1).attr("href", $(result).find(".mw-nextlink").eq(1).attr("href"));
                                        } else {
                                            document.getElementsByClassName("mw-nextlink")[1].outerHTML = oldnexttext;
                                            infiniscroll.loadLogs = function () {
                                                return false;
                                            };
                                        }
                                        infiniscroll.loading = false;
                                    }).fail(function () {
                                        $(".mw-nextlink").eq(1).html(oldnexthtml);
                                        infiniscroll.loading = false;
                                    });
                                }
                            }
                        };
                        $(".mw-nextlink").eq(0).after(' | <a href="' + location.pathname + "?" + (function () { var a = (new URL(location.href)).searchParams; a.set("noinfiniscroll", 1); return a.toString(); })() + '">&#9632;</a>');
                        $(".mw-nextlink").eq(1).click(function (e) {
                            e.preventDefault();
                            infiniscroll.loadLogs();
                        });
                        window.onscroll = function (ev) {
                            if ((window.innerHeight + window.scrollY) >= document.body.offsetHeight) {
                                infiniscroll.loadLogs();
                            }
                        };
                    }
                };
                infiniscroll.loadHistoryPage = function () {
                    var start = function () {
                        $.get(location.href).done(function (result) {
                            $("#pagehistory, .mw-pager-body").eq(0).html($(result).find("#pagehistory, .mw-pager-body").eq(0).html());
                            $("#mw-content-text").prepend('<div class="mw-message-box-warning mw-message-box warningbox">Infinite scrolling enabled. Press &#9632; to disable.</div>');
                        }).fail(function () {
                            start();
                        });
                    };
                    start();
                    infiniscroll.loadHistory = function () {
                        if (!infiniscroll.loading) {
                            infiniscroll.loading = true;
                            var oldnexthtml = $(".mw-nextlink").eq(1).html();
                            var oldnexttext = $(".mw-nextlink").eq(1).text();
                            var nextlink = $(".mw-nextlink").eq(1).attr("href");
                            if (nextlink) {
                                $(".mw-nextlink").eq(1).html('Loading...');
                                var oldselected = [0, 0];
                                $("#pagehistory, .mw-pager-body").find("li").each(function (i) {
                                    if ($(this).find('input').eq(0).prop("checked")) {
                                        oldselected[0] = i;
                                    }
                                    if ($(this).find('input').eq(1).prop("checked")) {
                                        oldselected[1] = i;
                                    }
                                });
                                $.get(nextlink).done(function (result) {
                                    $(result).find("#pagehistory, .mw-pager-body").find("li").eq(0).find("input").eq(0).attr("style", null).prop("disabled", false);
                                    $("#pagehistory, .mw-pager-body").eq(0).append($(result).find("#pagehistory, .mw-pager-body").eq(0).html());
                                    $("#pagehistory, .mw-pager-body").find("li").each(function () {
                                        if ($(this).find("input").eq(0).attr("style") || $(this).find("input").eq(0).attr("id")) {
                                            $(this).find("input").eq(0).attr("style", null);
                                            $(this).find("input").eq(0).attr("id", null);
                                            $(this).find("input").eq(0).prop("disabled", false);
                                        }
                                    });
                                    $("#pagehistory, .mw-pager-body").find("li").eq(0).find("input").eq(0).attr("style", "visibility:hidden;");
                                    $("#pagehistory, .mw-pager-body").find("li").eq(oldselected[1]).find("input").eq(1).click();
                                    $("#pagehistory, .mw-pager-body").find("li").eq(oldselected[0]).find("input").eq(0).click();
                                    if ($(result).find("a.mw-nextlink").eq(1).text()) {
                                        $(".mw-nextlink").eq(1).html(oldnexthtml);
                                        $(".mw-nextlink").eq(1).attr("href", $(result).find(".mw-nextlink").eq(1).attr("href"));
                                    } else {
                                        document.getElementsByClassName("mw-nextlink")[1].outerHTML = oldnexttext;
                                        infiniscroll.loadHistory = function () {
                                            return false;
                                        };
                                    }
                                    $('#pagehistory, .mw-pager-body').find('.mw-history-compareselectedversions').remove();
                                    infiniscroll.loading = false;
                                }).fail(function () {
                                    $(".mw-nextlink").eq(1).html(oldnexthtml);
                                    infiniscroll.loading = false;
                                });
                            }
                        }
                    };
                    $(".mw-nextlink").eq(0).after(' | <a href="' + location.pathname + "?" + (function () { var a = (new URL(location.href)).searchParams; a.set("noinfiniscroll", 1); return a.toString(); })() + '">&#9632;</a>');
                    $(".mw-nextlink").eq(1).click(function (e) {
                        e.preventDefault();
                        infiniscroll.loadHistory();
                    });
                    window.onscroll = function (ev) {
                        if ((window.innerHeight + window.scrollY) >= document.body.offsetHeight) {
                            infiniscroll.loadHistory();
                        }
                    };
                };
                $(document).ready(function () {
                    if (!infiniscroll.urlparams.get("noinfiniscroll")) {
                        if (mw.config.get("wgNamespaceNumber") == -1) {
                            infiniscroll.loadSpecialPage();
                        } else if (mw.config.get("wgAction") == "history") {
                            infiniscroll.loadHistoryPage();
                        }
                    }
                });
            }
        }
    });
}