From 40a9404c94c7fef7900610c195536384781ae101 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philipp=20K=C3=BChn?= Date: Fri, 3 Dec 2021 00:03:39 +0100 Subject: [PATCH] add newline-after-var rule to eslint config --- .eslintrc.js | 1 + demos/preview/Demo.vue | 5 ++++- demos/src/Examples/CollaborativeEditing/Vue/index.vue | 1 + demos/src/Experiments/Details/Vue/details.ts | 3 +++ demos/src/Experiments/GlobalDragHandle/Vue/DragHandle.js | 2 +- demos/src/Experiments/Linter/Vue/extension/Linter.ts | 2 ++ demos/src/Experiments/TrailingNode/Vue/trailing-node.ts | 2 ++ demos/src/Extensions/Collaboration/Vue/index.vue | 1 + demos/src/Extensions/CollaborationCursor/Vue/index.vue | 1 + demos/src/GuideNodeViews/JavaScript/Vue/Extension.js | 4 ++++ demos/src/GuideNodeViews/JavaScriptContent/Vue/Extension.js | 3 +++ demos/src/Nodes/Table/React/index.spec.js | 2 ++ demos/src/Nodes/Table/Vue/index.spec.js | 2 ++ packages/core/src/Editor.ts | 1 + packages/core/src/commands/undoInputRule.ts | 1 + packages/core/src/helpers/getHTMLFromFragment.ts | 1 + packages/core/src/inputRules/nodeInputRule.ts | 1 + .../src/collaboration-cursor.ts | 2 ++ packages/extension-table/src/TableView.ts | 2 ++ packages/react/src/ReactNodeViewRenderer.tsx | 1 + packages/vue-2/src/VueRenderer.ts | 1 + .../cypress/integration/extensions/codeBlockLowlight.spec.ts | 1 + tests/cypress/support/commands.js | 2 ++ 23 files changed, 40 insertions(+), 2 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index c2ab3bf3..d88f9e7e 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -36,6 +36,7 @@ module.exports = { ], rules: { curly: ['error', 'all'], + 'newline-after-var': ['error', 'always'], 'no-continue': 'off', 'no-alert': 'off', 'no-console': ['warn', { allow: ['warn', 'error'] }], diff --git a/demos/preview/Demo.vue b/demos/preview/Demo.vue index 74b85459..453f7cbf 100644 --- a/demos/preview/Demo.vue +++ b/demos/preview/Demo.vue @@ -230,7 +230,10 @@ export default { mounted() { // TODO: load language from url params - const intitialTab = localStorage.tab && this.tabs.some(tab => tab.name === localStorage.tab) ? localStorage.tab : this.sortedTabs[0]?.name + const intitialTab = localStorage.tab && this.tabs.some(tab => tab.name === localStorage.tab) + ? localStorage.tab + : this.sortedTabs[0]?.name + this.setTab(intitialTab, false) window.document.addEventListener('editor', this.onEditor, false) diff --git a/demos/src/Examples/CollaborativeEditing/Vue/index.vue b/demos/src/Examples/CollaborativeEditing/Vue/index.vue index a6843ebc..78a848b5 100644 --- a/demos/src/Examples/CollaborativeEditing/Vue/index.vue +++ b/demos/src/Examples/CollaborativeEditing/Vue/index.vue @@ -66,6 +66,7 @@ export default { mounted() { const ydoc = new Y.Doc() + this.provider = new HocuspocusProvider({ url: 'wss://connect.hocuspocus.cloud', parameters: { diff --git a/demos/src/Experiments/Details/Vue/details.ts b/demos/src/Experiments/Details/Vue/details.ts index a6359c80..aa67c4c0 100644 --- a/demos/src/Experiments/Details/Vue/details.ts +++ b/demos/src/Experiments/Details/Vue/details.ts @@ -58,13 +58,16 @@ export default Node.create({ addNodeView() { return ({ HTMLAttributes }) => { 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) diff --git a/demos/src/Experiments/GlobalDragHandle/Vue/DragHandle.js b/demos/src/Experiments/GlobalDragHandle/Vue/DragHandle.js index accc4a75..f38afd68 100644 --- a/demos/src/Experiments/GlobalDragHandle/Vue/DragHandle.js +++ b/demos/src/Experiments/GlobalDragHandle/Vue/DragHandle.js @@ -68,8 +68,8 @@ export default Extension.create({ e.dataTransfer.setData('text/plain', text) const el = document.querySelector('.ProseMirror-selectednode') - e.dataTransfer?.setDragImage(el, 0, 0) + e.dataTransfer?.setDragImage(el, 0, 0) view.dragging = { slice, move: true } } } diff --git a/demos/src/Experiments/Linter/Vue/extension/Linter.ts b/demos/src/Experiments/Linter/Vue/extension/Linter.ts index 75de9ed7..93f076b0 100644 --- a/demos/src/Experiments/Linter/Vue/extension/Linter.ts +++ b/demos/src/Experiments/Linter/Vue/extension/Linter.ts @@ -70,6 +70,7 @@ export const Linter = Extension.create({ }, handleClick(view, _, event) { const target = (event.target as IconDivElement) + if (/lint-icon/.test(target.className) && target.issue) { const { from, to } = target.issue @@ -86,6 +87,7 @@ export const Linter = Extension.create({ }, handleDoubleClick(view, _, event) { const target = (event.target as IconDivElement) + if (/lint-icon/.test((event.target as HTMLElement).className) && target.issue) { const prob = target.issue diff --git a/demos/src/Experiments/TrailingNode/Vue/trailing-node.ts b/demos/src/Experiments/TrailingNode/Vue/trailing-node.ts index 0643b6e9..69cd069f 100644 --- a/demos/src/Experiments/TrailingNode/Vue/trailing-node.ts +++ b/demos/src/Experiments/TrailingNode/Vue/trailing-node.ts @@ -53,6 +53,7 @@ export const TrailingNode = Extension.create({ state: { init: (_, state) => { const lastNode = state.tr.doc.lastChild + return !nodeEqualsType({ node: lastNode, types: disabledNodes }) }, apply: (tr, value) => { @@ -61,6 +62,7 @@ export const TrailingNode = Extension.create({ } const lastNode = tr.doc.lastChild + return !nodeEqualsType({ node: lastNode, types: disabledNodes }) }, }, diff --git a/demos/src/Extensions/Collaboration/Vue/index.vue b/demos/src/Extensions/Collaboration/Vue/index.vue index 623e1932..07309dff 100644 --- a/demos/src/Extensions/Collaboration/Vue/index.vue +++ b/demos/src/Extensions/Collaboration/Vue/index.vue @@ -26,6 +26,7 @@ export default { mounted() { const ydoc = new Y.Doc() + this.provider = new WebrtcProvider('tiptap-collaboration-extension', ydoc) this.editor = new Editor({ diff --git a/demos/src/Extensions/CollaborationCursor/Vue/index.vue b/demos/src/Extensions/CollaborationCursor/Vue/index.vue index c36a1d7c..aac84d43 100644 --- a/demos/src/Extensions/CollaborationCursor/Vue/index.vue +++ b/demos/src/Extensions/CollaborationCursor/Vue/index.vue @@ -27,6 +27,7 @@ export default { mounted() { const ydoc = new Y.Doc() + this.provider = new WebrtcProvider('tiptap-collaboration-cursor-extension', ydoc) this.editor = new Editor({ diff --git a/demos/src/GuideNodeViews/JavaScript/Vue/Extension.js b/demos/src/GuideNodeViews/JavaScript/Vue/Extension.js index f665e256..62c0463c 100644 --- a/demos/src/GuideNodeViews/JavaScript/Vue/Extension.js +++ b/demos/src/GuideNodeViews/JavaScript/Vue/Extension.js @@ -45,16 +45,20 @@ export default Node.create({ */ const dom = document.createElement('div') + dom.classList.add('node-view') const label = document.createElement('span') + label.classList.add('label') label.innerHTML = 'Node view' const content = document.createElement('div') + content.classList.add('content') const button = document.createElement('button') + button.innerHTML = `This button has been clicked ${node.attrs.count} times.` button.addEventListener('click', () => { if (typeof getPos === 'function') { diff --git a/demos/src/GuideNodeViews/JavaScriptContent/Vue/Extension.js b/demos/src/GuideNodeViews/JavaScriptContent/Vue/Extension.js index 0fc4e469..0ffa1b30 100644 --- a/demos/src/GuideNodeViews/JavaScriptContent/Vue/Extension.js +++ b/demos/src/GuideNodeViews/JavaScriptContent/Vue/Extension.js @@ -31,14 +31,17 @@ export default Node.create({ */ const dom = document.createElement('div') + dom.classList.add('node-view') const label = document.createElement('span') + label.classList.add('label') label.innerHTML = 'Node view' label.contentEditable = false const content = document.createElement('div') + content.classList.add('content') dom.append(label, content) diff --git a/demos/src/Nodes/Table/React/index.spec.js b/demos/src/Nodes/Table/React/index.spec.js index 8fb0e947..95fbb53d 100644 --- a/demos/src/Nodes/Table/React/index.spec.js +++ b/demos/src/Nodes/Table/React/index.spec.js @@ -61,6 +61,7 @@ context('/src/Nodes/Table/React/', () => { editor.commands.insertTable({ cols: 1, rows: 1, withHeaderRow: false }) const html = editor.getHTML() + expect(html).to.equal( '

', ) @@ -72,6 +73,7 @@ context('/src/Nodes/Table/React/', () => { editor.commands.insertTable({ cols: 1, rows: 1, withHeaderRow: true }) const html = editor.getHTML() + expect(html).to.equal( '

', ) diff --git a/demos/src/Nodes/Table/Vue/index.spec.js b/demos/src/Nodes/Table/Vue/index.spec.js index ed27146f..83f8d24e 100644 --- a/demos/src/Nodes/Table/Vue/index.spec.js +++ b/demos/src/Nodes/Table/Vue/index.spec.js @@ -61,6 +61,7 @@ context('/src/Nodes/Table/Vue/', () => { editor.commands.insertTable({ cols: 1, rows: 1, withHeaderRow: false }) const html = editor.getHTML() + expect(html).to.equal('

') }) }) @@ -70,6 +71,7 @@ context('/src/Nodes/Table/Vue/', () => { editor.commands.insertTable({ cols: 1, rows: 1, withHeaderRow: true }) const html = editor.getHTML() + expect(html).to.equal('

') }) }) diff --git a/packages/core/src/Editor.ts b/packages/core/src/Editor.ts index 44de29e7..002ef7b6 100644 --- a/packages/core/src/Editor.ts +++ b/packages/core/src/Editor.ts @@ -281,6 +281,7 @@ export class Editor extends EventEmitter { // Let’s store the editor instance in the DOM element. // So we’ll have access to it for tests. const dom = this.view.dom as HTMLElement + dom.editor = this } diff --git a/packages/core/src/commands/undoInputRule.ts b/packages/core/src/commands/undoInputRule.ts index 6d9ca426..6f93b186 100644 --- a/packages/core/src/commands/undoInputRule.ts +++ b/packages/core/src/commands/undoInputRule.ts @@ -31,6 +31,7 @@ export const undoInputRule: RawCommands['undoInputRule'] = () => ({ state, dispa if (undoable.text) { const marks = tr.doc.resolve(undoable.from).marks() + tr.replaceWith(undoable.from, undoable.to, state.schema.text(undoable.text, marks)) } else { tr.delete(undoable.from, undoable.to) diff --git a/packages/core/src/helpers/getHTMLFromFragment.ts b/packages/core/src/helpers/getHTMLFromFragment.ts index 547967c3..afe13d14 100644 --- a/packages/core/src/helpers/getHTMLFromFragment.ts +++ b/packages/core/src/helpers/getHTMLFromFragment.ts @@ -7,6 +7,7 @@ export default function getHTMLFromFragment(fragment: Fragment, schema: Schema): const temporaryDocument = document.implementation.createHTMLDocument() const container = temporaryDocument.createElement('div') + container.appendChild(documentFragment) return container.innerHTML diff --git a/packages/core/src/inputRules/nodeInputRule.ts b/packages/core/src/inputRules/nodeInputRule.ts index 3b6b410c..a9e1bfcb 100644 --- a/packages/core/src/inputRules/nodeInputRule.ts +++ b/packages/core/src/inputRules/nodeInputRule.ts @@ -37,6 +37,7 @@ export default function nodeInputRule(config: { // insert last typed character const lastChar = match[0][match[0].length - 1] + tr.insertText(lastChar, start + match[0].length - 1) // insert node from input rule diff --git a/packages/extension-collaboration-cursor/src/collaboration-cursor.ts b/packages/extension-collaboration-cursor/src/collaboration-cursor.ts index 5aad4601..4c6bed52 100644 --- a/packages/extension-collaboration-cursor/src/collaboration-cursor.ts +++ b/packages/extension-collaboration-cursor/src/collaboration-cursor.ts @@ -55,10 +55,12 @@ export const CollaborationCursor = Extension.create { const cursor = document.createElement('span') + cursor.classList.add('collaboration-cursor__caret') cursor.setAttribute('style', `border-color: ${user.color}`) const label = document.createElement('div') + label.classList.add('collaboration-cursor__label') label.setAttribute('style', `background-color: ${user.color}`) label.insertBefore(document.createTextNode(user.name), null) diff --git a/packages/extension-table/src/TableView.ts b/packages/extension-table/src/TableView.ts index 5e27f08c..d9640b8c 100644 --- a/packages/extension-table/src/TableView.ts +++ b/packages/extension-table/src/TableView.ts @@ -14,6 +14,7 @@ export function updateColumns(node: ProseMirrorNode, colgroup: Element, table: E for (let j = 0; j < colspan; j += 1, col += 1) { const hasWidth = overrideCol === col ? overrideValue : colwidth && colwidth[j] const cssWidth = hasWidth ? `${hasWidth}px` : '' + totalWidth += hasWidth || cellMinWidth if (!hasWidth) { @@ -34,6 +35,7 @@ export function updateColumns(node: ProseMirrorNode, colgroup: Element, table: E while (nextDOM) { const after = nextDOM.nextSibling + nextDOM.parentNode.removeChild(nextDOM) nextDOM = after } diff --git a/packages/react/src/ReactNodeViewRenderer.tsx b/packages/react/src/ReactNodeViewRenderer.tsx index a6d9505a..f15c1b10 100644 --- a/packages/react/src/ReactNodeViewRenderer.tsx +++ b/packages/react/src/ReactNodeViewRenderer.tsx @@ -83,6 +83,7 @@ class ReactNodeView extends NodeView { const createEditorEl = () => { const editorEl = document.createElement('div') + editorEl.classList.add(editorElClass) document.body.appendChild(editorEl) diff --git a/tests/cypress/support/commands.js b/tests/cypress/support/commands.js index 7dea73f2..c116e234 100644 --- a/tests/cypress/support/commands.js +++ b/tests/cypress/support/commands.js @@ -79,6 +79,7 @@ Cypress.Commands.add( const data = pasteType === 'application/json' ? JSON.stringify(pastePayload) : pastePayload // https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer const clipboardData = new DataTransfer() + clipboardData.setData(pasteType, data) // https://developer.mozilla.org/en-US/docs/Web/API/Element/paste_event const pasteEvent = new ClipboardEvent('paste', { @@ -88,6 +89,7 @@ Cypress.Commands.add( data, clipboardData, }) + subject[0].dispatchEvent(pasteEvent) return subject