@lexical/code 0.2.9 → 0.3.2
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 +217 -1
- 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);
|
|
@@ -76,6 +81,22 @@ class CodeHighlightNode extends lexical.TextNode {
|
|
|
76
81
|
}
|
|
77
82
|
|
|
78
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
|
+
};
|
|
79
100
|
} // Prevent formatting (bold, underline, etc)
|
|
80
101
|
|
|
81
102
|
|
|
@@ -199,6 +220,21 @@ class CodeNode extends lexical.ElementNode {
|
|
|
199
220
|
return null;
|
|
200
221
|
}
|
|
201
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
|
+
};
|
|
202
238
|
} // Mutation
|
|
203
239
|
|
|
204
240
|
|
|
@@ -318,6 +354,142 @@ function getLastCodeHighlightNodeOfLine(anchor) {
|
|
|
318
354
|
return currentNode;
|
|
319
355
|
}
|
|
320
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
|
+
|
|
321
493
|
function convertPreElement(domNode) {
|
|
322
494
|
return {
|
|
323
495
|
node: $createCodeNode()
|
|
@@ -783,6 +955,48 @@ function handleShiftLines(type, event) {
|
|
|
783
955
|
return true;
|
|
784
956
|
}
|
|
785
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
|
+
|
|
786
1000
|
function registerCodeHighlighting(editor) {
|
|
787
1001
|
if (!editor.hasNodes([CodeNode, CodeHighlightNode])) {
|
|
788
1002
|
throw new Error('CodeHighlightPlugin: CodeNode or CodeHighlightNode not registered on editor');
|
|
@@ -800,7 +1014,7 @@ function registerCodeHighlighting(editor) {
|
|
|
800
1014
|
}
|
|
801
1015
|
}
|
|
802
1016
|
});
|
|
803
|
-
}), 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));
|
|
804
1018
|
}
|
|
805
1019
|
|
|
806
1020
|
exports.$createCodeHighlightNode = $createCodeHighlightNode;
|
|
@@ -811,6 +1025,8 @@ exports.CodeHighlightNode = CodeHighlightNode;
|
|
|
811
1025
|
exports.CodeNode = CodeNode;
|
|
812
1026
|
exports.getCodeLanguages = getCodeLanguages;
|
|
813
1027
|
exports.getDefaultCodeLanguage = getDefaultCodeLanguage;
|
|
1028
|
+
exports.getEndOfCodeInLine = getEndOfCodeInLine;
|
|
814
1029
|
exports.getFirstCodeHighlightNodeOfLine = getFirstCodeHighlightNodeOfLine;
|
|
815
1030
|
exports.getLastCodeHighlightNodeOfLine = getLastCodeHighlightNodeOfLine;
|
|
1031
|
+
exports.getStartOfCodeInLine = getStartOfCodeInLine;
|
|
816
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.2
|
|
11
|
+
"version": "0.3.2",
|
|
12
12
|
"main": "LexicalCode.js",
|
|
13
13
|
"peerDependencies": {
|
|
14
|
-
"lexical": "0.2
|
|
14
|
+
"lexical": "0.3.2"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@lexical/utils": "0.2
|
|
17
|
+
"@lexical/utils": "0.3.2",
|
|
18
18
|
"prismjs": "^1.27.0"
|
|
19
19
|
},
|
|
20
20
|
"repository": {
|