@total_onion/onion-modalcontroller 1.0.16 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -8,6 +8,9 @@ on:
|
|
|
8
8
|
types: [created]
|
|
9
9
|
branches:
|
|
10
10
|
- master
|
|
11
|
+
permissions:
|
|
12
|
+
id-token: write # Required for OIDC
|
|
13
|
+
contents: read
|
|
11
14
|
|
|
12
15
|
jobs:
|
|
13
16
|
build:
|
|
@@ -16,19 +19,19 @@ jobs:
|
|
|
16
19
|
- uses: actions/checkout@v2
|
|
17
20
|
- uses: actions/setup-node@v2
|
|
18
21
|
with:
|
|
19
|
-
node-version:
|
|
22
|
+
node-version: 24
|
|
23
|
+
# Ensure npm 11.5.1 or later is installed
|
|
24
|
+
- name: Update npm
|
|
25
|
+
run: npm install -g npm@latest
|
|
20
26
|
- run: npm ci
|
|
21
27
|
|
|
22
|
-
publish
|
|
28
|
+
publish:
|
|
23
29
|
needs: build
|
|
24
30
|
runs-on: ubuntu-latest
|
|
25
31
|
steps:
|
|
26
|
-
- uses: actions/checkout@
|
|
27
|
-
- uses: actions/setup-node@
|
|
32
|
+
- uses: actions/checkout@v4
|
|
33
|
+
- uses: actions/setup-node@v4
|
|
28
34
|
with:
|
|
29
|
-
node-version:
|
|
35
|
+
node-version: 24
|
|
30
36
|
registry-url: https://registry.npmjs.org/
|
|
31
|
-
- run: npm ci
|
|
32
37
|
- run: npm publish
|
|
33
|
-
env:
|
|
34
|
-
NODE_AUTH_TOKEN: ${{secrets.npm_token}}
|
package/onion-modalcontroller.js
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
export default class modalController {
|
|
2
|
-
constructor() {
|
|
2
|
+
constructor(settings = {}) {
|
|
3
3
|
let defaultGlobalSettings = {
|
|
4
4
|
bodyClass: "modal-active",
|
|
5
5
|
activeStateClass: "modal-active",
|
|
6
6
|
enableDebugLogs: true,
|
|
7
7
|
userInteracted: false,
|
|
8
|
+
closeSelector: "#modal-controller-popup__close-btn",
|
|
9
|
+
closeDelay: 0,
|
|
10
|
+
closingClass: "",
|
|
11
|
+
activateDelay: 0,
|
|
8
12
|
};
|
|
9
13
|
this.scanForNewTriggers();
|
|
10
14
|
|
|
@@ -12,7 +16,7 @@ export default class modalController {
|
|
|
12
16
|
return modalController.instance;
|
|
13
17
|
}
|
|
14
18
|
modalController.instance = this;
|
|
15
|
-
this.globalSettings = defaultGlobalSettings;
|
|
19
|
+
this.globalSettings = { ...defaultGlobalSettings, ...settings };
|
|
16
20
|
this.enableDebugLogs = this.globalSettings.enableDebugLogs;
|
|
17
21
|
this.handleModalTriggers();
|
|
18
22
|
this.handleBgClicks();
|
|
@@ -30,12 +34,22 @@ export default class modalController {
|
|
|
30
34
|
});
|
|
31
35
|
}
|
|
32
36
|
handleCloseButtonClicks() {
|
|
33
|
-
const
|
|
34
|
-
|
|
37
|
+
const modalPopup = document.getElementById("modal-controller-popup");
|
|
38
|
+
if (!modalPopup) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const closeButtons = modalPopup.querySelectorAll(
|
|
42
|
+
this.globalSettings.closeSelector || "#modal-controller-popup__close-btn"
|
|
35
43
|
);
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
44
|
+
closeButtons.forEach((closeButton) => {
|
|
45
|
+
if (closeButton.dataset.modalpopupCloseBound === "true") {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
closeButton.dataset.modalpopupCloseBound = "true";
|
|
49
|
+
closeButton.addEventListener("click", () => {
|
|
50
|
+
const modalPopup = document.getElementById("modal-controller-popup");
|
|
51
|
+
this.closePopup(modalPopup);
|
|
52
|
+
});
|
|
39
53
|
});
|
|
40
54
|
}
|
|
41
55
|
handleModalTriggers() {
|
|
@@ -56,7 +70,6 @@ export default class modalController {
|
|
|
56
70
|
</div>`;
|
|
57
71
|
document.body.insertAdjacentHTML("beforeend", modalPopupHtml);
|
|
58
72
|
modalPopup = document.getElementById("modal-controller-popup");
|
|
59
|
-
this.handleCloseButtonClicks();
|
|
60
73
|
}
|
|
61
74
|
if (!modalPopup) {
|
|
62
75
|
return;
|
|
@@ -79,7 +92,15 @@ export default class modalController {
|
|
|
79
92
|
) {
|
|
80
93
|
popupContent.appendChild(modalPopupContent);
|
|
81
94
|
}
|
|
82
|
-
|
|
95
|
+
const activateDelay = Number(this.globalSettings.activateDelay) || 0;
|
|
96
|
+
if (activateDelay > 0) {
|
|
97
|
+
modalPopupContent.classList.remove("active");
|
|
98
|
+
window.setTimeout(() => {
|
|
99
|
+
modalPopupContent.classList.add("active");
|
|
100
|
+
}, activateDelay);
|
|
101
|
+
} else {
|
|
102
|
+
modalPopupContent.classList.add("active");
|
|
103
|
+
}
|
|
83
104
|
requestAnimationFrame(() => {
|
|
84
105
|
modalPopup.classList.add("open");
|
|
85
106
|
document.documentElement.classList.add("lock-position");
|
|
@@ -90,6 +111,9 @@ export default class modalController {
|
|
|
90
111
|
}
|
|
91
112
|
}
|
|
92
113
|
closePopup(modalPopup) {
|
|
114
|
+
if (!modalPopup) {
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
93
117
|
modalPopup.classList.remove("open");
|
|
94
118
|
document.documentElement.classList.remove("lock-position");
|
|
95
119
|
const popupContent = modalPopup.querySelector(
|
|
@@ -100,9 +124,26 @@ export default class modalController {
|
|
|
100
124
|
const activeContents = popupContent.querySelectorAll(
|
|
101
125
|
"[data-modalpopupcontent].active"
|
|
102
126
|
);
|
|
127
|
+
const closeDelay = Number(this.globalSettings.closeDelay) || 0;
|
|
128
|
+
const closingClass = this.globalSettings.closingClass;
|
|
129
|
+
|
|
130
|
+
if (closeDelay > 0 && closingClass) {
|
|
131
|
+
activeContents.forEach((activeContent) => {
|
|
132
|
+
activeContent.classList.add(closingClass);
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
|
|
103
136
|
activeContents.forEach((activeContent) => {
|
|
104
137
|
activeContent.classList.remove("active");
|
|
105
138
|
});
|
|
139
|
+
|
|
140
|
+
if (closeDelay > 0 && closingClass) {
|
|
141
|
+
window.setTimeout(() => {
|
|
142
|
+
activeContents.forEach((activeContent) => {
|
|
143
|
+
activeContent.classList.remove(closingClass);
|
|
144
|
+
});
|
|
145
|
+
}, closeDelay);
|
|
146
|
+
}
|
|
106
147
|
}
|
|
107
148
|
}
|
|
108
149
|
closePopupOnClickOutside(event, modalPopup) {
|