@cocreate/events 1.5.0 → 1.6.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/demo/index.html +4 -2
- package/docs/index.html +1 -1
- package/package.json +1 -1
- package/src/index.js +161 -73
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
# [1.6.0](https://github.com/CoCreate-app/CoCreate-events/compare/v1.5.0...v1.6.0) (2023-03-16)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* replaced get-value and set-value with a super charged version of CoCreate-events ([5407615](https://github.com/CoCreate-app/CoCreate-events/commit/54076157dc1e3ae764bc1e8d8ce4a84786501449))
|
|
7
|
+
|
|
1
8
|
# [1.5.0](https://github.com/CoCreate-app/CoCreate-events/compare/v1.4.1...v1.5.0) (2023-03-15)
|
|
2
9
|
|
|
3
10
|
|
package/demo/index.html
CHANGED
|
@@ -68,8 +68,10 @@
|
|
|
68
68
|
|
|
69
69
|
<!-- defining key example -->
|
|
70
70
|
<div >
|
|
71
|
-
<
|
|
72
|
-
<
|
|
71
|
+
<div observe-target=".testing" observe-attribute="value">testing this new value</div>
|
|
72
|
+
<input input-target=".testing" input-attribute="value" input-events="input, onload" value="great test">
|
|
73
|
+
<input class="testing {{ty}}">
|
|
74
|
+
<div class="testing {{ty}}">other content</div>
|
|
73
75
|
</div>
|
|
74
76
|
|
|
75
77
|
<span id="keyname" clone-data='{"attributes": {"key": "{{keyname}}", "value": ""}}' {{keyname}}="test" style="margin-right:10px; padding:5px">
|
package/docs/index.html
CHANGED
|
@@ -134,7 +134,7 @@
|
|
|
134
134
|
</div>
|
|
135
135
|
|
|
136
136
|
<div id="demo-preview" class="position:relative overflow:auto background-color:white">
|
|
137
|
-
<div
|
|
137
|
+
<div class="demopreview" class="padding:20px"></div>
|
|
138
138
|
</div>
|
|
139
139
|
|
|
140
140
|
<div class="font-size:20px position:absolute top:10px right:10px opacity:0.6">
|
package/package.json
CHANGED
package/src/index.js
CHANGED
|
@@ -4,34 +4,48 @@ import observer from '@cocreate/observer';
|
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
const CoCreateEvents = {
|
|
7
|
-
|
|
7
|
+
|
|
8
8
|
init: function(prefix, events) {
|
|
9
9
|
if (prefix && events)
|
|
10
|
-
this.
|
|
10
|
+
this.initPrefix(prefix, events);
|
|
11
11
|
else {
|
|
12
|
-
this.
|
|
13
|
-
this.
|
|
14
|
-
this.
|
|
15
|
-
this.
|
|
16
|
-
this.
|
|
17
|
-
this.
|
|
18
|
-
this.
|
|
19
|
-
this.
|
|
12
|
+
this.initPrefix('toggle', ['click']);
|
|
13
|
+
this.initPrefix('click', ['click']);
|
|
14
|
+
this.initPrefix('hover', ['mouseover', 'mouseout']);
|
|
15
|
+
this.initPrefix('mouseover', ['mouseover']);
|
|
16
|
+
this.initPrefix('mouseout', ['mouseout']);
|
|
17
|
+
this.initPrefix('input', ['input']);
|
|
18
|
+
this.initPrefix('change', ['change']);
|
|
19
|
+
this.initPrefix('selected', ['click']);
|
|
20
|
+
this.initPrefix('onload', ['onload']);
|
|
21
|
+
this.initPrefix('observe', ['observer']);
|
|
20
22
|
}
|
|
23
|
+
|
|
24
|
+
let customEventEls = document.querySelectorAll('[event-name]')
|
|
25
|
+
let names = {}
|
|
26
|
+
for (let customEventEl of customEventEls) {
|
|
27
|
+
let name = customEventEl.getAttribute('event-name')
|
|
28
|
+
if(!names[name]) {
|
|
29
|
+
names[name] = name
|
|
30
|
+
this.initPrefix(name);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const self = this
|
|
35
|
+
observer.init({
|
|
36
|
+
name: 'CoCreateEventName',
|
|
37
|
+
observe: ['addedNodes'],
|
|
38
|
+
target: `[event-name]`,
|
|
39
|
+
callback: function(mutation) {
|
|
40
|
+
let name = mutation.target.getAttribute('event-name')
|
|
41
|
+
self.initPrefix(name);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
|
|
21
45
|
},
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
this.__initElementEvent(element || document, prefix, events);
|
|
25
|
-
},
|
|
26
|
-
|
|
27
|
-
__initElementEvent: function(element, prefix, events) {
|
|
46
|
+
|
|
47
|
+
initPrefix: function(prefix, events) {
|
|
28
48
|
const self = this;
|
|
29
|
-
|
|
30
|
-
let selector = `[${prefix}], [${prefix}-value]`
|
|
31
|
-
let elements = document.querySelectorAll(selector)
|
|
32
|
-
for (const el of elements) {
|
|
33
|
-
this.addEvent(el, prefix, events)
|
|
34
|
-
}
|
|
35
49
|
|
|
36
50
|
action.init({
|
|
37
51
|
name: prefix,
|
|
@@ -41,63 +55,129 @@ const CoCreateEvents = {
|
|
|
41
55
|
}
|
|
42
56
|
});
|
|
43
57
|
|
|
58
|
+
let selector = `[${prefix}], [${prefix}-value], [${prefix}-target], [${prefix}-closest], [${prefix}-parent], [${prefix}-next], [${prefix}-previous]`
|
|
59
|
+
|
|
44
60
|
observer.init({
|
|
45
|
-
name: '
|
|
46
|
-
observe: ['addedNodes'],
|
|
47
|
-
|
|
61
|
+
name: 'CoCreateEventattributes',
|
|
62
|
+
observe: ['attributes', 'addedNodes'],
|
|
63
|
+
attributeName: [`${prefix}-events`],
|
|
64
|
+
target: selector,
|
|
48
65
|
callback: function(mutation) {
|
|
49
|
-
self.
|
|
66
|
+
self.initElements([mutation.target], prefix, events)
|
|
50
67
|
}
|
|
51
68
|
});
|
|
52
|
-
|
|
53
69
|
|
|
70
|
+
if (events.includes('observer')) {
|
|
71
|
+
observer.init({
|
|
72
|
+
name: 'observerAttributes',
|
|
73
|
+
observe: ['attributes'],
|
|
74
|
+
attributeName: [`${prefix}-target`, `${prefix}-closest`, `${prefix}-parent`, `${prefix}-next`, `${prefix}-previous`],
|
|
75
|
+
callback: function(mutation) {
|
|
76
|
+
// remove previous observer
|
|
77
|
+
self.initElements([mutation.target], prefix, events)
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
let elements = document.querySelectorAll(selector)
|
|
83
|
+
this.initElements(elements, prefix, events);
|
|
54
84
|
},
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
85
|
+
|
|
86
|
+
elements: new Map(),
|
|
87
|
+
initElements: function(elements, prefix, events = []) {
|
|
88
|
+
const self = this
|
|
89
|
+
for (const el of elements) {
|
|
90
|
+
let prefixes = this.elements.get(el)
|
|
91
|
+
if (!prefixes) {
|
|
92
|
+
prefixes = {[prefix]: events}
|
|
93
|
+
this.elements.set(el, prefixes)
|
|
94
|
+
} else {
|
|
95
|
+
events = prefixes[prefix]
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
let customEvents = el.getAttribute(`${prefix}-events`)
|
|
99
|
+
if (customEvents) {
|
|
100
|
+
customEvents = customEvents.split(',')
|
|
101
|
+
for (let i = 0; i < customEvents.length; i++)
|
|
102
|
+
customEvents[i] = customEvents[i].trim()
|
|
103
|
+
|
|
104
|
+
for (let i = 0; i < events.length; i++)
|
|
105
|
+
el.removeEventListener(events[i], eventFunction)
|
|
106
|
+
|
|
107
|
+
events = customEvents
|
|
108
|
+
prefixes[prefix] = events
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
if (events.includes('onload'))
|
|
112
|
+
this.__updateElements(el, prefix);
|
|
113
|
+
|
|
114
|
+
if (events.includes('observer')) {
|
|
115
|
+
let target;
|
|
116
|
+
for (let attribute of el.attributes) {
|
|
117
|
+
if ([`${prefix}-target`, `${prefix}-closest`, `${prefix}-parent`, `${prefix}-next`, `${prefix}-previous`].includes(attribute.name)) {
|
|
118
|
+
target = attribute.value
|
|
119
|
+
break;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
observer.init({
|
|
124
|
+
observe: ['addedNodes'],
|
|
125
|
+
target,
|
|
126
|
+
callback: function(mutation) {
|
|
127
|
+
self.__updateElements(el, prefix, mutation.target);
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
for (let i = 0; i < events.length; i++) {
|
|
133
|
+
if (events[i] !== 'onload' && events[i] !== 'observer')
|
|
134
|
+
el.addEventListener(events[i], eventFunction);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
function eventFunction(event) {
|
|
61
138
|
// ToDo: apply debounce
|
|
139
|
+
// let debounce;
|
|
62
140
|
// clearTimeout(debounce);
|
|
63
141
|
// debounce = setTimeout(function() {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
142
|
+
const target = event.currentTarget
|
|
143
|
+
if (target) {
|
|
144
|
+
if (target.id == "testtemplate1" || target.id == "testtemplate2")
|
|
145
|
+
console.log(target.id)
|
|
146
|
+
let attribute = target.getAttribute('actions') || ""
|
|
147
|
+
if (attribute.includes(prefix))
|
|
148
|
+
return;
|
|
149
|
+
// if (target.closest(`[actions*="${prefix}"]`))
|
|
150
|
+
// return;
|
|
151
|
+
self.__updateElements(target, prefix);
|
|
152
|
+
|
|
153
|
+
let selector = `[${prefix}], [${prefix}-value], [${prefix}-target], [${prefix}-closest], [${prefix}-parent], [${prefix}-next], [${prefix}-previous]`
|
|
154
|
+
|
|
155
|
+
let parentElement = target.parentElement;
|
|
156
|
+
if (parentElement) {
|
|
157
|
+
do {
|
|
158
|
+
parentElement = parentElement.closest(selector)
|
|
159
|
+
if (parentElement) {
|
|
160
|
+
self.__updateElements(parentElement, prefix);
|
|
161
|
+
parentElement = parentElement.parentElement
|
|
83
162
|
}
|
|
84
|
-
while (parentElement)
|
|
85
|
-
|
|
86
163
|
}
|
|
87
|
-
|
|
164
|
+
while (parentElement)
|
|
165
|
+
|
|
88
166
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
167
|
+
|
|
168
|
+
}
|
|
169
|
+
// }, 500);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
}
|
|
94
174
|
},
|
|
95
175
|
|
|
96
|
-
__updateElements: function(element, prefix) {
|
|
176
|
+
__updateElements: function(element, prefix, target) {
|
|
97
177
|
const self = this;
|
|
98
178
|
// ToDo: support empty value when prefix-attribute defined, add and remove the attribute
|
|
99
179
|
let targetValue = element.getAttribute(`${prefix}-value`) || element.getAttribute(prefix);
|
|
100
|
-
if (!targetValue
|
|
180
|
+
if (!targetValue)
|
|
101
181
|
targetValue = element.getValue()
|
|
102
182
|
if (!targetValue) return
|
|
103
183
|
|
|
@@ -107,6 +187,8 @@ const CoCreateEvents = {
|
|
|
107
187
|
}
|
|
108
188
|
|
|
109
189
|
let targetAttribute = element.getAttribute(`${prefix}-attribute`) || 'class';
|
|
190
|
+
let targetText = element.getAttribute(`${prefix}-text`);
|
|
191
|
+
let targetHtml = element.getAttribute(`${prefix}-html`);
|
|
110
192
|
let targetSelector = element.getAttribute(`${prefix}-target`);
|
|
111
193
|
let targetClosest = element.getAttribute(`${prefix}-closest`);
|
|
112
194
|
let targetParent = element.getAttribute(`${prefix}-parent`);
|
|
@@ -161,30 +243,30 @@ const CoCreateEvents = {
|
|
|
161
243
|
});
|
|
162
244
|
}
|
|
163
245
|
|
|
164
|
-
let targetElements = [element];
|
|
165
|
-
if (targetClosest) {
|
|
166
|
-
element = element.closest(targetClosest);
|
|
167
|
-
}
|
|
168
246
|
values = values.map(x => x.trim());
|
|
169
|
-
|
|
247
|
+
let targetElements = [element];
|
|
248
|
+
if (target) {
|
|
249
|
+
self.setValue(prefix, target, targetAttribute, values, targetKey);
|
|
250
|
+
} else if (targetSelector) {
|
|
170
251
|
if (/{{\s*([\w\W]+)\s*}}/g.test(targetSelector)) return;
|
|
171
252
|
targetElements = queryDocumentSelectorAll(targetSelector);
|
|
172
253
|
targetElements.forEach((el) => self.setValue(prefix, el, targetAttribute, values, targetKey));
|
|
173
|
-
}
|
|
174
|
-
|
|
254
|
+
} else if (targetClosest) {
|
|
255
|
+
element = element.closest(targetClosest);
|
|
256
|
+
self.setValue(prefix, element, targetAttribute, values, targetKey);
|
|
257
|
+
} else if (targetParent) {
|
|
175
258
|
element.parentElement.querySelectorAll(targetParent).forEach((el) =>
|
|
176
259
|
self.setValue(prefix, el, targetAttribute, values, targetKey)
|
|
177
260
|
);
|
|
178
|
-
|
|
261
|
+
} else if (targetNext) {
|
|
179
262
|
el.nextElementSibling.querySelectorAll(targetNext).forEach((el) =>
|
|
180
263
|
self.setValue(prefix, el, targetAttribute, values, targetKey)
|
|
181
264
|
);
|
|
182
|
-
|
|
265
|
+
} else if (targetPrevious) {
|
|
183
266
|
el.previousElementSibling.querySelectorAll(targetPrevious).forEach((el) =>
|
|
184
267
|
self.setValue(prefix, el, targetAttribute, values, targetKey)
|
|
185
268
|
);
|
|
186
|
-
|
|
187
|
-
self.setValue(prefix, element, targetAttribute, values, targetKey);
|
|
269
|
+
}
|
|
188
270
|
|
|
189
271
|
document.dispatchEvent(new CustomEvent(`${prefix}End`, {
|
|
190
272
|
detail: {}
|
|
@@ -224,6 +306,12 @@ const CoCreateEvents = {
|
|
|
224
306
|
} else {
|
|
225
307
|
if (attrName === 'value') {
|
|
226
308
|
oldValue = element.getValue()
|
|
309
|
+
} else if (attrName === 'text') {
|
|
310
|
+
attrValues = element.getAttribute(attrName).split(' ').map(x => x.trim());
|
|
311
|
+
oldValue = values.filter(x => attrValues.includes(x))[0] || '';
|
|
312
|
+
} else if (attrName === 'html') {
|
|
313
|
+
attrValues = element.getAttribute(attrName).split(' ').map(x => x.trim());
|
|
314
|
+
oldValue = values.filter(x => attrValues.includes(x))[0] || '';
|
|
227
315
|
} else if (element.getAttribute(attrName)) {
|
|
228
316
|
attrValues = element.getAttribute(attrName).split(' ').map(x => x.trim());
|
|
229
317
|
oldValue = values.filter(x => attrValues.includes(x))[0] || '';
|