(element: HTMLElement)
| 28 | (event.metaKey || event.ctrlKey) && !event.altKey && event.code === 'KeyZ'; |
| 29 | |
| 30 | const toString = (element: HTMLElement): string => { |
| 31 | const queue: Node[] = [element.firstChild!]; |
| 32 | |
| 33 | let content = ''; |
| 34 | let node: Node; |
| 35 | while ((node = queue.pop()!)) { |
| 36 | if (node.nodeType === Node.TEXT_NODE) { |
| 37 | content += node.textContent; |
| 38 | } else if (node.nodeType === Node.ELEMENT_NODE && node.nodeName === 'BR') { |
| 39 | content += '\n'; |
| 40 | } |
| 41 | |
| 42 | if (node.nextSibling) queue.push(node.nextSibling); |
| 43 | if (node.firstChild) queue.push(node.firstChild); |
| 44 | } |
| 45 | |
| 46 | // contenteditable Quirk: Without plaintext-only a pre/pre-wrap element must always |
| 47 | // end with at least one newline character |
| 48 | if (content[content.length - 1] !== '\n') content += '\n'; |
| 49 | |
| 50 | return content; |
| 51 | }; |
| 52 | |
| 53 | const setStart = (range: Range, node: Node, offset: number) => { |
| 54 | if (offset < node.textContent!.length) { |
no outgoing calls
no test coverage detected
searching dependent graphs…