View.prototype.removeEventListener = function (arg, callback, thisArg) { if (types.isString(arg)) { var gesture = gestures.fromString(arg); if (gesture && !this._isEvent(arg)) { this._disconnectGestureObservers(gesture); } else { var events = arg.split(","); if (events.length > 0) { for (var i = 0; i < events.length; i++) { var evt = events[i].trim(); var gst = gestures.fromString(evt); if (gst && !this._isEvent(arg)) { this._disconnectGestureObservers(gst); } else { _super.prototype.removeEventListener.call(this, evt, callback, thisArg); } } } else { _super.prototype.removeEventListener.call(this, arg, callback, thisArg); } } } else if (types.isNumber(arg)) { this._disconnectGestureObservers(arg); } };
View.prototype.addEventListener = function (arg, callback, thisArg) { if (types.isString(arg)) { arg = getEventOrGestureName(arg); var gesture = gestures.fromString(arg); if (gesture && !this._isEvent(arg)) { this.observe(gesture, callback, thisArg); } else { var events = arg.split(","); if (events.length > 0) { for (var i = 0; i < events.length; i++) { var evt = events[i].trim(); var gst = gestures.fromString(evt); if (gst && !this._isEvent(arg)) { this.observe(gst, callback, thisArg); } else { _super.prototype.addEventListener.call(this, evt, callback, thisArg); } } } else { _super.prototype.addEventListener.call(this, arg, callback, thisArg); } } } else if (types.isNumber(arg)) { this.observe(arg, callback, thisArg); } };
function isEventOrGesture(name, view) { if (types.isString(name)) { var eventOrGestureName = getEventOrGestureName(name); var evt = eventOrGestureName + "Event"; return view.constructor && evt in view.constructor || gestures.fromString(eventOrGestureName.toLowerCase()) !== undefined; } return false; }
function getComponentModule(elementName, namespace, attributes, exports) { var instance; var instanceModule; var componentModule; var moduleId = MODULES[elementName] || UI_PATH + elementName.toLowerCase(); try { instanceModule = require(types.isString(namespace) && fs.path.join(fs.knownFolders.currentApp().path, namespace) || moduleId); var instanceType = instanceModule[elementName] || Object; instance = new instanceType(); } catch (ex) { throw new Error("Cannot create module " + moduleId + ". " + ex + ". StackTrace: " + ex.stack); } if (instance && instanceModule) { var bindings = new Array(); for (var attr in attributes) { var attrValue = attributes[attr]; if (isBinding(attrValue) && instance.bind) { if (isKnownEvent(attr, instanceModule)) { attachEventBinding(instance, attr, attrValue); } else { var bindOptions = bindingBuilder.getBindingOptions(attr, getBindingExpressionFromAttribute(attrValue)); instance.bind({ sourceProperty: bindOptions[bindingBuilder.bindingConstants.sourceProperty], targetProperty: bindOptions[bindingBuilder.bindingConstants.targetProperty], expression: bindOptions[bindingBuilder.bindingConstants.expression], twoWay: bindOptions[bindingBuilder.bindingConstants.twoWay] }, bindOptions[bindingBuilder.bindingConstants.source]); } } else if (isKnownEvent(attr, instanceModule)) { var handler = exports && exports[attrValue]; if (types.isFunction(handler)) { instance.on(attr, handler); } } else if (isGesture(attr, instance)) { var gestureHandler = exports && exports[attrValue]; if (types.isFunction(gestureHandler)) { instance.observe(gestures.fromString(attr.toLowerCase()), gestureHandler); } } else if (attr === ROW) { gridLayoutModule.GridLayout.setRow(instance, !isNaN(+attrValue) && +attrValue); } else if (attr === COL) { gridLayoutModule.GridLayout.setColumn(instance, !isNaN(+attrValue) && +attrValue); } else if (attr === COL_SPAN) { gridLayoutModule.GridLayout.setColumnSpan(instance, !isNaN(+attrValue) && +attrValue); } else if (attr === ROW_SPAN) { gridLayoutModule.GridLayout.setRowSpan(instance, !isNaN(+attrValue) && +attrValue); } else if (attr === LEFT) { absoluteLayoutDef.AbsoluteLayout.setLeft(instance, !isNaN(+attrValue) && +attrValue); } else if (attr === TOP) { absoluteLayoutDef.AbsoluteLayout.setTop(instance, !isNaN(+attrValue) && +attrValue); } else if (attr === DOCK) { dockLayoutDef.DockLayout.setDock(instance, attrValue); } else { var attrHandled = false; if (instance.applyXmlAttribute) { attrHandled = instance.applyXmlAttribute(attr, attrValue); } if (!attrHandled) { var valueAsNumber = +attrValue; if (!isNaN(valueAsNumber)) { instance[attr] = valueAsNumber; } else if (attrValue && (attrValue.toLowerCase() === "true" || attrValue.toLowerCase() === "false")) { instance[attr] = attrValue.toLowerCase() === "true" ? true : false; } else { instance[attr] = attrValue; } } } } componentModule = { component: instance, exports: instanceModule, bindings: bindings }; } return componentModule; }
function isGesture(name, instance) { return gestures.fromString(name.toLowerCase()) !== undefined; }