@lexical/code 0.11.1 → 0.11.3
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/CodeHighlightNode.d.ts +1 -1
- package/CodeHighlighter.d.ts +1 -1
- package/CodeNode.d.ts +3 -2
- package/LexicalCode.dev.js +29 -9
- package/LexicalCode.js.flow +1 -0
- package/LexicalCode.prod.js +20 -19
- package/package.json +3 -3
package/CodeHighlightNode.d.ts
CHANGED
|
@@ -22,7 +22,7 @@ import 'prismjs/components/prism-java';
|
|
|
22
22
|
import 'prismjs/components/prism-cpp';
|
|
23
23
|
import { ElementNode, TextNode } from 'lexical';
|
|
24
24
|
export declare const DEFAULT_CODE_LANGUAGE = "javascript";
|
|
25
|
-
|
|
25
|
+
type SerializedCodeHighlightNode = Spread<{
|
|
26
26
|
highlightType: string | null | undefined;
|
|
27
27
|
}, SerializedTextNode>;
|
|
28
28
|
export declare const CODE_LANGUAGE_FRIENDLY_NAME_MAP: Record<string, string>;
|
package/CodeHighlighter.d.ts
CHANGED
|
@@ -22,7 +22,7 @@ import 'prismjs/components/prism-java';
|
|
|
22
22
|
import 'prismjs/components/prism-cpp';
|
|
23
23
|
import { TabNode } from 'lexical';
|
|
24
24
|
import { CodeHighlightNode } from './CodeHighlightNode';
|
|
25
|
-
|
|
25
|
+
type TokenContent = string | Token | (string | Token)[];
|
|
26
26
|
export interface Token {
|
|
27
27
|
type: string;
|
|
28
28
|
content: TokenContent;
|
package/CodeNode.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*
|
|
7
7
|
*/
|
|
8
|
-
import type { DOMConversionMap, EditorConfig, LexicalNode, NodeKey, ParagraphNode, RangeSelection, SerializedElementNode, Spread, TabNode } from 'lexical';
|
|
8
|
+
import type { DOMConversionMap, DOMExportOutput, EditorConfig, LexicalNode, NodeKey, ParagraphNode, RangeSelection, SerializedElementNode, Spread, TabNode } from 'lexical';
|
|
9
9
|
import type { CodeHighlightNode } from '@lexical/code';
|
|
10
10
|
import 'prismjs/components/prism-clike';
|
|
11
11
|
import 'prismjs/components/prism-javascript';
|
|
@@ -22,7 +22,7 @@ import 'prismjs/components/prism-typescript';
|
|
|
22
22
|
import 'prismjs/components/prism-java';
|
|
23
23
|
import 'prismjs/components/prism-cpp';
|
|
24
24
|
import { ElementNode } from 'lexical';
|
|
25
|
-
export
|
|
25
|
+
export type SerializedCodeNode = Spread<{
|
|
26
26
|
language: string | null | undefined;
|
|
27
27
|
}, SerializedElementNode>;
|
|
28
28
|
/** @noInheritDoc */
|
|
@@ -34,6 +34,7 @@ export declare class CodeNode extends ElementNode {
|
|
|
34
34
|
constructor(language?: string | null | undefined, key?: NodeKey);
|
|
35
35
|
createDOM(config: EditorConfig): HTMLElement;
|
|
36
36
|
updateDOM(prevNode: CodeNode, dom: HTMLElement, config: EditorConfig): boolean;
|
|
37
|
+
exportDOM(): DOMExportOutput;
|
|
37
38
|
static importDOM(): DOMConversionMap | null;
|
|
38
39
|
static importJSON(serializedNode: SerializedCodeNode): CodeNode;
|
|
39
40
|
exportJSON(): SerializedCodeNode;
|
package/LexicalCode.dev.js
CHANGED
|
@@ -96,6 +96,20 @@ class CodeNode extends lexical.ElementNode {
|
|
|
96
96
|
return false;
|
|
97
97
|
}
|
|
98
98
|
|
|
99
|
+
exportDOM() {
|
|
100
|
+
const element = document.createElement('pre');
|
|
101
|
+
element.setAttribute('spellcheck', 'false');
|
|
102
|
+
const language = this.getLanguage();
|
|
103
|
+
|
|
104
|
+
if (language) {
|
|
105
|
+
element.setAttribute(LANGUAGE_DATA_ATTRIBUTE, language);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
return {
|
|
109
|
+
element
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
|
|
99
113
|
static importDOM() {
|
|
100
114
|
return {
|
|
101
115
|
// Typically <pre> is used for code blocks, and <code> for inline code styles
|
|
@@ -273,8 +287,14 @@ function $isCodeNode(node) {
|
|
|
273
287
|
}
|
|
274
288
|
|
|
275
289
|
function convertPreElement(domNode) {
|
|
290
|
+
let language;
|
|
291
|
+
|
|
292
|
+
if (utils.isHTMLElement(domNode)) {
|
|
293
|
+
language = domNode.getAttribute(LANGUAGE_DATA_ATTRIBUTE);
|
|
294
|
+
}
|
|
295
|
+
|
|
276
296
|
return {
|
|
277
|
-
node: $createCodeNode()
|
|
297
|
+
node: $createCodeNode(language)
|
|
278
298
|
};
|
|
279
299
|
}
|
|
280
300
|
|
|
@@ -754,9 +774,10 @@ function codeNodeTransform(node, editor, tokenizer) {
|
|
|
754
774
|
});
|
|
755
775
|
}
|
|
756
776
|
|
|
757
|
-
function getHighlightNodes(tokens) {
|
|
777
|
+
function getHighlightNodes(tokens, type) {
|
|
758
778
|
const nodes = [];
|
|
759
|
-
|
|
779
|
+
|
|
780
|
+
for (const token of tokens) {
|
|
760
781
|
if (typeof token === 'string') {
|
|
761
782
|
const partials = token.split(/(\n|\t)/);
|
|
762
783
|
const partialsLength = partials.length;
|
|
@@ -769,7 +790,7 @@ function getHighlightNodes(tokens) {
|
|
|
769
790
|
} else if (part === '\t') {
|
|
770
791
|
nodes.push(lexical.$createTabNode());
|
|
771
792
|
} else if (part.length > 0) {
|
|
772
|
-
nodes.push($createCodeHighlightNode(part));
|
|
793
|
+
nodes.push($createCodeHighlightNode(part, type));
|
|
773
794
|
}
|
|
774
795
|
}
|
|
775
796
|
} else {
|
|
@@ -778,14 +799,13 @@ function getHighlightNodes(tokens) {
|
|
|
778
799
|
} = token;
|
|
779
800
|
|
|
780
801
|
if (typeof content === 'string') {
|
|
781
|
-
nodes.push(
|
|
782
|
-
} else if (Array.isArray(content) && content.length === 1 && typeof content[0] === 'string') {
|
|
783
|
-
nodes.push($createCodeHighlightNode(content[0], token.type));
|
|
802
|
+
nodes.push(...getHighlightNodes([content], token.type));
|
|
784
803
|
} else if (Array.isArray(content)) {
|
|
785
|
-
nodes.push(...getHighlightNodes(content));
|
|
804
|
+
nodes.push(...getHighlightNodes(content, token.type));
|
|
786
805
|
}
|
|
787
806
|
}
|
|
788
|
-
}
|
|
807
|
+
}
|
|
808
|
+
|
|
789
809
|
return nodes;
|
|
790
810
|
} // Wrapping update function into selection retainer, that tries to keep cursor at the same
|
|
791
811
|
// position as before.
|
package/LexicalCode.js.flow
CHANGED
|
@@ -110,6 +110,7 @@ declare export function normalizeCodeLang(lang: string): string;
|
|
|
110
110
|
export type SerializedCodeNode = {
|
|
111
111
|
...SerializedElementNode,
|
|
112
112
|
language: string | null | void,
|
|
113
|
+
...
|
|
113
114
|
};
|
|
114
115
|
|
|
115
116
|
declare export function $createCodeNode(language: ?string): CodeNode;
|
package/LexicalCode.prod.js
CHANGED
|
@@ -7,35 +7,36 @@
|
|
|
7
7
|
'use strict';var d=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
8
|
require("prismjs/components/prism-typescript");require("prismjs/components/prism-java");require("prismjs/components/prism-cpp");var l=require("@lexical/utils"),r=require("lexical");let v=a=>null!=a&&d.languages.hasOwnProperty(a)?a:void 0;function x(a,b){for(let c of a.childNodes){if(l.isHTMLElement(c)&&c.tagName===b)return!0;x(c,b)}return!1}
|
|
9
9
|
class y extends r.ElementNode{static getType(){return"code"}static clone(a){return new y(a.__language,a.__key)}constructor(a,b){super(b);this.__language=v(a)}createDOM(a){let b=document.createElement("code");l.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");
|
|
10
|
-
return!1}static importDOM(){return{code:a=>null!=a.textContent&&(/\r?\n/.test(a.textContent)||x(a,"BR"))?{conversion:z,priority:1}:null,div:()=>({conversion:aa,priority:1}),pre:()=>({conversion:z,priority:0}),table:a=>A(a)?{conversion:ba,priority:3}:null,td:a=>{let b=a.closest("table");return a.classList.contains("js-file-line")?
|
|
11
|
-
b.setFormat(a.format);b.setIndent(a.indent);b.setDirection(a.direction);return b}exportJSON(){return{...super.exportJSON(),language:this.getLanguage(),type:"code",version:1}}insertNewAfter(a,b=!0){var c=this.getChildren(),e=c.length;if(2<=e&&"\n"===c[e-1].getTextContent()&&"\n"===c[e-2].getTextContent()&&a.isCollapsed()&&a.anchor.key===
|
|
12
|
-
if(D(b)||r.$isTabNode(b)){b=E(b);for(c=[];;)if(r.$isTabNode(b))c.push(r.$createTabNode()),b=b.getNextSibling();else if(D(b)){e=0;let f=b.getTextContent(),g=b.getTextContentSize();for(;e<g&&" "===f[e];e++);0!==e&&c.push(F(" ".repeat(e)));if(e!==g)break;b=b.getNextSibling()}else break;if(0<c.length)return a.insertNodes([r.$createLineBreakNode()
|
|
13
|
-
return!0}setLanguage(a){this.getWritable().__language=v(a)}getLanguage(){return this.getLatest().__language}}function C(a){return r.$applyNodeReplacement(new y(a))}function G(a){return a instanceof y}function z(
|
|
14
|
-
function
|
|
15
|
-
|
|
10
|
+
return!1}exportDOM(){let a=document.createElement("pre");a.setAttribute("spellcheck","false");let b=this.getLanguage();b&&a.setAttribute("data-highlight-language",b);return{element:a}}static importDOM(){return{code:a=>null!=a.textContent&&(/\r?\n/.test(a.textContent)||x(a,"BR"))?{conversion:z,priority:1}:null,div:()=>({conversion:aa,priority:1}),pre:()=>({conversion:z,priority:0}),table:a=>A(a)?{conversion:ba,priority:3}:null,td:a=>{let b=a.closest("table");return a.classList.contains("js-file-line")?
|
|
11
|
+
{conversion:ca,priority:3}:b&&A(b)?{conversion:B,priority:3}:null},tr:a=>(a=a.closest("table"))&&A(a)?{conversion:B,priority:3}:null}}static importJSON(a){let b=C(a.language);b.setFormat(a.format);b.setIndent(a.indent);b.setDirection(a.direction);return b}exportJSON(){return{...super.exportJSON(),language:this.getLanguage(),type:"code",version:1}}insertNewAfter(a,b=!0){var c=this.getChildren(),e=c.length;if(2<=e&&"\n"===c[e-1].getTextContent()&&"\n"===c[e-2].getTextContent()&&a.isCollapsed()&&a.anchor.key===
|
|
12
|
+
this.__key&&a.anchor.offset===e)return c[e-1].remove(),c[e-2].remove(),a=r.$createParagraphNode(),this.insertAfter(a,b),a;b=a.anchor;c=a.focus;b=(b.isBefore(c)?b:c).getNode();if(D(b)||r.$isTabNode(b)){b=E(b);for(c=[];;)if(r.$isTabNode(b))c.push(r.$createTabNode()),b=b.getNextSibling();else if(D(b)){e=0;let f=b.getTextContent(),g=b.getTextContentSize();for(;e<g&&" "===f[e];e++);0!==e&&c.push(F(" ".repeat(e)));if(e!==g)break;b=b.getNextSibling()}else break;if(0<c.length)return a.insertNodes([r.$createLineBreakNode(),
|
|
13
|
+
...c]),c[c.length-1]}return null}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=v(a)}getLanguage(){return this.getLatest().__language}}function C(a){return r.$applyNodeReplacement(new y(a))}function G(a){return a instanceof y}function z(a){let b;l.isHTMLElement(a)&&(b=a.getAttribute("data-highlight-language"));return{node:C(b)}}
|
|
14
|
+
function aa(a){let b=null!==a.style.fontFamily.match("monospace");return b||da(a)?{after:c=>{let e=a.parentNode;null!=e&&a!==e.lastChild&&c.push(r.$createLineBreakNode());return c},node:b?C():null}:{node:null}}function ba(){return{node:C()}}function B(){return{node:null}}function ca(a){return{after:b=>{a.parentNode&&a.parentNode.nextSibling&&b.push(r.$createLineBreakNode());return b},node:null}}
|
|
15
|
+
function da(a){for(a=a.parentElement;null!==a;){if(null!==a.style.fontFamily.match("monospace"))return!0;a=a.parentElement}return!1}function A(a){return a.classList.contains("js-file-line-container")}
|
|
16
|
+
let H={c:"C",clike:"C-like",cpp:"C++",css:"CSS",html:"HTML",java:"Java",js:"JavaScript",markdown:"Markdown",objc:"Objective-C",plain:"Plain Text",py:"Python",rust:"Rust",sql:"SQL",swift:"Swift",typescript:"TypeScript",xml:"XML"},I={cpp:"cpp",java:"java",javascript:"js",md:"markdown",plaintext:"plain",python:"py",text:"plain",ts:"typescript"};function K(a){return I[a]||a}
|
|
16
17
|
class L extends r.TextNode{constructor(a,b,c){super(a,c);this.__highlightType=b}static getType(){return"code-highlight"}static clone(a){return new L(a.__text,a.__highlightType||void 0,a.__key)}getHighlightType(){return this.getLatest().__highlightType}createDOM(a){let b=super.createDOM(a);a=M(a.theme,this.__highlightType);l.addClassNamesToElement(b,a);return b}updateDOM(a,b,c){let e=super.updateDOM(a,b,c);a=M(c.theme,a.__highlightType);c=M(c.theme,this.__highlightType);a!==c&&(a&&l.removeClassNamesFromElement(b,
|
|
17
18
|
a),c&&l.addClassNamesToElement(b,c));return e}static importJSON(a){let b=F(a.text,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",version:1}}setFormat(){return this}isParentRequired(){return!0}createParentElementNode(){return C()}}function M(a,b){return b&&a&&a.codeHighlight&&a.codeHighlight[b]}
|
|
18
19
|
function F(a,b){return r.$applyNodeReplacement(new L(a,b))}function D(a){return a instanceof L}function E(a){let b=a;for(;D(a)||r.$isTabNode(a);)b=a,a=a.getPreviousSibling();return b}function N(a){let b=a;for(;D(a)||r.$isTabNode(a);)b=a,a=a.getNextSibling();return b}let O={defaultLanguage:"javascript",tokenize(a,b){return d.tokenize(a,d.languages[b||""]||d.languages[this.defaultLanguage])}};
|
|
19
|
-
function P(a,b){let c=null;var e=null,f=a;let g=b,
|
|
20
|
+
function P(a,b){let c=null;var e=null,f=a;let g=b,h=a.getTextContent();for(;;){if(0===g){f=f.getPreviousSibling();if(null===f)break;if(!(D(f)||r.$isTabNode(f)||r.$isLineBreakNode(f)))throw Error("Expected a valid Code Node: CodeHighlightNode, TabNode, LineBreakNode");if(r.$isLineBreakNode(f)){c={node:f,offset:1};break}g=Math.max(0,f.getTextContentSize()-1);h=f.getTextContent()}else g--;let k=h[g];D(f)&&" "!==k&&(e={node:f,offset:g})}if(null!==e)return e;e=null;b<a.getTextContentSize()?D(a)&&(e=a.getTextContent()[b]):
|
|
20
21
|
(f=a.getNextSibling(),D(f)&&(e=f.getTextContent()[0]));if(null!==e&&" "!==e)return c;a:for(e=a,f=a.getTextContent(),a=a.getTextContentSize();;){if(!D(e)||b===a){e=e.getNextSibling();if(null===e||r.$isLineBreakNode(e)){a=null;break a}D(e)&&(b=0,f=e.getTextContent(),a=e.getTextContentSize())}if(D(e)){if(" "!==f[b]){a={node:e,offset:b};break a}b++}}return null!==a?a:c}function Q(a){a=N(a);if(r.$isLineBreakNode(a))throw Error("Unexpected lineBreakNode in getEndOfCodeInLine");return a}
|
|
21
22
|
function R(a,b,c){let e=a.getParent();G(e)?S(e,b,c):D(a)&&a.replace(r.$createTextNode(a.__text))}let T=new Set;
|
|
22
|
-
function S(a,b,c){let e=a.getKey();T.has(e)||(T.add(e),void 0===a.getLanguage()&&a.setLanguage(c.defaultLanguage),b.update(()=>{ea(e,()=>{var f=r.$getNodeByKey(e);if(!G(f)||!f.isAttached())return!1;var g=f.getTextContent();g=c.tokenize(g,f.getLanguage()||c.defaultLanguage);g=U(g);var
|
|
23
|
-
{from:
|
|
24
|
-
function U(a){let
|
|
25
|
-
function ea(a,b){a=r.$getNodeByKey(a);if(G(a)&&a.isAttached()){var c=r.$getSelection();if(r.$isRangeSelection(c)){c=c.anchor;var e=c.offset,f="element"===c.type&&r.$isLineBreakNode(a.getChildAtIndex(c.offset-1)),g=0;if(!f){let
|
|
23
|
+
function S(a,b,c){let e=a.getKey();T.has(e)||(T.add(e),void 0===a.getLanguage()&&a.setLanguage(c.defaultLanguage),b.update(()=>{ea(e,()=>{var f=r.$getNodeByKey(e);if(!G(f)||!f.isAttached())return!1;var g=f.getTextContent();g=c.tokenize(g,f.getLanguage()||c.defaultLanguage);g=U(g);var h=f.getChildren();for(f=0;f<h.length&&V(h[f],g[f]);)f++;var k=h.length;let m=g.length,q=Math.min(k,m)-f,n=0;for(;n<q;)if(n++,!V(h[k-n],g[m-n])){n--;break}h=f;k-=n;g=g.slice(f,m-n);let {from:p,to:w,nodesForReplacement:u}=
|
|
24
|
+
{from:h,nodesForReplacement:g,to:k};return p!==w||u.length?(a.splice(p,w-p,u),!0):!1})},{onUpdate:()=>{T.delete(e)},skipTransforms:!0}))}
|
|
25
|
+
function U(a,b){let c=[];for(let e of a)if("string"===typeof e){a=e.split(/(\n|\t)/);let f=a.length;for(let g=0;g<f;g++){let h=a[g];"\n"===h||"\r\n"===h?c.push(r.$createLineBreakNode()):"\t"===h?c.push(r.$createTabNode()):0<h.length&&c.push(F(h,b))}}else({content:a}=e),"string"===typeof a?c.push(...U([a],e.type)):Array.isArray(a)&&c.push(...U(a,e.type));return c}
|
|
26
|
+
function ea(a,b){a=r.$getNodeByKey(a);if(G(a)&&a.isAttached()){var c=r.$getSelection();if(r.$isRangeSelection(c)){c=c.anchor;var e=c.offset,f="element"===c.type&&r.$isLineBreakNode(a.getChildAtIndex(c.offset-1)),g=0;if(!f){let h=c.getNode();g=e+h.getPreviousSiblings().reduce((k,m)=>k+m.getTextContentSize(),0)}b()&&(f?c.getNode().select(e,e):a.getChildren().some(h=>{let k=r.$isTextNode(h);if(k||r.$isLineBreakNode(h)){let m=h.getTextContentSize();if(k&&m>=g)return h.select(g,g),!0;g-=m}return!1}))}else b()}}
|
|
26
27
|
function V(a,b){return D(a)&&D(b)&&a.__text===b.__text&&a.__highlightType===b.__highlightType||r.$isTabNode(a)&&r.$isTabNode(b)||r.$isLineBreakNode(a)&&r.$isLineBreakNode(b)}function W(a){if(!r.$isRangeSelection(a))return!1;var b=a.anchor.getNode();a=a.focus.getNode();if(b.is(a)&&G(b))return!0;b=b.getParent();return G(b)&&b.is(a.getParent())}
|
|
27
28
|
function X(a){a=a.getNodes();let b=[[]];if(1===a.length&&G(a[0]))return b;let c=b[0];for(let e=0;e<a.length;e++){let f=a[e];if(!(D(f)||r.$isTabNode(f)||r.$isLineBreakNode(f)))throw Error("Expected selection to be inside CodeBlock and consisting of CodeHighlightNode, TabNode and LineBreakNode");r.$isLineBreakNode(f)?0!==e&&0<c.length&&(c=[],b.push(c)):c.push(f)}return b}
|
|
28
|
-
function fa(a){var b=r.$getSelection();if(!r.$isRangeSelection(b)||!W(b))return null;let c=a?r.OUTDENT_CONTENT_COMMAND:r.INDENT_CONTENT_COMMAND;a=a?r.OUTDENT_CONTENT_COMMAND:r.INSERT_TAB_COMMAND;if(1<X(b).length)return c;var e=b.getNodes()[0];if(!(G(e)||D(e)||r.$isTabNode(e)||r.$isLineBreakNode(e)))throw Error("Expected selection firstNode to be CodeHighlightNode or TabNode");if(G(e))return c;let f=E(e);e=N(e);var g=b.anchor;let
|
|
29
|
+
function fa(a){var b=r.$getSelection();if(!r.$isRangeSelection(b)||!W(b))return null;let c=a?r.OUTDENT_CONTENT_COMMAND:r.INDENT_CONTENT_COMMAND;a=a?r.OUTDENT_CONTENT_COMMAND:r.INSERT_TAB_COMMAND;if(1<X(b).length)return c;var e=b.getNodes()[0];if(!(G(e)||D(e)||r.$isTabNode(e)||r.$isLineBreakNode(e)))throw Error("Expected selection firstNode to be CodeHighlightNode or TabNode");if(G(e))return c;let f=E(e);e=N(e);var g=b.anchor;let h=b.focus;h.isBefore(g)?b=h:(b=g,g=h);return null!==f&&null!==e&&b.key===
|
|
29
30
|
f.getKey()&&0===b.offset&&g.key===e.getKey()&&g.offset===e.getTextContentSize()?c:a}
|
|
30
31
|
function Y(a){var b=r.$getSelection();if(!r.$isRangeSelection(b)||!W(b))return!1;var c=X(b);let e=c.length;if(1<c.length){for(b=0;b<e;b++){var f=c[b];0<f.length&&(f=f[0],0===b&&(f=E(f)),null!==f&&(a===r.INDENT_CONTENT_COMMAND?f.insertBefore(r.$createTabNode()):r.$isTabNode(f)&&f.remove()))}return!0}c=b.getNodes()[0];if(!(G(c)||D(c)||r.$isTabNode(c)||r.$isLineBreakNode(c)))throw Error("Expected selection firstNode to be CodeHighlightNode or CodeTabNode");if(G(c))return a===r.INDENT_CONTENT_COMMAND&&
|
|
31
32
|
b.insertNodes([r.$createTabNode()]),!0;c=E(c);if(null===c)throw Error("Expected getFirstCodeNodeOfLine to return a valid Code Node");a===r.INDENT_CONTENT_COMMAND?r.$isLineBreakNode(c)?c.insertAfter(r.$createTabNode()):c.insertBefore(r.$createTabNode()):r.$isTabNode(c)&&c.remove();return!0}
|
|
32
|
-
function Z(a,b){let c=r.$getSelection();if(!r.$isRangeSelection(c))return!1;let {anchor:e,focus:f}=c,g=e.offset,
|
|
33
|
-
a.getNextSibling())return a.selectNext(),b.preventDefault(),!0;return!1}let n;if(
|
|
34
|
-
q?E(p):N(p):null;let u=null!=q?q:p;b.remove();w.forEach(t=>t.remove());a===r.KEY_ARROW_UP_COMMAND?(w.forEach(t=>u.insertBefore(t)),u.insertBefore(b)):(u.insertAfter(b),u=b,w.forEach(t=>{u.insertAfter(t);u=t}));c.setTextNodeRange(
|
|
35
|
-
function ha(a,b){let c=r.$getSelection();if(!r.$isRangeSelection(c))return!1;let {anchor:e,focus:f}=c;var g=e.getNode();let
|
|
36
|
-
exports.$createCodeNode=C;exports.$isCodeHighlightNode=D;exports.$isCodeNode=G;exports.CODE_LANGUAGE_FRIENDLY_NAME_MAP=H;exports.CODE_LANGUAGE_MAP=
|
|
33
|
+
function Z(a,b){let c=r.$getSelection();if(!r.$isRangeSelection(c))return!1;let {anchor:e,focus:f}=c,g=e.offset,h=f.offset,k=e.getNode(),m=f.getNode();var q=a===r.KEY_ARROW_UP_COMMAND;if(!W(c)||!D(k)&&!r.$isTabNode(k)||!D(m)&&!r.$isTabNode(m))return!1;if(!b.altKey){if(c.isCollapsed())if(a=k.getParentOrThrow(),q&&0===g&&null===k.getPreviousSibling()){if(null===a.getPreviousSibling())return a.selectPrevious(),b.preventDefault(),!0}else if(!q&&g===k.getTextContentSize()&&null===k.getNextSibling()&&null===
|
|
34
|
+
a.getNextSibling())return a.selectNext(),b.preventDefault(),!0;return!1}let n;if(k.isBefore(m)){var p=E(k);n=N(m)}else p=E(m),n=N(k);if(null==p||null==n)return!1;let w=p.getNodesBetween(n);for(let t=0;t<w.length;t++){let J=w[t];if(!D(J)&&!r.$isTabNode(J)&&!r.$isLineBreakNode(J))return!1}b.preventDefault();b.stopPropagation();b=q?p.getPreviousSibling():n.getNextSibling();if(!r.$isLineBreakNode(b))return!0;p=q?b.getPreviousSibling():b.getNextSibling();if(null==p)return!0;q=D(p)||r.$isTabNode(p)||r.$isLineBreakNode(p)?
|
|
35
|
+
q?E(p):N(p):null;let u=null!=q?q:p;b.remove();w.forEach(t=>t.remove());a===r.KEY_ARROW_UP_COMMAND?(w.forEach(t=>u.insertBefore(t)),u.insertBefore(b)):(u.insertAfter(b),u=b,w.forEach(t=>{u.insertAfter(t);u=t}));c.setTextNodeRange(k,g,m,h);return!0}
|
|
36
|
+
function ha(a,b){let c=r.$getSelection();if(!r.$isRangeSelection(c))return!1;let {anchor:e,focus:f}=c;var g=e.getNode();let h=f.getNode();a=a===r.MOVE_TO_START;if(!D(g)&&!r.$isTabNode(g)||!D(h)&&!r.$isTabNode(h))return!1;if(a)if(g=P(h,f.offset),null!==g){let {node:k,offset:m}=g;r.$isLineBreakNode(k)?k.selectNext(0,0):c.setTextNodeRange(k,m,k,m)}else h.getParentOrThrow().selectStart();else Q(h).select();b.preventDefault();b.stopPropagation();return!0}exports.$createCodeHighlightNode=F;
|
|
37
|
+
exports.$createCodeNode=C;exports.$isCodeHighlightNode=D;exports.$isCodeNode=G;exports.CODE_LANGUAGE_FRIENDLY_NAME_MAP=H;exports.CODE_LANGUAGE_MAP=I;exports.CodeHighlightNode=L;exports.CodeNode=y;exports.DEFAULT_CODE_LANGUAGE="javascript";exports.PrismTokenizer=O;exports.getCodeLanguages=()=>Object.keys(d.languages).filter(a=>"function"!==typeof d.languages[a]).sort();exports.getDefaultCodeLanguage=()=>"javascript";exports.getEndOfCodeInLine=Q;exports.getFirstCodeNodeOfLine=E;
|
|
37
38
|
exports.getLanguageFriendlyName=function(a){a=K(a);return H[a]||a};exports.getLastCodeNodeOfLine=N;exports.getStartOfCodeInLine=P;exports.normalizeCodeLang=K;
|
|
38
|
-
exports.registerCodeHighlighting=function(a,b){if(!a.hasNodes([y,L]))throw Error("CodeHighlightPlugin: CodeNode or CodeHighlightNode not registered on editor");null==b&&(b=O);return l.mergeRegister(a.registerMutationListener(y,c=>{a.update(()=>{for(let [g,
|
|
39
|
-
0;n<
|
|
39
|
+
exports.registerCodeHighlighting=function(a,b){if(!a.hasNodes([y,L]))throw Error("CodeHighlightPlugin: CodeNode or CodeHighlightNode not registered on editor");null==b&&(b=O);return l.mergeRegister(a.registerMutationListener(y,c=>{a.update(()=>{for(let [g,h]of c)if("destroyed"!==h){var e=r.$getNodeByKey(g);if(null!==e)a:{var f=e;e=a.getElementByKey(f.getKey());if(null===e)break a;f=f.getChildren();let k=f.length;if(k===e.__cachedChildrenLength)break a;e.__cachedChildrenLength=k;let m="1",q=1;for(let n=
|
|
40
|
+
0;n<k;n++)r.$isLineBreakNode(f[n])&&(m+="\n"+ ++q);e.setAttribute("data-gutter",m)}}})}),a.registerNodeTransform(y,c=>S(c,a,b)),a.registerNodeTransform(r.TextNode,c=>R(c,a,b)),a.registerNodeTransform(L,c=>R(c,a,b)),a.registerCommand(r.KEY_TAB_COMMAND,c=>{let e=fa(c.shiftKey);if(null===e)return!1;c.preventDefault();a.dispatchCommand(e,void 0);return!0},r.COMMAND_PRIORITY_LOW),a.registerCommand(r.INSERT_TAB_COMMAND,()=>{let c=r.$getSelection();if(!W(c))return!1;r.$insertNodes([r.$createTabNode()]);
|
|
40
41
|
return!0},r.COMMAND_PRIORITY_LOW),a.registerCommand(r.INDENT_CONTENT_COMMAND,()=>Y(r.INDENT_CONTENT_COMMAND),r.COMMAND_PRIORITY_LOW),a.registerCommand(r.OUTDENT_CONTENT_COMMAND,()=>Y(r.OUTDENT_CONTENT_COMMAND),r.COMMAND_PRIORITY_LOW),a.registerCommand(r.KEY_ARROW_UP_COMMAND,c=>Z(r.KEY_ARROW_UP_COMMAND,c),r.COMMAND_PRIORITY_LOW),a.registerCommand(r.KEY_ARROW_DOWN_COMMAND,c=>Z(r.KEY_ARROW_DOWN_COMMAND,c),r.COMMAND_PRIORITY_LOW),a.registerCommand(r.MOVE_TO_END,c=>ha(r.MOVE_TO_END,c),r.COMMAND_PRIORITY_LOW),
|
|
41
42
|
a.registerCommand(r.MOVE_TO_START,c=>ha(r.MOVE_TO_START,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.11.
|
|
11
|
+
"version": "0.11.3",
|
|
12
12
|
"main": "LexicalCode.js",
|
|
13
13
|
"peerDependencies": {
|
|
14
|
-
"lexical": "0.11.
|
|
14
|
+
"lexical": "0.11.3"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@lexical/utils": "0.11.
|
|
17
|
+
"@lexical/utils": "0.11.3",
|
|
18
18
|
"prismjs": "^1.27.0"
|
|
19
19
|
},
|
|
20
20
|
"repository": {
|