From 3b903c9419814dec28c9588a98d58fd7b19aaad0 Mon Sep 17 00:00:00 2001 From: Hans Pagel Date: Thu, 11 Feb 2021 15:39:49 +0100 Subject: [PATCH] details: refactoring to use divs instead of semantic markup --- docs/src/demos/Experiments/Details/details.ts | 32 +++++++++++++++--- docs/src/demos/Experiments/Details/index.vue | 33 ++++++++++++++++--- 2 files changed, 55 insertions(+), 10 deletions(-) diff --git a/docs/src/demos/Experiments/Details/details.ts b/docs/src/demos/Experiments/Details/details.ts index 7a910d6d..66e345a2 100644 --- a/docs/src/demos/Experiments/Details/details.ts +++ b/docs/src/demos/Experiments/Details/details.ts @@ -20,9 +20,14 @@ export default Node.create({ }, parseHTML() { - return [{ - tag: 'details', - }] + return [ + { + tag: 'details', + }, + { + tag: 'div[data-type="details"]', + }, + ] }, renderHTML({ HTMLAttributes }) { @@ -31,7 +36,24 @@ export default Node.create({ addNodeView() { return ({ HTMLAttributes }) => { - const item = document.createElement('details') + const item = document.createElement('div') + item.setAttribute('data-type', 'details') + + const toggle = document.createElement('div') + toggle.setAttribute('data-type', 'detailsToggle') + item.append(toggle) + + const content = document.createElement('div') + content.setAttribute('data-type', 'detailsContent') + item.append(content) + + toggle.addEventListener('click', () => { + if (item.hasAttribute('open')) { + item.removeAttribute('open') + } else { + item.setAttribute('open', 'open') + } + }) Object.entries(HTMLAttributes).forEach(([key, value]) => { item.setAttribute(key, value) @@ -39,7 +61,7 @@ export default Node.create({ return { dom: item, - contentDOM: item, + contentDOM: content, ignoreMutation: (mutation: MutationRecord) => { return !item.contains(mutation.target) || item === mutation.target }, diff --git a/docs/src/demos/Experiments/Details/index.vue b/docs/src/demos/Experiments/Details/index.vue index 544cbc18..abb1a179 100644 --- a/docs/src/demos/Experiments/Details/index.vue +++ b/docs/src/demos/Experiments/Details/index.vue @@ -5,6 +5,16 @@ + +

HTML

+ {{ editor.getHTML() }} + +

Issues

+ @@ -60,16 +70,29 @@ export default { margin-top: 0.75em; } - details { - summary::before { + details, + [data-type="details"] { + display: flex; + + [data-type="detailsContent"] > *:not(summary) { + display: none; + } + + [data-type="detailsToggle"]::before { + cursor: pointer; content: '▸'; - color: red; display: inline-block; width: 1em; } - &[open] summary::before { - content: '▾'; + &[open] { + [data-type="detailsContent"] > *:not(summary) { + display: inherit; + } + + [data-type="detailsToggle"]::before { + content: '▾'; + } } } }