/
ajax.js
100 lines (85 loc) 路 2.92 KB
/
ajax.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
const bindAjaxLinks = (root) => {
$(root).find("a.is-not-ajax").click((event) => {
$(".mainmenu").hide();
if (event.target.target === "_blank") {
return;
}
ajaxLoadSpinner.show();
});
$(root).find("a.is-ajax").click((event) => {
event.preventDefault();
event.stopPropagation();
const target = $(event.currentTarget);
const originalUrl = target.attr("href");
let url = `${originalUrl}&only_content=true`;
if (target.hasClass("full-minified")) {
url += "&full_minified=true"
}
const mainMenu = $(".mainmenu");
const isMenuEntry = mainMenu.has(target);
mainMenu.hide();
ajaxLoadSpinner.show();
const contentContainer = $("#content-container");
$(contentContainer).load(url, (response, status, xhr) => {
ajaxLoadSpinner.hide();
if (status === "error") {
const msg = `${xhr.status} ${xhr.statusText}`;
bootbox.alert(
$('<div/>').text(msg).html());
return;
} else if (isMenuEntry) {
mainMenu.find("a").removeClass("active");
target.addClass("active");
}
history.pushState({ajaxUrl: url}, document.title, originalUrl);
bindContentEvents(contentContainer);
initDataTables(contentContainer);
});
});
};
const ajaxGoTo = (url) => {
$("#main-backend-content, #message").hide();
$("#main-content-loadspinner").show();
const contentContainer = $("#content-container");
$(contentContainer).load(url, (response, status, xhr) => {
$("#main-backend-content").show();
$("#main-content-loadspinner").hide();
if (status === "error") {
const msg = `${xhr.status} ${xhr.statusText}`;
bootbox.alert(
$('<div/>').text(msg).html());
return;
}
bindContentEvents(contentContainer);
});
};
const bindContentEvents = (contentContainer) => {
bindAjaxLinks(contentContainer);
initRemoteAlerts(contentContainer);
initSelect2(contentContainer);
addCssClassToInputs(contentContainer);
initBootstrapToggle(contentContainer);
bindTooltips($("body"));
};
const initRemoteAlerts = (rootElement) => {
$(rootElement).find(".remote-alert").click((event) => {
event.preventDefault();
event.stopPropagation();
setWaitCursor();
const url = $(event.currentTarget).data("url");
$.get(url, (result) => {
setDefaultCursor();
bootbox.alert(result);
});
});
};
const ajaxLoadSpinner = {
show: () => {
$("#main-content-loadspinner, #message").show();
$("#main-backend-content").hide();
},
hide: () => {
$("#main-content-loadspinner, #message").hide();
$("#main-backend-content").show();
}
}