diff --git a/CrossPlatformModules.csproj b/CrossPlatformModules.csproj
index ce25ffaa09..45e4754644 100644
--- a/CrossPlatformModules.csproj
+++ b/CrossPlatformModules.csproj
@@ -84,6 +84,9 @@
+
+
+
@@ -146,6 +149,8 @@
Designer
+
+
@@ -2096,6 +2101,9 @@
PreserveNewest
+
+ PreserveNewest
+
diff --git a/apps/navigation-events-demo/app.ts b/apps/navigation-events-demo/app.ts
new file mode 100644
index 0000000000..fb9b7b219e
--- /dev/null
+++ b/apps/navigation-events-demo/app.ts
@@ -0,0 +1,2 @@
+import application = require("application");
+application.start({ moduleName: "page1" });
diff --git a/apps/navigation-events-demo/package.json b/apps/navigation-events-demo/package.json
new file mode 100644
index 0000000000..d8e8323976
--- /dev/null
+++ b/apps/navigation-events-demo/package.json
@@ -0,0 +1,4 @@
+{
+ "name": "navigation-events-demo",
+ "main": "app.js"
+}
diff --git a/apps/navigation-events-demo/page1.ts b/apps/navigation-events-demo/page1.ts
new file mode 100644
index 0000000000..a2a15f9137
--- /dev/null
+++ b/apps/navigation-events-demo/page1.ts
@@ -0,0 +1,38 @@
+import {Frame, topmost} from "ui/frame";
+
+export function loaded(args) {
+ console.log("+++Page 1 - LOADED");
+ console.log(`backStack.length=${topmost().backStack.length}`);
+}
+
+export function unloaded(args) {
+ console.log("+++Page 1 - UNLOADED");
+ console.log(`backStack.length=${topmost().backStack.length}`);
+}
+
+export function navigatingTo(args) {
+ console.log(`+++Page 1 - navigatingTo(isBack: ${args.isBackNavigation})`);
+ console.log(`backStack.length=${topmost().backStack.length}`);
+}
+
+export function navigatedTo(args) {
+ console.log(`+++Page 1 - navigatedTo(isBack: ${args.isBackNavigation})`);
+ console.log(`backStack.length=${topmost().backStack.length}`);
+}
+
+export function navigatingFrom(args) {
+ console.log(`+++Page 1 - navigatingFrom(isBack: ${args.isBackNavigation})`);
+ console.log(`backStack.length=${topmost().backStack.length}`);
+}
+
+export function navigatedFrom(args) {
+ console.log(`+++Page 1 - navigatedFrom(isBack: ${args.isBackNavigation})`);
+ console.log(`backStack.length=${topmost().backStack.length}`);
+}
+
+export function onTap(args) {
+ let frame: Frame = args.object.page.frame;
+ frame.navigate({
+ moduleName: "page2"
+ });
+}
\ No newline at end of file
diff --git a/apps/navigation-events-demo/page1.xml b/apps/navigation-events-demo/page1.xml
new file mode 100644
index 0000000000..07e42c2f82
--- /dev/null
+++ b/apps/navigation-events-demo/page1.xml
@@ -0,0 +1,10 @@
+
+
+
+
\ No newline at end of file
diff --git a/apps/navigation-events-demo/page2.ts b/apps/navigation-events-demo/page2.ts
new file mode 100644
index 0000000000..5ce08bb28b
--- /dev/null
+++ b/apps/navigation-events-demo/page2.ts
@@ -0,0 +1,36 @@
+import {Frame, topmost} from "ui/frame";
+
+export function loaded(args) {
+ console.log("+++Page 2 - LOADED");
+ console.log(`backStack.length=${topmost().backStack.length}`);
+}
+
+export function unloaded(args) {
+ console.log("+++Page 2 - UNLOADED");
+ console.log(`backStack.length=${topmost().backStack.length}`);
+}
+
+export function navigatingTo(args) {
+ console.log(`+++Page 2 - navigatingTo(isBack: ${args.isBackNavigation})`);
+ console.log(`backStack.length=${topmost().backStack.length}`);
+}
+
+export function navigatedTo(args) {
+ console.log(`+++Page 2 - navigatedTo(isBack: ${args.isBackNavigation})`);
+ console.log(`backStack.length=${topmost().backStack.length}`);
+}
+
+export function navigatingFrom(args) {
+ console.log(`+++Page 2 - navigatingFrom(isBack: ${args.isBackNavigation})`);
+ console.log(`backStack.length=${topmost().backStack.length}`);
+}
+
+export function navigatedFrom(args) {
+ console.log(`+++Page 2 - navigatedFrom(isBack: ${args.isBackNavigation})`);
+ console.log(`backStack.length=${topmost().backStack.length}`);
+}
+
+export function onTap(args) {
+ let frame: Frame = args.object.page.frame;
+ frame.goBack();
+}
\ No newline at end of file
diff --git a/apps/navigation-events-demo/page2.xml b/apps/navigation-events-demo/page2.xml
new file mode 100644
index 0000000000..5383ab823d
--- /dev/null
+++ b/apps/navigation-events-demo/page2.xml
@@ -0,0 +1,10 @@
+
+
+
+
\ No newline at end of file
diff --git a/apps/tests/ui/page/modal-page.ts b/apps/tests/ui/page/modal-page.ts
index 12a8652515..c39d75f18c 100644
--- a/apps/tests/ui/page/modal-page.ts
+++ b/apps/tests/ui/page/modal-page.ts
@@ -1,20 +1,20 @@
-import {ShownModallyData} from "ui/page";
+import {topmost} from "ui/frame";
import TKUnit = require("../../TKUnit");
-import frame = require("ui/frame");
-import page = require("ui/page");
-
-var modalPage: page.Page;
+import {Page, ShownModallyData} from "ui/page";
+export var modalPage: Page;
export function onShowingModally(args) {
- modalPage = args.object;
+ modalPage = args.object;
+ args.object.showingModally = true;
}
export function onShownModally(args: ShownModallyData) {
- TKUnit.assertNotNull(modalPage);
- TKUnit.wait(0.100);
+ let page = args.object;
+ TKUnit.assertNotNull(page);
if (args.context) {
args.context.shownModally = true;
}
- TKUnit.assert(frame.topmost().currentPage.modal = modalPage, "frame.topmost().currentPage.modal should be equal to the page instance on page.shownModally event handler.");
+
+ TKUnit.assertEqual(topmost().currentPage.modal, page, "frame.topmost().currentPage.modal should be equal to the page instance on page.shownModally event handler.");
args.closeCallback("return value");
}
\ No newline at end of file
diff --git a/apps/tests/ui/page/page-tests-common.ts b/apps/tests/ui/page/page-tests-common.ts
index ce34f33fe6..6e2b621ab4 100644
--- a/apps/tests/ui/page/page-tests-common.ts
+++ b/apps/tests/ui/page/page-tests-common.ts
@@ -191,7 +191,7 @@ function _test_PageNavigation_EventSequence(withTransition: boolean) {
if (withTransition) {
var navigationTransition: FrameModule.NavigationTransition = {
name: "slide",
- duration: 1000,
+ duration: 100,
};
var navigationEntry: FrameModule.NavigationEntry = {
create: pageFactory,
@@ -207,7 +207,7 @@ function _test_PageNavigation_EventSequence(withTransition: boolean) {
helper.goBack();
- var expectedEventSequence = ["navigatingTo", "loaded", "navigatedTo", "navigatingFrom", "navigatedFrom", "unloaded"];
+ var expectedEventSequence = ["navigatingTo", "loaded", "navigatedTo", "navigatingFrom", "unloaded", "navigatedFrom"];
TKUnit.arrayAssert(eventSequence, expectedEventSequence, "Actual event sequence is not equal to expected. Actual: " + eventSequence + "; Expected: " + expectedEventSequence);
}
diff --git a/apps/tests/ui/page/page-tests.ios.ts b/apps/tests/ui/page/page-tests.ios.ts
index acd1dc23bd..22e09744a0 100644
--- a/apps/tests/ui/page/page-tests.ios.ts
+++ b/apps/tests/ui/page/page-tests.ios.ts
@@ -1,18 +1,18 @@
import PageTestCommon = require("./page-tests-common");
-import PageModule = require("ui/page");
+import {Page, ShownModallyData} from "ui/page";
import TKUnit = require("../../TKUnit");
-import LabelModule = require("ui/label");
+import {Label} from "ui/label";
import helper = require("../helper");
-import view = require("ui/core/view");
-import frame = require("ui/frame");
+import {View} from "ui/core/view";
+import {EventData} from "data/observable";
import uiUtils = require("ui/utils");
global.moduleMerge(PageTestCommon, exports);
export function test_NavigateToNewPage_InnerControl() {
- var testPage: PageModule.Page;
- var pageFactory = function (): PageModule.Page {
- testPage = new PageModule.Page();
+ var testPage: Page;
+ var pageFactory = function (): Page {
+ testPage = new Page();
PageTestCommon.addLabelToPage(testPage);
return testPage;
};
@@ -20,11 +20,11 @@ export function test_NavigateToNewPage_InnerControl() {
helper.navigate(pageFactory);
helper.goBack();
- var label = testPage.content;
+ var label =