diff --git a/src/components/deck-card.vue b/src/components/deck-card.vue index e9d32f5..c6a7749 100644 --- a/src/components/deck-card.vue +++ b/src/components/deck-card.vue @@ -10,6 +10,7 @@

{{ card.name }} @@ -32,6 +33,7 @@ import { Component, Prop, Vue } from 'vue-property-decorator' import { cardWHtoStyle, iconPath } from '@/lib' import DeckCardEditor from '@/components/deck-card-editor.vue' +import { selectLine } from '@/editor' @Component({ components: { DeckCardEditor } @@ -102,6 +104,10 @@ export default class DeckCard extends Vue { return style } + + private selectLine () { + selectLine() + } } diff --git a/src/editor/caret.ts b/src/editor/caret.ts index 0dcf253..04ab695 100644 --- a/src/editor/caret.ts +++ b/src/editor/caret.ts @@ -1,19 +1,33 @@ -function collapseRange (node: Node, toStart = false) { +import { getFocussedNode } from './node' + +function applyRange (callback: (range: Range) => void) { const range = document.createRange() - range.selectNode(node) - range.collapse(toStart) + callback(range) + const sel = window.getSelection() if (sel) { sel.removeAllRanges() sel.addRange(range) } } +function collapseRange (node: Node, toStart = false) { + applyRange(range => { + range.selectNode(node) + range.collapse(toStart) + }) +} export function moveCaretToBOL () { - const node = window.getSelection()?.focusNode + const node = getFocussedNode() if (node) collapseRange(node, true) } export function moveCaretToEOL () { - const node = window.getSelection()?.focusNode + const node = getFocussedNode() if (node) collapseRange(node, false) } +export function selectLine () { + const node = getFocussedNode() + if (node) { + applyRange(range => range.selectNodeContents(node)) + } +} diff --git a/src/editor/index.ts b/src/editor/index.ts index 09028fe..3bacda8 100644 --- a/src/editor/index.ts +++ b/src/editor/index.ts @@ -5,12 +5,14 @@ export { isRootChild, isElementNode, isTextNode, - isEmptyTextNode + isEmptyTextNode, + getFocussedNode } from './node' export { moveCaretToBOL, - moveCaretToEOL + moveCaretToEOL, + selectLine } from './caret' export type State = KV diff --git a/src/editor/node.ts b/src/editor/node.ts index 7af5223..b7524b2 100644 --- a/src/editor/node.ts +++ b/src/editor/node.ts @@ -1,5 +1,7 @@ const { TEXT_NODE, ELEMENT_NODE } = Node - +export function getFocussedNode (): Node | null { + return window.getSelection()?.focusNode || null +} export function isTextNode ({ nodeType }: Node): boolean { return nodeType === TEXT_NODE }