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