From 238776c479cbabd054153b4bf96297a4d56a912c Mon Sep 17 00:00:00 2001 From: Hans Pagel Date: Wed, 3 Feb 2021 16:20:57 +0100 Subject: [PATCH] add basic iframe experiment --- docs/src/demos/Experiments/Embeds/iframe.ts | 70 +++++++++++++++++ docs/src/demos/Experiments/Embeds/index.vue | 84 +++++++++++++++++++++ docs/src/docPages/experiments.md | 1 + docs/src/docPages/experiments/embeds.md | 5 ++ 4 files changed, 160 insertions(+) create mode 100644 docs/src/demos/Experiments/Embeds/iframe.ts create mode 100644 docs/src/demos/Experiments/Embeds/index.vue create mode 100644 docs/src/docPages/experiments/embeds.md diff --git a/docs/src/demos/Experiments/Embeds/iframe.ts b/docs/src/demos/Experiments/Embeds/iframe.ts new file mode 100644 index 00000000..d2fdb636 --- /dev/null +++ b/docs/src/demos/Experiments/Embeds/iframe.ts @@ -0,0 +1,70 @@ +import { Node, Command } from '@tiptap/core' + +export interface IframeOptions { + allowFullscreen: boolean, + HTMLAttributes: { + [key: string]: any + }, +} + +export default Node.create({ + name: 'iframe', + + group: 'block', + + // selectable: false, + + defaultOptions: { + allowFullscreen: true, + HTMLAttributes: { + class: 'iframe-wrapper', + }, + }, + + addAttributes() { + return { + src: { + default: null, + }, + frameborder: { + default: 0, + }, + allowfullscreen: { + default: this.options.allowFullscreen, + parseHTML: () => { + return { + allowfullscreen: this.options.allowFullscreen, + } + }, + }, + } + }, + + parseHTML() { + return [{ + tag: 'iframe', + }] + }, + + renderHTML({ HTMLAttributes }) { + return ['div', this.options.HTMLAttributes, ['iframe', HTMLAttributes, 0]] + }, + + addCommands() { + return { + /** + * Add an iframe + */ + setIframe: (options: { src: string }): Command => ({ tr, dispatch }) => { + const { selection } = tr + const node = this.type.create(options) + + if (dispatch) { + tr.replaceRangeWith(selection.from, selection.to, node) + } + + return true + }, + } + }, +}) diff --git a/docs/src/demos/Experiments/Embeds/index.vue b/docs/src/demos/Experiments/Embeds/index.vue new file mode 100644 index 00000000..b88a5617 --- /dev/null +++ b/docs/src/demos/Experiments/Embeds/index.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/docs/src/docPages/experiments.md b/docs/src/docPages/experiments.md index d529d93e..615e04f6 100644 --- a/docs/src/docPages/experiments.md +++ b/docs/src/docPages/experiments.md @@ -7,6 +7,7 @@ Congratulations! You’ve found our secret playground with a list of experiments * [Comments](/experiments/comments) * [Color](/experiments/color) * [Commands](/experiments/commands) +* [Embeds](/experiments/embeds) ## Waiting for approval * [Placeholder](/experiments/placeholder) diff --git a/docs/src/docPages/experiments/embeds.md b/docs/src/docPages/experiments/embeds.md new file mode 100644 index 00000000..2b3cb3e5 --- /dev/null +++ b/docs/src/docPages/experiments/embeds.md @@ -0,0 +1,5 @@ +# Embeds + +⚠️ Experiment + +