jsketch/dist/jquery.sketchable.memento.m...

1 line
2.1 KiB
JavaScript

!function(a){function b(b){function c(a,c){b.sketchable("handler",function(b,d){d.sketch.clear(),d.sketch.context.drawImage(a,0,0),d.strokes=c.strokes.slice(),d.sketch.callStack=c.callStack.slice()})}function d(a){b.sketchable("handler",function(b,c){a&&a.identifier>0?f[g].strokes=c.strokes.slice():(f.push({image:b.get(0).toDataURL(),strokes:c.strokes.slice(),callStack:c.sketch.callStack.slice()}),g++)})}function e(a){if(a.ctrlKey)switch(a.which){case 26:a.shiftKey?h.redo():h.undo();break;case 25:h.redo()}}var f=[],g=-1,h=this;this.undo=function(){return g>0&&(g--,this.restore(),b.sketchable("trigger","mementoundo")),this},this.redo=function(){return g<f.length-1&&(g++,this.restore(),b.sketchable("trigger","mementoredo")),this},this.reset=function(){return f=[],g=-1,b.sketchable("trigger","mementoreset"),d(),this},this.save=function(a){return d(a),b.sketchable("trigger","mementosave"),this},this.state=function(){return JSON.parse(JSON.stringify(f[g]))},this.restore=function(a){a||(a=f[g]);var d=new Image;return d.src=a.image,d.onload=function(){c(this,a),b.sketchable("trigger","mementochange")},this},this.init=function(){return a(document).off("keypress",e),a(document).on("keypress",e),b.sketchable("trigger","mementoinit"),d(),this},this.destroy=function(){return a(document).off("keypress",e),b.sketchable("trigger","mementodestroy"),this.reset()}}var c="sketchable";a.fn.sketchable.plugins.memento=function(d){for(var e={clear:function(a,b){b.memento.reset()},mouseup:function(a,b,c){b.memento.save(c)},destroy:function(a,b){b.memento.destroy()}},f="mouseup clear destroy".split(" "),g=0;g<f.length;g++){var h=f[g];d.sketchable("decorate",h,e[h],"memento")}a.extend(a.fn.sketchable.api,{memento:{undo:function(){var b=a(this).data(c);return b.memento.undo(),d},redo:function(){var b=a(this).data(c);return b.memento.redo(),d},save:function(){var b=a(this).data(c);return b.memento.save(),d},state:function(){var b=a(this).data(c);return b.memento.state()},restore:function(b){var e=a(this).data(c);return e.memento.restore(b),d}}});var i=d.sketchable("data");i.memento=new b(d),i.memento.init()}}(jQuery);