@lexical/code 0.2.2 → 0.2.5
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 +10 -3
- package/LexicalCode.dev.js +18 -3
- package/LexicalCode.js.flow +8 -5
- package/LexicalCode.prod.js +22 -22
- package/package.json +3 -3
package/LexicalCode.d.ts
CHANGED
|
@@ -28,13 +28,15 @@ declare class CodeNode extends ElementNode {
|
|
|
28
28
|
insertNewAfter(
|
|
29
29
|
selection: RangeSelection,
|
|
30
30
|
): null | ParagraphNode | CodeHighlightNode;
|
|
31
|
-
canInsertTab():
|
|
31
|
+
canInsertTab(): boolean;
|
|
32
32
|
collapseAtStart(): true;
|
|
33
33
|
setLanguage(language: string): void;
|
|
34
34
|
getLanguage(): string | void;
|
|
35
35
|
}
|
|
36
36
|
declare function $createCodeNode(): CodeNode;
|
|
37
|
-
declare function $isCodeNode(
|
|
37
|
+
declare function $isCodeNode(
|
|
38
|
+
node: null | undefined | LexicalNode,
|
|
39
|
+
): node is CodeNode;
|
|
38
40
|
|
|
39
41
|
declare function getFirstCodeHighlightNodeOfLine(
|
|
40
42
|
anchor: LexicalNode,
|
|
@@ -44,6 +46,9 @@ declare function getLastCodeHighlightNodeOfLine(
|
|
|
44
46
|
anchor: LexicalNode,
|
|
45
47
|
): null | undefined | CodeHighlightNode;
|
|
46
48
|
|
|
49
|
+
declare function getDefaultCodeLanguage(): string;
|
|
50
|
+
declare function getCodeLanguages(): Array<string>;
|
|
51
|
+
|
|
47
52
|
declare class CodeHighlightNode extends TextNode {
|
|
48
53
|
__highlightType: null | undefined | string;
|
|
49
54
|
constructor(text: string, highlightType?: string, key?: NodeKey);
|
|
@@ -66,6 +71,8 @@ declare function $createCodeHighlightNode(
|
|
|
66
71
|
text: string,
|
|
67
72
|
highlightType?: string,
|
|
68
73
|
): CodeHighlightNode;
|
|
69
|
-
declare function $isCodeHighlightNode(
|
|
74
|
+
declare function $isCodeHighlightNode(
|
|
75
|
+
node: ?LexicalNode,
|
|
76
|
+
): node is CodeHighlightNode;
|
|
70
77
|
|
|
71
78
|
declare function registerCodeHighlighting(editor: LexicalEditor): () => void;
|
package/LexicalCode.dev.js
CHANGED
|
@@ -30,6 +30,11 @@ var lexical = require('lexical');
|
|
|
30
30
|
*
|
|
31
31
|
*/
|
|
32
32
|
const DEFAULT_CODE_LANGUAGE = 'javascript';
|
|
33
|
+
|
|
34
|
+
const mapToPrismLanguage = language => {
|
|
35
|
+
return language != null && Prism.languages.hasOwnProperty(language) ? language : undefined;
|
|
36
|
+
};
|
|
37
|
+
|
|
33
38
|
const getDefaultCodeLanguage = () => DEFAULT_CODE_LANGUAGE;
|
|
34
39
|
const getCodeLanguages = () => Object.keys(Prism.languages).filter( // Prism has several language helpers mixed into languages object
|
|
35
40
|
// so filtering them out here to get langs list
|
|
@@ -76,7 +81,7 @@ class CodeHighlightNode extends lexical.TextNode {
|
|
|
76
81
|
|
|
77
82
|
|
|
78
83
|
setFormat(format) {
|
|
79
|
-
return this
|
|
84
|
+
return this;
|
|
80
85
|
}
|
|
81
86
|
|
|
82
87
|
}
|
|
@@ -103,7 +108,7 @@ class CodeNode extends lexical.ElementNode {
|
|
|
103
108
|
|
|
104
109
|
constructor(language, key) {
|
|
105
110
|
super(key);
|
|
106
|
-
this.__language = language;
|
|
111
|
+
this.__language = mapToPrismLanguage(language);
|
|
107
112
|
} // View
|
|
108
113
|
|
|
109
114
|
|
|
@@ -241,9 +246,19 @@ class CodeNode extends lexical.ElementNode {
|
|
|
241
246
|
}
|
|
242
247
|
|
|
243
248
|
canInsertTab() {
|
|
249
|
+
const selection = lexical.$getSelection();
|
|
250
|
+
|
|
251
|
+
if (!lexical.$isRangeSelection(selection) || !selection.isCollapsed()) {
|
|
252
|
+
return false;
|
|
253
|
+
}
|
|
254
|
+
|
|
244
255
|
return true;
|
|
245
256
|
}
|
|
246
257
|
|
|
258
|
+
canIndent() {
|
|
259
|
+
return false;
|
|
260
|
+
}
|
|
261
|
+
|
|
247
262
|
collapseAtStart() {
|
|
248
263
|
const paragraph = lexical.$createParagraphNode();
|
|
249
264
|
const children = this.getChildren();
|
|
@@ -254,7 +269,7 @@ class CodeNode extends lexical.ElementNode {
|
|
|
254
269
|
|
|
255
270
|
setLanguage(language) {
|
|
256
271
|
const writable = this.getWritable();
|
|
257
|
-
writable.__language = language;
|
|
272
|
+
writable.__language = mapToPrismLanguage(language);
|
|
258
273
|
}
|
|
259
274
|
|
|
260
275
|
getLanguage() {
|
package/LexicalCode.js.flow
CHANGED
|
@@ -23,12 +23,12 @@ declare export class CodeNode extends ElementNode {
|
|
|
23
23
|
static getType(): string;
|
|
24
24
|
static clone(node: CodeNode): CodeNode;
|
|
25
25
|
constructor(key?: NodeKey): void;
|
|
26
|
-
createDOM
|
|
26
|
+
createDOM(config: EditorConfig): HTMLElement;
|
|
27
27
|
updateDOM(prevNode: CodeNode, dom: HTMLElement): boolean;
|
|
28
28
|
insertNewAfter(
|
|
29
29
|
selection: RangeSelection,
|
|
30
30
|
): null | ParagraphNode | CodeHighlightNode;
|
|
31
|
-
canInsertTab():
|
|
31
|
+
canInsertTab(): boolean;
|
|
32
32
|
collapseAtStart(): true;
|
|
33
33
|
setLanguage(language: string): void;
|
|
34
34
|
getLanguage(): string | void;
|
|
@@ -46,17 +46,20 @@ declare export function getLastCodeHighlightNodeOfLine(
|
|
|
46
46
|
anchor: LexicalNode,
|
|
47
47
|
): ?CodeHighlightNode;
|
|
48
48
|
|
|
49
|
+
declare export function getDefaultCodeLanguage(): string;
|
|
50
|
+
declare export function getCodeLanguages(): Array<string>;
|
|
51
|
+
|
|
49
52
|
declare export class CodeHighlightNode extends TextNode {
|
|
50
53
|
__highlightType: ?string;
|
|
51
54
|
constructor(text: string, highlightType?: string, key?: NodeKey): void;
|
|
52
55
|
static getType(): string;
|
|
53
56
|
static clone(node: CodeHighlightNode): CodeHighlightNode;
|
|
54
|
-
createDOM
|
|
55
|
-
updateDOM
|
|
57
|
+
createDOM(config: EditorConfig): HTMLElement;
|
|
58
|
+
updateDOM(
|
|
56
59
|
// $FlowFixMe
|
|
57
60
|
prevNode: CodeHighlightNode,
|
|
58
61
|
dom: HTMLElement,
|
|
59
|
-
config: EditorConfig
|
|
62
|
+
config: EditorConfig,
|
|
60
63
|
): boolean;
|
|
61
64
|
setFormat(format: number): this;
|
|
62
65
|
}
|
package/LexicalCode.prod.js
CHANGED
|
@@ -4,25 +4,25 @@
|
|
|
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
|
|
8
|
-
var n=require("@lexical/utils"),r=require("lexical");
|
|
9
|
-
class
|
|
10
|
-
function
|
|
11
|
-
class
|
|
12
|
-
return!1}static importDOM(){return{div:()=>({conversion:
|
|
13
|
-
a.anchor.key===this.__key&&a.anchor.offset===b)return c[b-1].remove(),c[b-2].remove(),a=r.$createParagraphNode(),this.insertAfter(a),a;c=a.anchor.getNode();var
|
|
14
|
-
return!0}setLanguage(a){this.getWritable().__language=a}getLanguage(){return this.getLatest().__language}}function
|
|
15
|
-
function
|
|
16
|
-
function
|
|
17
|
-
function
|
|
18
|
-
(a.splice(l,p-l,
|
|
19
|
-
function
|
|
20
|
-
function
|
|
21
|
-
function
|
|
22
|
-
function
|
|
23
|
-
c.preventDefault(),!0;return!1}var p=
|
|
24
|
-
|
|
25
|
-
exports.getLastCodeHighlightNodeOfLine=
|
|
26
|
-
exports.registerCodeHighlighting=function(a){if(!a.hasNodes([
|
|
27
|
-
(g+="\n"+ ++k);b.setAttribute("data-gutter",g)}}})}),a.registerNodeTransform(
|
|
28
|
-
c=>
|
|
7
|
+
var d=require("prismjs/components/prism-core");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 n=require("@lexical/utils"),r=require("lexical");const t=a=>null!=a&&d.languages.hasOwnProperty(a)?a:void 0;
|
|
9
|
+
class u extends r.TextNode{constructor(a,c,b){super(a,b);this.__highlightType=c}static getType(){return"code-highlight"}static clone(a){return new u(a.__text,a.__highlightType||void 0,a.__key)}createDOM(a){const c=super.createDOM(a);a=v(a.theme,this.__highlightType);n.addClassNamesToElement(c,a);return c}updateDOM(a,c,b){const e=super.updateDOM(a,c,b);a=v(b.theme,a.__highlightType);b=v(b.theme,this.__highlightType);a!==b&&(a&&n.removeClassNamesFromElement(c,a),b&&n.addClassNamesToElement(c,b));return e}setFormat(){return this}}
|
|
10
|
+
function v(a,c){return c&&a&&a.codeHighlight&&a.codeHighlight[c]}function y(a,c){return new u(a,c)}function z(a){return a instanceof u}
|
|
11
|
+
class B extends r.ElementNode{static getType(){return"code"}static clone(a){return new B(a.__language,a.__key)}constructor(a,c){super(c);this.__language=t(a)}createDOM(a){const c=document.createElement("code");n.addClassNamesToElement(c,a.theme.code);c.setAttribute("spellcheck","false");(a=this.getLanguage())&&c.setAttribute("data-highlight-language",a);return c}updateDOM(a,c){const b=this.__language;a=a.__language;b?b!==a&&c.setAttribute("data-highlight-language",b):a&&c.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=>{const c=a.closest("table");return a.classList.contains("js-file-line")?{conversion:G,priority:4}:c&&E(c)?{conversion:H,priority:4}:null},tr:a=>(a=a.closest("table"))&&E(a)?{conversion:H,priority:4}:null}}insertNewAfter(a){var c=this.getChildren(),b=c.length;if(2<=b&&"\n"===c[b-1].getTextContent()&&"\n"===c[b-2].getTextContent()&&a.isCollapsed()&&
|
|
13
|
+
a.anchor.key===this.__key&&a.anchor.offset===b)return c[b-1].remove(),c[b-2].remove(),a=r.$createParagraphNode(),this.insertAfter(a),a;c=a.anchor.getNode();var e=I(c);if(null!=e){b=0;for(e=e.getTextContent();b<e.length&&/[\t ]/.test(e[b]);)b+=1;if(0<b)return b=e.substring(0,b),b=y(b),c.insertAfter(b),a.insertNodes([r.$createLineBreakNode()]),b.select(),b}return null}canInsertTab(){const a=r.$getSelection();return r.$isRangeSelection(a)&&a.isCollapsed()?!0:!1}canIndent(){return!1}collapseAtStart(){const a=
|
|
14
|
+
r.$createParagraphNode();this.getChildren().forEach(c=>a.append(c));this.replace(a);return!0}setLanguage(a){this.getWritable().__language=t(a)}getLanguage(){return this.getLatest().__language}}function J(a){return new B(a)}function K(a){return a instanceof B}function I(a){let c=null;const b=a.getPreviousSiblings();for(b.push(a);0<b.length&&(a=b.pop(),z(a)&&(c=a),!r.$isLineBreakNode(a)););return c}
|
|
15
|
+
function L(a){let c=null;const b=a.getNextSiblings();for(b.unshift(a);0<b.length&&(a=b.shift(),z(a)&&(c=a),!r.$isLineBreakNode(a)););return c}function D(){return{node:J()}}function C(a){return{after:c=>{const b=a.parentNode;null!=b&&a!==b.lastChild&&c.push(r.$createLineBreakNode());return c},node:null!==a.style.fontFamily.match("monospace")?J():null}}function F(){return{node:J()}}function H(){return{node:null}}
|
|
16
|
+
function G(a){return{after:c=>{a.parentNode&&a.parentNode.nextSibling&&c.push(r.$createLineBreakNode());return c},node:null}}function E(a){return a.classList.contains("js-file-line-container")}function M(a,c){const b=a.getParent();K(b)?N(b,c):z(a)&&a.replace(r.$createTextNode(a.__text))}let O=!1;
|
|
17
|
+
function N(a,c){O||(O=!0,void 0===a.getLanguage()&&a.setLanguage("javascript"),c.update(()=>{P(a,()=>{var b=a.getTextContent();b=d.tokenize(b,d.languages[a.getLanguage()||""]||d.languages.javascript);b=R(b);var e=a.getChildren();let f=0;for(;f<e.length&&S(e[f],b[f]);)f++;var h=e.length;const m=b.length,g=Math.min(h,m)-f;let k=0;for(;k<g;)if(k++,!S(e[h-k],b[m-k])){k--;break}e=f;h-=k;b=b.slice(f,m-k);const {from:l,to:p,nodesForReplacement:w}={from:e,nodesForReplacement:b,to:h};return l!==p||w.length?
|
|
18
|
+
(a.splice(l,p-l,w),!0):!1})},{onUpdate:()=>{O=!1},skipTransforms:!0}))}function R(a){const c=[];a.forEach(b=>{if("string"===typeof b){b=b.split("\n");for(var e=0;e<b.length;e++){const f=b[e];f.length&&c.push(y(f));e<b.length-1&&c.push(r.$createLineBreakNode())}}else({content:e}=b),"string"===typeof e?c.push(y(e,b.type)):1===e.length&&"string"===typeof e[0]?c.push(y(e[0],b.type)):c.push(...R(e))});return c}
|
|
19
|
+
function P(a,c){var b=r.$getSelection();if(r.$isRangeSelection(b)&&b.anchor){b=b.anchor;var e=b.offset,f="element"===b.type&&r.$isLineBreakNode(a.getChildAtIndex(b.offset-1)),h=0;if(!f){const m=b.getNode();h=e+m.getPreviousSiblings().reduce((g,k)=>g+(r.$isLineBreakNode(k)?0:k.getTextContentSize()),0)}c()&&(f?b.getNode().select(e,e):a.getChildren().some(m=>{if(r.$isTextNode(m)){const g=m.getTextContentSize();if(g>=h)return m.select(h,h),!0;h-=g}return!1}))}}
|
|
20
|
+
function S(a,c){return z(a)&&z(c)?a.__text===c.__text&&a.__highlightType===c.__highlightType:r.$isLineBreakNode(a)&&r.$isLineBreakNode(c)?!0:!1}function T(a){var c=r.$getSelection();if(!r.$isRangeSelection(c)||c.isCollapsed())return!1;c=c.getNodes();for(var b=0;b<c.length;b++){var e=c[b];if(!z(e)&&!r.$isLineBreakNode(e))return!1}b=I(c[0]);null!=b&&U(b,a);for(b=1;b<c.length;b++)e=c[b],r.$isLineBreakNode(c[b-1])&&z(e)&&U(e,a);return!0}
|
|
21
|
+
function U(a,c){const b=a.getTextContent();c===r.INDENT_CONTENT_COMMAND?0<b.length&&/\s/.test(b[0])?a.setTextContent("\t"+b):(c=y("\t"),a.insertBefore(c)):0===b.indexOf("\t")&&(1===b.length?a.remove():a.setTextContent(b.substring(1)))}
|
|
22
|
+
function V(a,c){const b=r.$getSelection();if(!r.$isRangeSelection(b))return!1;const {anchor:e,focus:f}=b,h=e.offset,m=f.offset,g=e.getNode(),k=f.getNode();var l=a===r.KEY_ARROW_UP_COMMAND;if(!z(g)||!z(k))return!1;if(!c.altKey){if(b.isCollapsed())if(a=g.getParentOrThrow(),l&&0===h&&null===g.getPreviousSibling()){if(null===a.getPreviousSibling())return a.selectPrevious(),c.preventDefault(),!0}else if(!l&&h===g.getTextContentSize()&&null===g.getNextSibling()&&null===a.getNextSibling())return a.selectNext(),
|
|
23
|
+
c.preventDefault(),!0;return!1}var p=I(g);const w=L(k);if(null==p||null==w)return!1;const A=p.getNodesBetween(w);for(let q=0;q<A.length;q++){const Q=A[q];if(!z(Q)&&!r.$isLineBreakNode(Q))return!1}c.preventDefault();c.stopPropagation();c=l?p.getPreviousSibling():w.getNextSibling();if(!r.$isLineBreakNode(c))return!0;p=l?c.getPreviousSibling():c.getNextSibling();if(null==p)return!0;l=l?I(p):L(p);let x=null!=l?l:p;c.remove();A.forEach(q=>q.remove());a===r.KEY_ARROW_UP_COMMAND?(A.forEach(q=>x.insertBefore(q)),
|
|
24
|
+
x.insertBefore(c)):(x.insertAfter(c),x=c,A.forEach(q=>{x.insertAfter(q);x=q}));b.setTextNodeRange(g,h,k,m);return!0}exports.$createCodeHighlightNode=y;exports.$createCodeNode=J;exports.$isCodeHighlightNode=z;exports.$isCodeNode=K;exports.CodeHighlightNode=u;exports.CodeNode=B;exports.getCodeLanguages=()=>Object.keys(d.languages).filter(a=>"function"!==typeof d.languages[a]).sort();exports.getDefaultCodeLanguage=()=>"javascript";exports.getFirstCodeHighlightNodeOfLine=I;
|
|
25
|
+
exports.getLastCodeHighlightNodeOfLine=L;
|
|
26
|
+
exports.registerCodeHighlighting=function(a){if(!a.hasNodes([B,u]))throw Error("CodeHighlightPlugin: CodeNode or CodeHighlightNode not registered on editor");return n.mergeRegister(a.registerMutationListener(B,c=>{a.update(()=>{for(const [f,h]of c)if("destroyed"!==h){var b=r.$getNodeByKey(f);if(null!==b)a:{var e=b;b=a.getElementByKey(e.getKey());if(null===b)break a;e=e.getChildren();const m=e.length;if(m===b.__cachedChildrenLength)break a;b.__cachedChildrenLength=m;let g="1",k=1;for(let l=0;l<m;l++)r.$isLineBreakNode(e[l])&&
|
|
27
|
+
(g+="\n"+ ++k);b.setAttribute("data-gutter",g)}}})}),a.registerNodeTransform(B,c=>N(c,a)),a.registerNodeTransform(r.TextNode,c=>M(c,a)),a.registerNodeTransform(u,c=>M(c,a)),a.registerCommand(r.INDENT_CONTENT_COMMAND,()=>T(r.INDENT_CONTENT_COMMAND),r.COMMAND_PRIORITY_LOW),a.registerCommand(r.OUTDENT_CONTENT_COMMAND,()=>T(r.OUTDENT_CONTENT_COMMAND),r.COMMAND_PRIORITY_LOW),a.registerCommand(r.KEY_ARROW_UP_COMMAND,c=>V(r.KEY_ARROW_UP_COMMAND,c),r.COMMAND_PRIORITY_LOW),a.registerCommand(r.KEY_ARROW_DOWN_COMMAND,
|
|
28
|
+
c=>V(r.KEY_ARROW_DOWN_COMMAND,c),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.2.5",
|
|
12
12
|
"main": "LexicalCode.js",
|
|
13
13
|
"peerDependencies": {
|
|
14
|
-
"lexical": "0.2.
|
|
14
|
+
"lexical": "0.2.5"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@lexical/utils": "0.2.
|
|
17
|
+
"@lexical/utils": "0.2.5",
|
|
18
18
|
"prismjs": "^1.27.0"
|
|
19
19
|
},
|
|
20
20
|
"repository": {
|