Compare commits

..

60 Commits

Author SHA1 Message Date
mhartington
73f6a82446 fix(popover): improve positioning in ios11 2017-10-26 09:05:02 -07:00
Dan Bucholtz
893ef725e9 refactor(navigation): revert hacky change in url-serializer to account for scenario when toggling between one two views each with a set of tabs 2017-10-23 23:18:29 -05:00
mhartington
4ea843440b fix(): correct order of events 2017-10-22 19:41:25 -07:00
mhartington
f2946e77e6 fix(): correct event name 2017-10-20 20:32:27 -04:00
mhartington
ebdf22d2d3 fix(): move resize logic to viewCtrl 2017-10-20 16:09:43 -04:00
Jérémy LE TRIONNAIRE
dd66f9a7a9 fix(swiper): allow for multiple swipers on a page (#12213)
fixes #12008
2017-10-20 14:14:06 -05:00
mhartington
6b848a04b3 fix(content): reize on orientationchange only
Ref #13028
2017-10-19 17:54:05 -04:00
mhartington
af363581da fix(item): safe-padding on last item only 2017-10-19 15:17:19 -04:00
mhartington
33960f1a5a fix(cordova): size footer correctly
Ref #13054
2017-10-17 09:49:45 -04:00
Valentin
e5df0625b2 docs(nav-controller): change leave to enter matching guard name (#13155)
Update comment in Nav Guards when pushing new view.
Comment was the same as leaving a view. 'leave' to 'enter'. Correct ?
2017-10-16 05:25:33 -05:00
Zach Lawson
22747e3588 docs(slides): fix typo in code sample (#13091) 2017-10-11 13:28:17 -05:00
Ken Sodemann
dc280b4199 chore(): clean up the issue template 2017-10-11 12:40:42 -05:00
Dan Bucholtz
fae5365b12 refactor(tabs): remove unnecessary console.log 2017-10-10 15:57:16 -05:00
Max Lynch
ecde0ae70f Merge pull request #13104 from ionic-team/fix/11694
fix(tabs): emit viewDidEnter and viewDidLeave on app during tab change. ≈
2017-10-10 10:53:40 -05:00
Max Lynch
c8be8e254c fix(tabs): emit viewDidEnter and viewDidLeave on app during tab change 2017-10-10 10:49:58 -05:00
Dan Bucholtz
356240883e chore(dependencies): lock file update 2017-10-10 10:34:36 -05:00
Max Lynch
c4e9b5d343 fix(select): overlay types should use shared interface
Closes #13103
2017-10-10 10:43:12 -04:00
Dan Bucholtz
9f17b388d2 chore(dependencies): update lock file 2017-10-10 09:24:47 -05:00
Mike Hartington
49e0c3701a feat(): better ios11 support
* style(): better list design for ios

* fix(): fix lint issues

* fix(): more ios11 updates

* fix(): use env and constant for now

* fix(footer): user correct value for padding

* fix(): remove extra padding on title

* fix(): reorder imports to pass lint
2017-10-09 16:52:13 -04:00
Ken Sodemann
ee766e1de8 doc(defaultHistory): clarify the use of defaultHistory 2017-10-06 14:46:47 -05:00
Daniel Sogl
74c5871ac4 refactor(OpaqueToken): change deprecated import (#11916)
* refactor(OpaqueToken): ready for Angular 4.2

* Create app-root.ts

* Create config.ts

* Create url-serializer.ts

* Create platform-registry.ts

* Create module-loader.ts
2017-10-06 14:01:37 -05:00
Daniel Sogl
8ec70ee02a chore(dependencies): bump Angular and TypeScript(#13030) 2017-10-06 13:54:38 -05:00
Manu Mtz.-Almeida
ae4be669bb fix(nav): remove bad assert 2017-10-06 12:41:50 +02:00
Manu MA
c91223bfb2 fix(overlay): onWillDismiss is called as expected (#12056)
* fix(overlay): onWillDismiss is called as expected

fixes #11702

* Fix condition
2017-10-06 12:39:33 +02:00
Amit Moryossef
b1803510e3 feat(input): add dir attribute for different language directions (#13043) 2017-10-06 12:28:40 +02:00
Manu Mtz.-Almeida
70809caa8d test(virtual-scroll): update tests 2017-10-06 12:13:28 +02:00
Manu Mtz.-Almeida
88b2e8316d fix(virtual-scroll): flickering issue fixes
Squashed commit of the following:

commit 3497d401ba
Author: Michael Asimakopoulos <m.asimakopoulos@gmail.com>
Date:   Wed Sep 20 10:52:39 2017 +0300

    Fix virtualScroll spec

commit c6a2a978a5
Author: Michael Asimakopoulos <m.asimakopoulos@gmail.com>
Date:   Wed Sep 20 10:51:58 2017 +0300

    Fix virtualScroll e2e infiniteScroll test

commit 6eaf7d1e2b
Author: Michael Asimakopoulos <m.asimakopoulos@gmail.com>
Date:   Wed Sep 20 09:40:01 2017 +0300

    Use const enums to reduce generated code

commit 564ef4179f
Author: Michael Asimakopoulos <m.asimakopoulos@gmail.com>
Date:   Tue Sep 19 16:12:01 2017 +0300

    Recalculated nodes once more on scrollEnd

commit bfa44b9dc4
Author: Michael Asimakopoulos <m.asimakopoulos@gmail.com>
Date:   Mon Sep 18 19:10:55 2017 +0300

    Remove needClean param from populateNodeData

commit 84d402d05d
Author: Michael Asimakopoulos <m.asimakopoulos@gmail.com>
Date:   Mon Sep 18 19:06:06 2017 +0300

    Remove console.warn

commit 07e15d7074
Author: Michael Asimakopoulos <m.asimakopoulos@gmail.com>
Date:   Mon Sep 18 17:50:14 2017 +0300

    Simplify adjustRendered function

commit 9b3b0db086
Author: Michael Asimakopoulos <m.asimakopoulos@gmail.com>
Date:   Mon Sep 18 17:14:39 2017 +0300

    Use recordSize consistently

commit c8d5e09bd2
Author: Michael Asimakopoulos <m.asimakopoulos@gmail.com>
Date:   Mon Sep 18 16:27:09 2017 +0300

    Fix top and bottom cells special cases

commit acec8eff5d
Author: Michael Asimakopoulos <m.asimakopoulos@gmail.com>
Date:   Mon Sep 18 13:26:33 2017 +0300

    Update existing nodes by matching cells

commit 8590b9b5d4
Author: Michael Asimakopoulos <m.asimakopoulos@gmail.com>
Date:   Mon Sep 18 13:25:00 2017 +0300

    Stop clearing DOM in slow path

commit e06d757471
Author: Michael Asimakopoulos <m.asimakopoulos@gmail.com>
Date:   Fri Sep 15 17:20:18 2017 +0300

    Return records from VirtualScroll getter

commit a13184f9b3
Author: Michael Asimakopoulos <m.asimakopoulos@gmail.com>
Date:   Fri Sep 15 15:12:31 2017 +0300

    Change comment

commit 75aed51b92
Author: Michael Asimakopoulos <m.asimakopoulos@gmail.com>
Date:   Fri Sep 15 15:01:17 2017 +0300

    Stop looking for available nodes after one is found

commit ebef282654
Author: Michael Asimakopoulos <m.asimakopoulos@gmail.com>
Date:   Fri Sep 15 14:49:36 2017 +0300

    Change TemplateType consts to enum

commit 21a7ce9cde
Author: Michael Asimakopoulos <m.asimakopoulos@gmail.com>
Date:   Fri Sep 15 14:45:47 2017 +0300

    Stop searching nodes if cell is already rendered

commit 7d3b7c4a1b
Author: Michael Asimakopoulos <m.asimakopoulos@gmail.com>
Date:   Fri Sep 15 14:36:11 2017 +0300

    Make debug logs consistent

commit a716e5814e
Author: Michael Asimakopoulos <m.asimakopoulos@gmail.com>
Date:   Fri Sep 15 14:33:29 2017 +0300

    Simplify changes calculation

commit ad9c6d9b37
Author: Michael Asimakopoulos <m.asimakopoulos@gmail.com>
Date:   Fri Sep 15 14:22:41 2017 +0300

    Simplify addCell function

commit 8e5774a027
Author: Michael Asimakopoulos <m.asimakopoulos@gmail.com>
Date:   Fri Sep 15 14:17:03 2017 +0300

    Throw errors not strings

commit fdd9bd19ad
Author: Michael Asimakopoulos <m.asimakopoulos@gmail.com>
Date:   Fri Sep 15 14:12:39 2017 +0300

    Initialize differ with trackByFunction as ngForOf does

commit 4cf1f3918e
Author: Michael Asimakopoulos <m.asimakopoulos@gmail.com>
Date:   Fri Sep 15 14:08:11 2017 +0300

    Convert queue consts to enum
2017-10-06 12:12:01 +02:00
Brandy Carney
199cb00444 fix(action-sheet): fix action sheet so it will scroll when the options exceed the screen (#13049)
* fix(action-sheet): add ability to scroll buttons in an action sheet

* fix(action-sheet): add scroll to buttons for all modes

* fix(select): add support for more than 6 options in action-sheet

* style(sass): fix linter error

* fix(action-sheet): add flex-shrink to all modes and fix border bleed

also adds variables for md and wp mode padding and removes unused
$action-sheet-md-group-margin-bottom var

* style(sass): fix linter errors

* refactor(action-sheet): remove duplicated overflow styles

* fix(action-sheet): get scroll working properly without cancel button

* fix(action-sheet): remove pointer events from wrapper
2017-10-06 11:45:49 +02:00
Dan Bucholtz
9bfd286dfa chore(dependencies): update app-scripts version to run latest nightly with deepLinkDir fix 2017-10-06 00:02:12 -05:00
Dan Bucholtz
ac4dd6fea2 chore(dependencies): update lock file 2017-10-05 21:51:26 -05:00
Dan Bucholtz
2646ebedf1 fix(navigation): add defaultHistory support to ion-tabs 2017-10-05 16:53:39 -05:00
Dan Bucholtz
a77bb2c1d5 fix(tabs): return promises where appropriate 2017-10-05 16:53:39 -05:00
Dan Bucholtz
c963745888 fix(navigation): account for condition of toggling one view with tabs to another view with tabs 2017-10-05 16:53:39 -05:00
Dan Bucholtz
2bd89feb0f fix(navigation): unregister root navs when appropriate 2017-10-05 16:53:39 -05:00
mhartington
c38cc28c5f doc(platform): copy edit 2017-10-03 09:45:37 -04:00
mhartington
9d4c94a7ac docs(platform): update resize method docs 2017-10-03 09:37:12 -04:00
Perry Govier
ad8d8ed2c3 chore(demos): setting demos target to es5 to get around safari 10 let bug 2017-10-02 15:15:17 -05:00
Alan Agius
0ba33d943f feat(alert): export AlertButton interface
Closes #12545
2017-10-02 11:57:00 -04:00
Ken Sodemann
e0c830962c fix(swiper): add safe-guards when user tries to zoom a slide without an image (#12931)
Fixes #12861
2017-09-29 17:41:29 -05:00
Ken Sodemann
dac887092e chore(): clarify upgrade instructions 2017-09-29 16:25:00 -05:00
Ken Sodemann
e5b3eb7c8b chore(): update changelog 2017-09-29 14:46:05 -05:00
Max Lynch
c60588a290 Merge branch 'jacek-jaskolski-datetime_default_value' 2017-09-29 14:11:46 -05:00
Max Lynch
77fcaef436 Updated initialValue and current time/max setup 2017-09-29 14:05:15 -05:00
Max Lynch
9c2181b8f9 Merge branch 'datetime_default_value' of https://github.com/jacek-jaskolski/ionic into jacek-jaskolski-datetime_default_value 2017-09-29 11:47:36 -05:00
Ken Sodemann
4db20a648c chore(): update to latest zone.js
Fixes: #13014
2017-09-29 11:35:05 -05:00
Max Lynch
f6d6596912 Remove fit
Formatting
2017-09-29 11:30:10 -05:00
Max Lynch
39e7da3840 fix(datetime): set default to max if max before current only #9846 2017-09-29 11:28:17 -05:00
Max Lynch
9b3fb78a68 fix trailing whitespace 2017-09-29 10:49:21 -05:00
Max Lynch
559f4d3bd5 feat(datetime): default to now or max. Fixes #9846 2017-09-29 10:45:58 -05:00
Suraj Kochale
f1a676e4c2 docs(): add more config values 2017-09-29 11:24:29 -04:00
Brandy Carney
1573043f4e chore(index): export ActionSheetButton
fixes #12719
2017-09-28 15:47:09 -04:00
Brandy Carney
0a49648fe8 style(cordova): fix indentation 2017-09-28 15:46:03 -04:00
Dan Bucholtz
599bf3df5e chore(build): minify/optimize demos by default, leave e2e non-minified and unoptimized by default 2017-09-28 11:09:04 -05:00
Dan Bucholtz
fce5d8a04f chore(dependencies): update app-scripts to 3.0.0 release 2017-09-28 10:35:44 -05:00
Brandy Carney
108fc0fc3f docs(changelog): copy editing 2017-09-28 11:14:47 -04:00
Dan Bucholtz
521402b548 chore(changelog): 3.0.0 changelog 2017-09-28 10:07:48 -05:00
Jacek Jaskólski
54cdf00454 test(datetime): add pickerDefault test 2017-08-18 14:29:21 +02:00
Jacek Jaskólski
5bb3e73296 test(datetime): add pickerDefault test 2017-08-18 14:26:01 +02:00
Jacek Jaskólski
ae94f5ecea test(datetime): add pickerDefault test 2017-08-18 14:21:12 +02:00
Jacek Jaskólski
b87d212829 feat(datetime): add default picker value input 2017-08-18 12:32:37 +02:00
213 changed files with 4147 additions and 827 deletions

View File

@@ -1,7 +1,6 @@
**Resources:**
Before submitting an issue, please consult our troubleshooting guide (http://ionicframework.com/docs/troubleshooting/) and developer resources (http://ionicframework.com/docs/developer-resources/)
<!-- Before submitting an issue, please consult our troubleshooting guide (http://ionicframework.com/docs/troubleshooting/) and developer resources (http://ionicframework.com/docs/developer-resources/) -->
Please make sure you are posting an issue pertaining to the Ionic Framework. If you are having an issue with the Ionic Pro services (Ionic View, Ionic Deploy, etc.) please consult the Ionic Pro support portal (http://support.ionicjs.com)
<!-- Please make sure you are posting an issue pertaining to the Ionic Framework. If you are having an issue with the Ionic Pro services (Ionic View, Ionic Deploy, etc.) please consult the Ionic Pro support portal (http://support.ionicjs.com) -->
**Ionic version:** (check one with "x")
(For Ionic 1.x issues, please use https://github.com/ionic-team/ionic-v1)

View File

@@ -1,3 +1,77 @@
<a name="3.7.1"></a>
## [3.7.1](https://github.com/ionic-team/ionic/compare/v3.7.0...v3.7.1) (2017-09-29)
### Upgrade Instructions
This release includes the latest version of `zone.js`. Update your `package.json` to match the following dependencies, remove the existing `node_modules` directory, and then run `npm install`:
```
"dependencies": {
...
"ionic-angular": "3.7.1",
...
"zone.js": "0.8.18"
}
```
### Bug Fixes
* **datetime:** set default to max if max before current only [#9846](https://github.com/ionic-team/ionic/issues/9846) ([39e7da3](https://github.com/ionic-team/ionic/commit/39e7da3))
### Features
* **datetime:** add default picker value input ([b87d212](https://github.com/ionic-team/ionic/commit/b87d212))
* **datetime:** default to now or max. Fixes [#9846](https://github.com/ionic-team/ionic/issues/9846) ([559f4d3](https://github.com/ionic-team/ionic/commit/559f4d3))
<a name="3.7.0"></a>
# [3.7.0](https://github.com/ionic-team/ionic/compare/v3.6.1...v3.7.0) (2017-09-28)
### Notes
This release adds support for the latest version of Angular (4.4.3) as well as the initial iteration of support for the iPhone X.
### Upgrade Instructions
These are the latest versions of `@angular`, `rxjs`, `zone.js` and `ionic-angular`. Update your `package.json` to match the following dependencies, remove the existing `node_modules` directory, and then run `npm install`:
```
...
"dependencies": {
"@angular/common": "4.4.3",
"@angular/compiler": "4.4.3",
"@angular/compiler-cli": "4.4.3",
"@angular/core": "4.4.3",
"@angular/forms": "4.4.3",
"@angular/http": "4.4.3",
"@angular/platform-browser": "4.4.3",
"@angular/platform-browser-dynamic": "4.4.3",
"ionic-angular": "3.7.0",
"rxjs": "5.4.3",
"zone.js": "0.8.17"
}
"devDependencies": {
"@ionic/app-scripts": "3.0.0"
}
...
```
If you're using a `package-lock.json` file, make sure that is updated as well.
### Bug Fixes
* **input:** mark ion-input touched on blur instead of changed ([#12812](https://github.com/ionic-team/ionic/issues/12812)) ([d0cad6b](https://github.com/ionic-team/ionic/commit/d0cad6b)), closes [#12102](https://github.com/ionic-team/ionic/issues/12102)
* **swiper:** change var to let to avoid variable shadowing ([f5ef1ca](https://github.com/ionic-team/ionic/commit/f5ef1ca))
### Features
* initial iphoneX support ([112d4f5](https://github.com/ionic-team/ionic/commit/112d4f5))
<a name="3.6.1"></a>
## [3.6.1](https://github.com/ionic-team/ionic/compare/v3.6.0...v3.6.1) (2017-09-07)

455
package-lock.json generated
View File

@@ -1,6 +1,6 @@
{
"name": "ionic2",
"version": "3.6.1",
"version": "3.7.1",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@@ -17,90 +17,90 @@
}
},
"@angular/common": {
"version": "4.4.3",
"resolved": "https://registry.npmjs.org/@angular/common/-/common-4.4.3.tgz",
"integrity": "sha1-+SrGiwK+xfDm02A6hDKU3JbJYHQ=",
"version": "4.4.4",
"resolved": "https://registry.npmjs.org/@angular/common/-/common-4.4.4.tgz",
"integrity": "sha1-rgqBiqoMaj8JAee4C9lOHCLrk2U=",
"requires": {
"tslib": "1.7.1"
}
},
"@angular/compiler": {
"version": "4.4.3",
"resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-4.4.3.tgz",
"integrity": "sha1-jwEWPa19s0CEl9mdOHVUtrGFrWY=",
"version": "4.4.4",
"resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-4.4.4.tgz",
"integrity": "sha1-Mm6wAp2aNUGqyhJN75rcUcNvK0E=",
"requires": {
"tslib": "1.7.1"
}
},
"@angular/compiler-cli": {
"version": "4.4.3",
"resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-4.4.3.tgz",
"integrity": "sha1-GDr4HxQRhrjWYLBkKVktQLdUCko=",
"version": "4.4.4",
"resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-4.4.4.tgz",
"integrity": "sha1-BjCApJfZF1OWglBQIixxfaGE9s8=",
"requires": {
"@angular/tsc-wrapped": "4.4.3",
"@angular/tsc-wrapped": "4.4.4",
"minimist": "1.2.0",
"reflect-metadata": "0.1.10"
}
},
"@angular/core": {
"version": "4.4.3",
"resolved": "https://registry.npmjs.org/@angular/core/-/core-4.4.3.tgz",
"integrity": "sha1-5x0rB76qy6tIq39R1OIobqXXDhU=",
"version": "4.4.4",
"resolved": "https://registry.npmjs.org/@angular/core/-/core-4.4.4.tgz",
"integrity": "sha1-vTfs9UFY+XSJmWyThr0iL4CjL1w=",
"requires": {
"tslib": "1.7.1"
}
},
"@angular/forms": {
"version": "4.4.3",
"resolved": "https://registry.npmjs.org/@angular/forms/-/forms-4.4.3.tgz",
"integrity": "sha1-JbQburWL8dqHJBHIUXwQ18U3PY4=",
"version": "4.4.4",
"resolved": "https://registry.npmjs.org/@angular/forms/-/forms-4.4.4.tgz",
"integrity": "sha1-TbN5BQm2sQ8duKfBt/Uhh89kz9Q=",
"requires": {
"tslib": "1.7.1"
}
},
"@angular/http": {
"version": "4.4.3",
"resolved": "https://registry.npmjs.org/@angular/http/-/http-4.4.3.tgz",
"integrity": "sha1-tVftJBRKrMRLE2zUd+hNL1eAiQM=",
"version": "4.4.4",
"resolved": "https://registry.npmjs.org/@angular/http/-/http-4.4.4.tgz",
"integrity": "sha1-Zn+vYWu2JBaOr65u6S5euiOp0fI=",
"requires": {
"tslib": "1.7.1"
}
},
"@angular/platform-browser": {
"version": "4.4.3",
"resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-4.4.3.tgz",
"integrity": "sha1-I/mkW9Pcf0TZeHf7+OYDLez8ncs=",
"version": "4.4.4",
"resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-4.4.4.tgz",
"integrity": "sha1-o4mOLnup2E/6DUcUTGlxF5x1ruY=",
"requires": {
"tslib": "1.7.1"
}
},
"@angular/platform-browser-dynamic": {
"version": "4.4.3",
"resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-4.4.3.tgz",
"integrity": "sha1-5B3dglJDJ3UxDqtZQM3Y3wYY8IQ=",
"version": "4.4.4",
"resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-4.4.4.tgz",
"integrity": "sha1-w8nrhUpShVagcFQSeTLlJ/qTLhQ=",
"requires": {
"tslib": "1.7.1"
}
},
"@angular/tsc-wrapped": {
"version": "4.4.3",
"resolved": "https://registry.npmjs.org/@angular/tsc-wrapped/-/tsc-wrapped-4.4.3.tgz",
"integrity": "sha1-LT84IQodTbA/yG3PHglYErhc0Rk=",
"version": "4.4.4",
"resolved": "https://registry.npmjs.org/@angular/tsc-wrapped/-/tsc-wrapped-4.4.4.tgz",
"integrity": "sha1-mEGCHlVha4JsoWAlD+heFfx0/8M=",
"requires": {
"tsickle": "0.21.6"
}
},
"@ionic/app-scripts": {
"version": "2.1.4-201709271749",
"resolved": "https://registry.npmjs.org/@ionic/app-scripts/-/app-scripts-2.1.4-201709271749.tgz",
"integrity": "sha512-BNnU1wbxMcrHHD+TU9zjZSs3YHlSpuS1vwcBjhEQYvbhNKKh2mYrFMObh00bgT/BvXY4Sz6Cctf6/m94/rRViw==",
"version": "3.0.0-201710101530",
"resolved": "https://registry.npmjs.org/@ionic/app-scripts/-/app-scripts-3.0.0-201710101530.tgz",
"integrity": "sha512-2r2wXwTwvpx+8euSgw866+XGqYpH+xcoV8wK5PC/fH8PACSr4Dzos3oXz/XdFCuoNslt8sjnbUOgkNG+odwzkw==",
"dev": true,
"requires": {
"@angular-devkit/build-optimizer": "0.0.21",
"autoprefixer": "7.1.1",
"chalk": "1.1.3",
"chokidar": "1.7.0",
"clean-css": "3.4.27",
"clean-css": "4.1.9",
"cross-spawn": "5.1.0",
"express": "4.15.3",
"fs-extra": "3.0.1",
@@ -122,7 +122,7 @@
"tiny-lr": "1.0.4",
"tslint": "5.7.0",
"tslint-eslint-rules": "4.1.1",
"uglify-es": "3.1.2",
"uglify-es": "3.1.3",
"webpack": "3.6.0",
"ws": "1.1.1",
"xml2js": "0.4.17"
@@ -176,7 +176,7 @@
"integrity": "sha1-Co7eMJzg69ui8FNOV0aSUR3XHrY=",
"dev": true,
"requires": {
"@types/node": "6.0.88"
"@types/node": "6.0.89"
}
},
"@types/del": {
@@ -194,7 +194,7 @@
"integrity": "sha512-zaGeOpEYp5G2EhjaUFdVwysDrfEYc6Q6iPhd3Kl4ip30x0tvVv7SuJvY3yzCUSuFlzAG8N5KsyY6BJg93/cn+Q==",
"dev": true,
"requires": {
"@types/node": "6.0.88"
"@types/node": "6.0.89"
}
},
"@types/fs-extra": {
@@ -203,7 +203,7 @@
"integrity": "sha1-GV8RvNmhuX2eQSxrZombVFRxofc=",
"dev": true,
"requires": {
"@types/node": "6.0.88"
"@types/node": "6.0.89"
}
},
"@types/glob": {
@@ -213,7 +213,7 @@
"dev": true,
"requires": {
"@types/minimatch": "3.0.1",
"@types/node": "6.0.88"
"@types/node": "6.0.89"
}
},
"@types/gulp": {
@@ -222,7 +222,7 @@
"integrity": "sha1-g8WcaBzCM9Hsf4LSaVVVZvoTMVY=",
"dev": true,
"requires": {
"@types/node": "6.0.88",
"@types/node": "6.0.89",
"@types/orchestrator": "0.3.0",
"@types/vinyl": "2.0.1"
}
@@ -233,7 +233,7 @@
"integrity": "sha1-P+Cy9g/QR+/1gijqE5TTXV30a3E=",
"dev": true,
"requires": {
"@types/node": "6.0.88"
"@types/node": "6.0.89"
}
},
"@types/hammerjs": {
@@ -260,7 +260,7 @@
"integrity": "sha1-y1UumCbKPAjZ5lSd6ezY8VQX8G0=",
"dev": true,
"requires": {
"@types/node": "6.0.88"
"@types/node": "6.0.89"
}
},
"@types/mime": {
@@ -282,9 +282,9 @@
"dev": true
},
"@types/node": {
"version": "6.0.88",
"resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.88.tgz",
"integrity": "sha512-bYDPZTX0/s1aihdjLuAgogUAT5M+TpoWChEMea2p0yOcfn5bu3k6cJb9cp6nw268XeSNIGGr+4+/8V5K6BGzLQ==",
"version": "6.0.89",
"resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.89.tgz",
"integrity": "sha512-Z/67L97+6H1qJiEEHSN1SQapkWjDss1D90rAnFcQ6UxKkah9juzotK5UNEP1bDv/0lJ3NAQTnVfc/JWdgCGruA==",
"dev": true
},
"@types/orchestrator": {
@@ -293,7 +293,7 @@
"integrity": "sha1-v4ShaZyTMNT+ic2BJj6PwJ+zKXg=",
"dev": true,
"requires": {
"@types/node": "6.0.88",
"@types/node": "6.0.89",
"@types/q": "0.0.37"
}
},
@@ -319,7 +319,7 @@
"dev": true,
"requires": {
"@types/gulp": "3.8.32",
"@types/node": "6.0.88"
"@types/node": "6.0.89"
}
},
"@types/selenium-webdriver": {
@@ -356,7 +356,7 @@
"integrity": "sha1-abK91NNhjIoSY7i6p2ObLDDtgn4=",
"dev": true,
"requires": {
"@types/node": "6.0.88"
"@types/node": "6.0.89"
}
},
"@types/vinyl": {
@@ -365,7 +365,7 @@
"integrity": "sha512-Joudabfn2ZofU2usW04y8OLmN75u7ZQkW0MCT3AnoBf5oUBp5iQ3Pgfz9+y1RdWkzhCPZo9/wBJ7FMWW2JrY0g==",
"dev": true,
"requires": {
"@types/node": "6.0.88"
"@types/node": "6.0.89"
}
},
"JSONStream": {
@@ -379,9 +379,9 @@
}
},
"abbrev": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz",
"integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=",
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
"integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
"dev": true
},
"abstract-leveldown": {
@@ -774,11 +774,11 @@
"integrity": "sha1-l7yFTH0Ll5+NZIneVHoNF/swf20=",
"dev": true,
"requires": {
"browserslist": "2.4.0",
"caniuse-lite": "1.0.30000738",
"browserslist": "2.5.1",
"caniuse-lite": "1.0.30000745",
"normalize-range": "0.1.2",
"num2fraction": "1.2.2",
"postcss": "6.0.12",
"postcss": "6.0.13",
"postcss-value-parser": "3.3.0"
},
"dependencies": {
@@ -794,15 +794,21 @@
}
},
"postcss": {
"version": "6.0.12",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.12.tgz",
"integrity": "sha512-K6SLofXEK43FBSyZ6/ExQV7ji24OEw4tEY6x1CAf7+tcoMWJoO24Rf3rVFVpk+5IQL1e1Cy3sTKfg7hXuLzafg==",
"version": "6.0.13",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.13.tgz",
"integrity": "sha512-nHsrD1PPTMSJDfU+osVsLtPkSP9YGeoOz4FDLN4r1DW4N5vqL1J+gACzTQHsfwIiWG/0/nV4yCzjTMo1zD8U1g==",
"dev": true,
"requires": {
"chalk": "2.1.0",
"source-map": "0.5.7",
"source-map": "0.6.1",
"supports-color": "4.4.0"
}
},
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true
}
}
},
@@ -1574,9 +1580,9 @@
}
},
"bluebird": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz",
"integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=",
"version": "3.5.1",
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz",
"integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==",
"dev": true
},
"bn.js": {
@@ -1885,13 +1891,13 @@
}
},
"browserslist": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.4.0.tgz",
"integrity": "sha512-aM2Gt4x9bVlCUteADBS6JP0F+2tMWKM1jQzUulVROtdFWFIcIVvY76AJbr7GDqy0eDhn+PcnpzzivGxY4qiaKQ==",
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.5.1.tgz",
"integrity": "sha512-jAvM2ku7YDJ+leAq3bFH1DE0Ylw+F+EQDq4GkqZfgPEqpWYw9ofQH85uKSB9r3Tv7XDbfqVtE+sdvKJW7IlPJA==",
"dev": true,
"requires": {
"caniuse-lite": "1.0.30000738",
"electron-to-chromium": "1.3.22"
"caniuse-lite": "1.0.30000745",
"electron-to-chromium": "1.3.24"
}
},
"buffer": {
@@ -2003,15 +2009,15 @@
}
},
"caniuse-db": {
"version": "1.0.30000738",
"resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000738.tgz",
"integrity": "sha1-hICavEmjkOWowiSrk2nT+NAaogI=",
"version": "1.0.30000745",
"resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000745.tgz",
"integrity": "sha1-slmmFzej5IxPtLaxvETt6yZM1CI=",
"dev": true
},
"caniuse-lite": {
"version": "1.0.30000738",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000738.tgz",
"integrity": "sha1-GCDDya25oRfjEaW9yh0lvDQojro=",
"version": "1.0.30000745",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000745.tgz",
"integrity": "sha1-INb+3hFXpJNRM1ApRvx+DmuIDaU=",
"dev": true
},
"canonical-path": {
@@ -2173,24 +2179,12 @@
}
},
"clean-css": {
"version": "3.4.27",
"resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.27.tgz",
"integrity": "sha1-re91sxwWD/pdcvTeZ5ZuJmDBolU=",
"version": "4.1.9",
"resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.9.tgz",
"integrity": "sha1-Nc7ornaHpJuYA09w3gDE7dOCYwE=",
"dev": true,
"requires": {
"commander": "2.8.1",
"source-map": "0.4.4"
},
"dependencies": {
"source-map": {
"version": "0.4.4",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
"integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
"dev": true,
"requires": {
"amdefine": "1.0.1"
}
}
"source-map": "0.5.7"
}
},
"cli-boxes": {
@@ -2295,13 +2289,10 @@
}
},
"commander": {
"version": "2.8.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz",
"integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=",
"dev": true,
"requires": {
"graceful-readlink": "1.0.1"
}
"version": "2.11.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz",
"integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==",
"dev": true
},
"compare-func": {
"version": "1.3.2",
@@ -2592,11 +2583,11 @@
"integrity": "sha1-iuP7Wf63S77golgz7h+D2tSgeHQ=",
"dev": true,
"requires": {
"conventional-changelog-angular": "1.5.0",
"conventional-changelog-angular": "1.5.1",
"conventional-changelog-atom": "0.1.1",
"conventional-changelog-codemirror": "0.1.0",
"conventional-changelog-core": "1.9.1",
"conventional-changelog-ember": "0.2.7",
"conventional-changelog-core": "1.9.2",
"conventional-changelog-ember": "0.2.8",
"conventional-changelog-eslint": "0.1.0",
"conventional-changelog-express": "0.1.0",
"conventional-changelog-jquery": "0.1.0",
@@ -2605,9 +2596,9 @@
}
},
"conventional-changelog-angular": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-1.5.0.tgz",
"integrity": "sha512-Gt0qSf5wdFmLabgdSlqjguDAmPyYTXtUl4WH5W3SlpElHhnU/UiCY3M7xcIkZxrNQfVA1UxUBgu65eBbaJnZVA==",
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-1.5.1.tgz",
"integrity": "sha512-AnjnPyqHp8yR2IOWsXYOCv6Ly0WC2rLRK04fgAS/5QoA3ovYLSoz9PKB5pcSG3M9lAf40IqZwU3R3G6Hy7XCSA==",
"dev": true,
"requires": {
"compare-func": "1.3.2",
@@ -2633,9 +2624,9 @@
}
},
"conventional-changelog-core": {
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-1.9.1.tgz",
"integrity": "sha512-Fo0bSeO+NsO6GtuQXts0xQeRpLrxaABTPU8NK4Zij9sJB3zFkU4BObSefJS4F4+EkKujaKCWtfS6Uih+9NpXrQ==",
"version": "1.9.2",
"resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-1.9.2.tgz",
"integrity": "sha512-L/boGKXaKWrlCU8bHa1QM36Pb/JopCPmekj5SFqqAuBfjya860xX2fAC5Ggelse++Bw39AZ2NrHwBnJrdwLlLw==",
"dev": true,
"requires": {
"conventional-changelog-writer": "2.0.1",
@@ -2644,7 +2635,7 @@
"get-pkg-repo": "1.4.0",
"git-raw-commits": "1.2.0",
"git-remote-origin-url": "2.0.0",
"git-semver-tags": "1.2.1",
"git-semver-tags": "1.2.2",
"lodash": "4.17.4",
"normalize-package-data": "2.4.0",
"q": "1.4.1",
@@ -2654,9 +2645,9 @@
}
},
"conventional-changelog-ember": {
"version": "0.2.7",
"resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-0.2.7.tgz",
"integrity": "sha512-Xj1v9uVcKM8N798hMr7e6yiw8IFyvI6Ik+TdjdmG54uGupqvEEWW37xAbPPbdKvgoitbyZkqUTancj055actEg==",
"version": "0.2.8",
"resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-0.2.8.tgz",
"integrity": "sha512-smsh0o/S95n22lrQZrSHYjJrxIGoFl+OFHK+q2KGHA2zRFrW7QilYM7VUjgmB+emzwqFguPjrq+D2U8iPhMNJg==",
"dev": true,
"requires": {
"q": "1.4.1"
@@ -2974,7 +2965,7 @@
"integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=",
"dev": true,
"requires": {
"es5-ext": "0.10.30"
"es5-ext": "0.10.31"
}
},
"dargs": {
@@ -3165,7 +3156,7 @@
"optimist": "0.6.1",
"q": "1.4.1",
"validate.js": "0.9.0",
"winston": "2.3.1"
"winston": "2.4.0"
},
"dependencies": {
"lodash": {
@@ -3219,9 +3210,9 @@
"dev": true
},
"diff": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz",
"integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==",
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/diff/-/diff-3.4.0.tgz",
"integrity": "sha512-QpVuMTEoJMF7cKzi6bvWhRulU1fZqZnvyVQgNhPaxxuTYwyjn/j1v9falseQ/uXWwPnO56RBfwtg4h/EQXmucA==",
"dev": true
},
"diffie-hellman": {
@@ -3231,7 +3222,7 @@
"dev": true,
"requires": {
"bn.js": "4.11.8",
"miller-rabin": "4.0.0",
"miller-rabin": "4.0.1",
"randombytes": "2.0.5"
}
},
@@ -3437,9 +3428,9 @@
"dev": true
},
"electron-to-chromium": {
"version": "1.3.22",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.22.tgz",
"integrity": "sha1-QyLVLBUUBuPq73StAmdog+hBZBg=",
"version": "1.3.24",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.24.tgz",
"integrity": "sha1-m3uIuwXOufoBahd4M8wt3jiPIbY=",
"dev": true
},
"elliptic": {
@@ -3707,9 +3698,9 @@
}
},
"es5-ext": {
"version": "0.10.30",
"resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.30.tgz",
"integrity": "sha1-cUGhaDZpfbq/qq7uQUlc4p9SyTk=",
"version": "0.10.31",
"resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.31.tgz",
"integrity": "sha1-e7k4yVp/G59ygJLcCcQe3MOY7v4=",
"dev": true,
"requires": {
"es6-iterator": "2.0.1",
@@ -3729,7 +3720,7 @@
"dev": true,
"requires": {
"d": "1.0.0",
"es5-ext": "0.10.30",
"es5-ext": "0.10.31",
"es6-symbol": "3.1.1"
}
},
@@ -3740,7 +3731,7 @@
"dev": true,
"requires": {
"d": "1.0.0",
"es5-ext": "0.10.30",
"es5-ext": "0.10.31",
"es6-iterator": "2.0.1",
"es6-set": "0.1.5",
"es6-symbol": "3.1.1",
@@ -3760,7 +3751,7 @@
"dev": true,
"requires": {
"d": "1.0.0",
"es5-ext": "0.10.30",
"es5-ext": "0.10.31",
"es6-iterator": "2.0.1",
"es6-symbol": "3.1.1",
"event-emitter": "0.3.5"
@@ -3773,7 +3764,7 @@
"dev": true,
"requires": {
"d": "1.0.0",
"es5-ext": "0.10.30"
"es5-ext": "0.10.31"
}
},
"es6-weak-map": {
@@ -3783,7 +3774,7 @@
"dev": true,
"requires": {
"d": "1.0.0",
"es5-ext": "0.10.30",
"es5-ext": "0.10.31",
"es6-iterator": "2.0.1",
"es6-symbol": "3.1.1"
}
@@ -3896,7 +3887,7 @@
"dev": true,
"requires": {
"d": "1.0.0",
"es5-ext": "0.10.30"
"es5-ext": "0.10.31"
}
},
"event-stream": {
@@ -5619,9 +5610,9 @@
}
},
"git-semver-tags": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-1.2.1.tgz",
"integrity": "sha512-fFyxtzTHCTQKwB4clA2AInVrlflBbVbbJD4NWwmxKXHUgsU/K9kmHNlkPLqFiuy9xu9q3lNopghR4VXeQwZbTQ==",
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-1.2.2.tgz",
"integrity": "sha512-fhINopzKBQ8m6YlQt7gPf6T6hFnTF84O7U+8kYJmfjjKk7gbmKGj+BLcKNWi+japPbBwCeXXnfKwThpJpR9ZnQ==",
"dev": true,
"requires": {
"meow": "3.7.0",
@@ -5841,6 +5832,15 @@
"find-index": "0.1.1"
}
},
"global-dirs": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.0.tgz",
"integrity": "sha1-ENNAOeDfBCcuJizyQiT3IJQ0308=",
"dev": true,
"requires": {
"ini": "1.3.4"
}
},
"global-modules": {
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz",
@@ -6005,7 +6005,7 @@
"dev": true,
"requires": {
"browserslist": "1.7.7",
"caniuse-db": "1.0.30000738",
"caniuse-db": "1.0.30000745",
"normalize-range": "0.1.2",
"num2fraction": "1.2.2",
"postcss": "5.2.17",
@@ -6018,8 +6018,8 @@
"integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
"dev": true,
"requires": {
"caniuse-db": "1.0.30000738",
"electron-to-chromium": "1.3.22"
"caniuse-db": "1.0.30000745",
"electron-to-chromium": "1.3.24"
}
}
}
@@ -6096,12 +6096,42 @@
"integrity": "sha1-xDUiFUvMxmtKE23JKNd6oIGaGmc=",
"dev": true,
"requires": {
"clean-css": "3.4.27",
"clean-css": "3.4.28",
"gulp-util": "3.0.7",
"object-assign": "4.1.1",
"readable-stream": "2.3.3",
"vinyl-bufferstream": "1.0.1",
"vinyl-sourcemaps-apply": "0.2.1"
},
"dependencies": {
"clean-css": {
"version": "3.4.28",
"resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz",
"integrity": "sha1-vxlF6C/ICPVWlebd6uwBQA79A/8=",
"dev": true,
"requires": {
"commander": "2.8.1",
"source-map": "0.4.4"
}
},
"commander": {
"version": "2.8.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz",
"integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=",
"dev": true,
"requires": {
"graceful-readlink": "1.0.1"
}
},
"source-map": {
"version": "0.4.4",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
"integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
"dev": true,
"requires": {
"amdefine": "1.0.1"
}
}
}
},
"gulp-concat": {
@@ -6641,7 +6671,7 @@
"integrity": "sha1-SjtojbXSsRP0T2N0aB5G853DQec=",
"dev": true,
"requires": {
"bluebird": "3.5.0",
"bluebird": "3.5.1",
"dargs": "4.1.0",
"event-stream": "3.3.4",
"gulp-util": "3.0.7",
@@ -7378,14 +7408,6 @@
"commander": "2.11.0",
"is-my-json-valid": "2.16.1",
"pinkie-promise": "2.0.1"
},
"dependencies": {
"commander": {
"version": "2.11.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz",
"integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==",
"dev": true
}
}
},
"has-ansi": {
@@ -7558,28 +7580,13 @@
"ncname": "1.0.0",
"param-case": "2.1.1",
"relateurl": "0.2.7",
"uglify-js": "3.1.2"
"uglify-js": "3.1.3"
},
"dependencies": {
"clean-css": {
"version": "4.1.9",
"resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.9.tgz",
"integrity": "sha1-Nc7ornaHpJuYA09w3gDE7dOCYwE=",
"dev": true,
"requires": {
"source-map": "0.5.7"
}
},
"commander": {
"version": "2.11.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz",
"integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==",
"dev": true
},
"uglify-js": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.1.2.tgz",
"integrity": "sha512-kKJ8zg7Ivw3DG9Ytgp4+iiSHq3HaHjEQMvyT2x2Bs8kSUwVemj6bPGFp6YWL81f5NAIOLVUKPxBSvqLRGXMpdw==",
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.1.3.tgz",
"integrity": "sha512-5ZUOgufCHjN2mBBLfz63UtWTP6va2sSzBpNCM+/iqI6RnPzEhANmB0EKiKBYdQbc3v7KeomXJ2DJx0Xq9gvUvA==",
"dev": true,
"requires": {
"commander": "2.11.0",
@@ -7615,9 +7622,9 @@
}
},
"http-parser-js": {
"version": "0.4.8",
"resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.8.tgz",
"integrity": "sha512-jmHp99g6/fLx0pRNJqzsQgjsclCHAY7NhIeA3/U+bsGNvgbvUCQFQY9m5AYpqpAxY/2VcikfbKpjQozSTiz0jA==",
"version": "0.4.9",
"resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.9.tgz",
"integrity": "sha1-6hoE+2St/wJC6ZdPKX3Uw8rSceE=",
"dev": true
},
"http-proxy": {
@@ -7949,6 +7956,16 @@
"is-extglob": "1.0.0"
}
},
"is-installed-globally": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz",
"integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=",
"dev": true,
"requires": {
"global-dirs": "0.1.0",
"is-path-inside": "1.0.0"
}
},
"is-lower-case": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-1.1.3.tgz",
@@ -8107,7 +8124,7 @@
"integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=",
"dev": true,
"requires": {
"text-extensions": "1.6.0"
"text-extensions": "1.7.0"
}
},
"is-typedarray": {
@@ -8375,9 +8392,9 @@
}
},
"jasminewd2": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/jasminewd2/-/jasminewd2-2.1.0.tgz",
"integrity": "sha1-2llSddGuYx3nNqwKfH2Fyfc+9lI=",
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/jasminewd2/-/jasminewd2-2.2.0.tgz",
"integrity": "sha1-43zwsX8ZnM4jvqcbIDk5Uka07E4=",
"dev": true
},
"js-base64": {
@@ -8527,7 +8544,7 @@
"integrity": "sha1-srlOj0mfrdAGnVT5rvSk1I7FzB8=",
"dev": true,
"requires": {
"bluebird": "3.5.0",
"bluebird": "3.5.1",
"body-parser": "1.13.3",
"chokidar": "1.7.0",
"colors": "1.1.2",
@@ -9422,7 +9439,7 @@
"integrity": "sha1-FNdoATyvLsj96hakmvgvw3fnUgE=",
"dev": true,
"requires": {
"vlq": "0.2.2"
"vlq": "0.2.3"
}
},
"make-dir": {
@@ -9482,7 +9499,7 @@
"integrity": "sha1-bMzZd7gBMqB3MdbozljCyDA8+a8=",
"dev": true,
"requires": {
"abbrev": "1.1.0"
"abbrev": "1.1.1"
}
}
}
@@ -9664,9 +9681,9 @@
}
},
"miller-rabin": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.0.tgz",
"integrity": "sha1-SmL7HUKTPAVYOYL0xxb2+55sbT0=",
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
"integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
"dev": true,
"requires": {
"bn.js": "4.11.8",
@@ -10158,7 +10175,7 @@
"integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
"dev": true,
"requires": {
"abbrev": "1.1.0"
"abbrev": "1.1.1"
}
},
"normalize-package-data": {
@@ -10912,14 +10929,14 @@
"integrity": "sha1-myIXQXCaTGLVzVPGqt1UpxE36V8=",
"dev": true,
"requires": {
"@types/node": "6.0.88",
"@types/node": "6.0.89",
"@types/q": "0.0.32",
"@types/selenium-webdriver": "2.53.42",
"blocking-proxy": "0.0.5",
"chalk": "1.1.3",
"glob": "7.0.6",
"jasmine": "2.8.0",
"jasminewd2": "2.1.0",
"jasminewd2": "2.2.0",
"optimist": "0.6.1",
"q": "1.4.1",
"saucelabs": "1.3.0",
@@ -11885,7 +11902,7 @@
"integrity": "sha1-lw67DacZMwEoX7GqZQ85vdgetFo=",
"dev": true,
"requires": {
"vlq": "0.2.2"
"vlq": "0.2.3"
}
},
"rollup-pluginutils": {
@@ -12170,7 +12187,7 @@
"scss-comment-parser": "0.8.3",
"strip-indent": "2.0.0",
"through2": "1.1.1",
"update-notifier": "2.2.0",
"update-notifier": "2.3.0",
"vinyl-fs": "2.4.4",
"vinyl-source-stream": "1.1.0"
},
@@ -13554,9 +13571,9 @@
}
},
"text-extensions": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.6.0.tgz",
"integrity": "sha512-U2M04F2rbuYYCNioiTD14cImLTae4ys1rC57tllzKg3dt5DPR2JXs5yFdC017yOBrW6wM6s5gtAlFJ7yye04rA==",
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.7.0.tgz",
"integrity": "sha512-AKXZeDq230UaSzaO5s3qQUZOaC7iKbzq0jOFL614R7d9R593HLqAOL0cYoqLdkNrjBSOdmoQI06yigq1TSBXAg==",
"dev": true
},
"through": {
@@ -13758,7 +13775,7 @@
"requires": {
"arrify": "1.0.1",
"chalk": "2.1.0",
"diff": "3.3.1",
"diff": "3.4.0",
"make-error": "1.3.0",
"minimist": "1.2.0",
"mkdirp": "0.5.1",
@@ -13833,21 +13850,15 @@
"babel-code-frame": "6.26.0",
"colors": "1.1.2",
"commander": "2.11.0",
"diff": "3.3.1",
"diff": "3.4.0",
"glob": "7.1.2",
"minimatch": "3.0.4",
"resolve": "1.4.0",
"semver": "5.3.0",
"tslib": "1.7.1",
"tsutils": "2.9.0"
"tsutils": "2.12.1"
},
"dependencies": {
"commander": {
"version": "2.11.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz",
"integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==",
"dev": true
},
"glob": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
@@ -13899,9 +13910,9 @@
"dev": true
},
"tsutils": {
"version": "2.9.0",
"resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.9.0.tgz",
"integrity": "sha1-fhU3tVa6tocvp+ZIXf9FsHbVUz0=",
"version": "2.12.1",
"resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.12.1.tgz",
"integrity": "sha1-9Nlc4zkciXHkblTEzw7bCiHdWyQ=",
"dev": true,
"requires": {
"tslib": "1.7.1"
@@ -13964,21 +13975,13 @@
"dev": true
},
"uglify-es": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.1.2.tgz",
"integrity": "sha512-ULYW1xj/yW0IAkLW1XzIXB3O888275E2/r4tFy83D9wPRKGlUjKWeQAZoyHXujr/fsHeh6QMlc1ayCE8kqnoaw==",
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.1.3.tgz",
"integrity": "sha512-Nuo5gkv/Q6PmLa+Ui2LvK+87YdMAcuXfRIWF0uVfkHVSfpT3Ue0euCSu4t0b8xv4Bt05lmXUT8bLI9OmnyPj8A==",
"dev": true,
"requires": {
"commander": "2.11.0",
"source-map": "0.5.7"
},
"dependencies": {
"commander": {
"version": "2.11.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz",
"integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==",
"dev": true
}
}
},
"uglify-save-license": {
@@ -14126,19 +14129,33 @@
"dev": true
},
"update-notifier": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.2.0.tgz",
"integrity": "sha1-G1g3z5DAc22IYncytmHBOPht5y8=",
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.3.0.tgz",
"integrity": "sha1-TognpruRUUCrCTVZ1wFOPruDdFE=",
"dev": true,
"requires": {
"boxen": "1.2.1",
"chalk": "1.1.3",
"chalk": "2.1.0",
"configstore": "3.1.1",
"import-lazy": "2.1.0",
"is-installed-globally": "0.1.0",
"is-npm": "1.0.0",
"latest-version": "3.1.0",
"semver-diff": "2.1.0",
"xdg-basedir": "3.0.0"
},
"dependencies": {
"chalk": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz",
"integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==",
"dev": true,
"requires": {
"ansi-styles": "3.2.0",
"escape-string-regexp": "1.0.5",
"supports-color": "4.4.0"
}
}
}
},
"upper-case": {
@@ -14503,9 +14520,9 @@
}
},
"vlq": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.2.tgz",
"integrity": "sha1-4xbVJXtAuGu0PLjV/qXX9U1rDKE=",
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz",
"integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==",
"dev": true
},
"vm-browserify": {
@@ -14788,7 +14805,7 @@
"integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=",
"dev": true,
"requires": {
"http-parser-js": "0.4.8",
"http-parser-js": "0.4.9",
"websocket-extensions": "0.1.2"
}
},
@@ -14853,9 +14870,9 @@
"dev": true
},
"winston": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/winston/-/winston-2.3.1.tgz",
"integrity": "sha1-C0hCDZeMAYBM8CMLZIhhWYIloRk=",
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/winston/-/winston-2.4.0.tgz",
"integrity": "sha1-gIBQuT1SZh7Z+2wms/DIJnCLCu4=",
"dev": true,
"requires": {
"async": "1.0.0",
@@ -15060,9 +15077,9 @@
"dev": true
},
"zone.js": {
"version": "0.8.17",
"resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.8.17.tgz",
"integrity": "sha1-TF5RhahX2o2nk9rzkZNxxaNrKgs="
"version": "0.8.18",
"resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.8.18.tgz",
"integrity": "sha512-knKOBQM0oea3/x9pdyDuDi7RhxDlJhOIkeixXSiTKWLgs4LpK37iBc+1HaHwzlciHUKT172CymJFKo8Xgh+44Q=="
}
}
}

View File

@@ -1,7 +1,7 @@
{
"private": true,
"name": "ionic2",
"version": "3.6.1",
"version": "3.7.1",
"description": "A powerful framework for building mobile and progressive web apps with JavaScript and Angular",
"keywords": [
"ionic",
@@ -26,20 +26,20 @@
"tsc": "tsc --outdir .tmp"
},
"dependencies": {
"@angular/common": "4.4.3",
"@angular/compiler": "4.4.3",
"@angular/compiler-cli": "4.4.3",
"@angular/core": "4.4.3",
"@angular/forms": "4.4.3",
"@angular/http": "4.4.3",
"@angular/platform-browser": "4.4.3",
"@angular/platform-browser-dynamic": "4.4.3",
"@angular/common": "4.4.4",
"@angular/compiler": "4.4.4",
"@angular/compiler-cli": "4.4.4",
"@angular/core": "4.4.4",
"@angular/forms": "4.4.4",
"@angular/http": "4.4.4",
"@angular/platform-browser": "4.4.4",
"@angular/platform-browser-dynamic": "4.4.4",
"ionicons": "~3.0.0",
"rxjs": "5.4.3",
"zone.js": "0.8.17"
"zone.js": "0.8.18"
},
"devDependencies": {
"@ionic/app-scripts": "2.1.4-201709271749",
"@ionic/app-scripts": "nightly",
"@ionic/commit-hooks": "1.0.3",
"@types/connect": "3.4.30",
"@types/del": "2.2.31",
@@ -134,7 +134,7 @@
"ts-node": "3.3.0",
"tslint": "^5.4.3",
"tslint-ionic-rules": "0.0.11",
"typescript": "~2.3.2",
"typescript": "~2.3.4",
"vinyl": "1.2.0",
"yargs": "5.0.0"
},

View File

@@ -8,7 +8,7 @@ import * as s3 from 's3';
import { argv } from 'yargs';
import { DEMOS_SRC_ROOT, ES_2015, PROJECT_ROOT } from '../constants';
import { DEMOS_SRC_ROOT, ES_2015, ES5, PROJECT_ROOT } from '../constants';
import { createTempTsConfig, getFolderInfo, runAppScriptsBuild, writePolyfills } from '../util';
import * as pAll from 'p-all';
@@ -90,7 +90,7 @@ function buildDemo(filePath: string) {
const pathToWriteFile = join(distTestRoot, 'tsconfig.json');
const pathToReadFile = join(PROJECT_ROOT, 'tsconfig.json');
createTempTsConfig(includeGlob, ES_2015, ES_2015, pathToReadFile, pathToWriteFile, { removeComments: true});
createTempTsConfig(includeGlob, ES5, ES_2015, pathToReadFile, pathToWriteFile, { removeComments: true});
const sassConfigPath = join('scripts', 'demos', 'sass.config.js');
const copyConfigPath = join('scripts', 'demos', 'copy.config.js');
@@ -99,6 +99,10 @@ function buildDemo(filePath: string) {
const appNgModulePath = join(dirname(filePath), 'app.module.ts');
const distDir = join(distTestRoot, 'www');
const minifyCss = argv.noMinifyCss ? false : true;
const minifyJs = argv.noMinifyJs ? false : true;
const optimizeJs = argv.noOptimizeJs ? false : true;
return runAppScriptsBuild(
appEntryPoint,
appNgModulePath,
@@ -107,7 +111,11 @@ function buildDemo(filePath: string) {
pathToWriteFile,
ionicAngularDir,
sassConfigPath,
copyConfigPath
copyConfigPath,
false,
minifyCss,
minifyJs,
optimizeJs
).then(() => {
const end = Date.now();
console.log(`${filePath} took a total of ${(end - start) / 1000} seconds to build`);

View File

@@ -133,7 +133,11 @@ function buildTest(filePath: string) {
const appNgModulePath = join(dirname(appEntryPoint), 'app.module.ts');
const distDir = join(distTestRoot, 'www');
return runAppScriptsBuild(appEntryPoint, appNgModulePath, ionicAngularDir, distDir, pathToWriteFile, ionicAngularDir, sassConfigPath, copyConfigPath, argv.dev).then(() => {
const minifyCss = argv.minifyCss ? true : false;
const minifyJs = argv.minifyJs ? true : false;
const optimizeJs = argv.optimizeJs ? true : false;
return runAppScriptsBuild(appEntryPoint, appNgModulePath, ionicAngularDir, distDir, pathToWriteFile, ionicAngularDir, sassConfigPath, copyConfigPath, argv.dev, minifyCss, minifyJs, optimizeJs).then(() => {
const end = Date.now();
console.log(`${filePath} took a total of ${(end - start) / 1000} seconds to build`);
}).catch((err) => {

View File

@@ -246,10 +246,10 @@ export function runAppScriptsServe(testOrDemoName: string, appEntryPoint: string
});
}
export function runAppScriptsBuild(appEntryPoint: string, appNgModulePath: string, srcDir: string, distDir: string, tsConfig: string, ionicAngularDir: string, sassConfigPath: string, copyConfigPath: string, isDev: boolean = false) {
export function runAppScriptsBuild(appEntryPoint: string, appNgModulePath: string, srcDir: string, distDir: string, tsConfig: string, ionicAngularDir: string, sassConfigPath: string, copyConfigPath: string, isDev: boolean = false, minifyCss: boolean = true, minifyJs: boolean = true, optimizeJs: boolean = true) {
const pathToAppScripts = join(NODE_MODULES_ROOT, '.bin', 'ionic-app-scripts');
const debug: boolean = argv.debug;
return runWorker(pathToAppScripts, debug, appEntryPoint, appNgModulePath, srcDir, distDir, tsConfig, ionicAngularDir, sassConfigPath, copyConfigPath, isDev);
return runWorker(pathToAppScripts, debug, appEntryPoint, appNgModulePath, srcDir, distDir, tsConfig, ionicAngularDir, sassConfigPath, copyConfigPath, isDev, minifyCss, minifyJs, optimizeJs);
}
/** Resolves the path for a node package executable. */

View File

@@ -3,7 +3,7 @@ import { dirname, join } from 'path';
import { MessageToWorker, WorkerProcess } from './interfaces';
export function runWorker(pathToAppScripts: string, debug: boolean, appEntryPoint: string, appNgModulePath: string, srcDir: string, distDir: string, tsConfig: string, ionicAngularDir: string, sassConfigPath: string, copyConfigPath: string, isDev: boolean) {
export function runWorker(pathToAppScripts: string, debug: boolean, appEntryPoint: string, appNgModulePath: string, srcDir: string, distDir: string, tsConfig: string, ionicAngularDir: string, sassConfigPath: string, copyConfigPath: string, isDev: boolean, minifyCss: boolean, minifyJs: boolean, optimizeJs: boolean) {
return new Promise((resolve, reject) => {
const msgToWorker: MessageToWorker = {
@@ -17,7 +17,10 @@ export function runWorker(pathToAppScripts: string, debug: boolean, appEntryPoin
ionicAngularDir: ionicAngularDir,
sassConfigPath: sassConfigPath,
copyConfigPath: copyConfigPath,
isDev: isDev
isDev: isDev,
minifyCss: minifyCss,
minifyJs: minifyJs,
optimizeJs: optimizeJs
};
const worker = <ChildProcess>createWorker(msgToWorker);
@@ -84,6 +87,18 @@ export function createWorker(msg: MessageToWorker): any {
scriptArgs.push('--debug');
}
if (msg.minifyJs) {
scriptArgs.push('--minifyJs');
}
if (msg.minifyCss) {
scriptArgs.push('--minifyCss');
}
if (msg.optimizeJs) {
scriptArgs.push('--optimizeJs');
}
const workerModule = join(process.cwd(), 'node_modules', '@ionic', 'app-scripts', 'bin', 'ionic-app-scripts.js');
const worker = fork(workerModule, scriptArgs, {
env: {

View File

@@ -2,7 +2,7 @@
export interface WorkerProcess {
appEntryPoint: string;
worker: any;
};
}
export interface MessageToWorker {
pathToAppScripts: string;
@@ -16,4 +16,8 @@ export interface MessageToWorker {
sassConfigPath: string;
copyConfigPath: string;
isDev: boolean;
};
minifyJs: boolean;
minifyCss: boolean;
optimizeJs: boolean;
}

View File

@@ -26,7 +26,7 @@ import { ViewController } from '../../navigation/view-controller';
'{{b.text}}' +
'</button>' +
'</div>' +
'<div class="action-sheet-group" *ngIf="cancelButton">' +
'<div class="action-sheet-group action-sheet-group-cancel" *ngIf="cancelButton">' +
'<button ion-button="action-sheet-button" (click)="click(cancelButton)" class="action-sheet-cancel disable-hover" [attr.icon-start]="cancelButton.icon ? \'\' : null" [ngClass]="cancelButton.cssClass">' +
'<ion-icon [name]="cancelButton.icon" *ngIf="cancelButton.icon" class="action-sheet-icon"></ion-icon>' +
'{{cancelButton.text}}' +

View File

@@ -21,6 +21,9 @@ $action-sheet-ios-padding-bottom: $action-sheet-ios-paddin
/// @prop - Padding start of the action sheet
$action-sheet-ios-padding-start: $action-sheet-ios-padding-end !default;
/// @prop - Top margin of the action sheet button group
$action-sheet-ios-group-margin-top: 10px !default;
/// @prop - Bottom margin of the action sheet button group
$action-sheet-ios-group-margin-bottom: 10px !default;
@@ -90,7 +93,8 @@ $action-sheet-ios-button-cancel-font-weight: 600 !default;
}
.action-sheet-ios .action-sheet-wrapper {
@include margin(auto, auto, constant(safe-area-inset-bottom), auto);
@include margin(constant(safe-area-inset-top), auto, constant(safe-area-inset-bottom), auto);
@include margin(env(safe-area-inset-top), auto, env(safe-area-inset-bottom), auto);
}
.action-sheet-ios .action-sheet-container {
@@ -103,9 +107,16 @@ $action-sheet-ios-button-cancel-font-weight: 600 !default;
@include border-radius($action-sheet-ios-border-radius);
@include margin(null, null, $action-sheet-ios-group-margin-bottom - 2, null);
overflow: hidden;
background: $action-sheet-ios-background;
// scss-lint:disable VendorPrefix
-webkit-overflow-scrolling: touch;
// Prevents borders from going outside of the container
-webkit-mask-image: -webkit-radial-gradient(circle, #fff, #000);
}
.action-sheet-ios .action-sheet-group:first-child {
@include margin($action-sheet-ios-group-margin-top, null, null, null);
}
.action-sheet-ios .action-sheet-group:last-child {

View File

@@ -9,8 +9,11 @@ $action-sheet-md-text-align: start !default;
/// @prop - Background color of the action sheet
$action-sheet-md-background: #fafafa !default;
/// @prop - Bottom margin of the action sheet button group
$action-sheet-md-group-margin-bottom: 8px !default;
/// @prop - Padding top of the action sheet
$action-sheet-md-padding-top: .8rem !default;
/// @prop - Padding bottom of the action sheet
$action-sheet-md-padding-bottom: .8rem !default;
/// @prop - Color of the action sheet title
$action-sheet-md-title-color: #757575 !default;
@@ -90,11 +93,6 @@ $action-sheet-md-icon-margin-bottom: 0 !default;
/// @prop - Margin start of the icon in the action sheet button
$action-sheet-md-icon-margin-start: 0 !default;
.action-sheet-md .action-sheet-container {
@include padding(.8rem, 0);
background: $action-sheet-md-background;
}
.action-sheet-md .action-sheet-title {
@include text-align($action-sheet-md-text-align);
@@ -144,7 +142,15 @@ $action-sheet-md-icon-margin-start: 0 !default;
}
.action-sheet-md .action-sheet-group {
overflow: hidden;
background: $action-sheet-md-background;
}
.action-sheet-md .action-sheet-group:first-child {
@include padding($action-sheet-md-padding-top, null, null, null);
}
.action-sheet-md .action-sheet-group:last-child {
@include padding(null, null, $action-sheet-md-padding-bottom, null);
}
.action-sheet-md .action-sheet-group .button-inner {

View File

@@ -22,7 +22,7 @@ ion-action-sheet {
}
.action-sheet-wrapper {
@include position(null, 0, 0, 0);
@include position(0, 0, 0, 0);
@include margin(auto);
@include transform(translate3d(0, 100%, 0));
@@ -32,8 +32,35 @@ ion-action-sheet {
width: $action-sheet-width;
max-width: $action-sheet-max-width;
pointer-events: none;
}
.action-sheet-button {
width: $action-sheet-width;
}
.action-sheet-container {
display: flex;
flex-flow: column;
justify-content: flex-end;
height: 100%;
max-height: 100%;
}
.action-sheet-group {
overflow: scroll;
flex-shrink: 2;
pointer-events: all;
}
.action-sheet-group-cancel {
overflow: hidden;
flex-shrink: 0;
}

View File

@@ -9,6 +9,12 @@ $action-sheet-wp-text-align: start !default;
/// @prop - Background color of the action sheet
$action-sheet-wp-background: #fff !default;
/// @prop - Padding top of the action sheet
$action-sheet-wp-padding-top: .8rem !default;
/// @prop - Padding bottom of the action sheet
$action-sheet-wp-padding-bottom: .8rem !default;
/// @prop - Box shadow color of the action sheet
$action-sheet-wp-box-shadow-color: rgba(0, 0, 0, .2) !default;
@@ -147,12 +153,18 @@ $action-sheet-wp-icon-margin-start: 0 !default;
}
}
.action-sheet-wp .action-sheet-container {
@include padding(.8rem, 0);
.action-sheet-wp .action-sheet-group {
background: $action-sheet-wp-background;
}
.action-sheet-wp .action-sheet-group:first-child {
@include padding($action-sheet-wp-padding-top, null, null, null);
}
.action-sheet-wp .action-sheet-group:last-child {
@include padding(null, null, $action-sheet-wp-padding-bottom, null);
}
.action-sheet-wp .action-sheet-group .button-inner {
justify-content: flex-start;
}

View File

@@ -9,9 +9,12 @@
<ion-content padding>
<button ion-button block class="e2eOpenActionSheet" (click)="presentActionSheet1()">Present Action Sheet 1</button>
<button ion-button block (click)="presentActionSheet2()">Present Action Sheet 2</button>
<button ion-button block (click)="presentActionSheet3()">Present Action Sheet 3</button>
<button ion-button block class="e2eOpenActionSheet" (click)="presentBasic()">Basic</button>
<button ion-button block (click)="presentNoBackdropDismiss()">No Backdrop Dismiss</button>
<button ion-button block (click)="presentAlert()">Alert from Action Sheet</button>
<button ion-button block (click)="presentScroll()">Scrollable Options</button>
<button ion-button block (click)="presentScrollNoCancel()">Scroll Without Cancel</button>
<button ion-button block (click)="presentCancelOnly()">Cancel Only</button>
<pre>
Result: {{result}}

View File

@@ -12,7 +12,7 @@ export class PageOne {
constructor(public actionSheetCtrl: ActionSheetController, public alertCtrl: AlertController, public modalCtrl: ModalController, public plt: Platform) {}
presentActionSheet1() {
presentBasic() {
this.result = '';
this.actionSheetCtrl.create()
@@ -66,7 +66,7 @@ export class PageOne {
.present();
}
presentActionSheet2() {
presentNoBackdropDismiss() {
this.result = '';
let actionSheet = this.actionSheetCtrl.create({
@@ -102,7 +102,7 @@ export class PageOne {
actionSheet.present(actionSheet);
}
presentActionSheet3() {
presentAlert() {
this.result = '';
let actionSheet = this.actionSheetCtrl.create({
@@ -150,4 +150,168 @@ export class PageOne {
actionSheet.present();
}
presentScroll() {
let actionSheet = this.actionSheetCtrl.create({
buttons: [
{
text: 'Add Reaction',
handler: () => {
console.log('Add Reaction clicked');
}
}, {
text: 'Copy Text',
handler: () => {
console.log('Copy Text clicked');
}
}, {
text: 'Share Text',
handler: () => {
console.log('Share Text clicked');
}
}, {
text: 'Copy Link to Message',
handler: () => {
console.log('Copy Link to Message clicked');
}
}, {
text: 'Remind Me',
handler: () => {
console.log('Remind Me clicked');
}
}, {
text: 'Pin File',
handler: () => {
console.log('Pin File clicked');
}
}, {
text: 'Star File',
handler: () => {
console.log('Star File clicked');
}
}, {
text: 'Mark Unread',
handler: () => {
console.log('Mark Unread clicked');
}
}, {
text: 'Edit Title',
handler: () => {
console.log('Edit Title clicked');
}
}, {
text: 'Save Image',
handler: () => {
console.log('Save Image clicked');
}
}, {
text: 'Copy Image',
handler: () => {
console.log('Copy Image clicked');
}
}, {
text: 'Delete File',
role: 'destructive',
handler: () => {
console.log('Delete File clicked');
}
}, {
text: 'Cancel',
role: 'cancel', // will always sort to be on the bottom
handler: () => {
console.log('Cancel clicked');
}
}
]
});
actionSheet.present();
}
presentScrollNoCancel() {
let actionSheet = this.actionSheetCtrl.create({
buttons: [
{
text: 'Add Reaction',
handler: () => {
console.log('Add Reaction clicked');
}
}, {
text: 'Copy Text',
handler: () => {
console.log('Copy Text clicked');
}
}, {
text: 'Share Text',
handler: () => {
console.log('Share Text clicked');
}
}, {
text: 'Copy Link to Message',
handler: () => {
console.log('Copy Link to Message clicked');
}
}, {
text: 'Remind Me',
handler: () => {
console.log('Remind Me clicked');
}
}, {
text: 'Pin File',
handler: () => {
console.log('Pin File clicked');
}
}, {
text: 'Star File',
handler: () => {
console.log('Star File clicked');
}
}, {
text: 'Mark Unread',
handler: () => {
console.log('Mark Unread clicked');
}
}, {
text: 'Edit Title',
handler: () => {
console.log('Edit Title clicked');
}
}, {
text: 'Save Image',
handler: () => {
console.log('Save Image clicked');
}
}, {
text: 'Copy Image',
handler: () => {
console.log('Copy Image clicked');
}
}, {
text: 'Delete File',
role: 'destructive',
handler: () => {
console.log('Delete File clicked');
}
}
]
});
actionSheet.present();
}
presentCancelOnly() {
let actionSheet = this.actionSheetCtrl.create({
buttons: [
{
text: 'Cancel',
role: 'cancel', // will always sort to be on the bottom
handler: () => {
console.log('Cancel clicked');
}
}
]
});
actionSheet.present();
}
}

View File

@@ -52,7 +52,7 @@ import { AlertButton, AlertInputOptions, AlertOptions } from './alert-options';
'<ng-template ngSwitchDefault>' +
'<div class="alert-input-group">' +
'<div *ngFor="let i of d.inputs" class="alert-input-wrapper">' +
'<input [placeholder]="i.placeholder" [(ngModel)]="i.value" [type]="i.type" [min]="i.min" [max]="i.max" [attr.id]="i.id" class="alert-input">' +
'<input [placeholder]="i.placeholder" [(ngModel)]="i.value" [type]="i.type" dir="auto" [min]="i.min" [max]="i.max" [attr.id]="i.id" class="alert-input">' +
'</div>' +
'</div>' +
'</ng-template>' +

View File

@@ -1,4 +1,4 @@
import { Component, ComponentFactoryResolver, ElementRef, Inject, OnInit, OpaqueToken, Renderer, ViewChild, ViewContainerRef } from '@angular/core';
import { Component, ComponentFactoryResolver, ElementRef, Inject, InjectionToken, OnInit, Renderer, ViewChild, ViewContainerRef } from '@angular/core';
import { App } from './app';
import { assert } from '../../util/util';
@@ -8,7 +8,7 @@ import { OverlayPortal } from './overlay-portal';
import { Platform } from '../../platform/platform';
import * as Constants from './app-constants';
export const AppRootToken = new OpaqueToken('USERROOT');
export const AppRootToken = new InjectionToken<any>('USERROOT');
/**
* @hidden

View File

@@ -274,6 +274,13 @@ export class App {
this._rootNavs.set(nav.id, nav);
}
/**
* @hidden
*/
unregisterRootNav(nav: NavigationContainer) {
this._rootNavs.delete(nav.id);
}
getActiveNavContainers(): NavigationContainer[] {
// for each root nav container, get it's active nav

View File

@@ -10,7 +10,7 @@ describe('App', () => {
describe('goBack', () => {
it('should not select the previous tab', () => {
it('should not select the previous tab', (done: Function) => {
const nav = mockNavController();
app.registerRootNav(nav);
@@ -23,24 +23,26 @@ describe('App', () => {
nav.registerChildNav(tabs);
tabs.select(tab1);
tabs.select(tab2);
expect(tabs._selectHistory).toEqual([tab1.id, tab2.id]);
spyOn(plt, 'exitApp');
spyOn(tabs, 'select');
spyOn(tab1, 'pop');
spyOn(tab2, 'pop');
spyOn(portal, 'pop');
app.goBack();
expect(tabs.select).not.toHaveBeenCalled();
expect(tab1.pop).not.toHaveBeenCalled();
expect(tab2.pop).not.toHaveBeenCalled();
expect(portal.pop).not.toHaveBeenCalled();
expect(plt.exitApp).toHaveBeenCalled();
tabs.select(tab1).then(() => {
return tabs.select(tab2);
}).then(() => {
expect(tabs._selectHistory).toEqual([tab1.id, tab2.id]);
spyOn(plt, 'exitApp');
spyOn(tabs, 'select');
spyOn(tab1, 'pop');
spyOn(tab2, 'pop');
spyOn(portal, 'pop');
return app.goBack();
}).then(() => {
expect(tabs.select).not.toHaveBeenCalled();
expect(tab1.pop).not.toHaveBeenCalled();
expect(tab2.pop).not.toHaveBeenCalled();
expect(portal.pop).not.toHaveBeenCalled();
expect(plt.exitApp).toHaveBeenCalled();
done();
}).catch((err: Error) => {
done(err);
});
});
it('should pop from the active tab, when tabs is nested is the root nav', () => {

View File

@@ -124,10 +124,6 @@ ion-app [no-padding] .scroll-content {
@include safe-area-padding($content-padding);
}
ion-app.#{$mode} .scroll-content {
@include safe-area-no-padding($content-padding);
}
ion-app.#{$mode} [padding-top] .scroll-content {
@include safe-area-padding($content-padding, null, null, null);
}

View File

@@ -1,4 +1,4 @@
import { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, EventEmitter, HostListener, Input, NgZone, OnDestroy, Optional, Output, Renderer, ViewChild, ViewEncapsulation } from '@angular/core';
import { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, NgZone, OnDestroy, Optional, Output, Renderer, ViewChild, ViewEncapsulation } from '@angular/core';
import { App } from '../app/app';
import { Config } from '../../config/config';
@@ -227,6 +227,8 @@ export class Content extends Ion implements OnDestroy, AfterViewInit, IContent {
/** @internal */
_scrollDownOnLoad: boolean = false;
_viewCtrl: any;
private _imgReqBfr: number;
private _imgRndBfr: number;
private _imgVelMax: number;
@@ -410,6 +412,8 @@ export class Content extends Ion implements OnDestroy, AfterViewInit, IContent {
}
if (viewCtrl) {
this._viewCtrl = viewCtrl;
// content has a view controller
viewCtrl._setIONContent(this);
viewCtrl._setIONContentRef(elementRef);
@@ -670,7 +674,6 @@ export class Content extends Ion implements OnDestroy, AfterViewInit, IContent {
* Tell the content to recalculate its dimensions. This should be called
* after dynamically adding/removing headers, footers, or tabs.
*/
@HostListener('window:resize')
resize() {
this._dom.read(this._readDimensions.bind(this));
this._dom.write(this._writeDimensions.bind(this));

View File

@@ -12,6 +12,7 @@ import { assert, clamp, deepCopy, isArray, isBlank, isObject, isPresent, isStrin
import {
DateTimeData,
LocaleData,
compareDates,
convertDataToISO,
convertFormatToKey,
dateDataSortValue,
@@ -321,6 +322,14 @@ export class DateTime extends BaseInput<DateTimeData> implements AfterContentIni
*/
@Input() displayFormat: string;
/**
* @input {string} The default datetime selected in picker modal if field value is empty.
* Value must be a date string following the
* [ISO 8601 datetime format standard](https://www.w3.org/TR/NOTE-datetime),
* `1996-12-19`.
*/
@Input() initialValue: string;
/**
* @input {string} The format of the date and time picker columns the user selects.
* A datetime input can have one or many datetime parts, each getting their
@@ -510,6 +519,7 @@ export class DateTime extends BaseInput<DateTimeData> implements AfterContentIni
if (this.isFocus() || this._disabled) {
return;
}
console.debug('datetime, open picker');
// the user may have assigned some options specifically for the alert
@@ -598,7 +608,7 @@ export class DateTime extends BaseInput<DateTimeData> implements AfterContentIni
// cool, we've loaded up the columns with options
// preselect the option for this column
const optValue = getValueFromFormat(this.getValue(), format);
const optValue = getValueFromFormat(this.getValueOrDefault(), format);
const selectedIndex = column.options.findIndex(opt => opt.value === optValue);
if (selectedIndex >= 0) {
// set the select index for this column's options
@@ -774,6 +784,51 @@ export class DateTime extends BaseInput<DateTimeData> implements AfterContentIni
return this._value;
}
/**
* @hidden
*/
getValueOrDefault(): DateTimeData {
if (this.hasValue()) {
return this._value;
}
const initialDateString = this.getDefaultValueDateString();
const _default = {};
updateDate(_default, initialDateString);
return _default;
}
/**
* Get the default value as a date string
* @hidden
*/
getDefaultValueDateString() {
if (this.initialValue) {
return this.initialValue;
}
const nowString = (new Date).toISOString();
if (this.max) {
const now = parseDate(nowString);
const max = parseDate(this.max);
let v;
for (let i in max) {
v = (<any>max)[i];
if (v === null) {
(<any>max)[i] = (<any>now)[i];
}
}
const diff = compareDates(now, max);
// If max is before current time, return max
if (diff > 0) {
return this.max;
}
}
return nowString;
}
/**
* @hidden
*/
@@ -837,7 +892,6 @@ export class DateTime extends BaseInput<DateTimeData> implements AfterContentIni
}
}
}
}
/**

View File

@@ -16,7 +16,12 @@
<ion-item>
<ion-label>MM DD YY</ion-label>
<ion-datetime displayFormat="MM DD YY" [(ngModel)]="placeholderDate" placeholder="Select Date"></ion-datetime>
<ion-datetime pickerFormat="YYYY-MM-DDThh:mm" [(ngModel)]="placeholderDate" placeholder="Select Date"></ion-datetime>
</ion-item>
<ion-item>
<ion-label>MM DD YY</ion-label>
<ion-datetime displayFormat="MM DD YY" [(ngModel)]="placeholderDate" placeholder="Select Date" initialValue="1987-10-19"></ion-datetime>
</ion-item>
<ion-item>
@@ -77,6 +82,11 @@
<ion-datetime monthValues="6,7,8" yearValues="2014,2015" dayValues="01,02,03,04,05,06,08,09,10, 11, 12, 13, 14" displayFormat="DD/MMM/YYYY" [(ngModel)]="specificDaysMonthsYears"></ion-datetime>
</ion-item>
<ion-item>
<ion-label>Default value</ion-label>
<ion-datetime max="2100" pickerDefault="2017-08-06" [(ngModel)]="defaultValue"></ion-datetime>
</ion-item>
<p aria-hidden="true" padding>
<code>monthOnly: {{monthOnly}}</code><br>
<code>wwwInvented: {{wwwInvented}}</code><br>
@@ -88,6 +98,7 @@
<code>time: {{time}}</code><br>
<code>Leap year, summer months: {{leapYearsSummerMonths}}</code><br>
<code>Specific days/months/years: {{specificDaysMonthsYears}}</code><br>
<code>Default value: {{defaultValue}}</code><br>
</p>
<p>

View File

@@ -17,6 +17,7 @@ export class RootPage {
leapYearsSummerMonths = '';
convertedDate = '';
specificDaysMonthsYears = '';
defaultValue: any;
leapYearsArray = [2020, 2016, 2008, 2004, 2000, 1996];

View File

@@ -4,7 +4,7 @@ import { DateTime } from '../datetime';
import { Form } from '../../../util/form';
import { Picker } from '../../picker/picker';
import { PickerController } from '../../picker/picker-controller';
import * as datetime from '../../../util/datetime-util';
import * as datetimeUtil from '../../../util/datetime-util';
import { mockApp, mockConfig, mockElementRef, mockRenderer } from '../../../util/mock-providers';
@@ -491,6 +491,53 @@ describe('DateTime', () => {
});
describe('defaultValue', () => {
it('should default to now if no initial value or bounds supplied', () => {
const now = datetimeUtil.parseDate(new Date().toISOString());
datetime.pickerFormat = 'YYYY-MM-DDThh:mm';
datetime.generate();
var columns = picker.getColumns();
expect(columns[0].options[columns[0].selectedIndex].value).toEqual(now.year);
expect(columns[1].options[columns[1].selectedIndex].value).toEqual(now.month);
expect(columns[2].options[columns[2].selectedIndex].value).toEqual(now.day);
expect(columns[3].options[columns[3].selectedIndex].value).toEqual(now.hour % 12);
expect(columns[4].options[columns[4].selectedIndex].value).toEqual(now.minute);
});
it('should default to max if no initial value supplied but max specified and max before current', () => {
datetime.max = '1987-10-19';
datetime.generate();
var columns = picker.getColumns();
expect(columns[0].options[columns[0].selectedIndex].value).toEqual(10);
expect(columns[1].options[columns[1].selectedIndex].value).toEqual(19);
expect(columns[2].options[columns[2].selectedIndex].value).toEqual(1987);
});
it('should default to current if no initial value supplied but max specified and max after current', () => {
const now = datetimeUtil.parseDate(new Date().toISOString());
datetime.max = '2100-10-19';
datetime.generate();
var columns = picker.getColumns();
expect(columns[0].options[columns[0].selectedIndex].value).toEqual(now.month);
expect(columns[1].options[columns[1].selectedIndex].value).toEqual(now.day);
expect(columns[2].options[columns[2].selectedIndex].value).toEqual(now.year);
});
it('should use pickerDefault if has no value', zoned(() => {
datetime.max = '2100-12-31';
datetime.pickerFormat = 'DD MMMM YYYY';
datetime.initialValue = '2004-08-06';
datetime.generate();
var columns = picker.getColumns();
expect(columns[0].options[columns[0].selectedIndex].value).toEqual(6);
expect(columns[1].options[columns[1].selectedIndex].value).toEqual(8);
expect(columns[2].options[columns[2].selectedIndex].value).toEqual(2004);
}));
});
describe('setValue', () => {
it('should update existing time value with 12-hour PM DateTimeData value', zoned(() => {
@@ -683,7 +730,7 @@ describe('DateTime', () => {
console.warn = function(){};
// pt-br
var customLocale: datetime.LocaleData = {
var customLocale: datetimeUtil.LocaleData = {
dayNames: [
'domingo',
'segunda-feira',

View File

@@ -97,10 +97,16 @@ ion-fab {
@include multi-dir() {
right: $fab-content-margin;
}
@include multi-dir() {
right: calc(#{$fab-content-margin} + constant(safe-area-inset-right));
right: calc(#{$fab-content-margin} + env(safe-area-inset-right));
}
}
&[end] {
@include position-horizontal(null, $fab-content-margin);
@include safe-position-horizontal(null, $fab-content-margin);
}
&[bottom] {
@@ -112,10 +118,16 @@ ion-fab {
@include multi-dir() {
left: $fab-content-margin;
}
@include multi-dir() {
left: calc(#{$fab-content-margin} + constant(safe-area-inset-left));
left: calc(#{$fab-content-margin} + env(safe-area-inset-left));
}
}
&[start] {
@include position-horizontal($fab-content-margin, null);
@include safe-position-horizontal($fab-content-margin, null);
}
&[top][edge] {

View File

@@ -101,6 +101,7 @@ import { Platform } from '../../platform/platform';
'(focus)="onFocus($event)" ' +
'(keydown)="onKeydown($event)" ' +
'[type]="_type" ' +
'dir="auto" ' +
'[attr.aria-labelledby]="_labelId" ' +
'[attr.min]="min" ' +
'[attr.max]="max" ' +

View File

@@ -1,6 +1,6 @@
@import "../../themes/ionic.globals";
$reorder-initial-transform: 160% !default;
$reorder-initial-transform: 300% !default;
// Item reorder
// --------------------------------------------------

View File

@@ -76,6 +76,10 @@ ion-item-options .button {
box-shadow: none;
box-sizing: content-box;
&:last-child {
@include safe-area-padding-horizontal(null, .7em);
}
}
ion-item-options:not([icon-left]) .button:not([icon-only]), // deprecated

View File

@@ -60,6 +60,7 @@ $item-ios-sliding-content-background: $list-ios-background-color !default;
.item-ios {
@include padding-horizontal($item-ios-padding-start, null);
@include safe-area-padding-horizontal($item-ios-padding-start, null);
@include border-radius(0);
position: relative;
@@ -124,6 +125,7 @@ $item-ios-sliding-content-background: $list-ios-background-color !default;
.item-ios.item-block .item-inner {
@include padding-horizontal(null, $item-ios-padding-end / 2);
@include safe-area-padding-horizontal(null, $item-ios-padding-end / 2);
border-bottom: $hairlines-width solid $list-ios-border-color;
}
@@ -219,9 +221,13 @@ $item-ios-sliding-content-background: $list-ios-background-color !default;
.item-ios[detail-push] .item-inner,
button.item-ios:not([detail-none]) .item-inner,
a.item-ios:not([detail-none]) .item-inner {
$safe-area-position: calc(#{$item-ios-padding-end - 2} + constant(safe-area-inset-right));
$safe-area-position-env: calc(#{$item-ios-padding-end - 2} + env(safe-area-inset-right));
@include svg-background-image($item-ios-detail-push-svg, true);
@include padding-horizontal(null, 32px);
@include background-position(end, $item-ios-padding-end - 2, center);
@include background-position(end, $safe-area-position, center);
@include background-position(end, $safe-area-position-env, center);
background-repeat: no-repeat;
background-size: 14px 14px;
@@ -247,6 +253,7 @@ ion-item-group .item-wrapper:last-child .item-ios .item-inner {
.item-divider-ios {
@include padding-horizontal($item-ios-padding-start, null);
@include safe-area-padding-horizontal($item-ios-padding-start, null);
color: $item-ios-divider-color;
background-color: $item-ios-divider-background;

View File

@@ -179,6 +179,7 @@ $list-ios-header-background-color: transparent !default;
.list-header-ios {
@include padding-horizontal($list-ios-header-padding-start, null);
@include safe-area-padding-horizontal($list-ios-header-padding-start, null);
position: relative;

View File

@@ -0,0 +1,22 @@
import { Component } from '@angular/core';
@Component({
template: `
<ion-split-pane>
<ion-tabs>
<ion-tab tabIcon="heart" [root]="tabs1Tab1" tabTitle="Heart"></ion-tab>
<ion-tab tabIcon="star" [root]="tabs1Tab2" tabTitle="Star"></ion-tab>
</ion-tabs>
<ion-tabs>
<ion-tab tabIcon="aperture" [root]="tabs2Tab1" tabTitle="Aperture"></ion-tab>
<ion-tab tabIcon="apps" [root]="tabs2Tab2" tabTitle="Apps"></ion-tab>
</ion-tabs>
</ion-split-pane>
`
})
export class AppComponent {
tabs1Tab1 = 'TabsOneTabOnePageOne';
tabs1Tab2 = 'TabsOneTabTwoPageOne';
tabs2Tab1 = 'TabsTwoTabOnePageOne';
tabs2Tab2 = 'TabsTwoTabTwoPageOne';
}

View File

@@ -0,0 +1,17 @@
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { IonicApp, IonicModule } from '../../../../..';
import { AppComponent } from './app.component';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
IonicModule.forRoot(AppComponent, { swipeBackEnabled: true, preloadModules: true }),
],
bootstrap: [IonicApp]
})
export class AppModule {}

View File

@@ -0,0 +1,5 @@
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app.module';
platformBrowserDynamic().bootstrapModule(AppModule);

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../../..';
import { TabsOneTabOnePageOne } from './tab-one-page-one';
@NgModule({
imports: [
IonicPageModule.forChild(TabsOneTabOnePageOne)
],
declarations: [
TabsOneTabOnePageOne
]
})
export class TabsOneTabOnePageOneModule { }

View File

@@ -0,0 +1,27 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, } from '../../../../../../..';
@IonicPage({
segment: 'TabsOneTabOnePageOne'
})
@Component({
template: `
<ion-header>
<ion-navbar>
<ion-title>Tabs 1 Tab 1 Page 1</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
Tabs 1 Tab 1 Page 1
<button ion-button (click)="nextPage()">Go to Next Page</button>
</ion-content>
`
})
export class TabsOneTabOnePageOne {
constructor(public nav: NavController) {
}
nextPage() {
this.nav.push('TabsOneTabOnePageTwo', { userId: '123', name: 'Andy Bernard'});
}
}

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../../..';
import { TabsOneTabOnePageThree } from './tab-one-page-three';
@NgModule({
imports: [
IonicPageModule.forChild(TabsOneTabOnePageThree)
],
declarations: [
TabsOneTabOnePageThree
]
})
export class TabsOneTabOnePageThreeModule { }

View File

@@ -0,0 +1,33 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from '../../../../../../..';
@IonicPage({
segment: 'TabsOneTabOnePageThree/paramOne/:paramOne/paramTwo/:paramTwo',
defaultHistory: ['TabsOneTabOnePageOne']
})
@Component({
template: `
<ion-header>
<ion-navbar>
<ion-title>Tabs 1 Tab 1 Page 3</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
Tabs 1 Tab 1 Page 3
<div>
Param One: {{paramOne}}
</div>
<div>
Name: {{paramTwo}}
</div>
</ion-content>
`
})
export class TabsOneTabOnePageThree {
paramOne: string;
paramTwo: string;
constructor(public nav: NavController, navParams: NavParams) {
this.paramOne = navParams.data.paramOne;
this.paramTwo = navParams.data.paramTwo;
}
}

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../../..';
import { TabsOneTabOnePageTwo } from './tab-one-page-two';
@NgModule({
imports: [
IonicPageModule.forChild(TabsOneTabOnePageTwo)
],
declarations: [
TabsOneTabOnePageTwo
]
})
export class TabsOneTabOnePageTwoModule { }

View File

@@ -0,0 +1,38 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from '../../../../../../..';
@IonicPage({
segment: 'TabsOneTabOnePageTwo/userId/:userId/name/:name',
defaultHistory: ['TabsOneTabOnePageOne']
})
@Component({
template: `
<ion-header>
<ion-navbar>
<ion-title>Tabs 1 Tab 1 Page 2</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
Tabs 1 Tab 1 Page 2
<div>
User ID: {{userId}}
</div>
<div>
Name: {{name}}
</div>
<button ion-button (click)="goToNext()">Next</button>
</ion-content>
`
})
export class TabsOneTabOnePageTwo {
userId: string;
name: string;
constructor(public nav: NavController, navParams: NavParams) {
this.userId = navParams.data.userId;
this.name = navParams.data.name;
}
goToNext() {
this.nav.push('TabsOneTabOnePageThree', { paramOne: 'Scranton', paramTwo: 'PA'});
}
}

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../../..';
import { TabsOneTabTwoPageOne } from './tab-two-page-one';
@NgModule({
imports: [
IonicPageModule.forChild(TabsOneTabTwoPageOne)
],
declarations: [
TabsOneTabTwoPageOne
]
})
export class TabsOneTabTwoPageOneModule { }

View File

@@ -0,0 +1,27 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, } from '../../../../../../..';
@IonicPage({
segment: 'TabsOneTabTwoPageOne'
})
@Component({
template: `
<ion-header>
<ion-navbar>
<ion-title>Tabs 1 Tab 2 Page 1</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
Tabs 1 Tab 2 Page 1
<button ion-button (click)="nextPage()">Go to Next Page</button>
</ion-content>
`
})
export class TabsOneTabTwoPageOne {
constructor(public nav: NavController) {
}
nextPage() {
this.nav.push('TabsOneTabTwoPageTwo', { userId: '456', name: 'Stanley Hudson'});
}
}

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../../..';
import { TabsOneTabTwoPageThree } from './tab-two-page-three';
@NgModule({
imports: [
IonicPageModule.forChild(TabsOneTabTwoPageThree)
],
declarations: [
TabsOneTabTwoPageThree
]
})
export class TabsOneTabTwoPageThreeModule { }

View File

@@ -0,0 +1,33 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from '../../../../../../..';
@IonicPage({
segment: 'TabsOneTabTwoPageThree/paramOne/:paramOne/paramTwo/:paramTwo',
defaultHistory: ['TabsOneTabTwoPageOne']
})
@Component({
template: `
<ion-header>
<ion-navbar>
<ion-title>Tabs 1 Tab 2 Page 3</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
Tabs 1 Tab 2 Page 3
<div>
Param One: {{paramOne}}
</div>
<div>
Param Two: {{paramTwo}}
</div>
</ion-content>
`
})
export class TabsOneTabTwoPageThree {
paramOne: string;
paramTwo: string;
constructor(public nav: NavController, navParams: NavParams) {
this.paramOne = navParams.data.paramOne;
this.paramTwo = navParams.data.paramTwo;
}
}

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../../..';
import { TabsOneTabTwoPageTwo } from './tab-two-page-two';
@NgModule({
imports: [
IonicPageModule.forChild(TabsOneTabTwoPageTwo)
],
declarations: [
TabsOneTabTwoPageTwo
]
})
export class TabsOneTabTwoPageTwoModule { }

View File

@@ -0,0 +1,38 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from '../../../../../../..';
@IonicPage({
segment: 'TabsOneTabTwoPageTwo/userId/:userId/name/:name',
defaultHistory: ['TabsOneTabTwoPageOne']
})
@Component({
template: `
<ion-header>
<ion-navbar>
<ion-title>Tabs 1 Tab 2 Page 2</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
Tabs 1 Tab 2 Page 2
<div>
User ID: {{userId}}
</div>
<div>
Name: {{name}}
</div>
<button ion-button (click)="goToNext()">Next</button>
</ion-content>
`
})
export class TabsOneTabTwoPageTwo {
userId: string;
name: string;
constructor(public nav: NavController, navParams: NavParams) {
this.userId = navParams.data.userId;
this.name = navParams.data.name;
}
goToNext() {
this.nav.push('TabsOneTabTwoPageThree', { paramOne: 'Nashua', paramTwo: 'NH'});
}
}

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../../..';
import { TabsTwoTabOnePageOne } from './tab-one-page-one';
@NgModule({
imports: [
IonicPageModule.forChild(TabsTwoTabOnePageOne)
],
declarations: [
TabsTwoTabOnePageOne
]
})
export class TabsTwoTabOnePageOneModule { }

View File

@@ -0,0 +1,27 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, } from '../../../../../../..';
@IonicPage({
segment: 'TabsTwoTabOnePageOne'
})
@Component({
template: `
<ion-header>
<ion-navbar>
<ion-title>Tabs 2 Tab 1 Page 1</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
Tabs 2 Tab 1 Page 1
<button ion-button (click)="nextPage()">Go to Next Page</button>
</ion-content>
`
})
export class TabsTwoTabOnePageOne {
constructor(public nav: NavController) {
}
nextPage() {
this.nav.push('TabsTwoTabOnePageTwo', { userId: '234', name: 'Phillis Vance - Vance Refridgeration'});
}
}

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../../..';
import { TabsTwoTabOnePageThree } from './tab-one-page-three';
@NgModule({
imports: [
IonicPageModule.forChild(TabsTwoTabOnePageThree)
],
declarations: [
TabsTwoTabOnePageThree
]
})
export class TabsTwoTabOnePageThreeModule { }

View File

@@ -0,0 +1,33 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from '../../../../../../..';
@IonicPage({
segment: 'TabsTwoTabOnePageThree/paramOne/:paramOne/paramTwo/:paramTwo',
defaultHistory: ['TabsTwoTabOnePageOne']
})
@Component({
template: `
<ion-header>
<ion-navbar>
<ion-title>Tabs 2 Tab 1 Page 3</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
Tabs 2 Tab 1 Page 3
<div>
Param One: {{paramOne}}
</div>
<div>
Param Two: {{paramTwo}}
</div>
</ion-content>
`
})
export class TabsTwoTabOnePageThree {
paramOne: string;
paramTwo: string;
constructor(public nav: NavController, navParams: NavParams) {
this.paramOne = navParams.data.paramOne;
this.paramTwo = navParams.data.paramTwo;
}
}

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../../..';
import { TabsTwoTabOnePageTwo } from './tab-one-page-two';
@NgModule({
imports: [
IonicPageModule.forChild(TabsTwoTabOnePageTwo)
],
declarations: [
TabsTwoTabOnePageTwo
]
})
export class TabsTwoTabOnePageTwoModule { }

View File

@@ -0,0 +1,38 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from '../../../../../../..';
@IonicPage({
segment: 'TabsTwoTabOnePageTwo/userId/:userId/name/:name',
defaultHistory: ['TabsTwoTabOnePageOne']
})
@Component({
template: `
<ion-header>
<ion-navbar>
<ion-title>Tabs 2 Tab 1 Page 2</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
Tabs 2 Tab 1 Page 2
<div>
User ID: {{userId}}
</div>
<div>
Name: {{name}}
</div>
<button ion-button (click)="goToNext()">Next</button>
</ion-content>
`
})
export class TabsTwoTabOnePageTwo {
userId: string;
name: string;
constructor(public nav: NavController, navParams: NavParams) {
this.userId = navParams.data.userId;
this.name = navParams.data.name;
}
goToNext() {
this.nav.push('TabsTwoTabOnePageThree', { paramOne: 'Stamford', paramTwo: 'CT'});
}
}

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../../..';
import { TabsTwoTabTwoPageOne } from './tab-two-page-one';
@NgModule({
imports: [
IonicPageModule.forChild(TabsTwoTabTwoPageOne)
],
declarations: [
TabsTwoTabTwoPageOne
]
})
export class TabsTwoTabTwoPageOneModule { }

View File

@@ -0,0 +1,27 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, } from '../../../../../../..';
@IonicPage({
segment: 'TabsTwoTabTwoPageOne'
})
@Component({
template: `
<ion-header>
<ion-navbar>
<ion-title>Tabs 2 Tab 2 Page 1</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
Tabs 2 Tab 2 Page 1
<button ion-button (click)="nextPage()">Go to Next Page</button>
</ion-content>
`
})
export class TabsTwoTabTwoPageOne {
constructor(public nav: NavController) {
}
nextPage() {
this.nav.push('TabsTwoTabTwoPageTwo', { userId: '456', name: 'Michael Scarn'});
}
}

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../../..';
import { TabsTwoTabTwoPageThree } from './tab-two-page-three';
@NgModule({
imports: [
IonicPageModule.forChild(TabsTwoTabTwoPageThree)
],
declarations: [
TabsTwoTabTwoPageThree
]
})
export class TabsTwoTabTwoPageThreeModule { }

View File

@@ -0,0 +1,33 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from '../../../../../../..';
@IonicPage({
segment: 'TabsTwoTabTwoPageThree/paramOne/:paramOne/paramTwo/:paramTwo',
defaultHistory: ['TabsTwoTabTwoPageOne']
})
@Component({
template: `
<ion-header>
<ion-navbar>
<ion-title>Tabs 2 Tab 2 Page 3</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
Tabs 2 Tab 2 Page 3
<div>
Param One: {{paramOne}}
</div>
<div>
Param Two: {{paramTwo}}
</div>
</ion-content>
`
})
export class TabsTwoTabTwoPageThree {
paramOne: string;
paramTwo: string;
constructor(public nav: NavController, navParams: NavParams) {
this.paramOne = navParams.data.paramOne;
this.paramTwo = navParams.data.paramTwo;
}
}

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../../..';
import { TabsTwoTabTwoPageTwo } from './tab-two-page-two';
@NgModule({
imports: [
IonicPageModule.forChild(TabsTwoTabTwoPageTwo)
],
declarations: [
TabsTwoTabTwoPageTwo
]
})
export class TabsTwoTabTwoPageTwoModule { }

View File

@@ -0,0 +1,38 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from '../../../../../../..';
@IonicPage({
segment: 'TabsTwoTabTwoPageTwo/userId/:userId/name/:name',
defaultHistory: ['TabsTwoTabTwoPageOne']
})
@Component({
template: `
<ion-header>
<ion-navbar>
<ion-title>Tabs 2 Tab 2 Page 2</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
Tabs 2 Tab 2 Page 2
<div>
User ID: {{userId}}
</div>
<div>
Name: {{name}}
</div>
<button ion-button (click)="next()">Next</button>
</ion-content>
`
})
export class TabsTwoTabTwoPageTwo {
userId: string;
name: string;
constructor(public nav: NavController, navParams: NavParams) {
this.userId = navParams.data.userId;
this.name = navParams.data.name;
}
next() {
this.nav.push('TabsTwoTabTwoPageThree', { paramOne: 'Albany', paramTwo: 'NY'});
}
}

View File

@@ -0,0 +1,8 @@
import { Component } from '@angular/core';
@Component({
template: `<ion-nav [root]="root" name="default"></ion-nav>`
})
export class AppComponent {
root = 'FirstPage';
}

View File

@@ -0,0 +1,17 @@
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { IonicApp, IonicModule } from '../../../../..';
import { AppComponent } from './app.component';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
IonicModule.forRoot(AppComponent, { swipeBackEnabled: true, preloadModules: true }),
],
bootstrap: [IonicApp]
})
export class AppModule {}

View File

@@ -0,0 +1,5 @@
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app.module';
platformBrowserDynamic().bootstrapModule(AppModule);

View File

@@ -0,0 +1,10 @@
<ion-header>
<ion-navbar>
<ion-title>First Page</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
Page One
<button ion-button (click)="goToPageTwo()">Go to Page Two</button>
<a href="#/nav/n4/user/123/name/ted">Using href</a>
</ion-content>

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../..';
import { FirstPage } from './first-page';
@NgModule({
imports: [
IonicPageModule.forChild(FirstPage)
],
declarations: [
FirstPage
]
})
export class FirstPageModule { }

View File

@@ -0,0 +1,15 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, } from '../../../../../..';
@IonicPage()
@Component({
templateUrl: 'first-page.html'
})
export class FirstPage {
constructor(public nav: NavController) {
}
goToPageTwo() {
this.nav.push('SecondPage', { userId: '123', name: 'ted'});
}
}

View File

@@ -0,0 +1,16 @@
<ion-header>
<ion-navbar>
<ion-title>Second Page</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
<div>
User ID: {{userId}}
</div>
<div>
Name {{name}}
</div>
<div>
<button ion-button (click)="goToNextPage()">Go to Next Page</button>
</div>
</ion-content>

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../..';
import { SecondPage } from './second-page';
@NgModule({
imports: [
IonicPageModule.forChild(SecondPage)
],
declarations: [
SecondPage
]
})
export class SecondPageModule { }

View File

@@ -0,0 +1,25 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from '../../../../../..';
@IonicPage({
segment: 'user/:userId/name/:name',
defaultHistory: [
'FirstPage'
]
})
@Component({
templateUrl: 'second-page.html'
})
export class SecondPage {
userId: string;
name: string;
constructor(public nav: NavController, public params: NavParams) {
this.userId = this.params.data.userId;
this.name = this.params.data.name;
}
goToNextPage() {
this.nav.push('ThirdPage', { paramOne: 'Hello', paramTwo: 'Its me'});
}
}

View File

@@ -0,0 +1,13 @@
<ion-header>
<ion-navbar>
<ion-title>Third Page</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
<div>
Param One: {{paramOne}}
</div>
<div>
Param Two: {{paramTwo}}
</div>
</ion-content>

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../..';
import { ThirdPage } from './third-page';
@NgModule({
imports: [
IonicPageModule.forChild(ThirdPage)
],
declarations: [
ThirdPage
]
})
export class ThirdPageModule { }

View File

@@ -0,0 +1,21 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from '../../../../../..';
@IonicPage({
segment: 'paramOne/:paramOne/paramTwo/:paramTwo',
defaultHistory: [
'FirstPage'
]
})
@Component({
templateUrl: 'third-page.html'
})
export class ThirdPage {
paramOne: string;
paramTwo: string;
constructor(public nav: NavController, public params: NavParams) {
this.paramOne = this.params.data.paramOne;
this.paramTwo = this.params.data.paramTwo;
}
}

View File

@@ -0,0 +1,8 @@
import { Component } from '@angular/core';
@Component({
template: `<ion-nav [root]="root"></ion-nav>`
})
export class AppComponent {
root = 'LoginPage';
}

View File

@@ -0,0 +1,17 @@
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { IonicApp, IonicModule } from '../../../../..';
import { AppComponent } from './app.component';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
IonicModule.forRoot(AppComponent, { swipeBackEnabled: true, preloadModules: true }),
],
bootstrap: [IonicApp]
})
export class AppModule {}

View File

@@ -0,0 +1,5 @@
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app.module';
platformBrowserDynamic().bootstrapModule(AppModule);

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../..';
import { LoginPage } from './login-page';
@NgModule({
imports: [
IonicPageModule.forChild(LoginPage)
],
declarations: [
LoginPage
]
})
export class LoginPageModule { }

View File

@@ -0,0 +1,24 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, } from '../../../../../..';
@IonicPage()
@Component({
template: `
<ion-header>
<ion-navbar>
<ion-title>Login</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
<button ion-button (click)="clickMe()">Login</button>
</ion-content>
`
})
export class LoginPage {
constructor(public nav: NavController) {
}
clickMe() {
this.nav.push('TabsPage');
}
}

View File

@@ -0,0 +1,11 @@
<ion-header>
<ion-navbar>
<ion-title>First Page</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
First Page
<div>
<button ion-button (click)="clickMe()">Go To Next Page</button>
</div>
</ion-content>

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../../..';
import { FirstPage } from './first-page';
@NgModule({
imports: [
IonicPageModule.forChild(FirstPage)
],
declarations: [
FirstPage
]
})
export class FirstPageModule { }

View File

@@ -0,0 +1,15 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, } from '../../../../../../..';
@IonicPage()
@Component({
templateUrl: 'first-page.html'
})
export class FirstPage {
constructor(public nav: NavController) {
}
clickMe() {
this.nav.push('SecondPage', { userId: '123', name: 'Phyllis Vance, Vance Refridgeration'});
}
}

View File

@@ -0,0 +1,14 @@
<ion-header>
<ion-navbar>
<ion-title>Second Page</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
<div>
User ID: {{userId}}
</div>
<div>
Name {{name}}
</div>
<button ion-button (click)="goToNextPage()">Next Page</button>
</ion-content>

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../../..';
import { SecondPage } from './second-page';
@NgModule({
imports: [
IonicPageModule.forChild(SecondPage)
],
declarations: [
SecondPage
]
})
export class SecondPageModule { }

View File

@@ -0,0 +1,23 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from '../../../../../../..';
@IonicPage({
segment: 'secondPage/user/:userId/name/:name',
defaultHistory: ['FirstPage']
})
@Component({
templateUrl: 'second-page.html'
})
export class SecondPage {
userId: string;
name: string;
constructor(public nav: NavController, public params: NavParams) {
this.userId = this.params.data.userId;
this.name = this.params.data.name;
}
goToNextPage() {
this.nav.push('ThirdPage', { paramOne: 'Tobey', paramTwo: 'Kevin'});
}
}

View File

@@ -0,0 +1,14 @@
<ion-header>
<ion-navbar>
<ion-title>Third Page</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
<h2>Third Page</h2>
<div>
Param One: {{paramOne}}
</div>
<div>
Param Two: {{paramTwo}}
</div>
</ion-content>

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../../..';
import { ThirdPage } from './third-page';
@NgModule({
imports: [
IonicPageModule.forChild(ThirdPage)
],
declarations: [
ThirdPage
]
})
export class ThirdPageModule { }

View File

@@ -0,0 +1,20 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from '../../../../../../..';
@IonicPage({
segment: 'thirdPage/paramOne/:paramOne/paramTwo/:paramTwo',
defaultHistory: ['FirstPage']
})
@Component({
templateUrl: 'third-page.html'
})
export class ThirdPage {
paramOne: string;
paramTwo: string;
constructor(public nav: NavController, public params: NavParams) {
this.paramOne = this.params.data.paramOne;
this.paramTwo = this.params.data.paramTwo;
}
}

View File

@@ -0,0 +1,15 @@
<ion-header>
<ion-navbar>
<ion-title>Fifth Page</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
Fifth Page
<div>
User ID: {{userId}}
</div>
<div>
Name {{name}}
</div>
<button ion-button (click)="goToNextPage()">Next Page</button>
</ion-content>

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../../..';
import { FifthPage } from './fifth-page';
@NgModule({
imports: [
IonicPageModule.forChild(FifthPage)
],
declarations: [
FifthPage
]
})
export class FifthPageModule { }

View File

@@ -0,0 +1,23 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from '../../../../../../..';
@IonicPage({
segment: 'fifthPage/user/:userId/name/:name',
defaultHistory: ['FourthPage']
})
@Component({
templateUrl: 'fifth-page.html'
})
export class FifthPage {
userId: string;
name: string;
constructor(public nav: NavController, public params: NavParams) {
this.userId = this.params.data.userId;
this.name = this.params.data.name;
}
goToNextPage() {
this.nav.push('SixthPage', { paramOne: 'Kelly Kapore', paramTwo: 'Creed Bratton'});
}
}

View File

@@ -0,0 +1,11 @@
<ion-header>
<ion-navbar>
<ion-title>Fourth Page</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
Fourth Page
<div>
<button ion-button (click)="clickMe()">Go To Next Page</button>
</div>
</ion-content>

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../../..';
import { FourthPage } from './fourth-page';
@NgModule({
imports: [
IonicPageModule.forChild(FourthPage)
],
declarations: [
FourthPage
]
})
export class FourthPageModule { }

View File

@@ -0,0 +1,15 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, } from '../../../../../../..';
@IonicPage()
@Component({
templateUrl: 'fourth-page.html'
})
export class FourthPage {
constructor(public nav: NavController) {
}
clickMe() {
this.nav.push('FifthPage', { userId: '456', name: 'Ryan Howard'});
}
}

View File

@@ -0,0 +1,14 @@
<ion-header>
<ion-navbar>
<ion-title>Sixth Page</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
<h2>Sixth Page</h2>
<div>
Param One: {{paramOne}}
</div>
<div>
Param Two: {{paramTwo}}
</div>
</ion-content>

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../../..';
import { SixthPage } from './sixth-page';
@NgModule({
imports: [
IonicPageModule.forChild(SixthPage)
],
declarations: [
SixthPage
]
})
export class SixthPageModule { }

View File

@@ -0,0 +1,20 @@
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from '../../../../../../..';
@IonicPage({
segment: 'sixthPage/paramOne/:paramOne/paramTwo/:paramTwo',
defaultHistory: ['FourthPage']
})
@Component({
templateUrl: 'sixth-page.html'
})
export class SixthPage {
paramOne: string;
paramTwo: string;
constructor(public nav: NavController, public params: NavParams) {
this.paramOne = this.params.data.paramOne;
this.paramTwo = this.params.data.paramTwo;
}
}

View File

@@ -0,0 +1,13 @@
import { NgModule } from '@angular/core';
import { IonicPageModule } from '../../../../../..';
import { TabsPage } from './tabs-page';
@NgModule({
imports: [
IonicPageModule.forChild(TabsPage)
],
declarations: [
TabsPage
]
})
export class TabsPageModule { }

View File

@@ -0,0 +1,16 @@
import { Component } from '@angular/core';
import { IonicPage, } from '../../../../../..';
@IonicPage()
@Component({
template: `
<ion-tabs name="app">
<ion-tab tabIcon="heart" [root]="tab1" tabTitle="Taco Burrito Enchilada"></ion-tab>
<ion-tab tabIcon="star" [root]="tab2"></ion-tab>
</ion-tabs>
`
})
export class TabsPage {
tab1 = 'FirstPage';
tab2 = 'FourthPage';
}

View File

@@ -6,7 +6,7 @@ import { IonicPage, } from '../../../../../..';
template: `
<ion-tabs name="app">
<ion-tab tabIcon="heart" [root]="tab1" tabTitle="Taco Burrito Enchilada"></ion-tab>
<ion-tab tabIcon="star" [root]="tab2"></ion-tab>
<ion-tab tabIcon="star" [root]="tab2" tabTitle="Tab 2" tabUrlPath="ABC123"></ion-tab>
</ion-tabs>
`
})

View File

@@ -0,0 +1,14 @@
import { Component } from '@angular/core';
@Component({
template: `
<ion-tabs name="simple">
<ion-tab tabIcon="heart" [root]="tab1" tabTitle="Taco Burrito Enchilada"></ion-tab>
<ion-tab tabIcon="star" [root]="tab2"></ion-tab>
</ion-tabs>
`
})
export class AppComponent {
tab1 = 'FirstPage';
tab2 = 'FourthPage';
}

View File

@@ -0,0 +1,17 @@
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { IonicApp, IonicModule } from '../../../../..';
import { AppComponent } from './app.component';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
IonicModule.forRoot(AppComponent, { swipeBackEnabled: true, preloadModules: true }),
],
bootstrap: [IonicApp]
})
export class AppModule {}

View File

@@ -0,0 +1,5 @@
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app.module';
platformBrowserDynamic().bootstrapModule(AppModule);

Some files were not shown because too many files have changed in this diff Show More