@cocreate/element-prototype 1.16.0 → 1.17.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.
- package/CHANGELOG.md +12 -0
- package/package.json +1 -1
- package/src/getValue.js +1 -1
- package/src/setValue.js +37 -13
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
# [1.17.0](https://github.com/CoCreate-app/CoCreate-element-prototype/compare/v1.16.0...v1.17.0) (2023-12-18)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* password value or empty string ([acd9f55](https://github.com/CoCreate-app/CoCreate-element-prototype/commit/acd9f55438837fccc66bc5156652a5be5ae8d9ec))
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* skip param to dispatch event with sip false ([c5816b1](https://github.com/CoCreate-app/CoCreate-element-prototype/commit/c5816b136d7133125c6c94abe05082a59a93c72c))
|
|
12
|
+
|
|
1
13
|
# [1.16.0](https://github.com/CoCreate-app/CoCreate-element-prototype/compare/v1.15.0...v1.16.0) (2023-11-25)
|
|
2
14
|
|
|
3
15
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cocreate/element-prototype",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.17.0",
|
|
4
4
|
"description": "A simple element-prototype component in vanilla javascript. Easily configured using HTML5 data-attributes and/or JavaScript API.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"element-prototype",
|
package/src/getValue.js
CHANGED
|
@@ -60,7 +60,7 @@ const getValue = (element) => {
|
|
|
60
60
|
} else if (element.type === 'range') {
|
|
61
61
|
value = [Number(element.min), Number(element.value)];
|
|
62
62
|
} else if (element.type === "password") {
|
|
63
|
-
value = btoa(value);
|
|
63
|
+
value = btoa(value || '');
|
|
64
64
|
} else if (element.tagName == "SELECT" && element.hasAttribute('multiple')) {
|
|
65
65
|
let options = element.selectedOptions;
|
|
66
66
|
value = [];
|
package/src/setValue.js
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
import { getAttributes } from '@cocreate/utils';
|
|
2
2
|
import { storage } from './getValue';
|
|
3
3
|
|
|
4
|
-
HTMLElement.prototype.setValue = function (value) {
|
|
5
|
-
setValue(this, value)
|
|
4
|
+
HTMLElement.prototype.setValue = function (value, dispatch) {
|
|
5
|
+
setValue(this, value, dispatch)
|
|
6
6
|
};
|
|
7
7
|
|
|
8
|
-
HTMLInputElement.prototype.setValue = function (value) {
|
|
9
|
-
setValue(this, value)
|
|
8
|
+
HTMLInputElement.prototype.setValue = function (value, dispatch) {
|
|
9
|
+
setValue(this, value, dispatch)
|
|
10
10
|
};
|
|
11
11
|
|
|
12
|
-
HTMLHeadingElement.prototype.setValue = function (value) {
|
|
13
|
-
setValue(this, value)
|
|
12
|
+
HTMLHeadingElement.prototype.setValue = function (value, dispatch) {
|
|
13
|
+
setValue(this, value, dispatch)
|
|
14
14
|
};
|
|
15
15
|
|
|
16
16
|
// TODO: check if using a a switch case will provide better performance
|
|
17
|
-
const setValue = (el, value) => {
|
|
17
|
+
const setValue = (el, value, dispatch) => {
|
|
18
18
|
if (value === null || value === undefined) return;
|
|
19
19
|
if (el.hasAttribute('component') || el.hasAttribute('plugin'))
|
|
20
20
|
return storage.set(el, value)
|
|
@@ -78,7 +78,7 @@ const setValue = (el, value) => {
|
|
|
78
78
|
|
|
79
79
|
el.value = value;
|
|
80
80
|
}
|
|
81
|
-
dispatchEvents(el)
|
|
81
|
+
dispatchEvents(el, dispatch)
|
|
82
82
|
} else if (el.tagName === 'IMG' || el.tagName === 'SOURCE') {
|
|
83
83
|
el.src = value;
|
|
84
84
|
} else if (el.tagName === 'IFRAME') {
|
|
@@ -119,6 +119,12 @@ const setValue = (el, value) => {
|
|
|
119
119
|
}
|
|
120
120
|
} else
|
|
121
121
|
el.innerHTML = newElement.innerHTML;
|
|
122
|
+
|
|
123
|
+
let scripts = el.querySelectorAll('script');
|
|
124
|
+
for (let script of scripts) {
|
|
125
|
+
setScript(script)
|
|
126
|
+
}
|
|
127
|
+
|
|
122
128
|
}
|
|
123
129
|
|
|
124
130
|
if (el.hasAttribute("value")) {
|
|
@@ -127,7 +133,7 @@ const setValue = (el, value) => {
|
|
|
127
133
|
}
|
|
128
134
|
|
|
129
135
|
if (el.getAttribute('contenteditable'))
|
|
130
|
-
dispatchEvents(el);
|
|
136
|
+
dispatchEvents(el, dispatch);
|
|
131
137
|
|
|
132
138
|
if (el.tagName == 'HEAD' || el.tagName == 'BODY') {
|
|
133
139
|
el.removeAttribute('array');
|
|
@@ -150,8 +156,26 @@ function setState(el) {
|
|
|
150
156
|
}
|
|
151
157
|
|
|
152
158
|
function setScript(script, value) {
|
|
159
|
+
let srcAttribute = script.src
|
|
160
|
+
if (srcAttribute) {
|
|
161
|
+
let pageOrigin = window.location.origin;
|
|
162
|
+
let srcOrigin;
|
|
163
|
+
|
|
164
|
+
try {
|
|
165
|
+
srcOrigin = new URL(srcAttribute, document.baseURI).origin;
|
|
166
|
+
} catch (e) {
|
|
167
|
+
// Handle invalid URLs
|
|
168
|
+
console.error("Invalid URL in src attribute:", srcAttribute);
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
if (pageOrigin !== srcOrigin)
|
|
172
|
+
return
|
|
173
|
+
}
|
|
174
|
+
|
|
153
175
|
let newScript = document.createElement('script');
|
|
154
|
-
|
|
176
|
+
for (let attr of script.attributes) {
|
|
177
|
+
newScript.setAttribute(attr.name, attr.value);
|
|
178
|
+
}
|
|
155
179
|
newScript.innerHTML = script.innerHTML;
|
|
156
180
|
if (value) {
|
|
157
181
|
if (script.hasAttribute("src"))
|
|
@@ -168,11 +192,11 @@ function __decryptPassword(str) {
|
|
|
168
192
|
return decode_str;
|
|
169
193
|
}
|
|
170
194
|
|
|
171
|
-
function dispatchEvents(el) {
|
|
195
|
+
function dispatchEvents(el, skip = true) {
|
|
172
196
|
let inputEvent = new CustomEvent('input', {
|
|
173
197
|
bubbles: true,
|
|
174
198
|
detail: {
|
|
175
|
-
skip
|
|
199
|
+
skip
|
|
176
200
|
},
|
|
177
201
|
});
|
|
178
202
|
|
|
@@ -185,7 +209,7 @@ function dispatchEvents(el) {
|
|
|
185
209
|
let changeEvent = new CustomEvent('change', {
|
|
186
210
|
bubbles: true,
|
|
187
211
|
detail: {
|
|
188
|
-
skip
|
|
212
|
+
skip
|
|
189
213
|
},
|
|
190
214
|
});
|
|
191
215
|
|