@cocreate/text 1.15.11 → 1.15.14

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,24 @@
1
+ ## [1.15.14](https://github.com/CoCreate-app/CoCreate-text/compare/v1.15.13...v1.15.14) (2022-04-30)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * activeCursor element defined on window object ([88e4575](https://github.com/CoCreate-app/CoCreate-text/commit/88e457592fac304ffd02e56c491688d598838e6f))
7
+
8
+ ## [1.15.13](https://github.com/CoCreate-app/CoCreate-text/compare/v1.15.12...v1.15.13) (2022-03-22)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * removed emit from message.send and message.listen ([b672bb5](https://github.com/CoCreate-app/CoCreate-text/commit/b672bb57ee7005a0d1933bd014c079a6faa96cbd))
14
+
15
+ ## [1.15.12](https://github.com/CoCreate-app/CoCreate-text/compare/v1.15.11...v1.15.12) (2022-03-21)
16
+
17
+
18
+ ### Bug Fixes
19
+
20
+ * string formating differs between various OS \r\n and \r are replaced with \n ([87b0183](https://github.com/CoCreate-app/CoCreate-text/commit/87b018354240d6f25b57fb9fc272f52103c4072c))
21
+
1
22
  ## [1.15.11](https://github.com/CoCreate-app/CoCreate-text/compare/v1.15.10...v1.15.11) (2022-03-07)
2
23
 
3
24
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cocreate/text",
3
- "version": "1.15.11",
3
+ "version": "1.15.14",
4
4
  "description": "A simple text component in vanilla javascript. Easily configured using HTML5 attributes and/or JavaScript API.",
5
5
  "keywords": [
6
6
  "text",
package/src/index.js CHANGED
@@ -27,11 +27,11 @@ function initElements (elements) {
27
27
 
28
28
  function initElement (element) {
29
29
  const { collection, document_id, name, isRealtime, isCrdt, isCrud, isSave, isRead } = crud.getAttr(element);
30
- if(document_id == "pending") return;
31
- if(isCrdt == "false" || isRealtime == "false" || element.type == 'number' || name == '_id') return;
32
- if(!crud.checkAttrValue(collection) || !crud.checkAttrValue(document_id)) return;
33
- if(element.tagName === "INPUT" && ["text", "email", "tel", "url"].includes(element.type) || element.tagName === "TEXTAREA" || element.hasAttribute('contenteditable')) {
34
- if(!collection || !document_id || !name) return;
30
+ if (document_id == "pending") return;
31
+ if (isCrdt == "false" || isRealtime == "false" || element.type == 'number' || name == '_id') return;
32
+ if (!crud.checkAttrValue(collection) || !crud.checkAttrValue(document_id)) return;
33
+ if (element.tagName === "INPUT" && ["text", "email", "tel", "url"].includes(element.type) || element.tagName === "TEXTAREA" || element.hasAttribute('contenteditable')) {
34
+ if (!collection || !document_id || !name) return;
35
35
 
36
36
  if (!isCrdt) {
37
37
  if (element.tagName == 'IFRAME'){
@@ -47,7 +47,7 @@ function initElement (element) {
47
47
  element.setAttribute('crdt', 'true');
48
48
  element.crdt = {init: true};
49
49
  crdt.getText({ collection, document_id, name, crud: isCrud, save: isSave, read: isRead }).then(response => {
50
- if(response === undefined)
50
+ if (response === undefined)
51
51
  return;
52
52
  if (!response){
53
53
  let value;
@@ -111,12 +111,15 @@ function _mousedown (event) {
111
111
  let target = event.target;
112
112
  // const path = event.path || (event.composedPath && event.composedPath());
113
113
  // console.log(path)
114
- if(!target.id){
115
- let eid = target.getAttribute('eid');
116
- if(!eid){
117
- eid = uuid.generate(6);
118
- setAttribute({ domTextEditor, target, name: 'eid', value: eid });
119
- }
114
+ if (!target.id){
115
+ let isEid = domTextEditor.getAttribute('eid');
116
+ if (isEid != 'false' && isEid != null && isEid != undefined){
117
+ let eid = target.getAttribute('eid');
118
+ if (!eid){
119
+ eid = uuid.generate(6);
120
+ setAttribute({ domTextEditor, target, name: 'eid', value: eid });
121
+ }
122
+ }
120
123
  }
121
124
  let contentEditable = target.closest('[collection][document_id][name]');
122
125
  if (contentEditable){
@@ -153,7 +156,7 @@ function _cut (event) {
153
156
  /* clipboard write failed */
154
157
  });
155
158
  }
156
- if(start != end) {
159
+ if (start != end) {
157
160
  updateText({element, start, end, range});
158
161
  }
159
162
  event.preventDefault();
@@ -163,9 +166,9 @@ function _paste (event) {
163
166
  let element = event.currentTarget;
164
167
  if (element.getAttribute('crdt') == 'false')
165
168
  return;
166
- let value = event.clipboardData.getData('Text');
169
+ let value = event.clipboardData.getData('text/plain').replace(/(\r\n|\r)/gm, "\n");;
167
170
  const { start, end, range } = getSelection(element);
168
- if(start != end) {
171
+ if (start != end) {
169
172
  updateText({element, start, end, range});
170
173
  }
171
174
  updateText({element, value, start, range});
@@ -173,24 +176,24 @@ function _paste (event) {
173
176
  }
174
177
 
175
178
  function _keydown (event) {
176
- if(event.stopCCText) return;
179
+ if (event.stopCCText) return;
177
180
  let element = event.currentTarget;
178
181
  if (element.getAttribute('crdt') == 'false')
179
182
  return;
180
183
  const { start, end, range } = getSelection(element);
181
- if(event.key == "Backspace" || event.key == "Tab" || event.key == "Enter") {
184
+ if (event.key == "Backspace" || event.key == "Tab" || event.key == "Enter") {
182
185
  eventObj = event;
183
- if(start != end) {
186
+ if (start != end) {
184
187
  updateText({element, start, end, range});
185
188
  }
186
189
 
187
- if(event.key == "Backspace" && start == end) {
190
+ if (event.key == "Backspace" && start == end) {
188
191
  updateText({element, start: start - 1, end, range});
189
192
  }
190
- else if(event.key == 'Tab') {
193
+ else if (event.key == 'Tab') {
191
194
  updateText({element, value: "\t", start, range});
192
195
  }
193
- else if(event.key == "Enter") {
196
+ else if (event.key == "Enter") {
194
197
  updateText({element, value: "\n", start, range});
195
198
  }
196
199
  event.preventDefault();
@@ -204,13 +207,13 @@ function _keydown (event) {
204
207
  }
205
208
 
206
209
  function _beforeinput (event) {
207
- if(event.stopCCText) return;
210
+ if (event.stopCCText) return;
208
211
  let element = event.currentTarget;
209
212
  if (element.getAttribute('crdt') == 'false')
210
213
  return;
211
214
  let { start, end, range } = getSelection(element);
212
215
  if (event.data) {
213
- if(start != end) {
216
+ if (start != end) {
214
217
  updateText({element, start, end, range});
215
218
  }
216
219
  eventObj = event;
@@ -220,7 +223,7 @@ function _beforeinput (event) {
220
223
  }
221
224
 
222
225
  function _input (event) {
223
- if(event.stopCCText) return;
226
+ if (event.stopCCText) return;
224
227
  if (event.data) {
225
228
  eventObj = event;
226
229
  }
@@ -238,7 +241,7 @@ let previousPosition = {};
238
241
  export function sendPosition (element) {
239
242
  // if (!element) return;
240
243
  const { start, end, range } = getSelection(element);
241
- if(range) {
244
+ if (range) {
242
245
  if (range.element){
243
246
  element = range.element;
244
247
  }
@@ -254,11 +257,12 @@ export function sendPosition (element) {
254
257
  return;
255
258
  previousPosition = currentPosition;
256
259
  element.activeElement = element;
260
+ window.activeElement = element;
257
261
  cursors.sendPosition({ collection, document_id, name, start, end });
258
262
  }
259
263
 
260
264
  function updateText ({element, value, start, end, range}) {
261
- if(range) {
265
+ if (range) {
262
266
  if (range.element)
263
267
  element = range.element;
264
268
 
@@ -290,15 +294,15 @@ function _crdtUpdateListener () {
290
294
  }
291
295
 
292
296
  function updateElements({elements, collection, document_id, name, value, start, length, string}){
293
- if(!elements){
297
+ if (!elements){
294
298
  let selectors = `[collection='${collection}'][document_id='${document_id}'][name='${name}']`;
295
299
  elements = document.querySelectorAll(`input${selectors}, textarea${selectors}, [contenteditable]${selectors}, [editor='dom']${selectors}`);
296
300
  }
297
301
 
298
302
  elements.forEach((element) => {
299
303
  let isCrdt = element.getAttribute('crdt');
300
- // if(isCrdt == 'false' && !element.hasAttribute('crdt') && !element.contentEditable) return;
301
- // if(element.hasAttribute('contenteditable')){
304
+ // if (isCrdt == 'false' && !element.hasAttribute('crdt') && !element.contentEditable) return;
305
+ // if (element.hasAttribute('contenteditable')){
302
306
  // let isEditable = element.getAttribute('contenteditable');
303
307
  if (!element.hasAttribute('contenteditable') && isCrdt == 'false') return;
304
308
 
@@ -308,16 +312,19 @@ function updateElements({elements, collection, document_id, name, value, start,
308
312
 
309
313
  async function updateElement ({element, collection, document_id, name, value, start, length, string }) {
310
314
  if (element.tagName == 'IFRAME') {
315
+ let eid = element.getAttribute('eid')
311
316
  element = element.contentDocument.documentElement;
317
+ if (eid != 'false' && eid != null && eid != undefined)
318
+ element.setAttribute('eid', eid)
312
319
  if (element.contenteditable != 'false')
313
320
  element.contentEditable = true;
314
321
  }
315
- if(value || length) {
322
+ if (value || length) {
316
323
  if (element.tagName === "INPUT" || element.tagName === "TEXTAREA") {
317
- if(length) {
324
+ if (length) {
318
325
  _updateElementText(element, "", start, start + length);
319
326
  }
320
- if(value) {
327
+ if (value) {
321
328
  _updateElementText(element, value, start, start);
322
329
  }
323
330
  }
@@ -346,14 +353,14 @@ function _updateElementText (element, value, start, end) {
346
353
  let activeElement = element.ownerDocument.activeElement;
347
354
  element.setRangeText(value, start, end, "end");
348
355
  let p = processSelection(element, value, prev_start, prev_end, start, end);
349
- if(activeElement == element)
356
+ if (activeElement == element)
350
357
  sendPosition(element);
351
358
  _dispatchInputEvent(element, p.value, p.start, p.end, p.prev_start, p.prev_end);
352
359
  }
353
360
 
354
361
  export function _dispatchInputEvent(element, content, start, end, prev_start, prev_end) {
355
362
  let detail = {value: content, start, end, prev_start, prev_end, skip: true};
356
- if(eventObj) {
363
+ if (eventObj) {
357
364
  let event = new CustomEvent(eventObj.type, { bubbles: true });
358
365
  Object.defineProperty(event, 'stopCCText', { writable: false, value: true });
359
366
  Object.defineProperty(event, 'target', { writable: false, value: element });