export function sendEvent(obj, eventName, params, actions) { // first give object a chance to handle it if (obj !== Ngular && 'function' === typeof obj.sendEvent) { obj.sendEvent(eventName, params); } if (!actions) { var meta = obj['__ngular_meta__']; actions = meta && meta.listeners && meta.listeners[eventName]; } if (!actions) { return; } for (var i = actions.length - 3; i >= 0; i -= 3) { // looping in reverse for once listeners var target = actions[i]; var method = actions[i+1]; var flags = actions[i+2]; if (!method) { continue; } if (flags & SUSPENDED) { continue; } if (flags & ONCE) { removeListener(obj, eventName, target, method); } if (!target) { target = obj; } if ('string' === typeof method) { if (params) { applyStr(target, method, params); } else { target[method](); } } else { if (params) { apply(target, method, params); } else { method.call(target); } } } return true; }
var Class = function() { if (!wasApplied) { Class.proto(); // prepare prototype... } this.__defineNonEnumerable(GUID_KEY_PROPERTY); this.__defineNonEnumerable(NEXT_SUPER_PROPERTY); var m = meta(this); var proto = m.proto; m.proto = this; if (initMixins) { // capture locally so we can clear the closed over variable var mixins = initMixins; initMixins = null; apply(this, this.reopen, mixins); } if (initProperties) { // capture locally so we can clear the closed over variable var props = initProperties; initProperties = null; var concatenatedProperties = this.concatenatedProperties; var mergedProperties = this.mergedProperties; for (var i = 0, l = props.length; i < l; i++) { var properties = props[i]; Ngular.assert("Ngular.Object.create no longer supports mixing in other definitions, use createWithMixins instead.", !(properties instanceof Mixin)); if (typeof properties !== 'object' && properties !== undefined) { throw new NgularError("Ngular.Object.create only accepts objects."); } if (!properties) { continue; } var keyNames = keys(properties); for (var j = 0, ll = keyNames.length; j < ll; j++) { var keyName = keyNames[j]; var value = properties[keyName]; if (IS_BINDING.test(keyName)) { var bindings = m.bindings; if (!bindings) { bindings = m.bindings = {}; } else if (!m.hasOwnProperty('bindings')) { bindings = m.bindings = o_create(m.bindings); } bindings[keyName] = value; } var possibleDesc = this[keyName]; var desc = (possibleDesc !== null && typeof possibleDesc === 'object' && possibleDesc.isDescriptor) ? possibleDesc : undefined; Ngular.assert("Ngular.Object.create no longer supports defining computed properties. Define computed properties using extend() or reopen() before calling create().", !(value instanceof ComputedProperty)); Ngular.assert("Ngular.Object.create no longer supports defining methods that call _super.", !(typeof value === 'function' && value.toString().indexOf('._super') !== -1)); Ngular.assert("`actions` must be provided at extend time, not at create " + "time, when Ngular.ActionHandler is used (i.e. views, " + "controllers & routes).", !((keyName === 'actions') && ActionHandler.detect(this))); if (concatenatedProperties && concatenatedProperties.length > 0 && indexOf(concatenatedProperties, keyName) >= 0) { var baseValue = this[keyName]; if (baseValue) { if ('function' === typeof baseValue.concat) { value = baseValue.concat(value); } else { value = makeArray(baseValue).concat(value); } } else { value = makeArray(value); } } if (mergedProperties && mergedProperties.length && indexOf(mergedProperties, keyName) >= 0) { var originalValue = this[keyName]; value = merge(originalValue, value); } if (desc) { desc.set(this, keyName, value); } else { if (typeof this.setUnknownProperty === 'function' && !(keyName in this)) { this.setUnknownProperty(keyName, value); } else { if (Ngular.FEATURES.isEnabled('mandatory-setter')) { if (hasPropertyAccessors) { defineProperty(this, keyName, null, value); // setup mandatory setter } else { this[keyName] = value; } } else { this[keyName] = value; } } } } } } finishPartial(this, m); var length = arguments.length; if (length === 0) { this.init(); } else if (length === 1) { this.init(arguments[0]); } else { // v8 bug potentially incorrectly deopts this function: https://code.google.com/p/v8/issues/detail?id=3709 // we may want to keep this around till this ages out on mobile var args = new Array(length); for (var x = 0; x < length; x++) { args[x] = arguments[x]; } this.init.apply(this, args); } m.proto = proto; finishChains(this); sendEvent(this, 'init'); };