@cocreate/element-prototype 1.16.0 → 1.18.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 CHANGED
@@ -1,3 +1,28 @@
1
+ # [1.18.0](https://github.com/CoCreate-app/CoCreate-element-prototype/compare/v1.17.0...v1.18.0) (2024-01-17)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * handle checkbox value true ([ec73ce0](https://github.com/CoCreate-app/CoCreate-element-prototype/commit/ec73ce0ecfff3a21c2f3b333514ca166ca28a69a))
7
+ * handling checkbox defualt values ([635f262](https://github.com/CoCreate-app/CoCreate-element-prototype/commit/635f2626e7be3117dea6a4603bea45a7d80ba82a))
8
+
9
+
10
+ ### Features
11
+
12
+ * if value matches operators $user_id, $organization_id, $clientId will return from localStorage ([e4bb41a](https://github.com/CoCreate-app/CoCreate-element-prototype/commit/e4bb41a47350d97c64677f68f0d28b356e981122))
13
+
14
+ # [1.17.0](https://github.com/CoCreate-app/CoCreate-element-prototype/compare/v1.16.0...v1.17.0) (2023-12-18)
15
+
16
+
17
+ ### Bug Fixes
18
+
19
+ * password value or empty string ([acd9f55](https://github.com/CoCreate-app/CoCreate-element-prototype/commit/acd9f55438837fccc66bc5156652a5be5ae8d9ec))
20
+
21
+
22
+ ### Features
23
+
24
+ * skip param to dispatch event with sip false ([c5816b1](https://github.com/CoCreate-app/CoCreate-element-prototype/commit/c5816b136d7133125c6c94abe05082a59a93c72c))
25
+
1
26
  # [1.16.0](https://github.com/CoCreate-app/CoCreate-element-prototype/compare/v1.15.0...v1.16.0) (2023-11-25)
2
27
 
3
28
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cocreate/element-prototype",
3
- "version": "1.16.0",
3
+ "version": "1.18.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
@@ -46,10 +46,13 @@ const getValue = (element) => {
46
46
  }
47
47
  });
48
48
  } else {
49
- if (element.checked)
50
- value = element.value || 'true'
51
- else if (!element.value)
52
- value = 'false'
49
+ if (element.checked) {
50
+ if (element.hasAttribute('value'))
51
+ value = element.value || true
52
+ else
53
+ value = true
54
+ } else
55
+ value = false
53
56
 
54
57
  }
55
58
  } else if (element.type === 'radio') {
@@ -60,7 +63,7 @@ const getValue = (element) => {
60
63
  } else if (element.type === 'range') {
61
64
  value = [Number(element.min), Number(element.value)];
62
65
  } else if (element.type === "password") {
63
- value = btoa(value);
66
+ value = btoa(value || '');
64
67
  } else if (element.tagName == "SELECT" && element.hasAttribute('multiple')) {
65
68
  let options = element.selectedOptions;
66
69
  value = [];
@@ -106,6 +109,12 @@ const getValue = (element) => {
106
109
  }
107
110
  }
108
111
 
112
+ if (value === '$user_id')
113
+ value = localStorage.getItem('user_id')
114
+ else if (value === '$organization_id')
115
+ value = localStorage.getItem('organization_id')
116
+ else if (value === '$clientId')
117
+ value = localStorage.getItem('clientId')
109
118
  return value;
110
119
  };
111
120
 
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)
@@ -47,7 +47,7 @@ const setValue = (el, value) => {
47
47
 
48
48
  for (let i = 0; i < inputs.length; i++) {
49
49
  if (inputs[i].value) {
50
- if (value.includes(inputs[i].value))
50
+ if (value === true || value.includes(inputs[i].value))
51
51
  inputs[i].checked = true;
52
52
  else
53
53
  inputs[i].checked = false;
@@ -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
- newScript.attributes = script.attributes;
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: true
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: true
212
+ skip
189
213
  },
190
214
  });
191
215