select whole title on focus
This commit is contained in:
parent
738dce4884
commit
d079c8ae7a
4 changed files with 32 additions and 8 deletions
|
@ -10,6 +10,7 @@
|
||||||
<section name="card-front" class="card-front">
|
<section name="card-front" class="card-front">
|
||||||
<header>
|
<header>
|
||||||
<h1 :contenteditable="isSelection"
|
<h1 :contenteditable="isSelection"
|
||||||
|
@focus="selectLine"
|
||||||
@blur="editField('name', $event)"
|
@blur="editField('name', $event)"
|
||||||
@keypress.enter.prevent="editField('name', $event)">
|
@keypress.enter.prevent="editField('name', $event)">
|
||||||
{{ card.name }}
|
{{ card.name }}
|
||||||
|
@ -32,6 +33,7 @@
|
||||||
import { Component, Prop, Vue } from 'vue-property-decorator'
|
import { Component, Prop, Vue } from 'vue-property-decorator'
|
||||||
import { cardWHtoStyle, iconPath } from '@/lib'
|
import { cardWHtoStyle, iconPath } from '@/lib'
|
||||||
import DeckCardEditor from '@/components/deck-card-editor.vue'
|
import DeckCardEditor from '@/components/deck-card-editor.vue'
|
||||||
|
import { selectLine } from '@/editor'
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
components: { DeckCardEditor }
|
components: { DeckCardEditor }
|
||||||
|
@ -102,6 +104,10 @@ export default class DeckCard extends Vue {
|
||||||
|
|
||||||
return style
|
return style
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private selectLine () {
|
||||||
|
selectLine()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
@ -1,19 +1,33 @@
|
||||||
function collapseRange (node: Node, toStart = false) {
|
import { getFocussedNode } from './node'
|
||||||
|
|
||||||
|
function applyRange (callback: (range: Range) => void) {
|
||||||
const range = document.createRange()
|
const range = document.createRange()
|
||||||
range.selectNode(node)
|
callback(range)
|
||||||
range.collapse(toStart)
|
|
||||||
const sel = window.getSelection()
|
const sel = window.getSelection()
|
||||||
if (sel) {
|
if (sel) {
|
||||||
sel.removeAllRanges()
|
sel.removeAllRanges()
|
||||||
sel.addRange(range)
|
sel.addRange(range)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
function collapseRange (node: Node, toStart = false) {
|
||||||
|
applyRange(range => {
|
||||||
|
range.selectNode(node)
|
||||||
|
range.collapse(toStart)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
export function moveCaretToBOL () {
|
export function moveCaretToBOL () {
|
||||||
const node = window.getSelection()?.focusNode
|
const node = getFocussedNode()
|
||||||
if (node) collapseRange(node, true)
|
if (node) collapseRange(node, true)
|
||||||
}
|
}
|
||||||
export function moveCaretToEOL () {
|
export function moveCaretToEOL () {
|
||||||
const node = window.getSelection()?.focusNode
|
const node = getFocussedNode()
|
||||||
if (node) collapseRange(node, false)
|
if (node) collapseRange(node, false)
|
||||||
}
|
}
|
||||||
|
export function selectLine () {
|
||||||
|
const node = getFocussedNode()
|
||||||
|
if (node) {
|
||||||
|
applyRange(range => range.selectNodeContents(node))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -5,12 +5,14 @@ export {
|
||||||
isRootChild,
|
isRootChild,
|
||||||
isElementNode,
|
isElementNode,
|
||||||
isTextNode,
|
isTextNode,
|
||||||
isEmptyTextNode
|
isEmptyTextNode,
|
||||||
|
getFocussedNode
|
||||||
} from './node'
|
} from './node'
|
||||||
|
|
||||||
export {
|
export {
|
||||||
moveCaretToBOL,
|
moveCaretToBOL,
|
||||||
moveCaretToEOL
|
moveCaretToEOL,
|
||||||
|
selectLine
|
||||||
} from './caret'
|
} from './caret'
|
||||||
|
|
||||||
export type State = KV<boolean>
|
export type State = KV<boolean>
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
const { TEXT_NODE, ELEMENT_NODE } = Node
|
const { TEXT_NODE, ELEMENT_NODE } = Node
|
||||||
|
export function getFocussedNode (): Node | null {
|
||||||
|
return window.getSelection()?.focusNode || null
|
||||||
|
}
|
||||||
export function isTextNode ({ nodeType }: Node): boolean {
|
export function isTextNode ({ nodeType }: Node): boolean {
|
||||||
return nodeType === TEXT_NODE
|
return nodeType === TEXT_NODE
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue