event-custom.js revision 80d2034f65b9348e5fd36291f03b0819181efb89
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * Custom event engine, DOM event listener abstraction layer, synthetic DOM
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * @module event
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * Return value from all subscribe operations
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp * @class EventHandle
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp * @constructor
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp * @param evt {Event.Custom} the custom event
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp * @param sub {Subscriber} the subscriber
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp 'broadcast',
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp 'configured',
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp 'currentTarget',
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp 'defaultFn',
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp 'emitFacade',
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp 'fireOnce',
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp 'preventable',
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp 'preventedFn',
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp 'queuable',
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp 'stoppedFn',
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp * The custom event
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp * @type Event.Custom
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * The subscriber object
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp * @type Subscriber
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * Detaches this subscriber
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp * @method detach
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp detach: function() {
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp if (this.evt) {
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp // Y.log('EventHandle.detach: ' + this.sub, 'info', 'Event');
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * The Event.Custom class lets you define events for your application
8648721e29bb657dd5c5ff20f03e86fe50628ce6Tripp * that can be subscribed to by one or more independent component.
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp * @param {String} type The type of event, which is passed to the callback
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp * when the event fires
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp * @param o configuration object
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp * @class Event.Custom
e393eced613f9b4a5fb6bdd461d0e0bf5064d5ecTripp * @constructor
this.context = Y;
this.queuable = false;
this.subscribers = {};
// this.configured = true;
this.afters = {};
this.fired = false;
this.fireOnce = false;
this.host = null;
this.defaultFn = null;
this.stoppedFn = null;
this.preventedFn = null;
this.preventable = true;
this.bubbles = true;
this.emitFacade = false;
this.applyConfig(o, true);
context: this,
silent: true
_YUI_EVENT: true,
if (!fn) {
if (se) {
return new Y.EventHandle(this, s);
if (!fn) {
return this.unsubscribeAll();
for (i in subs) {
s = subs[i];
this._delete(s);
found = true;
return found;
unsubscribe: function() {
if (!ef) {
return this._facade;
if (this.emitFacade) {
if (!ef) {
if (!this.silent) {
fire: function() {
ret = true;
if (es) {
next: this,
queue: []
this.fired = true;
hasSub = false;
ef = null;
if (this.emitFacade) {
this._facade = null;
for (i in subs) {
if (!hasSub) {
hasSub = true;
s = subs[i];
if (s && s.fn) {
if (false === ret) {
for (i in subs) {
if (!hasSub) {
hasSub = true;
s = subs[i];
if (s && s.fn) {
if (false === ret) {
return (ret !== false);
unsubscribeAll: function() {
for (i in subs) {
this.subscribers={};
_delete: function(s) {
delete s.fn;
delete s.context;
toString: function() {
return this.type;
stopPropagation: function() {
if (this.stoppedFn) {
stopImmediatePropagation: function() {
if (this.stoppedFn) {
preventDefault: function() {
if (this.preventable) {
if (this.preventedFn) {
if (context) {
f.call(this);
f.call(this);
return ret;
if (context) {
toString: function() {