]> BookStack Code Mirror - bookstack/blob - resources/js/editor/menu/menu-utils.js
Started work on details/summary blocks
[bookstack] / resources / js / editor / menu / menu-utils.js
1 import crel from "crelt";
2
3 export const prefix = "ProseMirror-menu";
4
5 export function renderDropdownItems(items, view) {
6     let rendered = [], updates = []
7     for (let i = 0; i < items.length; i++) {
8         let {dom, update} = items[i].render(view)
9         rendered.push(crel("div", {class: prefix + "-dropdown-item"}, dom))
10         updates.push(update)
11     }
12     return {dom: rendered, update: combineUpdates(updates, rendered)}
13 }
14
15 export function renderItems(items, view) {
16     let rendered = [], updates = []
17     for (let i = 0; i < items.length; i++) {
18         let {dom, update} = items[i].render(view)
19         rendered.push(dom);
20         updates.push(update)
21     }
22     return {dom: rendered, update: combineUpdates(updates, rendered)}
23 }
24
25 export function combineUpdates(updates, nodes) {
26     return state => {
27         let something = false
28         for (let i = 0; i < updates.length; i++) {
29             let up = updates[i](state)
30             nodes[i].style.display = up ? "" : "none"
31             if (up) something = true
32         }
33         return something
34     }
35 }
36
37 export function randHtmlId() {
38     return Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 9);
39 }