@37signals/lexxy 0.1.16-beta → 0.1.17-beta

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.
Files changed (2) hide show
  1. package/dist/lexxy.esm.js +30 -3
  2. package/package.json +1 -1
package/dist/lexxy.esm.js CHANGED
@@ -1,9 +1,9 @@
1
1
  import DOMPurify from 'dompurify';
2
- import { $getSelection, $isRangeSelection, DecoratorNode, $getNodeByKey, HISTORY_MERGE_TAG, FORMAT_TEXT_COMMAND, UNDO_COMMAND, REDO_COMMAND, PASTE_COMMAND, COMMAND_PRIORITY_LOW, $isNodeSelection, $getRoot, $isLineBreakNode, $isTextNode, $isElementNode, KEY_ARROW_LEFT_COMMAND, KEY_ARROW_RIGHT_COMMAND, KEY_ARROW_UP_COMMAND, KEY_ARROW_DOWN_COMMAND, KEY_DELETE_COMMAND, KEY_BACKSPACE_COMMAND, SELECTION_CHANGE_COMMAND, $createNodeSelection, $setSelection, $createParagraphNode, $createTextNode, KEY_ENTER_COMMAND, COMMAND_PRIORITY_HIGH, $isParagraphNode, $insertNodes, $createLineBreakNode, CLEAR_HISTORY_COMMAND, $addUpdateTag, SKIP_DOM_SELECTION_TAG, createEditor, COMMAND_PRIORITY_NORMAL, KEY_TAB_COMMAND, KEY_SPACE_COMMAND } from 'lexical';
2
+ import { $getSelection, $isRangeSelection, DecoratorNode, $getNodeByKey, HISTORY_MERGE_TAG, FORMAT_TEXT_COMMAND, $createTextNode, UNDO_COMMAND, REDO_COMMAND, PASTE_COMMAND, COMMAND_PRIORITY_LOW, $isNodeSelection, $getRoot, $isLineBreakNode, $isTextNode, $isElementNode, KEY_ARROW_LEFT_COMMAND, KEY_ARROW_RIGHT_COMMAND, KEY_ARROW_UP_COMMAND, KEY_ARROW_DOWN_COMMAND, KEY_DELETE_COMMAND, KEY_BACKSPACE_COMMAND, SELECTION_CHANGE_COMMAND, $createNodeSelection, $setSelection, $createParagraphNode, KEY_ENTER_COMMAND, COMMAND_PRIORITY_HIGH, $isParagraphNode, $insertNodes, $createLineBreakNode, CLEAR_HISTORY_COMMAND, $addUpdateTag, SKIP_DOM_SELECTION_TAG, createEditor, COMMAND_PRIORITY_NORMAL, KEY_TAB_COMMAND, KEY_SPACE_COMMAND } from 'lexical';
3
3
  import { $isListNode, $isListItemNode, INSERT_UNORDERED_LIST_COMMAND, INSERT_ORDERED_LIST_COMMAND, $createListNode, ListNode, ListItemNode, registerList } from '@lexical/list';
4
4
  import { $isQuoteNode, $isHeadingNode, $createQuoteNode, $createHeadingNode, QuoteNode, HeadingNode, registerRichText } from '@lexical/rich-text';
5
5
  import { $isCodeNode, CodeNode, CodeHighlightNode, registerCodeHighlighting, CODE_LANGUAGE_FRIENDLY_NAME_MAP, normalizeCodeLang } from '@lexical/code';
6
- import { $isLinkNode, $toggleLink, $createLinkNode, LinkNode, AutoLinkNode } from '@lexical/link';
6
+ import { $isLinkNode, $createAutoLinkNode, $toggleLink, $createLinkNode, LinkNode, AutoLinkNode } from '@lexical/link';
7
7
  import { $generateNodesFromDOM, $generateHtmlFromNodes } from '@lexical/html';
8
8
  import { registerMarkdownShortcuts, TRANSFORMERS } from '@lexical/markdown';
9
9
  import { createEmptyHistoryState, registerHistory } from '@lexical/history';
@@ -1019,7 +1019,19 @@ class CommandDispatcher {
1019
1019
  }
1020
1020
 
1021
1021
  dispatchLink(url) {
1022
- this.#toggleLink(url);
1022
+ this.editor.update(() => {
1023
+ const selection = $getSelection();
1024
+ if (!$isRangeSelection(selection)) return
1025
+
1026
+ if (selection.isCollapsed()) {
1027
+ const autoLinkNode = $createAutoLinkNode(url);
1028
+ const textNode = $createTextNode(url);
1029
+ autoLinkNode.append(textNode);
1030
+ selection.insertNodes([ autoLinkNode ]);
1031
+ } else {
1032
+ $toggleLink(url);
1033
+ }
1034
+ });
1023
1035
  }
1024
1036
 
1025
1037
  dispatchUnlink() {
@@ -1940,6 +1952,8 @@ class FormatEscaper {
1940
1952
 
1941
1953
  const anchorNode = selection.anchor.getNode();
1942
1954
 
1955
+ if (!this.#isInsideBlockquote(anchorNode)) return false
1956
+
1943
1957
  return this.#handleLists(event, anchorNode)
1944
1958
  || this.#handleBlockquotes(event, anchorNode)
1945
1959
  }
@@ -1964,6 +1978,19 @@ class FormatEscaper {
1964
1978
  return false
1965
1979
  }
1966
1980
 
1981
+ #isInsideBlockquote(node) {
1982
+ let currentNode = node;
1983
+
1984
+ while (currentNode) {
1985
+ if ($isQuoteNode(currentNode)) {
1986
+ return true
1987
+ }
1988
+ currentNode = currentNode.getParent();
1989
+ }
1990
+
1991
+ return false
1992
+ }
1993
+
1967
1994
  #shouldEscapeFromEmptyListItem(node) {
1968
1995
  const listItem = this.#getListItemNode(node);
1969
1996
  if (!listItem) return false
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@37signals/lexxy",
3
- "version": "0.1.16-beta",
3
+ "version": "0.1.17-beta",
4
4
  "description": "Lexxy - A modern rich text editor for Rails.",
5
5
  "module": "dist/lexxy.esm.js",
6
6
  "type": "module",