trumbowyg
Version:
A lightweight WYSIWYG editor
8 lines • 2.59 kB
JavaScript
/*/* ===========================================================
* trumbowyg.history.js v1.0
* history plugin for Trumbowyg
* http://alex-d.github.com/Trumbowyg
* ===========================================================
* Author : Sven Dunemann [dunemann@forelabs.eu]
*/
!function(i){"use strict";i.extend(!0,i.trumbowyg,{plugins:{history:{destroy:function(i){i.$c.off("tbwinit.history tbwchange.history")},init:function(t){t.o.plugins.history=i.extend(!0,{_stack:[],_index:-1,_focusEl:void 0},t.o.plugins.history||{});var o={title:t.lang.redo,ico:"redo",key:"Y",fn:function(){if(t.o.plugins.history._index<t.o.plugins.history._stack.length-1){t.o.plugins.history._index+=1;var i=t.o.plugins.history._index,o=t.o.plugins.history._stack[i];t.execCmd("html",o),t.o.plugins.history._stack[i]=t.$ed.html(),r(),s()}}},n={title:t.lang.undo,ico:"undo",key:"Z",fn:function(){if(t.o.plugins.history._index>0){t.o.plugins.history._index-=1;var i=t.o.plugins.history._index,o=t.o.plugins.history._stack[i];t.execCmd("html",o),t.o.plugins.history._stack[i]=t.$ed.html(),r(),s()}}},s=function(){var i=t.o.plugins.history._index,o=t.o.plugins.history._stack.length,n=0!==o&&i!==o-1;e("historyUndo",i>0),e("historyRedo",n)},e=function(i,o){var n=t.$box.find(".trumbowyg-"+i+"-button");o?n.removeClass("trumbowyg-disable"):n.hasClass("trumbowyg-disable")||n.addClass("trumbowyg-disable")},l=function(i,t){if(i===t)return!0;if(null==i||null==t)return!1;if(i.length!==t.length)return!1;for(var o=0;o<i.length;o+=1)if(i[o]!==t[o])return!1;return!0},r=function(){var i=t.doc.getSelection().focusNode,o=t.doc.createRange();i.childNodes.length>0&&(o.setStartAfter(i.childNodes[i.childNodes.length-1]),o.setEndAfter(i.childNodes[i.childNodes.length-1]),t.doc.getSelection().removeAllRanges(),t.doc.getSelection().addRange(o))};t.$c.on("tbwinit.history tbwchange.history",(function(){var o,n,e=t.o.plugins.history._index,r=t.o.plugins.history._stack,d=r.slice(-1)[0]||"<p></p>",u=r[e],h=t.$ed.html(),c=t.doc.getSelection().focusNode,g="",a=t.o.plugins.history._focusEl;o=i("<div>"+d+"</div>").find("*").map((function(){return this.localName})),n=i("<div>"+h+"</div>").find("*").map((function(){return this.localName})),c&&(t.o.plugins.history._focusEl=c,g=c.outerHTML||c.textContent),h!==u&&(g.slice(-1).match(/\s/)||!l(o,n)||t.o.plugins.history._index<=0||c!==a?(t.o.plugins.history._index+=1,t.o.plugins.history._stack=r.slice(0,t.o.plugins.history._index),t.o.plugins.history._stack.push(h)):t.o.plugins.history._stack[e]=h,s())})),t.addBtnDef("historyRedo",o),t.addBtnDef("historyUndo",n)}}}})}(jQuery);