diff --git a/application/application.ios.ts b/application/application.ios.ts index 0363486016..ed0674491a 100644 --- a/application/application.ios.ts +++ b/application/application.ios.ts @@ -1,7 +1,7 @@ import common = require("./application-common"); import frame = require("ui/frame"); import definition = require("application"); -import * as uiUtilsModule from "ui/utils"; +import * as uiUtils from "ui/utils"; import * as typesModule from "utils/types"; import * as fileResolverModule from "file-system/file-name-resolver"; import * as enumsModule from "ui/enums"; @@ -9,6 +9,8 @@ import * as enumsModule from "ui/enums"; global.moduleMerge(common, exports); var typedExports: typeof definition = exports; +var enums: typeof enumsModule + class Responder extends UIResponder { // } @@ -33,8 +35,6 @@ class Window extends UIWindow { } public layoutSubviews(): void { - var uiUtils: typeof uiUtilsModule = require("ui/utils"); - uiUtils.ios._layoutRootView(this._content, UIScreen.mainScreen().bounds); } } diff --git a/camera/camera.ios.ts b/camera/camera.ios.ts index 0b1b11ac38..26e4208786 100644 --- a/camera/camera.ios.ts +++ b/camera/camera.ios.ts @@ -1,4 +1,4 @@ -var types = require("utils/types"); +import types = require("utils/types"); import * as cameraCommonModule from "./camera-common"; import * as imageSourceModule from "image-source"; import * as frameModule from "ui/frame"; diff --git a/http/http-request.android.ts b/http/http-request.android.ts index a532260f62..bba0a88053 100644 --- a/http/http-request.android.ts +++ b/http/http-request.android.ts @@ -12,6 +12,27 @@ import http = require("http"); var requestIdCounter = 0; var pendingRequests = {}; +var utils: typeof utilsModule; +function ensureUtils() { + if (!utils) { + utils = require("utils/utils"); + } +} + +var imageSource: typeof imageSourceModule; +function ensureImageSource() { + if (!imageSource) { + imageSource = require("image-source"); + } +} + +var platform: typeof platformModule; +function ensurePlatform() { + if (!platform) { + platform = require("platform"); + } +} + var completeCallback: com.tns.Async.CompleteCallback; function ensureCompleteCallback() { if (completeCallback) { @@ -59,12 +80,11 @@ function onRequestComplete(requestId: number, result: com.tns.Async.Http.Request } }, toJSON: () => { - var utils: typeof utilsModule = require("utils/utils"); - + ensureUtils(); return utils.parseJSON(result.responseAsString); }, toImage: () => { - var imageSource: typeof imageSourceModule = require("image-source"); + ensureImageSource(); return new Promise((resolveImage, rejectImage) => { if (result.responseAsImage != null) { @@ -111,7 +131,7 @@ function buildJavaOptions(options: http.HttpRequestOptions) { javaOptions.headers = arrayList; } - var platform: typeof platformModule = require("platform"); + ensurePlatform(); // pass the maximum available image size to the request options in case we need a bitmap conversion var screen = platform.screen.mainScreen; diff --git a/http/http-request.ios.ts b/http/http-request.ios.ts index 5fcbb310be..9dc5f455b6 100644 --- a/http/http-request.ios.ts +++ b/http/http-request.ios.ts @@ -2,7 +2,7 @@ * iOS specific http request implementation. */ import http = require("http"); -import * as typesModule from "utils/types"; +import * as types from "utils/types"; import * as imageSourceModule from "image-source"; import * as utilsModule from "utils/utils"; @@ -10,12 +10,24 @@ var GET = "GET"; var USER_AGENT_HEADER = "User-Agent"; var USER_AGENT = "Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25"; +var utils: typeof utilsModule; +function ensureUtils() { + if (!utils) { + utils = require("utils/utils"); + } +} + +var imageSource: typeof imageSourceModule; +function ensureImageSource() { + if (!imageSource) { + imageSource = require("image-source"); + } +} + export function request(options: http.HttpRequestOptions): Promise { return new Promise((resolve, reject) => { try { - var types: typeof typesModule = require("utils/types"); - var sessionConfig = NSURLSessionConfiguration.defaultSessionConfiguration(); var queue = NSOperationQueue.mainQueue(); var session = NSURLSession.sessionWithConfigurationDelegateDelegateQueue( @@ -63,13 +75,11 @@ export function request(options: http.HttpRequestOptions): Promise { return NSDataToString(data); }, toJSON: () => { - var utils: typeof utilsModule = require("utils/utils"); - + ensureUtils(); return utils.parseJSON(NSDataToString(data)); }, toImage: () => { - var imageSource: typeof imageSourceModule = require("image-source"); - + ensureImageSource(); if (UIImage.imageWithData["async"]) { return UIImage.imageWithData["async"](UIImage, [data]) .then(image => { diff --git a/image-source/image-source-common.ts b/image-source/image-source-common.ts index 1607ec0442..38aceb9fef 100644 --- a/image-source/image-source-common.ts +++ b/image-source/image-source-common.ts @@ -1,6 +1,13 @@ import utils = require("utils/utils"); import * as httpModule from "http"; +var http: typeof httpModule; +function ensureHttp() { + if (!http) { + http = require("http"); + } +} + // This is used for definition purposes only, it does not generate JavaScript for it. import definition = require("image-source"); @@ -30,7 +37,7 @@ export function fromNativeSource(source: any): definition.ImageSource { } export function fromUrl(url: string): Promise { - var http: typeof httpModule = require("http"); + ensureHttp(); return http.getImage(url); } diff --git a/image-source/image-source.android.ts b/image-source/image-source.android.ts index 4ed6ffb0b0..c37214636b 100644 --- a/image-source/image-source.android.ts +++ b/image-source/image-source.android.ts @@ -7,6 +7,27 @@ import * as enumsModule from "ui/enums"; global.moduleMerge(common, exports); +var utils: typeof utilsModule; +function ensureUtils() { + if (!utils) { + utils = require("utils/utils"); + } +} + +var fs: typeof fileSystemModule; +function ensureFS() { + if (!fs) { + fs = require("file-system"); + } +} + +var enums: typeof enumsModule; +function ensureEnums() { + if (!enums) { + enums = require("ui/enums"); + } +} + export class ImageSource implements definition.ImageSource { public android: android.graphics.Bitmap; public ios: UIImage; @@ -14,7 +35,7 @@ export class ImageSource implements definition.ImageSource { public loadFromResource(name: string): boolean { this.android = null; - var utils: typeof utilsModule = require("utils/utils"); + ensureUtils(); var res = utils.ad.getApplicationContext().getResources(); if (res) { @@ -32,7 +53,7 @@ export class ImageSource implements definition.ImageSource { } public loadFromFile(path: string): boolean { - var fs: typeof fileSystemModule = require("file-system"); + ensureFS(); var fileName = types.isString(path) ? path.trim() : ""; if (fileName.indexOf("~/") === 0) { @@ -112,7 +133,7 @@ export class ImageSource implements definition.ImageSource { } function getTargetFromat(format: string): android.graphics.Bitmap.CompressFormat { - var enums: typeof enumsModule = require("ui/enums"); + ensureEnums(); switch (format) { case enums.ImageFormat.jpeg: diff --git a/trace/trace.ts b/trace/trace.ts index 9cafde5d32..4288eb4f0d 100644 --- a/trace/trace.ts +++ b/trace/trace.ts @@ -1,5 +1,5 @@ import definition = require("trace"); -import * as typesModule from "utils/types"; +import * as types from "utils/types"; var _enabled = false; var _categories = {}; @@ -137,8 +137,6 @@ class ConsoleWriter implements definition.TraceWriter { return; } - var types: typeof typesModule = require("utils/types"); - var msgType; if (types.isUndefined(type)) { msgType = messageType.log; diff --git a/ui/action-bar/action-bar-common.ts b/ui/action-bar/action-bar-common.ts index e6994de256..2aa77517d7 100644 --- a/ui/action-bar/action-bar-common.ts +++ b/ui/action-bar/action-bar-common.ts @@ -6,10 +6,16 @@ import enums = require("ui/enums"); import proxy = require("ui/core/proxy"); import view = require("ui/core/view"); import * as styleModule from "../styling/style"; -import * as dependencyObservableModule from "ui/core/dependency-observable"; var ACTION_ITEMS = "actionItems"; +var style: typeof styleModule; +function ensureStyle() { + if (!style) { + style = require("../styling/style"); + } +} + export module knownCollections { export var actionItems = "actionItems"; } @@ -65,20 +71,18 @@ export class ActionBar extends view.View implements dts.ActionBar { } set titleView(value: view.View) { if (this._titleView !== value) { - var style: typeof styleModule = require("../styling/style"); - var observable: typeof dependencyObservableModule = require("ui/core/dependency-observable"); - + ensureStyle(); if (this._titleView) { this._removeView(this._titleView); - this._titleView.style._resetValue(style.horizontalAlignmentProperty, observable.ValueSource.Inherited); - this._titleView.style._resetValue(style.verticalAlignmentProperty, observable.ValueSource.Inherited); + this._titleView.style._resetValue(style.horizontalAlignmentProperty, dependencyObservable.ValueSource.Inherited); + this._titleView.style._resetValue(style.verticalAlignmentProperty, dependencyObservable.ValueSource.Inherited); } this._titleView = value; if (this._titleView) { - this._titleView.style._setValue(style.horizontalAlignmentProperty, enums.HorizontalAlignment.center, observable.ValueSource.Inherited); - this._titleView.style._setValue(style.verticalAlignmentProperty, enums.VerticalAlignment.center, observable.ValueSource.Inherited); + this._titleView.style._setValue(style.horizontalAlignmentProperty, enums.HorizontalAlignment.center, dependencyObservable.ValueSource.Inherited); + this._titleView.style._setValue(style.verticalAlignmentProperty, enums.VerticalAlignment.center, dependencyObservable.ValueSource.Inherited); this._addView(this._titleView); } diff --git a/ui/action-bar/action-bar.android.ts b/ui/action-bar/action-bar.android.ts index c8014cef43..ab6ac0c081 100644 --- a/ui/action-bar/action-bar.android.ts +++ b/ui/action-bar/action-bar.android.ts @@ -17,6 +17,27 @@ const ACTION_ITEM_ID_OFFSET = 1000; global.moduleMerge(common, exports); +var trace: typeof traceModule; +function ensureTrace() { + if (!trace) { + trace = require("trace"); + } +} + +var utils: typeof utilsModule; +function ensureUtils() { + if (!utils) { + utils = require("utils/utils"); + } +} + +var imageSource: typeof imageSourceModule; +function ensureImageSource() { + if (!imageSource) { + imageSource = require("image-source"); + } +} + var actionItemIdGenerator = ACTION_ITEM_ID_OFFSET; function generateItemId(): number { actionItemIdGenerator++; @@ -309,7 +330,7 @@ export class ActionBar extends common.ActionBar { if (this._toolbar && child._nativeView) { this._toolbar.removeView(child._nativeView); - var trace: typeof traceModule = require("trace"); + ensureTrace(); trace.notifyEvent(child, "childInLayoutRemovedFromNativeVisualTree"); } @@ -321,7 +342,7 @@ function getDrawableOrResourceId(icon: string, resources: android.content.res.Re return undefined; } - var utils: typeof utilsModule = require("utils/utils"); + ensureUtils(); if (icon.indexOf(utils.RESOURCE_PREFIX) === 0) { var resourceId: number = resources.getIdentifier(icon.substr(utils.RESOURCE_PREFIX.length), 'drawable', application.android.packageName); @@ -332,7 +353,7 @@ function getDrawableOrResourceId(icon: string, resources: android.content.res.Re else { var drawable: android.graphics.drawable.BitmapDrawable; - var imageSource: typeof imageSourceModule = require("image-source"); + ensureImageSource(); var is = imageSource.fromFileOrResource(icon); if (is) { diff --git a/ui/animation/animation-common.ts b/ui/animation/animation-common.ts index 2272a4debb..e41930e28d 100644 --- a/ui/animation/animation-common.ts +++ b/ui/animation/animation-common.ts @@ -2,6 +2,13 @@ import viewModule = require("ui/core/view"); import * as traceModule from "trace"; +var trace: typeof traceModule; +function ensureTrace() { + if (!trace) { + trace = require("trace"); + } +} + export module Properties { export var opacity = "opacity"; export var backgroundColor = "backgroundColor"; @@ -56,7 +63,7 @@ export class Animation implements definition.Animation { throw new Error("No animation definitions specified"); } - var trace : typeof traceModule = require("trace"); + ensureTrace(); trace.write("Analyzing " + animationDefinitions.length + " animation definitions...", trace.categories.Animation); this._propertyAnimations = new Array(); diff --git a/ui/builder/builder.ts b/ui/builder/builder.ts index cc4ff54bd1..d7f0b600ac 100644 --- a/ui/builder/builder.ts +++ b/ui/builder/builder.ts @@ -1,5 +1,4 @@ -import * as trace from "trace"; -import {debug, ScopeError, SourceError, Source} from "utils/debug"; +import {debug, ScopeError, SourceError, Source} from "utils/debug"; import * as xml from "xml"; import {View, Template} from "ui/core/view"; import {File, path, knownFolders} from "file-system"; @@ -13,6 +12,13 @@ import * as traceModule from "trace"; const defaultNameSpaceMatcher = /tns\.xsd$/i; +var trace: typeof traceModule; +function ensureTrace() { + if (!trace) { + trace = require("trace"); + } +} + export function parse(value: string | Template, context: any): View { if (isString(value)) { var viewToReturn: View; @@ -90,7 +96,7 @@ function loadCustomComponent(componentPath: string, componentName?: string, attr if (parentPage) { parentPage.addCssFile(cssFilePath); } else { - var trace: typeof traceModule = require("trace"); + ensureTrace(); trace.write("CSS file found but no page specified. Please specify page in the options!", trace.categories.Error, trace.messageType.error); } diff --git a/ui/builder/component-builder.ts b/ui/builder/component-builder.ts index de0ee391d3..9c2f32bfbb 100644 --- a/ui/builder/component-builder.ts +++ b/ui/builder/component-builder.ts @@ -27,6 +27,13 @@ var MODULES = { var CODEFILE = "codeFile"; var CSSFILE = "cssFile"; +var platform: typeof platformModule; +function ensurePlatform() { + if (!platform) { + platform = require("platform"); + } +} + export function getComponentModule(elementName: string, namespace: string, attributes: Object, exports: Object): ComponentModule { var instance: View; var instanceModule: Object; @@ -109,7 +116,7 @@ export function getComponentModule(elementName: string, namespace: string, attri if (attr.indexOf(":") !== -1) { var platformName = attr.split(":")[0].trim(); - var platform: typeof platformModule = require("platform"); + ensurePlatform(); if (platformName.toLowerCase() === platform.device.os.toLowerCase()) { attr = attr.split(":")[1].trim(); diff --git a/ui/button/button-common.ts b/ui/button/button-common.ts index df471bf3c1..6a8ff535fe 100644 --- a/ui/button/button-common.ts +++ b/ui/button/button-common.ts @@ -7,6 +7,20 @@ import observable = require("data/observable"); import * as weakEventListenerModule from "ui/core/weak-event-listener"; import * as enumsModule from "ui/enums"; +var weakEvents: typeof weakEventListenerModule; +function ensureWeakEvents() { + if (!weakEvents) { + weakEvents = require("ui/core/weak-event-listener"); + } +} + +var enums: typeof enumsModule; +function ensureEnums() { + if (!enums) { + enums = require("ui/enums"); + } +} + var textProperty = new dependencyObservable.Property( "text", "Button", @@ -65,7 +79,7 @@ export class Button extends view.View implements definition.Button { set formattedText(value: formattedString.FormattedString) { if (this.formattedText !== value) { - var weakEvents: typeof weakEventListenerModule = require("ui/core/weak-event-listener"); + ensureWeakEvents(); if (this.formattedText) { weakEvents.removeWeakEventListener(this.formattedText, observable.Observable.propertyChangeEvent, this.onFormattedTextChanged, this); @@ -129,7 +143,7 @@ export class Button extends view.View implements definition.Button { function onTextWrapPropertyChanged(data: dependencyObservable.PropertyChangeData) { var v = data.object; - var enums : typeof enumsModule = require("ui/enums"); + ensureEnums(); v.style.whiteSpace = data.newValue ? enums.WhiteSpace.normal : enums.WhiteSpace.nowrap; } diff --git a/ui/content-view/content-view.ts b/ui/content-view/content-view.ts index f141fe292a..7e794aec8a 100644 --- a/ui/content-view/content-view.ts +++ b/ui/content-view/content-view.ts @@ -1,6 +1,6 @@ import definition = require("ui/content-view"); import view = require("ui/core/view"); -import * as utilsModule from "utils/utils"; +import * as utils from "utils/utils"; export class ContentView extends view.CustomLayoutView implements definition.ContentView, view.AddChildFromBuilder { private _content: view.View; @@ -50,7 +50,6 @@ export class ContentView extends view.CustomLayoutView implements definition.Con // This method won't be called in Android because we use the native android layout. public onMeasure(widthMeasureSpec: number, heightMeasureSpec: number): void { var result = view.View.measureChild(this, this.content, widthMeasureSpec, heightMeasureSpec); - var utils: typeof utilsModule = require("utils/utils"); var width = utils.layout.getMeasureSpecSize(widthMeasureSpec); var widthMode = utils.layout.getMeasureSpecMode(widthMeasureSpec); diff --git a/ui/core/bindable.ts b/ui/core/bindable.ts index 0a27ff69f4..762c97908e 100644 --- a/ui/core/bindable.ts +++ b/ui/core/bindable.ts @@ -11,13 +11,25 @@ import * as polymerExpressionsModule from "js-libs/polymer-expressions"; import * as specialPropertiesModule from "ui/builder/special-properties"; //late import -var _appModule: typeof applicationModule = null; +var application: typeof applicationModule; +function ensureApplication() { + if (!application) { + application = require("application"); + } +} + +var expressions: typeof polymerExpressionsModule; +function ensureExpressions() { + if (!expressions) { + expressions = require("js-libs/polymer-expressions"); + } +} -function appModule() { - if (!_appModule) { - _appModule = require("application"); +var specialProperties: typeof specialPropertiesModule; +function ensureSpecialProperties() { + if (!specialProperties) { + specialProperties = require("ui/builder/special-properties"); } - return _appModule; } var bindingContextProperty = new dependencyObservable.Property( @@ -364,15 +376,16 @@ export class Binding { private _getExpressionValue(expression: string, isBackConvert: boolean, changedModel: any): any { try { - var polymerExpressions: typeof polymerExpressionsModule = require("js-libs/polymer-expressions"); + ensureExpressions(); - var exp = polymerExpressions.PolymerExpressions.getExpression(expression); + var exp = expressions.PolymerExpressions.getExpression(expression); if (exp) { var context = this.source && this.source.get && this.source.get() || global; var model = {}; - for (var prop in appModule().resources) { - if (appModule().resources.hasOwnProperty(prop) && !context.hasOwnProperty(prop)) { - context[prop] = appModule().resources[prop]; + ensureApplication(); + for (var prop in application.resources) { + if (application.resources.hasOwnProperty(prop) && !context.hasOwnProperty(prop)) { + context[prop] = application.resources[prop]; } } @@ -593,9 +606,9 @@ export class Binding { optionsInstance.off(options.property, null, optionsInstance.bindingContext); optionsInstance.on(options.property, value, optionsInstance.bindingContext); } else { - var sp: typeof specialPropertiesModule = require("ui/builder/special-properties"); + ensureSpecialProperties(); - let specialSetter = sp.getSpecialPropertySetter(options.property); + let specialSetter = specialProperties.getSpecialPropertySetter(options.property); if (specialSetter) { specialSetter(optionsInstance, value); } else { diff --git a/ui/core/control-state-change.ios.ts b/ui/core/control-state-change.ios.ts index 055cb9d87d..d3f00e7ba0 100644 --- a/ui/core/control-state-change.ios.ts +++ b/ui/core/control-state-change.ios.ts @@ -1,6 +1,6 @@ /* tslint:disable:no-unused-variable */ import definition = require("ui/core/control-state-change"); -import * as visualStateConstantsModule from "ui/styling/visual-state-constants"; +import * as visualStateConstants from "ui/styling/visual-state-constants"; var ObserverClass = NSObject.extend( { @@ -50,8 +50,6 @@ export class ControlStateChangeListener implements definition.ControlStateChange } private _updateState() { - var visualStateConstants: typeof visualStateConstantsModule = require("ui/styling/visual-state-constants"); - var state = visualStateConstants.Normal; if (this._control.highlighted) { state = visualStateConstants.Pressed; diff --git a/ui/core/proxy.ts b/ui/core/proxy.ts index b902fb3cc6..1d7e8a6c65 100644 --- a/ui/core/proxy.ts +++ b/ui/core/proxy.ts @@ -1,9 +1,9 @@ import bindable = require("ui/core/bindable"); import dependencyObservable = require("ui/core/dependency-observable"); import definition = require("ui/core/proxy"); -import * as platformModule from "platform"; -import * as typesModule from "utils/types"; -import * as observableModule from "data/observable"; +import * as platform from "platform"; +import * as types from "utils/types"; +import * as observable from "data/observable"; export class PropertyMetadata extends dependencyObservable.PropertyMetadata implements definition.PropertyMetadata { private _onSetNativeValue: dependencyObservable.PropertyChangedCallback; @@ -77,8 +77,6 @@ export class ProxyObject extends bindable.Bindable implements definition.ProxyOb return; } - var platform: typeof platformModule = require("platform"); - if (platform.device.os === platform.platformNames.android && !this.android) { // in android we have lazy loading and we do not have a native widget created yet, do not call the onSetNativeValue callback // properties will be synced when the widget is created @@ -92,14 +90,10 @@ export class ProxyObject extends bindable.Bindable implements definition.ProxyOb var proxyMetadata = metadata; if (proxyMetadata.onSetNativeValue) { - var types: typeof typesModule = require("utils/types"); - if (types.isUndefined(newValue)) { newValue = this._getValue(property); } - var observable: typeof observableModule = require("data/observable"); - proxyMetadata.onSetNativeValue({ object: this, property: property, diff --git a/ui/core/view-common.ts b/ui/core/view-common.ts index e8701b9f39..9fe6f9898b 100644 --- a/ui/core/view-common.ts +++ b/ui/core/view-common.ts @@ -14,10 +14,24 @@ import {PropertyMetadata, ProxyObject} from "ui/core/proxy"; import {PropertyMetadataSettings, PropertyChangeData, Property, ValueSource, PropertyMetadata as doPropertyMetadata} from "ui/core/dependency-observable"; import {registerSpecialProperty} from "ui/builder/special-properties"; import {CommonLayoutParams, nativeLayoutParamsProperty} from "ui/styling/style"; -import * as visualStateConstantsModule from "ui/styling/visual-state-constants"; +import * as visualStateConstants from "ui/styling/visual-state-constants"; import * as bindableModule from "ui/core/bindable"; import * as visualStateModule from "../styling/visual-state"; +var bindable: typeof bindableModule; +function ensureBindable() { + if (!bindable) { + bindable = require("ui/core/bindable"); + } +} + +var visualState: typeof visualStateModule; +function ensureVisualState() { + if (!visualState) { + visualState = require("../styling/visual-state"); + } +} + registerSpecialProperty("class", (instance: definition.View, propertyValue: string) => { instance.className = propertyValue; }); @@ -181,9 +195,6 @@ export class View extends ProxyObject implements definition.View { this._style = new style.Style(this); this._domId = viewIdCounter++; - - var visualStateConstants: typeof visualStateConstantsModule = require("ui/styling/visual-state-constants"); - this._visualState = visualStateConstants.Normal; } @@ -1009,7 +1020,7 @@ export class View extends ProxyObject implements definition.View { view.onUnloaded(); } - var bindable: typeof bindableModule = require("ui/core/bindable"); + ensureBindable(); view._setValue(bindable.Bindable.bindingContextProperty, undefined, ValueSource.Inherited); var inheritablePropertiesSetCallback = function (property: Property) { @@ -1056,8 +1067,8 @@ export class View extends ProxyObject implements definition.View { return; } // we use lazy require to prevent cyclic dependencies issues - var vsm: typeof visualStateModule = require("ui/styling/visual-state"); - this._visualState = vsm.goToState(this, state); + ensureVisualState(); + this._visualState = visualState.goToState(this, state); // TODO: What state should we set here - the requested or the actual one? this._requestedVisualState = state; diff --git a/ui/core/view.android.ts b/ui/core/view.android.ts index 3f25ea7487..c0f98b18da 100644 --- a/ui/core/view.android.ts +++ b/ui/core/view.android.ts @@ -5,7 +5,7 @@ import utils = require("utils/utils"); import dependencyObservable = require("ui/core/dependency-observable"); import proxy = require("ui/core/proxy"); import gestures = require("ui/gestures"); -import * as typesModule from "utils/types"; +import * as types from "utils/types"; import style = require("ui/styling/style"); import styling = require("ui/styling"); import enums = require("ui/enums"); @@ -403,8 +403,6 @@ export class CustomLayoutView extends View implements viewDefinition.CustomLayou super._addViewToNativeVisualTree(child); if (this._nativeView && child._nativeView) { - var types: typeof typesModule = require("utils/types"); - if (types.isNullOrUndefined(atIndex) || atIndex >= this._nativeView.getChildCount()) { this._nativeView.addView(child._nativeView); } diff --git a/ui/core/view.ios.ts b/ui/core/view.ios.ts index c4725f048c..cd2d9bd3ea 100644 --- a/ui/core/view.ios.ts +++ b/ui/core/view.ios.ts @@ -8,6 +8,13 @@ import styling = require("ui/styling"); import enums = require("ui/enums"); import * as backgroundModule from "ui/styling/background"; +var background: typeof backgroundModule; +function ensureBackground() { + if (!background) { + background = require("ui/styling/background"); + } +} + global.moduleMerge(viewCommon, exports); function onAutomationTextPropertyChanged(data: dependencyObservable.PropertyChangeData) { @@ -322,7 +329,7 @@ export class ViewStyler implements style.Styler { private static setBackgroundInternalProperty(view: View, newValue: any) { var nativeView: UIView = view._nativeView; if (nativeView) { - var background: typeof backgroundModule = require("ui/styling/background"); + ensureBackground(); nativeView.backgroundColor = background.ios.createBackgroundUIColor(view); } } diff --git a/ui/core/weak-event-listener.ts b/ui/core/weak-event-listener.ts index 84a834d2c2..78321d2240 100644 --- a/ui/core/weak-event-listener.ts +++ b/ui/core/weak-event-listener.ts @@ -1,5 +1,5 @@ import observable = require("data/observable"); -import * as typesModule from "utils/types"; +import * as types from "utils/types"; var handlersForEventName = new Map void>(); var sourcesMap = new WeakMap>>(); @@ -62,8 +62,6 @@ function getHandlerForEventName(eventName: string): (eventData: observable.Event } function validateArgs(source: observable.Observable, eventName: string, handler: (eventData: observable.EventData) => void, target: any) { - var types: typeof typesModule = require("utils/types"); - if (types.isNullOrUndefined(source)) { throw new Error("source is null or undefined"); } diff --git a/ui/date-picker/date-picker.android.ts b/ui/date-picker/date-picker.android.ts index 5eddeff2ad..e94427b7ff 100644 --- a/ui/date-picker/date-picker.android.ts +++ b/ui/date-picker/date-picker.android.ts @@ -2,7 +2,7 @@ import dependencyObservable = require("ui/core/dependency-observable"); import proxy = require("ui/core/proxy"); import utils = require("utils/utils") -import * as typesModule from "utils/types"; +import * as types from "utils/types"; function onYearPropertyChanged(data: dependencyObservable.PropertyChangeData) { var picker = data.object; @@ -35,8 +35,6 @@ function onDayPropertyChanged(data: dependencyObservable.PropertyChangeData) { (common.DatePicker.dayProperty.metadata).onSetNativeValue = onDayPropertyChanged; function updateNativeDate(picker: DatePicker) { - var types: typeof typesModule = require("utils/types"); - var year = types.isNumber(picker.year) ? picker.year : picker.android.getYear(); var month = types.isNumber(picker.month) ? (picker.month - 1) : picker.android.getMonth(); var day = types.isNumber(picker.day) ? picker.day : picker.android.getDayOfMonth(); diff --git a/ui/frame/frame-common.ts b/ui/frame/frame-common.ts index 66118b906e..0243705825 100644 --- a/ui/frame/frame-common.ts +++ b/ui/frame/frame-common.ts @@ -3,12 +3,17 @@ import {View, CustomLayoutView} from "ui/core/view"; import {Page} from "ui/page"; import {isString, isFunction, isDefined} from "utils/types"; import * as trace from "trace"; -import {load as buildModule} from "ui/builder"; -import {knownFolders, path} from "file-system"; import {resolveFileName} from "file-system/file-name-resolver"; -import * as fileSystemModule from "file-system"; +import * as fs from "file-system"; import * as builderModule from "ui/builder"; +var builder: typeof builderModule; +function ensureBuilder() { + if (!builder) { + builder = require("ui/builder"); + } +} + var frameStack: Array = []; function buildEntryFromArgs(arg: any): definition.NavigationEntry { @@ -58,12 +63,10 @@ export function resolvePageFromEntry(entry: definition.NavigationEntry): Page { } } else if (entry.moduleName) { - var fs: typeof fileSystemModule = require("file-system"); - // Current app full path. - var currentAppPath = knownFolders.currentApp().path; + var currentAppPath = fs.knownFolders.currentApp().path; //Full path of the module = current app full path + module name. - var moduleNamePath = path.join(currentAppPath, entry.moduleName); + var moduleNamePath = fs.path.join(currentAppPath, entry.moduleName); var moduleExports; if (global.moduleExists(entry.moduleName)) { @@ -111,10 +114,10 @@ function pageFromBuilder(moduleNamePath: string, moduleExports: any): Page { if (fileName) { trace.write("Loading XML file: " + fileName, trace.categories.Navigation); - var builder: typeof builderModule = require("ui/builder"); + ensureBuilder(); // Or check if the file exists in the app modules and load the page from XML. - element = buildModule(fileName, moduleExports); + element = builder.load(fileName, moduleExports); if (element instanceof Page) { page = element; } diff --git a/ui/frame/frame.android.ts b/ui/frame/frame.android.ts index 6e8585cf89..0983cff886 100644 --- a/ui/frame/frame.android.ts +++ b/ui/frame/frame.android.ts @@ -4,7 +4,7 @@ import pages = require("ui/page"); import trace = require("trace"); import observable = require("data/observable"); import application = require("application"); -import * as typesModule from "utils/types"; +import * as types from "utils/types"; import * as utilsModule from "utils/utils"; global.moduleMerge(frameCommon, exports); @@ -366,8 +366,6 @@ export class Frame extends frameCommon.Frame { } public _getNavBarVisible(page: pages.Page): boolean { - var types : typeof typesModule = require("utils/types"); - if (types.isDefined(page.actionBarHidden)) { return !page.actionBarHidden; } diff --git a/ui/frame/frame.d.ts b/ui/frame/frame.d.ts index 1a025bdd50..7c706800e7 100644 --- a/ui/frame/frame.d.ts +++ b/ui/frame/frame.d.ts @@ -248,6 +248,7 @@ declare module "ui/frame" { } //@private - export function reloadPage(): void; + function reloadPage(): void; + function resolvePageFromEntry(entry: NavigationEntry): pages.Page; //@endprivate } \ No newline at end of file diff --git a/ui/frame/frame.ios.ts b/ui/frame/frame.ios.ts index 41f91a8458..0c7709a07b 100644 --- a/ui/frame/frame.ios.ts +++ b/ui/frame/frame.ios.ts @@ -6,7 +6,7 @@ import enums = require("ui/enums"); import utils = require("utils/utils"); import view = require("ui/core/view"); import uiUtils = require("ui/utils"); -import * as typesModule from "utils/types"; +import * as types from "utils/types"; global.moduleMerge(frameCommon, exports); @@ -147,8 +147,6 @@ export class Frame extends frameCommon.Frame { case enums.NavigationBarVisibility.auto: let newValue: boolean; - var types: typeof typesModule = require("utils/types"); - if (page && types.isDefined(page.actionBarHidden)) { newValue = !page.actionBarHidden; } diff --git a/ui/html-view/html-view.ios.ts b/ui/html-view/html-view.ios.ts index e5bf7b553a..9ecc020f9c 100644 --- a/ui/html-view/html-view.ios.ts +++ b/ui/html-view/html-view.ios.ts @@ -2,8 +2,8 @@ import definition = require("ui/html-view"); import dependencyObservable = require("ui/core/dependency-observable"); import proxy = require("ui/core/proxy"); -import * as utilsModule from "utils/utils"; -import * as viewModule from "ui/core/view"; +import * as utils from "utils/utils"; +import * as view from "ui/core/view"; function onHtmlPropertyChanged(data: dependencyObservable.PropertyChangeData) { var view = data.object; @@ -53,8 +53,6 @@ export class HtmlView extends common.HtmlView { var nativeView = this._nativeView; if (nativeView) { - var utils: typeof utilsModule = require("utils/utils"); - var width = utils.layout.getMeasureSpecSize(widthMeasureSpec); var widthMode = utils.layout.getMeasureSpecMode(widthMeasureSpec); @@ -77,8 +75,6 @@ export class HtmlView extends common.HtmlView { var measureWidth = Math.max(labelWidth, this.minWidth); var measureHeight = Math.max(nativeSize.height, this.minHeight); - var view: typeof viewModule = require("ui/core/view"); - var widthAndState = view.View.resolveSizeAndState(measureWidth, width, widthMode, 0); var heightAndState = view.View.resolveSizeAndState(measureHeight, height, heightMode, 0); diff --git a/ui/image-cache/image-cache.ios.ts b/ui/image-cache/image-cache.ios.ts index 763ea9dabf..ae69221650 100644 --- a/ui/image-cache/image-cache.ios.ts +++ b/ui/image-cache/image-cache.ios.ts @@ -3,6 +3,13 @@ import utils = require("utils/utils"); import trace = require("trace"); import * as httpRequestModule from "http/http-request"; +var httpRequest: typeof httpRequestModule; +function ensureHttpRequest() { + if (!httpRequest) { + httpRequest = require("http/http-request"); + } +} + //class NSCacheDelegateImpl extends NSObject implements NSCacheDelegate { // public static ObjCProtocols = [NSCacheDelegate]; @@ -65,7 +72,7 @@ export class Cache extends common.Cache { } public _downloadCore(request: common.DownloadRequest) { - var httpRequest: typeof httpRequestModule = require("http/http-request"); + ensureHttpRequest(); var that = this; httpRequest.request({ url: request.url, method: "GET" }) diff --git a/ui/image/image-common.ts b/ui/image/image-common.ts index 28affba7cb..9bb5a57df5 100644 --- a/ui/image/image-common.ts +++ b/ui/image/image-common.ts @@ -7,7 +7,7 @@ import enums = require("ui/enums"); import platform = require("platform"); import utils = require("utils/utils"); -import * as typesModule from "utils/types"; +import * as types from "utils/types"; var SRC = "src"; var IMAGE_SOURCE = "imageSource"; @@ -23,8 +23,6 @@ function onSrcPropertyChanged(data: dependencyObservable.PropertyChangeData) { var image = data.object; var value = data.newValue; - var types: typeof typesModule = require("utils/types"); - if (types.isString(value)) { value = value.trim(); image.imageSource = null; diff --git a/ui/image/image.android.ts b/ui/image/image.android.ts index b93852481e..7d77ab8653 100644 --- a/ui/image/image.android.ts +++ b/ui/image/image.android.ts @@ -11,13 +11,20 @@ import utils = require("utils/utils"); global.moduleMerge(imageCommon, exports); +var enums: typeof enumsModule; +function ensureEnums() { + if (!enums) { + enums = require("ui/enums"); + } +} + function onStretchPropertyChanged(data: dependencyObservable.PropertyChangeData) { var image = data.object; if (!image.android) { return; } - var enums: typeof enumsModule = require("ui/enums"); + ensureEnums(); switch (data.newValue) { case enums.Stretch.aspectFit: diff --git a/ui/label/label-common.ts b/ui/label/label-common.ts index 5a76d5894d..f6a117d7af 100644 --- a/ui/label/label-common.ts +++ b/ui/label/label-common.ts @@ -5,6 +5,13 @@ import textBase = require("ui/text-base"); import view = require("ui/core/view"); import * as enumsModule from "ui/enums"; +var enums: typeof enumsModule; +function ensureEnums() { + if (!enums) { + enums = require("ui/enums"); + } +} + export class Label extends textBase.TextBase implements definition.Label { public static textWrapProperty = new dependencyObservable.Property( "textWrap", @@ -26,7 +33,7 @@ export class Label extends textBase.TextBase implements definition.Label { function onTextWrapPropertyChanged(data: dependencyObservable.PropertyChangeData) { var v = data.object; - var enums: typeof enumsModule = require("ui/enums"); + ensureEnums(); v.style.whiteSpace = data.newValue ? enums.WhiteSpace.normal : enums.WhiteSpace.nowrap; } diff --git a/ui/label/label.ios.ts b/ui/label/label.ios.ts index ab7c0f0296..a833f02d33 100644 --- a/ui/label/label.ios.ts +++ b/ui/label/label.ios.ts @@ -1,7 +1,7 @@ import common = require("./label-common"); import definition = require("ui/label"); -import * as enumsModule from "ui/enums"; -import * as utilsModule from "utils/utils"; +import * as enums from "ui/enums"; +import * as utils from "utils/utils"; import * as backgroundModule from "ui/styling/background"; import view = require("ui/core/view"); import style = require("ui/styling/style"); @@ -9,6 +9,13 @@ import styling = require("ui/styling"); global.moduleMerge(common, exports); +var background: typeof backgroundModule; +function ensureBackground() { + if (!background) { + background = require("ui/styling/background"); + } +} + class UILabelImpl extends UILabel { private _owner: WeakRef