tinymce-vue icon indicating copy to clipboard operation
tinymce-vue copied to clipboard

Text becomes blank if DOM elements are added or removed around tinymce instance

Open lwd8cmd opened this issue 3 years ago • 11 comments

What is the current behavior? Text becomes blank and is not editable if parent siblings in DOM tree are removed or added.

**Please provide the steps to reproduce and if possible a minimal demo of the problem

<script>
import TinyMce from '@tinymce/tinymce-vue';

export default {
  components: {
    TinyMce,
  },
  data: function() {
    return {
      text: 'text',
      instructionsVisible: false,
    };
  },
};
</script>

<template lang="html">
  <div>
    <label><input type="checkbox" v-model="instructionsVisible" /> Click me</label>
    <p v-if="instructionsVisible">Lorem ipsum dolor sit amet</p>
    <div><tiny-mce v-model="text"/></div>
    <p v-if="instructionsVisible">Lorem ipsum dolor sit amet</p>
  </div>
</template>

Working demo: https://codepen.io/lwd8cmd/pen/rNWbXYx

Bug is probably caused by Vue moving div block containing tiny-mce editor around in DOM tree if p-tags are added. Vue doesn't keep content in another document (editable text held in iframe) if div block is moved to another location in DOM.

Call stack:

  • Vue._update
  • patch - update DOM structure
  • patchVnode - patch existing root node (root div)
  • updateChildren - update root div children (remove p tags, move div tag containing tiny-mce component)
  • insertBefore - move div containing tiny-mce component to another location

What is the expected behavior? Text editor content shouldn't change, text should stay editable.

Which versions of TinyMCE, and which browser / OS are affected by this issue? Did this work in previous versions of TinyMCE or tinymce-vue? Bug occurred in Tinymce-vue 3.0 and 3.2.8. Tested using Chrome 88, but bug should be browser-agnostic.

lwd8cmd avatar Mar 16 '21 23:03 lwd8cmd

Hi @lwd8cmd 👋🏻

I have found a bypass solution to this problem on other GitHub issue and I wanted to share with you : https://github.com/tinymce/tinymce-vue/issues/48#issuecomment-730715484 I copied your codepen to make an update with this solution : https://codepen.io/dimer47/pen/xxgPKwL

I hope I helped you and that TinyMCE fix this problem quickly, Dimer47

dimer47 avatar Apr 08 '21 09:04 dimer47

Ref: INT-2498

exalate-issue-sync[bot] avatar Apr 08 '21 09:04 exalate-issue-sync[bot]

Just wanted to mention the same issue happens when using the sortable js extension: https://github.com/SortableJS/vue.draggable.next

After dragging/dropping the DOM is re-ordered and the dragged elements text becomes invisible (though it is still there)

The same workaround works by using the sortable @end callback to quickly hide/show the TinyMCE container to force a re-render.

Having a way to call refresh/redraw on the <editor> component would be helpful to remove the flash that occurs when hiding/showing quickly.

nerdymind-dev avatar May 06 '21 21:05 nerdymind-dev

I had the same issue when using the editor inside a Vuetify v-dialog and was able to solve it by using the bypass mentioned by @dimer47: https://github.com/tinymce/tinymce-vue/issues/48#issuecomment-730715484

fecorreiabr avatar May 19 '21 21:05 fecorreiabr

Same problem as @nerdymind-dev using vue-draggable. Any update on this?

luismabenitez avatar Jul 13 '21 17:07 luismabenitez

Just ran into this myself. The above codepens do not seem to work for me and the solution proposed here doesn't work either.

angelicochris avatar Mar 23 '22 12:03 angelicochris

Same issue here. Solution of @dimer47 works, but is not ideal

keygun-development avatar Feb 11 '23 08:02 keygun-development

Same issue here. This should be tinymce bug not tinymce-vue bug.

scx567888 avatar Apr 07 '23 01:04 scx567888