@cocreate/events 1.5.0 → 1.6.1
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 +14 -0
- package/demo/index.html +4 -2
- package/docs/index.html +1 -1
- package/package.json +1 -1
- package/src/index.js +160 -73
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
## [1.6.1](https://github.com/CoCreate-app/CoCreate-events/compare/v1.6.0...v1.6.1) (2023-03-16)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* events undefined ([113384c](https://github.com/CoCreate-app/CoCreate-events/commit/113384c5a7b300daf4ab7cc74d25ab9cdb2fbf8c))
|
|
7
|
+
|
|
8
|
+
# [1.6.0](https://github.com/CoCreate-app/CoCreate-events/compare/v1.5.0...v1.6.0) (2023-03-16)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Features
|
|
12
|
+
|
|
13
|
+
* replaced get-value and set-value with a super charged version of CoCreate-events ([5407615](https://github.com/CoCreate-app/CoCreate-events/commit/54076157dc1e3ae764bc1e8d8ce4a84786501449))
|
|
14
|
+
|
|
1
15
|
# [1.5.0](https://github.com/CoCreate-app/CoCreate-events/compare/v1.4.1...v1.5.0) (2023-03-15)
|
|
2
16
|
|
|
3
17
|
|
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,128 @@ 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
|
+
if (!events)
|
|
111
|
+
events = []
|
|
112
|
+
if (events.includes('onload'))
|
|
113
|
+
this.__updateElements(el, prefix);
|
|
114
|
+
|
|
115
|
+
if (events.includes('observer')) {
|
|
116
|
+
let target;
|
|
117
|
+
for (let attribute of el.attributes) {
|
|
118
|
+
if ([`${prefix}-target`, `${prefix}-closest`, `${prefix}-parent`, `${prefix}-next`, `${prefix}-previous`].includes(attribute.name)) {
|
|
119
|
+
target = attribute.value
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
observer.init({
|
|
125
|
+
observe: ['addedNodes'],
|
|
126
|
+
target,
|
|
127
|
+
callback: function(mutation) {
|
|
128
|
+
self.__updateElements(el, prefix, mutation.target);
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
for (let i = 0; i < events.length; i++) {
|
|
134
|
+
if (events[i] !== 'onload' && events[i] !== 'observer')
|
|
135
|
+
el.addEventListener(events[i], eventFunction);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
function eventFunction(event) {
|
|
61
139
|
// ToDo: apply debounce
|
|
140
|
+
// let debounce;
|
|
62
141
|
// clearTimeout(debounce);
|
|
63
142
|
// debounce = setTimeout(function() {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
}
|
|
143
|
+
const target = event.currentTarget
|
|
144
|
+
if (target) {
|
|
145
|
+
let attribute = target.getAttribute('actions') || ""
|
|
146
|
+
if (attribute.includes(prefix))
|
|
147
|
+
return;
|
|
148
|
+
// if (target.closest(`[actions*="${prefix}"]`))
|
|
149
|
+
// return;
|
|
150
|
+
self.__updateElements(target, prefix);
|
|
151
|
+
|
|
152
|
+
let selector = `[${prefix}], [${prefix}-value], [${prefix}-target], [${prefix}-closest], [${prefix}-parent], [${prefix}-next], [${prefix}-previous]`
|
|
153
|
+
|
|
154
|
+
let parentElement = target.parentElement;
|
|
155
|
+
if (parentElement) {
|
|
156
|
+
do {
|
|
157
|
+
parentElement = parentElement.closest(selector)
|
|
158
|
+
if (parentElement) {
|
|
159
|
+
self.__updateElements(parentElement, prefix);
|
|
160
|
+
parentElement = parentElement.parentElement
|
|
83
161
|
}
|
|
84
|
-
while (parentElement)
|
|
85
|
-
|
|
86
162
|
}
|
|
87
|
-
|
|
163
|
+
while (parentElement)
|
|
164
|
+
|
|
88
165
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
166
|
+
|
|
167
|
+
}
|
|
168
|
+
// }, 500);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
}
|
|
94
173
|
},
|
|
95
174
|
|
|
96
|
-
__updateElements: function(element, prefix) {
|
|
175
|
+
__updateElements: function(element, prefix, target) {
|
|
97
176
|
const self = this;
|
|
98
177
|
// ToDo: support empty value when prefix-attribute defined, add and remove the attribute
|
|
99
178
|
let targetValue = element.getAttribute(`${prefix}-value`) || element.getAttribute(prefix);
|
|
100
|
-
if (!targetValue
|
|
179
|
+
if (!targetValue)
|
|
101
180
|
targetValue = element.getValue()
|
|
102
181
|
if (!targetValue) return
|
|
103
182
|
|
|
@@ -107,6 +186,8 @@ const CoCreateEvents = {
|
|
|
107
186
|
}
|
|
108
187
|
|
|
109
188
|
let targetAttribute = element.getAttribute(`${prefix}-attribute`) || 'class';
|
|
189
|
+
let targetText = element.getAttribute(`${prefix}-text`);
|
|
190
|
+
let targetHtml = element.getAttribute(`${prefix}-html`);
|
|
110
191
|
let targetSelector = element.getAttribute(`${prefix}-target`);
|
|
111
192
|
let targetClosest = element.getAttribute(`${prefix}-closest`);
|
|
112
193
|
let targetParent = element.getAttribute(`${prefix}-parent`);
|
|
@@ -161,30 +242,30 @@ const CoCreateEvents = {
|
|
|
161
242
|
});
|
|
162
243
|
}
|
|
163
244
|
|
|
164
|
-
let targetElements = [element];
|
|
165
|
-
if (targetClosest) {
|
|
166
|
-
element = element.closest(targetClosest);
|
|
167
|
-
}
|
|
168
245
|
values = values.map(x => x.trim());
|
|
169
|
-
|
|
246
|
+
let targetElements = [element];
|
|
247
|
+
if (target) {
|
|
248
|
+
self.setValue(prefix, target, targetAttribute, values, targetKey);
|
|
249
|
+
} else if (targetSelector) {
|
|
170
250
|
if (/{{\s*([\w\W]+)\s*}}/g.test(targetSelector)) return;
|
|
171
251
|
targetElements = queryDocumentSelectorAll(targetSelector);
|
|
172
252
|
targetElements.forEach((el) => self.setValue(prefix, el, targetAttribute, values, targetKey));
|
|
173
|
-
}
|
|
174
|
-
|
|
253
|
+
} else if (targetClosest) {
|
|
254
|
+
element = element.closest(targetClosest);
|
|
255
|
+
self.setValue(prefix, element, targetAttribute, values, targetKey);
|
|
256
|
+
} else if (targetParent) {
|
|
175
257
|
element.parentElement.querySelectorAll(targetParent).forEach((el) =>
|
|
176
258
|
self.setValue(prefix, el, targetAttribute, values, targetKey)
|
|
177
259
|
);
|
|
178
|
-
|
|
260
|
+
} else if (targetNext) {
|
|
179
261
|
el.nextElementSibling.querySelectorAll(targetNext).forEach((el) =>
|
|
180
262
|
self.setValue(prefix, el, targetAttribute, values, targetKey)
|
|
181
263
|
);
|
|
182
|
-
|
|
264
|
+
} else if (targetPrevious) {
|
|
183
265
|
el.previousElementSibling.querySelectorAll(targetPrevious).forEach((el) =>
|
|
184
266
|
self.setValue(prefix, el, targetAttribute, values, targetKey)
|
|
185
267
|
);
|
|
186
|
-
|
|
187
|
-
self.setValue(prefix, element, targetAttribute, values, targetKey);
|
|
268
|
+
}
|
|
188
269
|
|
|
189
270
|
document.dispatchEvent(new CustomEvent(`${prefix}End`, {
|
|
190
271
|
detail: {}
|
|
@@ -224,6 +305,12 @@ const CoCreateEvents = {
|
|
|
224
305
|
} else {
|
|
225
306
|
if (attrName === 'value') {
|
|
226
307
|
oldValue = element.getValue()
|
|
308
|
+
} else if (attrName === 'text') {
|
|
309
|
+
attrValues = element.getAttribute(attrName).split(' ').map(x => x.trim());
|
|
310
|
+
oldValue = values.filter(x => attrValues.includes(x))[0] || '';
|
|
311
|
+
} else if (attrName === 'html') {
|
|
312
|
+
attrValues = element.getAttribute(attrName).split(' ').map(x => x.trim());
|
|
313
|
+
oldValue = values.filter(x => attrValues.includes(x))[0] || '';
|
|
227
314
|
} else if (element.getAttribute(attrName)) {
|
|
228
315
|
attrValues = element.getAttribute(attrName).split(' ').map(x => x.trim());
|
|
229
316
|
oldValue = values.filter(x => attrValues.includes(x))[0] || '';
|