@cocreate/text 1.27.0 → 1.28.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,27 @@
1
+ # [1.28.0](https://github.com/CoCreate-app/CoCreate-text/compare/v1.27.1...v1.28.0) (2024-11-04)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * formating ([df994e2](https://github.com/CoCreate-app/CoCreate-text/commit/df994e2495420d626f1429a8a00f0cd8287d1cbd))
7
+ * if condition remove ([ac7bf6a](https://github.com/CoCreate-app/CoCreate-text/commit/ac7bf6a3cca3c2e876900f5d86d372880295dc73))
8
+ * if no selection return ([a271cb3](https://github.com/CoCreate-app/CoCreate-text/commit/a271cb3c73e74d0b104939a2d6a662dd11da59f8))
9
+ * observer taget has been renamed to selector ([da1e9e9](https://github.com/CoCreate-app/CoCreate-text/commit/da1e9e9eeaddcbafcfb589278ff8fadd10e4dd52))
10
+ * pretier.config.js and file formating ([0ae4aed](https://github.com/CoCreate-app/CoCreate-text/commit/0ae4aed54f9358cd39b4de513684d9949f7e8844))
11
+ * send position on mousedown and arrow keys ([1e63d00](https://github.com/CoCreate-app/CoCreate-text/commit/1e63d00fedef6de42594c592a6171b5c061ebd06))
12
+
13
+
14
+ ### Features
15
+
16
+ * add prettier.config.js and format files ([9a8b71d](https://github.com/CoCreate-app/CoCreate-text/commit/9a8b71d52a4fa98a95f723238fbe7cd32e254adc))
17
+
18
+ ## [1.27.1](https://github.com/CoCreate-app/CoCreate-text/compare/v1.27.0...v1.27.1) (2024-06-19)
19
+
20
+
21
+ ### Bug Fixes
22
+
23
+ * apply custom setValue function on element ([938088a](https://github.com/CoCreate-app/CoCreate-text/commit/938088a9d2caa3046fbac34d7bebf6858296ab74))
24
+
1
25
  # [1.27.0](https://github.com/CoCreate-app/CoCreate-text/compare/v1.26.5...v1.27.0) (2024-06-12)
2
26
 
3
27
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cocreate/text",
3
- "version": "1.27.0",
3
+ "version": "1.28.0",
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",
@@ -0,0 +1,16 @@
1
+ module.exports = {
2
+ tabWidth: 4,
3
+ semi: true,
4
+ trailingComma: "none",
5
+ bracketSameLine: true,
6
+ useTabs: true,
7
+ overrides: [
8
+ {
9
+ files: ["*.json", "*.yml", "*.yaml"],
10
+ options: {
11
+ tabWidth: 2,
12
+ useTabs: false
13
+ },
14
+ }
15
+ ],
16
+ };
package/src/index.js CHANGED
@@ -103,6 +103,10 @@ function initElement(element) {
103
103
  element.getValue = async () => {
104
104
  return await crdt.getText({ array, object, key })
105
105
  }
106
+ element.setValue = (value) => {
107
+ crdt.replaceText({ array, object, key, value, crud: isCrud, save: isSave, read: isRead });
108
+
109
+ }
106
110
  }
107
111
  }
108
112
 
@@ -169,7 +173,7 @@ function _mousedown(event) {
169
173
  if (array && object && key && !target.hasAttribute('contenteditable'))
170
174
  target.setAttribute('contenteditable', 'true');
171
175
  }
172
- // sendPosition(element)
176
+ sendPosition(domTextEditor)
173
177
  }
174
178
 
175
179
  function _blur(event) {
@@ -241,6 +245,8 @@ function _keydown(event) {
241
245
  } else if (event.keyCode == 89) {
242
246
  updateText({ element, range, undoRedo: 'redo' });
243
247
  }
248
+ } else {
249
+ sendPosition(element)
244
250
  }
245
251
  }
246
252
 
@@ -426,7 +432,7 @@ export function _dispatchInputEvent(element, content, start, end, prev_start, pr
426
432
  observer.init({
427
433
  name: 'CoCreateTextAddedNodes',
428
434
  observe: ['addedNodes'],
429
- target: selectors,
435
+ selector: selectors,
430
436
  callback(mutation) {
431
437
  let isCrdt = mutation.target.getAttribute('crdt');
432
438
  if (isCrdt) return;
@@ -438,7 +444,7 @@ observer.init({
438
444
  name: 'CoCreateTextAttribtes',
439
445
  observe: ['attributes'],
440
446
  attributeName: [...getAttributeNames(['array', 'object', 'key']), 'contenteditable'],
441
- target: selectors,
447
+ selector: selectors,
442
448
  callback(mutation) {
443
449
  let _id = mutation.target.getAttribute('object')
444
450
  if (!_id) {
package/src/updateDom.js CHANGED
@@ -40,13 +40,11 @@ export function updateDom({ domTextEditor, value, start, end, html }) {
40
40
  newEl.innerHTML = domTextEditor.htmlString;
41
41
  domEl = domTextEditor;
42
42
  type = 'innerHTML';
43
- }
44
- else if (element.tagName == 'HTML') {
43
+ } else if (element.tagName == 'HTML') {
45
44
  // console.log('element = html')
46
45
  domEl = domTextEditor;
47
46
  type = 'innerHTML';
48
- }
49
- else if (path) {
47
+ } else if (path) {
50
48
  // console.log("else path", path)
51
49
  domEl = domTextEditor.querySelector(path);
52
50
  // if (!domEl || !oldEl){
@@ -103,44 +101,34 @@ export function updateDom({ domTextEditor, value, start, end, html }) {
103
101
  // console.log('newEl', newEl)
104
102
  if (start != end && type == 'innerHTML') {
105
103
  domTextEditor.htmlString = html;
106
- if (domEl.tagName != 'HTML') {
107
- if (newEl.parentElement) {
108
- domEl.parentElement.replaceChildren(...newEl.parentElement.childNodes);
109
- // console.log('parent', domEl.parentElement)
110
- } else {
111
- domEl.replaceChildren(...newEl.childNodes);
112
- // console.log('domEl', domEl)
113
- }
114
- }
115
- else {
104
+ if (domEl.tagName != 'HTML' && newEl.parentElement) {
105
+ domEl.parentElement.replaceChildren(...newEl.parentElement.childNodes);
106
+ } else {
116
107
  domEl.replaceChildren(...newEl.childNodes);
117
108
  // console.log('Html tag', domEl)
118
109
  }
110
+
119
111
  if (curCaret && curCaret.range) {
120
112
  curCaret.range.startContainer = domEl;
121
113
  curCaret.range.endContainer = domEl;
122
114
  }
123
- }
124
- else if (type == 'isStartTag') {
115
+ } else if (type == 'isStartTag') {
125
116
  oldEl = domTextEditor.oldHtml.querySelector(path);
126
117
  if (!oldEl && domEl.tagName == 'HTML')
127
118
  oldEl = domTextEditor.oldHtml
128
119
  assignAttributes(newEl, oldEl, domEl);
129
120
  // console.log('isStartTag', domEl, newEl)
130
121
 
131
- }
132
- else if (type == 'insertAdjacent') {
122
+ } else if (type == 'insertAdjacent') {
133
123
  domEl.insertAdjacentHTML(position, value);
134
124
  // console.log('insertAdjacent', domEl, value)
135
- }
136
- else if (type == 'textNode') {
125
+ } else if (type == 'textNode') {
137
126
  if (start != end)
138
127
  domTextEditor.htmlString = html;
139
128
  domEl.innerHTML = newEl.innerHTML;
140
129
  // console.log('textnode', domEl.innerHTML, newEl.innerHTML)
141
130
 
142
- }
143
- else if (type == 'innerHTML') {
131
+ } else if (type == 'innerHTML') {
144
132
  domEl.replaceChildren(...newEl.childNodes);
145
133
  // console.log('innerHtml', domEl, newEl)
146
134
  }
package/src/updateText.js CHANGED
@@ -6,8 +6,9 @@ export function insertAdjacentElement({ domTextEditor, target, position, element
6
6
  let remove;
7
7
  if (element && !elementValue) {
8
8
  remove = getStringPosition({ string: domTextEditor.htmlString, target: element });
9
- if (!remove.start && !remove.end)
9
+ if (!remove || !remove.start && !remove.end)
10
10
  throw new Error('insertAdjacentElement: element not found');
11
+
11
12
  elementValue = domTextEditor.htmlString.substring(remove.start, remove.end);
12
13
  }
13
14
 
@@ -58,7 +59,9 @@ export function replaceInnerText({ domTextEditor, target, value }) {
58
59
  }
59
60
 
60
61
  export function updateDomText({ domTextEditor, target, position, element, elementValue, attribute, value, property, pos, remove }) {
61
- let { start, end, newValue } = getStringPosition({ string: domTextEditor.htmlString, target, attribute, property, value, remove });
62
+ let selection = getStringPosition({ string: domTextEditor.htmlString, target, attribute, property, value, remove });
63
+ if (!selection) return
64
+ let { start, end, newValue } = selection;
62
65
  if (pos) {
63
66
  start += pos.start;
64
67
  end += pos.end;