|
|
|
@ -10,6 +10,7 @@ ajaxify = window.ajaxify || {};
|
|
|
|
|
var retry = true;
|
|
|
|
|
var previousBodyClass = '';
|
|
|
|
|
|
|
|
|
|
ajaxify.loading = false;
|
|
|
|
|
ajaxify.count = 0;
|
|
|
|
|
ajaxify.currentPage = null;
|
|
|
|
|
|
|
|
|
@ -18,7 +19,26 @@ ajaxify = window.ajaxify || {};
|
|
|
|
|
hooks = _hooks;
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
var _throttleTimer = null;
|
|
|
|
|
var _cachedRequest = null;
|
|
|
|
|
function startThrottle(...args) {
|
|
|
|
|
if (typeof args[0] === "string") {
|
|
|
|
|
_cachedRequest = args;
|
|
|
|
|
}
|
|
|
|
|
if (_cachedRequest && !_throttleTimer) {
|
|
|
|
|
_throttleTimer = setTimeout(() => {
|
|
|
|
|
if (_cachedRequest) {
|
|
|
|
|
ajaxify.go.apply(ajaxify, _cachedRequest);
|
|
|
|
|
_cachedRequest = null;
|
|
|
|
|
}
|
|
|
|
|
_throttleTimer = null;
|
|
|
|
|
}, 500);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ajaxify.go = function (url, callback, quiet) {
|
|
|
|
|
ajaxify.loading = true;
|
|
|
|
|
|
|
|
|
|
// Automatically reconnect to socket and re-ajaxify on success
|
|
|
|
|
if (!socket.connected) {
|
|
|
|
|
app.reconnect();
|
|
|
|
@ -35,11 +55,13 @@ ajaxify = window.ajaxify || {};
|
|
|
|
|
|
|
|
|
|
// Abort subsequent requests if clicked multiple times within a short window of time
|
|
|
|
|
if (ajaxifyTimer && (Date.now() - ajaxifyTimer) < 500) {
|
|
|
|
|
startThrottle(url, callback, quiet);
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
ajaxifyTimer = Date.now();
|
|
|
|
|
|
|
|
|
|
if (ajaxify.handleRedirects(url)) {
|
|
|
|
|
ajaxify.loading = false;
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -60,6 +82,7 @@ ajaxify = window.ajaxify || {};
|
|
|
|
|
// If any listeners alter url and set it to an empty string, abort the ajaxification
|
|
|
|
|
if (url === null) {
|
|
|
|
|
hooks.fire('action:ajaxify.end', { url: url, tpl_url: ajaxify.data.template.name, title: ajaxify.data.title });
|
|
|
|
|
ajaxify.loading = false;
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -73,6 +96,7 @@ ajaxify = window.ajaxify || {};
|
|
|
|
|
(parseInt(err.data.status, 10) !== 302 && parseInt(err.data.status, 10) !== 308)
|
|
|
|
|
)) {
|
|
|
|
|
ajaxify.updateHistory(url, quiet);
|
|
|
|
|
ajaxify.loading = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (err) {
|
|
|
|
@ -138,6 +162,8 @@ ajaxify = window.ajaxify || {};
|
|
|
|
|
var data = err.data;
|
|
|
|
|
var textStatus = err.textStatus;
|
|
|
|
|
|
|
|
|
|
ajaxify.loading = false;
|
|
|
|
|
|
|
|
|
|
if (data) {
|
|
|
|
|
var status = parseInt(data.status, 10);
|
|
|
|
|
if (status === 403 || status === 404 || status === 500 || status === 502 || status === 503) {
|
|
|
|
@ -302,6 +328,18 @@ ajaxify = window.ajaxify || {};
|
|
|
|
|
hooks.fire('action:ajaxify.contentLoaded', { url: url, tpl: tpl_url });
|
|
|
|
|
|
|
|
|
|
app.processPage();
|
|
|
|
|
|
|
|
|
|
ajaxify.loading = false;
|
|
|
|
|
|
|
|
|
|
if (_cachedRequest) {
|
|
|
|
|
if (_throttleTimer) {
|
|
|
|
|
clearTimeout(_throttleTimer);
|
|
|
|
|
_throttleTimer = null;
|
|
|
|
|
}
|
|
|
|
|
ajaxifyTimer = 0;
|
|
|
|
|
ajaxify.go(_cachedRequest[0], _cachedRequest[1], true);
|
|
|
|
|
_cachedRequest = null;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
ajaxify.parseData = function () {
|
|
|
|
@ -439,7 +477,7 @@ ajaxify = window.ajaxify || {};
|
|
|
|
|
});
|
|
|
|
|
}());
|
|
|
|
|
|
|
|
|
|
$(document).ready(function () {
|
|
|
|
|
$(function () {
|
|
|
|
|
var hooks;
|
|
|
|
|
require(['hooks'], function (_hooks) {
|
|
|
|
|
hooks = _hooks;
|
|
|
|
@ -490,8 +528,12 @@ $(document).ready(function () {
|
|
|
|
|
// Special handling for urls with hashes
|
|
|
|
|
if (window.location.pathname === this.pathname && this.hash.length) {
|
|
|
|
|
window.location.hash = this.hash;
|
|
|
|
|
} else if (ajaxify.go(pathname)) {
|
|
|
|
|
e.preventDefault();
|
|
|
|
|
} else {
|
|
|
|
|
var isReplaceLink = $this.parent('li').parent('.nav.nav-pills').length > 0 ||
|
|
|
|
|
$this.parent('li').parent('.pagination').length > 0
|
|
|
|
|
if (ajaxify.go(pathname, null, isReplaceLink)) {
|
|
|
|
|
e.preventDefault();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else if (window.location.pathname !== config.relative_path + '/outgoing') {
|
|
|
|
|
if (config.openOutgoingLinksInNewTab && $.contains(contentEl, this)) {
|
|
|
|
|