web-manager 4.1.38 → 4.1.39
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.
- package/CHANGELOG.md +5 -0
- package/dist/modules/utilities.js +16 -10
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -14,6 +14,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
|
|
14
14
|
- `Fixed` for any bug fixes.
|
|
15
15
|
- `Security` in case of vulnerabilities.
|
|
16
16
|
|
|
17
|
+
---
|
|
18
|
+
## [4.1.39] - 2026-04-10
|
|
19
|
+
### Changed
|
|
20
|
+
- Converted `Utilities` methods to arrow class fields so `this` is permanently bound to the instance, allowing methods to be destructured, aliased, or passed as callbacks without losing context.
|
|
21
|
+
|
|
17
22
|
---
|
|
18
23
|
## [4.1.38] - 2026-04-08
|
|
19
24
|
### Added
|
|
@@ -1,10 +1,16 @@
|
|
|
1
|
+
// Methods are defined as arrow class fields so `this` is permanently bound to the instance.
|
|
2
|
+
// This means consumers can safely alias or destructure methods without losing context:
|
|
3
|
+
// const { escapeHTML } = webManager.utilities(); // ✓ works
|
|
4
|
+
// const escape = webManager.utilities().escapeHTML; // ✓ works
|
|
5
|
+
// items.map(webManager.utilities().escapeHTML); // ✓ works
|
|
6
|
+
// Safe because webManager.utilities() is a singleton — only one instance ever exists.
|
|
1
7
|
class Utilities {
|
|
2
8
|
constructor(manager) {
|
|
3
9
|
this.manager = manager;
|
|
4
10
|
}
|
|
5
11
|
|
|
6
12
|
// Copy text to clipboard
|
|
7
|
-
clipboardCopy(input) {
|
|
13
|
+
clipboardCopy = (input) => {
|
|
8
14
|
// Get the text from the input
|
|
9
15
|
const text = input && input.nodeType
|
|
10
16
|
? input.value || input.innerText || input.innerHTML
|
|
@@ -38,7 +44,7 @@ class Utilities {
|
|
|
38
44
|
|
|
39
45
|
// Escape HTML to prevent XSS
|
|
40
46
|
// Accepts a string, object, or array — walks recursively, escaping all string values
|
|
41
|
-
escapeHTML(input) {
|
|
47
|
+
escapeHTML = (input) => {
|
|
42
48
|
// Strings — escape and return
|
|
43
49
|
if (typeof input === 'string') {
|
|
44
50
|
this._shadowElement = this._shadowElement || document.createElement('p');
|
|
@@ -83,7 +89,7 @@ class Utilities {
|
|
|
83
89
|
|
|
84
90
|
// Sanitize URL to prevent javascript:, data:, and other dangerous URI schemes
|
|
85
91
|
// Returns the original URL if safe, or '' if rejected
|
|
86
|
-
sanitizeURL(url) {
|
|
92
|
+
sanitizeURL = (url) => {
|
|
87
93
|
if (!url || typeof url !== 'string') {
|
|
88
94
|
return '';
|
|
89
95
|
}
|
|
@@ -102,7 +108,7 @@ class Utilities {
|
|
|
102
108
|
}
|
|
103
109
|
|
|
104
110
|
// Show notification
|
|
105
|
-
showNotification(message, options = {}) {
|
|
111
|
+
showNotification = (message, options = {}) => {
|
|
106
112
|
// Handle different input types
|
|
107
113
|
let text = message;
|
|
108
114
|
let type = options.type || 'info';
|
|
@@ -148,7 +154,7 @@ class Utilities {
|
|
|
148
154
|
}
|
|
149
155
|
|
|
150
156
|
// Get platform (OS)
|
|
151
|
-
getPlatform() {
|
|
157
|
+
getPlatform = () => {
|
|
152
158
|
const ua = navigator.userAgent.toLowerCase();
|
|
153
159
|
const platform = (navigator.userAgentData?.platform || navigator.platform || '').toLowerCase();
|
|
154
160
|
|
|
@@ -178,7 +184,7 @@ class Utilities {
|
|
|
178
184
|
}
|
|
179
185
|
|
|
180
186
|
// Get browser name
|
|
181
|
-
getBrowser() {
|
|
187
|
+
getBrowser = () => {
|
|
182
188
|
const ua = navigator.userAgent;
|
|
183
189
|
|
|
184
190
|
// Order matters - check more specific browsers first
|
|
@@ -217,7 +223,7 @@ class Utilities {
|
|
|
217
223
|
}
|
|
218
224
|
|
|
219
225
|
// Get runtime environment
|
|
220
|
-
getRuntime() {
|
|
226
|
+
getRuntime = () => {
|
|
221
227
|
// Use config runtime if provided
|
|
222
228
|
if (this.manager?.config?.runtime) {
|
|
223
229
|
return this.manager.config.runtime;
|
|
@@ -237,7 +243,7 @@ class Utilities {
|
|
|
237
243
|
}
|
|
238
244
|
|
|
239
245
|
// Check if mobile device
|
|
240
|
-
isMobile() {
|
|
246
|
+
isMobile = () => {
|
|
241
247
|
try {
|
|
242
248
|
// Try modern API first
|
|
243
249
|
const m = navigator.userAgentData?.mobile;
|
|
@@ -257,7 +263,7 @@ class Utilities {
|
|
|
257
263
|
}
|
|
258
264
|
|
|
259
265
|
// Get device based on screen width
|
|
260
|
-
getDevice() {
|
|
266
|
+
getDevice = () => {
|
|
261
267
|
const width = window.innerWidth;
|
|
262
268
|
|
|
263
269
|
// Mobile: < 768px (Bootstrap's md breakpoint)
|
|
@@ -275,7 +281,7 @@ class Utilities {
|
|
|
275
281
|
}
|
|
276
282
|
|
|
277
283
|
// Get context information
|
|
278
|
-
getContext() {
|
|
284
|
+
getContext = () => {
|
|
279
285
|
// Return context information
|
|
280
286
|
return {
|
|
281
287
|
client: {
|
package/package.json
CHANGED