app/assets/javascripts/activeadmin/trumbowyg/plugins/cleanpaste/trumbowyg.cleanpaste.js in activeadmin_trumbowyg-0.2.10 vs app/assets/javascripts/activeadmin/trumbowyg/plugins/cleanpaste/trumbowyg.cleanpaste.js in activeadmin_trumbowyg-0.2.12

- old
+ new

@@ -94,15 +94,51 @@ // pasted contents $.extend(true, $.trumbowyg, { plugins: { cleanPaste: { init: function (trumbowyg) { - trumbowyg.pasteHandlers.push(function () { + trumbowyg.pasteHandlers.push(function (pasteEvent) { setTimeout(function () { - try { - trumbowyg.$ed.html(cleanIt(trumbowyg.$ed.html())); - } catch (c) { - } + try { + trumbowyg.saveRange(); + + var clipboardData = (pasteEvent.originalEvent || pasteEvent).clipboardData, + pastedData = clipboardData.getData('Text'), + node = trumbowyg.doc.getSelection().focusNode, + range = trumbowyg.doc.createRange(), + cleanedPaste = cleanIt(pastedData.trim()), + newNode = $(cleanedPaste)[0] || trumbowyg.doc.createTextNode(cleanedPaste); + + if (trumbowyg.$ed.html() === '') { + // simply append if there is no content in editor + trumbowyg.$ed[0].appendChild(newNode); + } else { + // insert pasted content behind last focused node + range.setStartAfter(node); + range.setEndAfter(node); + trumbowyg.doc.getSelection().removeAllRanges(); + trumbowyg.doc.getSelection().addRange(range); + + trumbowyg.range.insertNode(newNode); + } + + // now set cursor right after pasted content + range = trumbowyg.doc.createRange(); + range.setStartAfter(newNode); + range.setEndAfter(newNode); + trumbowyg.doc.getSelection().removeAllRanges(); + trumbowyg.doc.getSelection().addRange(range); + + // prevent defaults + pasteEvent.stopPropagation(); + pasteEvent.preventDefault(); + + // save new node as focused node + trumbowyg.saveRange(); + trumbowyg.syncCode(); + trumbowyg.$c.trigger('tbwchange'); + } catch (c) { + } }, 0); }); } } }