@cocreate/text 1.20.29 → 1.22.0

Sign up to get free protection for your applications and to get access to all the features.
package/src/index.js CHANGED
@@ -1,17 +1,16 @@
1
1
  /*global CustomEvent, navigator*/
2
2
  import observer from '@cocreate/observer';
3
- import crud from '@cocreate/crud-client';
4
3
  import crdt from '@cocreate/crdt';
5
4
  import cursors from '@cocreate/cursors';
6
5
  import uuid from '@cocreate/uuid';
6
+ import { getAttributes, getAttributeNames, checkValue } from '@cocreate/utils';
7
7
  import { updateDom } from './updateDom';
8
8
  import { insertAdjacentElement, removeElement, setInnerText, setAttribute, removeAttribute, setClass, setStyle, replaceInnerText } from './updateText';
9
9
  import { getSelection, processSelection } from '@cocreate/selection';
10
10
  import action from '@cocreate/actions';
11
- import './saveDomText';
12
11
 
13
12
  let eventObj;
14
- let selector = `[collection][document_id][name]`;
13
+ let selector = `[array][object][key]`;
15
14
  let selectors = `input${selector}, textarea${selector}, [contenteditable]${selector}:not([contenteditable='false'])`;
16
15
 
17
16
  function init() {
@@ -27,20 +26,20 @@ function initElements(elements) {
27
26
  }
28
27
 
29
28
  function initElement(element) {
30
- let { collection, document_id, name, isRealtime, isCrdt, isCrud, isSave, isRead } = crud.getAttributes(element);
31
- if (!collection || !document_id || !name)
29
+ let { array, object, key, isRealtime, isCrdt, isCrud, isSave, isRead } = getAttributes(element);
30
+ if (!array || !object || !key)
32
31
  return
33
- if (document_id == 'pending') {
34
- element.pendingDocument = true
32
+ if (object == 'pending') {
33
+ element.pendingObject = true
35
34
  return
36
35
  }
37
- if (['_id', 'organization_id', 'storage', 'database', 'collection'].includes(name))
36
+ if (['_id', 'organization_id', 'storage', 'database', 'array'].includes(key))
38
37
  return
39
38
  if (isCrdt == "false" || isRealtime == "false" || element.type == 'number')
40
39
  return
41
- if (!crud.checkValue(collection) || !crud.checkValue(document_id) || !crud.checkValue(name))
40
+ if (!checkValue(array) || !checkValue(object) || !checkValue(key))
42
41
  return
43
- if (name && name.startsWith("$"))
42
+ if (key && key.startsWith("$"))
44
43
  return
45
44
 
46
45
  if (element.tagName === "INPUT" && ["text", "tel", "url"].includes(element.type) || element.tagName === "TEXTAREA" || element.hasAttribute('contenteditable')) {
@@ -59,9 +58,9 @@ function initElement(element) {
59
58
  element.setAttribute('crdt', 'true');
60
59
  element.crdt = { init: true };
61
60
 
62
- // TODO: newDocument name consideration. its value is used for setting or overwriting existing value
63
- let newDocument = ''
64
- if (element.pendingDocument) {
61
+ // TODO: newObject name consideration. its value is used for setting or overwriting existing value
62
+ let newObject = ''
63
+ if (element.pendingObject) {
65
64
 
66
65
  let value;
67
66
  if (element.hasAttribute('contenteditable'))
@@ -69,18 +68,18 @@ function initElement(element) {
69
68
  else
70
69
  value = element.value;
71
70
  if (value)
72
- newDocument = value
71
+ newObject = value
73
72
 
74
- delete element.pendingDocument
73
+ delete element.pendingObject
75
74
  }
76
75
 
77
- crdt.getText({ collection, document_id, name, crud: isCrud, save: isSave, read: isRead, newDocument }).then(response => {
76
+ crdt.getText({ array, object, key, crud: isCrud, save: isSave, read: isRead, newObject }).then(response => {
78
77
  if (response === undefined)
79
78
  return;
80
79
  if (!response) {
81
- // if (element.pendingDocument) {
80
+ // if (element.pendingObject) {
82
81
  // isRead = 'true'
83
- // delete element.pendingDocument
82
+ // delete element.pendingObject
84
83
  // }
85
84
 
86
85
  let value;
@@ -91,7 +90,7 @@ function initElement(element) {
91
90
  value = element.value;
92
91
  }
93
92
  if (value)
94
- crdt.replaceText({ collection, document_id, name, value, crud: isCrud, save: isSave, read: isRead });
93
+ crdt.replaceText({ array, object, key, value, crud: isCrud, save: isSave, read: isRead });
95
94
  }
96
95
  else {
97
96
  if (element.hasAttribute('contenteditable')) {
@@ -100,9 +99,13 @@ function initElement(element) {
100
99
  else {
101
100
  element.value = '';
102
101
  }
103
- updateElement({ element, collection, document_id, name, value: response, start: 0 })
102
+ updateElement({ element, array, object, key, value: response, start: 0 })
104
103
  }
105
104
  });
105
+
106
+ element.getValue = async () => {
107
+ return await crdt.getText({ array, object, key })
108
+ }
106
109
  }
107
110
  }
108
111
 
@@ -157,11 +160,11 @@ function _mousedown(event) {
157
160
  }
158
161
  }
159
162
  }
160
- let contentEditable = target.closest('[collection][document_id][name]');
163
+ let contentEditable = target.closest('[array][object][key]');
161
164
  if (contentEditable) {
162
165
  target = contentEditable;
163
- const { collection, document_id, name } = crud.getAttributes(target);
164
- if (collection && document_id && name && !target.hasAttribute('contenteditable'))
166
+ const { array, object, key } = getAttributes(target);
167
+ if (array && object && key && !target.hasAttribute('contenteditable'))
165
168
  target.setAttribute('contenteditable', 'true');
166
169
  }
167
170
  // sendPosition(element)
@@ -169,10 +172,10 @@ function _mousedown(event) {
169
172
 
170
173
  function _blur(event) {
171
174
  let element = event.currentTarget;
172
- const { collection, document_id, name } = crud.getAttributes(element);
175
+ const { array, object, key } = getAttributes(element);
173
176
  let start = null;
174
177
  let end = null;
175
- cursors.sendPosition({ collection, document_id, name, start, end });
178
+ cursors.sendPosition({ array, object, key, start, end });
176
179
  }
177
180
 
178
181
  function _cut(event) {
@@ -285,20 +288,20 @@ export function sendPosition(element) {
285
288
  if (range.element) {
286
289
  element = range.element;
287
290
  }
288
- if (element.tagName == 'HTML' && !element.hasAttribute('collection') || !element.hasAttribute('collection')) {
291
+ if (element.tagName == 'HTML' && !element.hasAttribute('array') || !element.hasAttribute('array')) {
289
292
  element = element.ownerDocument.defaultView.frameElement;
290
293
  }
291
294
  }
292
295
  if (!element) return;
293
- const { collection, document_id, name, isCrdt } = crud.getAttributes(element);
294
- if (isCrdt == 'false' || !collection || !document_id || !name) return;
295
- let currentPosition = { collection, document_id, name, start, end };
296
+ const { array, object, key, isCrdt } = getAttributes(element);
297
+ if (isCrdt == 'false' || !array || !object || !key) return;
298
+ let currentPosition = { array, object, key, start, end };
296
299
  if (JSON.stringify(currentPosition) === JSON.stringify(previousPosition))
297
300
  return;
298
301
  previousPosition = currentPosition;
299
302
  element.activeElement = element;
300
303
  window.activeElement = element;
301
- cursors.sendPosition({ collection, document_id, name, start, end });
304
+ cursors.sendPosition({ array, object, key, start, end });
302
305
  }
303
306
 
304
307
  function updateText({ element, value, start, end, range, undoRedo }) {
@@ -306,20 +309,20 @@ function updateText({ element, value, start, end, range, undoRedo }) {
306
309
  if (range.element)
307
310
  element = range.element;
308
311
 
309
- if (element.tagName == 'HTML' && !element.hasAttribute('collection'))
312
+ if (element.tagName == 'HTML' && !element.hasAttribute('array'))
310
313
  element = element.ownerDocument.defaultView.frameElement;
311
314
  }
312
- const { collection, document_id, name, isCrud, isCrdt, isSave } = crud.getAttributes(element);
313
- if (isCrdt == "false" || !collection || !document_id || !name) return;
315
+ const { array, object, key, isCrud, isCrdt, isSave } = getAttributes(element);
316
+ if (isCrdt == "false" || !array || !object || !key) return;
314
317
 
315
318
  if (undoRedo == 'undo')
316
- return crdt.undoText({ collection, document_id, name, isCrud, isCrdt, isSave })
319
+ return crdt.undoText({ array, object, key, isCrud, isCrdt, isSave })
317
320
  if (undoRedo == 'redo')
318
- return crdt.redoText({ collection, document_id, name, isCrud, isCrdt, isSave })
321
+ return crdt.redoText({ array, object, key, isCrud, isCrdt, isSave })
319
322
 
320
323
  let length = end - start;
321
324
  if (element.tagName === "INPUT" || element.tagName === "TEXTAREA") {
322
- crdt.updateText({ collection, document_id, name, value, start, length, crud: isCrud, save: isSave });
325
+ crdt.updateText({ array, object, key, value, start, length, crud: isCrud, save: isSave });
323
326
  } else {
324
327
  let startEl = range.startContainer.parentElement;
325
328
  let endEl = range.endContainer.parentElement;
@@ -328,7 +331,7 @@ function updateText({ element, value, start, end, range, undoRedo }) {
328
331
  // // value = target.innerHTML;
329
332
  // // replaceInnerText(domTextEditor, target, value)
330
333
  }
331
- crdt.updateText({ collection, document_id, value, name, start, length, crud: isCrud, save: isSave });
334
+ crdt.updateText({ array, object, value, key, start, length, crud: isCrud, save: isSave });
332
335
  }
333
336
  }
334
337
 
@@ -338,9 +341,9 @@ function _crdtUpdateListener() {
338
341
  });
339
342
  }
340
343
 
341
- function updateElements({ elements, collection, document_id, name, value, start, length, string }) {
344
+ function updateElements({ elements, array, object, key, value, start, length, string }) {
342
345
  if (!elements) {
343
- let selectors = `[collection='${collection}'][document_id='${document_id}'][name='${name}']`;
346
+ let selectors = `[array='${array}'][object='${object}'][key='${key}']`;
344
347
  elements = document.querySelectorAll(`input${selectors}, textarea${selectors}, [contenteditable]${selectors}, [editor='dom']${selectors}`);
345
348
  }
346
349
 
@@ -348,11 +351,11 @@ function updateElements({ elements, collection, document_id, name, value, start,
348
351
  let isCrdt = element.getAttribute('crdt');
349
352
  if (!element.hasAttribute('contenteditable') && isCrdt == 'false') return;
350
353
 
351
- updateElement({ element, collection, document_id, name, value, start, length, string });
354
+ updateElement({ element, array, object, key, value, start, length, string });
352
355
  });
353
356
  }
354
357
 
355
- async function updateElement({ element, collection, document_id, name, value, start, length, string }) {
358
+ async function updateElement({ element, array, object, key, value, start, length, string }) {
356
359
  if (element.tagName == 'IFRAME') {
357
360
  let eid = element.getAttribute('eid')
358
361
  element = element.contentDocument.documentElement;
@@ -373,7 +376,7 @@ async function updateElement({ element, collection, document_id, name, value, st
373
376
  else {
374
377
  let domTextEditor = element;
375
378
  if (string == undefined)
376
- string = await crdt.getText({ collection, document_id, name });
379
+ string = await crdt.getText({ array, object, key });
377
380
  let html = string;
378
381
  if (length) {
379
382
  let end = start + length;
@@ -434,10 +437,10 @@ observer.init({
434
437
  observer.init({
435
438
  name: 'CoCreateTextAttribtes',
436
439
  observe: ['attributes'],
437
- attributeName: [...crud.getAttributeNames(['collection', 'document_id', 'name']), 'contenteditable'],
440
+ attributeName: [...getAttributeNames(['array', 'object', 'key']), 'contenteditable'],
438
441
  target: selectors,
439
442
  callback(mutation) {
440
- let _id = mutation.target.getAttribute('document_id')
443
+ let _id = mutation.target.getAttribute('object')
441
444
  if (!_id) {
442
445
  _removeEventListeners(mutation.target)
443
446
  mutation.target.removeAttribute('crdt')
@@ -450,18 +453,18 @@ observer.init({
450
453
  action.init({
451
454
  name: "undo",
452
455
  endEvent: "undo",
453
- callback: (btn, data) => {
454
- const { collection, document_id, name, isCrud, isCrdt, isSave } = crud.getAttributes(btn);
455
- crdt.undoText({ collection, document_id, name, isCrud, isCrdt, isSave })
456
+ callback: (data) => {
457
+ const { array, object, key, isCrud, isCrdt, isSave } = getAttributes(data.element);
458
+ crdt.undoText({ array, object, key, isCrud, isCrdt, isSave })
456
459
  }
457
460
  });
458
461
 
459
462
  action.init({
460
463
  name: "redo",
461
464
  endEvent: "redo",
462
- callback: (btn, data) => {
463
- const { collection, document_id, name, isCrud, isCrdt, isSave } = crud.getAttributes(btn);
464
- crdt.redoText({ collection, document_id, name, isCrud, isCrdt, isSave })
465
+ callback: (data) => {
466
+ const { array, object, key, isCrud, isCrdt, isSave } = getAttributes(data.element);
467
+ crdt.redoText({ array, object, key, isCrud, isCrdt, isSave })
465
468
  }
466
469
  });
467
470
 
package/src/updateText.js CHANGED
@@ -1,79 +1,79 @@
1
- import crud from '@cocreate/crud-client';
2
1
  import crdt from '@cocreate/crdt';
3
- import {getStringPosition} from '@cocreate/selection';
2
+ import {getAttributes} from '@cocreate/elements';
3
+ import { getStringPosition } from '@cocreate/selection';
4
4
 
5
5
  export function insertAdjacentElement({ domTextEditor, target, position, element, elementValue }) {
6
- let remove;
7
- if (element && !elementValue) {
8
- remove = getStringPosition({ string: domTextEditor.htmlString, target: element });
9
- if (!remove.start && !remove.end)
10
- throw new Error('insertAdjacentElement: element not found');
11
- elementValue = domTextEditor.htmlString.substring(remove.start, remove.end);
12
- }
13
-
14
- let {start} = getStringPosition({ string: domTextEditor.htmlString, target, position, value: elementValue });
15
- if (remove)
16
- _updateText({domTextEditor, start: remove.start, end: remove.end});
17
- if (remove && remove.start < start){
18
- let length = remove.end - remove.start;
19
- _updateText({ domTextEditor, value: elementValue, start: start - length});
20
- }
21
- else
22
- _updateText({ domTextEditor, value: elementValue, start});
6
+ let remove;
7
+ if (element && !elementValue) {
8
+ remove = getStringPosition({ string: domTextEditor.htmlString, target: element });
9
+ if (!remove.start && !remove.end)
10
+ throw new Error('insertAdjacentElement: element not found');
11
+ elementValue = domTextEditor.htmlString.substring(remove.start, remove.end);
12
+ }
13
+
14
+ let { start } = getStringPosition({ string: domTextEditor.htmlString, target, position, value: elementValue });
15
+ if (remove)
16
+ _updateText({ domTextEditor, start: remove.start, end: remove.end });
17
+ if (remove && remove.start < start) {
18
+ let length = remove.end - remove.start;
19
+ _updateText({ domTextEditor, value: elementValue, start: start - length });
20
+ }
21
+ else
22
+ _updateText({ domTextEditor, value: elementValue, start });
23
23
  }
24
24
 
25
25
  export function removeElement({ domTextEditor, target }) {
26
- updateDomText({ domTextEditor, target });
26
+ updateDomText({ domTextEditor, target });
27
27
  }
28
28
 
29
29
  export function setInnerText({ domTextEditor, target, value, start, end }) {
30
- updateDomText({ domTextEditor, target, value, pos: {start, end} });
30
+ updateDomText({ domTextEditor, target, value, pos: { start, end } });
31
31
  }
32
32
 
33
33
  export function setClass({ domTextEditor, target, value }) {
34
- updateDomText({ domTextEditor, target, attribute: 'class', value });
34
+ updateDomText({ domTextEditor, target, attribute: 'class', value });
35
35
  }
36
36
  export function removeClass({ domTextEditor, target, value }) {
37
- updateDomText({ domTextEditor, target, attribute: 'class', value, remove: true });
37
+ updateDomText({ domTextEditor, target, attribute: 'class', value, remove: true });
38
38
  }
39
39
 
40
40
  export function setStyle({ domTextEditor, target, property, value }) {
41
- updateDomText({ domTextEditor, target, attribute: 'style', property, value });
41
+ updateDomText({ domTextEditor, target, attribute: 'style', property, value });
42
42
  }
43
43
 
44
44
  export function removeStyle({ domTextEditor, target, property }) {
45
- updateDomText({ domTextEditor, target, attribute: 'style', property, remove: true });
45
+ updateDomText({ domTextEditor, target, attribute: 'style', property, remove: true });
46
46
  }
47
47
 
48
48
  export function setAttribute({ domTextEditor, target, name, value }) {
49
- updateDomText({ domTextEditor, target, attribute: name, value });
49
+ updateDomText({ domTextEditor, target, attribute: name, value });
50
50
  }
51
51
 
52
52
  export function removeAttribute({ domTextEditor, target, name }) {
53
- updateDomText({ domTextEditor, target, attribute: name, remove: 'true'});
53
+ updateDomText({ domTextEditor, target, attribute: name, remove: 'true' });
54
54
  }
55
55
 
56
56
  export function replaceInnerText({ domTextEditor, target, value }) {
57
- updateDomText({ domTextEditor, target, value });
57
+ updateDomText({ domTextEditor, target, value });
58
58
  }
59
59
 
60
60
  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
- if (pos){
63
- start += pos.start;
64
- end += pos.end;
65
- }
66
- if (start != end)
67
- _updateText({domTextEditor, start, end});
68
- if (attribute && remove != 'true' || attribute && value)
69
- _updateText({ domTextEditor, value: ` ${attribute}="${newValue}"`, start });
70
- else if (value)
71
- _updateText({ domTextEditor, value, start });
61
+ let { start, end, newValue } = getStringPosition({ string: domTextEditor.htmlString, target, attribute, property, value, remove });
62
+ if (pos) {
63
+ start += pos.start;
64
+ end += pos.end;
65
+ }
66
+ if (start != end)
67
+ _updateText({ domTextEditor, start, end });
68
+ if (attribute && remove != 'true' || attribute && value)
69
+ _updateText({ domTextEditor, value: ` ${attribute}="${newValue}"`, start });
70
+ else if (value)
71
+ _updateText({ domTextEditor, value, start });
72
72
  }
73
73
 
74
- function _updateText({ domTextEditor, value, start, end}) {
75
- if (domTextEditor.tagName =='HTML')
74
+ function _updateText({ domTextEditor, value, start, end }) {
75
+ if (domTextEditor.tagName == 'HTML')
76
76
  domTextEditor = domTextEditor.ownerDocument.defaultView.frameElement;
77
- const { collection, document_id, name, isCrud } = crud.getAttributes(domTextEditor);
78
- crdt.updateText({ collection, document_id, name, value, start, length: end - start, crud: isCrud });
77
+ const { array, object, key, isCrud } = getAttributes(domTextEditor);
78
+ crdt.updateText({ array, object, key, value, start, length: end - start, crud: isCrud });
79
79
  }
package/webpack.config.js CHANGED
@@ -1,84 +1,88 @@
1
1
  const path = require("path")
2
2
  const TerserPlugin = require("terser-webpack-plugin")
3
3
  const MiniCssExtractPlugin = require("mini-css-extract-plugin")
4
- let isProduction = process.env.NODE_ENV === "production"
5
4
  const { CleanWebpackPlugin } = require("clean-webpack-plugin")
6
5
 
7
- module.exports = {
8
- entry: {
9
- "CoCreate-text": "./src/index.js",
10
- },
11
- output: {
12
- path: path.resolve(__dirname, "dist"),
13
- filename: isProduction ? "[name].min.js" : "[name].js",
14
- libraryTarget: "umd",
15
- libraryExport: "default",
16
- library: ["CoCreate", "text"],
17
- globalObject: "this",
18
- },
6
+ module.exports = (env, argv) => {
7
+ let isProduction = false
8
+ if (argv.mode === 'production')
9
+ isProduction = true
19
10
 
20
- plugins: [
21
- new CleanWebpackPlugin(),
22
- new MiniCssExtractPlugin({
23
- filename: "[name].css",
24
- }),
25
- ],
26
- // Default mode for Webpack is production.
27
- // Depending on mode Webpack will apply different things
28
- // on final bundle. For now we don't need production's JavaScript
29
- // minifying and other thing so let's set mode to development
30
- mode: isProduction ? "production" : "development",
31
- module: {
32
- rules: [
33
- {
34
- test: /.js$/,
35
- exclude: /(node_modules)/,
36
- use: {
37
- loader: "babel-loader",
38
- options: {
39
- plugins: ["@babel/plugin-transform-modules-commonjs"],
40
- },
11
+ const config = {
12
+ entry: {
13
+ "CoCreate-text": "./src/index.js",
41
14
  },
42
- },
43
- {
44
- test: /.css$/i,
45
- use: [
46
- { loader: "style-loader", options: { injectType: "linkTag" } },
47
- "file-loader",
15
+ output: {
16
+ path: path.resolve(__dirname, "dist"),
17
+ filename: isProduction ? "[name].min.js" : "[name].js",
18
+ libraryTarget: "umd",
19
+ libraryExport: "default",
20
+ library: ["CoCreate", "text"],
21
+ globalObject: "this",
22
+ },
23
+
24
+ plugins: [
25
+ new CleanWebpackPlugin(),
26
+ new MiniCssExtractPlugin({
27
+ filename: "[name].css",
28
+ }),
48
29
  ],
49
- },
50
- ],
51
- },
30
+ // Default mode for Webpack is production.
31
+ // Depending on mode Webpack will apply different things
32
+ // on final bundle. For now we don't need production's JavaScript
33
+ // minifying and other thing so let's set mode to development
34
+ mode: isProduction ? "production" : "development",
35
+ module: {
36
+ rules: [
37
+ {
38
+ test: /.js$/,
39
+ exclude: /(node_modules)/,
40
+ use: {
41
+ loader: "babel-loader",
42
+ options: {
43
+ plugins: ["@babel/plugin-transform-modules-commonjs"],
44
+ },
45
+ },
46
+ },
47
+ {
48
+ test: /.css$/i,
49
+ use: [
50
+ { loader: "style-loader", options: { injectType: "linkTag" } },
51
+ "file-loader",
52
+ ],
53
+ },
54
+ ],
55
+ },
52
56
 
53
- // add source map
54
- ...(isProduction ? {} : { devtool: "eval-source-map" }),
57
+ // add source map
58
+ ...(isProduction ? {} : { devtool: "eval-source-map" }),
55
59
 
56
- // optimization: {
57
- // minimize: true,
58
- // minimizer: [
59
- // new TerserPlugin({
60
- // extractComments: true,
61
- // // cache: true,
62
- // parallel: true,
63
- // // sourceMap: true, // Must be set to true if using source-maps in production
64
- // terserOptions: {
65
- // // https://github.com/webpack-contrib/terser-webpack-plugin#terseroptions
66
- // // extractComments: 'all',
67
- // compress: {
68
- // drop_console: true,
69
- // },
70
- // },
71
- // }),
72
- // ],
73
- // splitChunks: {
74
- // chunks: "all",
75
- // minSize: 200,
76
- // // maxSize: 99999,
77
- // //minChunks: 1,
60
+ // optimization: {
61
+ // minimize: true,
62
+ // minimizer: [
63
+ // new TerserPlugin({
64
+ // extractComments: true,
65
+ // // cache: true,
66
+ // parallel: true,
67
+ // // sourceMap: true, // Must be set to true if using source-maps in production
68
+ // terserOptions: {
69
+ // // https://github.com/webpack-contrib/terser-webpack-plugin#terseroptions
70
+ // // extractComments: 'all',
71
+ // compress: {
72
+ // drop_console: true,
73
+ // },
74
+ // },
75
+ // }),
76
+ // ],
77
+ // splitChunks: {
78
+ // chunks: "all",
79
+ // minSize: 200,
80
+ // // maxSize: 99999,
81
+ // //minChunks: 1,
78
82
 
79
- // cacheGroups: {
80
- // defaultVendors: false,
81
- // },
82
- // },
83
- // },
84
- }
83
+ // cacheGroups: {
84
+ // defaultVendors: false,
85
+ // },
86
+ // },
87
+ // },
88
+ }
@@ -1,32 +0,0 @@
1
- /*globals CustomEvent*/
2
- import action from '@cocreate/actions';
3
- import crud from '@cocreate/crud-client';
4
- import crdt from '@cocreate/crdt';
5
-
6
- function save(btn){
7
- const { collection, document_id, name, namespace, room, broadcast, broadcastSender, isUpsert} = crud.getAttributes(btn);
8
- crdt.getText({collection, document_id, name}).then(response => {
9
- crud.updateDocument({
10
- collection,
11
- document: {
12
- _id: document_id,
13
- [name]: response
14
- },
15
- upsert: isUpsert,
16
- namespace,
17
- room,
18
- broadcast,
19
- broadcastSender
20
- });
21
-
22
- document.dispatchEvent(new CustomEvent('savedDomText'));
23
- });
24
- }
25
-
26
- action.init({
27
- name: "saveDomText",
28
- endEvent: "savedDomText",
29
- callback: (btn, data) => {
30
- save(btn);
31
- },
32
- });