implements basic menu functionalities
this includes standard block elements (headers, paragraphs, lists, rulers) but not marks (bold, italic) and for sure not special elements like the stat blockown-rich-text-solution
parent
42dfa704d7
commit
5986e599fd
@ -0,0 +1,40 @@
|
|||||||
|
export type State = KV<boolean>
|
||||||
|
export {
|
||||||
|
movementKeys,
|
||||||
|
controlSequenceKeys,
|
||||||
|
elementNameToMenuState,
|
||||||
|
marks,
|
||||||
|
blocks
|
||||||
|
} from './constants'
|
||||||
|
|
||||||
|
function simpleAction (cmd: string, arg?: string): () => boolean {
|
||||||
|
return () => {
|
||||||
|
return document.execCommand(cmd, false, arg)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function insertHorizontalRule (): () => boolean {
|
||||||
|
return () => {
|
||||||
|
const hr = document.execCommand('insertHorizontalRule')
|
||||||
|
const p = document.execCommand('formatblock', false, 'P')
|
||||||
|
return hr && p
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export const menuActionToCommand: KV<() => boolean> = {
|
||||||
|
paragraph: simpleAction('formatblock', 'P'),
|
||||||
|
heading1: simpleAction('formatblock', 'H1'),
|
||||||
|
heading2: simpleAction('formatblock', 'H2'),
|
||||||
|
heading3: simpleAction('formatblock', 'H3'),
|
||||||
|
bulletList: simpleAction('insertUnorderedList'),
|
||||||
|
numberedList: simpleAction('insertOrderedList'),
|
||||||
|
separator: insertHorizontalRule()
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getElementAndParentName (el: Node) {
|
||||||
|
const element = el.nodeName === '#text' ? el.parentElement : el
|
||||||
|
return [
|
||||||
|
element?.nodeName,
|
||||||
|
element?.parentElement?.nodeName
|
||||||
|
]
|
||||||
|
}
|
Loading…
Reference in New Issue