diff --git a/assets/js/translatehtml.js b/assets/js/translatehtml.js index 0d1c26db18..f333f0b3ff 100644 --- a/assets/js/translatehtml.js +++ b/assets/js/translatehtml.js @@ -11,6 +11,7 @@ document.addEventListener('DOMContentLoaded', function (){ }); const selectedLang = document.querySelectorAll('[lang="' + isoCode + '"]'); selectedLang.forEach(function (userLang) { + userLang.classList.remove('hidden') userLang.style.display = 'block'; }); } diff --git a/public/libs/editor/tinymce_plugins/translatehtml/plugin.js b/public/libs/editor/tinymce_plugins/translatehtml/plugin.js index 3371ad31d6..d38d9b7586 100644 --- a/public/libs/editor/tinymce_plugins/translatehtml/plugin.js +++ b/public/libs/editor/tinymce_plugins/translatehtml/plugin.js @@ -5,17 +5,39 @@ var global = tinymce.util.Tools.resolve('tinymce.PluginManager'); var translatedSelector = 'span[class="mce-translatehtml"]'; - var removeTranslated = function (editor) { - var translated = editor.dom.getParent(editor.selection.getStart(), translatedSelector); - if (translated) { - $(translated).replaceWith(function() { - return this.innerHTML; - }); - } - editor.addVisual(); + var cleanTranslated = function (newElement) { + var nodes = $(newElement).find(".mce-translatehtml"); + if (nodes.length > 0) { + $(newElement).find(".mce-translatehtml").each(function() { + $(this).replaceWith($(this).html()); + }); + } }; - var register = function (editor) { + + var tinyWrap = function (open_tag, close_tag) { + var ed = (tinymce.activeEditor || opener.tinymce.activeEditor); /* get editor instance */ + var selection = ed.selection.getContent(); /* get user selection, if any */ + var temp_name = new Date().getTime().toString(36).toLowerCase(); /* generate a unique string */ + var span_open = ''; /* generate '' */ + var span_close = ''; /* generate closing '' */ + selection = selection.replace(/

/g,'').replace(/<\/p>/g,'
'); /* convert

to
*/ + if (selection.substr(selection.length-6) === '
') { + selection = selection.substr(0, selection.length-6); /* strip last
if present */ + } + /* create complete selection replacement: 'OPEN_TAGselectionCLOSE_TAG' */ + var content = open_tag + span_open + selection + span_close + close_tag; + ed.execCommand('mceReplaceContent', false, content); /* replace selection with new */ + var span_elem = ed.dom.get(temp_name); /* get the element of the temp span */ + ed.selection.select(span_elem); /* select (highlight) the selection span */ + cleanTranslated(span_elem); + ed.dom.remove(temp_name, true); /* remove the span, leave it's highlighted text behind(true) */ + ed.focus(); /* insure editor has focus */ + return; /* taa-daa! all done! */ + } + + + var register = function (editor) { var languagesConfigStrings = editor.getParam("translatehtml_lenguage_list"); editor.ui.registry.addSplitButton('translatehtml', { tooltip: 'Translate html', @@ -24,13 +46,15 @@ onItemAction: function (api, value) { if (value[0] != 'remove') { - var span = ''+value[2]+''; // $('').attr({'className' : 'mce-translatehtml-tmp', 'dir' : value[0], 'lang' : value[1]}).html(value[2]); - editor.insertContent(span); + tinyWrap(''); } - removeTranslated(editor); + else { + tinyWrap('', ''); + } + }, fetch: function (callback) { - var items = [], parts, curLanguageId, dir, itemText, i; + var items = [], parts, curLanguageId, dir, i; for ( i = 0; i < languagesConfigStrings.length; i++ ) { parts = languagesConfigStrings[i].split(':'); curLanguageId = parts[0]; @@ -38,11 +62,10 @@ if ((''+parts[2]).toLowerCase() != 'rtl') { dir = 'ltr'; } - itemText = editor.selection.getContent({format: "text"}); items.push({ type: 'choiceitem', text: parts[1], - value: [dir , curLanguageId, itemText] + value: [dir , curLanguageId] }); } items.push({