UNPKG

tns-core-modules

Version:

Telerik NativeScript Core Modules

1,070 lines (1,069 loc) • 40.2 kB
var types = require("utils/types"); var style = require("../styling/style"); var styling = require("ui/styling"); var trace = require("trace"); var gestures = require("ui/gestures"); var styleScope = require("../styling/style-scope"); var enums = require("ui/enums"); var utils = require("utils/utils"); var proxy_1 = require("ui/core/proxy"); var dependency_observable_1 = require("ui/core/dependency-observable"); var special_properties_1 = require("ui/builder/special-properties"); var style_1 = require("ui/styling/style"); var visualStateConstants = require("ui/styling/visual-state-constants"); var bindable; function ensureBindable() { if (!bindable) { bindable = require("ui/core/bindable"); } } var visualState; function ensureVisualState() { if (!visualState) { visualState = require("../styling/visual-state"); } } special_properties_1.registerSpecialProperty("class", function (instance, propertyValue) { instance.className = propertyValue; }); function getEventOrGestureName(name) { return name.indexOf("on") === 0 ? name.substr(2, name.length - 2) : name; } 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; } exports.isEventOrGesture = isEventOrGesture; function getViewById(view, id) { if (!view) { return undefined; } if (view.id === id) { return view; } var retVal; var descendantsCallback = function (child) { if (child.id === id) { retVal = child; return false; } return true; }; eachDescendant(view, descendantsCallback); return retVal; } exports.getViewById = getViewById; function eachDescendant(view, callback) { if (!callback || !view) { return; } var continueIteration; var localCallback = function (child) { continueIteration = callback(child); if (continueIteration) { child._eachChildView(localCallback); } return continueIteration; }; view._eachChildView(localCallback); } exports.eachDescendant = eachDescendant; function getAncestor(view, criterion) { var matcher = null; if (typeof criterion === "string") { matcher = function (view) { return view.typeName === criterion; }; } else { matcher = function (view) { return view instanceof criterion; }; } for (var parent_1 = view.parent; parent_1 != null; parent_1 = parent_1.parent) { if (matcher(parent_1)) { return parent_1; } } return null; } exports.getAncestor = getAncestor; var viewIdCounter = 0; function onCssClassPropertyChanged(data) { var view = data.object; if (types.isString(data.newValue)) { view._cssClasses = data.newValue.split(" "); } else { view._cssClasses.length = 0; } } var cssClassProperty = new dependency_observable_1.Property("cssClass", "View", new proxy_1.PropertyMetadata(undefined, dependency_observable_1.PropertyMetadataSettings.AffectsStyle, onCssClassPropertyChanged)); var classNameProperty = new dependency_observable_1.Property("className", "View", new proxy_1.PropertyMetadata(undefined, dependency_observable_1.PropertyMetadataSettings.AffectsStyle, onCssClassPropertyChanged)); var idProperty = new dependency_observable_1.Property("id", "View", new proxy_1.PropertyMetadata(undefined, dependency_observable_1.PropertyMetadataSettings.AffectsStyle)); var automationTextProperty = new dependency_observable_1.Property("automationText", "View", new proxy_1.PropertyMetadata(undefined)); var translateXProperty = new dependency_observable_1.Property("translateX", "View", new proxy_1.PropertyMetadata(0)); var translateYProperty = new dependency_observable_1.Property("translateY", "View", new proxy_1.PropertyMetadata(0)); var scaleXProperty = new dependency_observable_1.Property("scaleX", "View", new proxy_1.PropertyMetadata(1)); var scaleYProperty = new dependency_observable_1.Property("scaleY", "View", new proxy_1.PropertyMetadata(1)); var originXProperty = new dependency_observable_1.Property("originX", "View", new proxy_1.PropertyMetadata(0.5)); var originYProperty = new dependency_observable_1.Property("originY", "View", new proxy_1.PropertyMetadata(0.5)); var rotateProperty = new dependency_observable_1.Property("rotate", "View", new proxy_1.PropertyMetadata(0)); var isEnabledProperty = new dependency_observable_1.Property("isEnabled", "View", new proxy_1.PropertyMetadata(true)); var isUserInteractionEnabledProperty = new dependency_observable_1.Property("isUserInteractionEnabled", "View", new proxy_1.PropertyMetadata(true)); var View = (function (_super) { __extends(View, _super); function View(options) { _super.call(this); this._isVisibleCache = true; this._measuredWidth = Number.NaN; this._measuredHeight = Number.NaN; this._oldWidthMeasureSpec = Number.NaN; this._oldHeightMeasureSpec = Number.NaN; this._oldLeft = 0; this._oldTop = 0; this._oldRight = 0; this._oldBottom = 0; this._isLayoutValid = false; this._isAddedToNativeVisualTree = false; this._cssClasses = []; this._gestureObservers = {}; this._options = options; this._style = new style.Style(this); this._domId = viewIdCounter++; this._visualState = visualStateConstants.Normal; } View.prototype.getGestureObservers = function (type) { return this._gestureObservers[type]; }; View.prototype.observe = function (type, callback, thisArg) { if (!this._gestureObservers[type]) { this._gestureObservers[type] = []; } this._gestureObservers[type].push(gestures.observe(this, type, callback, thisArg)); }; 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); } }; 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._isEvent = function (name) { return this.constructor && name + "Event" in this.constructor; }; View.prototype._disconnectGestureObservers = function (type) { var observers = this.getGestureObservers(type); if (observers) { for (var i = 0; i < observers.length; i++) { observers[i].disconnect(); } } }; View.prototype.getViewById = function (id) { return getViewById(this, id); }; Object.defineProperty(View.prototype, "automationText", { get: function () { return this._getValue(View.automationTextProperty); }, set: function (value) { this._setValue(View.automationTextProperty, value); }, enumerable: true, configurable: true }); Object.defineProperty(View.prototype, "borderRadius", { get: function () { return this.style.borderRadius; }, set: function (value) { this.style.borderRadius = value; }, enumerable: true, configurable: true }); Object.defineProperty(View.prototype, "borderWidth", { get: function () { return this.style.borderWidth; }, set: function (value) { this.style.borderWidth = value; }, enumerable: true, configurable: true }); Object.defineProperty(View.prototype, "borderColor", { get: function () { return this.style.borderColor; }, set: function (value) { this.style.borderColor = value; }, enumerable: true, configurable: true }); Object.defineProperty(View.prototype, "color", { get: function () { return this.style.color; }, set: function (value) { this.style.color = value; }, enumerable: true, configurable: true }); Object.defineProperty(View.prototype, "backgroundColor", { get: function () { return this.style.backgroundColor; }, set: function (value) { this.style.backgroundColor = value; }, enumerable: true, configurable: true }); Object.defineProperty(View.prototype, "backgroundImage", { get: function () { return this.style.backgroundImage; }, set: function (value) { this.style.backgroundImage = value; }, enumerable: true, configurable: true }); Object.defineProperty(View.prototype, "minWidth", { get: function () { return this.style.minWidth; }, set: function (value) { this.style.minWidth = value; }, enumerable: true, configurable: true }); Object.defineProperty(View.prototype, "minHeight", { get: function () { return this.style.minHeight; }, set: function (value) { this.style.minHeight = value; }, enumerable: true, configurable: true }); Object.defineProperty(View.prototype, "width", { get: function () { return this.style.width; }, set: function (value) { this.style.width = value; }, enumerable: true, configurable: true }); Object.defineProperty(View.prototype, "height", { get: function () { return this.style.height; }, set: function (value) { this.style.height = value; }, enumerable: true, configurable: true }); Object.defineProperty(View.prototype, "margin", { get: function () { return this.style.margin; }, set: function (value) { this.style.margin = value; }, enumerable: true, configurable: true }); Object.defineProperty(View.prototype, "marginLeft", { get: function () { return this.style.marginLeft; }, set: function (value) { this.style.marginLeft = value; }, enumerable: true, configurable: true }); Object.defineProperty(View.prototype, "marginTop", { get: function () { return this.style.marginTop; }, set: function (value) { this.style.marginTop = value; }, enumerable: true, configurable: true }); Object.defineProperty(View.prototype, "marginRight", { get: function () { return this.style.marginRight; }, set: function (value) { this.style.marginRight = value; }, enumerable: true, configurable: true }); Object.defineProperty(View.prototype, "marginBottom", { get: function () { return this.style.marginBottom; }, set: function (value) { this.style.marginBottom = value; }, enumerable: true, configurable: true }); Object.defineProperty(View.prototype, "horizontalAlignment", { get: function () { return this.style.horizontalAlignment; }, set: function (value) { this.style.horizontalAlignment = value; }, enumerable: true, configurable: true }); Object.defineProperty(View.prototype, "verticalAlignment", { get: function () { return this.style.verticalAlignment; }, set: function (value) { this.style.verticalAlignment = value; }, enumerable: true, configurable: true }); Object.defineProperty(View.prototype, "visibility", { get: function () { return this.style.visibility; }, set: function (value) { this.style.visibility = value; }, enumerable: true, configurable: true }); Object.defineProperty(View.prototype, "opacity", { get: function () { return this.style.opacity; }, set: function (value) { this.style.opacity = value; }, enumerable: true, configurable: true }); Object.defineProperty(View.prototype, "translateX", { get: function () { return this._getValue(View.translateXProperty); }, set: function (value) { this._setValue(View.translateXProperty, value); }, enumerable: true, configurable: true }); Object.defineProperty(View.prototype, "translateY", { get: function () { return this._getValue(View.translateYProperty); }, set: function (value) { this._setValue(View.translateYProperty, value); }, enumerable: true, configurable: true }); Object.defineProperty(View.prototype, "scaleX", { get: function () { return this._getValue(View.scaleXProperty); }, set: function (value) { this._setValue(View.scaleXProperty, value); }, enumerable: true, configurable: true }); Object.defineProperty(View.prototype, "scaleY", { get: function () { return this._getValue(View.scaleYProperty); }, set: function (value) { this._setValue(View.scaleYProperty, value); }, enumerable: true, configurable: true }); Object.defineProperty(View.prototype, "originX", { get: function () { return this._getValue(View.originXProperty); }, set: function (value) { this._setValue(View.originXProperty, value); }, enumerable: true, configurable: true }); Object.defineProperty(View.prototype, "originY", { get: function () { return this._getValue(View.originYProperty); }, set: function (value) { this._setValue(View.originYProperty, value); }, enumerable: true, configurable: true }); Object.defineProperty(View.prototype, "rotate", { get: function () { return this._getValue(View.rotateProperty); }, set: function (value) { this._setValue(View.rotateProperty, value); }, enumerable: true, configurable: true }); Object.defineProperty(View.prototype, "isEnabled", { get: function () { return this._getValue(View.isEnabledProperty); }, set: function (value) { this._setValue(View.isEnabledProperty, value); }, enumerable: true, configurable: true }); Object.defineProperty(View.prototype, "page", { get: function () { if (this.parent) { return this.parent.page; } return null; }, enumerable: true, configurable: true }); Object.defineProperty(View.prototype, "isUserInteractionEnabled", { get: function () { return this._getValue(View.isUserInteractionEnabledProperty); }, set: function (value) { this._setValue(View.isUserInteractionEnabledProperty, value); }, enumerable: true, configurable: true }); Object.defineProperty(View.prototype, "id", { get: function () { return this._getValue(View.idProperty); }, set: function (value) { this._setValue(View.idProperty, value); }, enumerable: true, configurable: true }); Object.defineProperty(View.prototype, "cssClass", { get: function () { return this._getValue(View.cssClassProperty); }, set: function (value) { this._setValue(View.cssClassProperty, value); }, enumerable: true, configurable: true }); Object.defineProperty(View.prototype, "className", { get: function () { return this._getValue(View.cssClassProperty); }, set: function (value) { this._setValue(View.cssClassProperty, value); }, enumerable: true, configurable: true }); Object.defineProperty(View.prototype, "style", { get: function () { return this._style; }, set: function (value) { throw new Error("View.style property is read-only."); }, enumerable: true, configurable: true }); Object.defineProperty(View.prototype, "isLayoutValid", { get: function () { return this._isLayoutValid; }, set: function (value) { throw new Error("isLayoutValid is read-only property."); }, enumerable: true, configurable: true }); Object.defineProperty(View.prototype, "visualState", { get: function () { return this._visualState; }, enumerable: true, configurable: true }); Object.defineProperty(View.prototype, "cssType", { get: function () { return this.typeName.toLowerCase(); }, enumerable: true, configurable: true }); Object.defineProperty(View.prototype, "parent", { get: function () { return this._parent; }, enumerable: true, configurable: true }); Object.defineProperty(View.prototype, "isLoaded", { get: function () { return this._isLoaded; }, enumerable: true, configurable: true }); View.prototype.onLoaded = function () { this._isLoaded = true; this._loadEachChildView(); this._applyStyleFromScope(); this._emit("loaded"); }; View.prototype._loadEachChildView = function () { if (this._childrenCount > 0) { var eachChild = function (child) { child.onLoaded(); return true; }; this._eachChildView(eachChild); } }; View.prototype.onUnloaded = function () { this._unloadEachChildView(); this._isLoaded = false; this._emit("unloaded"); }; View.prototype._unloadEachChildView = function () { if (this._childrenCount > 0) { var eachChild = function (child) { child.onUnloaded(); return true; }; this._eachChildView(eachChild); } }; View.prototype._onPropertyChanged = function (property, oldValue, newValue) { _super.prototype._onPropertyChanged.call(this, property, oldValue, newValue); if (this._childrenCount > 0) { var shouldUpdateInheritableProps = ((property.metadata && property.metadata.inheritable) && !(property instanceof styling.Property)); var that = this; if (shouldUpdateInheritableProps) { var notifyEachChild = function (child) { child._setValue(property, that._getValue(property), dependency_observable_1.ValueSource.Inherited); return true; }; this._updatingInheritedProperties = true; this._eachChildView(notifyEachChild); this._updatingInheritedProperties = false; } } this._checkMetadataOnPropertyChanged(property.metadata); }; View.prototype._isInheritedChange = function () { if (this._updatingInheritedProperties) { return true; } var parentView; parentView = (this.parent); while (parentView) { if (parentView._updatingInheritedProperties) { return true; } parentView = (parentView.parent); } return false; }; View.prototype._checkMetadataOnPropertyChanged = function (metadata) { if (metadata.affectsLayout) { this.requestLayout(); } if (metadata.affectsStyle) { this.style._resetCssValues(); this._applyStyleFromScope(); } }; View.prototype.measure = function (widthMeasureSpec, heightMeasureSpec) { this._setCurrentMeasureSpecs(widthMeasureSpec, heightMeasureSpec); }; View.prototype.layout = function (left, top, right, bottom) { this._setCurrentLayoutBounds(left, top, right, bottom); }; View.prototype.getMeasuredWidth = function () { return this._measuredWidth & utils.layout.MEASURED_SIZE_MASK; }; View.prototype.getMeasuredHeight = function () { return this._measuredHeight & utils.layout.MEASURED_SIZE_MASK; }; View.prototype.setMeasuredDimension = function (measuredWidth, measuredHeight) { this._measuredWidth = measuredWidth; this._measuredHeight = measuredHeight; trace.write(this + " :setMeasuredDimension: " + measuredWidth + ", " + measuredHeight, trace.categories.Layout); }; View.prototype.requestLayout = function () { this._isLayoutValid = false; }; View.prototype.onMeasure = function (widthMeasureSpec, heightMeasureSpec) { }; View.prototype.onLayout = function (left, top, right, bottom) { }; View.prototype.layoutNativeView = function (left, top, right, bottom) { }; View.resolveSizeAndState = function (size, specSize, specMode, childMeasuredState) { var result = size; switch (specMode) { case utils.layout.UNSPECIFIED: result = size; break; case utils.layout.AT_MOST: if (specSize < size) { result = Math.round(specSize + 0.499) | utils.layout.MEASURED_STATE_TOO_SMALL; } break; case utils.layout.EXACTLY: result = specSize; break; } return Math.round(result + 0.499) | (childMeasuredState & utils.layout.MEASURED_STATE_MASK); }; View.layoutChild = function (parent, child, left, top, right, bottom) { if (!child || !child._isVisible) { return; } var density = utils.layout.getDisplayDensity(); var lp = child.style._getValue(style_1.nativeLayoutParamsProperty); var childTop; var childLeft; var childWidth = child.getMeasuredWidth(); var childHeight = child.getMeasuredHeight(); var vAlignment; if (lp.height >= 0 && child.verticalAlignment === enums.VerticalAlignment.stretch) { vAlignment = enums.VerticalAlignment.center; } else { vAlignment = child.verticalAlignment; } var marginTop = lp.topMargin; var marginBottom = lp.bottomMargin; var marginLeft = lp.leftMargin; var marginRight = lp.rightMargin; switch (vAlignment) { case enums.VerticalAlignment.top: childTop = top + marginTop * density; break; case enums.VerticalAlignment.center || enums.VerticalAlignment.middle: childTop = top + (bottom - top - childHeight + (marginTop - marginBottom) * density) / 2; break; case enums.VerticalAlignment.bottom: childTop = bottom - childHeight - (marginBottom * density); break; case enums.VerticalAlignment.stretch: default: childTop = top + marginTop * density; childHeight = bottom - top - (marginTop + marginBottom) * density; break; } var hAlignment; if (lp.width >= 0 && child.horizontalAlignment === enums.HorizontalAlignment.stretch) { hAlignment = enums.HorizontalAlignment.center; } else { hAlignment = child.horizontalAlignment; } switch (hAlignment) { case enums.HorizontalAlignment.left: childLeft = left + marginLeft * density; break; case enums.HorizontalAlignment.center: childLeft = left + (right - left - childWidth + (marginLeft - marginRight) * density) / 2; break; case enums.HorizontalAlignment.right: childLeft = right - childWidth - (marginRight * density); break; case enums.HorizontalAlignment.stretch: default: childLeft = left + marginLeft * density; childWidth = right - left - (marginLeft + marginRight) * density; break; } var childRight = Math.round(childLeft + childWidth); var childBottom = Math.round(childTop + childHeight); childLeft = Math.round(childLeft); childTop = Math.round(childTop); trace.write(child.parent + " :layoutChild: " + child + " " + childLeft + ", " + childTop + ", " + childRight + ", " + childBottom, trace.categories.Layout); child.layout(childLeft, childTop, childRight, childBottom); }; View.measureChild = function (parent, child, widthMeasureSpec, heightMeasureSpec) { var measureWidth = 0; var measureHeight = 0; if (child && child._isVisible) { var width = utils.layout.getMeasureSpecSize(widthMeasureSpec); var widthMode = utils.layout.getMeasureSpecMode(widthMeasureSpec); var height = utils.layout.getMeasureSpecSize(heightMeasureSpec); var heightMode = utils.layout.getMeasureSpecMode(heightMeasureSpec); var childWidthMeasureSpec = View.getMeasureSpec(child, width, widthMode, true); var childHeightMeasureSpec = View.getMeasureSpec(child, height, heightMode, false); trace.write(child.parent + " :measureChild: " + child + " " + utils.layout.measureSpecToString(childWidthMeasureSpec) + ", " + utils.layout.measureSpecToString(childHeightMeasureSpec), trace.categories.Layout); child.measure(childWidthMeasureSpec, childHeightMeasureSpec); measureWidth = child.getMeasuredWidth(); measureHeight = child.getMeasuredHeight(); var density = utils.layout.getDisplayDensity(); var lp = child.style._getValue(style.nativeLayoutParamsProperty); measureWidth = Math.round(measureWidth + (lp.leftMargin + lp.rightMargin) * density); measureHeight = Math.round(measureHeight + (lp.topMargin + lp.bottomMargin) * density); } return { measuredWidth: measureWidth, measuredHeight: measureHeight }; }; View.getMeasureSpec = function (view, parentLength, parentSpecMode, horizontal) { var lp = view.style._getValue(style.nativeLayoutParamsProperty); var density = utils.layout.getDisplayDensity(); var margins = horizontal ? lp.leftMargin + lp.rightMargin : lp.topMargin + lp.bottomMargin; margins = Math.round(margins * density); var resultSize = 0; var resultMode = 0; var measureLength = Math.max(0, parentLength - margins); var childLength = Math.round((horizontal ? lp.width : lp.height) * density); if (childLength >= 0) { if (parentSpecMode !== utils.layout.UNSPECIFIED) { resultSize = Math.min(parentLength, childLength); } else { resultSize = childLength; } resultMode = utils.layout.EXACTLY; } else { switch (parentSpecMode) { case utils.layout.EXACTLY: resultSize = measureLength; var stretched = horizontal ? view.horizontalAlignment === enums.HorizontalAlignment.stretch : view.verticalAlignment === enums.VerticalAlignment.stretch; resultMode = stretched ? utils.layout.EXACTLY : utils.layout.AT_MOST; break; case utils.layout.AT_MOST: resultSize = measureLength; resultMode = utils.layout.AT_MOST; break; case utils.layout.UNSPECIFIED: resultSize = 0; resultMode = utils.layout.UNSPECIFIED; break; } } return utils.layout.makeMeasureSpec(resultSize, resultMode); }; View.prototype._setCurrentMeasureSpecs = function (widthMeasureSpec, heightMeasureSpec) { var changed = this._oldWidthMeasureSpec !== widthMeasureSpec || this._oldHeightMeasureSpec !== heightMeasureSpec; this._oldWidthMeasureSpec = widthMeasureSpec; this._oldHeightMeasureSpec = heightMeasureSpec; return changed; }; View.prototype._getCurrentLayoutBounds = function () { return { left: this._oldLeft, top: this._oldTop, right: this._oldRight, bottom: this._oldBottom }; }; View.prototype._setCurrentLayoutBounds = function (left, top, right, bottom) { this._isLayoutValid = true; var boundsChanged = this._oldLeft !== left || this._oldTop !== top || this._oldRight !== right || this._oldBottom !== bottom; var sizeChanged = (this._oldRight - this._oldLeft !== right - left) || (this._oldBottom - this._oldTop !== bottom - top); this._oldLeft = left; this._oldTop = top; this._oldRight = right; this._oldBottom = bottom; return { boundsChanged: boundsChanged, sizeChanged: sizeChanged }; }; View.prototype._applyStyleFromScope = function () { var rootPage = this.page; if (!rootPage || !rootPage.isLoaded) { return; } var scope = rootPage._getStyleScope(); scope.applySelectors(this); }; View.prototype._applyInlineStyle = function (inlineStyle) { if (types.isString(inlineStyle)) { try { this.style._beginUpdate(); styleScope.applyInlineSyle(this, inlineStyle); } finally { this.style._endUpdate(); } } }; View.prototype._onAttached = function (context) { }; View.prototype._onDetached = function (force) { }; View.prototype._createUI = function () { }; View.prototype._onContextChanged = function () { }; Object.defineProperty(View.prototype, "_childrenCount", { get: function () { return 0; }, enumerable: true, configurable: true }); View.prototype._eachChildView = function (callback) { }; View.prototype._childIndexToNativeChildIndex = function (index) { return index; }; View.prototype._getNativeViewsCount = function () { return this._isAddedToNativeVisualTree ? 1 : 0; }; View.prototype._eachLayoutView = function (callback) { return callback(this); }; View.prototype._addToSuperview = function (superview, index) { return false; }; View.prototype._removeFromSuperview = function () { }; View.prototype._addView = function (view, atIndex) { if (!view) { throw new Error("Expecting a valid View instance."); } if (view._parent) { throw new Error("View already has a parent. View: " + view + " Parent: " + view._parent); } view._parent = this; this._addViewCore(view, atIndex); view._parentChanged(null); trace.write("called _addView on view " + this._domId + " for a child " + view._domId, trace.categories.ViewHierarchy); }; View.prototype._addViewCore = function (view, atIndex) { this._propagateInheritableProperties(view); view.style._inheritStyleProperties(); if (!view._isAddedToNativeVisualTree) { var nativeIndex = this._childIndexToNativeChildIndex(atIndex); view._isAddedToNativeVisualTree = this._addViewToNativeVisualTree(view, nativeIndex); } if (this._isLoaded) { view.onLoaded(); } }; View.prototype._propagateInheritableProperties = function (view) { view._inheritProperties(this); }; View.prototype._inheritProperties = function (parentView) { var that = this; var inheritablePropertySetCallback = function (property) { if (property instanceof styling.Property) { return true; } if (property.metadata && property.metadata.inheritable) { var baseValue = parentView._getValue(property); that._setValue(property, baseValue, dependency_observable_1.ValueSource.Inherited); } return true; }; parentView._eachSetProperty(inheritablePropertySetCallback); }; View.prototype._removeView = function (view) { if (view._parent !== this) { throw new Error("View not added to this instance. View: " + view + " CurrentParent: " + view._parent + " ExpectedParent: " + this); } this._removeViewCore(view); view._parent = undefined; view._parentChanged(this); trace.write("called _removeView on view " + this._domId + " for a child " + view._domId, trace.categories.ViewHierarchy); }; View.prototype._removeViewCore = function (view) { this._removeViewFromNativeVisualTree(view); if (view.isLoaded) { view.onUnloaded(); } ensureBindable(); view._setValue(bindable.Bindable.bindingContextProperty, undefined, dependency_observable_1.ValueSource.Inherited); var inheritablePropertiesSetCallback = function (property) { if (property instanceof styling.Property) { return true; } if (property.metadata && property.metadata.inheritable) { view._resetValue(property, dependency_observable_1.ValueSource.Inherited); } return true; }; view._eachSetProperty(inheritablePropertiesSetCallback); }; View.prototype._parentChanged = function (oldParent) { }; View.prototype._addViewToNativeVisualTree = function (view, atIndex) { if (view._isAddedToNativeVisualTree) { throw new Error("Child already added to the native visual tree."); } return true; }; View.prototype._removeViewFromNativeVisualTree = function (view) { view._isAddedToNativeVisualTree = false; }; View.prototype._syncNativeProperties = function () { _super.prototype._syncNativeProperties.call(this); this.style._syncNativeProperties(); }; View.prototype._goToVisualState = function (state) { trace.write(this + " going to state: " + state, trace.categories.Style); if (state === this._visualState || this._requestedVisualState === state) { return; } ensureVisualState(); this._visualState = visualState.goToState(this, state); this._requestedVisualState = state; }; View.prototype._applyXmlAttribute = function (attribute, value) { if (attribute === "style") { this._applyInlineStyle(value); return true; } return false; }; View.prototype.setInlineStyle = function (style) { if (!types.isString(style)) { throw new Error("Parameter should be valid CSS string!"); } this._applyInlineStyle(style); }; View.prototype._updateLayout = function () { }; Object.defineProperty(View.prototype, "_nativeView", { get: function () { return undefined; }, enumerable: true, configurable: true }); Object.defineProperty(View.prototype, "_isVisible", { get: function () { return this._isVisibleCache; }, enumerable: true, configurable: true }); View.prototype._shouldApplyStyleHandlers = function () { return !!this._nativeView; }; View.prototype.focus = function () { return undefined; }; View.prototype.animate = function (animation) { return this.createAnimation(animation).play(); }; View.prototype.createAnimation = function (animation) { var animationModule = require("ui/animation"); var that = this; animation.target = that; return new animationModule.Animation([animation]); }; View.prototype.toString = function () { if (this.id) { return this.typeName + ("<" + this.id + ">"); } return this.typeName + ("(" + this._domId + ")"); }; View.prototype._setNativeViewFrame = function (nativeView, frame) { }; View.prototype._onStylePropertyChanged = function (property) { }; View.prototype._canApplyNativeProperty = function () { return !!this._nativeView; }; View.loadedEvent = "loaded"; View.unloadedEvent = "unloaded"; View.automationTextProperty = automationTextProperty; View.idProperty = idProperty; View.cssClassProperty = cssClassProperty; View.classNameProperty = classNameProperty; View.translateXProperty = translateXProperty; View.translateYProperty = translateYProperty; View.scaleXProperty = scaleXProperty; View.scaleYProperty = scaleYProperty; View.originXProperty = originXProperty; View.originYProperty = originYProperty; View.rotateProperty = rotateProperty; View.isEnabledProperty = isEnabledProperty; View.isUserInteractionEnabledProperty = isUserInteractionEnabledProperty; return View; }(proxy_1.ProxyObject)); exports.View = View;