leilukin-tumbleblog/modules/cascade/javascript.php

106 lines
3.9 KiB
PHP

<?php
if (!defined('CHYRP_VERSION'))
exit;
?>
var ChyrpAjaxScroll = {
busy: false,
failed: false,
container: null,
auto: <?php esce($config->module_cascade["ajax_scroll_auto"]); ?>,
init: function() {
ChyrpAjaxScroll.container = $(".post").last().parent()[0];
if (typeof ChyrpAjaxScroll.container === "undefined")
return;
if (ChyrpAjaxScroll.auto)
$(window).on("scroll", window, ChyrpAjaxScroll.watch);
else
$("#pagination_next_page").click(ChyrpAjaxScroll.click);
if ("ariaLive" in ChyrpAjaxScroll.container)
ChyrpAjaxScroll.container.ariaLive = "polite";
if ("ariaAtomic" in ChyrpAjaxScroll.container)
ChyrpAjaxScroll.container.ariaAtomic = "false";
if ("ariaRelevant" in ChyrpAjaxScroll.container)
ChyrpAjaxScroll.container.ariaRelevant = "additions";
if ("ariaBusy" in ChyrpAjaxScroll.container)
ChyrpAjaxScroll.container.ariaBusy = "false";
},
click: function(e) {
if (!ChyrpAjaxScroll.failed) {
e.preventDefault();
ChyrpAjaxScroll.fetch();
}
},
watch: function() {
var docViewTop = $(window).scrollTop();
var winHeight = window.innerHeight ? window.innerHeight : $(window).height();
var docHeight = $(document).height();
var docViewBottom = docViewTop + winHeight;
// Trigger fetch on scroll when 8/10 of the page has been viewed.
if (docViewBottom >= (docHeight * 0.8))
ChyrpAjaxScroll.fetch();
},
fetch: function() {
if (!ChyrpAjaxScroll.busy && !ChyrpAjaxScroll.failed) {
ChyrpAjaxScroll.busy = true;
if ("ariaBusy" in ChyrpAjaxScroll.container)
ChyrpAjaxScroll.container.ariaBusy = "true";
var this_post_obj = $(".post").last();
var this_next_obj = $("#pagination_next_page");
var this_next_url = this_next_obj.attr("href");
if (this_next_url && this_post_obj.length) {
$.get(
this_next_url,
function(data) {
var this_next_num = Number(this_next_url.match(/page[=\/]([0-9]+)/i)[1]);
var ajax_next_obj = $(data).find("#pagination_next_page");
var ajax_next_title = $(data).filter("title").text();
// Insert new posts and update page title.
this_post_obj.after($(data).find(".post"));
document.title = ajax_next_title;
// Update location history.
if (!!history.replaceState)
history.replaceState({
"page": this_next_num,
"action": Route.action
}, ajax_next_title, this_next_url);
// Replace #pagination_next_page if a replacement is found.
if (ajax_next_obj) {
this_next_obj.replaceWith(ajax_next_obj);
ChyrpAjaxScroll.busy = false;
if (!ChyrpAjaxScroll.auto)
$("#pagination_next_page").click(ChyrpAjaxScroll.click);
} else {
// That's all folks!
this_next_obj.remove();
}
},
"html"
).fail(ChyrpAjaxScroll.panic);
}
if ("ariaBusy" in ChyrpAjaxScroll.container)
ChyrpAjaxScroll.container.ariaBusy = "false";
}
},
panic: function() {
ChyrpAjaxScroll.failed = true;
Oops.count++;
alert(Oops.message);
}
};
$(document).ready(ChyrpAjaxScroll.init);