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);
});
}
}
}