mirror of https://github.com/luileito/jsketch.git
Added event decorator
This commit is contained in:
parent
80dc9732a5
commit
050a727513
|
|
@ -132,31 +132,12 @@
|
|||
},
|
||||
};
|
||||
|
||||
// A helper function to override user-defined event listeners.
|
||||
function override(evName) {
|
||||
// Flag event override so that it doesn't get fired more than once.
|
||||
if (config.options['_bound.animate$' + evName]) return;
|
||||
config.options['_bound.animate$' + evName] = true;
|
||||
|
||||
if (config.options.events && typeof config.options.events[evName] === 'function') {
|
||||
// User has defined this event, so wrap it.
|
||||
var fn = config.options.events[evName];
|
||||
config.options.events[evName] = function() {
|
||||
// Exec original function first, then exec our callback.
|
||||
fn.apply($instance, arguments);
|
||||
callbacks[evName].apply($instance, arguments);
|
||||
};
|
||||
} else {
|
||||
// User has not defined this event, so attach our callback.
|
||||
config.options.events[evName] = callbacks[evName];
|
||||
}
|
||||
}
|
||||
|
||||
// Note: the init event is used to create sketchable instances,
|
||||
// therefore it should NOT be overriden.
|
||||
var events = 'clear destroy'.split(' ');
|
||||
for (var i = 0; i < events.length; i++) {
|
||||
override(events[i]);
|
||||
var evName = events[i];
|
||||
$instance.sketchable('decorateEvent', evName, callbacks[evName], 'animate');
|
||||
}
|
||||
|
||||
// Expose public API: all jQuery sketchable instances will have these methods.
|
||||
|
|
|
|||
|
|
@ -207,6 +207,33 @@
|
|||
options.events.destroy(elem, data);
|
||||
});
|
||||
},
|
||||
/**
|
||||
* Decorate event. Will execute default event first.
|
||||
* @param {string} evName - Event name.
|
||||
* @param {function} listener - Custom event listener.
|
||||
* @param {string} initiator - Some identifier.
|
||||
*/
|
||||
decorateEvent: function(evName, listener, initiator) {
|
||||
return this.each(function() {
|
||||
var elem = $(this), data = elem.data(namespace), options = data.options;
|
||||
// Flag event override so that it doesn't get fired more than once.
|
||||
var overrideId = '_bound$'+ evName + '.' + initiator;
|
||||
if (data[overrideId]) return;
|
||||
data[overrideId] = true;
|
||||
if (options.events && typeof options.events[evName] === 'function') {
|
||||
// User has defined this event, so wrap it.
|
||||
var fn = options.events[evName];
|
||||
options.events[evName] = function() {
|
||||
// Exec original function first, then exec our listener.
|
||||
fn.apply(this, arguments);
|
||||
listener.apply(this, arguments);
|
||||
};
|
||||
} else {
|
||||
// User has not defined this event, so attach our listener.
|
||||
options.events[evName] = listener;
|
||||
}
|
||||
});
|
||||
},
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -183,31 +183,12 @@
|
|||
},
|
||||
};
|
||||
|
||||
// A helper function to override user-defined event listeners.
|
||||
function override(evName) {
|
||||
// Flag event override so that it doesn't get fired more than once.
|
||||
if (config.options['_bound.memento$' + evName]) return;
|
||||
config.options['_bound.memento$' + evName] = true;
|
||||
|
||||
if (config.options.events && typeof config.options.events[evName] === 'function') {
|
||||
// User has defined this event, so wrap it.
|
||||
var fn = config.options.events[evName];
|
||||
config.options.events[evName] = function() {
|
||||
// Exec original function first, then exec our callback.
|
||||
fn.apply($instance, arguments);
|
||||
callbacks[evName].apply($instance, arguments);
|
||||
};
|
||||
} else {
|
||||
// User has not defined this event, so attach our callback.
|
||||
config.options.events[evName] = callbacks[evName];
|
||||
}
|
||||
}
|
||||
|
||||
// Note: the init event is used to create jQuery sketchable instances,
|
||||
// therefore it should NOT be overriden.
|
||||
var events = 'mouseup clear destroy'.split(' ');
|
||||
for (var i = 0; i < events.length; i++) {
|
||||
override(events[i]);
|
||||
var evName = events[i];
|
||||
$instance.sketchable('decorateEvent', evName, callbacks[evName], 'memento');
|
||||
}
|
||||
|
||||
// Expose public API: all jQuery sketchable instances will have these methods.
|
||||
|
|
|
|||
|
|
@ -134,31 +134,12 @@
|
|||
},
|
||||
};
|
||||
|
||||
// A helper function to override user-defined event listeners.
|
||||
function override(evName) {
|
||||
// Flag event override so that it doesn't get fired more than once.
|
||||
if (config.options['_bound.animate$' + evName]) return;
|
||||
config.options['_bound.animate$' + evName] = true;
|
||||
|
||||
if (config.options.events && typeof config.options.events[evName] === 'function') {
|
||||
// User has defined this event, so wrap it.
|
||||
var fn = config.options.events[evName];
|
||||
config.options.events[evName] = function() {
|
||||
// Exec original function first, then exec our callback.
|
||||
fn.apply(instance, arguments);
|
||||
callbacks[evName].apply(instance, arguments);
|
||||
};
|
||||
} else {
|
||||
// User has not defined this event, so attach our callback.
|
||||
config.options.events[evName] = callbacks[evName];
|
||||
}
|
||||
}
|
||||
|
||||
// Note: the init event is used to create sketchable instances,
|
||||
// therefore it should NOT be overriden.
|
||||
var events = 'clear destroy'.split(' ');
|
||||
for (var i = 0; i < events.length; i++) {
|
||||
override(events[i]);
|
||||
var evName = events[i];
|
||||
instance.decorateEvent(evName, callbacks[evName], 'animate');
|
||||
}
|
||||
|
||||
// Expose public API: all Sketchable instances will have these methods.
|
||||
|
|
|
|||
|
|
@ -236,7 +236,32 @@
|
|||
|
||||
return this;
|
||||
},
|
||||
/**
|
||||
* Decorate event. Will execute default event first.
|
||||
* @param {string} evName - Event name.
|
||||
* @param {function} listener - Custom event listener.
|
||||
* @param {string} initiator - Some identifier.
|
||||
*/
|
||||
decorateEvent: function(evName, listener, initiator) {
|
||||
var elem = this.elem, data = dataBind(elem)[namespace], options = data.options;
|
||||
// Flag event override so that it doesn't get fired more than once.
|
||||
var overrideId = '_bound$'+ evName + '.' + initiator;
|
||||
if (data[overrideId]) return;
|
||||
data[overrideId] = true;
|
||||
|
||||
if (options.events && typeof options.events[evName] === 'function') {
|
||||
// User has defined this event, so wrap it.
|
||||
var fn = options.events[evName];
|
||||
options.events[evName] = function() {
|
||||
// Exec original function first, then exec our listener.
|
||||
fn.apply(this, arguments);
|
||||
listener.apply(this, arguments);
|
||||
};
|
||||
} else {
|
||||
// User has not defined this event, so attach our listener.
|
||||
options.events[evName] = listener;
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -185,31 +185,12 @@
|
|||
},
|
||||
};
|
||||
|
||||
// A helper function to override user-defined event listeners.
|
||||
function override(evName) {
|
||||
// Flag event override so that it doesn't get fired more than once.
|
||||
if (config.options['_bound.memento$' + evName]) return;
|
||||
config.options['_bound.memento$' + evName] = true;
|
||||
|
||||
if (config.options.events && typeof config.options.events[evName] === 'function') {
|
||||
// User has defined this event, so wrap it.
|
||||
var fn = config.options.events[evName];
|
||||
config.options.events[evName] = function() {
|
||||
// Exec original function first, then exec our callback.
|
||||
fn.apply(instance, arguments);
|
||||
callbacks[evName].apply(instance, arguments);
|
||||
};
|
||||
} else {
|
||||
// User has not defined this event, so attach our callback.
|
||||
config.options.events[evName] = callbacks[evName];
|
||||
}
|
||||
}
|
||||
|
||||
// Note: the init event is used to create Sketchable instances,
|
||||
// therefore it should NOT be overriden.
|
||||
var events = 'mouseup clear destroy'.split(' ');
|
||||
for (var i = 0; i < events.length; i++) {
|
||||
override(events[i]);
|
||||
var evName = events[i];
|
||||
instance.decorateEvent(evName, callbacks[evName], 'memento');
|
||||
}
|
||||
|
||||
// Expose public API: all Sketchable instances will have these methods.
|
||||
|
|
|
|||
Loading…
Reference in New Issue