@lexical/code 0.6.5 → 0.7.1

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.
@@ -25,6 +25,7 @@ export interface Token {
25
25
  content: TokenContent;
26
26
  }
27
27
  export interface Tokenizer {
28
+ defaultLanguage: string;
28
29
  tokenize(code: string, language?: string): (string | Token)[];
29
30
  }
30
31
  export declare const PrismTokenizer: Tokenizer;
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;
@@ -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[DEFAULT_CODE_LANGUAGE]);
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(DEFAULT_CODE_LANGUAGE);
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() || DEFAULT_CODE_LANGUAGE);
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 {
@@ -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?: string): CodeNode;
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
 
@@ -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 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=u.$createParagraphNode(),this.insertAfter(a),a;b=a.anchor.getNode();var d=D(b);if(null!=d){c=0;
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.javascript)}};
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("javascript"),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()||"javascript");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}={from:k,
22
- nodesForReplacement:g,to:h};return w!==t||r.length?(a.splice(w,t-w,r),!0):!1})},{onUpdate:()=>{T.delete(d)},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(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}
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.6.5",
11
+ "version": "0.7.1",
12
12
  "main": "LexicalCode.js",
13
13
  "peerDependencies": {
14
- "lexical": "0.6.5"
14
+ "lexical": "0.7.1"
15
15
  },
16
16
  "dependencies": {
17
- "@lexical/utils": "0.6.5",
17
+ "@lexical/utils": "0.7.1",
18
18
  "prismjs": "^1.27.0"
19
19
  },
20
20
  "repository": {