-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathflyout.js
62 lines (52 loc) · 2.06 KB
/
flyout.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
/*
* Script for flyouts
*
* ⓒ 20-700***** *** a.k.a. SDSK
*/
class Flyout {
// Members
flyoutElement = null;
flyoutOutsideMouseDownCallback = (mouseEvent) => {
if(!(mouseEvent.path.find((x) => ((x.classList != undefined && x.classList.contains("flyout_initiator")) || (x.id == this.flyoutElement.id))))) {
this.close();
}
};
// Constructor
constructor(flyoutElement) {
if(flyoutElement) {
this.flyoutElement = flyoutElement;
logDebug("Flyout", `Flyout registered. (element ID : #${flyoutElement.id})`);
} else {
throw new Error("Argument `flyoutElement` is undefined or null, while constructing Flyout class.");
}
}
// Static functions
static registerClickEventForInitiator = (initiatorElement, flyoutObject) => {
initiatorElement.addEventListener("click", () => flyoutObject.show(initiatorElement.dataset["flyoutContentName"]));
};
static isAnyFlyoutShown() {
return document.body.classList.contains("flyout_shown") || false;
}
// Functions
isShown = () => Flyout.isAnyFlyoutShown() && (this.flyoutElement.classList.contains("flyout_shown") || false);
show = (contentName) => {
if(!this.isShown()) {
if(this.flyoutElement.querySelector(".flyout_content.current")) {
this.flyoutElement.querySelectorAll(".flyout_content.current").forEach((v) => v.classList.remove("current"));
}
this.flyoutElement.querySelector(`.flyout_content[data-name='${contentName}']`).classList.add("current");
logDebug("Flyout", `Flyout ${this.flyoutElement.id} is being shown`);
document.body.classList.add("flyout_shown");
this.flyoutElement.classList.add("flyout_shown");
document.addEventListener("mousedown", this.flyoutOutsideMouseDownCallback);
}
};
close = () => {
if(this.isShown()) {
logDebug("Flyout", `Flyout ${this.flyoutElement.id} is being closed`);
document.body.classList.remove("flyout_shown");
this.flyoutElement.classList.remove("flyout_shown");
document.removeEventListener("mousedown", this.flyoutOutsideMouseDownCallback);
}
};
}