test(app): update the app/cordova test to NOT use stencil components

This commit is contained in:
Dan Bucholtz
2017-12-07 14:41:42 -06:00
parent 14a67e1ff5
commit f267d0b419
10 changed files with 227 additions and 185 deletions

View File

@ -0,0 +1,18 @@
export async function bootstrap() {
const nav = document.querySelector('ion-nav');
await nav.componentOnReady();
const pageOneModule = await import('./page-one.js');
const pageOne = new pageOneModule.PageOne(nav);
nav.push(pageOne.getElement()).then(() => {
pageOne.initialize();
});
}
// IDK, it errors out sometimes if I bootstrap right away
setTimeout(() => {
bootstrap()
}, 250);

View File

@ -10,7 +10,6 @@
</script> </script>
</head> </head>
<body> <body>
<ion-app> <ion-app>
<ion-menu side="left"> <ion-menu side="left">
@ -54,14 +53,12 @@
</ion-menu> </ion-menu>
<ion-nav main root="app-cordova-page-one"></ion-nav> <ion-nav main></ion-nav>
<ion-nav-controller></ion-nav-controller> <ion-nav-controller></ion-nav-controller>
</ion-app> </ion-app>
<ion-menu-controller></ion-menu-controller> <ion-menu-controller></ion-menu-controller>
<style> <script type="module" src="cordova/bootstrap.js"></script>
</style>
</body> </body>
</html> </html>

View File

@ -0,0 +1,69 @@
export class PageOne {
constructor(nav) {
this.nav = nav;
}
getElement() {
const element = document.createElement('div');
element.innerHTML = `
<ion-header>
<ion-toolbar color='primary'>
<ion-buttons slot='start'>
<ion-button><ion-icon slot='icon-only' name='menu'></ion-icon></ion-button>
</ion-buttons>
<ion-segment color='light'>
<ion-segment-button checked>All</ion-segment-button>
<ion-segment-button>Favorites</ion-segment-button>
</ion-segment>
<ion-buttons slot='end'>
<ion-button><ion-icon slot='icon-only' name='search'></ion-icon></ion-button>
<ion-button><ion-icon slot='icon-only' name='menu'></ion-icon></ion-button>
</ion-buttons>
</ion-toolbar>
<ion-toolbar>
<ion-title>I'm a toolbar</ion-title>
</ion-toolbar>
</ion-header>
<ion-content>
<div padding-bottom>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi scelerisque dolor lacus, ut vehicula arcu dapibus id. Morbi iaculis fermentum blandit. Curabitur tempus, ante et vehicula tempor, urna velit rutrum massa, quis suscipit purus lacus eget est. Sed nisi nulla, tempus id dictum a, cursus ut felis. Aliquam orci magna, rutrum nec tempor ac, fermentum quis eros. Sed ullamcorper felis sit amet tristique sagittis. Nullam sed tempus mi. Morbi sit amet lacinia leo. Nunc facilisis orci id consectetur dignissim. Integer dictum consectetur enim. Vivamus auctor, turpis ut eleifend pharetra, purus magna mattis arcu, vel pharetra tellus orci eget ex. Integer blandit posuere vehicula. Ut ipsum lorem, efficitur vitae eleifend tincidunt, fermentum nec lacus. Ut nec fermentum dui.</div>
<ion-button expand='block' class='e2eCordovaPage2 next'>Go to Page Two</ion-button>
<ion-button color='secondary' expand='block' class='e2eCordovaPage2 tabs'>Go to Tabs</ion-button>
<div padding-bottom>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi scelerisque dolor lacus, ut vehicula arcu dapibus id. Morbi iaculis fermentum blandit. Curabitur tempus, ante et vehicula tempor, urna velit rutrum massa, quis suscipit purus lacus eget est. Sed nisi nulla, tempus id dictum a, cursus ut felis. Aliquam orci magna, rutrum nec tempor ac, fermentum quis eros. Sed ullamcorper felis sit amet tristique sagittis. Nullam sed tempus mi. Morbi sit amet lacinia leo. Nunc facilisis orci id consectetur dignissim. Integer dictum consectetur enim. Vivamus auctor, turpis ut eleifend pharetra, purus magna mattis arcu, vel pharetra tellus orci eget ex. Integer blandit posuere vehicula. Ut ipsum lorem, efficitur vitae eleifend tincidunt, fermentum nec lacus. Ut nec fermentum dui.</div>
<div padding-bottom>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi scelerisque dolor lacus, ut vehicula arcu dapibus id. Morbi iaculis fermentum blandit. Curabitur tempus, ante et vehicula tempor, urna velit rutrum massa, quis suscipit purus lacus eget est. Sed nisi nulla, tempus id dictum a, cursus ut felis. Aliquam orci magna, rutrum nec tempor ac, fermentum quis eros. Sed ullamcorper felis sit amet tristique sagittis. Nullam sed tempus mi. Morbi sit amet lacinia leo. Nunc facilisis orci id consectetur dignissim. Integer dictum consectetur enim. Vivamus auctor, turpis ut eleifend pharetra, purus magna mattis arcu, vel pharetra tellus orci eget ex. Integer blandit posuere vehicula. Ut ipsum lorem, efficitur vitae eleifend tincidunt, fermentum nec lacus. Ut nec fermentum dui.</div>
<div padding-bottom>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi scelerisque dolor lacus, ut vehicula arcu dapibus id. Morbi iaculis fermentum blandit. Curabitur tempus, ante et vehicula tempor, urna velit rutrum massa, quis suscipit purus lacus eget est. Sed nisi nulla, tempus id dictum a, cursus ut felis. Aliquam orci magna, rutrum nec tempor ac, fermentum quis eros. Sed ullamcorper felis sit amet tristique sagittis. Nullam sed tempus mi. Morbi sit amet lacinia leo. Nunc facilisis orci id consectetur dignissim. Integer dictum consectetur enim. Vivamus auctor, turpis ut eleifend pharetra, purus magna mattis arcu, vel pharetra tellus orci eget ex. Integer blandit posuere vehicula. Ut ipsum lorem, efficitur vitae eleifend tincidunt, fermentum nec lacus. Ut nec fermentum dui.</div>
</ion-content>
`;
this.element = element;
return element;
}
initialize() {
const pageTwoButton = this.element.querySelector('ion-button .next');
pageTwoButton.addEventListener('click', async () => {
// okay, go to page two
const pageTwoModule = await import('./page-two.js');
const pageTwo = new pageTwoModule.PageTwo(this.nav);
await this.nav.push(pageTwo.getElement());
// okay, the page is pushed, initialize it
pageTwo.initialize();
});
const tabsButton = this.element.querySelector('ion-button .tabs');
tabsButton.addEventListener('click', async () => {
// okay, go to page two
const tabsPageModule = await import('./tabs-page.js');
const tabsPage = new tabsPageModule.TabsPage(this.nav);
await this.nav.setRoot(tabsPage.getElement());
// okay, the page is pushed, initialize it
await tabsPage.initialize();
});
}
}

View File

@ -1,59 +0,0 @@
import { Component, Element } from '@stencil/core';
@Component({
tag: 'app-cordova-page-one'
})
export class AppCordovaPageOne {
@Element() element: HTMLElement;
componentDidEnter() {
console.log('page one did enter');
}
nextPage() {
const nav = this.element.closest('ion-nav') as any;
nav.push('app-cordova-page-two');
}
goToTabs() {
const nav = this.element.closest('ion-nav') as any;
nav.setRoot('app-cordova-page-tabs');
}
render() {
return [
<ion-header>
<ion-toolbar color='primary'>
<ion-buttons slot='start'>
<ion-button><ion-icon slot='icon-only' name='menu'></ion-icon></ion-button>
</ion-buttons>
<ion-segment color='light'>
<ion-segment-button checked>All</ion-segment-button>
<ion-segment-button>Favorites</ion-segment-button>
</ion-segment>
<ion-buttons slot='end'>
<ion-button><ion-icon slot='icon-only' name='search'></ion-icon></ion-button>
<ion-button><ion-icon slot='icon-only' name='menu'></ion-icon></ion-button>
</ion-buttons>
</ion-toolbar>
<ion-toolbar>
<ion-title>I'm a toolbar</ion-title>
</ion-toolbar>
</ion-header>,
<ion-content>
<div padding-bottom>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi scelerisque dolor lacus, ut vehicula arcu dapibus id. Morbi iaculis fermentum blandit. Curabitur tempus, ante et vehicula tempor, urna velit rutrum massa, quis suscipit purus lacus eget est. Sed nisi nulla, tempus id dictum a, cursus ut felis. Aliquam orci magna, rutrum nec tempor ac, fermentum quis eros. Sed ullamcorper felis sit amet tristique sagittis. Nullam sed tempus mi. Morbi sit amet lacinia leo. Nunc facilisis orci id consectetur dignissim. Integer dictum consectetur enim. Vivamus auctor, turpis ut eleifend pharetra, purus magna mattis arcu, vel pharetra tellus orci eget ex. Integer blandit posuere vehicula. Ut ipsum lorem, efficitur vitae eleifend tincidunt, fermentum nec lacus. Ut nec fermentum dui.</div>
<ion-button onClick={() => this.nextPage()} expand='block' class='e2eCordovaPage2'>Go to Page Two</ion-button>
<ion-button onClick={() => this.goToTabs()} color='secondary' expand='block' class='e2eCordovaPage2'>Go to Tabs</ion-button>
<div padding-bottom>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi scelerisque dolor lacus, ut vehicula arcu dapibus id. Morbi iaculis fermentum blandit. Curabitur tempus, ante et vehicula tempor, urna velit rutrum massa, quis suscipit purus lacus eget est. Sed nisi nulla, tempus id dictum a, cursus ut felis. Aliquam orci magna, rutrum nec tempor ac, fermentum quis eros. Sed ullamcorper felis sit amet tristique sagittis. Nullam sed tempus mi. Morbi sit amet lacinia leo. Nunc facilisis orci id consectetur dignissim. Integer dictum consectetur enim. Vivamus auctor, turpis ut eleifend pharetra, purus magna mattis arcu, vel pharetra tellus orci eget ex. Integer blandit posuere vehicula. Ut ipsum lorem, efficitur vitae eleifend tincidunt, fermentum nec lacus. Ut nec fermentum dui.</div>
<div padding-bottom>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi scelerisque dolor lacus, ut vehicula arcu dapibus id. Morbi iaculis fermentum blandit. Curabitur tempus, ante et vehicula tempor, urna velit rutrum massa, quis suscipit purus lacus eget est. Sed nisi nulla, tempus id dictum a, cursus ut felis. Aliquam orci magna, rutrum nec tempor ac, fermentum quis eros. Sed ullamcorper felis sit amet tristique sagittis. Nullam sed tempus mi. Morbi sit amet lacinia leo. Nunc facilisis orci id consectetur dignissim. Integer dictum consectetur enim. Vivamus auctor, turpis ut eleifend pharetra, purus magna mattis arcu, vel pharetra tellus orci eget ex. Integer blandit posuere vehicula. Ut ipsum lorem, efficitur vitae eleifend tincidunt, fermentum nec lacus. Ut nec fermentum dui.</div>
<div padding-bottom>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi scelerisque dolor lacus, ut vehicula arcu dapibus id. Morbi iaculis fermentum blandit. Curabitur tempus, ante et vehicula tempor, urna velit rutrum massa, quis suscipit purus lacus eget est. Sed nisi nulla, tempus id dictum a, cursus ut felis. Aliquam orci magna, rutrum nec tempor ac, fermentum quis eros. Sed ullamcorper felis sit amet tristique sagittis. Nullam sed tempus mi. Morbi sit amet lacinia leo. Nunc facilisis orci id consectetur dignissim. Integer dictum consectetur enim. Vivamus auctor, turpis ut eleifend pharetra, purus magna mattis arcu, vel pharetra tellus orci eget ex. Integer blandit posuere vehicula. Ut ipsum lorem, efficitur vitae eleifend tincidunt, fermentum nec lacus. Ut nec fermentum dui.</div>
</ion-content>
];
}
}

View File

@ -1,31 +0,0 @@
import { Component, Element } from '@stencil/core';
@Component({
tag: 'app-cordova-page-tabs'
})
export class AppCordovaPageTabs {
@Element() element: HTMLElement;
componentDidEnter() {
console.log('page two did enter');
}
render() {
return [
<ion-tabs>
<ion-tab title='Page 1' icon='chatboxes'>
<ion-nav root='app-cordova-page-one'></ion-nav>
</ion-tab>
<ion-tab title='Page 2' icon='map'>
<ion-nav root='app-cordova-page-two'></ion-nav>
</ion-tab>
<ion-tab title='Page 3' icon='person'>
<ion-nav root='app-cordova-page-three'></ion-nav>
</ion-tab>
</ion-tabs>
];
}
}

View File

@ -0,0 +1,35 @@
export class PageThree {
constructor(nav) {
this.nav = nav;
}
getElement() {
const element = document.createElement('div');
element.innerHTML = `
<ion-content>
<h2>Page 3</h2>
<div padding-bottom>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi scelerisque dolor lacus, ut vehicula arcu dapibus id. Morbi iaculis fermentum blandit. Curabitur tempus, ante et vehicula tempor, urna velit rutrum massa, quis suscipit purus lacus eget est. Sed nisi nulla, tempus id dictum a, cursus ut felis. Aliquam orci magna, rutrum nec tempor ac, fermentum quis eros. Sed ullamcorper felis sit amet tristique sagittis. Nullam sed tempus mi. Morbi sit amet lacinia leo. Nunc facilisis orci id consectetur dignissim. Integer dictum consectetur enim. Vivamus auctor, turpis ut eleifend pharetra, purus magna mattis arcu, vel pharetra tellus orci eget ex. Integer blandit posuere vehicula. Ut ipsum lorem, efficitur vitae eleifend tincidunt, fermentum nec lacus. Ut nec fermentum dui.</div>
<ion-button class='e2eCordovaGoBack back'>Go Back</ion-button>
</ion-content>
<ion-footer>
<ion-toolbar>
<ion-title>I'm a bottom toolbar</ion-title>
</ion-toolbar>
</ion-footer>
`;
this.element = element;
return element;
}
initialize() {
const backButton = this.element.querySelector('ion-button .back');
backButton.addEventListener('click', async () => {
await this.nav.pop();
});
}
}

View File

@ -1,39 +0,0 @@
import { Component, Element } from '@stencil/core';
@Component({
tag: 'app-cordova-page-three'
})
export class AppCordovaPageThree {
@Element() element: HTMLElement;
componentDidEnter() {
console.log('page one did enter');
}
nextPage() {
const nav = this.element.closest('ion-nav') as any;
nav.push('app-cordova-page-one');
}
prevPage() {
const nav = this.element.closest('ion-nav') as any;
nav.push('app-cordova-page-two');
}
render() {
return [
<ion-content>
<h2>Page 3</h2>
<div padding-bottom>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi scelerisque dolor lacus, ut vehicula arcu dapibus id. Morbi iaculis fermentum blandit. Curabitur tempus, ante et vehicula tempor, urna velit rutrum massa, quis suscipit purus lacus eget est. Sed nisi nulla, tempus id dictum a, cursus ut felis. Aliquam orci magna, rutrum nec tempor ac, fermentum quis eros. Sed ullamcorper felis sit amet tristique sagittis. Nullam sed tempus mi. Morbi sit amet lacinia leo. Nunc facilisis orci id consectetur dignissim. Integer dictum consectetur enim. Vivamus auctor, turpis ut eleifend pharetra, purus magna mattis arcu, vel pharetra tellus orci eget ex. Integer blandit posuere vehicula. Ut ipsum lorem, efficitur vitae eleifend tincidunt, fermentum nec lacus. Ut nec fermentum dui.</div>
<ion-button onClick={() => this.prevPage()} expand='block' class='e2eCordovaGoBack'>Go Back</ion-button>
</ion-content>,
<ion-footer>
<ion-toolbar>
<ion-title>I'm a bottom toolbar</ion-title>
</ion-toolbar>
</ion-footer>
];
}
}

View File

@ -0,0 +1,55 @@
export class PageTwo {
constructor(nav) {
this.nav = nav;
}
getElement() {
const element = document.createElement('div');
element.innerHTML = `
<ion-header>
<ion-toolbar>
<ion-title>Page Two</ion-title>
<ion-buttons slot='end'>
<ion-button><ion-icon slot='icon-only' name='filter'></ion-icon></ion-button>
</ion-buttons>
</ion-toolbar>
<ion-toolbar>
Hello I am a sub header, with no border on top
</ion-toolbar>
</ion-header>
<ion-content>
<div padding-bottom>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi scelerisque dolor lacus, ut vehicula arcu dapibus id. Morbi iaculis fermentum blandit. Curabitur tempus, ante et vehicula tempor, urna velit rutrum massa, quis suscipit purus lacus eget est. Sed nisi nulla, tempus id dictum a, cursus ut felis. Aliquam orci magna, rutrum nec tempor ac, fermentum quis eros. Sed ullamcorper felis sit amet tristique sagittis. Nullam sed tempus mi. Morbi sit amet lacinia leo. Nunc facilisis orci id consectetur dignissim. Integer dictum consectetur enim. Vivamus auctor, turpis ut eleifend pharetra, purus magna mattis arcu, vel pharetra tellus orci eget ex. Integer blandit posuere vehicula. Ut ipsum lorem, efficitur vitae eleifend tincidunt, fermentum nec lacus. Ut nec fermentum dui.</div>
<ion-button expand='block' class="back">Go Back</ion-button>
<ion-button expand='block' class='next e2eCordovaPage3'>Go to Page Three</ion-button>
<ion-button expand='block' color='secondary' class='e2eCordovaOpenModal modal'>Open Modal</ion-button>
</ion-content>
`;
this.element = element;
return element;
}
initialize() {
const backButton = this.element.querySelector('ion-button .back');
backButton.addEventListener('click', async () => {
await this.nav.pop();
});
const nextButton = this.element.querySelector('ion-button .next');
nextButton.addEventListener('click', async () => {
const pageThreeModule = await import('./page-three.js');
const pageThree = new pageThreeModule.PageThree(this.nav);
await this.nav.push(pageThree.getElement());
// okay, the page is pushed, initialize it
pageThree.initialize();
});
const modalButton = this.element.querySelector('ion-button .modal');
modalButton.addEventListener('click', () => {
alert('This is a problem for future Ionic team, let\'s let those comrades dal with it.');
});
}
}

View File

@ -1,51 +0,0 @@
import { Component, Element } from '@stencil/core';
@Component({
tag: 'app-cordova-page-two'
})
export class AppCordovaPageTwo {
@Element() element: HTMLElement;
componentDidEnter() {
console.log('page two did enter');
}
prevPage() {
const nav = this.element.closest('ion-nav') as any;
nav.push('app-cordova-page-one');
}
nextPage() {
const nav = this.element.closest('ion-nav') as any;
nav.push('app-cordova-page-three');
}
openModal() {
}
render() {
return [
<ion-header>
<ion-toolbar>
<ion-title>Page Two</ion-title>
<ion-buttons slot='end'>
<ion-button><ion-icon slot='icon-only' name='filter'></ion-icon></ion-button>
</ion-buttons>
</ion-toolbar>
<ion-toolbar>
Hello I am a sub header, with no border on top
</ion-toolbar>
</ion-header>,
<ion-content>
<div padding-bottom>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi scelerisque dolor lacus, ut vehicula arcu dapibus id. Morbi iaculis fermentum blandit. Curabitur tempus, ante et vehicula tempor, urna velit rutrum massa, quis suscipit purus lacus eget est. Sed nisi nulla, tempus id dictum a, cursus ut felis. Aliquam orci magna, rutrum nec tempor ac, fermentum quis eros. Sed ullamcorper felis sit amet tristique sagittis. Nullam sed tempus mi. Morbi sit amet lacinia leo. Nunc facilisis orci id consectetur dignissim. Integer dictum consectetur enim. Vivamus auctor, turpis ut eleifend pharetra, purus magna mattis arcu, vel pharetra tellus orci eget ex. Integer blandit posuere vehicula. Ut ipsum lorem, efficitur vitae eleifend tincidunt, fermentum nec lacus. Ut nec fermentum dui.</div>
<ion-button expand='block' onClick={() => this.prevPage()}>Go to Page One</ion-button>
<ion-button expand='block' onClick={() => this.nextPage()} class='e2eCordovaPage3'>Go to Page Three</ion-button>
<ion-button expand='block' color='secondary' onClick={() => this.openModal()} class='e2eCordovaOpenModal'>Open Modal</ion-button>
</ion-content>
];
}
}

View File

@ -0,0 +1,48 @@
export class TabsPage {
constructor(nav) {
this.nav = nav;
}
getElement() {
const element = document.createElement('div');
element.innerHTML = `
<ion-tabs>
<ion-tab title='Page 1' icon='chatboxes' class='tab-one'>
<ion-nav class="tab-one-nav"></ion-nav>
</ion-tab>
<ion-tab title='Page 2' icon='map' class='tab-two'>
<ion-nav class="tab-two-nav"></ion-nav>
</ion-tab>
<ion-tab title='Page 3' icon='person' class='tab-three'>
<ion-nav class="tab-three-nav"></ion-nav>
</ion-tab>
</ion-tabs>
`;
this.element = element;
return element;
}
async initialize() {
const navOne = this.element.querySelector('ion-tab.tab-one ion-nav');
await navOne.componentOnReady();
const pageOneModule = await import('./page-one.js');;
const pageOne = new pageOneModule.PageOne(navOne);
await navOne.setRoot(pageOne.getElement());
const navTwo = this.element.querySelector('ion-tab.tab-two ion-nav');
await navTwo.componentOnReady();
const pageTwoModule = await import('./page-two.js');;
const pageTwo = new pageTwoModule.PageTwo(navTwo);
await navTwo.setRoot(pageTwo.getElement());
const navThree = this.element.querySelector('ion-tab.tab-three ion-nav');
await navThree.componentOnReady();
const pageThreeModule = await import('./page-three.js');;
const pageThree = new pageThreeModule.PageThree(navThree);
await navThree.setRoot(pageThree.getElement());
}
}