1 import crel from "crelt"
2 import {prefix} from "./menu-utils";
3 import {toggleMark} from "prosemirror-commands";
5 class ColorPickerGrid {
7 constructor(markType, attrName, colors) {
8 this.markType = markType;
10 this.attrName = attrName;
13 // :: (EditorView) → {dom: dom.Node, update: (EditorState) → bool}
14 // Renders the submenu.
17 const colorElems = [];
18 for (const color of this.colors) {
19 const elem = crel("div", {class: prefix + "-color-grid-item", style: `background-color: ${color};`});
20 colorElems.push(elem);
23 const wrap = crel("div", {class: prefix + "-color-grid-container"}, colorElems);
24 wrap.addEventListener('click', event => {
25 if (event.target.classList.contains(prefix + "-color-grid-item")) {
26 const color = event.target.style.backgroundColor;
27 const attrs = {[this.attrName]: color};
28 toggleMark(this.markType, attrs)(view.state, view.dispatch, view, event);
32 function update(state) {
36 return {dom: wrap, update}
40 export default ColorPickerGrid;