@cocreate/elements 1.10.0 → 1.11.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,17 @@
1
+ # [1.11.0](https://github.com/CoCreate-app/CoCreate-elements/compare/v1.10.0...v1.11.0) (2022-07-25)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * if mutation detected only get value for mutated element ([f0681e3](https://github.com/CoCreate-app/CoCreate-elements/commit/f0681e380f59870f0f8ad34eea9ee5b1c3fbde8c))
7
+ * remved isFlat ([d85e120](https://github.com/CoCreate-app/CoCreate-elements/commit/d85e1204647b41efbe2755fd1bf1ade9926d670f))
8
+ * supports getting a value from any element ([2ec2f51](https://github.com/CoCreate-app/CoCreate-elements/commit/2ec2f5156d7bcb15a091ea424c0ab7bb5de200eb))
9
+
10
+
11
+ ### Features
12
+
13
+ * crud.getObjectValueByPath to return value using name containing a dotNotation string ([d158084](https://github.com/CoCreate-app/CoCreate-elements/commit/d15808445001609db85100a1389784739e6d891f))
14
+
1
15
  # [1.10.0](https://github.com/CoCreate-app/CoCreate-elements/compare/v1.9.0...v1.10.0) (2022-07-08)
2
16
 
3
17
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cocreate/elements",
3
- "version": "1.10.0",
3
+ "version": "1.11.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
@@ -4,7 +4,7 @@ import { setValue } from './setValue';
4
4
  const valueEls = new Map();
5
5
 
6
6
  function initGetValues() {
7
- var elements = document.querySelectorAll('[get-value]');
7
+ var elements = document.querySelectorAll('[get-value], [get-value-closest]');
8
8
  initElements(elements);
9
9
  }
10
10
 
@@ -15,15 +15,19 @@ function initElements(elements) {
15
15
  setValueByFind(valueEl);
16
16
  }
17
17
 
18
- function initElement(element) {
19
- let selector = element.getAttribute('get-value');
18
+ function initElement(element, mutation) {
19
+ let selector = element.getAttribute('get-value') || element.getAttribute('get-value-closest');
20
20
  if(!selector) return;
21
21
  if(/{{\s*([\w\W]+)\s*}}/g.test(selector)) return;
22
22
 
23
- let valueEl = document.querySelector(selector);
23
+ let valueEl
24
+ if (element.hasAttribute('get-value-closest'))
25
+ valueEl = element.closest(selector);
26
+ else
27
+ valueEl = document.querySelector(selector);
24
28
  if(!valueEl) return;
25
29
 
26
- initEvents(valueEl, element);
30
+ initEvents(valueEl, element, mutation);
27
31
 
28
32
  element.dispatchEvent(new Event("input", {
29
33
  "bubbles": true
@@ -31,7 +35,7 @@ function initElement(element) {
31
35
 
32
36
  }
33
37
 
34
- function initEvents(valueEl, element){
38
+ function initEvents(valueEl, element, mutation){
35
39
  if (!valueEls.has(valueEl)) {
36
40
  valueEls.set(valueEl, [element]);
37
41
 
@@ -41,17 +45,30 @@ function initEvents(valueEl, element){
41
45
 
42
46
  valueEl.addEventListener('updated_by_fetch', (e) => {
43
47
  setValueByFind(e.target);
44
- });
48
+ });
45
49
  }
46
50
  else
47
51
  valueEls.get(valueEl).push(element);
52
+
53
+ // ToDo: check to see if creates any loops or un wanted save by input event
54
+ if (mutation)
55
+ mutation = [element]
56
+ setValueByFind(valueEl, mutation)
48
57
  }
49
58
 
50
- function setValueByFind(valueEl) {
51
- let value = valueEl.getValue(valueEl);
59
+ function setValueByFind(valueEl, mutation) {
60
+ let value;
61
+ // todo can be removed if all elements have getValue using prototype
62
+ if (valueEl.hasAttribute('value'))
63
+ value = valueEl.getAttribute('value');
64
+ else if(valueEl.getValue)
65
+ value = valueEl.getValue(valueEl);
66
+ else
67
+ value = getValue(valueEl);
52
68
  if (!value) return;
53
- let elements = valueEls.get(valueEl);
69
+ let elements = mutation || valueEls.get(valueEl);
54
70
 
71
+ if (elements)
55
72
  for(let element of elements){
56
73
  let key = element.getAttribute('get-value-key');
57
74
  if (key){
@@ -121,6 +138,9 @@ var getValue = (element) => {
121
138
  else if (element.tagName === 'IFRAME') {
122
139
  value = element.srcdoc;
123
140
  }
141
+ else if (element.hasAttribute('value')){
142
+ value = element.getAttribute('value');
143
+ }
124
144
  else {
125
145
  value = element.innerHTML;
126
146
  }
@@ -138,9 +158,9 @@ function __encryptPassword(str) {
138
158
  observer.init({
139
159
  name: 'get-value',
140
160
  observe: ['addedNodes'],
141
- target: '[get-value]',
161
+ target: '[get-value], [get-value-closest]',
142
162
  callback: function(mutation) {
143
- initElement(mutation.target);
163
+ initElement(mutation.target, true);
144
164
  }
145
165
  });
146
166
 
package/src/index.js CHANGED
@@ -79,15 +79,12 @@ function setData(elements, data) {
79
79
  let selector = `[collection='${collection}'][document_id='${document_id}']:not(cocreate-select, link)`;
80
80
  elements = document.querySelectorAll(selector);
81
81
  }
82
- let encodeData = crud.encodeObject(data.data);
83
82
 
84
83
  elements.forEach((el) => {
85
84
  const { collection, document_id, name, isRead, isUpdate, isCrdt } = crud.getAttr(el);
86
85
  if (el.hasAttribute('actions')) return;
87
86
  if (isRead == "false" || isUpdate == "false" || isCrdt == "true") return;
88
- // let isEditable = el.getAttribute('contenteditable');
89
87
 
90
- // if (data['collection'] == collection && data['document_id'] == document_id && !isEditable) {
91
88
  if (data['collection'] == collection && data['document_id'] == document_id) {
92
89
  let value;
93
90
  let valueType = el.getAttribute('value-type');
@@ -98,8 +95,9 @@ function setData(elements, data) {
98
95
  value = JSON.stringify(data.data[name])
99
96
  value = decodeURIComponent(value)
100
97
  } else
101
- value = encodeData[name];
102
- setValue(el, value);
98
+ value = crud.getObjectValueByPath(data.data, name);
99
+
100
+ setValue(el, value);
103
101
 
104
102
  isRendered = true;
105
103
  }
@@ -122,10 +120,7 @@ function setData(elements, data) {
122
120
 
123
121
  async function save(element) {
124
122
  let value = getValue(element);
125
- let isFlat = false;
126
- // if (element.tagName == "INPUT" && element.type === "checkbox" || element.tagName == "SELECT" && element.hasAttribute('multiple'))
127
- // isFlat = true;
128
- await crud.save(element, value, isFlat);
123
+ await crud.save(element, value);
129
124
  }
130
125
 
131
126
  function __initSocket() {
@@ -145,14 +140,6 @@ function __initEvents(el) {
145
140
  save(el);
146
141
  });
147
142
 
148
- // el.addEventListener('change', function(e) {
149
- // if (el.tagName == 'SELECT') {
150
- // const {isRealtime, isSave, isUpdate} = crud.getAttr(el);
151
- // if (isRealtime == "false" || isSave == "false" || isUpdate == "false") return;
152
- // if (e.detail && e.detail.skip == true) return;
153
- // save(el);
154
- // }
155
- // });
156
143
  elementEvents.set(el, true)
157
144
  }
158
145
  }
package/src/setValue.js CHANGED
@@ -3,7 +3,7 @@ import crud from '@cocreate/crud-client';
3
3
  import { queryDocumentSelectorAll } from '@cocreate/utils';
4
4
 
5
5
  function initSetValues() {
6
- var elements = document.querySelectorAll('[set-value]');
6
+ var elements = document.querySelectorAll('[set-value], [set-value-closest]');
7
7
  initElements(elements);
8
8
  }
9
9
 
@@ -24,6 +24,8 @@ function initEvents(element){
24
24
  element.addEventListener('updated_by_fetch', (e) => {
25
25
  setValueByFind(e.target);
26
26
  });
27
+
28
+ setValueByFind(element);
27
29
  }
28
30
 
29
31
  const setValueMap = new Map();
@@ -31,12 +33,20 @@ function setValueByFind(element){
31
33
  let key = element.getAttribute('set-value-key');
32
34
  if (key)
33
35
  key = `{{${key}}}`;
34
- let value = element.getValue(element);
36
+
37
+ let value
38
+ if(element.getValue)
39
+ value = element.getValue(element);
35
40
  if (!value) return;
41
+
36
42
  let selector = element.getAttribute('set-value');
37
43
  if(!selector) return;
38
- let elements = queryDocumentSelectorAll(selector);
39
-
44
+ let elements;
45
+ if (element.hasAttribute('set-value-closest'))
46
+ elements = [element.closest(selector)];
47
+ else
48
+ elements = queryDocumentSelectorAll(selector);
49
+
40
50
  for(let element of elements){
41
51
  if (key){
42
52
  if (setValueMap.has(element))
@@ -116,7 +126,7 @@ var setValue = (el, value) => {
116
126
  el.setAttribute("value", value);
117
127
  }
118
128
 
119
- if (el.classList.contains('domEditor')) {
129
+ if (el.classList.contains('domEditor') || el.hasAttribute('get-value') || el.hasAttribute('get-value-closest')) {
120
130
  if (el.getAttribute('data-domEditor') == "replace") {
121
131
  let newElement = document.createElement("div");
122
132
  newElement.innerHTML = value;
@@ -215,7 +225,7 @@ function dispatchEvents(el) {
215
225
  observer.init({
216
226
  name: 'set-value',
217
227
  observe: ['addedNodes'],
218
- target: '[set-value]',
228
+ target: '[get-value], [get-value-closest]',
219
229
  callback: function(mutation) {
220
230
  initElement(mutation.target);
221
231
  }