User:Awesome Aasim/infiniscroll.js
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 ■ 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(); })() + '">■</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 ■ 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(); })() + '">■</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 ■ 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(); })() + '">■</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 ■ 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(); })() + '">■</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();
}
}
});
}
}
});
}