@lexical/code 0.2.7 → 0.3.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/LexicalCode.d.ts +23 -0
- package/LexicalCode.dev.js +218 -3
- package/LexicalCode.js.flow +1 -0
- package/LexicalCode.prod.js +25 -22
- package/package.json +3 -3
package/LexicalCode.d.ts
CHANGED
|
@@ -14,9 +14,12 @@ import type {
|
|
|
14
14
|
RangeSelection,
|
|
15
15
|
EditorThemeClasses,
|
|
16
16
|
LexicalEditor,
|
|
17
|
+
SerializedElementNode,
|
|
18
|
+
SerializedTextNode,
|
|
17
19
|
} from 'lexical';
|
|
18
20
|
|
|
19
21
|
import {ElementNode, TextNode} from 'lexical';
|
|
22
|
+
import {Spread} from 'libdefs/globals';
|
|
20
23
|
|
|
21
24
|
declare class CodeNode extends ElementNode {
|
|
22
25
|
static getType(): string;
|
|
@@ -31,6 +34,8 @@ declare class CodeNode extends ElementNode {
|
|
|
31
34
|
collapseAtStart(): true;
|
|
32
35
|
setLanguage(language: string): void;
|
|
33
36
|
getLanguage(): string | void;
|
|
37
|
+
importJSON(serializedNode: SerializedCodeNode): CodeNode;
|
|
38
|
+
exportJSON(): SerializedElementNode;
|
|
34
39
|
}
|
|
35
40
|
declare function $createCodeNode(language?: string): CodeNode;
|
|
36
41
|
declare function $isCodeNode(
|
|
@@ -74,3 +79,21 @@ declare function $isCodeHighlightNode(
|
|
|
74
79
|
): node is CodeHighlightNode;
|
|
75
80
|
|
|
76
81
|
declare function registerCodeHighlighting(editor: LexicalEditor): () => void;
|
|
82
|
+
|
|
83
|
+
type SerializedCodeNode = Spread<
|
|
84
|
+
{
|
|
85
|
+
language: string | null | undefined;
|
|
86
|
+
type: 'code';
|
|
87
|
+
version: 1;
|
|
88
|
+
},
|
|
89
|
+
SerializedElementNode
|
|
90
|
+
>;
|
|
91
|
+
|
|
92
|
+
type SerializedCodeHighlightNode = Spread<
|
|
93
|
+
{
|
|
94
|
+
highlightType: string | null | undefined;
|
|
95
|
+
type: 'code-highlight';
|
|
96
|
+
version: 1;
|
|
97
|
+
},
|
|
98
|
+
SerializedTextNode
|
|
99
|
+
>;
|
package/LexicalCode.dev.js
CHANGED
|
@@ -53,6 +53,11 @@ class CodeHighlightNode extends lexical.TextNode {
|
|
|
53
53
|
return new CodeHighlightNode(node.__text, node.__highlightType || undefined, node.__key);
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
+
getHighlightType() {
|
|
57
|
+
const self = this.getLatest();
|
|
58
|
+
return self.__highlightType;
|
|
59
|
+
}
|
|
60
|
+
|
|
56
61
|
createDOM(config) {
|
|
57
62
|
const element = super.createDOM(config);
|
|
58
63
|
const className = getHighlightThemeClass(config.theme, this.__highlightType);
|
|
@@ -60,8 +65,7 @@ class CodeHighlightNode extends lexical.TextNode {
|
|
|
60
65
|
return element;
|
|
61
66
|
}
|
|
62
67
|
|
|
63
|
-
updateDOM(
|
|
64
|
-
prevNode, dom, config) {
|
|
68
|
+
updateDOM(prevNode, dom, config) {
|
|
65
69
|
const update = super.updateDOM(prevNode, dom, config);
|
|
66
70
|
const prevClassName = getHighlightThemeClass(config.theme, prevNode.__highlightType);
|
|
67
71
|
const nextClassName = getHighlightThemeClass(config.theme, this.__highlightType);
|
|
@@ -77,6 +81,22 @@ class CodeHighlightNode extends lexical.TextNode {
|
|
|
77
81
|
}
|
|
78
82
|
|
|
79
83
|
return update;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
static importJSON(serializedNode) {
|
|
87
|
+
const node = $createCodeHighlightNode(serializedNode.highlightType);
|
|
88
|
+
node.setFormat(serializedNode.format);
|
|
89
|
+
node.setDetail(serializedNode.detail);
|
|
90
|
+
node.setMode(serializedNode.mode);
|
|
91
|
+
node.setStyle(serializedNode.style);
|
|
92
|
+
return node;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
exportJSON() {
|
|
96
|
+
return { ...super.exportJSON(),
|
|
97
|
+
highlightType: this.getHighlightType(),
|
|
98
|
+
type: 'code-highlight'
|
|
99
|
+
};
|
|
80
100
|
} // Prevent formatting (bold, underline, etc)
|
|
81
101
|
|
|
82
102
|
|
|
@@ -200,6 +220,21 @@ class CodeNode extends lexical.ElementNode {
|
|
|
200
220
|
return null;
|
|
201
221
|
}
|
|
202
222
|
};
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
static importJSON(serializedNode) {
|
|
226
|
+
const node = $createCodeNode(serializedNode.language);
|
|
227
|
+
node.setFormat(serializedNode.format);
|
|
228
|
+
node.setIndent(serializedNode.indent);
|
|
229
|
+
node.setDirection(serializedNode.direction);
|
|
230
|
+
return node;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
exportJSON() {
|
|
234
|
+
return { ...super.exportJSON(),
|
|
235
|
+
language: this.getLanguage(),
|
|
236
|
+
type: 'code'
|
|
237
|
+
};
|
|
203
238
|
} // Mutation
|
|
204
239
|
|
|
205
240
|
|
|
@@ -319,6 +354,142 @@ function getLastCodeHighlightNodeOfLine(anchor) {
|
|
|
319
354
|
return currentNode;
|
|
320
355
|
}
|
|
321
356
|
|
|
357
|
+
function isSpaceOrTabChar(char) {
|
|
358
|
+
return char === ' ' || char === '\t';
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
function findFirstNotSpaceOrTabCharAtText(text, isForward) {
|
|
362
|
+
const length = text.length;
|
|
363
|
+
let offset = -1;
|
|
364
|
+
|
|
365
|
+
if (isForward) {
|
|
366
|
+
for (let i = 0; i < length; i++) {
|
|
367
|
+
const char = text[i];
|
|
368
|
+
|
|
369
|
+
if (!isSpaceOrTabChar(char)) {
|
|
370
|
+
offset = i;
|
|
371
|
+
break;
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
} else {
|
|
375
|
+
for (let i = length - 1; i > -1; i--) {
|
|
376
|
+
const char = text[i];
|
|
377
|
+
|
|
378
|
+
if (!isSpaceOrTabChar(char)) {
|
|
379
|
+
offset = i;
|
|
380
|
+
break;
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
return offset;
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
function getStartOfCodeInLine(anchor) {
|
|
389
|
+
let currentNode = null;
|
|
390
|
+
let currentNodeOffset = -1;
|
|
391
|
+
const previousSiblings = anchor.getPreviousSiblings();
|
|
392
|
+
previousSiblings.push(anchor);
|
|
393
|
+
|
|
394
|
+
while (previousSiblings.length > 0) {
|
|
395
|
+
const node = previousSiblings.pop();
|
|
396
|
+
|
|
397
|
+
if ($isCodeHighlightNode(node)) {
|
|
398
|
+
const text = node.getTextContent();
|
|
399
|
+
const offset = findFirstNotSpaceOrTabCharAtText(text, true);
|
|
400
|
+
|
|
401
|
+
if (offset !== -1) {
|
|
402
|
+
currentNode = node;
|
|
403
|
+
currentNodeOffset = offset;
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
if (lexical.$isLineBreakNode(node)) {
|
|
408
|
+
break;
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
if (currentNode === null) {
|
|
413
|
+
const nextSiblings = anchor.getNextSiblings();
|
|
414
|
+
|
|
415
|
+
while (nextSiblings.length > 0) {
|
|
416
|
+
const node = nextSiblings.shift();
|
|
417
|
+
|
|
418
|
+
if ($isCodeHighlightNode(node)) {
|
|
419
|
+
const text = node.getTextContent();
|
|
420
|
+
const offset = findFirstNotSpaceOrTabCharAtText(text, true);
|
|
421
|
+
|
|
422
|
+
if (offset !== -1) {
|
|
423
|
+
currentNode = node;
|
|
424
|
+
currentNodeOffset = offset;
|
|
425
|
+
break;
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
if (lexical.$isLineBreakNode(node)) {
|
|
430
|
+
break;
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
return {
|
|
436
|
+
node: currentNode,
|
|
437
|
+
offset: currentNodeOffset
|
|
438
|
+
};
|
|
439
|
+
}
|
|
440
|
+
function getEndOfCodeInLine(anchor) {
|
|
441
|
+
let currentNode = null;
|
|
442
|
+
let currentNodeOffset = -1;
|
|
443
|
+
const nextSiblings = anchor.getNextSiblings();
|
|
444
|
+
nextSiblings.unshift(anchor);
|
|
445
|
+
|
|
446
|
+
while (nextSiblings.length > 0) {
|
|
447
|
+
const node = nextSiblings.shift();
|
|
448
|
+
|
|
449
|
+
if ($isCodeHighlightNode(node)) {
|
|
450
|
+
const text = node.getTextContent();
|
|
451
|
+
const offset = findFirstNotSpaceOrTabCharAtText(text, false);
|
|
452
|
+
|
|
453
|
+
if (offset !== -1) {
|
|
454
|
+
currentNode = node;
|
|
455
|
+
currentNodeOffset = offset + 1;
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
if (lexical.$isLineBreakNode(node)) {
|
|
460
|
+
break;
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
if (currentNode === null) {
|
|
465
|
+
const previousSiblings = anchor.getPreviousSiblings();
|
|
466
|
+
|
|
467
|
+
while (previousSiblings.length > 0) {
|
|
468
|
+
const node = previousSiblings.pop();
|
|
469
|
+
|
|
470
|
+
if ($isCodeHighlightNode(node)) {
|
|
471
|
+
const text = node.getTextContent();
|
|
472
|
+
const offset = findFirstNotSpaceOrTabCharAtText(text, false);
|
|
473
|
+
|
|
474
|
+
if (offset !== -1) {
|
|
475
|
+
currentNode = node;
|
|
476
|
+
currentNodeOffset = offset + 1;
|
|
477
|
+
break;
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
if (lexical.$isLineBreakNode(node)) {
|
|
482
|
+
break;
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
return {
|
|
488
|
+
node: currentNode,
|
|
489
|
+
offset: currentNodeOffset
|
|
490
|
+
};
|
|
491
|
+
}
|
|
492
|
+
|
|
322
493
|
function convertPreElement(domNode) {
|
|
323
494
|
return {
|
|
324
495
|
node: $createCodeNode()
|
|
@@ -784,6 +955,48 @@ function handleShiftLines(type, event) {
|
|
|
784
955
|
return true;
|
|
785
956
|
}
|
|
786
957
|
|
|
958
|
+
function handleMoveTo(type, event) {
|
|
959
|
+
const selection = lexical.$getSelection();
|
|
960
|
+
|
|
961
|
+
if (!lexical.$isRangeSelection(selection)) {
|
|
962
|
+
return false;
|
|
963
|
+
}
|
|
964
|
+
|
|
965
|
+
const {
|
|
966
|
+
anchor,
|
|
967
|
+
focus
|
|
968
|
+
} = selection;
|
|
969
|
+
const anchorNode = anchor.getNode();
|
|
970
|
+
const focusNode = focus.getNode();
|
|
971
|
+
const isMoveToStart = type === lexical.MOVE_TO_START;
|
|
972
|
+
|
|
973
|
+
if (!$isCodeHighlightNode(anchorNode) || !$isCodeHighlightNode(focusNode)) {
|
|
974
|
+
return false;
|
|
975
|
+
}
|
|
976
|
+
|
|
977
|
+
let node;
|
|
978
|
+
let offset;
|
|
979
|
+
|
|
980
|
+
if (isMoveToStart) {
|
|
981
|
+
({
|
|
982
|
+
node,
|
|
983
|
+
offset
|
|
984
|
+
} = getStartOfCodeInLine(focusNode));
|
|
985
|
+
} else {
|
|
986
|
+
({
|
|
987
|
+
node,
|
|
988
|
+
offset
|
|
989
|
+
} = getEndOfCodeInLine(focusNode));
|
|
990
|
+
}
|
|
991
|
+
|
|
992
|
+
if (node !== null && offset !== -1) {
|
|
993
|
+
selection.setTextNodeRange(node, offset, node, offset);
|
|
994
|
+
}
|
|
995
|
+
|
|
996
|
+
event.preventDefault();
|
|
997
|
+
event.stopPropagation();
|
|
998
|
+
}
|
|
999
|
+
|
|
787
1000
|
function registerCodeHighlighting(editor) {
|
|
788
1001
|
if (!editor.hasNodes([CodeNode, CodeHighlightNode])) {
|
|
789
1002
|
throw new Error('CodeHighlightPlugin: CodeNode or CodeHighlightNode not registered on editor');
|
|
@@ -801,7 +1014,7 @@ function registerCodeHighlighting(editor) {
|
|
|
801
1014
|
}
|
|
802
1015
|
}
|
|
803
1016
|
});
|
|
804
|
-
}), editor.registerNodeTransform(CodeNode, node => codeNodeTransform(node, editor)), editor.registerNodeTransform(lexical.TextNode, node => textNodeTransform(node, editor)), editor.registerNodeTransform(CodeHighlightNode, node => textNodeTransform(node, editor)), editor.registerCommand(lexical.INDENT_CONTENT_COMMAND, payload => handleMultilineIndent(lexical.INDENT_CONTENT_COMMAND), lexical.COMMAND_PRIORITY_LOW), editor.registerCommand(lexical.OUTDENT_CONTENT_COMMAND, payload => handleMultilineIndent(lexical.OUTDENT_CONTENT_COMMAND), lexical.COMMAND_PRIORITY_LOW), editor.registerCommand(lexical.KEY_ARROW_UP_COMMAND, payload => handleShiftLines(lexical.KEY_ARROW_UP_COMMAND, payload), lexical.COMMAND_PRIORITY_LOW), editor.registerCommand(lexical.KEY_ARROW_DOWN_COMMAND, payload => handleShiftLines(lexical.KEY_ARROW_DOWN_COMMAND, payload), lexical.COMMAND_PRIORITY_LOW));
|
|
1017
|
+
}), editor.registerNodeTransform(CodeNode, node => codeNodeTransform(node, editor)), editor.registerNodeTransform(lexical.TextNode, node => textNodeTransform(node, editor)), editor.registerNodeTransform(CodeHighlightNode, node => textNodeTransform(node, editor)), editor.registerCommand(lexical.INDENT_CONTENT_COMMAND, payload => handleMultilineIndent(lexical.INDENT_CONTENT_COMMAND), lexical.COMMAND_PRIORITY_LOW), editor.registerCommand(lexical.OUTDENT_CONTENT_COMMAND, payload => handleMultilineIndent(lexical.OUTDENT_CONTENT_COMMAND), lexical.COMMAND_PRIORITY_LOW), editor.registerCommand(lexical.KEY_ARROW_UP_COMMAND, payload => handleShiftLines(lexical.KEY_ARROW_UP_COMMAND, payload), lexical.COMMAND_PRIORITY_LOW), editor.registerCommand(lexical.KEY_ARROW_DOWN_COMMAND, payload => handleShiftLines(lexical.KEY_ARROW_DOWN_COMMAND, payload), lexical.COMMAND_PRIORITY_LOW), editor.registerCommand(lexical.MOVE_TO_END, payload => handleMoveTo(lexical.MOVE_TO_END, payload), lexical.COMMAND_PRIORITY_LOW), editor.registerCommand(lexical.MOVE_TO_START, payload => handleMoveTo(lexical.MOVE_TO_START, payload), lexical.COMMAND_PRIORITY_LOW));
|
|
805
1018
|
}
|
|
806
1019
|
|
|
807
1020
|
exports.$createCodeHighlightNode = $createCodeHighlightNode;
|
|
@@ -812,6 +1025,8 @@ exports.CodeHighlightNode = CodeHighlightNode;
|
|
|
812
1025
|
exports.CodeNode = CodeNode;
|
|
813
1026
|
exports.getCodeLanguages = getCodeLanguages;
|
|
814
1027
|
exports.getDefaultCodeLanguage = getDefaultCodeLanguage;
|
|
1028
|
+
exports.getEndOfCodeInLine = getEndOfCodeInLine;
|
|
815
1029
|
exports.getFirstCodeHighlightNodeOfLine = getFirstCodeHighlightNodeOfLine;
|
|
816
1030
|
exports.getLastCodeHighlightNodeOfLine = getLastCodeHighlightNodeOfLine;
|
|
1031
|
+
exports.getStartOfCodeInLine = getStartOfCodeInLine;
|
|
817
1032
|
exports.registerCodeHighlighting = registerCodeHighlighting;
|
package/LexicalCode.js.flow
CHANGED
|
@@ -53,6 +53,7 @@ declare export class CodeHighlightNode extends TextNode {
|
|
|
53
53
|
__highlightType: ?string;
|
|
54
54
|
constructor(text: string, highlightType?: string, key?: NodeKey): void;
|
|
55
55
|
static getType(): string;
|
|
56
|
+
// $FlowFixMe
|
|
56
57
|
static clone(node: CodeHighlightNode): CodeHighlightNode;
|
|
57
58
|
createDOM(config: EditorConfig): HTMLElement;
|
|
58
59
|
updateDOM(
|
package/LexicalCode.prod.js
CHANGED
|
@@ -4,25 +4,28 @@
|
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
|
-
var e=require("prismjs");require("prismjs/components/prism-clike");require("prismjs/components/prism-javascript");require("prismjs/components/prism-markup");require("prismjs/components/prism-markdown");require("prismjs/components/prism-c");require("prismjs/components/prism-css");require("prismjs/components/prism-objectivec");require("prismjs/components/prism-sql");require("prismjs/components/prism-python");require("prismjs/components/prism-rust");require("prismjs/components/prism-swift");
|
|
8
|
-
var
|
|
9
|
-
class u extends r.TextNode{constructor(a,c
|
|
10
|
-
function v(a,
|
|
11
|
-
class
|
|
12
|
-
return!1}static importDOM(){return{div:()=>({conversion:C,priority:1}),pre:()=>({conversion:D,priority:0}),table:a=>E(a)?{conversion:F,priority:4}:null,td:a=>{
|
|
13
|
-
a.anchor.key===this.__key&&a.anchor.offset===
|
|
14
|
-
r.$createParagraphNode();this.getChildren().forEach(
|
|
15
|
-
function
|
|
16
|
-
function
|
|
17
|
-
function
|
|
18
|
-
(a
|
|
19
|
-
function P(a,
|
|
20
|
-
function
|
|
21
|
-
function U(a
|
|
22
|
-
function
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
(
|
|
28
|
-
|
|
7
|
+
'use strict';var e=require("prismjs");require("prismjs/components/prism-clike");require("prismjs/components/prism-javascript");require("prismjs/components/prism-markup");require("prismjs/components/prism-markdown");require("prismjs/components/prism-c");require("prismjs/components/prism-css");require("prismjs/components/prism-objectivec");require("prismjs/components/prism-sql");require("prismjs/components/prism-python");require("prismjs/components/prism-rust");require("prismjs/components/prism-swift");
|
|
8
|
+
var m=require("@lexical/utils"),r=require("lexical");let t=a=>null!=a&&e.languages.hasOwnProperty(a)?a:void 0;
|
|
9
|
+
class u extends r.TextNode{constructor(a,b,c){super(a,c);this.__highlightType=b}static getType(){return"code-highlight"}static clone(a){return new u(a.__text,a.__highlightType||void 0,a.__key)}getHighlightType(){return this.getLatest().__highlightType}createDOM(a){let b=super.createDOM(a);a=v(a.theme,this.__highlightType);m.addClassNamesToElement(b,a);return b}updateDOM(a,b,c){let d=super.updateDOM(a,b,c);a=v(c.theme,a.__highlightType);c=v(c.theme,this.__highlightType);a!==c&&(a&&m.removeClassNamesFromElement(b,
|
|
10
|
+
a),c&&m.addClassNamesToElement(b,c));return d}static importJSON(a){let b=y(a.highlightType);b.setFormat(a.format);b.setDetail(a.detail);b.setMode(a.mode);b.setStyle(a.style);return b}exportJSON(){return{...super.exportJSON(),highlightType:this.getHighlightType(),type:"code-highlight"}}setFormat(){return this}}function v(a,b){return b&&a&&a.codeHighlight&&a.codeHighlight[b]}function y(a,b){return new u(a,b)}function z(a){return a instanceof u}
|
|
11
|
+
class A extends r.ElementNode{static getType(){return"code"}static clone(a){return new A(a.__language,a.__key)}constructor(a,b){super(b);this.__language=t(a)}createDOM(a){let b=document.createElement("code");m.addClassNamesToElement(b,a.theme.code);b.setAttribute("spellcheck","false");(a=this.getLanguage())&&b.setAttribute("data-highlight-language",a);return b}updateDOM(a,b){let c=this.__language;a=a.__language;c?c!==a&&b.setAttribute("data-highlight-language",c):a&&b.removeAttribute("data-highlight-language");
|
|
12
|
+
return!1}static importDOM(){return{div:()=>({conversion:C,priority:1}),pre:()=>({conversion:D,priority:0}),table:a=>E(a)?{conversion:F,priority:4}:null,td:a=>{let b=a.closest("table");return a.classList.contains("js-file-line")?{conversion:G,priority:4}:b&&E(b)?{conversion:H,priority:4}:null},tr:a=>(a=a.closest("table"))&&E(a)?{conversion:H,priority:4}:null}}static importJSON(a){let b=I(a.language);b.setFormat(a.format);b.setIndent(a.indent);b.setDirection(a.direction);return b}exportJSON(){return{...super.exportJSON(),
|
|
13
|
+
language:this.getLanguage(),type:"code"}}insertNewAfter(a){var b=this.getChildren(),c=b.length;if(2<=c&&"\n"===b[c-1].getTextContent()&&"\n"===b[c-2].getTextContent()&&a.isCollapsed()&&a.anchor.key===this.__key&&a.anchor.offset===c)return b[c-1].remove(),b[c-2].remove(),a=r.$createParagraphNode(),this.insertAfter(a),a;b=a.anchor.getNode();var d=J(b);if(null!=d){c=0;for(d=d.getTextContent();c<d.length&&/[\t ]/.test(d[c]);)c+=1;if(0<c)return c=d.substring(0,c),c=y(c),b.insertAfter(c),a.insertNodes([r.$createLineBreakNode()]),
|
|
14
|
+
c.select(),c}return null}canInsertTab(){let a=r.$getSelection();return r.$isRangeSelection(a)&&a.isCollapsed()?!0:!1}canIndent(){return!1}collapseAtStart(){let a=r.$createParagraphNode();this.getChildren().forEach(b=>a.append(b));this.replace(a);return!0}setLanguage(a){this.getWritable().__language=t(a)}getLanguage(){return this.getLatest().__language}}function I(a){return new A(a)}function K(a){return a instanceof A}
|
|
15
|
+
function J(a){let b=null,c=a.getPreviousSiblings();for(c.push(a);0<c.length&&(a=c.pop(),z(a)&&(b=a),!r.$isLineBreakNode(a)););return b}function L(a){let b=null,c=a.getNextSiblings();for(c.unshift(a);0<c.length&&(a=c.shift(),z(a)&&(b=a),!r.$isLineBreakNode(a)););return b}function M(a,b){var c=a.length;let d=-1;if(b)for(b=0;b<c;b++){let f=a[b];if(" "!==f&&"\t"!==f){d=b;break}}else for(--c;-1<c;c--)if(b=a[c]," "!==b&&"\t"!==b){d=c;break}return d}
|
|
16
|
+
function N(a){let b=null,c=-1;var d=a.getPreviousSiblings();for(d.push(a);0<d.length;){var f=d.pop();if(z(f)){var g=f.getTextContent();g=M(g,!0);-1!==g&&(b=f,c=g)}if(r.$isLineBreakNode(f))break}if(null===b)for(a=a.getNextSiblings();0<a.length;){d=a.shift();if(z(d)&&(f=d.getTextContent(),f=M(f,!0),-1!==f)){b=d;c=f;break}if(r.$isLineBreakNode(d))break}return{node:b,offset:c}}
|
|
17
|
+
function O(a){let b=null,c=-1;var d=a.getNextSiblings();for(d.unshift(a);0<d.length;){var f=d.shift();if(z(f)){var g=f.getTextContent();g=M(g,!1);-1!==g&&(b=f,c=g+1)}if(r.$isLineBreakNode(f))break}if(null===b)for(a=a.getPreviousSiblings();0<a.length;){d=a.pop();if(z(d)&&(f=d.getTextContent(),f=M(f,!1),-1!==f)){b=d;c=f+1;break}if(r.$isLineBreakNode(d))break}return{node:b,offset:c}}function D(){return{node:I()}}
|
|
18
|
+
function C(a){return{after:b=>{let c=a.parentNode;null!=c&&a!==c.lastChild&&b.push(r.$createLineBreakNode());return b},node:null!==a.style.fontFamily.match("monospace")?I():null}}function F(){return{node:I()}}function H(){return{node:null}}function G(a){return{after:b=>{a.parentNode&&a.parentNode.nextSibling&&b.push(r.$createLineBreakNode());return b},node:null}}function E(a){return a.classList.contains("js-file-line-container")}
|
|
19
|
+
function P(a,b){let c=a.getParent();K(c)?Q(c,b):z(a)&&a.replace(r.$createTextNode(a.__text))}let R=!1;
|
|
20
|
+
function Q(a,b){R||(R=!0,void 0===a.getLanguage()&&a.setLanguage("javascript"),b.update(()=>{S(a,()=>{var c=a.getTextContent();c=e.tokenize(c,e.languages[a.getLanguage()||""]||e.languages.javascript);c=U(c);var d=a.getChildren();let f=0;for(;f<d.length&&V(d[f],c[f]);)f++;var g=d.length;let l=c.length,h=Math.min(g,l)-f,k=0;for(;k<h;)if(k++,!V(d[g-k],c[l-k])){k--;break}d=f;g-=k;c=c.slice(f,l-k);let {from:n,to:p,nodesForReplacement:w}={from:d,nodesForReplacement:c,to:g};return n!==p||w.length?(a.splice(n,
|
|
21
|
+
p-n,w),!0):!1})},{onUpdate:()=>{R=!1},skipTransforms:!0}))}function U(a){let b=[];a.forEach(c=>{if("string"===typeof c){c=c.split("\n");for(var d=0;d<c.length;d++){let f=c[d];f.length&&b.push(y(f));d<c.length-1&&b.push(r.$createLineBreakNode())}}else({content:d}=c),"string"===typeof d?b.push(y(d,c.type)):Array.isArray(d)&&1===d.length&&"string"===typeof d[0]?b.push(y(d[0],c.type)):Array.isArray(d)&&b.push(...U(d))});return b}
|
|
22
|
+
function S(a,b){var c=r.$getSelection();if(r.$isRangeSelection(c)&&c.anchor){c=c.anchor;var d=c.offset,f="element"===c.type&&r.$isLineBreakNode(a.getChildAtIndex(c.offset-1)),g=0;if(!f){let l=c.getNode();g=d+l.getPreviousSiblings().reduce((h,k)=>h+(r.$isLineBreakNode(k)?0:k.getTextContentSize()),0)}b()&&(f?c.getNode().select(d,d):a.getChildren().some(l=>{if(r.$isTextNode(l)){let h=l.getTextContentSize();if(h>=g)return l.select(g,g),!0;g-=h}return!1}))}}
|
|
23
|
+
function V(a,b){return z(a)&&z(b)?a.__text===b.__text&&a.__highlightType===b.__highlightType:r.$isLineBreakNode(a)&&r.$isLineBreakNode(b)?!0:!1}function W(a){var b=r.$getSelection();if(!r.$isRangeSelection(b)||b.isCollapsed())return!1;b=b.getNodes();for(var c=0;c<b.length;c++){var d=b[c];if(!z(d)&&!r.$isLineBreakNode(d))return!1}c=J(b[0]);null!=c&&X(c,a);for(c=1;c<b.length;c++)d=b[c],r.$isLineBreakNode(b[c-1])&&z(d)&&X(d,a);return!0}
|
|
24
|
+
function X(a,b){let c=a.getTextContent();b===r.INDENT_CONTENT_COMMAND?0<c.length&&/\s/.test(c[0])?a.setTextContent("\t"+c):(b=y("\t"),a.insertBefore(b)):0===c.indexOf("\t")&&(1===c.length?a.remove():a.setTextContent(c.substring(1)))}
|
|
25
|
+
function Y(a,b){let c=r.$getSelection();if(!r.$isRangeSelection(c))return!1;let {anchor:d,focus:f}=c,g=d.offset,l=f.offset,h=d.getNode(),k=f.getNode();var n=a===r.KEY_ARROW_UP_COMMAND;if(!z(h)||!z(k))return!1;if(!b.altKey){if(c.isCollapsed())if(a=h.getParentOrThrow(),n&&0===g&&null===h.getPreviousSibling()){if(null===a.getPreviousSibling())return a.selectPrevious(),b.preventDefault(),!0}else if(!n&&g===h.getTextContentSize()&&null===h.getNextSibling()&&null===a.getNextSibling())return a.selectNext(),
|
|
26
|
+
b.preventDefault(),!0;return!1}var p=J(h);let w=L(k);if(null==p||null==w)return!1;let B=p.getNodesBetween(w);for(let q=0;q<B.length;q++){let T=B[q];if(!z(T)&&!r.$isLineBreakNode(T))return!1}b.preventDefault();b.stopPropagation();b=n?p.getPreviousSibling():w.getNextSibling();if(!r.$isLineBreakNode(b))return!0;p=n?b.getPreviousSibling():b.getNextSibling();if(null==p)return!0;n=n?J(p):L(p);let x=null!=n?n:p;b.remove();B.forEach(q=>q.remove());a===r.KEY_ARROW_UP_COMMAND?(B.forEach(q=>x.insertBefore(q)),
|
|
27
|
+
x.insertBefore(b)):(x.insertAfter(b),x=b,B.forEach(q=>{x.insertAfter(q);x=q}));c.setTextNodeRange(h,g,k,l);return!0}function Z(a,b){let c=r.$getSelection();if(!r.$isRangeSelection(c))return!1;let {anchor:d,focus:f}=c,g=d.getNode(),l=f.getNode();a=a===r.MOVE_TO_START;if(!z(g)||!z(l))return!1;let h,k;a?{node:h,offset:k}=N(l):{node:h,offset:k}=O(l);null!==h&&-1!==k&&c.setTextNodeRange(h,k,h,k);b.preventDefault();b.stopPropagation()}exports.$createCodeHighlightNode=y;exports.$createCodeNode=I;
|
|
28
|
+
exports.$isCodeHighlightNode=z;exports.$isCodeNode=K;exports.CodeHighlightNode=u;exports.CodeNode=A;exports.getCodeLanguages=()=>Object.keys(e.languages).filter(a=>"function"!==typeof e.languages[a]).sort();exports.getDefaultCodeLanguage=()=>"javascript";exports.getEndOfCodeInLine=O;exports.getFirstCodeHighlightNodeOfLine=J;exports.getLastCodeHighlightNodeOfLine=L;exports.getStartOfCodeInLine=N;
|
|
29
|
+
exports.registerCodeHighlighting=function(a){if(!a.hasNodes([A,u]))throw Error("CodeHighlightPlugin: CodeNode or CodeHighlightNode not registered on editor");return m.mergeRegister(a.registerMutationListener(A,b=>{a.update(()=>{for(let [f,g]of b)if("destroyed"!==g){var c=r.$getNodeByKey(f);if(null!==c)a:{var d=c;c=a.getElementByKey(d.getKey());if(null===c)break a;d=d.getChildren();let l=d.length;if(l===c.__cachedChildrenLength)break a;c.__cachedChildrenLength=l;let h="1",k=1;for(let n=0;n<l;n++)r.$isLineBreakNode(d[n])&&
|
|
30
|
+
(h+="\n"+ ++k);c.setAttribute("data-gutter",h)}}})}),a.registerNodeTransform(A,b=>Q(b,a)),a.registerNodeTransform(r.TextNode,b=>P(b,a)),a.registerNodeTransform(u,b=>P(b,a)),a.registerCommand(r.INDENT_CONTENT_COMMAND,()=>W(r.INDENT_CONTENT_COMMAND),r.COMMAND_PRIORITY_LOW),a.registerCommand(r.OUTDENT_CONTENT_COMMAND,()=>W(r.OUTDENT_CONTENT_COMMAND),r.COMMAND_PRIORITY_LOW),a.registerCommand(r.KEY_ARROW_UP_COMMAND,b=>Y(r.KEY_ARROW_UP_COMMAND,b),r.COMMAND_PRIORITY_LOW),a.registerCommand(r.KEY_ARROW_DOWN_COMMAND,
|
|
31
|
+
b=>Y(r.KEY_ARROW_DOWN_COMMAND,b),r.COMMAND_PRIORITY_LOW),a.registerCommand(r.MOVE_TO_END,b=>Z(r.MOVE_TO_END,b),r.COMMAND_PRIORITY_LOW),a.registerCommand(r.MOVE_TO_START,b=>Z(r.MOVE_TO_START,b),r.COMMAND_PRIORITY_LOW))}
|
package/package.json
CHANGED
|
@@ -8,13 +8,13 @@
|
|
|
8
8
|
"code"
|
|
9
9
|
],
|
|
10
10
|
"license": "MIT",
|
|
11
|
-
"version": "0.
|
|
11
|
+
"version": "0.3.0",
|
|
12
12
|
"main": "LexicalCode.js",
|
|
13
13
|
"peerDependencies": {
|
|
14
|
-
"lexical": "0.
|
|
14
|
+
"lexical": "0.3.0"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@lexical/utils": "0.
|
|
17
|
+
"@lexical/utils": "0.3.0",
|
|
18
18
|
"prismjs": "^1.27.0"
|
|
19
19
|
},
|
|
20
20
|
"repository": {
|