mirror of https://github.com/luileito/jsketch.git
Less intrusive init method for memento plugin
This commit is contained in:
parent
2f01e2bf58
commit
c7d86ee0e4
|
|
@ -131,6 +131,8 @@
|
|||
* @memberOf MementoCanvas
|
||||
*/
|
||||
this.init = function() {
|
||||
// Prevent subsequent instances to re-attach this event to the document.
|
||||
$(document).off("keypress", keyManager);
|
||||
$(document).on("keypress", keyManager);
|
||||
};
|
||||
/**
|
||||
|
|
@ -151,7 +153,9 @@
|
|||
var availMethods = plugin('methods');
|
||||
|
||||
function configure(elem, opts) {
|
||||
var options = $.extend(true, plugin.defaults, opts);
|
||||
var self = elem, options = $.extend(true, plugin.defaults, opts);
|
||||
// Actually this plugin is singleton, so exit early.
|
||||
if (!options.interactive) return opts;
|
||||
|
||||
var mc = new MementoCanvas(elem);
|
||||
|
||||
|
|
@ -174,9 +178,10 @@
|
|||
if (options && options.events && typeof options.events[ev] === 'function') {
|
||||
var fn = options.events[ev];
|
||||
options.events[ev] = function() {
|
||||
// Exec original function first, then exec our callback.
|
||||
var args = Array.prototype.slice.call(arguments, 0);
|
||||
fn.call(this, args);
|
||||
callbacks[ev].apply(this, args);
|
||||
fn.apply(self, args);
|
||||
callbacks[ev].apply(self, args);
|
||||
}
|
||||
} else {
|
||||
plugin.defaults.events[ev] = callbacks[ev];
|
||||
|
|
@ -212,15 +217,10 @@
|
|||
* $(selector).sketchable();
|
||||
* $(selector).sketchable({interactive:false});
|
||||
*/
|
||||
$.fn.sketchable = function(method) {
|
||||
if (typeof method === 'object' || !method) {
|
||||
// Object creation: configure memento extension.
|
||||
var newOptions = configure(this, arguments[0]);
|
||||
return availMethods.init.apply(this, [newOptions]);
|
||||
} else if (availMethods[method]) {
|
||||
// Method invocation: execute it as usual.
|
||||
return availMethods[method].apply(this, Array.prototype.slice.call(arguments, 1));
|
||||
}
|
||||
var initfn = availMethods.init;
|
||||
availMethods.init = function(opts) {
|
||||
var conf = configure(this, opts);
|
||||
return initfn.apply(this, [conf]);
|
||||
};
|
||||
|
||||
})(jQuery);
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
/*!
|
||||
* Memento plugin for jQuery sketchable | v1.1 | Luis A. Leiva | MIT license
|
||||
*/
|
||||
;(function(d){var a=function(l){var g=[];var f=-1;var h=this;function k(){if(f>0){f--;var n=new Image();n.src=g[f].image;n.onload=function(){i(this)}}}function j(){if(f<g.length-1){f++;var n=new Image();n.src=g[f].image;n.onload=function(){i(this)}}}function i(n){l.sketchable("handler",function(o,p){p.sketch.clear();p.sketch.graphics.drawImage(n,0,0)})}function m(n){if(n.ctrlKey){switch(n.which){case 26:if(n.shiftKey){h.redo()}else{h.undo()}break;case 25:h.redo();break;default:break}}}this.undo=function(){k();l.sketchable("handler",function(n,o){o.strokes=g[f].strokes.slice()})};this.redo=function(){j();l.sketchable("handler",function(n,o){o.strokes=g[f].strokes.slice()})};this.reset=function(){g=[];f=-1};this.save=function(){f++;if(f<g.length){g.length=f}l.sketchable("handler",function(n,o){g.push({image:n[0].toDataURL(),strokes:o.strokes.slice()})})};this.init=function(){d(document).on("keypress",m)};this.destroy=function(){d(document).off("keypress",m);this.reset()}};var c=d.fn.sketchable;var e=c("methods");function b(m,l){var f=d.extend(true,c.defaults,l);var n=new a(m);var k={init:function(i,o){o.memento=n;o.memento.save();o.memento.init()},mouseup:function(i,o,p){o.memento.save()},destroy:function(i,o){o.memento.destroy()}};function j(o){if(f&&f.events&&typeof f.events[o]==="function"){var i=f.events[o];f.events[o]=function(){var p=Array.prototype.slice.call(arguments,0);i.call(this,p);k[o].apply(this,p)}}else{c.defaults.events[o]=k[o]}}var h="init mouseup destroy".split(" ");for(var g=0;g<h.length;g++){j(h[g])}d.extend(e,{undo:function(){n.undo()},redo:function(){n.redo()}});return c.defaults}d.fn.sketchable=function(g){if(typeof g==="object"||!g){var f=b(this,arguments[0]);return e.init.apply(this,[f])}else{if(e[g]){return e[g].apply(this,Array.prototype.slice.call(arguments,1))}}}})(jQuery);
|
||||
;(function(e){var a=function(m){var h=[];var g=-1;var i=this;function l(){if(g>0){g--;var o=new Image();o.src=h[g].image;o.onload=function(){j(this)}}}function k(){if(g<h.length-1){g++;var o=new Image();o.src=h[g].image;o.onload=function(){j(this)}}}function j(o){m.sketchable("handler",function(p,q){q.sketch.clear();q.sketch.graphics.drawImage(o,0,0)})}function n(o){if(o.ctrlKey){switch(o.which){case 26:if(o.shiftKey){i.redo()}else{i.undo()}break;case 25:i.redo();break;default:break}}}this.undo=function(){l();m.sketchable("handler",function(o,p){p.strokes=h[g].strokes.slice()})};this.redo=function(){k();m.sketchable("handler",function(o,p){p.strokes=h[g].strokes.slice()})};this.reset=function(){h=[];g=-1};this.save=function(){g++;if(g<h.length){h.length=g}m.sketchable("handler",function(o,p){h.push({image:o[0].toDataURL(),strokes:p.strokes.slice()})})};this.init=function(){e(document).off("keypress",n);e(document).on("keypress",n)};this.destroy=function(){e(document).off("keypress",n);this.reset()}};var d=e.fn.sketchable;var f=d("methods");function c(j,g){var o=j,p=e.extend(true,d.defaults,g);if(!p.interactive){return g}var m=new a(j);var l={init:function(i,q){q.memento=m;q.memento.save();q.memento.init()},mouseup:function(i,q,r){q.memento.save()},destroy:function(i,q){q.memento.destroy()}};function h(q){if(p&&p.events&&typeof p.events[q]==="function"){var i=p.events[q];p.events[q]=function(){var r=Array.prototype.slice.call(arguments,0);i.apply(o,r);l[q].apply(o,r)}}else{d.defaults.events[q]=l[q]}}var n="init mouseup destroy".split(" ");for(var k=0;k<n.length;k++){h(n[k])}e.extend(f,{undo:function(){m.undo()},redo:function(){m.redo()}});return d.defaults}var b=f.init;f.init=function(h){var g=c(this,h);return b.apply(this,[g])}})(jQuery);
|
||||
Loading…
Reference in New Issue