@cocreate/elements 1.4.12 → 1.5.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 +7 -0
- package/package.json +1 -1
- package/src/getValue.js +1 -0
- package/src/setValue.js +80 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
# [1.5.0](https://github.com/CoCreate-app/CoCreate-elements/compare/v1.4.12...v1.5.0) (2021-12-27)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* set-value and set-value-key attribute to add placeholders that can be replaced by value onChange ([266cf5f](https://github.com/CoCreate-app/CoCreate-elements/commit/266cf5f7f72869a9a390889d24ddab2fed038c26))
|
|
7
|
+
|
|
1
8
|
## [1.4.12](https://github.com/CoCreate-app/CoCreate-elements/compare/v1.4.11...v1.4.12) (2021-12-24)
|
|
2
9
|
|
|
3
10
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cocreate/elements",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.5.0",
|
|
4
4
|
"description": "Fetch content into any html element by using html5 attributes to query data stored in CoCreate headless CMS. If data is changed it will instantly reflect in html tags as changes are broadcasted in realtime",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"elements",
|
package/src/getValue.js
CHANGED
|
@@ -16,6 +16,7 @@ function initElement(element) {
|
|
|
16
16
|
let valueEl = document.getElementById(id);
|
|
17
17
|
if(!valueEl) return;
|
|
18
18
|
let value = getValue(valueEl)
|
|
19
|
+
if (value)
|
|
19
20
|
setValue(element, value)
|
|
20
21
|
|
|
21
22
|
// if (['INPUT', 'TEXTAREA', 'SELECT'].includes(valueEl.tagName) || valueEl.contentEditable)
|
package/src/setValue.js
CHANGED
|
@@ -1,4 +1,72 @@
|
|
|
1
|
+
import observer from '@cocreate/observer';
|
|
1
2
|
import crud from '@cocreate/crud-client';
|
|
3
|
+
import {getValue} from './getValue';
|
|
4
|
+
|
|
5
|
+
function initSetValues() {
|
|
6
|
+
var elements = document.querySelectorAll('[set-value]');
|
|
7
|
+
initElements(elements);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
function initElements(elements) {
|
|
11
|
+
for (let element of elements)
|
|
12
|
+
initElement(element);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function initElement(element) {
|
|
16
|
+
initEvents(element);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function initEvents(element){
|
|
20
|
+
if (['INPUT', 'TEXTAREA', 'SELECT'].includes(element.tagName) || element.contentEditable)
|
|
21
|
+
element.addEventListener('input', (e) => {
|
|
22
|
+
setValueByFind(e.target);
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
element.addEventListener('updated_by_fetch', (e) => {
|
|
26
|
+
setValueByFind(e.target);
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function setValueByFind(element){
|
|
31
|
+
let key = element.getAttribute('set-value-key');
|
|
32
|
+
if (key)
|
|
33
|
+
key = `{{${key}}}`;
|
|
34
|
+
let value = getValue(element);
|
|
35
|
+
if (!value) return;
|
|
36
|
+
let selector = element.getAttribute('set-value');
|
|
37
|
+
if(!selector) return;
|
|
38
|
+
let elements = document.querySelectorAll(selector);
|
|
39
|
+
|
|
40
|
+
for(let element of elements){
|
|
41
|
+
if (key){
|
|
42
|
+
const regex = new RegExp(key, "g");
|
|
43
|
+
for (let attribute of element.attributes){
|
|
44
|
+
let attrName = attribute.name;
|
|
45
|
+
let attrValue = attribute.value;
|
|
46
|
+
let setAttr = false;
|
|
47
|
+
if (attrValue.includes(key)){
|
|
48
|
+
attrValue = attrValue.replace(regex, value);
|
|
49
|
+
setAttr = true;
|
|
50
|
+
}
|
|
51
|
+
if (attrName.includes(key)){
|
|
52
|
+
element.removeAttribute(key);
|
|
53
|
+
attrName = attrName.replace(regex, value);
|
|
54
|
+
setAttr = true;
|
|
55
|
+
}
|
|
56
|
+
if(setAttr)
|
|
57
|
+
element.setAttribute(attrName, attrValue);
|
|
58
|
+
}
|
|
59
|
+
let html = element.innerHTML;
|
|
60
|
+
if (html.indexOf(key) !== -1){
|
|
61
|
+
html.replace(regex, value);
|
|
62
|
+
element.innerHTML = html;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
else
|
|
66
|
+
setValue(element, value);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
}
|
|
2
70
|
|
|
3
71
|
var setValue = (el, value) => {
|
|
4
72
|
if (value === null || value === undefined) return;
|
|
@@ -144,4 +212,16 @@ function dispatchEvents(el) {
|
|
|
144
212
|
el.dispatchEvent(changeEvent);
|
|
145
213
|
}
|
|
146
214
|
|
|
215
|
+
observer.init({
|
|
216
|
+
name: 'set-value',
|
|
217
|
+
observe: ['addedNodes'],
|
|
218
|
+
target: '[set-value]',
|
|
219
|
+
callback: function(mutation) {
|
|
220
|
+
initElement(mutation.target);
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
initSetValues();
|
|
226
|
+
|
|
147
227
|
export {setValue};
|