{"version":3,"file":"1742.44d2382c59fb8dfbce86.bundle.mjs","mappings":"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","sources":["webpack://socialUX/./editor/common.js","webpack://socialUX/./editor/menu.js","webpack://socialUX/./editor/plugins.js","webpack://socialUX/./editor/view.js","webpack://socialUX/./editor/schema.js"],"sourcesContent":["import { toggleMark } from \"prosemirror-commands\";\r\nimport curry from \"../lib/core/functional/curry\";\r\n\r\nexport const markActive = curry(function markActive(type, state) {\r\n    if (!state.selection) {\r\n        return false;\r\n    }\r\n    let { from, $from, to, empty } = state.selection;\r\n    if (empty) {\r\n        return type.isInSet(state.storedMarks || $from.marks());\r\n    } else {\r\n        return state.doc.rangeHasMark(from, to, type);\r\n    }\r\n});\r\n\r\nexport const addLink = curry(function addLink(markType, state, dispatch, view) {\r\n    if (markActive(markType, state)) {\r\n        toggleMark(markType)(state, dispatch);\r\n        return true;\r\n    }\r\n    //TODO lets add some pretty prompt interface sometime in the future\r\n    const link = prompt(\"Please insert the link href\");\r\n    if (link) {\r\n        toggleMark(markType, { href: link })(view.state, view.dispatch);\r\n    }\r\n    view.focus();\r\n});\r\n","import { toggleMark } from \"prosemirror-commands\";\r\nimport { icons, MenuItem, menuBar } from \"prosemirror-menu\";\r\n\r\nimport { markActive, addLink } from \"./common\";\r\n\r\nfunction addOptions(options, [key, value]) {\r\n    options[key] = value;\r\n    return options;\r\n}\r\n\r\nfunction cmdItem(cmd, options) {\r\n    const menuOptions = Object.entries(options).reduce(addOptions, {\r\n        label: options.title,\r\n        run: cmd,\r\n    });\r\n\r\n    if ((!options.enable || options.enable === true) && !options.select)\r\n        menuOptions[options.enable ? \"enable\" : \"select\"] = cmd;\r\n\r\n    return new MenuItem(menuOptions);\r\n}\r\n\r\nfunction markItem(markType, options) {\r\n    const menuOptions = Object.entries(options).reduce(addOptions, {\r\n        active: markActive(markType),\r\n        enable: true,\r\n    });\r\n    const mark = toggleMark(markType);\r\n    return cmdItem(mark, menuOptions);\r\n}\r\n\r\nexport default function getMenu(settings, schema) {\r\n    const inlineMenu = [];\r\n\r\n    const toggleStrong = markItem(schema.marks.strong, {\r\n        title: \"Toggle strong style\",\r\n        icon: icons.strong,\r\n    });\r\n    const toggleEm = markItem(schema.marks.em, { title: \"Toggle emphasis\", icon: icons.em });\r\n\r\n    inlineMenu.push(toggleStrong);\r\n    inlineMenu.push(toggleEm);\r\n\r\n    if (settings.enableLinks) {\r\n        const markType = schema.marks.link;\r\n        const toggleLink = new MenuItem({\r\n            title: \"Add or remove link\",\r\n            icon: icons.link,\r\n            active(state) {\r\n                return markActive(state, markType);\r\n            },\r\n            enable(state) {\r\n                return !state.selection.empty;\r\n            },\r\n            run: addLink(markType),\r\n        });\r\n        inlineMenu.push(toggleLink);\r\n    }\r\n\r\n    const fullMenu = [inlineMenu];\r\n\r\n    const renderedMenu = menuBar({ floating: false, content: fullMenu });\r\n    return renderedMenu;\r\n}\r\n","import { baseKeymap, toggleMark, chainCommands, exitCode } from \"prosemirror-commands\";\r\nimport { undo, redo, history } from \"prosemirror-history\";\r\nimport { keymap } from \"prosemirror-keymap\";\r\nimport { Plugin } from \"prosemirror-state\";\r\n\r\nimport { addLink } from \"./common\";\r\nimport getMenu from \"./menu\";\r\n\r\nconst WORD_REGEX = /\\w+/g;\r\n\r\nfunction getWordCount(text) {\r\n    const match = text.match(WORD_REGEX);\r\n    return match ? match.length : 0;\r\n}\r\n\r\nfunction getWordCountText(wordCount, min, max) {\r\n    const pieces = [\"Words: \"];\r\n\r\n    if (min) {\r\n        pieces.push(`<span class=\"comment--item-word-count-min\">${min}</span>/`);\r\n    }\r\n\r\n    pieces.push(`<span class=\"comment--item-word-count-user\">${wordCount}</span>`);\r\n\r\n    if (max) {\r\n        pieces.push(`/<span class=\"comment--item-word-count-max\">${max}</span>`);\r\n    }\r\n\r\n    return pieces.join(\"\");\r\n}\r\n\r\nfunction getWordLimitPlugins(settings) {\r\n    if (!(\"wordsLimit\" in settings)) {\r\n        return [];\r\n    }\r\n\r\n    const {\r\n        wordsLimit: { max: maxWords, min: minWords },\r\n    } = settings;\r\n\r\n    const maxWordsLimit = maxWords ? parseInt(maxWords, 10) : 0;\r\n    const minWordsLimit = minWords ? parseInt(minWords, 10) : 0;\r\n\r\n    if (!maxWordsLimit && !minWordsLimit) {\r\n        return [];\r\n    }\r\n\r\n    function view(editorView) {\r\n        const wordCountHolder = document.createElement(\"div\");\r\n        wordCountHolder.classList.add(\"comment--item-word-count\");\r\n\r\n        wordCountHolder.innerHTML = getWordCountText(0, minWordsLimit, maxWordsLimit);\r\n        editorView.dom.parentNode.appendChild(wordCountHolder);\r\n\r\n        function update(view, lastState) {\r\n            const state = view.state;\r\n            if (lastState && lastState.doc.eq(state.doc)) {\r\n                return;\r\n            }\r\n\r\n            const currentWords = getWordCount(state.doc.textContent);\r\n            wordCountHolder.innerHTML = getWordCountText(\r\n                currentWords,\r\n                minWordsLimit,\r\n                maxWordsLimit\r\n            );\r\n        }\r\n\r\n        function destroy() {\r\n            wordCountHolder.remove();\r\n        }\r\n\r\n        return { update, destroy };\r\n    }\r\n\r\n    function filterTransaction(transaction) {\r\n        if (!transaction.docChanged || !maxWordsLimit) {\r\n            return true;\r\n        }\r\n\r\n        return getWordCount(transaction.doc.textContent) <= maxWordsLimit;\r\n    }\r\n\r\n    const wordLimitPlugin = new Plugin({\r\n        view,\r\n        filterTransaction,\r\n    });\r\n    return [wordLimitPlugin];\r\n}\r\n\r\nfunction getLinkPlugins(settings, schema) {\r\n    if (!settings.enableLinks) {\r\n        return [];\r\n    }\r\n\r\n    const markType = schema.marks.link;\r\n\r\n    return [keymap({ \"Mod-q\": addLink(markType) })];\r\n}\r\n\r\nexport default function getPlugins(schema, settings) {\r\n    const toggleStrong = toggleMark(schema.marks.strong);\r\n    const toggleEmphasis = toggleMark(schema.marks.em);\r\n    const addHardBreak = chainCommands(exitCode, (state, dispatch) => {\r\n        dispatch(state.tr.replaceSelectionWith(schema.nodes.hard_break.create()).scrollIntoView());\r\n        return true;\r\n    });\r\n\r\n    const plugins = [\r\n        keymap({\r\n            \"Mod-z\": undo,\r\n            \"Shift-Mod-z\": redo,\r\n            \"Mod-y\": redo,\r\n            \"Mod-b\": toggleStrong,\r\n            \"Mod-B\": toggleStrong,\r\n            \"Mod-i\": toggleEmphasis,\r\n            \"Mod-I\": toggleEmphasis,\r\n            \"Mod-Enter\": addHardBreak,\r\n            \"Shift-Enter\": addHardBreak,\r\n            \"Ctrl-Enter\": addHardBreak,\r\n        }),\r\n        keymap(baseKeymap),\r\n        getMenu(settings, schema),\r\n        history(),\r\n        ...getLinkPlugins(settings, schema),\r\n        ...getWordLimitPlugins(settings),\r\n    ];\r\n    return plugins;\r\n}\r\n","import { DOMSerializer, DOMParser } from \"prosemirror-model\";\r\nimport { EditorState } from \"prosemirror-state\";\r\nimport { EditorView } from \"prosemirror-view\";\r\n\r\nimport noop from \"../lib/core/functional/noop\";\r\nimport loadExternalStylesheet from \"../utils/loadExternalStylesheet\";\r\n\r\nimport getPlugins from \"./plugins\";\r\nimport getSchema from \"./schema\";\r\n\r\nfunction getContainer() {\r\n    const parent = document.createElement(\"div\");\r\n    parent.classList.add(\"rm-prosemirror-parent\");\r\n    const container = document.createElement(\"div\");\r\n    container.classList.add(\"rm-prosemirror-container\");\r\n    parent.appendChild(container);\r\n    return [parent, container];\r\n}\r\n\r\nloadExternalStylesheet(\"/static/css-build/roar/runner/components/prosemirror.css\", noop);\r\n\r\nfunction getInitialContent(contentAsHtml) {\r\n    const div = document.createElement(\"div\");\r\n    div.innerHTML = contentAsHtml;\r\n    return div;\r\n}\r\n\r\nexport default function getEditorView(settings) {\r\n    const schema = getSchema();\r\n    const plugins = getPlugins(schema, settings);\r\n\r\n    const doc = DOMParser.fromSchema(schema).parse(\r\n        getInitialContent(settings.initialContent || \"\")\r\n    );\r\n\r\n    const state = EditorState.create({\r\n        schema,\r\n        plugins,\r\n        doc,\r\n    });\r\n    const [parent, container] = getContainer();\r\n    const editor = new EditorView(container, { state });\r\n\r\n    function getContent() {\r\n        const fragment = DOMSerializer.fromSchema(schema).serializeFragment(\r\n            editor.state.doc.content\r\n        );\r\n        const div = document.createElement(\"div\");\r\n        div.appendChild(fragment);\r\n        return div.innerHTML;\r\n    }\r\n\r\n    function clear() {\r\n        editor.updateState(\r\n            EditorState.create({\r\n                schema,\r\n                plugins,\r\n            })\r\n        );\r\n    }\r\n\r\n    function disable() {\r\n        editor.dom.contentEditable = false;\r\n    }\r\n\r\n    function enable() {\r\n        editor.dom.contentEditable = true;\r\n    }\r\n\r\n    function destroy() {\r\n        editor.destroy();\r\n    }\r\n\r\n    function getTextContent() {\r\n        return editor.state.doc.textContent;\r\n    }\r\n\r\n    return {\r\n        parent,\r\n        container,\r\n        editor,\r\n        getContent,\r\n        getTextContent,\r\n        clear,\r\n        enable,\r\n        disable,\r\n        destroy,\r\n    };\r\n}\r\n","import { Schema } from \"prosemirror-model\";\r\nimport { schema } from \"prosemirror-schema-basic\";\r\nimport { addListNodes } from \"prosemirror-schema-list\";\r\n\r\nexport default function getSchema() {\r\n    return new Schema({\r\n        nodes: addListNodes(schema.spec.nodes, \"paragraph block*\", \"block\"),\r\n        marks: schema.spec.marks,\r\n    });\r\n}\r\n"],"names":["markActive","curry","type","state","selection","from","$from","to","empty","isInSet","storedMarks","marks","doc","rangeHasMark","addLink","markType","dispatch","view","link","prompt","href","focus","addOptions","options","key","value","markItem","menuOptions","Object","entries","reduce","active","enable","cmd","label","title","run","select","cmdItem","getMenu","settings","schema","inlineMenu","toggleStrong","strong","icon","toggleEm","em","push","enableLinks","toggleLink","fullMenu","floating","content","WORD_REGEX","getWordCount","text","match","length","getWordCountText","wordCount","min","max","pieces","join","getWordLimitPlugins","wordsLimit","maxWords","minWords","maxWordsLimit","parseInt","minWordsLimit","editorView","wordCountHolder","document","createElement","classList","add","innerHTML","dom","parentNode","appendChild","update","lastState","eq","currentWords","textContent","destroy","remove","filterTransaction","transaction","docChanged","getLinkPlugins","getEditorView","nodes","spec","plugins","toggleEmphasis","addHardBreak","tr","replaceSelectionWith","hard_break","create","scrollIntoView","getPlugins","fromSchema","parse","contentAsHtml","div","getInitialContent","initialContent","parent","container","getContainer","editor","getContent","fragment","serializeFragment","getTextContent","clear","updateState","contentEditable","disable","loadExternalStylesheet","noop"],"sourceRoot":""}