joomla-cms icon indicating copy to clipboard operation
joomla-cms copied to clipboard

[5.2] Tinymce paste from word

Open brianteeman opened this issue 1 year ago • 16 comments

DRAFT - help requested @dgrammatiko @Fedik I obviously have an error in the buildscripts (?) or most likely how I added the js to build/media_source/plg_editors_tinymce/js/plugins/paste_from_word/

The demo I built on codepen shows it working https://codepen.io/brianteeman/pen/RwOeyWL

Summary of Changes

When we upgraded to TinyMCE 6 with joomla 5.0 we missed that the "paste from word" functionality was removed from the paste plugin and now only exists in the non-free paste plugin.

This PR follows the advice from TinyMCE to implement a forked version of the original paste plugin with just the paste from word funtionality. https://github.com/pangaeatech/tinymce-paste-from-word-plugin

I consider the lack of paste from word to be a regression bug and therefore this PR is for 5.1.1 but I can see why others consider it a feature and should wait for 5.2. So I leave that to the maintainers to decided.

Testing Instructions

Use a sample word doc (for example from https://sample-videos.com/download-sample-doc-file.php or https://file-examples.com/index.php/sample-documents-download/sample-doc-download/)

Copy and paste the doc into Joomla. Save and then view the source

Actual result BEFORE applying this Pull Request

lots of mso tags etc in the source example

<li class="MsoNormal" style="mso-list: l0 level1 lfo2; tab-stops: list 36.0pt;"><span lang="EN-US">First item of bulleted list. </span></li>
<li class="MsoNormal" style="mso-list: l0 level1 lfo2; tab-stops: list 36.0pt;"><span lang="EN-US">Second item of bulleted list.</span></li>

Expected result AFTER applying this Pull Request

no mso tags in the source

Link to documentations

Please select:

  • [ ] Documentation link for docs.joomla.org:

  • [ ] No documentation changes for docs.joomla.org needed

  • [ ] Pull Request link for manual.joomla.org:

  • [ ] No documentation changes for manual.joomla.org needed

brianteeman avatar Apr 18 '24 21:04 brianteeman

@brianteeman allow PRs in your cloned repo so I can sent you the code

dgrammatiko avatar Apr 19 '24 06:04 dgrammatiko

I thought that the paste feature now is default for new tinymce.

If we want to "fork", we should do it from source: https://github.com/tinymce/tinymce/blob/release/5.10/modules/tinymce/src/plugins/paste/main/ts/Plugin.ts The same need to do for "template": https://github.com/tinymce/tinymce/blob/release/5.10/modules/tinymce/src/plugins/template/main/ts/Plugin.ts

Need to complie ts to js, and copy non-minified version. I had no time for that, maybe will look later or Dimitris will be faster :wink:

Fedik avatar Apr 19 '24 07:04 Fedik

If we want to "fork", we should do it from source:

@Fedik if someone already has a package for this then why not use it. TS will be pain to get in the Joomla repo

dgrammatiko avatar Apr 19 '24 07:04 dgrammatiko

No, no TS, compile then add. Well, can also use some existing forks.

Fedik avatar Apr 19 '24 07:04 Fedik

No, no TS, compile then add.

That means we need a repo for these plugins. Not a bad idea but:

  • I don't have permissions to do that
  • One more repo and judging from the custom-elements repo updates would be at the best sporadic (basically no updates)

FWIW this PR just needs:

  • npm install -S @pangaeatech/tinymce-paste-from-word-plugin
  • add a file build/media_source/plg_editors_tinymce/js/plugins/paste_from_word/plugin.es6.js with contents:
import '@pangaeatech/tinymce-paste-from-word-plugin';
  • delete the file build/media_source/plg_editors_tinymce/js/plugins/paste_from_word/plugin.min.js

dgrammatiko avatar Apr 19 '24 07:04 dgrammatiko

That means we need a repo for these plugins.

No, just as in good old days, copy the js file and call it done :smile: "One time compile" :neckbeard:

Fedik avatar Apr 19 '24 07:04 Fedik

I thought that the paste feature now is default for new tinymce.

No that was the mistake we made. Paste is a default feature but without the paste from word.

If we want to "fork", we should do it from source:

No the correct way is to use the repo I linked to. As explained by tinymce https://github.com/tinymce/tinymce/discussions/7487 it is not a simple fork. and the linked repo as done what they said should be done.

FWIW this PR just needs:

Ah - I tried it that way before but I missed the

add a file build/media_source/plg_editors_tinymce/js/plugins/paste_from_word/plugin.es6.js with contents: import '@pangaeatech/tinymce-paste-from-word-plugin';

I will do that now and see.

brianteeman avatar Apr 19 '24 08:04 brianteeman

Ah yeah the good ol' days... We can revert all those confusing NPM build steps and have the code version directly in the repo, what could go wrong

dgrammatiko avatar Apr 19 '24 08:04 dgrammatiko

@dgrammatiko I have done what I believe you are suggesting but I must be missing something as after the build the folder media\plg_editors_tinymce\js\plugins\paste_from_word is empty

brianteeman avatar Apr 19 '24 08:04 brianteeman

@brianteeman you have a typo in the filename: build/media_source/plg_editors_tinymce/js/plugins/paste_from_word/plugin.es6.js es6 not e6

dgrammatiko avatar Apr 19 '24 08:04 dgrammatiko

@dgrammatiko please can you check out this pr (not code review) something isnt correct and I cant see what. Just look at the console errors

brianteeman avatar Apr 19 '24 09:04 brianteeman

This pull request has been automatically rebased to 5.2-dev.

HLeithner avatar Apr 24 '24 09:04 HLeithner

@dgrammatiko @Fedik could you take a look at this please. I must be missing something obvious. The js is correctly being loaded by $wa->useScript('plg_editors_tinymce.paste_from_word');

but if i try to init the plugin with $plugins[] = 'paste_from_word';

it will try to additionaly load the plugin from /media/vendor/tinymce/plugins/paste_from_word/plugin.min.js where it does not exist and gives a 404

No matter what I try I cannot get the plugin to load and initialise

brianteeman avatar May 16 '24 14:05 brianteeman

There some error with this plugin. I got Cannot read properties of undefined (reading 'tinymce') from this plugin.

Need some time to debug.

Does it work outside of Joomla? :)

Fedik avatar May 16 '24 16:05 Fedik

Sommething with our build script (rollup corrupting the code) and the plugin script itself (it does not provide ES module).

When I copy their file node_modules/@pangaeatech/tinymce-paste-from-word-plugin/index.js to media/plg_editors_tinymce/js/plugins/paste_from_word/plugin.min.js And change "type": "module" to "defer": true in asset defination. then it works.

Complicated :)

Fedik avatar May 17 '24 13:05 Fedik

still no go for me

brianteeman avatar May 17 '24 14:05 brianteeman