Skip to content

Commit

Permalink
Merge branch 'main' of github.com:ueberdosis/tiptap
Browse files Browse the repository at this point in the history
  • Loading branch information
svenadlung committed Oct 17, 2022
2 parents 40b8967 + 1c493f3 commit e269b36
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 3 deletions.
35 changes: 34 additions & 1 deletion packages/core/src/PasteRule.ts
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,9 @@ function run(config: {
export function pasteRulesPlugin(props: { editor: Editor, rules: PasteRule[] }): Plugin[] {
const { editor, rules } = props
let dragSourceElement: Element | null = null
let draggedElement: any
let draggedText: Selection | null = null
let caretOffset: number | undefined
let isPastedFromProseMirror = false
let isDroppedFromProseMirror = false

Expand All @@ -168,25 +171,55 @@ export function pasteRulesPlugin(props: { editor: Editor, rules: PasteRule[] }):
// we register a global drag handler to track the current drag source element
view(view) {
const handleDragstart = (event: DragEvent) => {
draggedElement = event.target
draggedText = window.getSelection()
event.dataTransfer?.setData('text/plain', draggedText?.toString() as string)
dragSourceElement = view.dom.parentElement?.contains(event.target as Element)
? view.dom.parentElement
: null
}

const handleDragEnter = (event: DragEvent) => {
event.preventDefault()
}

const handleDragOver = (event: DragEvent) => {
event.preventDefault()
let caretData

if (document.caretRangeFromPoint) {
caretData = document.caretRangeFromPoint(event.clientX, event.clientY)
}
caretOffset = caretData?.startOffset
}

window.addEventListener('dragstart', handleDragstart)

window.addEventListener('dragenter', handleDragEnter)

window.addEventListener('dragover', handleDragOver)

return {
destroy() {
window.removeEventListener('dragstart', handleDragstart)
window.removeEventListener('dragenter', handleDragEnter)
window.removeEventListener('dragover', handleDragOver)
},
}
},

props: {
handleDOMEvents: {
drop: view => {
drop: (view, event: any) => {
isDroppedFromProseMirror = dragSourceElement === view.dom.parentElement
event.preventDefault()

const data = event.dataTransfer?.getData('text/plain')

if (event.target.parentElement.className === 'ProseMirror') {
draggedElement.textContent = draggedElement.textContent.replace(data, '')
event.target.textContent = event.target.textContent.slice(0, caretOffset) + data + event.target.textContent.slice(caretOffset)
}
return false
},

Expand Down
2 changes: 1 addition & 1 deletion packages/extension-highlight/src/highlight.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ export const Highlight = Mark.create<HighlightOptions>({

return {
'data-color': attributes.color,
style: `background-color: ${attributes.color}`,
style: `background-color: ${attributes.color}; color: inherit`,
}
},
},
Expand Down
6 changes: 5 additions & 1 deletion packages/extension-link/src/link.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Mark, markPasteRule, mergeAttributes } from '@tiptap/core'
import { find, registerCustomProtocol } from 'linkifyjs'
import { find, registerCustomProtocol, reset } from 'linkifyjs'
import { Plugin } from 'prosemirror-state'

import { autolink } from './helpers/autolink'
Expand Down Expand Up @@ -65,6 +65,10 @@ export const Link = Mark.create<LinkOptions>({
this.options.protocols.forEach(registerCustomProtocol)
},

onDestroy() {
reset()
},

inclusive() {
return this.options.autolink
},
Expand Down

0 comments on commit e269b36

Please sign in to comment.