diff --git a/nativescript-angular/application.ts b/nativescript-angular/application.ts index 1e2cb83c7..64d0f7e70 100644 --- a/nativescript-angular/application.ts +++ b/nativescript-angular/application.ts @@ -6,14 +6,14 @@ import './polyfills/array'; import {rendererLog, rendererError} from "./trace"; import {SanitizationService} from '@angular/core/src/security'; import {isPresent, Type, print} from '@angular/core/src/facade/lang'; -import {ReflectiveInjector, reflector, coreLoadAndBootstrap, createPlatform, - getPlatform, assertPlatform, ComponentRef, PlatformRef, PLATFORM_DIRECTIVES, PLATFORM_PIPES} from '@angular/core'; +import {ReflectiveInjector, coreLoadAndBootstrap, createPlatform, + getPlatform, assertPlatform, ComponentRef, PlatformRef, PLATFORM_DIRECTIVES, PLATFORM_PIPES} from '@angular/core'; import {bind, provide, Provider} from '@angular/core/src/di'; import {RootRenderer, Renderer} from '@angular/core/src/render/api'; import {NativeScriptRootRenderer, NativeScriptRenderer} from './renderer'; import {NativeScriptDomAdapter, NativeScriptElementSchemaRegistry, NativeScriptSanitizationService} from './dom_adapter'; -import {ElementSchemaRegistry, XHR, COMPILER_PROVIDERS} from '@angular/compiler'; +import {ElementSchemaRegistry, XHR, COMPILER_PROVIDERS, CompilerConfig} from '@angular/compiler'; import {FileSystemXHR} from './xhr'; import {Parse5DomAdapter} from '@angular/platform-server/src/parse5_adapter'; import {ExceptionHandler} from '@angular/core/src/facade/exception_handler'; @@ -21,7 +21,6 @@ import {APPLICATION_COMMON_PROVIDERS} from '@angular/core/src/application_common import {PLATFORM_COMMON_PROVIDERS} from '@angular/core/src/platform_common_providers'; import {COMMON_DIRECTIVES, COMMON_PIPES, FORM_PROVIDERS} from "@angular/common"; import {NS_DIRECTIVES} from './directives'; -import {ReflectionCapabilities} from '@angular/core/src/reflection/reflection_capabilities'; import {Page} from 'ui/page'; import {TextView} from 'ui/text-view'; @@ -40,12 +39,27 @@ export interface AppOptions { } class ConsoleLogger { - log = print; - logError = print; - logGroup = print; - logGroupEnd() {} + log = print; + logError = print; + logGroup = print; + logGroupEnd() { } } +// See: https://github.com/angular/angular/commit/1745366530266d298306b995ecd23dabd8569e28 +export const NS_COMPILER_PROVIDERS: ProviderArray = [ + COMPILER_PROVIDERS, + provide(CompilerConfig, { + useFactory: (platformDirectives: any[], platformPipes: any[]) => { + return new CompilerConfig({ platformDirectives, platformPipes }); + }, + deps: [PLATFORM_DIRECTIVES, PLATFORM_PIPES] + }), + provide(XHR, { useClass: FileSystemXHR }), + provide(PLATFORM_PIPES, { useValue: COMMON_PIPES, multi: true }), + provide(PLATFORM_DIRECTIVES, { useValue: COMMON_DIRECTIVES, multi: true }), + provide(PLATFORM_DIRECTIVES, { useValue: NS_DIRECTIVES, multi: true }) +]; + export function bootstrap(appComponentType: any, customProviders: ProviderArray = null): Promise> { NativeScriptDomAdapter.makeCurrent(); @@ -57,12 +71,11 @@ export function bootstrap(appComponentType: any, let defaultAppProviders: ProviderArray = [ APPLICATION_COMMON_PROVIDERS, FORM_PROVIDERS, - provide(PLATFORM_PIPES, { useValue: COMMON_PIPES, multi: true }), - provide(PLATFORM_DIRECTIVES, { useValue: COMMON_DIRECTIVES, multi: true }), - provide(PLATFORM_DIRECTIVES, { useValue: NS_DIRECTIVES, multi: true }), - provide(ExceptionHandler, { useFactory: () => { - return new ExceptionHandler(new ConsoleLogger(), true) - }, deps: [] }), + provide(ExceptionHandler, { + useFactory: () => { + return new ExceptionHandler(new ConsoleLogger(), true) + }, deps: [] + }), defaultPageProvider, defaultDeviceProvider, @@ -72,7 +85,7 @@ export function bootstrap(appComponentType: any, provide(Renderer, { useClass: NativeScriptRenderer }), provide(SanitizationService, { useClass: NativeScriptSanitizationService }), provide(ElementSchemaRegistry, { useClass: NativeScriptElementSchemaRegistry }), - COMPILER_PROVIDERS, + NS_COMPILER_PROVIDERS, provide(ElementSchemaRegistry, { useClass: NativeScriptElementSchemaRegistry }), provide(XHR, { useClass: FileSystemXHR }), ] @@ -82,14 +95,14 @@ export function bootstrap(appComponentType: any, appProviders.push(customProviders); } - var platform = getPlatform(); + var platform = getPlatform(); if (!isPresent(platform)) { platform = createPlatform(ReflectiveInjector.resolveAndCreate(platformProviders)); } - - reflector.reflectionCapabilities = new ReflectionCapabilities(); + + // reflector.reflectionCapabilities = new ReflectionCapabilities(); var appInjector = ReflectiveInjector.resolveAndCreate(appProviders, platform.injector); - return coreLoadAndBootstrap(appInjector, appComponentType); + return coreLoadAndBootstrap(appComponentType, appInjector); } export function nativeScriptBootstrap(appComponentType: any, customProviders?: ProviderArray, appOptions?: AppOptions): Promise> { @@ -105,7 +118,7 @@ export function nativeScriptBootstrap(appComponentType: any, customProviders?: P page.actionBarHidden = appOptions.startPageActionBarHidden; } - let onLoadedHandler = function(args) { + let onLoadedHandler = function (args) { page.off('loaded', onLoadedHandler); //profiling.stop('application-start'); rendererLog('Page loaded'); diff --git a/nativescript-angular/package.json b/nativescript-angular/package.json index 36c7bad2b..3620617b8 100644 --- a/nativescript-angular/package.json +++ b/nativescript-angular/package.json @@ -19,13 +19,13 @@ }, "dependencies": { "nativescript-intl": "^0.0.2", - "@angular/common": "2.0.0-rc.1", - "@angular/compiler": "2.0.0-rc.1", - "@angular/core": "2.0.0-rc.1", - "@angular/platform-browser": "2.0.0-rc.1", - "@angular/platform-browser-dynamic": "2.0.0-rc.1", - "@angular/platform-server": "2.0.0-rc.1", - "@angular/router-deprecated": "2.0.0-rc.1", + "@angular/common": "2.0.0-rc.2", + "@angular/compiler": "2.0.0-rc.2", + "@angular/core": "2.0.0-rc.2", + "@angular/platform-browser": "2.0.0-rc.2", + "@angular/platform-browser-dynamic": "2.0.0-rc.2", + "@angular/platform-server": "2.0.0-rc.2", + "@angular/router-deprecated": "2.0.0-rc.2", "rxjs": "5.0.0-beta.6", "zone.js": "^0.6.12", "reflect-metadata": "^0.1.3", diff --git a/nativescript-angular/renderer.ts b/nativescript-angular/renderer.ts index 7d6c46aa5..4842bb3c0 100644 --- a/nativescript-angular/renderer.ts +++ b/nativescript-angular/renderer.ts @@ -5,6 +5,9 @@ import { RenderComponentType, RenderDebugInfo } from '@angular/core/src/render/api'; +import { AnimationKeyframe } from '@angular/core/src/animation/animation_keyframe'; +import { AnimationPlayer } from '@angular/core/src/animation/animation_player'; +import { AnimationStyles } from '@angular/core/src/animation/animation_styles'; import {APP_ROOT_VIEW, DEVICE} from "./platform-providers"; import {isBlank} from '@angular/core/src/facade/lang'; import {CONTENT_ATTR} from '@angular/platform-browser/src/dom/dom_renderer'; @@ -217,13 +220,17 @@ export class NativeScriptRenderer extends Renderer { let zonedCallback = (global).Zone.current.wrap(callback); renderElement.on(eventName, zonedCallback); if (eventName === View.loadedEvent && renderElement.isLoaded) { - const notifyData = {eventName: View.loadedEvent, object: renderElement}; + const notifyData = { eventName: View.loadedEvent, object: renderElement }; zonedCallback(notifyData); } return () => renderElement.off(eventName, zonedCallback); } public listenGlobal(target: string, eventName: string, callback: Function): Function { - throw new Error('Not implemented.'); + throw new Error('NativeScriptRenderer.listenGlobal() - Not implemented.'); + } + + public animate(element: any, startingStyles: AnimationStyles, keyframes: AnimationKeyframe[], duration: number, delay: number, easing: string): AnimationPlayer { + throw new Error("NativeScriptRenderer.animate() - Not implemented"); } } diff --git a/nativescript-angular/router/ns-location-strategy.ts b/nativescript-angular/router/ns-location-strategy.ts index 4744263ae..402a93d5a 100644 --- a/nativescript-angular/router/ns-location-strategy.ts +++ b/nativescript-angular/router/ns-location-strategy.ts @@ -30,8 +30,14 @@ export class NSLocationStrategy extends LocationStrategy { return internal; } + pushState(state: any, title: string, url: string, queryParams: string): void { routerLog(`NSLocationStrategy.pushState state: ${state}, title: ${title}, url: ${url}, queryParams: ${queryParams}`); + this.pushStateInternal(state, title, url, queryParams); + } + + pushStateInternal(state: any, title: string, url: string, queryParams: string): void { + routerLog(`NSLocationStrategy.pushState state: ${state}, title: ${title}, url: ${url}, queryParams: ${queryParams}`); let isNewPage = this._isPageNavigatingForward; this._isPageNavigatingForward = false; @@ -47,7 +53,14 @@ export class NSLocationStrategy extends LocationStrategy { replaceState(state: any, title: string, url: string, queryParams: string): void { routerLog(`NSLocationStrategy.replaceState state: ${state}, title: ${title}, url: ${url}, queryParams: ${queryParams}`); - throw new Error("Not implemented"); + + if (this.states.length > 0) { + let oldState = this.states.pop(); + routerLog(`NSLocationStrategy.replaceState POP state: ${oldState.state}, title: ${oldState.title}, url: ${oldState.url}, queryParams: ${oldState.queryParams}`); + this.callPopState(oldState, true); + } + + this.pushStateInternal(state, title, url, queryParams); } forward(): void { diff --git a/nativescript-angular/value-accessors/base-value-accessor.ts b/nativescript-angular/value-accessors/base-value-accessor.ts index ad9b185e7..f8aac8f47 100644 --- a/nativescript-angular/value-accessors/base-value-accessor.ts +++ b/nativescript-angular/value-accessors/base-value-accessor.ts @@ -1,5 +1,5 @@ import {View} from "ui/core/view"; -import {ControlValueAccessor} from '@angular/common/src/forms/directives/control_value_accessor'; +import {ControlValueAccessor} from '@angular/common/src/forms-deprecated/directives/control_value_accessor'; export class BaseValueAccessor implements ControlValueAccessor { constructor(public view: TView) { } diff --git a/nativescript-angular/value-accessors/checked-value-accessor.ts b/nativescript-angular/value-accessors/checked-value-accessor.ts index 0a46466ba..7bb4f144b 100644 --- a/nativescript-angular/value-accessors/checked-value-accessor.ts +++ b/nativescript-angular/value-accessors/checked-value-accessor.ts @@ -1,5 +1,5 @@ import {Directive, ElementRef, Renderer, Self, forwardRef, provide} from '@angular/core'; -import {NG_VALUE_ACCESSOR} from '@angular/common/src/forms/directives/control_value_accessor'; +import {NG_VALUE_ACCESSOR} from '@angular/common/src/forms-deprecated/directives/control_value_accessor'; import {isBlank} from '@angular/core/src/facade/lang'; import {BaseValueAccessor} from './base-value-accessor'; import {Switch} from "ui/switch"; @@ -18,7 +18,7 @@ const CHECKED_VALUE_ACCESSOR = provide(NG_VALUE_ACCESSOR, { useExisting: forward @Directive({ selector: 'Switch[ngModel]', host: { '(checkedChange)': 'onChange($event.value)' }, - bindings: [CHECKED_VALUE_ACCESSOR] + providers: [CHECKED_VALUE_ACCESSOR] }) export class CheckedValueAccessor extends BaseValueAccessor { onTouched = () => { }; diff --git a/nativescript-angular/value-accessors/date-value-accessor.ts b/nativescript-angular/value-accessors/date-value-accessor.ts index 5d1c237dc..634d82b53 100644 --- a/nativescript-angular/value-accessors/date-value-accessor.ts +++ b/nativescript-angular/value-accessors/date-value-accessor.ts @@ -1,5 +1,5 @@ import {Directive, ElementRef, Renderer, Self, forwardRef, provide} from '@angular/core'; -import {NG_VALUE_ACCESSOR} from '@angular/common/src/forms/directives/control_value_accessor'; +import {NG_VALUE_ACCESSOR} from '@angular/common/src/forms-deprecated/directives/control_value_accessor'; import {isBlank, isDate} from '@angular/core/src/facade/lang'; import {BaseValueAccessor} from './base-value-accessor'; import {DatePicker} from "ui/date-picker"; @@ -18,7 +18,7 @@ const DATE_VALUE_ACCESSOR = provide(NG_VALUE_ACCESSOR, { useExisting: forwardRef @Directive({ selector: 'DatePicker[ngModel]', host: { '(dateChange)': 'onChange($event.value)' }, - bindings: [DATE_VALUE_ACCESSOR] + providers: [DATE_VALUE_ACCESSOR] }) export class DateValueAccessor extends BaseValueAccessor { onTouched = () => { }; @@ -30,9 +30,12 @@ export class DateValueAccessor extends BaseValueAccessor { writeValue(value: any): void { var normalizedValue = isBlank(value) ? new Date() : value; if (!isDate(normalizedValue)) { - if (typeof normalizedValue === 'string' || typeof normalizedValue === 'number') { + if (typeof normalizedValue === 'string') { + normalizedValue = new Date(normalizedValue); + } else if (typeof normalizedValue === 'number') { normalizedValue = new Date(normalizedValue); } + if (!isDate(normalizedValue)) { normalizedValue = new Date(); } diff --git a/nativescript-angular/value-accessors/number-value-accessor.ts b/nativescript-angular/value-accessors/number-value-accessor.ts index 51dc035a8..455e41e7a 100644 --- a/nativescript-angular/value-accessors/number-value-accessor.ts +++ b/nativescript-angular/value-accessors/number-value-accessor.ts @@ -1,5 +1,5 @@ import {Directive, ElementRef, Renderer, Self, forwardRef, provide} from '@angular/core'; -import {NG_VALUE_ACCESSOR} from '@angular/common/src/forms/directives/control_value_accessor'; +import {NG_VALUE_ACCESSOR} from '@angular/common/src/forms-deprecated/directives/control_value_accessor'; import {isBlank, isNumber} from '@angular/core/src/facade/lang'; import {BaseValueAccessor} from './base-value-accessor'; import {Slider} from "ui/slider"; @@ -18,7 +18,7 @@ const NUMBER_VALUE_ACCESSOR = provide(NG_VALUE_ACCESSOR, { useExisting: forwardR @Directive({ selector: 'Slider[ngModel]', host: { '(valueChange)': 'onChange($event.value)' }, - bindings: [NUMBER_VALUE_ACCESSOR] + providers: [NUMBER_VALUE_ACCESSOR] }) export class NumberValueAccessor extends BaseValueAccessor { onTouched = () => { }; diff --git a/nativescript-angular/value-accessors/selectedIndex-value-accessor.ts b/nativescript-angular/value-accessors/selectedIndex-value-accessor.ts index 04c387759..7d91f04ec 100644 --- a/nativescript-angular/value-accessors/selectedIndex-value-accessor.ts +++ b/nativescript-angular/value-accessors/selectedIndex-value-accessor.ts @@ -1,5 +1,5 @@ import {Directive, ElementRef, Renderer, Self, forwardRef, provide} from '@angular/core'; -import {NG_VALUE_ACCESSOR} from '@angular/common/src/forms/directives/control_value_accessor'; +import {NG_VALUE_ACCESSOR} from '@angular/common/src/forms-deprecated/directives/control_value_accessor'; import {isBlank, isNumber} from '@angular/core/src/facade/lang'; import {BaseValueAccessor} from './base-value-accessor'; import {View} from "ui/core/view"; @@ -21,7 +21,7 @@ export type SelectableView = {selectedIndex: number} & View; @Directive({ selector: 'SegmentedBar[ngModel], ListPicker[ngModel], TabView[ngModel]', host: { '(selectedIndexChange)': 'onChange($event.value)' }, - bindings: [SELECTED_INDEX_VALUE_ACCESSOR] + providers: [SELECTED_INDEX_VALUE_ACCESSOR] }) export class SelectedIndexValueAccessor extends BaseValueAccessor { onTouched = () => { }; diff --git a/nativescript-angular/value-accessors/text-value-accessor.ts b/nativescript-angular/value-accessors/text-value-accessor.ts index 8995e67d7..e7ea02c92 100644 --- a/nativescript-angular/value-accessors/text-value-accessor.ts +++ b/nativescript-angular/value-accessors/text-value-accessor.ts @@ -1,5 +1,5 @@ import {Directive, ElementRef, Renderer, Self, forwardRef, provide} from '@angular/core'; -import {NG_VALUE_ACCESSOR} from '@angular/common/src/forms/directives/control_value_accessor'; +import {NG_VALUE_ACCESSOR} from '@angular/common/src/forms-deprecated/directives/control_value_accessor'; import {isBlank} from '@angular/core/src/facade/lang'; import {BaseValueAccessor} from './base-value-accessor' import {View} from "ui/core/view"; @@ -20,7 +20,7 @@ export type TextView = {text: string} & View; @Directive({ selector: 'TextField[ngModel], TextView[ngModel], SearchBar[ngModel]', host: { '(textChange)': 'onChange($event.value)' }, - bindings: [TEXT_VALUE_ACCESSOR] + providers: [TEXT_VALUE_ACCESSOR] }) export class TextValueAccessor extends BaseValueAccessor { onTouched = () => { }; diff --git a/nativescript-angular/value-accessors/time-value-accessor.ts b/nativescript-angular/value-accessors/time-value-accessor.ts index 4f781903e..6b915f3c1 100644 --- a/nativescript-angular/value-accessors/time-value-accessor.ts +++ b/nativescript-angular/value-accessors/time-value-accessor.ts @@ -1,5 +1,5 @@ import {Directive, ElementRef, Renderer, Self, forwardRef, provide} from '@angular/core'; -import {NG_VALUE_ACCESSOR} from '@angular/common/src/forms/directives/control_value_accessor'; +import {NG_VALUE_ACCESSOR} from '@angular/common/src/forms-deprecated/directives/control_value_accessor'; import {isBlank, isDate} from '@angular/core/src/facade/lang'; import {BaseValueAccessor} from './base-value-accessor'; import {TimePicker} from "ui/time-picker"; @@ -18,7 +18,7 @@ const TIME_VALUE_ACCESSOR = provide(NG_VALUE_ACCESSOR, { useExisting: forwardRef @Directive({ selector: 'TimePicker[ngModel]', host: { '(timeChange)': 'onChange($event.value)' }, - bindings: [TIME_VALUE_ACCESSOR] + providers: [TIME_VALUE_ACCESSOR] }) export class TimeValueAccessor extends BaseValueAccessor { onTouched = () => { }; @@ -30,7 +30,9 @@ export class TimeValueAccessor extends BaseValueAccessor { writeValue(value: any): void { var normalizedValue = isBlank(value) ? new Date() : value; if (!isDate(normalizedValue)) { - if (typeof normalizedValue === 'string' || typeof normalizedValue === 'number') { + if (typeof normalizedValue === 'string') { + normalizedValue = new Date(normalizedValue); + } else if (typeof normalizedValue === 'number') { normalizedValue = new Date(normalizedValue); } if (!isDate(normalizedValue)) { diff --git a/ng-sample/package.json b/ng-sample/package.json index 889fb5f15..af4278fa3 100644 --- a/ng-sample/package.json +++ b/ng-sample/package.json @@ -23,16 +23,20 @@ }, "homepage": "https://github.com/NativeScript/template-hello-world", "dependencies": { - "tns-core-modules": ">=2.0.0 || >=2.1.0-2016 || >=2.0.0-angular-7", - "nativescript-angular": "^0.1.6", - "nativescript-intl": "^0.0.2", - "@angular/common": "2.0.0-rc.1", - "@angular/compiler": "2.0.0-rc.1", - "@angular/core": "2.0.0-rc.1", - "@angular/platform-browser": "2.0.0-rc.1", - "@angular/platform-browser-dynamic": "2.0.0-rc.1", - "@angular/platform-server": "2.0.0-rc.1", - "@angular/router-deprecated": "2.0.0-rc.1", + "tns-core-modules": ">=2.0.0 || >=2.1.0-2016 || 2.0.0-angular-7", + "nativescript-angular": "^0.1.6" + }, + "devDependencies": { + "nativescript-dev-typescript": "^0.3.1", + "nativescript-dev-webpack": "0.0.13", + "typescript": "^1.8.10", + "@angular/common": "2.0.0-rc.2", + "@angular/compiler": "2.0.0-rc.2", + "@angular/core": "2.0.0-rc.2", + "@angular/platform-browser": "2.0.0-rc.2", + "@angular/platform-browser-dynamic": "2.0.0-rc.2", + "@angular/platform-server": "2.0.0-rc.2", + "@angular/router-deprecated": "2.0.0-rc.2", "rxjs": "5.0.0-beta.6", "zone.js": "^0.6.12", "reflect-metadata": "^0.1.3", @@ -42,11 +46,6 @@ "url": "0.10.3", "shelljs": "^0.7.0" }, - "devDependencies": { - "nativescript-dev-typescript": "^0.3.1", - "nativescript-dev-webpack": "0.0.13", - "typescript": "^1.8.10" - }, "nativescript": { "id": "org.nativescript.ngsample", "tns-android": { diff --git a/tests/package.json b/tests/package.json index 69d74aa73..946b17bf1 100644 --- a/tests/package.json +++ b/tests/package.json @@ -5,7 +5,7 @@ "version": "2.0.0" }, "tns-ios": { - "version": "2.0.0" + "version": "2.0.1" } }, "name": "ngtests", @@ -27,23 +27,23 @@ "homepage": "http://nativescript.org", "dependencies": { "nativescript-unit-test-runner": "^0.3.3", - "tns-core-modules": "2.0.0-angular-7", + "tns-core-modules": ">=2.0.0-angular-7", "nativescript-angular": "^0.1.6", - "nativescript-intl": "^0.0.2", - "@angular/common": "2.0.0-rc.1", - "@angular/compiler": "2.0.0-rc.1", - "@angular/core": "2.0.0-rc.1", - "@angular/router-deprecated": "2.0.0-rc.1", - "@angular/platform-browser": "2.0.0-rc.1", - "@angular/platform-browser-dynamic": "2.0.0-rc.1", - "@angular/platform-server": "2.0.0-rc.1", - "reflect-metadata": "^0.1.3", + "@angular/common": "2.0.0-rc.2", + "@angular/compiler": "2.0.0-rc.2", + "@angular/core": "2.0.0-rc.2", + "@angular/platform-browser": "2.0.0-rc.2", + "@angular/platform-browser-dynamic": "2.0.0-rc.2", + "@angular/platform-server": "2.0.0-rc.2", + "@angular/router-deprecated": "2.0.0-rc.2", "rxjs": "5.0.0-beta.6", "zone.js": "^0.6.12", + "reflect-metadata": "^0.1.3", "parse5": "1.4.2", "punycode": "1.3.2", "querystring": "0.2.0", - "url": "0.10.3" + "url": "0.10.3", + "shelljs": "^0.7.0" }, "devDependencies": { "babel-traverse": "6.8.0",