@taufik-nurrohman/text-editor.source 2.2.6 → 2.2.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. package/LICENSE +1 -1
  2. package/index.js +131 -113
  3. package/index.min.js +2 -2
  4. package/package.json +1 -1
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright © 2022 Taufik Nurrohman <https://github.com/taufik-nurrohman>
3
+ Copyright © 2023 Taufik Nurrohman <https://github.com/taufik-nurrohman>
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the “Software”), to deal
package/index.js CHANGED
@@ -2,7 +2,7 @@
2
2
  *
3
3
  * The MIT License (MIT)
4
4
  *
5
- * Copyright © 2022 Taufik Nurrohman <https://github.com/taufik-nurrohman>
5
+ * Copyright © 2023 Taufik Nurrohman <https://github.com/taufik-nurrohman>
6
6
  *
7
7
  * Permission is hereby granted, free of charge, to any person obtaining a copy
8
8
  * of this software and associated documentation files (the “Software”), to deal
@@ -23,9 +23,9 @@
23
23
  * SOFTWARE.
24
24
  *
25
25
  */
26
- (function (global, factory) {
27
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.TE = global.TE || {}, global.TE.Source = {})));
28
- })(this, function (exports) {
26
+ (function (g, f) {
27
+ typeof exports === 'object' && typeof module !== 'undefined' ? f(exports) : typeof define === 'function' && define.amd ? define(['exports'], f) : (g = typeof globalThis !== 'undefined' ? globalThis : g || self, f((g.TE = g.TE || {}, g.TE.Source = {})));
28
+ })(this, (function (exports) {
29
29
  'use strict';
30
30
  var hasValue = function hasValue(x, data) {
31
31
  return -1 !== data.indexOf(x);
@@ -36,8 +36,8 @@
36
36
  var isDefined = function isDefined(x) {
37
37
  return 'undefined' !== typeof x;
38
38
  };
39
- var isInstance = function isInstance(x, of ) {
40
- return x && isSet$1( of ) && x instanceof of ;
39
+ var isInstance = function isInstance(x, of) {
40
+ return x && isSet$1(of) && x instanceof of ;
41
41
  };
42
42
  var isNull = function isNull(x) {
43
43
  return null === x;
@@ -72,11 +72,12 @@
72
72
  var toPattern = function toPattern(pattern, opt) {
73
73
  if (isPattern(pattern)) {
74
74
  return pattern;
75
- } // No need to escape `/` in the pattern string
75
+ }
76
+ // No need to escape `/` in the pattern string
76
77
  pattern = pattern.replace(/\//g, '\\/');
77
78
  return new RegExp(pattern, isSet$1(opt) ? opt : 'g');
78
79
  };
79
- const pairs = {
80
+ var pairs = {
80
81
  '`': '`',
81
82
  '(': ')',
82
83
  '{': '}',
@@ -87,31 +88,38 @@
87
88
  };
88
89
 
89
90
  function promisify(type, lot) {
90
- return new Promise((resolve, reject) => {
91
- let r = W[type].apply(W, lot);
91
+ return new Promise(function (resolve, reject) {
92
+ var r = W[type].apply(W, lot);
92
93
  return r ? resolve(r) : reject(r);
93
94
  });
94
95
  }
95
- const defaults = {
96
+ var defaults = {
96
97
  source: {
97
- pairs,
98
+ pairs: pairs,
98
99
  type: null
99
100
  }
100
101
  };
101
- ['alert', 'confirm', 'prompt'].forEach(type => {
102
- defaults.source[type] = (...lot) => promisify(type, lot);
102
+ ['alert', 'confirm', 'prompt'].forEach(function (type) {
103
+ defaults.source[type] = function () {
104
+ for (var _len = arguments.length, lot = new Array(_len), _key = 0; _key < _len; _key++) {
105
+ lot[_key] = arguments[_key];
106
+ }
107
+ return promisify(type, lot);
108
+ };
103
109
  });
104
- const that = {};
105
- that.toggle = function (open, close, wrap, tidy = false) {
110
+ var that = {};
111
+ that.toggle = function (open, close, wrap, tidy) {
112
+ if (tidy === void 0) {
113
+ tidy = false;
114
+ }
106
115
  if (!close && "" !== close) {
107
116
  close = open;
108
117
  }
109
- let t = this,
110
- {
111
- after,
112
- before,
113
- value
114
- } = t.$(),
118
+ var t = this,
119
+ _t$$ = t.$(),
120
+ after = _t$$.after,
121
+ before = _t$$.before,
122
+ value = _t$$.value,
115
123
  closeCount = toCount(close),
116
124
  openCount = toCount(open);
117
125
  if (wrap && close === value.slice(-closeCount) && open === value.slice(0, openCount) || close === after.slice(0, closeCount) && open === before.slice(-openCount)) {
@@ -130,47 +138,44 @@
130
138
  }
131
139
  return t.wrap(open, close, wrap);
132
140
  };
133
- const CTRL_PREFIX = 'Control-';
134
- const SHIFT_PREFIX = 'Shift-';
141
+ var CTRL_PREFIX = 'Control-';
142
+ var SHIFT_PREFIX = 'Shift-';
135
143
 
136
144
  function canKeyDown(map, that) {
137
- let charAfter,
145
+ var charAfter,
138
146
  charBefore,
139
147
  charIndent = that.state.source.tab || that.state.tab || '\t',
140
148
  charPairs = that.state.source.pairs || {},
141
149
  charPairsValues = toObjectValues(charPairs),
142
- {
143
- key,
144
- queue
145
- } = map,
146
- keyValue = map + ""; // Do nothing
150
+ key = map.key,
151
+ queue = map.queue,
152
+ keyValue = map + "";
153
+ // Do nothing
147
154
  if (queue.Alt || queue.Control) {
148
155
  return true;
149
156
  }
150
157
  if (' ' === keyValue) {
151
- let {
152
- after,
153
- before,
154
- value
155
- } = that.$();
156
- charAfter = charPairs[charBefore = before.slice(-1)];
157
- if (!value && charAfter && charBefore && charAfter === after[0]) {
158
+ var _that$$ = that.$(),
159
+ _after = _that$$.after,
160
+ _before = _that$$.before,
161
+ _value = _that$$.value;
162
+ charAfter = charPairs[charBefore = _before.slice(-1)];
163
+ if (!_value && charAfter && charBefore && charAfter === _after[0]) {
158
164
  that.wrap(' ', ' ');
159
165
  return false;
160
166
  }
161
167
  return true;
162
168
  }
163
169
  if ('Enter' === keyValue) {
164
- let {
165
- after,
166
- before,
167
- value
168
- } = that.$(),
169
- lineBefore = before.split('\n').pop(),
170
+ var _that$$2 = that.$(),
171
+ _after2 = _that$$2.after,
172
+ _before2 = _that$$2.before,
173
+ _value2 = _that$$2.value,
174
+ lineBefore = _before2.split('\n').pop(),
170
175
  lineMatch = lineBefore.match(/^(\s+)/),
171
176
  lineMatchIndent = lineMatch && lineMatch[1] || "";
172
- if (!value) {
173
- if (after && before && (charAfter = charPairs[charBefore = before.slice(-1)]) && charAfter === after[0]) {
177
+ if (!_value2) {
178
+ if (_after2 && _before2 && (charAfter = charPairs[charBefore = _before2.slice(-1)]) && charAfter === _after2[0]) {
174
179
  that.wrap('\n' + lineMatchIndent + (charBefore !== charAfter ? charIndent : ""), '\n' + lineMatchIndent).record();
175
180
  return false;
176
181
  }
@@ -182,40 +187,41 @@
182
187
  return true;
183
188
  }
184
189
  if ('Backspace' === keyValue) {
185
- let {
186
- after,
187
- before,
188
- value
189
- } = that.$();
190
- after.split('\n')[0];
191
- let lineBefore = before.split('\n').pop(),
192
- lineMatch = lineBefore.match(/^(\s+)/),
193
- lineMatchIndent = lineMatch && lineMatch[1] || "";
194
- charAfter = charPairs[charBefore = before.slice(-1)]; // Do nothing on escape
190
+ var _that$$3 = that.$(),
191
+ _after3 = _that$$3.after,
192
+ _before3 = _that$$3.before,
193
+ _value3 = _that$$3.value;
194
+ _after3.split('\n')[0];
195
+ var _lineBefore = _before3.split('\n').pop(),
196
+ _lineMatch = _lineBefore.match(/^(\s+)/),
197
+ _lineMatchIndent = _lineMatch && _lineMatch[1] || "";
198
+ charAfter = charPairs[charBefore = _before3.slice(-1)];
199
+ // Do nothing on escape
195
200
  if ('\\' === charBefore) {
196
201
  return true;
197
202
  }
198
- if (value) {
199
- if (after && before && charAfter && charAfter === after[0] && !before.endsWith('\\' + charBefore)) {
203
+ if (_value3) {
204
+ if (_after3 && _before3 && charAfter && charAfter === _after3[0] && !_before3.endsWith('\\' + charBefore)) {
200
205
  that.record().peel(charBefore, charAfter).record();
201
206
  return false;
202
207
  }
203
208
  return true;
204
209
  }
205
- charAfter = charPairs[charBefore = before.trim().slice(-1)];
210
+ charAfter = charPairs[charBefore = _before3.trim().slice(-1)];
206
211
  if (charAfter && charBefore) {
207
- if (after.startsWith(' ' + charAfter) && before.endsWith(charBefore + ' ') || after.startsWith('\n' + lineMatchIndent + charAfter) && before.endsWith(charBefore + '\n' + lineMatchIndent)) {
212
+ if (_after3.startsWith(' ' + charAfter) && _before3.endsWith(charBefore + ' ') || _after3.startsWith('\n' + _lineMatchIndent + charAfter) && _before3.endsWith(charBefore + '\n' + _lineMatchIndent)) {
208
213
  // Collapse bracket(s)
209
214
  that.trim("", "").record();
210
215
  return false;
211
216
  }
212
- } // Outdent
213
- if (lineBefore.endsWith(charIndent)) {
217
+ }
218
+ // Outdent
219
+ if (_lineBefore.endsWith(charIndent)) {
214
220
  that.pull(charIndent).record();
215
221
  return false;
216
222
  }
217
- if (after && before && !before.endsWith('\\' + charBefore)) {
218
- if (charAfter === after[0] && charBefore === before.slice(-1)) {
223
+ if (_after3 && _before3 && !_before3.endsWith('\\' + charBefore)) {
224
+ if (charAfter === _after3[0] && charBefore === _before3.slice(-1)) {
219
225
  // Peel pair
220
226
  that.peel(charBefore, charAfter).record();
221
227
  return false;
@@ -223,16 +229,17 @@
223
229
  }
224
230
  return true;
225
231
  }
226
- let {
227
- after,
228
- before,
229
- start,
230
- value
231
- } = that.$(); // Do nothing on escape
232
+ var _that$$4 = that.$(),
233
+ after = _that$$4.after,
234
+ before = _that$$4.before,
235
+ start = _that$$4.start,
236
+ value = _that$$4.value;
237
+ // Do nothing on escape
232
238
  if ('\\' === (charBefore = before.slice(-1))) {
233
239
  return true;
234
240
  }
235
- charAfter = hasValue(after[0], charPairsValues) ? after[0] : charPairs[charBefore]; // `|}`
241
+ charAfter = hasValue(after[0], charPairsValues) ? after[0] : charPairs[charBefore];
242
+ // `|}`
236
243
  if (!value && after && before && charAfter && key === charAfter) {
237
244
  // Move to the next character
238
245
  // `}|`
@@ -240,13 +247,15 @@
240
247
  return false;
241
248
  }
242
249
  for (charBefore in charPairs) {
243
- charAfter = charPairs[charBefore]; // `{|`
250
+ charAfter = charPairs[charBefore];
251
+ // `{|`
244
252
  if (key === charBefore && charAfter) {
245
253
  // Wrap pair or selection
246
254
  // `{|}` `{|aaa|}`
247
255
  that.wrap(charBefore, charAfter).record();
248
256
  return false;
249
- } // `|}`
257
+ }
258
+ // `|}`
250
259
  if (key === charAfter) {
251
260
  if (value) {
252
261
  // Wrap selection
@@ -261,12 +270,16 @@
261
270
  }
262
271
 
263
272
  function canKeyDownDent(map, that) {
264
- let charIndent = that.state.source.tab || that.state.tab || '\t',
265
- keyValue = map + ""; // Indent with `⎈]`
273
+ var charIndent = that.state.source.tab || that.state.tab || '\t';
274
+ map.key;
275
+ map.queue;
276
+ var keyValue = map + "";
277
+ // Indent with `⎈]`
266
278
  if (CTRL_PREFIX + ']' === keyValue) {
267
279
  that.push(charIndent).record();
268
280
  return false;
269
- } // Outdent with `⎈[`
281
+ }
282
+ // Outdent with `⎈[`
270
283
  if (CTRL_PREFIX + '[' === keyValue) {
271
284
  that.pull(charIndent).record();
272
285
  return false;
@@ -275,18 +288,15 @@
275
288
  }
276
289
 
277
290
  function canKeyDownEnter(map, that) {
278
- let {
279
- key,
280
- queue
281
- } = map;
291
+ map.key;
292
+ var queue = map.queue;
282
293
  if (queue.Control && queue.Enter) {
283
- let {
284
- after,
285
- before,
286
- end,
287
- start,
288
- value
289
- } = that.$(),
294
+ var _that$$5 = that.$(),
295
+ after = _that$$5.after,
296
+ before = _that$$5.before,
297
+ end = _that$$5.end,
298
+ start = _that$$5.start,
299
+ value = _that$$5.value,
290
300
  lineAfter = after.split('\n').shift(),
291
301
  lineBefore = before.split('\n').pop(),
292
302
  lineMatch = lineBefore.match(/^(\s+)/),
@@ -295,7 +305,8 @@
295
305
  if (queue.Shift) {
296
306
  // Insert line over with `⎈⇧↵`
297
307
  return that.select(start - toCount(lineBefore)).wrap(lineMatchIndent, '\n').insert(value).record(), false;
298
- } // Insert line below with `⎈↵`
308
+ }
309
+ // Insert line below with `⎈↵`
299
310
  return that.select(end + toCount(lineAfter)).wrap('\n' + lineMatchIndent, "").insert(value).record(), false;
300
311
  }
301
312
  }
@@ -303,10 +314,12 @@
303
314
  }
304
315
 
305
316
  function canKeyDownHistory(map, that) {
306
- let keyValue = map + ""; // Redo with `⎈y`
317
+ var keyValue = map + "";
318
+ // Redo with `⎈y`
307
319
  if (CTRL_PREFIX + 'y' === keyValue) {
308
320
  return that.redo(), false;
309
- } // Undo with `⎈z`
321
+ }
322
+ // Undo with `⎈z`
310
323
  if (CTRL_PREFIX + 'z' === keyValue) {
311
324
  return that.undo(), false;
312
325
  }
@@ -314,21 +327,18 @@
314
327
  }
315
328
 
316
329
  function canKeyDownMove(map, that) {
317
- let {
318
- key,
319
- queue
320
- } = map,
321
- keyValue = map + "";
330
+ map.key;
331
+ var queue = map.queue,
332
+ keyValue = map + "";
322
333
  if (!queue.Control) {
323
334
  return true;
324
335
  }
325
- let {
326
- after,
327
- before,
328
- end,
329
- start,
330
- value
331
- } = that.$(),
336
+ var _that$$6 = that.$(),
337
+ after = _that$$6.after,
338
+ before = _that$$6.before,
339
+ end = _that$$6.end,
340
+ start = _that$$6.start,
341
+ value = _that$$6.value,
332
342
  charPair,
333
343
  charPairValue,
334
344
  charPairs = that.state.source.pairs || {},
@@ -359,10 +369,11 @@
359
369
  return that.select(), false;
360
370
  }
361
371
  }
362
- let lineAfter = after.split('\n').shift(),
372
+ var lineAfter = after.split('\n').shift(),
363
373
  lineBefore = before.split('\n').pop(),
364
374
  lineMatch = lineBefore.match(/^(\s+)/);
365
- lineMatch && lineMatch[1] || ""; // Force to select the current line if there is no selection
375
+ lineMatch && lineMatch[1] || "";
376
+ // Force to select the current line if there is no selection
366
377
  end += toCount(lineAfter);
367
378
  start -= toCount(lineBefore);
368
379
  value = lineBefore + value + lineAfter;
@@ -373,7 +384,7 @@
373
384
  that.insert("");
374
385
  that.replace(/^([^\n]*?)(\n|$)/, '$2', 1);
375
386
  that.replace(/(^|\n)([^\n]*?)$/, "", -1);
376
- let $ = that.$();
387
+ var $ = that.$();
377
388
  before = $.before;
378
389
  start = $.start;
379
390
  lineBefore = before.split('\n').pop();
@@ -388,9 +399,9 @@
388
399
  that.insert("");
389
400
  that.replace(/^([^\n]*?)(\n|$)/, "", 1);
390
401
  that.replace(/(^|\n)([^\n]*?)$/, '$1', -1);
391
- let $ = that.$();
392
- after = $.after;
393
- end = $.end;
402
+ var _$ = that.$();
403
+ after = _$.after;
404
+ end = _$.end;
394
405
  lineAfter = after.split('\n').shift();
395
406
  that.select(end = end + toCount(lineAfter)).wrap('\n', value);
396
407
  end += 1;
@@ -401,22 +412,26 @@
401
412
  }
402
413
 
403
414
  function canKeyDownTab(map, that) {
404
- let charIndent = that.state.source.tab || that.state.tab || '\t',
405
- keyValue = map + ""; // Indent with `⇥`
415
+ var charIndent = that.state.source.tab || that.state.tab || '\t',
416
+ keyValue = map + "";
417
+ // Indent with `⇥`
406
418
  if ('Tab' === keyValue) {
407
419
  return that.push(charIndent).record(), false;
408
- } // Outdent with `⇧+⇥`
420
+ }
421
+ // Outdent with `⇧+⇥`
409
422
  if (SHIFT_PREFIX + 'Tab' === keyValue) {
410
423
  return that.pull(charIndent).record(), false;
411
424
  }
412
425
  return true;
413
426
  }
414
- let bounce = debounce(that => that.record(), 100);
427
+ var bounce = debounce(function (that) {
428
+ return that.record();
429
+ }, 100);
415
430
 
416
431
  function canKeyUp(map, that) {
417
432
  return bounce(that), true;
418
433
  }
419
- const state = defaults;
434
+ var state = defaults;
420
435
  exports.canKeyDown = canKeyDown;
421
436
  exports.canKeyDownDent = canKeyDownDent;
422
437
  exports.canKeyDownEnter = canKeyDownEnter;
@@ -426,4 +441,7 @@
426
441
  exports.canKeyUp = canKeyUp;
427
442
  exports.state = state;
428
443
  exports.that = that;
429
- });
444
+ Object.defineProperty(exports, '__esModule', {
445
+ value: true
446
+ });
447
+ }));
package/index.min.js CHANGED
@@ -2,7 +2,7 @@
2
2
  *
3
3
  * The MIT License (MIT)
4
4
  *
5
- * Copyright © 2022 Taufik Nurrohman <https://github.com/taufik-nurrohman>
5
+ * Copyright © 2023 Taufik Nurrohman <https://github.com/taufik-nurrohman>
6
6
  *
7
7
  * Permission is hereby granted, free of charge, to any person obtaining a copy
8
8
  * of this software and associated documentation files (the “Software”), to deal
@@ -23,4 +23,4 @@
23
23
  * SOFTWARE.
24
24
  *
25
25
  */
26
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(((e="undefined"!=typeof globalThis?globalThis:e||self).TE=e.TE||{},e.TE.Source={}))}(this,(function(e){"use strict";var t=function(e,t){return-1!==t.indexOf(e)},r=function(e){return function(e){return void 0!==e}(e)&&!function(e){return null===e}(e)},n=function(e){return e.length},o=window,i=function(e){return n=RegExp,(t=e)&&r(n)&&t instanceof n;var t,n},s=function(e,t){return i(e)?e:(e=e.replace(/\//g,"\\/"),RegExp(e,r(t)?t:"g"))};const c={source:{pairs:{"`":"`","(":")","{":"}","[":"]",'"':'"',"'":"'","<":">"},type:null}};["alert","confirm","prompt"].forEach((e=>{c.source[e]=(...t)=>function(e,t){return new Promise(((r,n)=>{let i=o[e].apply(o,t);return i?r(i):n(i)}))}(e,t)}));const l={};l.toggle=function(e,t,r,o=!1){t||""===t||(t=e);let i=this,{after:s,before:c,value:l}=i.$(),u=n(t),a=n(e);return r&&t===l.slice(-u)&&e===l.slice(0,a)||t===s.slice(0,u)&&e===c.slice(-a)?i.peel(e,t,r):(!1!==o&&("string"==typeof o?o=[o,o]:function(e){return Array.isArray(e)}(o)||(o=["",""]),isSet(o[1])||(o[1]=o[0]),i.trim(o[0],o[1])),i.wrap(e,t,r))};let u=(a=e=>e.record(),f=100,function(){var e=arguments,t=this;p&&clearTimeout(p),p=setTimeout((function(){return a.apply(t,e)}),f)});var a,f,p;const d=c;e.canKeyDown=function(e,r){let n,o,i=r.state.source.tab||r.state.tab||"\t",s=r.state.source.pairs||{},c=Object.values(s),{key:l,queue:u}=e,a=e+"";if(u.Alt||u.Control)return!0;if(" "===a){let{after:e,before:t,value:i}=r.$();return n=s[o=t.slice(-1)],!(!i&&n&&o&&n===e[0])||(r.wrap(" "," "),!1)}if("Enter"===a){let{after:e,before:t,value:c}=r.$(),l=t.split("\n").pop().match(/^(\s+)/),u=l&&l[1]||"";if(!c){if(e&&t&&(n=s[o=t.slice(-1)])&&n===e[0])return r.wrap("\n"+u+(o!==n?i:""),"\n"+u).record(),!1;if(u)return r.insert("\n"+u,-1).record(),!1}return!0}if("Backspace"===a){let{after:e,before:t,value:c}=r.$();e.split("\n")[0];let l=t.split("\n").pop(),u=l.match(/^(\s+)/),a=u&&u[1]||"";return n=s[o=t.slice(-1)],"\\"===o?!0:c?!(e&&t&&n&&n===e[0]&&!t.endsWith("\\"+o))||(r.record().peel(o,n).record(),!1):(n=s[o=t.trim().slice(-1)],n&&o&&(e.startsWith(" "+n)&&t.endsWith(o+" ")||e.startsWith("\n"+a+n)&&t.endsWith(o+"\n"+a))?(r.trim("","").record(),!1):l.endsWith(i)?(r.pull(i).record(),!1):!(e&&t&&!t.endsWith("\\"+o)&&n===e[0]&&o===t.slice(-1))||(r.peel(o,n).record(),!1))}let{after:f,before:p,start:d,value:h}=r.$();if("\\"===(o=p.slice(-1)))return!0;if(n=t(f[0],c)?f[0]:s[o],!h&&f&&p&&n&&l===n)return r.select(d+1).record(),!1;for(o in s){if(n=s[o],l===o&&n)return r.wrap(o,n).record(),!1;if(l===n){if(h)return r.record().wrap(o,n).record(),!1;break}}return!0},e.canKeyDownDent=function(e,t){let r=t.state.source.tab||t.state.tab||"\t",n=e+"";return"Control-]"===n?(t.push(r).record(),!1):"Control-["!==n||(t.pull(r).record(),!1)},e.canKeyDownEnter=function(e,t){let{key:r,queue:o}=e;if(o.Control&&o.Enter){let{after:e,before:r,end:i,start:s,value:c}=t.$(),l=e.split("\n").shift(),u=r.split("\n").pop(),a=u.match(/^(\s+)/),f=a&&a[1]||"";if(r||e)return o.Shift?(t.select(s-n(u)).wrap(f,"\n").insert(c).record(),!1):(t.select(i+n(l)).wrap("\n"+f,"").insert(c).record(),!1)}return!0},e.canKeyDownHistory=function(e,t){let r=e+"";return"Control-y"===r?(t.redo(),!1):"Control-z"!==r||(t.undo(),!1)},e.canKeyDownMove=function(e,r){let{key:o,queue:i}=e,c=e+"";if(!i.Control)return!0;let l,u,a,{after:f,before:p,end:d,start:h,value:w}=r.$(),b=r.state.source.pairs||{},y=[];if(w){for(l in b)(u=b[l])&&y.push("(?:\\"+l+"(?:\\\\.|[^\\"+l+(u!==l?"\\"+u:"")+"])*\\"+u+")");if(y.push("\\w+"),y.push("\\s+"),y.push("[\\s\\S]"),"Control-ArrowLeft"===c)return(a=p.match(s("("+y.join("|")+")$","")))?(r.insert("").select(h-n(a[0])).insert(w),r.record(),!1):(r.select(),!1);if("Control-ArrowRight"===c)return(a=f.match(s("^("+y.join("|")+")","")))?(r.insert("").select(d+n(a[0])-n(w)).insert(w),r.record(),!1):(r.select(),!1)}let m=f.split("\n").shift(),$=p.split("\n").pop(),v=$.match(/^(\s+)/);if(v&&v[1],d+=n(m),h-=n($),w=$+w+m,"Control-ArrowUp"===c){if(!t("\n",p))return r.select(),!1;r.insert(""),r.replace(/^([^\n]*?)(\n|$)/,"$2",1),r.replace(/(^|\n)([^\n]*?)$/,"",-1);let e=r.$();return p=e.before,h=e.start,$=p.split("\n").pop(),r.select(h-=n($)).wrap(w,"\n"),r.select(h,h+n(w)),r.record(),!1}if("Control-ArrowDown"===c){if(!t("\n",f))return r.select(),!1;r.insert(""),r.replace(/^([^\n]*?)(\n|$)/,"",1),r.replace(/(^|\n)([^\n]*?)$/,"$1",-1);let e=r.$();return f=e.after,d=e.end,m=f.split("\n").shift(),r.select(d+=n(m)).wrap("\n",w),d+=1,r.select(d,d+n(w)),r.record(),!1}return!0},e.canKeyDownTab=function(e,t){let r=t.state.source.tab||t.state.tab||"\t",n=e+"";return"Tab"===n?(t.push(r).record(),!1):"Shift-Tab"!==n||(t.pull(r).record(),!1)},e.canKeyUp=function(e,t){return u(t),!0},e.state=d,e.that=l}));
26
+ !function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports):"function"==typeof define&&define.amd?define(["exports"],r):r(((e="undefined"!=typeof globalThis?globalThis:e||self).TE=e.TE||{},e.TE.Source={}))}(this,(function(e){"use strict";var r=function(e,r){return-1!==r.indexOf(e)},t=function(e){return function(e){return void 0!==e}(e)&&!function(e){return null===e}(e)},n=function(e){return e.length},i=window,o=function(e){return n=RegExp,(r=e)&&t(n)&&r instanceof n;var r,n},a=function(e,r){return o(e)?e:(e=e.replace(/\//g,"\\/"),RegExp(e,t(r)?r:"g"))};function s(e,r){return new Promise((function(t,n){var o=i[e].apply(i,r);return o?t(o):n(o)}))}var u={source:{pairs:{"`":"`","(":")","{":"}","[":"]",'"':'"',"'":"'","<":">"},type:null}};["alert","confirm","prompt"].forEach((function(e){u.source[e]=function(){for(var r=arguments.length,t=Array(r),n=0;n<r;n++)t[n]=arguments[n];return s(e,t)}}));var c={};c.toggle=function(e,r,t,i){void 0===i&&(i=!1),r||""===r||(r=e);var o=this,a=o.$(),s=a.after,u=a.before,c=a.value,f=n(r),l=n(e);return t&&r===c.slice(-f)&&e===c.slice(0,l)||r===s.slice(0,f)&&e===u.slice(-l)?o.peel(e,r,t):(!1!==i&&("string"==typeof i?i=[i,i]:function(e){return Array.isArray(e)}(i)||(i=["",""]),isSet(i[1])||(i[1]=i[0]),o.trim(i[0],i[1])),o.wrap(e,r,t))};var f="Control-";var l,p,d,v=(l=function(e){return e.record()},p=100,function(){var e=arguments,r=this;d&&clearTimeout(d),d=setTimeout((function(){return l.apply(r,e)}),p)});var h=u;e.canKeyDown=function(e,t){var n,i,o=t.state.source.tab||t.state.tab||"\t",a=t.state.source.pairs||{},s=Object.values(a),u=e.key,c=e.queue,f=e+"";if(c.Alt||c.Control)return!0;if(" "===f){var l=t.$(),p=l.after,d=l.before,v=l.value;return n=a[i=d.slice(-1)],!(!v&&n&&i&&n===p[0])||(t.wrap(" "," "),!1)}if("Enter"===f){var h=t.$(),y=h.after,w=h.before,b=h.value,m=w.split("\n").pop().match(/^(\s+)/),$=m&&m[1]||"";if(!b){if(y&&w&&(n=a[i=w.slice(-1)])&&n===y[0])return t.wrap("\n"+$+(i!==n?o:""),"\n"+$).record(),!1;if($)return t.insert("\n"+$,-1).record(),!1}return!0}if("Backspace"===f){var g=t.$(),T=g.after,E=g.before,A=g.value;T.split("\n")[0];var D=E.split("\n").pop(),K=D.match(/^(\s+)/),W=K&&K[1]||"";return n=a[i=E.slice(-1)],"\\"===i?!0:A?!(T&&E&&n&&n===T[0]&&!E.endsWith("\\"+i))||(t.record().peel(i,n).record(),!1):(n=a[i=E.trim().slice(-1)])&&i&&(T.startsWith(" "+n)&&E.endsWith(i+" ")||T.startsWith("\n"+W+n)&&E.endsWith(i+"\n"+W))?(t.trim("","").record(),!1):D.endsWith(o)?(t.pull(o).record(),!1):!(T&&E&&!E.endsWith("\\"+i)&&n===T[0]&&i===E.slice(-1))||(t.peel(i,n).record(),!1)}var k=t.$(),x=k.after,j=k.before,S=k.start,q=k.value;if("\\"===(i=j.slice(-1)))return!0;if(n=r(x[0],s)?x[0]:a[i],!q&&x&&j&&n&&u===n)return t.select(S+1).record(),!1;for(i in a){if(n=a[i],u===i&&n)return t.wrap(i,n).record(),!1;if(u===n){if(q)return t.record().wrap(i,n).record(),!1;break}}return!0},e.canKeyDownDent=function(e,r){var t=r.state.source.tab||r.state.tab||"\t";e.key,e.queue;var n=e+"";return f+"]"===n?(r.push(t).record(),!1):f+"["!==n||(r.pull(t).record(),!1)},e.canKeyDownEnter=function(e,r){e.key;var t=e.queue;if(t.Control&&t.Enter){var i=r.$(),o=i.after,a=i.before,s=i.end,u=i.start,c=i.value,f=o.split("\n").shift(),l=a.split("\n").pop(),p=l.match(/^(\s+)/),d=p&&p[1]||"";if(a||o)return t.Shift?(r.select(u-n(l)).wrap(d,"\n").insert(c).record(),!1):(r.select(s+n(f)).wrap("\n"+d,"").insert(c).record(),!1)}return!0},e.canKeyDownHistory=function(e,r){var t=e+"";return f+"y"===t?(r.redo(),!1):f+"z"!==t||(r.undo(),!1)},e.canKeyDownMove=function(e,t){e.key;var i=e+"";if(!e.queue.Control)return!0;var o,s,u,c=t.$(),l=c.after,p=c.before,d=c.end,v=c.start,h=c.value,y=t.state.source.pairs||{},w=[];if(h){for(o in y)(s=y[o])&&w.push("(?:\\"+o+"(?:\\\\.|[^\\"+o+(s!==o?"\\"+s:"")+"])*\\"+s+")");if(w.push("\\w+"),w.push("\\s+"),w.push("[\\s\\S]"),f+"ArrowLeft"===i)return(u=p.match(a("("+w.join("|")+")$","")))?(t.insert("").select(v-n(u[0])).insert(h),t.record(),!1):(t.select(),!1);if(f+"ArrowRight"===i)return(u=l.match(a("^("+w.join("|")+")","")))?(t.insert("").select(d+n(u[0])-n(h)).insert(h),t.record(),!1):(t.select(),!1)}var b=l.split("\n").shift(),m=p.split("\n").pop(),$=m.match(/^(\s+)/);if($&&$[1],d+=n(b),v-=n(m),h=m+h+b,f+"ArrowUp"===i){if(!r("\n",p))return t.select(),!1;t.insert(""),t.replace(/^([^\n]*?)(\n|$)/,"$2",1),t.replace(/(^|\n)([^\n]*?)$/,"",-1);var g=t.$();return p=g.before,v=g.start,m=p.split("\n").pop(),t.select(v-=n(m)).wrap(h,"\n"),t.select(v,v+n(h)),t.record(),!1}if(f+"ArrowDown"===i){if(!r("\n",l))return t.select(),!1;t.insert(""),t.replace(/^([^\n]*?)(\n|$)/,"",1),t.replace(/(^|\n)([^\n]*?)$/,"$1",-1);var T=t.$();return l=T.after,d=T.end,b=l.split("\n").shift(),t.select(d+=n(b)).wrap("\n",h),d+=1,t.select(d,d+n(h)),t.record(),!1}return!0},e.canKeyDownTab=function(e,r){var t=r.state.source.tab||r.state.tab||"\t",n=e+"";return"Tab"===n?(r.push(t).record(),!1):"Shift-Tab"!==n||(r.pull(t).record(),!1)},e.canKeyUp=function(e,r){return v(r),!0},e.state=h,e.that=c,Object.defineProperty(e,"__esModule",{value:!0})}));
package/package.json CHANGED
@@ -49,5 +49,5 @@
49
49
  "scripts": {
50
50
  "pack": "pack --clean=false --from=.github/factory --js-format=umd --js-name=TE.Source --js-top='%(js.license)' --mjs=true --to=."
51
51
  },
52
- "version": "2.2.6"
52
+ "version": "2.2.8"
53
53
  }