@cocreate/text 1.12.32 → 1.13.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,15 @@
1
+ # [1.13.0](https://github.com/CoCreate-app/CoCreate-text/compare/v1.12.32...v1.13.0) (2021-11-28)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * remove keypress and replaced with beforeinput event to support mobile browsers ([84ae8b1](https://github.com/CoCreate-app/CoCreate-text/commit/84ae8b162657ec028e6a49b627ca104909ff11ad))
7
+
8
+
9
+ ### Features
10
+
11
+ * support for undo and redo ([8a727d3](https://github.com/CoCreate-app/CoCreate-text/commit/8a727d3ba5df8bcf03cf96c07c40e889dd359aea))
12
+
1
13
  ## [1.12.32](https://github.com/CoCreate-app/CoCreate-text/compare/v1.12.31...v1.12.32) (2021-11-27)
2
14
 
3
15
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cocreate/text",
3
- "version": "1.12.32",
3
+ "version": "1.13.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",
package/src/index.js CHANGED
@@ -71,7 +71,8 @@ export function _addEventListeners (element) {
71
71
  element.addEventListener('cut', _cut);
72
72
  element.addEventListener('paste', _paste);
73
73
  element.addEventListener('keydown', _keydown);
74
- element.addEventListener('keypress', _keypress);
74
+ element.addEventListener('beforeinput', _beforeinput);
75
+ element.addEventListener('input', _input);
75
76
  }
76
77
 
77
78
  function _click (event) {
@@ -130,33 +131,47 @@ function _keydown (event) {
130
131
  const { start, end, range } = getSelection(element);
131
132
  if(event.key == "Backspace" || event.key == "Tab" || event.key == "Enter") {
132
133
  eventObj = event;
133
- //ToDO switch case
134
134
  if(start != end) {
135
135
  updateText({element, start, end, range});
136
136
  }
137
+
137
138
  if(event.key == "Backspace" && start == end) {
138
139
  updateText({element, start: start - 1, end, range});
139
140
  }
140
- if(event.key == 'Tab') {
141
+ else if(event.key == 'Tab') {
141
142
  updateText({element, value: "\t", start, range});
142
143
  }
143
- if(event.key == "Enter") {
144
+ else if(event.key == "Enter") {
144
145
  updateText({element, value: "\n", start, range});
145
146
  }
146
147
  event.preventDefault();
147
148
  }
149
+ else if (event.ctrlKey) {
150
+ if (event.keyCode == 90)
151
+ console.log('Undo');
152
+ else if (event.keyCode == 89)
153
+ console.log('Redo');
154
+ }
148
155
  }
149
156
 
150
- function _keypress (event) {
157
+ function _beforeinput (event) {
151
158
  if(event.stopCCText) return;
152
159
  let element = event.currentTarget;
153
160
  let { start, end, range } = getSelection(element);
154
- if(start != end) {
155
- updateText({element, start, end, range});
161
+ if (event.data) {
162
+ if(start != end) {
163
+ updateText({element, start, end, range});
164
+ }
165
+ eventObj = event;
166
+ updateText({element, value: event.data, start, range});
167
+ event.preventDefault();
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) {
@@ -166,10 +181,9 @@ function _removeEventListeners (element) {
166
181
  element.removeEventListener('cut', _cut);
167
182
  element.removeEventListener('paste', _paste);
168
183
  element.removeEventListener('keydown', _keydown);
169
- element.removeEventListener('keypress', _keypress);
184
+ element.removeEventListener('beforeinput', _beforeinput);
170
185
  }
171
186
 
172
-
173
187
  export function sendPosition (element) {
174
188
  if (!element) return;
175
189
  const { start, end } = getSelection(element);
@@ -278,6 +292,7 @@ export function _dispatchInputEvent(element, content, start, end, prev_start, pr
278
292
  element.dispatchEvent(event);
279
293
  }
280
294
  let inputEvent = new CustomEvent('input', { bubbles: true });
295
+ Object.defineProperty(inputEvent, 'stopCCText', { writable: false, value: true });
281
296
  Object.defineProperty(inputEvent, 'target', { writable: false, value: element });
282
297
  Object.defineProperty(inputEvent, 'detail', { writable: false, value: detail });
283
298
  element.dispatchEvent(inputEvent);