@cocreate/text 1.12.30 → 1.13.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 +34 -0
- package/package.json +9 -9
- package/src/index.js +42 -29
- package/src/saveDomText.js +1 -1
package/CHANGELOG.md
CHANGED
@@ -1,3 +1,37 @@
|
|
1
|
+
## [1.13.1](https://github.com/CoCreate-app/CoCreate-text/compare/v1.13.0...v1.13.1) (2021-11-28)
|
2
|
+
|
3
|
+
|
4
|
+
### Bug Fixes
|
5
|
+
|
6
|
+
* replace click and keyup event with selectionchange event ([515da39](https://github.com/CoCreate-app/CoCreate-text/commit/515da39a62af4e350aa2a7857aa48b87c822a5dd))
|
7
|
+
|
8
|
+
# [1.13.0](https://github.com/CoCreate-app/CoCreate-text/compare/v1.12.32...v1.13.0) (2021-11-28)
|
9
|
+
|
10
|
+
|
11
|
+
### Bug Fixes
|
12
|
+
|
13
|
+
* remove keypress and replaced with beforeinput event to support mobile browsers ([84ae8b1](https://github.com/CoCreate-app/CoCreate-text/commit/84ae8b162657ec028e6a49b627ca104909ff11ad))
|
14
|
+
|
15
|
+
|
16
|
+
### Features
|
17
|
+
|
18
|
+
* support for undo and redo ([8a727d3](https://github.com/CoCreate-app/CoCreate-text/commit/8a727d3ba5df8bcf03cf96c07c40e889dd359aea))
|
19
|
+
|
20
|
+
## [1.12.32](https://github.com/CoCreate-app/CoCreate-text/compare/v1.12.31...v1.12.32) (2021-11-27)
|
21
|
+
|
22
|
+
|
23
|
+
### Bug Fixes
|
24
|
+
|
25
|
+
* actions import typo ([66f914e](https://github.com/CoCreate-app/CoCreate-text/commit/66f914e725a5862d99c2cdb1d462da461f9f46d7))
|
26
|
+
* update dependencies ([de6cd6a](https://github.com/CoCreate-app/CoCreate-text/commit/de6cd6a4f9ca77d52588b633b8dd96bf4de4043a))
|
27
|
+
|
28
|
+
## [1.12.31](https://github.com/CoCreate-app/CoCreate-text/compare/v1.12.30...v1.12.31) (2021-11-27)
|
29
|
+
|
30
|
+
|
31
|
+
### Bug Fixes
|
32
|
+
|
33
|
+
* update dependencies ([5a35385](https://github.com/CoCreate-app/CoCreate-text/commit/5a35385c4c3c1a0be817ec009e3486d23bb844bb))
|
34
|
+
|
1
35
|
## [1.12.30](https://github.com/CoCreate-app/CoCreate-text/compare/v1.12.29...v1.12.30) (2021-11-27)
|
2
36
|
|
3
37
|
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@cocreate/text",
|
3
|
-
"version": "1.
|
3
|
+
"version": "1.13.1",
|
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",
|
@@ -61,13 +61,13 @@
|
|
61
61
|
"webpack-log": "^3.0.1"
|
62
62
|
},
|
63
63
|
"dependencies": {
|
64
|
-
"@cocreate/actions": "^1.3.
|
65
|
-
"@cocreate/crdt": "^1.8.
|
66
|
-
"@cocreate/crud-client": "^1.4.
|
67
|
-
"@cocreate/cursors": "^1.10.
|
68
|
-
"@cocreate/docs": "^1.2.
|
69
|
-
"@cocreate/hosting": "^1.2.
|
70
|
-
"@cocreate/observer": "^1.3.
|
71
|
-
"@cocreate/selection": "^1.2.
|
64
|
+
"@cocreate/actions": "^1.3.23",
|
65
|
+
"@cocreate/crdt": "^1.8.26",
|
66
|
+
"@cocreate/crud-client": "^1.4.38",
|
67
|
+
"@cocreate/cursors": "^1.10.16",
|
68
|
+
"@cocreate/docs": "^1.2.60",
|
69
|
+
"@cocreate/hosting": "^1.2.56",
|
70
|
+
"@cocreate/observer": "^1.3.52",
|
71
|
+
"@cocreate/selection": "^1.2.19"
|
72
72
|
}
|
73
73
|
}
|
package/src/index.js
CHANGED
@@ -16,6 +16,11 @@ function init() {
|
|
16
16
|
let elements = document.querySelectorAll(selectors);
|
17
17
|
initElements(elements);
|
18
18
|
_crdtUpdateListener();
|
19
|
+
document.addEventListener('selectionchange', (e) => {
|
20
|
+
let element = document.activeElement;
|
21
|
+
sendPosition(element)
|
22
|
+
console.log(element)
|
23
|
+
});
|
19
24
|
}
|
20
25
|
|
21
26
|
function initElements (elements) {
|
@@ -32,10 +37,16 @@ function initElement (element) {
|
|
32
37
|
if(!collection || !document_id || !name) return;
|
33
38
|
|
34
39
|
if (!isCrdt) {
|
35
|
-
if (element.tagName == 'IFRAME')
|
40
|
+
if (element.tagName == 'IFRAME'){
|
36
41
|
_addEventListeners(element.contentDocument.documentElement);
|
37
|
-
|
38
|
-
|
42
|
+
let Document = element.contentDocument
|
43
|
+
Document.addEventListener('selectionchange', (e) => {
|
44
|
+
let element = Document.activeElement;
|
45
|
+
sendPosition(element)
|
46
|
+
}); }
|
47
|
+
else{
|
48
|
+
_addEventListeners(element);
|
49
|
+
}
|
39
50
|
}
|
40
51
|
element.setAttribute('crdt', 'true');
|
41
52
|
element.crdt = {init: true};
|
@@ -65,18 +76,12 @@ function initElement (element) {
|
|
65
76
|
}
|
66
77
|
|
67
78
|
export function _addEventListeners (element) {
|
68
|
-
element.addEventListener('click', _click);
|
69
79
|
element.addEventListener('blur', _blur);
|
70
|
-
element.addEventListener('keyup', _keyup);
|
71
80
|
element.addEventListener('cut', _cut);
|
72
81
|
element.addEventListener('paste', _paste);
|
73
82
|
element.addEventListener('keydown', _keydown);
|
74
|
-
element.addEventListener('
|
75
|
-
|
76
|
-
|
77
|
-
function _click (event) {
|
78
|
-
let element = event.currentTarget;
|
79
|
-
sendPosition(element);
|
83
|
+
element.addEventListener('beforeinput', _beforeinput);
|
84
|
+
element.addEventListener('input', _input);
|
80
85
|
}
|
81
86
|
|
82
87
|
function _blur (event) {
|
@@ -87,11 +92,6 @@ function _blur (event) {
|
|
87
92
|
cursors.sendPosition({collection, document_id, name, start, end});
|
88
93
|
}
|
89
94
|
|
90
|
-
function _keyup (event) {
|
91
|
-
let element = event.currentTarget;
|
92
|
-
sendPosition(element);
|
93
|
-
}
|
94
|
-
|
95
95
|
function _cut (event) {
|
96
96
|
let element = event.currentTarget;
|
97
97
|
const { start, end, range } = getSelection(element);
|
@@ -130,46 +130,58 @@ function _keydown (event) {
|
|
130
130
|
const { start, end, range } = getSelection(element);
|
131
131
|
if(event.key == "Backspace" || event.key == "Tab" || event.key == "Enter") {
|
132
132
|
eventObj = event;
|
133
|
-
//ToDO switch case
|
134
133
|
if(start != end) {
|
135
134
|
updateText({element, start, end, range});
|
136
135
|
}
|
136
|
+
|
137
137
|
if(event.key == "Backspace" && start == end) {
|
138
138
|
updateText({element, start: start - 1, end, range});
|
139
139
|
}
|
140
|
-
if(event.key == 'Tab') {
|
140
|
+
else if(event.key == 'Tab') {
|
141
141
|
updateText({element, value: "\t", start, range});
|
142
142
|
}
|
143
|
-
if(event.key == "Enter") {
|
143
|
+
else if(event.key == "Enter") {
|
144
144
|
updateText({element, value: "\n", start, range});
|
145
145
|
}
|
146
146
|
event.preventDefault();
|
147
147
|
}
|
148
|
+
else if (event.ctrlKey) {
|
149
|
+
if (event.keyCode == 90)
|
150
|
+
console.log('Undo');
|
151
|
+
else if (event.keyCode == 89)
|
152
|
+
console.log('Redo');
|
153
|
+
}
|
148
154
|
}
|
149
155
|
|
150
|
-
function
|
156
|
+
function _beforeinput (event) {
|
151
157
|
if(event.stopCCText) return;
|
152
158
|
let element = event.currentTarget;
|
153
159
|
let { start, end, range } = getSelection(element);
|
154
|
-
if(
|
155
|
-
|
160
|
+
if (event.data) {
|
161
|
+
if(start != end) {
|
162
|
+
updateText({element, start, end, range});
|
163
|
+
}
|
164
|
+
eventObj = event;
|
165
|
+
updateText({element, value: event.data, start, range});
|
166
|
+
event.preventDefault();
|
167
|
+
}
|
168
|
+
}
|
169
|
+
|
170
|
+
function _input (event) {
|
171
|
+
if(event.stopCCText) return;
|
172
|
+
if (event.data) {
|
173
|
+
eventObj = event;
|
156
174
|
}
|
157
|
-
eventObj = event;
|
158
|
-
updateText({element, value: event.key, start, range});
|
159
|
-
event.preventDefault();
|
160
175
|
}
|
161
176
|
|
162
177
|
function _removeEventListeners (element) {
|
163
|
-
element.removeEventListener('click', _click);
|
164
178
|
element.removeEventListener('blur', _blur);
|
165
|
-
element.removeEventListener('keyup', _keyup);
|
166
179
|
element.removeEventListener('cut', _cut);
|
167
180
|
element.removeEventListener('paste', _paste);
|
168
181
|
element.removeEventListener('keydown', _keydown);
|
169
|
-
element.removeEventListener('
|
182
|
+
element.removeEventListener('beforeinput', _beforeinput);
|
170
183
|
}
|
171
184
|
|
172
|
-
|
173
185
|
export function sendPosition (element) {
|
174
186
|
if (!element) return;
|
175
187
|
const { start, end } = getSelection(element);
|
@@ -278,6 +290,7 @@ export function _dispatchInputEvent(element, content, start, end, prev_start, pr
|
|
278
290
|
element.dispatchEvent(event);
|
279
291
|
}
|
280
292
|
let inputEvent = new CustomEvent('input', { bubbles: true });
|
293
|
+
Object.defineProperty(inputEvent, 'stopCCText', { writable: false, value: true });
|
281
294
|
Object.defineProperty(inputEvent, 'target', { writable: false, value: element });
|
282
295
|
Object.defineProperty(inputEvent, 'detail', { writable: false, value: detail });
|
283
296
|
element.dispatchEvent(inputEvent);
|
package/src/saveDomText.js
CHANGED