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,
|
// Note: the init event is used to create sketchable instances,
|
||||||
// therefore it should NOT be overriden.
|
// therefore it should NOT be overriden.
|
||||||
var events = 'clear destroy'.split(' ');
|
var events = 'clear destroy'.split(' ');
|
||||||
for (var i = 0; i < events.length; i++) {
|
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.
|
// Expose public API: all jQuery sketchable instances will have these methods.
|
||||||
|
|
|
||||||
|
|
@ -207,6 +207,33 @@
|
||||||
options.events.destroy(elem, data);
|
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,
|
// Note: the init event is used to create jQuery sketchable instances,
|
||||||
// therefore it should NOT be overriden.
|
// therefore it should NOT be overriden.
|
||||||
var events = 'mouseup clear destroy'.split(' ');
|
var events = 'mouseup clear destroy'.split(' ');
|
||||||
for (var i = 0; i < events.length; i++) {
|
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.
|
// 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,
|
// Note: the init event is used to create sketchable instances,
|
||||||
// therefore it should NOT be overriden.
|
// therefore it should NOT be overriden.
|
||||||
var events = 'clear destroy'.split(' ');
|
var events = 'clear destroy'.split(' ');
|
||||||
for (var i = 0; i < events.length; i++) {
|
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.
|
// Expose public API: all Sketchable instances will have these methods.
|
||||||
|
|
|
||||||
|
|
@ -236,7 +236,32 @@
|
||||||
|
|
||||||
return this;
|
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,
|
// Note: the init event is used to create Sketchable instances,
|
||||||
// therefore it should NOT be overriden.
|
// therefore it should NOT be overriden.
|
||||||
var events = 'mouseup clear destroy'.split(' ');
|
var events = 'mouseup clear destroy'.split(' ');
|
||||||
for (var i = 0; i < events.length; i++) {
|
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.
|
// Expose public API: all Sketchable instances will have these methods.
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue