diff --git a/CrossPlatformModules.csproj b/CrossPlatformModules.csproj index e52657c78..df52b4a5a 100644 --- a/CrossPlatformModules.csproj +++ b/CrossPlatformModules.csproj @@ -1623,11 +1623,7 @@ component-builder.d.ts - - template-builder.d.ts - - @@ -2119,7 +2115,7 @@ False - + \ No newline at end of file diff --git a/application/application-common.ts b/application/application-common.ts index 377c8cdf9..70c099870 100644 --- a/application/application-common.ts +++ b/application/application-common.ts @@ -1,9 +1,9 @@ require("globals"); import definition = require("application"); -import fs = require("file-system"); -import styleScope = require("ui/styling/style-scope"); import observable = require("data/observable"); import frame = require("ui/frame"); +import * as fileSystemModule from "file-system"; +import * as styleScopeModule from "ui/styling/style-scope"; var events = new observable.Observable(); global.moduleMerge(events, exports); @@ -41,6 +41,9 @@ export var ios = undefined; export function loadCss() { if (definition.cssFile) { + var fs: typeof fileSystemModule = require("file-system"); + var styleScope: typeof styleScopeModule = require("ui/styling/style-scope"); + var cssFileName = fs.path.join(fs.knownFolders.currentApp().path, definition.cssFile); if (fs.File.exists(cssFileName)) { var file = fs.File.fromPath(cssFileName); diff --git a/application/application.android.ts b/application/application.android.ts index 7b501d7fc..895f253f2 100644 --- a/application/application.android.ts +++ b/application/application.android.ts @@ -1,10 +1,9 @@ import appModule = require("./application-common"); import dts = require("application"); import frame = require("ui/frame"); -import types = require("utils/types"); import observable = require("data/observable"); -import enums = require("ui/enums"); -import fileResolverModule = require("file-system/file-name-resolver"); +import * as typesModule from "utils/types"; +import * as fileResolverModule from "file-system/file-name-resolver"; global.moduleMerge(appModule, exports); @@ -306,6 +305,8 @@ class BroadcastReceiver extends android.content.BroadcastReceiver { } global.__onUncaughtError = function (error: Error) { + var types: typeof typesModule = require("utils/types"); + // TODO: Obsolete this if (types.isFunction(exports.onUncaughtError)) { exports.onUncaughtError(error); @@ -331,6 +332,8 @@ function onConfigurationChanged(context: android.content.Context, intent: androi if (currentOrientation !== orientation) { currentOrientation = orientation; + var enums = require("ui/enums"); + var newValue; switch (orientation) { case android.content.res.Configuration.ORIENTATION_LANDSCAPE: @@ -344,7 +347,7 @@ function onConfigurationChanged(context: android.content.Context, intent: androi break; } - exports.notify( { + exports.notify({ eventName: dts.orientationChangedEvent, android: context, newValue: newValue, @@ -358,8 +361,10 @@ global.__onLiveSync = function () { return; } + var fileResolver: typeof fileResolverModule = require("file-system/file-name-resolver"); + // Clear file resolver cache to respect newly added files. - fileResolverModule.clearCache(); + fileResolver.clearCache(); // Reload app.css in case it was changed. appModule.loadCss(); diff --git a/application/application.ios.ts b/application/application.ios.ts index 4f2dc6241..983659665 100644 --- a/application/application.ios.ts +++ b/application/application.ios.ts @@ -1,13 +1,12 @@ -import appModule = require("./application-common"); +import common = require("./application-common"); import frame = require("ui/frame"); -import types = require("utils/types"); -import view = require("ui/core/view"); import definition = require("application"); -import enums = require("ui/enums"); -import uiUtils = require("ui/utils"); -import fileResolverModule = require("file-system/file-name-resolver"); +import * as uiUtilsModule from "ui/utils"; +import * as typesModule from "utils/types"; +import * as fileResolverModule from "file-system/file-name-resolver"; +import * as enumsModule from "ui/enums"; -global.moduleMerge(appModule, exports); +global.moduleMerge(common, exports); class Responder extends UIResponder { // @@ -15,7 +14,7 @@ class Responder extends UIResponder { class Window extends UIWindow { - private _content: view.View; + private _content; initWithFrame(frame: CGRect): UIWindow { var window = super.initWithFrame(frame); @@ -25,14 +24,16 @@ class Window extends UIWindow { return window; } - public get content(): view.View { + public get content() { return this._content; } - public set content(value: view.View) { + public set content(value) { this._content = value; } public layoutSubviews(): void { + var uiUtils: typeof uiUtilsModule = require("ui/utils"); + uiUtils.ios._layoutRootView(this._content, UIScreen.mainScreen().bounds); } } @@ -113,7 +114,7 @@ class IOSApplication implements definition.iOSApplication { } exports.notify({ - eventName: definition.launchEvent, + eventName: exports.launchEvent, object: this, ios: notification.userInfo && notification.userInfo.objectForKey("UIApplicationLaunchOptionsLocalNotificationKey") || null }); @@ -121,9 +122,9 @@ class IOSApplication implements definition.iOSApplication { var topFrame = frame.topmost(); if (!topFrame) { // try to navigate to the mainEntry/Module (if specified) - var navParam = definition.mainEntry; + var navParam = exports.mainEntry; if (!navParam) { - navParam = definition.mainModule; + navParam = exports.mainModule; } if (navParam) { @@ -147,7 +148,7 @@ class IOSApplication implements definition.iOSApplication { exports.onResume(); } - exports.notify({ eventName: definition.resumeEvent, object: this, ios: UIApplication.sharedApplication() }); + exports.notify({ eventName: exports.resumeEvent, object: this, ios: UIApplication.sharedApplication() }); } private didEnterBackground(notification: NSNotification) { @@ -155,7 +156,7 @@ class IOSApplication implements definition.iOSApplication { exports.onSuspend(); } - exports.notify({ eventName: definition.suspendEvent, object: this, ios: UIApplication.sharedApplication() }); + exports.notify({ eventName: exports.suspendEvent, object: this, ios: UIApplication.sharedApplication() }); } private willTerminate(notification: NSNotification) { @@ -163,7 +164,7 @@ class IOSApplication implements definition.iOSApplication { exports.onExit(); } - exports.notify({ eventName: definition.exitEvent, object: this, ios: UIApplication.sharedApplication() }); + exports.notify({ eventName: exports.exitEvent, object: this, ios: UIApplication.sharedApplication() }); } private didReceiveMemoryWarning(notification: NSNotification) { @@ -171,7 +172,7 @@ class IOSApplication implements definition.iOSApplication { exports.onLowMemory(); } - exports.notify({ eventName: definition.lowMemoryEvent, object: this, android: undefined, ios: UIApplication.sharedApplication() }); + exports.notify({ eventName: exports.lowMemoryEvent, object: this, android: undefined, ios: UIApplication.sharedApplication() }); } private orientationDidChange(notification: NSNotification) { @@ -180,6 +181,8 @@ class IOSApplication implements definition.iOSApplication { if (this._currentOrientation !== orientation) { this._currentOrientation = orientation; + var enums: typeof enumsModule = require("ui/enums"); + var newValue; switch (orientation) { case UIDeviceOrientation.UIDeviceOrientationLandscapeRight: @@ -196,7 +199,7 @@ class IOSApplication implements definition.iOSApplication { } exports.notify({ - eventName: definition.orientationChangedEvent, + eventName: exports.orientationChangedEvent, ios: this, newValue: newValue, object: this @@ -210,19 +213,21 @@ var iosApp = new IOSApplication(); exports.ios = iosApp; global.__onUncaughtError = function (error: Error) { + var types: typeof typesModule = require("utils/types"); + // TODO: This should be obsoleted if (types.isFunction(exports.onUncaughtError)) { exports.onUncaughtError(error); } - definition.notify({ eventName: definition.uncaughtErrorEvent, object: definition.ios, ios: error }); + exports.notify({ eventName: exports.uncaughtErrorEvent, object: exports.ios, ios: error }); } var started: boolean = false; exports.start = function () { if (!started) { started = true; - appModule.loadCss(); + exports.loadCss(); UIApplicationMain(0, null, null, exports.ios && exports.ios.delegate ? NSStringFromClass(exports.ios.delegate) : NSStringFromClass(Responder)); } else { throw new Error("iOS Application already started!"); @@ -234,11 +239,13 @@ global.__onLiveSync = function () { return; } + var fileResolver: typeof fileResolverModule = require("file-system/file-name-resolver"); + // Clear file resolver cache to respect newly added files. - fileResolverModule.clearCache(); + fileResolver.clearCache(); // Reload app.css in case it was changed. - appModule.loadCss(); + exports.loadCss(); // Reload current page. frame.reloadPage(); diff --git a/apps/tests/app/app.ts b/apps/tests/app/app.ts index bc1bc3cc5..d3330cd84 100644 --- a/apps/tests/app/app.ts +++ b/apps/tests/app/app.ts @@ -1,4 +1,12 @@ -import application = require("application"); +var start; +if (typeof NSDate !== "undefined") { + start = NSDate.date(); +} +else { + start = java.lang.System.currentTimeMillis(); +} + +import application = require("application"); // Specify custom UIApplicationDelegate. /* @@ -129,4 +137,14 @@ if (application.android) { }); } +var time; +if (typeof NSDate !== "undefined") { + time = NSDate.date().timeIntervalSinceDate(start) * 1000; +} +else { + time = java.lang.System.currentTimeMillis() - start; +} + +console.log(`TIME TO LOAD APP: ${time} ms`); + application.start(); diff --git a/camera/camera.android.ts b/camera/camera.android.ts index aa3e8157c..0d7bb80ac 100644 --- a/camera/camera.android.ts +++ b/camera/camera.android.ts @@ -1,16 +1,18 @@ -import imageSource = require("image-source"); -import appModule = require("application"); -import fileSystem = require("file-system"); -import utils = require("utils/utils"); -import types = require("utils/types"); -import definition = require("camera"); -import common = require("./camera-common"); +import * as typesModule from "utils/types"; +import * as utilsModule from "utils/utils"; +import * as fileSystemModule from "file-system"; +import * as applicationModule from "application"; +import * as imageSourceModule from "image-source"; +import * as cameraCommonModule from "./camera-common"; var REQUEST_IMAGE_CAPTURE = 3453; -export var takePicture = function (options?: definition.CameraOptions): Promise { - return new Promise((resolve, reject) => { +export var takePicture = function (options?): Promise { + return new Promise((resolve, reject) => { try { + var types: typeof typesModule = require("utils/types"); + var utils: typeof utilsModule = require("utils/utils"); + var density = utils.layout.getDisplayDensity(); if (options) { var reqWidth = options.width ? options.width * density : 0; @@ -19,12 +21,17 @@ export var takePicture = function (options?: definition.CameraOptions): Promise< } var takePictureIntent = new android.content.Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); var dateStamp = createDateTimeStamp(); + + var fileSystem: typeof fileSystemModule = require("file-system"); + var tempPicturePath = fileSystem.path.join(utils.ad.getApplicationContext().getExternalFilesDir(null).getAbsolutePath(), "cameraPicture_" + dateStamp + ".jpg"); var nativeFile = new java.io.File(tempPicturePath); var tempPictureUri = android.net.Uri.fromFile(nativeFile); takePictureIntent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, tempPictureUri); if (takePictureIntent.resolveActivity(utils.ad.getApplicationContext().getPackageManager()) != null) { + var appModule: typeof applicationModule = require("application"); + var previousResult = appModule.android.onActivityResult; appModule.android.onActivityResult = (requestCode: number, resultCode: number, data: android.content.Intent) => { appModule.android.onActivityResult = previousResult; @@ -42,6 +49,9 @@ export var takePicture = function (options?: definition.CameraOptions): Promise< var scaledSizeImage = null; if (reqHeight > 0 && reqWidth > 0) { if (shouldKeepAspectRatio) { + + var common: typeof cameraCommonModule = require("./camera-common"); + var aspectSafeSize = common.getAspectSafeDimensions(bitmap.getWidth(), bitmap.getHeight(), reqWidth, reqHeight); scaledSizeImage = android.graphics.Bitmap.createScaledBitmap(bitmap, aspectSafeSize.width, aspectSafeSize.height, true); } @@ -52,6 +62,9 @@ export var takePicture = function (options?: definition.CameraOptions): Promise< else { scaledSizeImage = bitmap; } + + var imageSource: typeof imageSourceModule = require("image-source"); + resolve(imageSource.fromNativeSource(scaledSizeImage)); } }; @@ -72,21 +85,21 @@ var calculateInSampleSize = function (imageWidth, imageHeight, reqWidth, reqHeig if (imageWidth > reqWidth && imageHeight > reqHeight) { var halfWidth = imageWidth / 2; var halfHeight = imageHeight / 2; - while((halfWidth / sampleSize) > reqWidth && (halfHeight / sampleSize) > reqHeight) { + while ((halfWidth / sampleSize) > reqWidth && (halfHeight / sampleSize) > reqHeight) { sampleSize *= 2; } } return sampleSize; } -var createDateTimeStamp = function() { +var createDateTimeStamp = function () { var result = ""; var date = new Date(); - result = (date.getDate() < 10 ? "0" + date.getDate().toString() : date.getDate().toString())+ - ((date.getMonth() + 1) < 10 ? "0" + (date.getMonth() + 1).toString() : (date.getMonth() + 1).toString()) + - date.getFullYear().toString() + - date.getHours().toString() + - date.getMinutes().toString() + - date.getSeconds().toString(); + result = (date.getDate() < 10 ? "0" + date.getDate().toString() : date.getDate().toString()) + + ((date.getMonth() + 1) < 10 ? "0" + (date.getMonth() + 1).toString() : (date.getMonth() + 1).toString()) + + date.getFullYear().toString() + + date.getHours().toString() + + date.getMinutes().toString() + + date.getSeconds().toString(); return result; } \ No newline at end of file diff --git a/camera/camera.ios.ts b/camera/camera.ios.ts index 77c8c36d2..0b1b11ac3 100644 --- a/camera/camera.ios.ts +++ b/camera/camera.ios.ts @@ -1,8 +1,7 @@ -import imageSource = require("image-source"); -import frame = require("ui/frame"); -import definition = require("camera"); -import common = require("./camera-common"); -import types = require("utils/types"); +var types = require("utils/types"); +import * as cameraCommonModule from "./camera-common"; +import * as imageSourceModule from "image-source"; +import * as frameModule from "ui/frame"; class UIImagePickerControllerDelegateImpl extends NSObject implements UIImagePickerControllerDelegate { public static ObjCProtocols = [UIImagePickerControllerDelegate]; @@ -11,22 +10,23 @@ class UIImagePickerControllerDelegateImpl extends NSObject implements UIImagePic return super.new(); } - private _callback: (result?: imageSource.ImageSource) => void; + private _callback: (result?) => void; private _width: number; private _height: number; private _keepAspectRatio: boolean; - public initWithCallback(callback: (result?: imageSource.ImageSource) => void): UIImagePickerControllerDelegateImpl { + public initWithCallback(callback: (result?) => void): UIImagePickerControllerDelegateImpl { this._callback = callback; return this; } - public initWithCallbackAndOptions(callback: (result?: imageSource.ImageSource) => void, options?): UIImagePickerControllerDelegateImpl { + public initWithCallbackAndOptions(callback: (result?) => void, options?): UIImagePickerControllerDelegateImpl { this._callback = callback; if (options) { this._width = options.width; this._height = options.height; + this._keepAspectRatio = types.isNullOrUndefined(options.keepAspectRatio) ? true : options.keepAspectRatio; } return this; @@ -40,6 +40,8 @@ class UIImagePickerControllerDelegateImpl extends NSObject implements UIImagePic if (this._width || this._height) { var newSize = null; if (this._keepAspectRatio) { + var common: typeof cameraCommonModule = require("./camera-common"); + var aspectSafeSize = common.getAspectSafeDimensions(source.size.width, source.size.height, this._width, this._height); newSize = CGSizeMake(aspectSafeSize.width, aspectSafeSize.height); } @@ -52,6 +54,8 @@ class UIImagePickerControllerDelegateImpl extends NSObject implements UIImagePic UIGraphicsEndImageContext(); } + var imageSource: typeof imageSourceModule = require("image-source"); + var imageSourceResult = image ? imageSource.fromNativeSource(image) : imageSource.fromNativeSource(source); if (this._callback) { @@ -71,8 +75,8 @@ class UIImagePickerControllerDelegateImpl extends NSObject implements UIImagePic var listener; -export var takePicture = function (options?: definition.CameraOptions): Promise { - return new Promise((resolve, reject) => { +export var takePicture = function (options): Promise { + return new Promise((resolve, reject) => { listener = null; var imagePickerController = new UIImagePickerController(); var reqWidth = 0; @@ -101,6 +105,8 @@ export var takePicture = function (options?: definition.CameraOptions): Promise< imagePickerController.modalPresentationStyle = UIModalPresentationStyle.UIModalPresentationCurrentContext; + var frame: typeof frameModule = require("ui/frame"); + var topMostFrame = frame.topmost(); if (topMostFrame) { var viewController: UIViewController = topMostFrame.currentPage && topMostFrame.currentPage.ios; diff --git a/file-system/file-system-access.android.ts b/file-system/file-system-access.android.ts index 5fd9e4ed1..383553d99 100644 --- a/file-system/file-system-access.android.ts +++ b/file-system/file-system-access.android.ts @@ -1,6 +1,6 @@ import textModule = require("text"); -import types = require("utils/types"); import utils = require("utils/utils"); +import * as typesModule from "utils/types"; export class FileSystemAccess { private _pathSeparator = java.io.File.separator.toString(); @@ -194,6 +194,8 @@ export class FileSystemAccess { public readText(path: string, onError?: (error: any) => any, encoding?: any) { try { + var types: typeof typesModule = require("utils/types"); + var javaFile = new java.io.File(path); var stream = new java.io.FileInputStream(javaFile); diff --git a/file-system/file-system-access.ios.ts b/file-system/file-system-access.ios.ts index b38650089..4e8bfd049 100644 --- a/file-system/file-system-access.ios.ts +++ b/file-system/file-system-access.ios.ts @@ -1,5 +1,5 @@ -import utilsModule = require("utils/utils"); -import textModule = require("text"); +import textModule = require("text"); +import * as utilsModule from "utils/utils"; // TODO: Implement all the APIs receiving callback using async blocks // TODO: Check whether we need try/catch blocks for the iOS implementation @@ -161,8 +161,10 @@ export class FileSystemAccess { } public concatPath(left: string, right: string): string { + var utils: typeof utilsModule = require("utils/utils"); + // TODO: This probably is not efficient, we may try concatenation with the "/" character - var nsArray = utilsModule.ios.collections.jsArrayToNSArray([left, right]); + var nsArray = utils.ios.collections.jsArrayToNSArray([left, right]); var nsString = NSString.pathWithComponents(nsArray); return nsString.toString(); diff --git a/http/http-request.android.ts b/http/http-request.android.ts index e32469af3..2535fa2d6 100644 --- a/http/http-request.android.ts +++ b/http/http-request.android.ts @@ -1,13 +1,13 @@ /** * Android specific http request implementation. */ -import imageSource = require("image-source"); import types = require("utils/types"); -import utils = require("utils/utils"); +import * as utilsModule from "utils/utils"; +import * as imageSourceModule from "image-source"; +import * as platformModule from "platform"; // this is imported for definition purposes only import http = require("http"); -import platform = require("platform"); var requestIdCounter = 0; var pendingRequests = {}; @@ -51,9 +51,15 @@ function onRequestComplete(requestId: number, result: com.tns.Async.Http.Request throw new Error("Response content may not be converted to string"); } }, - toJSON: () => { return utils.parseJSON(result.responseAsString); }, + toJSON: () => { + var utils: typeof utilsModule = require("utils/utils"); + + return utils.parseJSON(result.responseAsString); + }, toImage: () => { - return new Promise((resolveImage, rejectImage) => { + var imageSource: typeof imageSourceModule = require("image-source"); + + return new Promise((resolveImage, rejectImage) => { if (result.responseAsImage != null) { resolveImage(imageSource.fromNativeSource(result.responseAsImage)); } @@ -98,6 +104,8 @@ function buildJavaOptions(options: http.HttpRequestOptions) { javaOptions.headers = arrayList; } + var platform: typeof platformModule = require("platform"); + // pass the maximum available image size to the request options in case we need a bitmap conversion var screen = platform.screen.mainScreen; javaOptions.screenWidth = screen.widthPixels; diff --git a/http/http-request.ios.ts b/http/http-request.ios.ts index ca1827d7b..5fcbb310b 100644 --- a/http/http-request.ios.ts +++ b/http/http-request.ios.ts @@ -2,9 +2,9 @@ * iOS specific http request implementation. */ import http = require("http"); -import imageSource = require("image-source"); -import types = require("utils/types"); -import utils = require("utils/utils"); +import * as typesModule from "utils/types"; +import * as imageSourceModule from "image-source"; +import * as utilsModule from "utils/utils"; var GET = "GET"; var USER_AGENT_HEADER = "User-Agent"; @@ -14,6 +14,8 @@ export function request(options: http.HttpRequestOptions): Promise((resolve, reject) => { try { + var types: typeof typesModule = require("utils/types"); + var sessionConfig = NSURLSessionConfiguration.defaultSessionConfiguration(); var queue = NSOperationQueue.mainQueue(); var session = NSURLSession.sessionWithConfigurationDelegateDelegateQueue( @@ -61,9 +63,13 @@ export function request(options: http.HttpRequestOptions): Promise { return NSDataToString(data); }, toJSON: () => { + var utils: typeof utilsModule = require("utils/utils"); + return utils.parseJSON(NSDataToString(data)); }, toImage: () => { + var imageSource: typeof imageSourceModule = require("image-source"); + if (UIImage.imageWithData["async"]) { return UIImage.imageWithData["async"](UIImage, [data]) .then(image => { @@ -77,7 +83,7 @@ export function request(options: http.HttpRequestOptions): Promise((resolveImage, rejectImage) => { + return new Promise((resolveImage, rejectImage) => { var img = imageSource.fromData(data); if (img instanceof imageSource.ImageSource) { resolveImage(img); diff --git a/image-source/image-source-common.ts b/image-source/image-source-common.ts index 06a56d203..1607ec044 100644 --- a/image-source/image-source-common.ts +++ b/image-source/image-source-common.ts @@ -1,5 +1,5 @@ -import http = require("http"); -import utils = require("utils/utils"); +import utils = require("utils/utils"); +import * as httpModule from "http"; // This is used for definition purposes only, it does not generate JavaScript for it. import definition = require("image-source"); @@ -30,6 +30,7 @@ export function fromNativeSource(source: any): definition.ImageSource { } export function fromUrl(url: string): Promise { + var http: typeof httpModule = require("http"); return http.getImage(url); } diff --git a/image-source/image-source.android.ts b/image-source/image-source.android.ts index 50506e2a7..4ed6ffb0b 100644 --- a/image-source/image-source.android.ts +++ b/image-source/image-source.android.ts @@ -1,9 +1,9 @@ import types = require("utils/types"); -import fs = require("file-system"); import definition = require("image-source"); import common = require("./image-source-common"); -import enums = require("ui/enums"); -import utils = require("utils/utils"); +import * as utilsModule from "utils/utils"; +import * as fileSystemModule from "file-system"; +import * as enumsModule from "ui/enums"; global.moduleMerge(common, exports); @@ -14,6 +14,8 @@ export class ImageSource implements definition.ImageSource { public loadFromResource(name: string): boolean { this.android = null; + var utils: typeof utilsModule = require("utils/utils"); + var res = utils.ad.getApplicationContext().getResources(); if (res) { var identifier: number = res.getIdentifier(name, 'drawable', utils.ad.getApplication().getPackageName()); @@ -30,6 +32,8 @@ export class ImageSource implements definition.ImageSource { } public loadFromFile(path: string): boolean { + var fs: typeof fileSystemModule = require("file-system"); + var fileName = types.isString(path) ? path.trim() : ""; if (fileName.indexOf("~/") === 0) { fileName = fs.path.join(fs.knownFolders.currentApp().path, fileName.replace("~/", "")); @@ -108,6 +112,8 @@ export class ImageSource implements definition.ImageSource { } function getTargetFromat(format: string): android.graphics.Bitmap.CompressFormat { + var enums: typeof enumsModule = require("ui/enums"); + switch (format) { case enums.ImageFormat.jpeg: return android.graphics.Bitmap.CompressFormat.JPEG; diff --git a/location/location-common.ts b/location/location-common.ts index e8413c7e1..d18d3f2b4 100644 --- a/location/location-common.ts +++ b/location/location-common.ts @@ -1,6 +1,6 @@ -import timer = require("timer"); -//import locationManagerModule = require("location/location-manager"); +//import locationManagerModule = require("location/location-manager"); import defModule = require("location"); +import * as timerModule from "timer"; var defaultGetLocationTimeout = 20000; @@ -54,6 +54,9 @@ export var getLocation = function (options?: defModule.Options): Promise new Date().valueOf()) { diff --git a/location/location.ios.ts b/location/location.ios.ts index 6b5b6b85b..5172ca72b 100644 --- a/location/location.ios.ts +++ b/location/location.ios.ts @@ -1,5 +1,4 @@ -import enums = require("ui/enums"); -import locationModule = require("location"); +import locationModule = require("location"); import common = require("./location-common"); global.moduleMerge(common, exports); @@ -123,6 +122,8 @@ export class LocationManager implements locationModule.LocationManager { constructor() { //super(); + var enums = require("ui/enums"); + this.desiredAccuracy = enums.Accuracy.any; this.updateDistance = kCLDistanceFilterNone; var iosLocManager = new CLLocationManager(); diff --git a/platform/platform.android.ts b/platform/platform.android.ts index 148d5bcab..7025b94d0 100644 --- a/platform/platform.android.ts +++ b/platform/platform.android.ts @@ -1,7 +1,7 @@ /* tslint:disable:class-name */ import definition = require("platform"); -import enums = require("ui/enums"); import utils = require("utils/utils"); +import * as enumsModule from "ui/enums"; export module platformNames { export var android = "Android"; @@ -60,6 +60,7 @@ export class device implements definition.device { static get deviceType(): string { if (!device._deviceType) { var dips = Math.min(screen.mainScreen.widthPixels, screen.mainScreen.heightPixels) / screen.mainScreen.scale; + var enums: typeof enumsModule = require("ui/enums"); // If the device has more than 600 dips it is considered to be a tablet. if (dips >= device.MIN_TABLET_PIXELS) { diff --git a/platform/platform.ios.ts b/platform/platform.ios.ts index d5e0c3a32..c7cf1815d 100644 --- a/platform/platform.ios.ts +++ b/platform/platform.ios.ts @@ -1,6 +1,5 @@ /* tslint:disable:class-name */ import definition = require("platform"); -import enums = require("ui/enums"); export module platformNames { export var android = "Android"; @@ -51,6 +50,8 @@ export class device implements definition.device { static get deviceType(): string { if (!device._deviceType) { + var enums = require("ui/enums"); + if (UIDevice.currentDevice().userInterfaceIdiom === UIUserInterfaceIdiom.UIUserInterfaceIdiomPhone) { device._deviceType = enums.DeviceType.Phone; } diff --git a/trace/trace.ts b/trace/trace.ts index 7d8173771..9cafde5d3 100644 --- a/trace/trace.ts +++ b/trace/trace.ts @@ -1,5 +1,5 @@ import definition = require("trace"); -import types = require("utils/types"); +import * as typesModule from "utils/types"; var _enabled = false; var _categories = {}; @@ -137,6 +137,8 @@ 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 dd680fdb6..3c1c7cfa8 100644 --- a/ui/action-bar/action-bar-common.ts +++ b/ui/action-bar/action-bar-common.ts @@ -5,8 +5,8 @@ import dependencyObservable = require("ui/core/dependency-observable"); import enums = require("ui/enums"); import proxy = require("ui/core/proxy"); import view = require("ui/core/view"); -import style = require("../styling/style"); -import observable = require("ui/core/dependency-observable"); +import * as styleModule from "../styling/style"; +import * as dependencyObservableModule from "ui/core/dependency-observable"; var ACTION_ITEMS = "actionItems"; @@ -65,6 +65,9 @@ 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"); + if (this._titleView) { this._removeView(this._titleView); this._titleView.style._resetValue(style.horizontalAlignmentProperty, observable.ValueSource.Inherited); diff --git a/ui/action-bar/action-bar.android.ts b/ui/action-bar/action-bar.android.ts index 229124511..f7e8aa55a 100644 --- a/ui/action-bar/action-bar.android.ts +++ b/ui/action-bar/action-bar.android.ts @@ -1,13 +1,13 @@ import common = require("./action-bar-common"); -import trace = require("trace"); import frame = require("ui/frame"); import types = require("utils/types"); -import utils = require("utils/utils"); -import imageSource = require("image-source"); import enums = require("ui/enums"); import application = require("application"); import dts = require("ui/action-bar"); import view = require("ui/core/view"); +import * as traceModule from "trace"; +import * as utilsModule from "utils/utils"; +import * as imageSourceModule from "image-source"; const R_ID_HOME = 0x0102002c; const ACTION_ITEM_ID_OFFSET = 1000; @@ -301,6 +301,9 @@ export class ActionBar extends common.ActionBar { if (this._toolbar && child._nativeView) { this._toolbar.removeView(child._nativeView); + + var trace: typeof traceModule = require("trace"); + trace.notifyEvent(child, "childInLayoutRemovedFromNativeVisualTree"); } } @@ -311,6 +314,8 @@ function getDrawableOrResourceId(icon: string, resources: android.content.res.Re return undefined; } + var utils: typeof utilsModule = require("utils/utils"); + if (icon.indexOf(utils.RESOURCE_PREFIX) === 0) { var resourceId: number = resources.getIdentifier(icon.substr(utils.RESOURCE_PREFIX.length), 'drawable', application.android.packageName); if (resourceId > 0) { @@ -319,6 +324,9 @@ function getDrawableOrResourceId(icon: string, resources: android.content.res.Re } else { var drawable: android.graphics.drawable.BitmapDrawable; + + var imageSource: typeof imageSourceModule = require("image-source"); + var is = imageSource.fromFileOrResource(icon); if (is) { drawable = new android.graphics.drawable.BitmapDrawable(is.android); diff --git a/ui/activity-indicator/activity-indicator.android.ts b/ui/activity-indicator/activity-indicator.android.ts index d1202f6d2..3fca5407f 100644 --- a/ui/activity-indicator/activity-indicator.android.ts +++ b/ui/activity-indicator/activity-indicator.android.ts @@ -1,7 +1,7 @@ import aiCommon = require("./activity-indicator-common"); import dependencyObservable = require("ui/core/dependency-observable"); import proxy = require("ui/core/proxy"); -import enums = require("ui/enums"); +import * as enumsModule from "ui/enums"; function onBusyPropertyChanged(data: dependencyObservable.PropertyChangeData) { var indicator = data.object; @@ -9,6 +9,8 @@ function onBusyPropertyChanged(data: dependencyObservable.PropertyChangeData) { return; } + var enums: typeof enumsModule = require("ui/enums"); + if (indicator.visibility === enums.Visibility.visible) { indicator.android.setVisibility(data.newValue ? android.view.View.VISIBLE : android.view.View.INVISIBLE); } diff --git a/ui/animation/animation-common.ts b/ui/animation/animation-common.ts index 00fd63fbf..2272a4deb 100644 --- a/ui/animation/animation-common.ts +++ b/ui/animation/animation-common.ts @@ -1,6 +1,6 @@ import definition = require("ui/animation"); import viewModule = require("ui/core/view"); -import trace = require("trace"); +import * as traceModule from "trace"; export module Properties { export var opacity = "opacity"; @@ -56,6 +56,8 @@ export class Animation implements definition.Animation { throw new Error("No animation definitions specified"); } + var trace : typeof traceModule = require("trace"); + trace.write("Analyzing " + animationDefinitions.length + " animation definitions...", trace.categories.Animation); this._propertyAnimations = new Array(); var i = 0; diff --git a/ui/builder/builder.ts b/ui/builder/builder.ts index 573ec2d20..94fa4ed3b 100644 --- a/ui/builder/builder.ts +++ b/ui/builder/builder.ts @@ -9,6 +9,7 @@ import {platformNames, device} from "platform"; import {LoadOptions} from "ui/builder"; import {Page} from "ui/page"; import {resolveFileName} from "file-system/file-name-resolver"; +import * as traceModule from "trace"; export function parse(value: string | Template, context: any): View { if (isString(value)) { @@ -87,6 +88,8 @@ function loadCustomComponent(componentPath: string, componentName?: string, attr if (parentPage) { parentPage.addCssFile(cssFilePath); } else { + var trace: typeof traceModule = require("trace"); + trace.write("CSS file found but no page specified. Please specify page in the options!", trace.categories.Error, trace.messageType.error); } } @@ -185,7 +188,7 @@ namespace xml2ui { var xmlParser = new xml.XmlParser((args: xml.ParserEvent) => { try { this.next(args); - } catch(e) { + } catch (e) { throw this.error(e, args.position); } }, (e, p) => { @@ -219,7 +222,7 @@ namespace xml2ui { private currentPlatformContext: string; public parse(args: xml.ParserEvent) { - if (args.eventType === xml.ParserEventType.StartElement) { + if (args.eventType === xml.ParserEventType.StartElement) { if (PlatformFilter.isPlatform(args.elementName)) { if (this.currentPlatformContext) { @@ -269,7 +272,7 @@ namespace xml2ui { this.args.forEach((args: xml.ParserEvent) => { try { this.next(args); - } catch(e) { + } catch (e) { throw this.error(e, args.position); } }); @@ -293,7 +296,7 @@ namespace xml2ui { private state: XmlStateConsumer; constructor(state: XmlStateConsumer) { - this.state = state; + this.state = state; } parse(args: xml.ParserEvent) { @@ -542,5 +545,5 @@ namespace xml2ui { name: string; items?: Array; } - } + } } diff --git a/ui/builder/component-builder.ts b/ui/builder/component-builder.ts index f408f32ee..de0ee391d 100644 --- a/ui/builder/component-builder.ts +++ b/ui/builder/component-builder.ts @@ -1,11 +1,11 @@ import {isString, isDefined, isFunction} from "utils/types"; -import {device} from "platform"; import {Page} from "ui/page"; import {View, isEventOrGesture} from "ui/core/view"; import {ComponentModule} from "ui/builder/component-builder"; import {File, Folder, path, knownFolders} from "file-system"; import {getBindingOptions, bindingConstants} from "./binding-builder"; -import {ScopeError} from "utils/debug"; +import * as debugModule from "utils/debug"; +import * as platformModule from "platform"; //the imports below are needed for special property registration import "ui/layouts/dock-layout"; @@ -61,7 +61,8 @@ export function getComponentModule(elementName: string, namespace: string, attri // Create instance of the component. instance = new instanceType(); } catch (ex) { - throw new ScopeError(ex, "Module '" + moduleId + "' not found for element '" + (namespace ? namespace + ":" : "") + elementName + "'."); + var debug: typeof debugModule = require("utils/debug"); + throw new debug.ScopeError(ex, "Module '" + moduleId + "' not found for element '" + (namespace ? namespace + ":" : "") + elementName + "'."); } if (attributes) { @@ -107,7 +108,10 @@ export function getComponentModule(elementName: string, namespace: string, attri if (attr.indexOf(":") !== -1) { var platformName = attr.split(":")[0].trim(); - if (platformName.toLowerCase() === device.os.toLowerCase()) { + + var platform: typeof platformModule = require("platform"); + + if (platformName.toLowerCase() === platform.device.os.toLowerCase()) { attr = attr.split(":")[1].trim(); } else { continue; diff --git a/ui/button/button-common.ts b/ui/button/button-common.ts index 223ff6047..5f7192209 100644 --- a/ui/button/button-common.ts +++ b/ui/button/button-common.ts @@ -4,8 +4,8 @@ import definition = require("ui/button"); import proxy = require("ui/core/proxy"); import formattedString = require("text/formatted-string"); import observable = require("data/observable"); -import weakEvents = require("ui/core/weak-event-listener"); -import enums = require("ui/enums"); +import * as weakEventListenerModule from "ui/core/weak-event-listener"; +import * as enumsModule from "ui/enums"; var textProperty = new dependencyObservable.Property( "text", @@ -65,6 +65,8 @@ 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"); + if (this.formattedText) { weakEvents.removeWeakEventListener(this.formattedText, observable.Observable.propertyChangeEvent, this.onFormattedTextChanged, this); } @@ -126,6 +128,8 @@ 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"); + v.style.whiteSpace = data.newValue ? enums.WhiteSpace.normal : enums.WhiteSpace.nowrap; } diff --git a/ui/button/button.android.ts b/ui/button/button.android.ts index 163e1b04a..3a98dd718 100644 --- a/ui/button/button.android.ts +++ b/ui/button/button.android.ts @@ -1,7 +1,5 @@ import common = require("./button-common"); import utils = require("utils/utils") -import dependencyObservable = require("ui/core/dependency-observable"); -import proxy = require("ui/core/proxy"); global.moduleMerge(common, exports); diff --git a/ui/button/button.ios.ts b/ui/button/button.ios.ts index e7c78abc9..7e8172ba6 100644 --- a/ui/button/button.ios.ts +++ b/ui/button/button.ios.ts @@ -1,7 +1,5 @@ import common = require("./button-common"); import stateChanged = require("ui/core/control-state-change"); -import dependencyObservable = require("ui/core/dependency-observable"); -import proxy = require("ui/core/proxy"); class TapHandlerImpl extends NSObject { private _owner: WeakRef