@lexical/code 0.6.5 → 0.7.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/CodeHighlighter.d.ts +1 -0
- package/CodeNode.d.ts +1 -1
- package/LexicalCode.dev.js +7 -5
- package/LexicalCode.js.flow +4 -2
- package/LexicalCode.prod.js +6 -5
- package/package.json +3 -3
package/CodeHighlighter.d.ts
CHANGED
package/CodeNode.d.ts
CHANGED
|
@@ -37,7 +37,7 @@ export declare class CodeNode extends ElementNode {
|
|
|
37
37
|
static importDOM(): DOMConversionMap | null;
|
|
38
38
|
static importJSON(serializedNode: SerializedCodeNode): CodeNode;
|
|
39
39
|
exportJSON(): SerializedCodeNode;
|
|
40
|
-
insertNewAfter(selection: RangeSelection): null | ParagraphNode | CodeHighlightNode;
|
|
40
|
+
insertNewAfter(selection: RangeSelection, restoreSelection?: boolean): null | ParagraphNode | CodeHighlightNode;
|
|
41
41
|
canInsertTab(): boolean;
|
|
42
42
|
canIndent(): false;
|
|
43
43
|
collapseAtStart(): true;
|
package/LexicalCode.dev.js
CHANGED
|
@@ -347,7 +347,7 @@ class CodeNode extends lexical.ElementNode {
|
|
|
347
347
|
} // Mutation
|
|
348
348
|
|
|
349
349
|
|
|
350
|
-
insertNewAfter(selection) {
|
|
350
|
+
insertNewAfter(selection, restoreSelection = true) {
|
|
351
351
|
const children = this.getChildren();
|
|
352
352
|
const childrenLength = children.length;
|
|
353
353
|
|
|
@@ -355,7 +355,7 @@ class CodeNode extends lexical.ElementNode {
|
|
|
355
355
|
children[childrenLength - 1].remove();
|
|
356
356
|
children[childrenLength - 2].remove();
|
|
357
357
|
const newElement = lexical.$createParagraphNode();
|
|
358
|
-
this.insertAfter(newElement);
|
|
358
|
+
this.insertAfter(newElement, restoreSelection);
|
|
359
359
|
return newElement;
|
|
360
360
|
} // If the selection is within the codeblock, find all leading tabs and
|
|
361
361
|
// spaces of the current line. Create a new line that has all those
|
|
@@ -521,8 +521,10 @@ function isGitHubCodeTable(table) {
|
|
|
521
521
|
*
|
|
522
522
|
*/
|
|
523
523
|
const PrismTokenizer = {
|
|
524
|
+
defaultLanguage: DEFAULT_CODE_LANGUAGE,
|
|
525
|
+
|
|
524
526
|
tokenize(code, language) {
|
|
525
|
-
return Prism.tokenize(code, Prism.languages[language || ''] || Prism.languages[
|
|
527
|
+
return Prism.tokenize(code, Prism.languages[language || ''] || Prism.languages[this.defaultLanguage]);
|
|
526
528
|
}
|
|
527
529
|
|
|
528
530
|
};
|
|
@@ -725,7 +727,7 @@ function codeNodeTransform(node, editor, tokenizer) {
|
|
|
725
727
|
nodesCurrentlyHighlighting.add(nodeKey); // When new code block inserted it might not have language selected
|
|
726
728
|
|
|
727
729
|
if (node.getLanguage() === undefined) {
|
|
728
|
-
node.setLanguage(
|
|
730
|
+
node.setLanguage(tokenizer.defaultLanguage);
|
|
729
731
|
} // Using nested update call to pass `skipTransforms` since we don't want
|
|
730
732
|
// each individual codehighlight node to be transformed again as it's already
|
|
731
733
|
// in its final state
|
|
@@ -740,7 +742,7 @@ function codeNodeTransform(node, editor, tokenizer) {
|
|
|
740
742
|
}
|
|
741
743
|
|
|
742
744
|
const code = currentNode.getTextContent();
|
|
743
|
-
const tokens = tokenizer.tokenize(code, currentNode.getLanguage() ||
|
|
745
|
+
const tokens = tokenizer.tokenize(code, currentNode.getLanguage() || tokenizer.defaultLanguage);
|
|
744
746
|
const highlightNodes = getHighlightNodes(tokens);
|
|
745
747
|
const diffRange = getDiffRange(currentNode.getChildren(), highlightNodes);
|
|
746
748
|
const {
|
package/LexicalCode.js.flow
CHANGED
|
@@ -22,18 +22,19 @@ import {ElementNode, TextNode} from 'lexical';
|
|
|
22
22
|
declare export class CodeNode extends ElementNode {
|
|
23
23
|
static getType(): string;
|
|
24
24
|
static clone(node: CodeNode): CodeNode;
|
|
25
|
-
constructor(key?: NodeKey): void;
|
|
25
|
+
constructor(language: ?string, key?: NodeKey): void;
|
|
26
26
|
createDOM(config: EditorConfig): HTMLElement;
|
|
27
27
|
updateDOM(prevNode: CodeNode, dom: HTMLElement): boolean;
|
|
28
28
|
insertNewAfter(
|
|
29
29
|
selection: RangeSelection,
|
|
30
|
+
restoreSelection?: boolean,
|
|
30
31
|
): null | ParagraphNode | CodeHighlightNode;
|
|
31
32
|
canInsertTab(): boolean;
|
|
32
33
|
collapseAtStart(): true;
|
|
33
34
|
setLanguage(language: string): void;
|
|
34
35
|
getLanguage(): string | void;
|
|
35
36
|
}
|
|
36
|
-
declare export function $createCodeNode(language
|
|
37
|
+
declare export function $createCodeNode(language: ?string): CodeNode;
|
|
37
38
|
declare export function $isCodeNode(
|
|
38
39
|
node: ?LexicalNode,
|
|
39
40
|
): boolean %checks(node instanceof CodeNode);
|
|
@@ -71,6 +72,7 @@ export interface Token {
|
|
|
71
72
|
content: TokenContent;
|
|
72
73
|
}
|
|
73
74
|
export interface Tokenizer {
|
|
75
|
+
defaultLanguage: string;
|
|
74
76
|
tokenize(code: string, language?: string): (string | Token)[];
|
|
75
77
|
}
|
|
76
78
|
|
package/LexicalCode.prod.js
CHANGED
|
@@ -11,15 +11,16 @@ a),c&&n.addClassNamesToElement(b,c));return d}static importJSON(a){let b=B(a.tex
|
|
|
11
11
|
function D(a){let b=null,c=a.getPreviousSiblings();for(c.push(a);0<c.length&&(a=c.pop(),C(a)&&(b=a),!u.$isLineBreakNode(a)););return b}function E(a){let b=null,c=a.getNextSiblings();for(c.unshift(a);0<c.length&&(a=c.shift(),C(a)&&(b=a),!u.$isLineBreakNode(a)););return b}let F=a=>null!=a&&e.languages.hasOwnProperty(a)?a:void 0;function G(a,b){for(let c of a.childNodes){if(c instanceof HTMLElement&&c.tagName===b)return!0;G(c,b)}return!1}
|
|
12
12
|
class H extends u.ElementNode{static getType(){return"code"}static clone(a){return new H(a.__language,a.__key)}constructor(a,b){super(b);this.__language=F(a)}createDOM(a){let b=document.createElement("code");n.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");
|
|
13
13
|
return!1}static importDOM(){return{code:a=>null!=a.textContent&&(/\r?\n/.test(a.textContent)||G(a,"BR"))?{conversion:I,priority:1}:null,div:()=>({conversion:aa,priority:1}),pre:()=>({conversion:I,priority:0}),table:a=>J(a)?{conversion:ba,priority:4}:null,td:a=>{let b=a.closest("table");return a.classList.contains("js-file-line")?{conversion:ca,priority:4}:b&&J(b)?{conversion:K,priority:4}:null},tr:a=>(a=a.closest("table"))&&J(a)?{conversion:K,priority:4}:null}}static importJSON(a){let b=L(a.language);
|
|
14
|
-
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){var
|
|
15
|
-
for(d=d.getTextContent();c<d.length&&/[\t ]/.test(d[c]);)c+=1;if(0<c)return c=d.substring(0,c),c=B(c),b.insertAfter(c),a.insertNodes([u.$createLineBreakNode()]),c.select(),c}return null}canInsertTab(){let a=u.$getSelection();return u.$isRangeSelection(a)&&a.isCollapsed()?!0:!1}canIndent(){return!1}collapseAtStart(){let a=u.$createParagraphNode();this.getChildren().forEach(b=>a.append(b));this.replace(a);return!0}setLanguage(a){this.getWritable().__language=F(a)}getLanguage(){return this.getLatest().__language}}
|
|
14
|
+
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(),d=c.length;if(2<=d&&"\n"===c[d-1].getTextContent()&&"\n"===c[d-2].getTextContent()&&a.isCollapsed()&&a.anchor.key===this.__key&&a.anchor.offset===d)return c[d-1].remove(),c[d-2].remove(),a=u.$createParagraphNode(),this.insertAfter(a,b),a;b=a.anchor.getNode();d=D(b);if(null!=d){c=
|
|
15
|
+
0;for(d=d.getTextContent();c<d.length&&/[\t ]/.test(d[c]);)c+=1;if(0<c)return c=d.substring(0,c),c=B(c),b.insertAfter(c),a.insertNodes([u.$createLineBreakNode()]),c.select(),c}return null}canInsertTab(){let a=u.$getSelection();return u.$isRangeSelection(a)&&a.isCollapsed()?!0:!1}canIndent(){return!1}collapseAtStart(){let a=u.$createParagraphNode();this.getChildren().forEach(b=>a.append(b));this.replace(a);return!0}setLanguage(a){this.getWritable().__language=F(a)}getLanguage(){return this.getLatest().__language}}
|
|
16
16
|
function L(a){return u.$applyNodeReplacement(new H(a))}function M(a){return a instanceof H}function I(){return{node:L(),preformatted:!0}}function aa(a){let b=null!==a.style.fontFamily.match("monospace");return b||da(a)?{after:c=>{let d=a.parentNode;null!=d&&a!==d.lastChild&&c.push(u.$createLineBreakNode());return c},node:b?L():null,preformatted:b}:{node:null}}function ba(){return{node:L(),preformatted:!0}}function K(){return{node:null}}
|
|
17
|
-
function ca(a){return{after:b=>{a.parentNode&&a.parentNode.nextSibling&&b.push(u.$createLineBreakNode());return b},node:null}}function da(a){for(a=a.parentElement;null!==a;){if(null!==a.style.fontFamily.match("monospace"))return!0;a=a.parentElement}return!1}function J(a){return a.classList.contains("js-file-line-container")}let N={tokenize(a,b){return e.tokenize(a,e.languages[b||""]||e.languages.
|
|
17
|
+
function ca(a){return{after:b=>{a.parentNode&&a.parentNode.nextSibling&&b.push(u.$createLineBreakNode());return b},node:null}}function da(a){for(a=a.parentElement;null!==a;){if(null!==a.style.fontFamily.match("monospace"))return!0;a=a.parentElement}return!1}function J(a){return a.classList.contains("js-file-line-container")}let N={defaultLanguage:"javascript",tokenize(a,b){return e.tokenize(a,e.languages[b||""]||e.languages[this.defaultLanguage])}};
|
|
18
18
|
function O(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}
|
|
19
19
|
function P(a){let b=null,c=-1;var d=a.getPreviousSiblings();for(d.push(a);0<d.length;){var f=d.pop();if(C(f)){var g=f.getTextContent();g=O(g,!0);-1!==g&&(b=f,c=g)}if(u.$isLineBreakNode(f))break}if(null===b)for(a=a.getNextSiblings();0<a.length;){d=a.shift();if(C(d)&&(f=d.getTextContent(),f=O(f,!0),-1!==f)){b=d;c=f;break}if(u.$isLineBreakNode(d))break}return{node:b,offset:c}}
|
|
20
20
|
function Q(a){let b=null,c=-1;var d=a.getNextSiblings();for(d.unshift(a);0<d.length;){var f=d.shift();if(C(f)){var g=f.getTextContent();g=O(g,!1);-1!==g&&(b=f,c=g+1)}if(u.$isLineBreakNode(f))break}if(null===b)for(a=a.getPreviousSiblings();0<a.length;){d=a.pop();if(C(d)&&(f=d.getTextContent(),f=O(f,!1),-1!==f)){b=d;c=f+1;break}if(u.$isLineBreakNode(d))break}return{node:b,offset:c}}function R(a,b,c){let d=a.getParent();M(d)?S(d,b,c):C(a)&&a.replace(u.$createTextNode(a.__text))}let T=new Set;
|
|
21
|
-
function S(a,b,c){let d=a.getKey();T.has(d)||(T.add(d),void 0===a.getLanguage()&&a.setLanguage(
|
|
22
|
-
nodesForReplacement:g,to:h};return w!==t||r.length?(a.splice(w,t-w,r),!0):!1})},{onUpdate:()=>{T.delete(d)},skipTransforms:!0}))}
|
|
21
|
+
function S(a,b,c){let d=a.getKey();T.has(d)||(T.add(d),void 0===a.getLanguage()&&a.setLanguage(c.defaultLanguage),b.update(()=>{ea(d,()=>{var f=u.$getNodeByKey(d);if(!M(f)||!f.isAttached())return!1;var g=f.getTextContent();g=c.tokenize(g,f.getLanguage()||c.defaultLanguage);g=U(g);var k=f.getChildren();for(f=0;f<k.length&&V(k[f],g[f]);)f++;var h=k.length;let l=g.length,p=Math.min(h,l)-f,m=0;for(;m<p;)if(m++,!V(k[h-m],g[l-m])){m--;break}k=f;h-=m;g=g.slice(f,l-m);let {from:w,to:t,nodesForReplacement:r}=
|
|
22
|
+
{from:k,nodesForReplacement:g,to:h};return w!==t||r.length?(a.splice(w,t-w,r),!0):!1})},{onUpdate:()=>{T.delete(d)},skipTransforms:!0}))}
|
|
23
|
+
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(B(f));d<c.length-1&&b.push(u.$createLineBreakNode())}}else({content:d}=c),"string"===typeof d?b.push(B(d,c.type)):Array.isArray(d)&&1===d.length&&"string"===typeof d[0]?b.push(B(d[0],c.type)):Array.isArray(d)&&b.push(...U(d))});return b}
|
|
23
24
|
function ea(a,b){a=u.$getNodeByKey(a);if(M(a)&&a.isAttached()){var c=u.$getSelection();if(u.$isRangeSelection(c)){c=c.anchor;var d=c.offset,f="element"===c.type&&u.$isLineBreakNode(a.getChildAtIndex(c.offset-1)),g=0;if(!f){let k=c.getNode();g=d+k.getPreviousSiblings().reduce((h,l)=>h+l.getTextContentSize(),0)}b()&&(f?c.getNode().select(d,d):a.getChildren().some(k=>{let h=u.$isTextNode(k);if(h||u.$isLineBreakNode(k)){let l=k.getTextContentSize();if(h&&l>=g)return k.select(g,g),!0;g-=l}return!1}))}else b()}}
|
|
24
25
|
function V(a,b){return C(a)&&C(b)?a.__text===b.__text&&a.__highlightType===b.__highlightType:u.$isLineBreakNode(a)&&u.$isLineBreakNode(b)?!0:!1}function W(a){var b=u.$getSelection();if(!u.$isRangeSelection(b)||b.isCollapsed())return!1;b=b.getNodes();for(var c=0;c<b.length;c++){var d=b[c];if(!C(d)&&!u.$isLineBreakNode(d))return!1}c=D(b[0]);null!=c&&X(c,a);for(c=1;c<b.length;c++)d=b[c],u.$isLineBreakNode(b[c-1])&&C(d)&&X(d,a);return!0}
|
|
25
26
|
function X(a,b){let c=a.getTextContent();b===u.INDENT_CONTENT_COMMAND?0<c.length&&/\s/.test(c[0])?a.setTextContent("\t"+c):(b=B("\t"),a.insertBefore(b)):0===c.indexOf("\t")&&(1===c.length?a.remove():a.setTextContent(c.substring(1)))}
|
package/package.json
CHANGED
|
@@ -8,13 +8,13 @@
|
|
|
8
8
|
"code"
|
|
9
9
|
],
|
|
10
10
|
"license": "MIT",
|
|
11
|
-
"version": "0.
|
|
11
|
+
"version": "0.7.0",
|
|
12
12
|
"main": "LexicalCode.js",
|
|
13
13
|
"peerDependencies": {
|
|
14
|
-
"lexical": "0.
|
|
14
|
+
"lexical": "0.7.0"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@lexical/utils": "0.
|
|
17
|
+
"@lexical/utils": "0.7.0",
|
|
18
18
|
"prismjs": "^1.27.0"
|
|
19
19
|
},
|
|
20
20
|
"repository": {
|