@cocreate/text 1.15.11 → 1.15.12

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,10 @@
1
+ ## [1.15.12](https://github.com/CoCreate-app/CoCreate-text/compare/v1.15.11...v1.15.12) (2022-03-21)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * string formating differs between various OS \r\n and \r are replaced with \n ([87b0183](https://github.com/CoCreate-app/CoCreate-text/commit/87b018354240d6f25b57fb9fc272f52103c4072c))
7
+
1
8
  ## [1.15.11](https://github.com/CoCreate-app/CoCreate-text/compare/v1.15.10...v1.15.11) (2022-03-07)
2
9
 
3
10
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cocreate/text",
3
- "version": "1.15.11",
3
+ "version": "1.15.12",
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,9 +111,9 @@ 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){
114
+ if (!target.id){
115
115
  let eid = target.getAttribute('eid');
116
- if(!eid){
116
+ if (!eid){
117
117
  eid = uuid.generate(6);
118
118
  setAttribute({ domTextEditor, target, name: 'eid', value: eid });
119
119
  }
@@ -153,7 +153,7 @@ function _cut (event) {
153
153
  /* clipboard write failed */
154
154
  });
155
155
  }
156
- if(start != end) {
156
+ if (start != end) {
157
157
  updateText({element, start, end, range});
158
158
  }
159
159
  event.preventDefault();
@@ -163,9 +163,9 @@ function _paste (event) {
163
163
  let element = event.currentTarget;
164
164
  if (element.getAttribute('crdt') == 'false')
165
165
  return;
166
- let value = event.clipboardData.getData('Text');
166
+ let value = event.clipboardData.getData('text/plain').replace(/(\r\n|\r)/gm, "\n");;
167
167
  const { start, end, range } = getSelection(element);
168
- if(start != end) {
168
+ if (start != end) {
169
169
  updateText({element, start, end, range});
170
170
  }
171
171
  updateText({element, value, start, range});
@@ -173,24 +173,24 @@ function _paste (event) {
173
173
  }
174
174
 
175
175
  function _keydown (event) {
176
- if(event.stopCCText) return;
176
+ if (event.stopCCText) return;
177
177
  let element = event.currentTarget;
178
178
  if (element.getAttribute('crdt') == 'false')
179
179
  return;
180
180
  const { start, end, range } = getSelection(element);
181
- if(event.key == "Backspace" || event.key == "Tab" || event.key == "Enter") {
181
+ if (event.key == "Backspace" || event.key == "Tab" || event.key == "Enter") {
182
182
  eventObj = event;
183
- if(start != end) {
183
+ if (start != end) {
184
184
  updateText({element, start, end, range});
185
185
  }
186
186
 
187
- if(event.key == "Backspace" && start == end) {
187
+ if (event.key == "Backspace" && start == end) {
188
188
  updateText({element, start: start - 1, end, range});
189
189
  }
190
- else if(event.key == 'Tab') {
190
+ else if (event.key == 'Tab') {
191
191
  updateText({element, value: "\t", start, range});
192
192
  }
193
- else if(event.key == "Enter") {
193
+ else if (event.key == "Enter") {
194
194
  updateText({element, value: "\n", start, range});
195
195
  }
196
196
  event.preventDefault();
@@ -204,13 +204,13 @@ function _keydown (event) {
204
204
  }
205
205
 
206
206
  function _beforeinput (event) {
207
- if(event.stopCCText) return;
207
+ if (event.stopCCText) return;
208
208
  let element = event.currentTarget;
209
209
  if (element.getAttribute('crdt') == 'false')
210
210
  return;
211
211
  let { start, end, range } = getSelection(element);
212
212
  if (event.data) {
213
- if(start != end) {
213
+ if (start != end) {
214
214
  updateText({element, start, end, range});
215
215
  }
216
216
  eventObj = event;
@@ -220,7 +220,7 @@ function _beforeinput (event) {
220
220
  }
221
221
 
222
222
  function _input (event) {
223
- if(event.stopCCText) return;
223
+ if (event.stopCCText) return;
224
224
  if (event.data) {
225
225
  eventObj = event;
226
226
  }
@@ -238,7 +238,7 @@ let previousPosition = {};
238
238
  export function sendPosition (element) {
239
239
  // if (!element) return;
240
240
  const { start, end, range } = getSelection(element);
241
- if(range) {
241
+ if (range) {
242
242
  if (range.element){
243
243
  element = range.element;
244
244
  }
@@ -258,7 +258,7 @@ export function sendPosition (element) {
258
258
  }
259
259
 
260
260
  function updateText ({element, value, start, end, range}) {
261
- if(range) {
261
+ if (range) {
262
262
  if (range.element)
263
263
  element = range.element;
264
264
 
@@ -290,15 +290,15 @@ function _crdtUpdateListener () {
290
290
  }
291
291
 
292
292
  function updateElements({elements, collection, document_id, name, value, start, length, string}){
293
- if(!elements){
293
+ if (!elements){
294
294
  let selectors = `[collection='${collection}'][document_id='${document_id}'][name='${name}']`;
295
295
  elements = document.querySelectorAll(`input${selectors}, textarea${selectors}, [contenteditable]${selectors}, [editor='dom']${selectors}`);
296
296
  }
297
297
 
298
298
  elements.forEach((element) => {
299
299
  let isCrdt = element.getAttribute('crdt');
300
- // if(isCrdt == 'false' && !element.hasAttribute('crdt') && !element.contentEditable) return;
301
- // if(element.hasAttribute('contenteditable')){
300
+ // if (isCrdt == 'false' && !element.hasAttribute('crdt') && !element.contentEditable) return;
301
+ // if (element.hasAttribute('contenteditable')){
302
302
  // let isEditable = element.getAttribute('contenteditable');
303
303
  if (!element.hasAttribute('contenteditable') && isCrdt == 'false') return;
304
304
 
@@ -312,12 +312,12 @@ async function updateElement ({element, collection, document_id, name, value, st
312
312
  if (element.contenteditable != 'false')
313
313
  element.contentEditable = true;
314
314
  }
315
- if(value || length) {
315
+ if (value || length) {
316
316
  if (element.tagName === "INPUT" || element.tagName === "TEXTAREA") {
317
- if(length) {
317
+ if (length) {
318
318
  _updateElementText(element, "", start, start + length);
319
319
  }
320
- if(value) {
320
+ if (value) {
321
321
  _updateElementText(element, value, start, start);
322
322
  }
323
323
  }
@@ -346,14 +346,14 @@ function _updateElementText (element, value, start, end) {
346
346
  let activeElement = element.ownerDocument.activeElement;
347
347
  element.setRangeText(value, start, end, "end");
348
348
  let p = processSelection(element, value, prev_start, prev_end, start, end);
349
- if(activeElement == element)
349
+ if (activeElement == element)
350
350
  sendPosition(element);
351
351
  _dispatchInputEvent(element, p.value, p.start, p.end, p.prev_start, p.prev_end);
352
352
  }
353
353
 
354
354
  export function _dispatchInputEvent(element, content, start, end, prev_start, prev_end) {
355
355
  let detail = {value: content, start, end, prev_start, prev_end, skip: true};
356
- if(eventObj) {
356
+ if (eventObj) {
357
357
  let event = new CustomEvent(eventObj.type, { bubbles: true });
358
358
  Object.defineProperty(event, 'stopCCText', { writable: false, value: true });
359
359
  Object.defineProperty(event, 'target', { writable: false, value: element });