Actualmente estoy tratando de implementar un editor visual usando una biblioteca llamada tiptap.
Creo que v2 es el tiptap más común, pero hay circunstancias en las que se debe usar v1.
Sin embargo, no estaba satisfecho con el comportamiento cuando pegué texto sin formato en tiptap, y cuando lo investigué, descubrí que la condición establecida en la biblioteca prosemirror era diferente de lo que esperaba.
https://github.com/ProseMirror/prosemirror-view/blob/master/src/clipboard.js#L57-L59
text.trim().split(/(?:\r\n?|\n)+/).forEach(block => { dom.appendChild(document.createElement("p")).appendChild(serializer.serializeNode(schema.text(block, marks))) }) Parece que prosemirror convierte una sola nueva línea en <p></p> . Me gustaría cambiar la condición para que se convierta en <br> si hay una nueva línea y <p></p> si hay dos nuevas líneas. Pero no sé cómo hacer que suceda, y lo estoy pasando muy mal.
editorProps: { clipboardTextParser(text, $context) { console.log(text) console.log($context) // :( } } Empecé usando la función EditorProps de EditorProps para sobrescribir todo el procesamiento del clipboardTextParser de prosemirror. Sin embargo, clipboardTextParser usa una cantidad de variables y objetos en prosemirror, y no tengo idea de cómo escribirlos en editorProps. Y me rendí porque no sabía cómo proceder.
¿Hay alguna forma de resolver esto? Estoy pensando que si tiptap puede hacer casi lo mismo que clipboardTextParser , debería estar bien.
Perdón por mi mal inglés. ¡Por favor, ayúdame!
Deberías usar transformPastedHTML
https://prosemirror.net/docs/ref/#view.EditorProps.transformPastedHTML
Eso le dará un nodo html, luego puede simplemente cambiar la salida de esta manera:
private cleanHtmlHanlder (html: string): string { const elementHtml = document.createElement('br') elementHtml.innerHTML = html return elementHtml }Espero eso ayude