-
Notifications
You must be signed in to change notification settings - Fork 16
/
dontleave.js
42 lines (34 loc) · 1.21 KB
/
dontleave.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
// ~~DontLeave:Feature~~
doaj.dontleave = {
active: false
}
doaj.dontleave.Monitor = class {
constructor(params) {
this.containerSelector = params.containerSelector;
this.elementSelectorEvents = params.elementSelectorEvents || [{"input, select" : "change"}, {"button": "click"}];
this.changed = false;
this.submitting = false;
for (let i = 0; i < this.elementSelectorEvents.length; i++) {
let selectorEvent = this.elementSelectorEvents[i];
let selector = Object.keys(selectorEvent)[0];
let event = selectorEvent[selector];
$(selector, this.containerSelector).bind(event, () => this.changed = true);
}
$(this.containerSelector).on("submit", () => {
this.submitting = true;
})
$(window).bind("beforeunload", (event) => this.beforeUnload(event));
}
beforeUnload(event) {
if (!this.changed || this.submitting) {
event.cancel();
}
return "Any unsaved changes may be lost"
}
submissionFailed() {
this.submitting = false;
}
}
doaj.dontleave.init = function(params) {
doaj.dontleave.active = new doaj.dontleave.Monitor(params);
}