From 39c3c175b107fad7252a906e77275a6d2e45c7cc Mon Sep 17 00:00:00 2001 From: Michael Spyratos Date: Tue, 31 Jan 2017 10:38:34 +0000 Subject: [PATCH 1/8] Created a demo with latest ionic version --- demo/config.xml | 12 +- demo/ionic-pullup/.gitignore | 178 +++++++++++ demo/ionic-pullup/README.md | 7 + demo/ionic-pullup/index.js | 4 + demo/ionic-pullup/index.js.map | 1 + demo/ionic-pullup/index.ts | 3 + demo/ionic-pullup/package.json | 27 ++ demo/ionic-pullup/src/ion-pullup-tab.js | 71 +++++ demo/ionic-pullup/src/ion-pullup-tab.js.map | 1 + .../src}/ion-pullup-tab.ts | 0 demo/ionic-pullup/src/ion-pullup.js | 260 ++++++++++++++++ demo/ionic-pullup/src/ion-pullup.js.map | 1 + demo/ionic-pullup/src/ion-pullup.module.js | 38 +++ .../ionic-pullup/src/ion-pullup.module.js.map | 1 + demo/ionic-pullup/src/ion-pullup.module.ts | 27 ++ .../ionic-pullup/src}/ion-pullup.scss | 8 +- demo/ionic-pullup/src/ion-pullup.ts | 285 ++++++++++++++++++ demo/ionic-pullup/tsconfig.json | 13 + demo/ionic-pullup/tslint.json | 6 + .../ionic-pullup/typings.json | 0 demo/ionic.config.json | 2 +- demo/package.json | 47 +-- .../android/icon/drawable-hdpi-icon.png | Bin 2875 -> 0 bytes .../android/icon/drawable-ldpi-icon.png | Bin 1155 -> 0 bytes .../android/icon/drawable-mdpi-icon.png | Bin 1802 -> 0 bytes .../android/icon/drawable-xhdpi-icon.png | Bin 4317 -> 0 bytes .../android/icon/drawable-xxhdpi-icon.png | Bin 7793 -> 0 bytes .../android/icon/drawable-xxxhdpi-icon.png | Bin 11783 -> 0 bytes demo/resources/ios/icon/icon-40.png | Bin 1248 -> 0 bytes demo/resources/ios/icon/icon-40@2x.png | Bin 3564 -> 0 bytes demo/resources/ios/icon/icon-50.png | Bin 1902 -> 0 bytes demo/resources/ios/icon/icon-50@2x.png | Bin 4691 -> 0 bytes demo/resources/ios/icon/icon-60.png | Bin 2452 -> 0 bytes demo/resources/ios/icon/icon-60@2x.png | Bin 6042 -> 0 bytes demo/resources/ios/icon/icon-60@3x.png | Bin 10875 -> 0 bytes demo/resources/ios/icon/icon-72.png | Bin 2866 -> 0 bytes demo/resources/ios/icon/icon-72@2x.png | Bin 7793 -> 0 bytes demo/resources/ios/icon/icon-76.png | Bin 3319 -> 0 bytes demo/resources/ios/icon/icon-76@2x.png | Bin 8305 -> 0 bytes demo/resources/ios/icon/icon-small.png | Bin 818 -> 0 bytes demo/resources/ios/icon/icon-small@2x.png | Bin 2287 -> 0 bytes demo/resources/ios/icon/icon-small@3x.png | Bin 3856 -> 0 bytes demo/resources/ios/icon/icon.png | Bin 2112 -> 0 bytes demo/resources/ios/icon/icon@2x.png | Bin 5718 -> 0 bytes demo/src/app/app.component.ts | 6 +- demo/src/app/app.html | 1 + demo/src/app/app.module.ts | 25 +- demo/src/app/app.scss | 5 + demo/src/app/ionic-pullup/ion-pullup.scss | 71 ----- demo/src/app/ionic-pullup/ion-pullup.ts | 267 ---------------- demo/src/app/main.prod.ts | 7 - demo/src/app/{main.dev.ts => main.ts} | 0 demo/src/assets/icon/favicon.ico | Bin 1981 -> 0 bytes demo/src/pages/about/about.html | 11 - demo/src/pages/about/about.scss | 3 - demo/src/pages/about/about.ts | 15 - demo/src/pages/contact/contact.html | 17 -- demo/src/pages/contact/contact.scss | 3 - demo/src/pages/contact/contact.ts | 15 - demo/src/pages/home/home.html | 25 +- demo/src/pages/home/home.ts | 5 +- demo/src/pages/tabs/tabs.html | 5 - demo/src/pages/tabs/tabs.ts | 20 -- demo/src/service-worker.js | 102 ++----- demo/src/theme/variables.scss | 15 +- .../ionic-pullup => src}/ion-pullup.module.ts | 0 src/ionic-pullup/ion-pullup-tab.ts | 51 ---- src/ionic-pullup/ion-pullup.module.ts | 25 -- src/ionic-pullup/ion-pullup.ts | 267 ---------------- 69 files changed, 1039 insertions(+), 914 deletions(-) create mode 100644 demo/ionic-pullup/.gitignore create mode 100644 demo/ionic-pullup/README.md create mode 100644 demo/ionic-pullup/index.js create mode 100644 demo/ionic-pullup/index.js.map create mode 100644 demo/ionic-pullup/index.ts create mode 100644 demo/ionic-pullup/package.json create mode 100644 demo/ionic-pullup/src/ion-pullup-tab.js create mode 100644 demo/ionic-pullup/src/ion-pullup-tab.js.map rename demo/{src/app/ionic-pullup => ionic-pullup/src}/ion-pullup-tab.ts (100%) create mode 100644 demo/ionic-pullup/src/ion-pullup.js create mode 100644 demo/ionic-pullup/src/ion-pullup.js.map create mode 100644 demo/ionic-pullup/src/ion-pullup.module.js create mode 100644 demo/ionic-pullup/src/ion-pullup.module.js.map create mode 100644 demo/ionic-pullup/src/ion-pullup.module.ts rename {src/ionic-pullup => demo/ionic-pullup/src}/ion-pullup.scss (94%) create mode 100644 demo/ionic-pullup/src/ion-pullup.ts create mode 100644 demo/ionic-pullup/tsconfig.json create mode 100644 demo/ionic-pullup/tslint.json rename typings.json => demo/ionic-pullup/typings.json (100%) delete mode 100644 demo/resources/android/icon/drawable-hdpi-icon.png delete mode 100644 demo/resources/android/icon/drawable-ldpi-icon.png delete mode 100644 demo/resources/android/icon/drawable-mdpi-icon.png delete mode 100644 demo/resources/android/icon/drawable-xhdpi-icon.png delete mode 100644 demo/resources/android/icon/drawable-xxhdpi-icon.png delete mode 100644 demo/resources/android/icon/drawable-xxxhdpi-icon.png delete mode 100644 demo/resources/ios/icon/icon-40.png delete mode 100644 demo/resources/ios/icon/icon-40@2x.png delete mode 100644 demo/resources/ios/icon/icon-50.png delete mode 100644 demo/resources/ios/icon/icon-50@2x.png delete mode 100644 demo/resources/ios/icon/icon-60.png delete mode 100644 demo/resources/ios/icon/icon-60@2x.png delete mode 100644 demo/resources/ios/icon/icon-60@3x.png delete mode 100644 demo/resources/ios/icon/icon-72.png delete mode 100644 demo/resources/ios/icon/icon-72@2x.png delete mode 100644 demo/resources/ios/icon/icon-76.png delete mode 100644 demo/resources/ios/icon/icon-76@2x.png delete mode 100644 demo/resources/ios/icon/icon-small.png delete mode 100644 demo/resources/ios/icon/icon-small@2x.png delete mode 100644 demo/resources/ios/icon/icon-small@3x.png delete mode 100644 demo/resources/ios/icon/icon.png delete mode 100644 demo/resources/ios/icon/icon@2x.png create mode 100644 demo/src/app/app.html delete mode 100644 demo/src/app/ionic-pullup/ion-pullup.scss delete mode 100644 demo/src/app/ionic-pullup/ion-pullup.ts delete mode 100644 demo/src/app/main.prod.ts rename demo/src/app/{main.dev.ts => main.ts} (100%) delete mode 100644 demo/src/assets/icon/favicon.ico delete mode 100644 demo/src/pages/about/about.html delete mode 100644 demo/src/pages/about/about.scss delete mode 100644 demo/src/pages/about/about.ts delete mode 100644 demo/src/pages/contact/contact.html delete mode 100644 demo/src/pages/contact/contact.scss delete mode 100644 demo/src/pages/contact/contact.ts delete mode 100644 demo/src/pages/tabs/tabs.html delete mode 100644 demo/src/pages/tabs/tabs.ts rename {demo/src/app/ionic-pullup => src}/ion-pullup.module.ts (100%) delete mode 100644 src/ionic-pullup/ion-pullup-tab.ts delete mode 100644 src/ionic-pullup/ion-pullup.module.ts delete mode 100644 src/ionic-pullup/ion-pullup.ts diff --git a/demo/config.xml b/demo/config.xml index fba2861..e98b5d2 100644 --- a/demo/config.xml +++ b/demo/config.xml @@ -1,10 +1,11 @@ - - demo + + ionic-pullup-demo An awesome Ionic/Cordova app. Ionic Framework Team + @@ -25,7 +26,14 @@ + + + + + + + \ No newline at end of file diff --git a/demo/ionic-pullup/.gitignore b/demo/ionic-pullup/.gitignore new file mode 100644 index 0000000..b45f898 --- /dev/null +++ b/demo/ionic-pullup/.gitignore @@ -0,0 +1,178 @@ +# Specifies files to intentionally ignore when using Git +# http://git-scm.com/docs/gitignore + +node_modules/ +www/build/ +platforms/ +plugins/ +*.swp +.DS_Store +Thumbs.db +.editorconfig +/.idea + + +# Created by https://www.gitignore.io/api/osx ,osx,jetbrains,webstorm,node + +### OSX ### +*.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon +# Thumbnails +._* +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + + +### JetBrains ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff: +.idea/workspace.xml +.idea/tasks.xml + +# Sensitive or high-churn files: +.idea/dataSources/ +.idea/dataSources.ids +.idea/dataSources.xml +.idea/dataSources.local.xml +.idea/sqlDataSources.xml +.idea/dynamic.xml +.idea/uiDesigner.xml + +# Gradle: +.idea/gradle.xml +.idea/libraries + +# Mongo Explorer plugin: +.idea/mongoSettings.xml + +## File-based project format: +*.iws + +## Plugin-specific files: + +# IntelliJ +/out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +### JetBrains Patch ### +# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 + +# *.iml +# modules.xml +# .idea/misc.xml +# *.ipr + + +### WebStorm ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff: + +# Sensitive or high-churn files: + +# Gradle: + +# Mongo Explorer plugin: + +## File-based project format: + +## Plugin-specific files: + +# IntelliJ + +# mpeltonen/sbt-idea plugin + +# JIRA plugin + +# Crashlytics plugin (for Android Studio and IntelliJ) + +### WebStorm Patch ### +# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 + +# *.iml +# modules.xml +# .idea/misc.xml +# *.ipr + + +### Node ### +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + + +# End of https://www.gitignore.io/api/osx ,osx,jetbrains,webstorm,node \ No newline at end of file diff --git a/demo/ionic-pullup/README.md b/demo/ionic-pullup/README.md new file mode 100644 index 0000000..afd98cd --- /dev/null +++ b/demo/ionic-pullup/README.md @@ -0,0 +1,7 @@ +# ionic-pullup for Ionic 2 and Angular 2 + +A pull-up footer component for Ionic. The pull-up footer is a UI component built on top of Ionic's footer and offers an efficient way to hide/reveal information. The footer can fully expand to cover the content area of the screen or can be configured to expand to a maximum height. +The component will compute the available screen height providing for header and tabs. + +*See project [website](http://arielfaur.github.io/ionic-pullup)* + diff --git a/demo/ionic-pullup/index.js b/demo/ionic-pullup/index.js new file mode 100644 index 0000000..8a1796a --- /dev/null +++ b/demo/ionic-pullup/index.js @@ -0,0 +1,4 @@ +export { IonPullUpComponent, IonPullUpFooterState } from './src/ion-pullup'; +export { IonPullUpTabComponent } from './src/ion-pullup-tab'; +export { IonPullUpModule } from './src/ion-pullup.module'; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/demo/ionic-pullup/index.js.map b/demo/ionic-pullup/index.js.map new file mode 100644 index 0000000..520ccb9 --- /dev/null +++ b/demo/ionic-pullup/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,kBAAkB,EAAE,oBAAoB,EAAC,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAC,qBAAqB,EAAC,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAC,eAAe,EAAC,MAAM,yBAAyB,CAAC"} \ No newline at end of file diff --git a/demo/ionic-pullup/index.ts b/demo/ionic-pullup/index.ts new file mode 100644 index 0000000..8df7196 --- /dev/null +++ b/demo/ionic-pullup/index.ts @@ -0,0 +1,3 @@ +export {IonPullUpComponent, IonPullUpFooterState} from './src/ion-pullup'; +export {IonPullUpTabComponent} from './src/ion-pullup-tab'; +export {IonPullUpModule} from './src/ion-pullup.module'; diff --git a/demo/ionic-pullup/package.json b/demo/ionic-pullup/package.json new file mode 100644 index 0000000..aec1e5b --- /dev/null +++ b/demo/ionic-pullup/package.json @@ -0,0 +1,27 @@ +{ + "name": "ionic-pullup", + "description": "ionic-pullup for Angular 2 and Ionic 2", + "version": "2.1.0", + "dependencies": { + "@angular/common": "2.1.1", + "@angular/compiler": "2.1.1", + "@angular/compiler-cli": "2.1.1", + "@angular/core": "2.1.1", + "@angular/forms": "2.1.1", + "@angular/http": "2.1.1", + "@angular/platform-browser": "2.1.1", + "@angular/platform-browser-dynamic": "2.1.1", + "@angular/platform-server": "2.1.1", + "@ionic/storage": "1.1.6", + "ionic-angular": "2.0.0-rc.2", + "ionic-native": "2.2.3", + "ionicons": "3.0.0", + "rxjs": "5.0.0-beta.12", + "zone.js": "0.6.21" + }, + "devDependencies": { + "@ionic/app-scripts": "0.0.44", + "@types/core-js": "^0.9.35", + "typescript": "2.0.6" + } +} diff --git a/demo/ionic-pullup/src/ion-pullup-tab.js b/demo/ionic-pullup/src/ion-pullup-tab.js new file mode 100644 index 0000000..5134d4c --- /dev/null +++ b/demo/ionic-pullup/src/ion-pullup-tab.js @@ -0,0 +1,71 @@ +/* +ionic-pullup v2 for Ionic/Angular 2 + +Copyright 2016 Ariel Faur (https://github.com/arielfaur) +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +import { Component, ElementRef, Renderer, Input } from '@angular/core'; +import { Gesture } from 'ionic-angular/gestures/gesture'; +import { IonPullUpComponent, IonPullUpFooterState } from './ion-pullup'; +var IonPullUpTabComponent = (function () { + function IonPullUpTabComponent(el, renderer) { + this.el = el; + this.renderer = renderer; + } + Object.defineProperty(IonPullUpTabComponent.prototype, "IsExpanded", { + get: function () { + return this.footer.state == IonPullUpFooterState.Expanded; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(IonPullUpTabComponent.prototype, "IsCollapsed", { + get: function () { + return this.footer.state == IonPullUpFooterState.Collapsed; + }, + enumerable: true, + configurable: true + }); + IonPullUpTabComponent.prototype.ngOnInit = function () { + var _this = this; + var tabGesture = new Gesture(this.el.nativeElement); + tabGesture.listen(); + tabGesture.on('tap', function (e) { + _this.footer && _this.footer.onTap(e); + }); + tabGesture.on('pan panstart panend', function (e) { + _this.footer && _this.footer.onDrag(e); + }); + }; + return IonPullUpTabComponent; +}()); +__decorate([ + Input(), + __metadata("design:type", IonPullUpComponent) +], IonPullUpTabComponent.prototype, "footer", void 0); +IonPullUpTabComponent = __decorate([ + Component({ + selector: 'ion-pullup-tab', + template: '' + }), + __metadata("design:paramtypes", [ElementRef, Renderer]) +], IonPullUpTabComponent); +export { IonPullUpTabComponent }; +//# sourceMappingURL=ion-pullup-tab.js.map \ No newline at end of file diff --git a/demo/ionic-pullup/src/ion-pullup-tab.js.map b/demo/ionic-pullup/src/ion-pullup-tab.js.map new file mode 100644 index 0000000..2d1380e --- /dev/null +++ b/demo/ionic-pullup/src/ion-pullup-tab.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ion-pullup-tab.js","sourceRoot":"","sources":["ion-pullup-tab.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;EAaE;;;;;;;;;;AAEF,OAAO,EAAY,SAAS,EAA6D,UAAU,EAAE,QAAQ,EAAwB,KAAK,EAAoD,MAAM,eAAe,CAAC;AACpN,OAAO,EAAC,OAAO,EAAC,MAAM,gCAAgC,CAAC;AAEvD,OAAO,EAAC,kBAAkB,EAAE,oBAAoB,EAAC,MAAM,cAAc,CAAC;AAMtE,IAAa,qBAAqB;IAGhC,+BAAoB,EAAc,EAAU,QAAkB;QAA1C,OAAE,GAAF,EAAE,CAAY;QAAU,aAAQ,GAAR,QAAQ,CAAU;IAE9D,CAAC;IAED,sBAAW,6CAAU;aAArB;YACE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,oBAAoB,CAAC,QAAQ,CAAC;QAC5D,CAAC;;;OAAA;IAED,sBAAW,8CAAW;aAAtB;YACE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,oBAAoB,CAAC,SAAS,CAAC;QAC7D,CAAC;;;OAAA;IAED,wCAAQ,GAAR;QAAA,iBASC;QARC,IAAI,UAAU,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;QACpD,UAAU,CAAC,MAAM,EAAE,CAAC;QACpB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,UAAA,CAAC;YACpB,KAAI,CAAC,MAAM,IAAI,KAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QACH,UAAU,CAAC,EAAE,CAAC,qBAAqB,EAAE,UAAA,CAAC;YACpC,KAAI,CAAC,MAAM,IAAI,KAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC;IAEH,4BAAC;AAAD,CAAC,AA1BD,IA0BC;AAzBU;IAAR,KAAK,EAAE;8BAAS,kBAAkB;qDAAC;AADzB,qBAAqB;IAJjC,SAAS,CAAC;QACP,QAAQ,EAAE,gBAAgB;QAC1B,QAAQ,EAAE,2BAA2B;KACxC,CAAC;qCAIwB,UAAU,EAAoB,QAAQ;GAHnD,qBAAqB,CA0BjC;SA1BY,qBAAqB"} \ No newline at end of file diff --git a/demo/src/app/ionic-pullup/ion-pullup-tab.ts b/demo/ionic-pullup/src/ion-pullup-tab.ts similarity index 100% rename from demo/src/app/ionic-pullup/ion-pullup-tab.ts rename to demo/ionic-pullup/src/ion-pullup-tab.ts diff --git a/demo/ionic-pullup/src/ion-pullup.js b/demo/ionic-pullup/src/ion-pullup.js new file mode 100644 index 0000000..71980c8 --- /dev/null +++ b/demo/ionic-pullup/src/ion-pullup.js @@ -0,0 +1,260 @@ +/* + ionic-pullup v2 for Ionic/Angular 2 + + Copyright 2016 Ariel Faur (https://github.com/arielfaur) + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +import { ChangeDetectionStrategy, Component, EventEmitter, ElementRef, Renderer, ViewChild, ContentChild, Output, Input } from '@angular/core'; +import { Gesture } from 'ionic-angular/gestures/gesture'; +import { Toolbar } from 'ionic-angular/components/toolbar/toolbar'; +import { Platform } from 'ionic-angular'; +export var IonPullUpFooterState; +(function (IonPullUpFooterState) { + IonPullUpFooterState[IonPullUpFooterState["Collapsed"] = 0] = "Collapsed"; + IonPullUpFooterState[IonPullUpFooterState["Expanded"] = 1] = "Expanded"; + IonPullUpFooterState[IonPullUpFooterState["Minimized"] = 2] = "Minimized"; +})(IonPullUpFooterState || (IonPullUpFooterState = {})); +export var IonPullUpFooterBehavior; +(function (IonPullUpFooterBehavior) { + IonPullUpFooterBehavior[IonPullUpFooterBehavior["Hide"] = 0] = "Hide"; + IonPullUpFooterBehavior[IonPullUpFooterBehavior["Expand"] = 1] = "Expand"; +})(IonPullUpFooterBehavior || (IonPullUpFooterBehavior = {})); +var IonPullUpComponent = (function () { + function IonPullUpComponent(platform, el, renderer) { + this.platform = platform; + this.el = el; + this.renderer = renderer; + this.stateChange = new EventEmitter(); + this.onExpand = new EventEmitter(); + this.onCollapse = new EventEmitter(); + this.onMinimize = new EventEmitter(); + this._footerMeta = { + height: 0, + posY: 0, + lastPosY: 0 + }; + this._currentViewMeta = {}; + // sets initial state + this.initialState = this.initialState || IonPullUpFooterState.Collapsed; + this.defaultBehavior = this.defaultBehavior || IonPullUpFooterBehavior.Expand; + this.maxHeight = this.maxHeight || 0; + } + IonPullUpComponent.prototype.ngOnInit = function () { + var _this = this; + console.debug('ionic-pullup => Initializing footer...'); + window.addEventListener("orientationchange", function () { + console.debug('ionic-pullup => Changed orientation => updating'); + _this.updateUI(); + }); + this.platform.resume.subscribe(function () { + console.debug('ionic-pullup => Resumed from background => updating'); + _this.updateUI(); + }); + }; + IonPullUpComponent.prototype.ngAfterContentInit = function () { + var _this = this; + this.computeDefaults(); + var barGesture = new Gesture(this.childToolbar.getNativeElement()); + barGesture.listen(); + barGesture.on('tap', function (e) { + _this.onTap(e); + }); + barGesture.on('pan panstart panend', function (e) { + _this.onDrag(e); + }); + this.state = IonPullUpFooterState.Collapsed; + this.updateUI(true); // need to indicate whether it's first run to avoid emitting events twice due to change detection + }; + Object.defineProperty(IonPullUpComponent.prototype, "expandedHeight", { + get: function () { + return window.innerHeight - this._currentViewMeta.headerHeight; + }, + enumerable: true, + configurable: true + }); + IonPullUpComponent.prototype.computeDefaults = function () { + this._footerMeta.defaultHeight = this.childFooter.nativeElement.offsetHeight; + // TODO: still need to test with tabs template (not convinced it is a valid use case...) + this._currentViewMeta.tabs = this.el.nativeElement.closest('ion-tabs'); + this._currentViewMeta.tabsHeight = this._currentViewMeta.tabs ? this._currentViewMeta.tabs.querySelector('.tabbar').offsetHeight : 0; + console.debug(this._currentViewMeta.tabsHeight ? 'ionic-pullup => Tabs detected' : 'ionic.pullup => View has no tabs'); + //this._currentViewMeta.hasBottomTabs = this._currentViewMeta.tabs && this._currentViewMeta.tabs.classList.contains('tabs-bottom'); + this._currentViewMeta.header = document.querySelector('ion-navbar.toolbar'); + this._currentViewMeta.headerHeight = this._currentViewMeta.header ? this._currentViewMeta.header.offsetHeight : 0; + }; + IonPullUpComponent.prototype.computeHeights = function (isInit) { + if (isInit === void 0) { isInit = false; } + this._footerMeta.height = this.maxHeight > 0 ? this.maxHeight : this.expandedHeight; + this.renderer.setElementStyle(this.childFooter.nativeElement, 'height', this._footerMeta.height + 'px'); + // TODO: implement minimize mode + //this.renderer.setElementStyle(this.el.nativeElement, 'min-height', this._footerMeta.height + 'px'); + //if (this.initialState == IonPullUpFooterState.Minimized) { + // this.minimize() + //} else { + this.collapse(isInit); + //} + }; + IonPullUpComponent.prototype.updateUI = function (isInit) { + var _this = this; + if (isInit === void 0) { isInit = false; } + setTimeout(function () { + _this.computeHeights(isInit); + }, 300); + this.renderer.setElementStyle(this.childFooter.nativeElement, 'transition', 'none'); // avoids flickering when changing orientation + }; + IonPullUpComponent.prototype.expand = function () { + this._footerMeta.lastPosY = 0; + this.renderer.setElementStyle(this.childFooter.nativeElement, '-webkit-transform', 'translate3d(0, 0, 0)'); + this.renderer.setElementStyle(this.childFooter.nativeElement, 'transform', 'translate3d(0, 0, 0)'); + this.renderer.setElementStyle(this.childFooter.nativeElement, 'transition', '300ms ease-in-out'); + this.onExpand.emit(null); + }; + IonPullUpComponent.prototype.collapse = function (isInit) { + if (isInit === void 0) { isInit = false; } + this._footerMeta.lastPosY = this._footerMeta.height - this._footerMeta.defaultHeight - this._currentViewMeta.tabsHeight; + this.renderer.setElementStyle(this.childFooter.nativeElement, '-webkit-transform', 'translate3d(0, ' + this._footerMeta.lastPosY + 'px, 0)'); + this.renderer.setElementStyle(this.childFooter.nativeElement, 'transform', 'translate3d(0, ' + this._footerMeta.lastPosY + 'px, 0)'); + if (!isInit) + this.onCollapse.emit(null); + }; + IonPullUpComponent.prototype.minimize = function () { + this._footerMeta.lastPosY = this._footerMeta.height; + this.renderer.setElementStyle(this.childFooter.nativeElement, '-webkit-transform', 'translate3d(0, ' + this._footerMeta.lastPosY + 'px, 0)'); + this.renderer.setElementStyle(this.childFooter.nativeElement, 'transform', 'translate3d(0, ' + this._footerMeta.lastPosY + 'px, 0)'); + this.onMinimize.emit(null); + }; + IonPullUpComponent.prototype.onTap = function (e) { + e.preventDefault(); + if (this.state == IonPullUpFooterState.Collapsed) { + if (this.defaultBehavior == IonPullUpFooterBehavior.Hide) + this.state = IonPullUpFooterState.Minimized; + else + this.state = IonPullUpFooterState.Expanded; + } + else { + if (this.state == IonPullUpFooterState.Minimized) { + if (this.defaultBehavior == IonPullUpFooterBehavior.Hide) + this.state = IonPullUpFooterState.Collapsed; + else + this.state = IonPullUpFooterState.Expanded; + } + else { + // footer is expanded + this.state = this.initialState == IonPullUpFooterState.Minimized ? IonPullUpFooterState.Minimized : IonPullUpFooterState.Collapsed; + } + } + }; + IonPullUpComponent.prototype.onDrag = function (e) { + e.preventDefault(); + switch (e.type) { + case 'panstart': + this.renderer.setElementStyle(this.childFooter.nativeElement, 'transition', 'none'); + break; + case 'pan': + this._footerMeta.posY = Math.round(e.deltaY) + this._footerMeta.lastPosY; + if (this._footerMeta.posY < 0 || this._footerMeta.posY > this._footerMeta.height) + return; + this.renderer.setElementStyle(this.childFooter.nativeElement, '-webkit-transform', 'translate3d(0, ' + this._footerMeta.posY + 'px, 0)'); + this.renderer.setElementStyle(this.childFooter.nativeElement, 'transform', 'translate3d(0, ' + this._footerMeta.posY + 'px, 0)'); + break; + case 'panend': + this.renderer.setElementStyle(this.childFooter.nativeElement, 'transition', '300ms ease-in-out'); + if (this._footerMeta.lastPosY > this._footerMeta.posY) { + this.state = IonPullUpFooterState.Expanded; + } + else if (this._footerMeta.lastPosY < this._footerMeta.posY) { + this.state = (this.initialState == IonPullUpFooterState.Minimized) ? IonPullUpFooterState.Minimized : IonPullUpFooterState.Collapsed; + } + break; + } + }; + IonPullUpComponent.prototype.ngDoCheck = function () { + var _this = this; + if (!Object.is(this.state, this._oldState)) { + switch (this.state) { + case IonPullUpFooterState.Collapsed: + this.collapse(); + break; + case IonPullUpFooterState.Expanded: + this.expand(); + break; + case IonPullUpFooterState.Minimized: + this.minimize(); + break; + } + this._oldState = this.state; + // TODO: fix hack due to BUG (https://github.com/angular/angular/issues/6005) + window.setTimeout(function () { + _this.stateChange.emit(_this.state); + }); + } + }; + return IonPullUpComponent; +}()); +__decorate([ + Input(), + __metadata("design:type", Number) +], IonPullUpComponent.prototype, "state", void 0); +__decorate([ + Output(), + __metadata("design:type", EventEmitter) +], IonPullUpComponent.prototype, "stateChange", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], IonPullUpComponent.prototype, "initialState", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], IonPullUpComponent.prototype, "defaultBehavior", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], IonPullUpComponent.prototype, "maxHeight", void 0); +__decorate([ + Output(), + __metadata("design:type", Object) +], IonPullUpComponent.prototype, "onExpand", void 0); +__decorate([ + Output(), + __metadata("design:type", Object) +], IonPullUpComponent.prototype, "onCollapse", void 0); +__decorate([ + Output(), + __metadata("design:type", Object) +], IonPullUpComponent.prototype, "onMinimize", void 0); +__decorate([ + ContentChild(Toolbar), + __metadata("design:type", Object) +], IonPullUpComponent.prototype, "childToolbar", void 0); +__decorate([ + ViewChild('footer'), + __metadata("design:type", Object) +], IonPullUpComponent.prototype, "childFooter", void 0); +IonPullUpComponent = __decorate([ + Component({ + selector: 'ion-pullup', + changeDetection: ChangeDetectionStrategy.OnPush, + template: "\n \n \n \n " + }), + __metadata("design:paramtypes", [Platform, ElementRef, Renderer]) +], IonPullUpComponent); +export { IonPullUpComponent }; +//# sourceMappingURL=ion-pullup.js.map \ No newline at end of file diff --git a/demo/ionic-pullup/src/ion-pullup.js.map b/demo/ionic-pullup/src/ion-pullup.js.map new file mode 100644 index 0000000..a6ab35c --- /dev/null +++ b/demo/ionic-pullup/src/ion-pullup.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ion-pullup.js","sourceRoot":"","sources":["ion-pullup.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/demo/ionic-pullup/src/ion-pullup.module.js b/demo/ionic-pullup/src/ion-pullup.module.js new file mode 100644 index 0000000..19f2829 --- /dev/null +++ b/demo/ionic-pullup/src/ion-pullup.module.js @@ -0,0 +1,38 @@ +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; +import { IonicModule } from 'ionic-angular'; +import { IonPullUpComponent } from './ion-pullup'; +import { IonPullUpTabComponent } from './ion-pullup-tab'; +var IonPullUpModule = (function () { + function IonPullUpModule() { + } + return IonPullUpModule; +}()); +IonPullUpModule = __decorate([ + NgModule({ + imports: [ + CommonModule, + FormsModule, + IonicModule + ], + declarations: [ + IonPullUpComponent, + IonPullUpTabComponent + ], + exports: [ + IonPullUpComponent, + IonPullUpTabComponent + ], + providers: [], + schemas: [CUSTOM_ELEMENTS_SCHEMA] + }) +], IonPullUpModule); +export { IonPullUpModule }; +//# sourceMappingURL=ion-pullup.module.js.map \ No newline at end of file diff --git a/demo/ionic-pullup/src/ion-pullup.module.js.map b/demo/ionic-pullup/src/ion-pullup.module.js.map new file mode 100644 index 0000000..baa2efd --- /dev/null +++ b/demo/ionic-pullup/src/ion-pullup.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ion-pullup.module.js","sourceRoot":"","sources":["ion-pullup.module.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAC,QAAQ,EAAE,sBAAsB,EAAC,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAC,kBAAkB,EAAC,MAAM,cAAc,CAAC;AAChD,OAAO,EAAC,qBAAqB,EAAC,MAAM,kBAAkB,CAAC;AAmBvD,IAAa,eAAe;IAA5B;IACA,CAAC;IAAD,sBAAC;AAAD,CAAC,AADD,IACC;AADY,eAAe;IAjB3B,QAAQ,CAAC;QACN,OAAO,EAAE;YACL,YAAY;YACZ,WAAW;YACX,WAAW;SACd;QACD,YAAY,EAAE;YACV,kBAAkB;YAClB,qBAAqB;SACxB;QACD,OAAO,EAAE;YACL,kBAAkB;YAClB,qBAAqB;SACxB;QACD,SAAS,EAAE,EAAE;QACb,OAAO,EAAE,CAAC,sBAAsB,CAAC;KACpC,CAAC;GACW,eAAe,CAC3B;SADY,eAAe"} \ No newline at end of file diff --git a/demo/ionic-pullup/src/ion-pullup.module.ts b/demo/ionic-pullup/src/ion-pullup.module.ts new file mode 100644 index 0000000..072c2f9 --- /dev/null +++ b/demo/ionic-pullup/src/ion-pullup.module.ts @@ -0,0 +1,27 @@ +import {NgModule, CUSTOM_ELEMENTS_SCHEMA} from '@angular/core'; +import {CommonModule} from '@angular/common'; +import {FormsModule} from '@angular/forms'; +import {IonicModule} from 'ionic-angular'; + +import {IonPullUpComponent} from './ion-pullup'; +import {IonPullUpTabComponent} from './ion-pullup-tab'; + +@NgModule({ + imports: [ + CommonModule, + FormsModule, + IonicModule + ], + declarations: [ + IonPullUpComponent, + IonPullUpTabComponent + ], + exports: [ + IonPullUpComponent, + IonPullUpTabComponent + ], + providers: [], + schemas: [CUSTOM_ELEMENTS_SCHEMA] +}) +export class IonPullUpModule { +} \ No newline at end of file diff --git a/src/ionic-pullup/ion-pullup.scss b/demo/ionic-pullup/src/ion-pullup.scss similarity index 94% rename from src/ionic-pullup/ion-pullup.scss rename to demo/ionic-pullup/src/ion-pullup.scss index a332fe8..8efda03 100644 --- a/src/ionic-pullup/ion-pullup.scss +++ b/demo/ionic-pullup/src/ion-pullup.scss @@ -20,8 +20,8 @@ $tabShadow: #666; // shadow color box-shadow: 0px -2px 2px $shadowColor; } -ion-pullup { - background : color($colors, primary, base); +ion-pullup { + background : color($colors, primary, base); ion-footer { &::before { @@ -44,7 +44,7 @@ ion-pullup { @import 'node_modules/ionic-angular/components/toolbar/toolbar.ios'; margin-top: calc(#{$toolbar-ios-height} + #{$tabHeight}); - scroll-content { + .scroll-content { margin-bottom: calc(#{$toolbar-ios-height} + #{$tabHeight}); } } @@ -52,7 +52,7 @@ ion-pullup { @import 'node_modules/ionic-angular/components/toolbar/toolbar.md'; margin-top: calc(#{$toolbar-md-height} + #{$tabHeight}); - scroll-content { + .scroll-content { margin-bottom: calc(#{$toolbar-md-height} + #{$tabHeight}); } } diff --git a/demo/ionic-pullup/src/ion-pullup.ts b/demo/ionic-pullup/src/ion-pullup.ts new file mode 100644 index 0000000..16a46a3 --- /dev/null +++ b/demo/ionic-pullup/src/ion-pullup.ts @@ -0,0 +1,285 @@ +/* + ionic-pullup v2 for Ionic/Angular 2 + + Copyright 2016 Ariel Faur (https://github.com/arielfaur) + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +import { + Attribute, + ChangeDetectionStrategy, + Component, + Directive, + DoCheck, + SimpleChange, + OnChanges, + EventEmitter, + ElementRef, + Renderer, + ViewChild, + ContentChild, + Output, + Input, + Injectable, + Inject, + Optional +} from '@angular/core'; +import {Gesture} from 'ionic-angular/gestures/gesture'; +import {Toolbar, Footer} from 'ionic-angular/components/toolbar/toolbar'; +import {Platform} from 'ionic-angular'; + +interface FooterMetadata { + height: number; + posY: number; + lastPosY: number; + defaultHeight?: number; +} + +interface ViewMetadata { + tabs?: Element; + tabsHeight?: number; + hasBottomTabs?: boolean; + header?: Element; + headerHeight?: number; +} + +interface FooterTab { + x?: number; + y?: number; + upperLeftRadius?: number; + upperRightRadius?: number; + backgroundColor?: string; + color?: string; + content?: string; +} + +export enum IonPullUpFooterState { + Collapsed = 0, + Expanded = 1, + Minimized = 2 +} + +export enum IonPullUpFooterBehavior { + Hide, + Expand +} + +@Component({ + selector: 'ion-pullup', + changeDetection: ChangeDetectionStrategy.OnPush, + template: ` + + + + ` +}) +export class IonPullUpComponent { + @Input() state: IonPullUpFooterState; + @Output() stateChange: EventEmitter = new EventEmitter(); + + @Input() initialState: IonPullUpFooterState; // TODO implemment + @Input() defaultBehavior: IonPullUpFooterBehavior; // TODO implemment + @Input() maxHeight: number; + + @Output() onExpand = new EventEmitter(); + @Output() onCollapse = new EventEmitter(); + @Output() onMinimize = new EventEmitter(); + + @ContentChild(Toolbar) childToolbar; + @ViewChild('footer') childFooter; + + protected _footerMeta: FooterMetadata; + protected _currentViewMeta: ViewMetadata; + protected _oldState: IonPullUpFooterState; + + constructor(private platform: Platform, private el: ElementRef, private renderer: Renderer) { + this._footerMeta = { + height: 0, + posY: 0, + lastPosY: 0 + } + this._currentViewMeta = {}; + + // sets initial state + this.initialState = this.initialState || IonPullUpFooterState.Collapsed; + this.defaultBehavior = this.defaultBehavior || IonPullUpFooterBehavior.Expand; + this.maxHeight = this.maxHeight || 0; + } + + ngOnInit() { + console.debug('ionic-pullup => Initializing footer...'); + + window.addEventListener("orientationchange", () => { + console.debug('ionic-pullup => Changed orientation => updating'); + this.updateUI(); + }); + this.platform.resume.subscribe(() => { + console.debug('ionic-pullup => Resumed from background => updating'); + this.updateUI(); + }); + } + + ngAfterContentInit() { + this.computeDefaults(); + + let barGesture = new Gesture(this.childToolbar.getNativeElement()); + barGesture.listen(); + barGesture.on('tap', e => { + this.onTap(e); + }); + barGesture.on('pan panstart panend', e => { + this.onDrag(e); + }); + + this.state = IonPullUpFooterState.Collapsed; + + this.updateUI(true); // need to indicate whether it's first run to avoid emitting events twice due to change detection + + } + + public get expandedHeight(): number { + return window.innerHeight - this._currentViewMeta.headerHeight; + } + + computeDefaults() { + this._footerMeta.defaultHeight = this.childFooter.nativeElement.offsetHeight; + + + // TODO: still need to test with tabs template (not convinced it is a valid use case...) + this._currentViewMeta.tabs = this.el.nativeElement.closest('ion-tabs'); + this._currentViewMeta.tabsHeight = this._currentViewMeta.tabs ? ( this._currentViewMeta.tabs.querySelector('.tabbar')).offsetHeight : 0 + console.debug(this._currentViewMeta.tabsHeight ? 'ionic-pullup => Tabs detected' : 'ionic.pullup => View has no tabs'); + //this._currentViewMeta.hasBottomTabs = this._currentViewMeta.tabs && this._currentViewMeta.tabs.classList.contains('tabs-bottom'); + + + this._currentViewMeta.header = document.querySelector('ion-navbar.toolbar'); + this._currentViewMeta.headerHeight = this._currentViewMeta.header ? (this._currentViewMeta.header).offsetHeight : 0; + } + + computeHeights(isInit: boolean = false) { + this._footerMeta.height = this.maxHeight > 0 ? this.maxHeight : this.expandedHeight; + + this.renderer.setElementStyle(this.childFooter.nativeElement, 'height', this._footerMeta.height + 'px'); + + // TODO: implement minimize mode + //this.renderer.setElementStyle(this.el.nativeElement, 'min-height', this._footerMeta.height + 'px'); + //if (this.initialState == IonPullUpFooterState.Minimized) { + // this.minimize() + //} else { + this.collapse(isInit); + //} + } + + updateUI(isInit: boolean = false) { + setTimeout(() => { + this.computeHeights(isInit); + }, 300); + this.renderer.setElementStyle(this.childFooter.nativeElement, 'transition', 'none'); // avoids flickering when changing orientation + } + + expand() { + this._footerMeta.lastPosY = 0; + this.renderer.setElementStyle(this.childFooter.nativeElement, '-webkit-transform', 'translate3d(0, 0, 0)'); + this.renderer.setElementStyle(this.childFooter.nativeElement, 'transform', 'translate3d(0, 0, 0)'); + this.renderer.setElementStyle(this.childFooter.nativeElement, 'transition', '300ms ease-in-out'); + + this.onExpand.emit(null); + } + + collapse(isInit: boolean = false) { + this._footerMeta.lastPosY = this._footerMeta.height - this._footerMeta.defaultHeight - this._currentViewMeta.tabsHeight; + this.renderer.setElementStyle(this.childFooter.nativeElement, '-webkit-transform', 'translate3d(0, ' + this._footerMeta.lastPosY + 'px, 0)'); + this.renderer.setElementStyle(this.childFooter.nativeElement, 'transform', 'translate3d(0, ' + this._footerMeta.lastPosY + 'px, 0)'); + + if (!isInit) this.onCollapse.emit(null); + } + + minimize() { + this._footerMeta.lastPosY = this._footerMeta.height; + this.renderer.setElementStyle(this.childFooter.nativeElement, '-webkit-transform', 'translate3d(0, ' + this._footerMeta.lastPosY + 'px, 0)'); + this.renderer.setElementStyle(this.childFooter.nativeElement, 'transform', 'translate3d(0, ' + this._footerMeta.lastPosY + 'px, 0)'); + + this.onMinimize.emit(null); + } + + + onTap(e: any) { + e.preventDefault(); + + if (this.state == IonPullUpFooterState.Collapsed) { + if (this.defaultBehavior == IonPullUpFooterBehavior.Hide) + this.state = IonPullUpFooterState.Minimized; + else + this.state = IonPullUpFooterState.Expanded; + } else { + if (this.state == IonPullUpFooterState.Minimized) { + if (this.defaultBehavior == IonPullUpFooterBehavior.Hide) + this.state = IonPullUpFooterState.Collapsed; + else + this.state = IonPullUpFooterState.Expanded; + } else { + // footer is expanded + this.state = this.initialState == IonPullUpFooterState.Minimized ? IonPullUpFooterState.Minimized : IonPullUpFooterState.Collapsed; + } + } + } + + + onDrag(e: any) { + e.preventDefault(); + + switch (e.type) { + case 'panstart': + this.renderer.setElementStyle(this.childFooter.nativeElement, 'transition', 'none'); + break; + case 'pan': + this._footerMeta.posY = Math.round(e.deltaY) + this._footerMeta.lastPosY; + if (this._footerMeta.posY < 0 || this._footerMeta.posY > this._footerMeta.height) return; + this.renderer.setElementStyle(this.childFooter.nativeElement, '-webkit-transform', 'translate3d(0, ' + this._footerMeta.posY + 'px, 0)'); + this.renderer.setElementStyle(this.childFooter.nativeElement, 'transform', 'translate3d(0, ' + this._footerMeta.posY + 'px, 0)'); + break; + case 'panend': + this.renderer.setElementStyle(this.childFooter.nativeElement, 'transition', '300ms ease-in-out'); + + if (this._footerMeta.lastPosY > this._footerMeta.posY) { + this.state = IonPullUpFooterState.Expanded; + } + else if (this._footerMeta.lastPosY < this._footerMeta.posY) { + this.state = (this.initialState == IonPullUpFooterState.Minimized) ? IonPullUpFooterState.Minimized : IonPullUpFooterState.Collapsed; + } + + break; + } + } + + ngDoCheck() { + if (!Object.is(this.state, this._oldState)) { + switch (this.state) { + case IonPullUpFooterState.Collapsed: + this.collapse(); + break; + case IonPullUpFooterState.Expanded: + this.expand(); + break; + case IonPullUpFooterState.Minimized: + this.minimize(); + break; + } + this._oldState = this.state; + + // TODO: fix hack due to BUG (https://github.com/angular/angular/issues/6005) + window.setTimeout(() => { + this.stateChange.emit(this.state); + }) + } + } + +} \ No newline at end of file diff --git a/demo/ionic-pullup/tsconfig.json b/demo/ionic-pullup/tsconfig.json new file mode 100644 index 0000000..3a47c85 --- /dev/null +++ b/demo/ionic-pullup/tsconfig.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "target": "es5", + "module": "es2015", + "moduleResolution": "node", + "sourceMap": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true + }, + "files": [ + "index.ts" + ] +} diff --git a/demo/ionic-pullup/tslint.json b/demo/ionic-pullup/tslint.json new file mode 100644 index 0000000..a75b2c9 --- /dev/null +++ b/demo/ionic-pullup/tslint.json @@ -0,0 +1,6 @@ +{ + "extends": "tslint-ionic-rules", + "rules" : { + + } +} \ No newline at end of file diff --git a/typings.json b/demo/ionic-pullup/typings.json similarity index 100% rename from typings.json rename to demo/ionic-pullup/typings.json diff --git a/demo/ionic.config.json b/demo/ionic.config.json index 84073d5..68b5f01 100644 --- a/demo/ionic.config.json +++ b/demo/ionic.config.json @@ -1,5 +1,5 @@ { - "name": "demo", + "name": "ionic-pullup-demo", "app_id": "", "v2": true, "typescript": true diff --git a/demo/package.json b/demo/package.json index 2d69546..20f298c 100644 --- a/demo/package.json +++ b/demo/package.json @@ -4,38 +4,49 @@ "homepage": "http://ionicframework.com/", "private": true, "scripts": { + "clean": "ionic-app-scripts clean", + "build": "ionic-app-scripts build", "ionic:build": "ionic-app-scripts build", "ionic:serve": "ionic-app-scripts serve" }, "dependencies": { - "@angular/common": "2.1.1", - "@angular/compiler": "2.1.1", - "@angular/compiler-cli": "2.1.1", - "@angular/core": "2.1.1", - "@angular/forms": "2.1.1", - "@angular/http": "2.1.1", - "@angular/platform-browser": "2.1.1", - "@angular/platform-browser-dynamic": "2.1.1", - "@angular/platform-server": "2.1.1", - "@ionic/storage": "1.1.6", - "ionic-angular": "2.0.0-rc.2", - "ionic-native": "2.2.3", + "@angular/common": "2.2.1", + "@angular/compiler": "2.2.1", + "@angular/compiler-cli": "2.2.1", + "@angular/core": "2.2.1", + "@angular/forms": "2.2.1", + "@angular/http": "2.2.1", + "@angular/platform-browser": "2.2.1", + "@angular/platform-browser-dynamic": "2.2.1", + "@angular/platform-server": "2.2.1", + "@ionic/storage": "1.1.7", + "ionic-angular": "2.0.0", + "ionic-native": "2.4.1", "ionicons": "3.0.0", "rxjs": "5.0.0-beta.12", - "zone.js": "0.6.21" + "zone.js": "0.6.26", + "sw-toolbox": "3.4.0", + "ionic-pullup": "file:./ionic-pullup" }, "devDependencies": { - "@ionic/app-scripts": "0.0.44", - "typescript": "2.0.6" + "@ionic/app-scripts": "1.0.0", + "typescript": "2.0.9" }, "cordovaPlugins": [ "cordova-plugin-whitelist", + "cordova-plugin-statusbar", "cordova-plugin-console", "cordova-plugin-device", - "cordova-plugin-statusbar", "cordova-plugin-splashscreen", "ionic-plugin-keyboard" ], - "cordovaPlatforms": [], - "description": "demo: An Ionic project" + "cordovaPlatforms": [ + "ios", + { + "platform": "ios", + "version": "", + "locator": "ios" + } + ], + "description": "ionic-pullup-demo: An Ionic project" } diff --git a/demo/resources/android/icon/drawable-hdpi-icon.png b/demo/resources/android/icon/drawable-hdpi-icon.png deleted file mode 100644 index b9100934dac7ce92fd44c4c90aa50b1469d67c04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2875 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 diff --git a/demo/resources/android/icon/drawable-ldpi-icon.png b/demo/resources/android/icon/drawable-ldpi-icon.png deleted file mode 100644 index 16cd5dba33faeda3f256eaba98fab310ba722778..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1155 zcmV-}1bq96P)+IR_U)hrQpZkgDu!*Y1Zm{gYI7jmFJso)@ zrJhpSIcJQCT^2&nO&3ng=8}n@yMP6}E;Gi0N2tfYeOclG^^c7fYhA5WjIel$wtlbT zqOcSks?rVs7~oD4r4$m*`<}Iy%6h#qjahSVIu-A=Qq^p2K91GdP`$s_A8-A|jiumF zrI9WGzyQlA87_o4kRyRmk1&zfSl2vE)}cQ%zkUw$B3jomjl@P50APS=316)O+=NI~ z#JovLb*=an#ZrZzfA^pMa=XerTpl`E0!nzikiY;lq}0JWhQ~|@d0R}Js#cIpH{tEj zZL5e+$Sq#hhSGWhV7Nscf4p?BFWs9fcQIBHXQ!AjhS5~LA30%nUa}GE7Rv^VXmR@2 z{`1oBOO0Nsq^nCz7U>Knr%_Gv-yz16;d~goUq&^0gvg3^L?(>8I=me)gq9|iL$WkK zF+USlRW$`CvtYo|YKO8`AI6@=LyU!Qx;n+qMt-#qIgymsB9J68W7DHLXDK+=c^c`E zEO5>@Ly%0i+y@9BiOJ4o-foxS;>MvuXbiwW5J6d1vSD*N6qTdk$w|`WArG{WA0kV2 z-yiB$SO!Z;!NM?I1aY_ZlZ7H6#3(pa(W47Me^^66aI97rOawL*ia9mDY8SEcIv8iAwk1Z)q;*k!`I-!xu zcv_67JMn3x3ji>{-Zujw5FQAjg&YZlo-J13NI6ApDPrF_jp3vlA1fGxc4Q`sR@Omxt6xk5Fbg^|vYY>sIQ!?$kfBsd<33sR!TQ)P-#7>FJwV zj;q_Rjw^!0(s9L^bmX|w-NzNQ`M5giAXXd1>u>m1(*zk1S$w$>V*fe z3}HAVP*FYdDtA3mXU}?-11uyAha~AfB^JKCqz<0*lFASUG8`W&2u1A0UcXfkB(xBA zh@JFd;ZORoh);Z2!ZC~hPkdbsDfuBEf?f>wZ`!BPG Vw>q6-My3D&002ovPDHLkV1m}399{qb diff --git a/demo/resources/android/icon/drawable-mdpi-icon.png b/demo/resources/android/icon/drawable-mdpi-icon.png deleted file mode 100644 index 64a6cbc52de2a6cad2d8a0f23c19ede85d62b7a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1802 zcmV+l2le=gP)JE*h*^4PMX*bY*~&inY1Kw$-T_7A30)8&}?j= zT?~lb*)wyFW^Wp0c^+eQb@SC%oAcf}*Y(6$NvvX3mDXc)7~(Tqh@iP7*qJV@9s8yOy#CnXC{h=rHU>u z+(lxKFT?wbI6iS09fmlW0sss!A-QID0}VQ+j4=qH&tSwS1j&s_lGHa1Z?Ay?pTh1_UzVSd_Rlp@}4CF01Pl81h#qlO(a69%c7o*AYByHa1rPrh1&K6IXw#sGBxNQHIu3QH1?M( zraUP14;>TVb1IAw0tqL{;kg8%a&j_{K_bfpou1!rh5Bbfg-es~x+z zLD~qh?bNFe;oFyP`-o!uM{f*Nz4JRPh!&&RvUvQC4XdTnv!=6L;4_D@5yG-#qutlj;Bl>Ws*I5-C_^~Dq8y@J@1 z*jEH;Kh5O3S2>!f(>Ghrh3Y{S`twwN`w&!|?s1XW+j_JhQr{FsNn2+bMyDQH8$uo4 zJ1!xx4NRH~b=o@<_7lhDUj^CrElcyrafqGs*&a^9Hk;aqz_kuH9@WaW#TszLiK^z_ z54x#uFBHyHr#%{b=o-;O$6hl&+m~t5xiDHya1f)de}4{Li~!2^#^Xx}TDun*4I=3D z_uN*9OjMZXCb;74Iy~L8hLX80M07kaKvU$Z9OrIw%it9bG3_+9nYQAU}u6|jcye)p%E}rk# z?-xdgAx@?MG)eq?z90}ajCwgCf(}xs5uo?=X2~SD#mYZz3K-+y{bt!V&9?;d$8r2| zC;W90m!>kdy2%_yhapa;0009FanS_c&8b9?LM@@QhZ?_ob7c3Yaqwk8J6l+PCGekj z@~ugLp66+?ii>r1kvNPFL!3;#n0R1-2_caE-f*W?;C8UdELki z?DwMx*>YW6E#-P0u_UW5Q-{%MJQY*i#aj~(m=NolQ)Y&D(+<(i4=dBTlB!1Pm}C1QK1>ID|n8sPm!~qzlP5+?v?I^=i($ zR@*-w7i8Uf9)6?8Zg9d_(9pdhFbun|-?7u5K3{ij&3 zMCWde)#8z|uEucnaoKRZIZ#@XFYWi!G(DQ8T_*+%Fd+mIPLetm8GR>z!wxk9=pg2Q z5QKd?`@1>wX=xaY!T9(8Jc1r~^{59u?IsLSaHr9iw_EU+r3nD1YOC3in*YuFgMK1Uj3n`n#~=r|0aW24Z4OYMFkbkN7amd)$& zaeILdjO3vs1+HZPuE1FeT#Ydv&)`~X9$fSEqfVk9O-DaUNz;!MK{E;g&w_2$nk8sv z1AfMfxJVMTJcVsxqL}8}<|%9`D)jK8naWVuB*~Yi$Jn`*gkWVlSg5N=O!DI~Nbce> zNPG<9M#rF{{6=Ij2JxsrOg9F#KgS>u4@iPBC_5+y8U=rLBA~%=P~jvehOX-B#uBB33L?(9OFhX zh^~V1e$})Y!3r&5b-@Z#7&PI*3MC9ENIm{vL(;>Pe;(^9vFJ%OR}eih;sygSwyaFyXQWMT?wNODEVw$;H*j-i&yP2y6l8FFp s0c6XUQvQ1RLIhkQ@{iV2q%XmI13E<~2UyF)asU7T07*qoM6N<$g3Y%^s{jB1 diff --git a/demo/resources/android/icon/drawable-xhdpi-icon.png b/demo/resources/android/icon/drawable-xhdpi-icon.png deleted file mode 100644 index 1605f695fa85116686adfcc5bb760879c6b40dd8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4317 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 LNkvXXu0mjfw_ymi diff --git a/demo/resources/android/icon/drawable-xxhdpi-icon.png b/demo/resources/android/icon/drawable-xxhdpi-icon.png deleted file mode 100644 index 56fb29e64e62d8afc5488de5f4ab6119becc6901..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7793 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 diff --git a/demo/resources/android/icon/drawable-xxxhdpi-icon.png b/demo/resources/android/icon/drawable-xxxhdpi-icon.png deleted file mode 100644 index e4a915254b11c257a9803d2e543b9f8358911e1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11783 zcmZvCbzD?k*Y+8Pl%WxZW+WAm4#A;QT0la&K~Pd)=o(r|T1janq+1wLx*L=Rk&p&~ zcf6nHy}$2|_m4T}{Pyg<_FDVwbI!W1Yei_NDG=PFz6SsRfs&%^bM*P^-ybdp`nc3~ ztpNaB!%DJJ+Mb|aA1_l3yOXwls;7&?V+!F7X&p7&J7?n;rrV+W&I=N=s3#K>vo^zN z7Swo5X3WG15K`RKc;cE$nrISvX@|Opc-7%@wkGx~{2VjiHXPF~?Zx$Vo7g^=-D@2m z@JtK+{jo@tn`tE~-1|WIjqGB0gNLb`!-JwJij?L~p7pyu!xF<{&a*)|3)=*tk#Uw# z8&|J{(57jjESADu5fqaJxO=s8_CmJRI96JZLDCoKSD0~Ekng3Nq5F>Nl#U=W?Nj-u z{UKr$UjEZrf>Gbp)=hD0C?5GB9AgFlDR-wK0jNRiCdMA_m2FQj8J zY`q|-ph=uKsq-4Z*6KgkAo#uP4PNcisfMh^ccAzE8%i@=0oK-9iz363+wuCde3T~S zloXyZ8I9Ua+U0!%M(yb#NgSr>85f~~iZR_+8(j)~FGJG@Hk3X`C)V#?ecPyCoxsxE zFkW>nHq2BWx|ZS*cpBMilaC~T^5DWJ_+7Oos*|3bUQJ3K&pq8ipOWm|9ehZ4yffc; zIt0As&ak%L8b40Ui62WW98nt?2Fa6CUoNQ@p(6Tsa^iVkTbG~l5UGq56j)!3L=`)* z*2bx)MA_XIZcSKB%#oo&J=Bv3XzIp9>cZ+v`8`u&aP z+{zyVK=y5`)`DM=$|^F}^7nnBLnzVlJ?`J4p&H~^&pAW2unr>-M4 ziUVuLz0hfDdQU7$N1=r?3PwV&;w(JRP^S1fT;8RNRBBIPUAF>=jQA!Kjdh4^2h0-cX)ET#QMzyHH$mIgb zm49eU$!RO(Ypa57d**jLN2%S6OmXGhbi_^QBu@-~SI3?54XNLbOSy3bT(AY}w^DpK z+`ha@4!&L4b9;jrl~VUPr}Fsu^Y#Z>?GNp|-7t=1qD?o;R^~G|R`tK3eyhh`efZ%~ zQTT4r`w}}~D4SOx0=bjO=SeC5D1h544?ctCwk=p-?`bsNnh%kXvarR{I+=gleNh*;`M=Xe@?tW686ePfXo^UrfWw* zs2MknzYXiX7tj<1qw;ssDV>TPF7RlXYjBTpJyxd^4ULtjmNIH)8xw%nzlWtODd%+b z%2VH6B@p2eV>}_ovU_IdF=l}!xzwq_A+v+Kf1U3?5xg&4C#W-Qcof+oTTv1EFySN! z6E~1HJV*f7Ay3rqWEMl?H}u|1Yq(7D=D}%C%)a9S#|Tk!iQfXZw<=e`H%VjI>O~aV zHZg7*acQ-*y&5T;0`#5-`QGD?y#LkD020)%*hakp=Tg8$AC zq7oizi92JWX}(=W#CQ#Tp8TZa0e?ycgT2~IoO}2UAHlhn!~|)?`2EC$ zmulG(Y(M|oU#-<6$FFy7Usp)9d6_VBN~4Vw@YOsAOQk2^{q4&Gda-@*jT*5B?h`_? zD_OT3=f`0Ua63BrHLNgvBs%4|H6fz;W)KnTlL~N{;yS<-+P(zPUjttvVLDIWd?>r? zMm@gw=d;#naz%MFUBu@r>=$2&XE9t)O0C#D__m0z$sR@rWUd32crxaVKOSkzBsbq# zwz}R`_&B^0O=``ouX%)nHXHb)=mAvj-74zo)76(?1SwV=0mQEUbVqNkqQ1HQwX^;s z`=Nt_h}XaBObI!IG%J;VD+MJaCdMqapwCB{I=B2hY|%di$(Y2K=6JryErn0u1xvvLhcSpFns4-kDbZf?*9liC;-K3 zzFqSj23K5g`x}DU%Zlm5HP!Eud3V2V8q!YbxHj-kq=wtDBq#Mp1@@K1<~aP0N4JE!?p_MUf@3 zyX<5_1=%TYFvf|al8MZWRiOD<*RUr@KT<=8cMUXMu>k4cLQT9Ut>%9`ma_4K4JK{q>#h3{qP0lmdi4m4Ql~EJtDj<`Y0~C7)6g02a>^fpXIM%A^OcgJ*H*q59<~1 z{Nxiwr^L$MK3y4Bt(=>>7{c0hxzL97D>0&ImzTbTU)$XKlgc*)xg<8ED$C&TiwDoe z+VzK}c7nm+O!0uhHQUW&2WCHP0;Cp0wM2}UQhe;2U2|3O zqJ60*JUKX?Ir)|7-tuog=kvx1yvJInnHEdQSPpc*zU5Tmyoe4Iao(Jf-qd&H$PSYg z4vQfX6RfTrVWWN}55_}?cm}kFX>E+}^PDZmiU*K`)NffYxQRq<3Q&K7y!R%5Z=0P2 zU;RMV5>5})grK*AhKT4&jo_VaJGYFrqr3__Lt%C_J8|7oyAxCQ?j0Ek%5kuYZ;K{W zCS9X>S+z^8?G6tD5fO)CZkOK(6L%5Sk{`Se= z9afF?7vKEPc-{hQW8`WFdbQC}t})l~ecAlhbThA~azFY&%)lZH8|liwI|O|ONWLdF z0pn%wf%+;d(u~B%Q+O3X9D@U?3lSKp!h?dfcAevgqu8Rq-*B_QR%F#{ zhD4rfTW85;jYmJk@GVtT)IfxBfnRc{F0kF4@wcyA__F#F8jfy&dgX?}4y~7uv$nd6 z)AW5JRRe0Zn=}j$gTHDR`2bXBf;8{06=`t0rx zsff!8;3~Qx@FmA}=&o9Z@d||1(~;t1yyOg$SHMSdy$(m32B|!e@`c;i>?u@|JyJvl zQDJP!_Wjnb?2T%6jQoh)SXB}N3~3efvHkmi(j|1@Zh>hZoB!*Y1v|Cbl@2kcn{Y$v z#{FLBdE$w9sgtCYAZBfnB)$*N{Z-8b#CsKD8>1v8KXA+FjsK>{ATC#GtD72nUt?9r zW67#=41Iq%yM2L)Yl|;s*-bcEUIe9yQCCq_8_7Nvm>9HC-qsvuWVE)&E!72>8~n}< zKL)dMHl&JGTtNBASgBgNEh9BDFMXu4e)MF*#-cwxFMcWninQ)8A zCOpQ6P+ho(`2K3(0%R9Gn7E++QaXMqcCcn>v>-l_uLv(A3I^W<9#(%G zc`=rUA*~k<=_n>n#Evshqq^2*aAEN0uyu?ifTVqt*u=;3RJF-DIGZ;}rTFTJ3km#` zbm2e*|19Axi~L^Tl1oU26K784Q49HIFr@W@cTx?StXD&rXoIEC&0S!B7kcbpU?-*V zYO7l3q$rh`DoDoX!M9H!W}VCo$4XT^h1$;+Hr~*Zsoh=RB|$LX>e#S3L0J!nW`E?*o0`hyi@qWVstdT3PE|iF2#W%Fg1S}!niC0>=b3^7W z^5>4US4#YbRfOBV^urJBWSVsrD9tSNYRq>6K$tB(JxoRcNu^w~k*!%cH{6K|4zWeg z2RD!xhI9;gbQfh0Wo3)ajcT!1pNyAu5?6hn#Vvv6wbiyJaFAk0LZy^KVA7>B<8!W* z8gg6Qg#5e(Uh5eq0%0L8AC;Zcb_1(5j@Z7$sP|Cst=)Fx)V3<@iWze!HvC{p^XUdZ z?Lm>sMb6}Zc(o4rPd&OD71hABD+{a~Cel2+R2sVfr}KfVY=mUa1B4!zD!7y&q-WRl zapKjs3U%-72thK%Z&xk;ek^GV7JOrWzuz@osI@zL{CE+k9k-JA>XfcK_!h;w%NbsW z`IF~wDcjm=2ZgAGYzg@E{y#td#R8xC5I&Xh|xB2e- zX4s!MaEd=p{*GGA?ra;>$SWgMn6wO9MD!V*Q3`yQkvN`vVce6Rp_E=9rP(7f z*1EUSK{B|UDcrMbnLh$>Fz){-Z^D16!=tx3xGI-)NT_Z!&zEf5U_`-wPZ@=^AEwZ2 z&*v^|Jnk_6&>@vez^Eff*J<M-I3l>1~4Mzsvzunfsok*nR;mUZ9#&L@x? zcBeZVcu^cTa%bsTNTrA!W@R%yb=&-TU+%+^) zX*mqM>acD4fz#C`d!{RD6-k(V#+8Jxxv`Xr{T_Q?urX$NbZC4$#{31%qkKq3jL6;b3k?{_nf_A94XQqSUkKVD6?Wo_?& zT6F!Zw`!DM@5OmO9){wxhCQla>&o?$T7}jLGGlw|7DM;EH|!ScGtbI?;s1EBIt&hv zh&?gEEVrh7&UZt3L((n*VJ6Xy$Pd1_Fu&ZyQC_)e2Q3Gu(H4Wht%E)->)7_lvi>P7 z^re35GnrH%zaoT6U^xDRb}b|-JfD)o-HA6zhx9e}$e91mZoB(wFv-UilP-9ivM^vJpRNjjQki^G%8|m)uG_zD6QB5PYd?tfI48(3#*d z8`b6RYM0?ob+r~%x5jgT@A_4Nmq0>+{EQ^&&WAOres-8_batcEHa{JRn4?CpT{KzW zlIzODW(;nwIu|q&gYm_auNoNg{%F_yeV@v1hqv)lhkw+fAreq6jo5qt zD%;OKK31rD{e-Bw)gLjB(o5kUh+YbTT_d|nFI4jXG6#34MEaOmKa5mk6^LRTH)c!& z3BpET)bLTQM)_i`nCE)jY~!yI1|g3};)8%WAE)?&euhQiyS3ul(P&r{z?Y}s7>zbF z;XutD!X7aAg4ep>_n19*-DzBG1Bqzv0TA#dZ8Eg@cT?C6iY=iMsDh#2Ax1jjhyl`` zPo9CN7=o8w-Eknvqp^uyM2hu<|P5`|*o##a@9B%AIcd~MDUybte7F})6Xw=I?zxIdTDemyszdlMCbL>%z~ ziq<&lZ4-MK@{nCNY$ODTjHTC+7N93(l(lZQ2Ks*wUxX|ftCTmNPu*_J`Pc|(AjExp z-~HJPp5~IoG|Rc;yQ{H`K{63Ln72E6yWT}oZckUD6F5*&@b;La?O#KfE{xBnX@@Ac z8lK#rP_Cw%9+VcmYb(R9x$3G6*X+I)7t3sn%lFT@#~{C7Ec${ z5YI5aE4?yOZwih4mWP7!p}7ErfD}fEB%!R_n55g0Na+_iiOk>4%mEn$`0T1Z)SVB@ z5W}~ue8cknkJXR6%|>1G9uivq@)@9lg@en=HK9?okj{e>BeOssbrYJTV-6 zqr0)>45-IDB%6WnH6}cqIN|L9tUwbEAmkUP^W+w?<9k3=LKNa?pVu3M$Yd7 zy}^V<*MjOD>`kZ_DaGIy{#+=a;NgxaI`)#X3*$u zMY&w9+6VNEfFAQXxqQd^g0RPtais3UMkvMsu)hQ@Md(QRmh<%2vmk6~g_Ej+BNt!) z*uvW_$JbIH)<(U_JH@FSE7u~X9O$GLIy7*fVM>PXKIq3rxX}{)^<48JIv7a);0VS= zFM59jR`$WujjGoU3y_$=B!(AV>}?l3U+11F>GC+3+UC4)aW0QzNFPjT?Vc-p1%~rs z2ND0hd0Ko!{9bRBgsI;OyED4MJKbaUjn)^rm~4B-Ucei}Nfa0H45ujZhC7|kL+W}r z?tR(weDv51w_!9sMuk$|CUQsmuz$yyM;m}Y)!KJz{m%{2-Ka)%lX=XZ`Ly+|E18-$ zU=K1qjBHwS_SjmO9^nHso;AygHIox#&=soN;)X08VLpQns150=5fvg?U2PO53Xz-R zSnYd9NlDZ&^kZ{x{K0Rkw^eSoQ&9A)01lwF035xS`a)JNUM*q6HplgMgG+uzdpa&V zkjpyK;l|YT^sF3^0Jt#J)3wtXTAqc3=IJTAz09k|XX76BJG?x+?hQjzJK-uc?*Dlb zqzq)mUB%OVxu1xAAr^llrYC=LOl1l{U-)=>0jD5L^Wm7GyW8q0)9_fP3B@K|;Jp^G z!3Eytr36wzlgdVVt-4J-2#zaG#A6<}->VQ`{kC!27c*i;vnMLVdIz2Ri#y042Gp`R zOLVdW+fabl*m`nsmI^K)`tn111z*81Cr|ysEu*L*Q}FhB;Ss+vk;>YX0WNY>#?AOs z&nIozDR^>D=RCv*-|l2qYb~`BQBf^RX6xb~73C*31@I)p-ivIAWQx zKOcgk_Wt=CX|^POnGYE`W=k~wwtdq*sgm3;*BMoeeX?y{g3(8cbmKjJ6;G+fvZxaK zxPZ0&qfF{oY|6Su=Ejex0D9D0LNJnaVHj3EowzbQHbL{PXIFM;M8WLqB(&4sZv z=0HxiH;%tPbLyalV5-l5P;8=y`SszpYc?ulhx!GsDi8GGvTS~&OwB| zdB!fmHZQm@8n%$Jdl^&Z^??l8+E#2laP`3gPLn7yjr!r#Ng7E}>s!_vP0t@N2>s$) z7N*KQ_=8MjI(U?%^=tMF5ydmPQ1kfymYd*E>yuP~oJbbM{uoMFO`Z~*m1=cK;&b6%0xn6g~_BhL8RZ>A{EIXS(yFm}y$F`8Z( z;4@=K<~hrUx$VE28uR>;Ll~l;xL77M3DU&0LN6U+L?n_@$UpQxJWzqQy8^!Z_kTLk>c~udk(p~4w>~vf_~V{f zozNEM0_J#@j#1gV6lr5?%7{Egl$z=;eR~mLevCb~iQrwgI>1@7vI;)E+?Mi)uu;~2 zX}&=EBY8NtFlgV;H^blOleCH{cTvX0A_W3T=9-YGH)?ck*1n~U_cDwmkeiAqO;F>N zz+K6ji^TLRvv!YXvu}W$qhG2%(?;ni(zh4*WM?!R@(zdxlWY@F{dkx>pTMneI}OHA z{=Wuzrk#00@%ZH__w&V+nT==jUq?MFPRAaF?AMyftuEjrUu;&dJI(Tyvgz!dn}jD# zRE5t{1Xv1u*$Egq=&xYmrPM0?RPAbaGy81T>clgWUXZZ=4jx>~eb?1dgK)qkBT-Jp zU_t|(ZH@mG1_R#cruvY}3>@lCKCw5f-Y)xTlrS zn2P**vf)Qn;@wiGIcBAPofzZ4_{;3l>L>xrNl24%O(kNI7f`bMf8rmP;rQEHi=vMs zU*6o$?OKpU!wn3%GF)9uM=VL7gz*E!bEH8(DBKxblRuo% zeZIN0PPs62=rE(9d=_LZZ>`iP-i!c_?s0$PjLl__Gk^Gjjv5U=wI8)xJ0^oXok(Zy|(?qf-c9Ki4b`rg0ECtLrE?O&rAg@?(VXdqc* z+zNq`O3-+sJMq0yx8BZck$aDZ)+OP(pzKk%{^v+y)~J*mTIwdW1n0$0$Lgw-O^w8w zWrN$@zZM29#LcNX&yYFTI%IM)x#AJz*s?BKeRsjChd1~= z_{(g_O&mgn|K(K3l?!aeOQOC)J4S>4@Ibem=kcpU>0hdS&;7{fV_d&6J|;K^j zWB2omS`w^S^-OW^vp-lrT=^ofnZ!fF*(F3i%9qXir3a$F{KEV_(%8U!WU-+$ZCH?# zakyY?Y{JMRC8na~bLG323mlE+X;upfK34ok{8ppEl-<=^j{{(~7Ca$uTnyY*^973; zouThPYVG-URDp(hM+LH?1)WYpsw?3NyCPi7|I0l^hk2oyC!=qTLWGKIR%{nL)m!Kw zJ9`P}^q=7Qy&yJh(~}PmCk>Pit-FU#zYVZ}!5Dpa%7REj{2N`NMjUZR=1Lhw55a6t zW*%;9QUtGotxh{PxeN1+?ar#M+K61x6qM-anQG0WFW@Y}&~Wyb*A>Gwr0&F@Tc#Qr zN}uXTL^wu9r-aGN`$~MriJVX26-@S%pZKjZc!e5pi;v5Wete|+ETIu2?YE=iF0p1z zKD!<1lhC`|%`{Z0Z{O}VP6w>b+vMbBjE=#ZxgK-->)kuFgnDP&!V!w zGeEvVS3wz_zX$+dLKc+6KtG-uo_`ImQ9X}+qm#GQ*R=mT}3Ss0z-V_se^H}POTQE@9B4JDZVc&_fBKhoqVuHvWJkW`lIH`f% z$I>JozI7yRvRI4qm=Ib+dyZRanjOp{eO-K3%To#^<%RKK3MWmN_^krt1(o;_jsT@t zeJ`qV*lKoI(|{W8Bw!$pY{g{s{a9_3N`UvocC#7|i3lL3cp&5SsB0fkyjOk|g=Wo5 z6x8wIx|0M}(MoA!qj~*BMU=p&11a3K4Hlx~KyvgjbfHY`-Yy#e3L=BOC6J8V_81Y2 zEuj^MiHDS(7>?ns89|^YBr5g>QL3bpS1o%(-E8>qvd(nwA)mTn7`$CBmIC8!Sl{$$MdDF$`tEO;#b17ntHB4s zSVQukv|=zOXWy-wd7vsRwO4jBU!8{Rpl0c%NKx<3Vm^Juh$9S{iXsY||FkUaEY%h{ zY@-Y%&0%Eh3aLckN|w+N(N(Nec6c4XceDKXv(X$-Jh$N$GFOT%52?jaX~o8b0+yb} zd}D8)$0Gx#Dpn7lpmkq!+28;|dR>q^ktFgRBw+1}ER3OjE0T!OJ+|`_DjQ|~^$MR) zFXRFLJM0HpSQNu*wpE@8hm`|b1#ow794jx*=4Mfd5|oP9#2BZ5G)zh!KRG$Lf zU*i-(&Wz+}pU@k@UQ;EK6l|HczHh zaq&=-^w?=GAaL3&IgF7&F@`An0!m84NQf4pv{hPh866*s1?{|g0xNxTI1xT;TPd=Z_E3B20?Pk{s7RI&?L8W0E`%B&3?%L$r0ncd3n zj6J(PMMA_^PYitlx!ySXucTQ@NWW}d5cB60kYFMIQSKwm5MD$%S}QjX=j`~V?oapC zM>czP+XzUrSYNJOp7XVPPVsqb7mUs`Lw@nl*3sl%oKXi1#*5ke`(#xg*naiRx8H5N z0-82wD3gcTucSVD>k**Lnj=j=V<>(m^u`XR5o);hKd^e<@QQaEElZcThWI$cGSCGK z{aIxmrVV`lT;Oo!q+PLP{|jfYy91-0flflwX`IoGA04j2NfJ%<4wb9ra6k!GCYo=< zmgUncLzH8B3YGNfyaL8$_;}8g&%MP~%7#Zs#=>r2{Q@g)8Oo&ihUFOSWIl;@bdngw z(Ku1|!c{io+)HXx8OHvs1W=WQiWU?kS|{k2;^SWdkydYlV|d7tjp+q59HU!_81rg1 zctV)ORmf+dyh-WaKha`3lQI;S#*CFSX>iok0Ygv-Xsp9r zkFlpaBxj2?#SdJ9{WjpuCgUKxEr6 z3ubj+uQcz?Ie&X;2j$QKxbN%V0ti#;vfx1M0xF*OA_1IxT$5>kjt{0pY&(-18*?jz z|DYGrbCdL$DM@sY5s&KD;n=h&>sJjT4E7#Ef}D2ehnq7dZ#>=@xe%0J`U1s*Cc9xz zDsj;j8bc`@;>a>EyWfZvJ?ZKy;$~oIfA7}h(qU=p_7;I1=K>(VQlx^TOy7IWlQ76o zfXLgo_&jXhd?;FbNa=sU$30b1E)3M3sa9hA?KrXQsNWeU2Xr4a4ld346c zcxuc#t)Zl+$TFaB(Uk?9XJ30YHh1z)SU<|~Dn^0J`A`z2h>ZM1503jTk1n1P$mo&z zhX<2NrxHa^Lm-L0lz7;!$e(0SD*qwh#7B=wk)%ouH@WA)Q)J23Q8N!#`oIVrS0*tU zJxxokq-Do5RDdpa()B*PDRX<2^E$eSEVXfz zB(5UmDQkLvN!S;SoA>ooYKgYcp}fCT?u5hdmo{ddTl*G$35AHlg{G~0oufjJ*z{*@ zigDY2VwTG*`Zo`FuWJOD1gh9wO1gcHyQfQ(eMt1<%bsLriQU&}8Bk1)l0Y=*x0uZ? z%Xwr@M!#XgQ>1+@V(aNt6#i|=+BGO1`@?>A?|M*sYldm!a{Tcr7mhE6Fqz3#@=%wG zdwttJgSaM*n&9EVn{=u`ym6NtLUhVZ(4{4!qd_u7!k_eSeO|45ML`^?QKyEhM6Kt` zj2+y7!?~UcV&P|`&g0WoX389$nSEUJf1WO$*x!^db)fmR@7aZ-k@pD z*bi*?^iqv+mrSQRUi_=_{U;|!i#z{dCGU(~M?=!~=)}nC;*%+m<-5wRY#W62SywUt zD)Bqo-(>1Y9@zp7HABJnN6u-Up0-VYrjN$UQQh8|Ln~EzmHRp4su_=j9ZPcA+8T$t zL%WI25Fy*khhIj_ZhwUZ8y!s6(Q*D?O6Pxp51ZyETVRMMB!n+y>X~@)sMK-s#Fo>; zod#W!s{k0WfxUQeyCS;q@^Dq2&}&Im6P$yGm(n?KltrmE2RWJ=-!MR9`tQ8-|EiCZoyFn1 zHTE)M1c5hAsa;q!!}H;R!h&46CQrV9;1y39xsJ;xRA}~PX{C;36MLRpdIWdP!KXSM z9vqyaiP6Dcnz}GV<@ph3hijNi+sss)nO5>XrsGyNV6~>GN>y~M8aFT=^D=Bv4yHLL z%pwtO3S;FxeQ~XEEoiF8Vl~QC&ErQkQ;7X-{r9JzTHrCLEH}s;@~RxXDR{QbT;^ZN zqa>a&V~8^-CU6Dpg8N!FMNK7REzkbe8iQoO*h@@z*MHly!?4k1$jc{x+s%gDO<7L< zUTTPC-Iv+*w*|b3hNN>_~t!*A}=HJznnwZ)v&EL0dQo)Zkh@gXXz)#&a(}S*!jVa|OoTq1# zzySA{f(SB52i7_U)7gzNhQGswAMIG7o4QER-Y)ELWDZX1H$%IB8s7{Z9f2W}EZr_G zFu>rt{RNm zXlMuPp@&?#QJ~G1X>S+~PR*juLoLMFBrw3JpvX{lVoYKjXCDybJ=c3~qqp;qi@0|j z3e$LJlO|CYv3Mpf0!9VyqpLW+O~0MR>qYX;z^z0rah8g38`E;{9Y-`ZxiGqo$G{Z) z`Y3$+F8nnK-~3u#FJil@L^-io4DpBe)%i3^z;$&SVgZZR+tWCiw;_ZZzr|W7v1Aib ziWjrkMB@YFU5Lfb$5FrmxbgdPmU53X^t(^-@G>HV5H-(@QDWwUZJR60ijKg*hrm*n zF3y^dqj>OVB<6>sD2{a}*W|9vVU4inIi|(M8k}?73rslg=?Dy+b1X>!0HcB;*`$g6 z(=cFMiE`o}kHWlM%Oc@6(kzrIJsN6Opa%w?4y#sE+Pq2_e?W{usZD1SyMJPuWUG3; z+&HXUjVDD}wgocUqOu?Urg*v6hiyk-$RtYu%Cfu~f0o*$MG%9S#W)lYNl_a}U{kO^ zpM;wttrsi}Mp2YiZCE*-r0+lY-_OGNG>vASj=+#fmH+_b#uJ~-3W#wiAc|=%)U$D8g1FU@ojr;9XOHj}xhBQRu=CAfhB#t4dBGh!$plHouc=g&&kt@C;xB%c?B z{qDWLD;o;XXj(&aQ#6xXPe))VlK_ALMg_mK)T2QGk=)#s$9qS%vK^(s`G7$Ba3cxn zbeV*PcYuT%fuV!}05HH({*1{jLIKgrW0`t;BKe=E)%`4JcQH#iL||_Uu5moGuukR< z0d6K)0ssuKyaYFiF$R&y0|J6yJQX4MtdXC@D@D&^Ljt!<^jn8Okk78}=*-Aa1Ym$s zK@s)LAQTWmN85pTB?vL{Zp6EVIuT*wjQ6{Tx<9#mmRyS$ORoOMsjVLCkJB`NoZRk@ z(~|`xB`qMKyMQdyb$0p}x4ZSL! zPXngZfj(klOCoW7&Jjjr)Om2#U?;KO7~Ky)_t1tS>bghPLe`mF!upcORE#Kh_c2wD z%<-iU<{M{&wS&2}PQMU5_fy28_frH!wGz4i{^Lt6G5_B_H~j;`zbli6oUyI|0000< KMNUMnLSTZ8+*A($ diff --git a/demo/resources/ios/icon/icon-40@2x.png b/demo/resources/ios/icon/icon-40@2x.png deleted file mode 100644 index 64b490691b6a2977516667744a5da5dd3da7387a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3564 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 diff --git a/demo/resources/ios/icon/icon-50@2x.png b/demo/resources/ios/icon/icon-50@2x.png deleted file mode 100644 index 2676f8f6942516888cfd8cca5eaa0b80b18f0cc0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4691 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 Sk$NTo0000r6m>5mq+@A>1*G}m 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 JQOP#u{{fjJsFMHy diff --git a/demo/resources/ios/icon/icon-60@3x.png b/demo/resources/ios/icon/icon-60@3x.png deleted file mode 100644 index dbc830308dcded4555effe7e99c9a14601322796..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10875 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 ScciHlMOj{5u2RM%@P7fF?$eC` diff --git a/demo/resources/ios/icon/icon-72.png b/demo/resources/ios/icon/icon-72.png deleted file mode 100644 index 4e5a82761108b5eb1ee082df6a743ac1df667886..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2866 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 diff --git a/demo/resources/ios/icon/icon-72@2x.png b/demo/resources/ios/icon/icon-72@2x.png deleted file mode 100644 index 56fb29e64e62d8afc5488de5f4ab6119becc6901..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7793 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 diff --git a/demo/resources/ios/icon/icon-76.png b/demo/resources/ios/icon/icon-76.png deleted file mode 100644 index e66a90ed64a22af5253377e7ad195985e1b1a3c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3319 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 R!&L$dRV58bje=SD{{cQO-vs~w diff --git a/demo/resources/ios/icon/icon-small.png b/demo/resources/ios/icon/icon-small.png deleted file mode 100644 index de3146dc7f5b63c155829d75ae9d8676c79a9621..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 818 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 JPDHLkV1jm)Mgaf- diff --git a/demo/resources/ios/icon/icon-small@3x.png b/demo/resources/ios/icon/icon-small@3x.png deleted file mode 100644 index 0efa99d8626ebc43f4bcc9ac6f1f188bfe5cb133..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3856 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 + templateUrl: 'app.html' }) export class MyApp { - rootPage = TabsPage; + rootPage = HomePage; constructor(platform: Platform) { platform.ready().then(() => { diff --git a/demo/src/app/app.html b/demo/src/app/app.html new file mode 100644 index 0000000..7b88c96 --- /dev/null +++ b/demo/src/app/app.html @@ -0,0 +1 @@ + diff --git a/demo/src/app/app.module.ts b/demo/src/app/app.module.ts index b6d0df5..9ddbf51 100644 --- a/demo/src/app/app.module.ts +++ b/demo/src/app/app.module.ts @@ -1,34 +1,25 @@ -import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; -import { IonicApp, IonicModule } from 'ionic-angular'; +import { NgModule, ErrorHandler } from '@angular/core'; +import { IonicApp, IonicModule, IonicErrorHandler } from 'ionic-angular'; import { MyApp } from './app.component'; -import { AboutPage } from '../pages/about/about'; -import { ContactPage } from '../pages/contact/contact'; import { HomePage } from '../pages/home/home'; -import { TabsPage } from '../pages/tabs/tabs'; -import {IonPullupModule} from './ionic-pullup/ion-pullup.module'; +import {IonPullUpComponent, IonPullUpTabComponent} from 'ionic-pullup'; @NgModule({ declarations: [ MyApp, - AboutPage, - ContactPage, HomePage, - TabsPage + IonPullUpComponent, + IonPullUpTabComponent ], imports: [ - IonicModule.forRoot(MyApp), - IonPullupModule + IonicModule.forRoot(MyApp) ], bootstrap: [IonicApp], entryComponents: [ MyApp, - AboutPage, - ContactPage, - HomePage, - TabsPage + HomePage ], - providers: [], - schemas: [ CUSTOM_ELEMENTS_SCHEMA ] + providers: [{provide: ErrorHandler, useClass: IonicErrorHandler}] }) export class AppModule {} diff --git a/demo/src/app/app.scss b/demo/src/app/app.scss index a967d6f..acd3be3 100644 --- a/demo/src/app/app.scss +++ b/demo/src/app/app.scss @@ -14,3 +14,8 @@ // To declare rules for a specific mode, create a child rule // for the .md, .ios, or .wp mode classes. The mode class is // automatically applied to the element in the app. + +// Ionic Pullup +// http://arielfaur.github.io/ionic-pullup/ +// @import "../../node_modules/ionic-pullup/src/ion-pullup.scss"; + @import "../../ionic-pullup/src/ion-pullup.scss"; \ No newline at end of file diff --git a/demo/src/app/ionic-pullup/ion-pullup.scss b/demo/src/app/ionic-pullup/ion-pullup.scss deleted file mode 100644 index a332fe8..0000000 --- a/demo/src/app/ionic-pullup/ion-pullup.scss +++ /dev/null @@ -1,71 +0,0 @@ - -$tabWidth: 120px; // tab width -$tabHeight: 22px; // tab height, set to 0px if there is no tab -$tabRadius: 20px; // tab radius -$tabBackground: color($colors, primary, base); // tab background color -$tabIconColor: white; // icon color within tab -$tabShadow: #666; // shadow color - -@mixin pullup-tab($width, $height, $radius, $background: color($colors, primary, base), $foreground: color($colors, primary, contrast)) { - position: relative; - width: $width; - height: $height; - background: $background; - color: $foreground; - border-radius: $radius $radius 0 0; - margin: 0 auto; -} - -@mixin pullup-tab-shadow($shadowColor) { - box-shadow: 0px -2px 2px $shadowColor; -} - -ion-pullup { - background : color($colors, primary, base); - - ion-footer { - &::before { - content: none; - } - - ion-pullup-tab { - z-index: 1000; - display: flex; - justify-content: center; - - @include pullup-tab($tabWidth, $tabHeight, $tabRadius, $tabBackground, $tabIconColor); - @include pullup-tab-shadow($tabShadow); - } - - ion-content { - position:absolute; - - .ios & { - @import 'node_modules/ionic-angular/components/toolbar/toolbar.ios'; - margin-top: calc(#{$toolbar-ios-height} + #{$tabHeight}); - - scroll-content { - margin-bottom: calc(#{$toolbar-ios-height} + #{$tabHeight}); - } - } - .md & { - @import 'node_modules/ionic-angular/components/toolbar/toolbar.md'; - margin-top: calc(#{$toolbar-md-height} + #{$tabHeight}); - - scroll-content { - margin-bottom: calc(#{$toolbar-md-height} + #{$tabHeight}); - } - } - } - - ion-toolbar { - @include pullup-tab-shadow($tabShadow); - - .toolbar-background { - .ios & { - border-top: none; - } - } - } - } -} \ No newline at end of file diff --git a/demo/src/app/ionic-pullup/ion-pullup.ts b/demo/src/app/ionic-pullup/ion-pullup.ts deleted file mode 100644 index 4e8f507..0000000 --- a/demo/src/app/ionic-pullup/ion-pullup.ts +++ /dev/null @@ -1,267 +0,0 @@ -/* -ionic-pullup v2 for Ionic/Angular 2 - -Copyright 2016 Ariel Faur (https://github.com/arielfaur) -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -import { Attribute, ChangeDetectionStrategy, Component, Directive, DoCheck, SimpleChange, OnChanges, EventEmitter, ElementRef, Renderer, ViewChild, ContentChild, Output, Input, Injectable, Inject, Optional } from '@angular/core'; -import { Gesture } from 'ionic-angular/gestures/gesture'; -import { Toolbar, Footer } from 'ionic-angular/components/toolbar/toolbar'; -import { Platform } from 'ionic-angular'; - -interface FooterMetadata { - height: number; - posY: number; - lastPosY: number; - defaultHeight?: number; -} - -interface ViewMetadata { - tabs?: Element; - tabsHeight?: number; - hasBottomTabs?: boolean; - header?: Element; - headerHeight?: number; -} - -interface FooterTab { - x?: number; - y?: number; - upperLeftRadius?: number; - upperRightRadius?: number; - backgroundColor?: string; - color?: string; - content?: string; -} - -export enum IonPullUpFooterState { - Collapsed = 0, - Expanded = 1, - Minimized = 2 -} - -export enum IonPullUpFooterBehavior { - Hide, - Expand -} - -@Component({ - selector: 'ion-pullup', - changeDetection: ChangeDetectionStrategy.OnPush, - template: ` - - - - ` -}) -export class IonPullUpComponent { - @Input() state: IonPullUpFooterState; - @Output() stateChange: EventEmitter = new EventEmitter(); - - @Input() initialState: IonPullUpFooterState; // TODO implemment - @Input() defaultBehavior: IonPullUpFooterBehavior; // TODO implemment - @Input() maxHeight: number; - - @Output() onExpand = new EventEmitter(); - @Output() onCollapse = new EventEmitter(); - @Output() onMinimize = new EventEmitter(); - - @ContentChild(Toolbar) childToolbar; - @ViewChild('footer') childFooter; - - protected _footerMeta: FooterMetadata; - protected _currentViewMeta: ViewMetadata; - protected _oldState: IonPullUpFooterState; - - constructor(private platform: Platform, private el: ElementRef, private renderer: Renderer) { - this._footerMeta = { - height: 0, - posY: 0, - lastPosY: 0 - } - this._currentViewMeta = {}; - - // sets initial state - this.initialState = this.initialState || IonPullUpFooterState.Collapsed; - this.defaultBehavior = this.defaultBehavior || IonPullUpFooterBehavior.Expand; - this.maxHeight = this.maxHeight || 0; - } - - ngOnInit() { - console.debug('ionic-pullup => Initializing footer...'); - - window.addEventListener("orientationchange", () => { - console.debug('ionic-pullup => Changed orientation => updating'); - this.updateUI(); - }); - this.platform.resume.subscribe(() => { - console.debug('ionic-pullup => Resumed from background => updating'); - this.updateUI(); - }); - } - - ngAfterContentInit() { - this.computeDefaults(); - - let barGesture = new Gesture(this.childToolbar.getNativeElement()); - barGesture.listen(); - barGesture.on('tap', e => { - this.onTap(e); - }); - barGesture.on('pan panstart panend', e => { - this.onDrag(e); - }); - - this.state = IonPullUpFooterState.Collapsed; - - this.updateUI(true); // need to indicate whether it's first run to avoid emitting events twice due to change detection - - } - - public get expandedHeight() : number { - return window.innerHeight - this._currentViewMeta.headerHeight; - } - - computeDefaults() { - this._footerMeta.defaultHeight = this.childFooter.nativeElement.offsetHeight; - - - // TODO: still need to test with tabs template (not convinced it is a valid use case...) - this._currentViewMeta.tabs = this.el.nativeElement.closest('ion-tabs'); - this._currentViewMeta.tabsHeight = this._currentViewMeta.tabs ? ( this._currentViewMeta.tabs.querySelector('.tabbar')).offsetHeight : 0 - console.debug (this._currentViewMeta.tabsHeight ? 'ionic-pullup => Tabs detected' : 'ionic.pullup => View has no tabs'); - //this._currentViewMeta.hasBottomTabs = this._currentViewMeta.tabs && this._currentViewMeta.tabs.classList.contains('tabs-bottom'); - - - this._currentViewMeta.header = document.querySelector('ion-navbar.toolbar'); - this._currentViewMeta.headerHeight = this._currentViewMeta.header ? (this._currentViewMeta.header).offsetHeight : 0; - } - - computeHeights(isInit: boolean = false) { - this._footerMeta.height = this.maxHeight > 0 ? this.maxHeight : this.expandedHeight; - - this.renderer.setElementStyle(this.childFooter.nativeElement, 'height', this._footerMeta.height + 'px'); - - // TODO: implement minimize mode - //this.renderer.setElementStyle(this.el.nativeElement, 'min-height', this._footerMeta.height + 'px'); - //if (this.initialState == IonPullUpFooterState.Minimized) { - // this.minimize() - //} else { - this.collapse(isInit); - //} - } - - updateUI(isInit: boolean = false) { - setTimeout(() => { - this.computeHeights(isInit); - }, 300); - this.renderer.setElementStyle(this.childFooter.nativeElement, 'transition', 'none'); // avoids flickering when changing orientation - } - - expand() { - this._footerMeta.lastPosY = 0; - this.renderer.setElementStyle(this.childFooter.nativeElement, '-webkit-transform', 'translate3d(0, 0, 0)'); - this.renderer.setElementStyle(this.childFooter.nativeElement, 'transform', 'translate3d(0, 0, 0)'); - this.renderer.setElementStyle(this.childFooter.nativeElement, 'transition', '300ms ease-in-out'); - - this.onExpand.emit(null); - } - - collapse(isInit: boolean = false) { - this._footerMeta.lastPosY = this._footerMeta.height - this._footerMeta.defaultHeight - this._currentViewMeta.tabsHeight; - this.renderer.setElementStyle( this.childFooter.nativeElement, '-webkit-transform', 'translate3d(0, ' + this._footerMeta.lastPosY + 'px, 0)'); - this.renderer.setElementStyle( this.childFooter.nativeElement, 'transform', 'translate3d(0, ' + this._footerMeta.lastPosY + 'px, 0)'); - - if (!isInit) this.onCollapse.emit(null); - } - - minimize() { - this._footerMeta.lastPosY = this._footerMeta.height; - this.renderer.setElementStyle(this.childFooter.nativeElement, '-webkit-transform', 'translate3d(0, ' + this._footerMeta.lastPosY + 'px, 0)'); - this.renderer.setElementStyle(this.childFooter.nativeElement, 'transform', 'translate3d(0, ' + this._footerMeta.lastPosY + 'px, 0)'); - - this.onMinimize.emit(null); - } - - - onTap(e: any) { - e.preventDefault(); - - if (this.state == IonPullUpFooterState.Collapsed) { - if (this.defaultBehavior == IonPullUpFooterBehavior.Hide) - this.state = IonPullUpFooterState.Minimized; - else - this.state = IonPullUpFooterState.Expanded; - } else { - if (this.state == IonPullUpFooterState.Minimized) { - if (this.defaultBehavior == IonPullUpFooterBehavior.Hide) - this.state = IonPullUpFooterState.Collapsed; - else - this.state = IonPullUpFooterState.Expanded; - } else { - // footer is expanded - this.state = this.initialState == IonPullUpFooterState.Minimized ? IonPullUpFooterState.Minimized : IonPullUpFooterState.Collapsed; - } - } - } - - - onDrag(e: any) { - e.preventDefault(); - - switch(e.type) { - case 'panstart': - this.renderer.setElementStyle(this.childFooter.nativeElement, 'transition', 'none'); - break; - case 'pan': - this._footerMeta.posY = Math.round(e.deltaY) + this._footerMeta.lastPosY; - if (this._footerMeta.posY < 0 || this._footerMeta.posY > this._footerMeta.height) return; - this.renderer.setElementStyle(this.childFooter.nativeElement, '-webkit-transform', 'translate3d(0, ' + this._footerMeta.posY + 'px, 0)'); - this.renderer.setElementStyle(this.childFooter.nativeElement, 'transform', 'translate3d(0, ' + this._footerMeta.posY + 'px, 0)'); - break; - case 'panend': - this.renderer.setElementStyle(this.childFooter.nativeElement, 'transition', '300ms ease-in-out'); - - if (this._footerMeta.lastPosY > this._footerMeta.posY) { - this.state = IonPullUpFooterState.Expanded; - } - else if (this._footerMeta.lastPosY < this._footerMeta.posY) { - this.state = (this.initialState == IonPullUpFooterState.Minimized) ? IonPullUpFooterState.Minimized : IonPullUpFooterState.Collapsed; - } - - break; - } - } - - ngDoCheck() { - if (!Object.is(this.state, this._oldState)) { - switch (this.state) { - case IonPullUpFooterState.Collapsed: - this.collapse(); - break; - case IonPullUpFooterState.Expanded: - this.expand(); - break; - case IonPullUpFooterState.Minimized: - this.minimize(); - break; - } - this._oldState = this.state; - - // TODO: fix hack due to BUG (https://github.com/angular/angular/issues/6005) - window.setTimeout(() => { - this.stateChange.emit(this.state); - }) - } - } - -} \ No newline at end of file diff --git a/demo/src/app/main.prod.ts b/demo/src/app/main.prod.ts deleted file mode 100644 index ec61e04..0000000 --- a/demo/src/app/main.prod.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { platformBrowser } from '@angular/platform-browser'; -import { enableProdMode } from '@angular/core'; - -import { AppModuleNgFactory } from './app.module.ngfactory'; - -enableProdMode(); -platformBrowser().bootstrapModuleFactory(AppModuleNgFactory); diff --git a/demo/src/app/main.dev.ts b/demo/src/app/main.ts similarity index 100% rename from demo/src/app/main.dev.ts rename to demo/src/app/main.ts diff --git a/demo/src/assets/icon/favicon.ico b/demo/src/assets/icon/favicon.ico deleted file mode 100644 index d76fa29d65b869e7df297c06a637b9dceef46966..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1981 zcmV;u2SWIXP)ht(u000LX zNklWT>kj`X8C0K}-+Njke_yE))Es)eQR1zuV_Q&^k;d;G~bMM*b9_%}F=id39 zbJyN${q|mat?yd9ZTeR>YBF|5I}X9iFdpNuD@LFVo3I}1@Bmg}DOO@lGbcB!NpcUw zbR3F#m9d_W_uy05fM(|eLg-hhE>@Q1yQ9%2=@Oh=*=kLDK|S%smYyE=w*pR;C4cgEtUL+0 z`a5>78K?mcl0E-|=B#Q~S&Xo>9p(Q3^Gh<1q$hD(rkA8x|GFtswuR`lcqr{V*6+p|!4l1i`Y_Uw2` zq)x>5yMEAp3k;JudoiwVwI&6zTztd@*sU)EoQR1yt<^Jb0%l`J$ys_dz%X$n^Tn$+ z8zUutAB&xaV7$k0AwG#+dNROK;`HV=aS{jMGq@JF3q!ODcSuZsj>PrN!bO$NGdmx2 zJq3P?C-9ag4E$PIg42XR=?fjzT+WwtyEHDvoA6?`t$^LDNzN-gSWP0y-^r=cpYkNl zo{C?JLw-)-In9&A>6Kj#aI}Py3kwc3QvAtWgXbP+$!WCPApgH7+$6EV30(~^Lqf%d z__c2MA&xB|=Mel%IY-%np9r_OLk*+xDrMjPnRs_Wd9T-ZtUpj(C!z74HM~%A>Dvnl zf2laU(l`lkEF^1X^?PDXj;2k*+n2yudZC{R;9Lo28pRq(k`C+S+wWF};@Tf?Z<6xx z8fD^yEkfr{s0p8Tf1wFZR^|=$g(C{dS*!8^yW-(OLQCz@zA#NcTz{Ro4?EW+E`F?l zz&3G!&BmU}9ElHLc&!rlcmaXK_0Pvz{@EjZ>2v{g?u> z{v%b}W@CdSZH;0SHrJ$4Vdnw@J8;hs7~r8o2G|3eYIsDdy(Mt%5E$TkWwz|z*ie(G zXs<$(yHPI{n1WbTNX~eyt4UR*T^E|D0o@AC zX03ubwl!8Yf^otKEv-oyyir=%O5jiUY7>;dO1XZ733381uL%jVTqvtj__SVXaf8Hi z>GCLrDfm0qb_PQ8g$ymlzik#aXh|XEr%P$86lMqkw7Js&3nVZoxeC?`)!qn`bA@zv zl*(2K8QLxlR$Dp2ze?ZFjDiCZhjp5et^@Jjw+RDuobs(W$K!8OIDHyhdkKCd0m6NS z2VGeG9ExM`2FdC=x7?F>Q0n*#TI~g5@TZl=HsQ;%^u{%LA|2u*)=DJ$$Pg$$(zYgw2Rk2juMU4# z_Q!=yo=ht+N4DH~T_1Kgz(y$_A1hq^{|ojNs{RaNf_gOo+Z@(>Wq5*Cqb60VWzzKZ zj1POlDUuvDBcvT_%$82k8A96BWq^nAPB}83&D|o$NYBBkSkcoL`sx#0EY`bNbBi6# z!ojkQzghkCi2lmf=L%W!Q{nutYqeH&VxqjjrTA!HU#zEY{}Bn2mg3ENX*u1FFi9FR zZk4X~KDmi{yTwly54sp1YPE)a;7AFludn{@_clnq2I!EbbSA!quS;aLJ>g7g@BOy; zth%nk4D`mxTxpx1Azb3*R%* zhiHnd%mHDrx5idWtJz5sE3A-2<9S1%_!!An?-T-dHeQWC3`SU^_XaN)cJ-pl0ITs0 z@x-OkjxR}P$Hj6q??Co^9@AGm= zV=t3lzalL?B@M7urUXq#Ni##ca1D1#E6y76AM1q)>X0~NtZbq2lD!=$gvtFtmD*~dF!hst1^E5#m{m2$82_1_{ZscB@%{{RgS zg3}ED|5E?}03v!+SaefwW^{L9a%BJjc-nJJ$xljE@XSq2PYp^ - - - About - - - - - - - diff --git a/demo/src/pages/about/about.scss b/demo/src/pages/about/about.scss deleted file mode 100644 index 639956d..0000000 --- a/demo/src/pages/about/about.scss +++ /dev/null @@ -1,3 +0,0 @@ -page-about { - -} diff --git a/demo/src/pages/about/about.ts b/demo/src/pages/about/about.ts deleted file mode 100644 index 1b4c5ad..0000000 --- a/demo/src/pages/about/about.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Component } from '@angular/core'; - -import { NavController } from 'ionic-angular'; - -@Component({ - selector: 'page-about', - templateUrl: 'about.html' -}) -export class AboutPage { - - constructor(public navCtrl: NavController) { - - } - -} diff --git a/demo/src/pages/contact/contact.html b/demo/src/pages/contact/contact.html deleted file mode 100644 index c6ce324..0000000 --- a/demo/src/pages/contact/contact.html +++ /dev/null @@ -1,17 +0,0 @@ - - - - Contact - - - - - - - Follow us on Twitter - - - @ionicframework - - - diff --git a/demo/src/pages/contact/contact.scss b/demo/src/pages/contact/contact.scss deleted file mode 100644 index 13d4440..0000000 --- a/demo/src/pages/contact/contact.scss +++ /dev/null @@ -1,3 +0,0 @@ -page-contact { - -} diff --git a/demo/src/pages/contact/contact.ts b/demo/src/pages/contact/contact.ts deleted file mode 100644 index a344720..0000000 --- a/demo/src/pages/contact/contact.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Component } from '@angular/core'; - -import { NavController } from 'ionic-angular'; - -@Component({ - selector: 'page-contact', - templateUrl: 'contact.html' -}) -export class ContactPage { - - constructor(public navCtrl: NavController) { - - } - -} diff --git a/demo/src/pages/home/home.html b/demo/src/pages/home/home.html index c81dc27..b70f9e1 100644 --- a/demo/src/pages/home/home.html +++ b/demo/src/pages/home/home.html @@ -1,25 +1,32 @@ - Home + + Ionic Blank + - -

Welcome to Ionic!

+ + +

Welcome to your first Ionic app!

+ +

+ This starter project is our way of helping you get a functional app running in record time. +

- This starter project comes with simple tabs-based layout for apps - that are going to primarily use a Tabbed UI. + Follow along on the tutorial section of the Ionic docs!

- Take a look at the src/pages/ directory to add or change tabs, - update any existing page or create new pages. +

+
+ - + Footer @@ -78,4 +85,4 @@

Welcome to Ionic!

-
\ No newline at end of file + diff --git a/demo/src/pages/home/home.ts b/demo/src/pages/home/home.ts index d23a173..ba2b36b 100644 --- a/demo/src/pages/home/home.ts +++ b/demo/src/pages/home/home.ts @@ -1,15 +1,14 @@ import { Component } from '@angular/core'; - import { NavController } from 'ionic-angular'; -import {IonPullUpComponent, IonPullUpFooterState} from '../../app/ionic-pullup/ion-pullup'; -import {IonPullUpTabComponent} from '../../app/ionic-pullup/ion-pullup-tab'; +import {IonPullUpFooterState} from 'ionic-pullup'; @Component({ selector: 'page-home', templateUrl: 'home.html' }) export class HomePage { + footerState: IonPullUpFooterState; constructor(public navCtrl: NavController) { diff --git a/demo/src/pages/tabs/tabs.html b/demo/src/pages/tabs/tabs.html deleted file mode 100644 index fa3921a..0000000 --- a/demo/src/pages/tabs/tabs.html +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/demo/src/pages/tabs/tabs.ts b/demo/src/pages/tabs/tabs.ts deleted file mode 100644 index a95cdf4..0000000 --- a/demo/src/pages/tabs/tabs.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Component } from '@angular/core'; - -import { HomePage } from '../home/home'; -import { AboutPage } from '../about/about'; -import { ContactPage } from '../contact/contact'; - -@Component({ - templateUrl: 'tabs.html' -}) -export class TabsPage { - // this tells the tabs component which Pages - // should be each tab's root Page - tab1Root: any = HomePage; - tab2Root: any = AboutPage; - tab3Root: any = ContactPage; - - constructor() { - - } -} diff --git a/demo/src/service-worker.js b/demo/src/service-worker.js index 0928a8f..6679781 100644 --- a/demo/src/service-worker.js +++ b/demo/src/service-worker.js @@ -1,80 +1,30 @@ -// tick this to make the cache invalidate and update -const CACHE_VERSION = 1; -const CURRENT_CACHES = { - 'read-through': 'read-through-cache-v' + CACHE_VERSION -}; - -self.addEventListener('activate', (event) => { - // Delete all caches that aren't named in CURRENT_CACHES. - // While there is only one cache in this example, the same logic will handle the case where - // there are multiple versioned caches. - const expectedCacheNames = Object.keys(CURRENT_CACHES).map((key) => { - return CURRENT_CACHES[key]; - }); - - event.waitUntil( - caches.keys().then((cacheNames) => { - return Promise.all( - cacheNames.map((cacheName) => { - if (expectedCacheNames.indexOf(cacheName) === -1) { - // If this cache name isn't present in the array of "expected" cache names, then delete it. - console.log('Deleting out of date cache:', cacheName); - return caches.delete(cacheName); - } - }) - ); - }) - ); -}); - -// This sample illustrates an aggressive approach to caching, in which every valid response is -// cached and every request is first checked against the cache. -// This may not be an appropriate approach if your web application makes requests for -// arbitrary URLs as part of its normal operation (e.g. a RSS client or a news aggregator), -// as the cache could end up containing large responses that might not end up ever being accessed. -// Other approaches, like selectively caching based on response headers or only caching -// responses served from a specific domain, might be more appropriate for those use cases. -self.addEventListener('fetch', (event) => { +/** + * Check out https://googlechrome.github.io/sw-toolbox/docs/master/index.html for + * more info on how to use sw-toolbox to custom configure your service worker. + */ - event.respondWith( - caches.open(CURRENT_CACHES['read-through']).then((cache) => { - return cache.match(event.request).then((response) => { - if (response) { - // If there is an entry in the cache for event.request, then response will be defined - // and we can just return it. - return response; - } +'use strict'; +importScripts('./build/sw-toolbox.js'); - // Otherwise, if there is no entry in the cache for event.request, response will be - // undefined, and we need to fetch() the resource. - console.log(' No response for %s found in cache. ' + - 'About to fetch from network...', event.request.url); - - // We call .clone() on the request since we might use it in the call to cache.put() later on. - // Both fetch() and cache.put() "consume" the request, so we need to make a copy. - // (see https://fetch.spec.whatwg.org/#dom-request-clone) - return fetch(event.request.clone()).then((response) => { - - // Optional: add in extra conditions here, e.g. response.type == 'basic' to only cache - // responses from the same domain. See https://fetch.spec.whatwg.org/#concept-response-type - if (response.status < 400 && response.type === 'basic') { - // We need to call .clone() on the response object to save a copy of it to the cache. - // (https://fetch.spec.whatwg.org/#dom-request-clone) - cache.put(event.request, response.clone()); - } - - // Return the original response object, which will be used to fulfill the resource request. - return response; - }); - }).catch((error) => { - // This catch() will handle exceptions that arise from the match() or fetch() operations. - // Note that a HTTP error response (e.g. 404) will NOT trigger an exception. - // It will return a normal response object that has the appropriate error code set. - console.error(' Read-through caching failed:', error); +self.toolbox.options.cache = { + name: 'ionic-cache' +}; - throw error; - }); - }) - ); -}); \ No newline at end of file +// pre-cache our key assets +self.toolbox.precache( + [ + './build/main.js', + './build/main.css', + './build/polyfills.js', + 'index.html', + 'manifest.json' + ] +); + +// dynamically cache any other local assets +self.toolbox.router.any('/*', self.toolbox.cacheFirst); + +// for any other requests go to the network, cache, +// and then only use that cached resource if your user goes offline +self.toolbox.router.default = self.toolbox.networkFirst; \ No newline at end of file diff --git a/demo/src/theme/variables.scss b/demo/src/theme/variables.scss index 49e7c6b..12c82d5 100644 --- a/demo/src/theme/variables.scss +++ b/demo/src/theme/variables.scss @@ -1,5 +1,7 @@ // Ionic Variables and Theming. For more info, please see: // http://ionicframework.com/docs/v2/theming/ +$font-path: "../assets/fonts"; + @import "ionic.globals"; @@ -10,8 +12,7 @@ // To view all the possible Ionic variables, see: // http://ionicframework.com/docs/v2/theming/overriding-ionic-variables/ -$text-color: #000; -$background-color: #fff; + // Named Color Variables @@ -67,5 +68,11 @@ $colors: ( // The premium icon font for Ionic. For more info, please see: // http://ionicframework.com/docs/v2/ionicons/ -$ionicons-font-path: "../assets/fonts"; -@import "ionicons"; +@import "ionic.ionicons"; + + +// Fonts +// -------------------------------------------------- + +@import "roboto"; +@import "noto-sans"; diff --git a/demo/src/app/ionic-pullup/ion-pullup.module.ts b/src/ion-pullup.module.ts similarity index 100% rename from demo/src/app/ionic-pullup/ion-pullup.module.ts rename to src/ion-pullup.module.ts diff --git a/src/ionic-pullup/ion-pullup-tab.ts b/src/ionic-pullup/ion-pullup-tab.ts deleted file mode 100644 index aefd7e3..0000000 --- a/src/ionic-pullup/ion-pullup-tab.ts +++ /dev/null @@ -1,51 +0,0 @@ -/* -ionic-pullup v2 for Ionic/Angular 2 - -Copyright 2016 Ariel Faur (https://github.com/arielfaur) -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -import {Attribute, Component, Directive, DoCheck, SimpleChange, OnChanges, EventEmitter, ElementRef, Renderer, ContentChild, Output, Input, Injectable, Inject, Optional, Pipe, PipeTransform} from '@angular/core'; -import {Gesture} from 'ionic-angular/gestures/gesture'; -import {Toolbar} from 'ionic-angular/components/toolbar/toolbar'; -import {IonPullUpComponent, IonPullUpFooterState} from './ion-pullup'; - -@Component({ - selector: 'ion-pullup-tab', - template: '' -}) -export class IonPullUpTabComponent { - @Input() footer: IonPullUpComponent; - - constructor(private el: ElementRef, private renderer: Renderer) { - - } - - public get IsExpanded(): boolean { - return this.footer.state == IonPullUpFooterState.Expanded; - } - - public get IsCollapsed(): boolean { - return this.footer.state == IonPullUpFooterState.Collapsed; - } - - ngOnInit() { - let tabGesture = new Gesture(this.el.nativeElement); - tabGesture.listen(); - tabGesture.on('tap', e => { - this.footer && this.footer.onTap(e); - }); - tabGesture.on('pan panstart panend', e => { - this.footer && this.footer.onDrag(e); - }); - } - -} \ No newline at end of file diff --git a/src/ionic-pullup/ion-pullup.module.ts b/src/ionic-pullup/ion-pullup.module.ts deleted file mode 100644 index 28af041..0000000 --- a/src/ionic-pullup/ion-pullup.module.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; -import { IonicModule } from 'ionic-angular'; - -import {IonPullUpComponent} from './ion-pullup'; -import {IonPullUpTabComponent} from './ion-pullup-tab'; - -@NgModule({ - imports: [ CommonModule, FormsModule, IonicModule ], - declarations: [ - IonPullUpComponent, - IonPullUpTabComponent - ], - exports: [ - IonPullUpComponent, - IonPullUpTabComponent - ], - providers: [], - schemas: [ CUSTOM_ELEMENTS_SCHEMA ] -}) -export class IonPullupModule { } - -export * from './ion-pullup'; -export * from './ion-pullup-tab'; \ No newline at end of file diff --git a/src/ionic-pullup/ion-pullup.ts b/src/ionic-pullup/ion-pullup.ts deleted file mode 100644 index 4e8f507..0000000 --- a/src/ionic-pullup/ion-pullup.ts +++ /dev/null @@ -1,267 +0,0 @@ -/* -ionic-pullup v2 for Ionic/Angular 2 - -Copyright 2016 Ariel Faur (https://github.com/arielfaur) -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -import { Attribute, ChangeDetectionStrategy, Component, Directive, DoCheck, SimpleChange, OnChanges, EventEmitter, ElementRef, Renderer, ViewChild, ContentChild, Output, Input, Injectable, Inject, Optional } from '@angular/core'; -import { Gesture } from 'ionic-angular/gestures/gesture'; -import { Toolbar, Footer } from 'ionic-angular/components/toolbar/toolbar'; -import { Platform } from 'ionic-angular'; - -interface FooterMetadata { - height: number; - posY: number; - lastPosY: number; - defaultHeight?: number; -} - -interface ViewMetadata { - tabs?: Element; - tabsHeight?: number; - hasBottomTabs?: boolean; - header?: Element; - headerHeight?: number; -} - -interface FooterTab { - x?: number; - y?: number; - upperLeftRadius?: number; - upperRightRadius?: number; - backgroundColor?: string; - color?: string; - content?: string; -} - -export enum IonPullUpFooterState { - Collapsed = 0, - Expanded = 1, - Minimized = 2 -} - -export enum IonPullUpFooterBehavior { - Hide, - Expand -} - -@Component({ - selector: 'ion-pullup', - changeDetection: ChangeDetectionStrategy.OnPush, - template: ` - - - - ` -}) -export class IonPullUpComponent { - @Input() state: IonPullUpFooterState; - @Output() stateChange: EventEmitter = new EventEmitter(); - - @Input() initialState: IonPullUpFooterState; // TODO implemment - @Input() defaultBehavior: IonPullUpFooterBehavior; // TODO implemment - @Input() maxHeight: number; - - @Output() onExpand = new EventEmitter(); - @Output() onCollapse = new EventEmitter(); - @Output() onMinimize = new EventEmitter(); - - @ContentChild(Toolbar) childToolbar; - @ViewChild('footer') childFooter; - - protected _footerMeta: FooterMetadata; - protected _currentViewMeta: ViewMetadata; - protected _oldState: IonPullUpFooterState; - - constructor(private platform: Platform, private el: ElementRef, private renderer: Renderer) { - this._footerMeta = { - height: 0, - posY: 0, - lastPosY: 0 - } - this._currentViewMeta = {}; - - // sets initial state - this.initialState = this.initialState || IonPullUpFooterState.Collapsed; - this.defaultBehavior = this.defaultBehavior || IonPullUpFooterBehavior.Expand; - this.maxHeight = this.maxHeight || 0; - } - - ngOnInit() { - console.debug('ionic-pullup => Initializing footer...'); - - window.addEventListener("orientationchange", () => { - console.debug('ionic-pullup => Changed orientation => updating'); - this.updateUI(); - }); - this.platform.resume.subscribe(() => { - console.debug('ionic-pullup => Resumed from background => updating'); - this.updateUI(); - }); - } - - ngAfterContentInit() { - this.computeDefaults(); - - let barGesture = new Gesture(this.childToolbar.getNativeElement()); - barGesture.listen(); - barGesture.on('tap', e => { - this.onTap(e); - }); - barGesture.on('pan panstart panend', e => { - this.onDrag(e); - }); - - this.state = IonPullUpFooterState.Collapsed; - - this.updateUI(true); // need to indicate whether it's first run to avoid emitting events twice due to change detection - - } - - public get expandedHeight() : number { - return window.innerHeight - this._currentViewMeta.headerHeight; - } - - computeDefaults() { - this._footerMeta.defaultHeight = this.childFooter.nativeElement.offsetHeight; - - - // TODO: still need to test with tabs template (not convinced it is a valid use case...) - this._currentViewMeta.tabs = this.el.nativeElement.closest('ion-tabs'); - this._currentViewMeta.tabsHeight = this._currentViewMeta.tabs ? ( this._currentViewMeta.tabs.querySelector('.tabbar')).offsetHeight : 0 - console.debug (this._currentViewMeta.tabsHeight ? 'ionic-pullup => Tabs detected' : 'ionic.pullup => View has no tabs'); - //this._currentViewMeta.hasBottomTabs = this._currentViewMeta.tabs && this._currentViewMeta.tabs.classList.contains('tabs-bottom'); - - - this._currentViewMeta.header = document.querySelector('ion-navbar.toolbar'); - this._currentViewMeta.headerHeight = this._currentViewMeta.header ? (this._currentViewMeta.header).offsetHeight : 0; - } - - computeHeights(isInit: boolean = false) { - this._footerMeta.height = this.maxHeight > 0 ? this.maxHeight : this.expandedHeight; - - this.renderer.setElementStyle(this.childFooter.nativeElement, 'height', this._footerMeta.height + 'px'); - - // TODO: implement minimize mode - //this.renderer.setElementStyle(this.el.nativeElement, 'min-height', this._footerMeta.height + 'px'); - //if (this.initialState == IonPullUpFooterState.Minimized) { - // this.minimize() - //} else { - this.collapse(isInit); - //} - } - - updateUI(isInit: boolean = false) { - setTimeout(() => { - this.computeHeights(isInit); - }, 300); - this.renderer.setElementStyle(this.childFooter.nativeElement, 'transition', 'none'); // avoids flickering when changing orientation - } - - expand() { - this._footerMeta.lastPosY = 0; - this.renderer.setElementStyle(this.childFooter.nativeElement, '-webkit-transform', 'translate3d(0, 0, 0)'); - this.renderer.setElementStyle(this.childFooter.nativeElement, 'transform', 'translate3d(0, 0, 0)'); - this.renderer.setElementStyle(this.childFooter.nativeElement, 'transition', '300ms ease-in-out'); - - this.onExpand.emit(null); - } - - collapse(isInit: boolean = false) { - this._footerMeta.lastPosY = this._footerMeta.height - this._footerMeta.defaultHeight - this._currentViewMeta.tabsHeight; - this.renderer.setElementStyle( this.childFooter.nativeElement, '-webkit-transform', 'translate3d(0, ' + this._footerMeta.lastPosY + 'px, 0)'); - this.renderer.setElementStyle( this.childFooter.nativeElement, 'transform', 'translate3d(0, ' + this._footerMeta.lastPosY + 'px, 0)'); - - if (!isInit) this.onCollapse.emit(null); - } - - minimize() { - this._footerMeta.lastPosY = this._footerMeta.height; - this.renderer.setElementStyle(this.childFooter.nativeElement, '-webkit-transform', 'translate3d(0, ' + this._footerMeta.lastPosY + 'px, 0)'); - this.renderer.setElementStyle(this.childFooter.nativeElement, 'transform', 'translate3d(0, ' + this._footerMeta.lastPosY + 'px, 0)'); - - this.onMinimize.emit(null); - } - - - onTap(e: any) { - e.preventDefault(); - - if (this.state == IonPullUpFooterState.Collapsed) { - if (this.defaultBehavior == IonPullUpFooterBehavior.Hide) - this.state = IonPullUpFooterState.Minimized; - else - this.state = IonPullUpFooterState.Expanded; - } else { - if (this.state == IonPullUpFooterState.Minimized) { - if (this.defaultBehavior == IonPullUpFooterBehavior.Hide) - this.state = IonPullUpFooterState.Collapsed; - else - this.state = IonPullUpFooterState.Expanded; - } else { - // footer is expanded - this.state = this.initialState == IonPullUpFooterState.Minimized ? IonPullUpFooterState.Minimized : IonPullUpFooterState.Collapsed; - } - } - } - - - onDrag(e: any) { - e.preventDefault(); - - switch(e.type) { - case 'panstart': - this.renderer.setElementStyle(this.childFooter.nativeElement, 'transition', 'none'); - break; - case 'pan': - this._footerMeta.posY = Math.round(e.deltaY) + this._footerMeta.lastPosY; - if (this._footerMeta.posY < 0 || this._footerMeta.posY > this._footerMeta.height) return; - this.renderer.setElementStyle(this.childFooter.nativeElement, '-webkit-transform', 'translate3d(0, ' + this._footerMeta.posY + 'px, 0)'); - this.renderer.setElementStyle(this.childFooter.nativeElement, 'transform', 'translate3d(0, ' + this._footerMeta.posY + 'px, 0)'); - break; - case 'panend': - this.renderer.setElementStyle(this.childFooter.nativeElement, 'transition', '300ms ease-in-out'); - - if (this._footerMeta.lastPosY > this._footerMeta.posY) { - this.state = IonPullUpFooterState.Expanded; - } - else if (this._footerMeta.lastPosY < this._footerMeta.posY) { - this.state = (this.initialState == IonPullUpFooterState.Minimized) ? IonPullUpFooterState.Minimized : IonPullUpFooterState.Collapsed; - } - - break; - } - } - - ngDoCheck() { - if (!Object.is(this.state, this._oldState)) { - switch (this.state) { - case IonPullUpFooterState.Collapsed: - this.collapse(); - break; - case IonPullUpFooterState.Expanded: - this.expand(); - break; - case IonPullUpFooterState.Minimized: - this.minimize(); - break; - } - this._oldState = this.state; - - // TODO: fix hack due to BUG (https://github.com/angular/angular/issues/6005) - window.setTimeout(() => { - this.stateChange.emit(this.state); - }) - } - } - -} \ No newline at end of file From 07a850eabc9b8ef904355f6e3ce68849eeee3e17 Mon Sep 17 00:00:00 2001 From: Michael Spyratos Date: Tue, 31 Jan 2017 10:40:23 +0000 Subject: [PATCH 2/8] More gitignore rules --- .gitignore | 169 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 168 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index e03cb50..b45f898 100644 --- a/.gitignore +++ b/.gitignore @@ -8,4 +8,171 @@ plugins/ *.swp .DS_Store Thumbs.db -.editorconfig \ No newline at end of file +.editorconfig +/.idea + + +# Created by https://www.gitignore.io/api/osx ,osx,jetbrains,webstorm,node + +### OSX ### +*.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon +# Thumbnails +._* +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + + +### JetBrains ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff: +.idea/workspace.xml +.idea/tasks.xml + +# Sensitive or high-churn files: +.idea/dataSources/ +.idea/dataSources.ids +.idea/dataSources.xml +.idea/dataSources.local.xml +.idea/sqlDataSources.xml +.idea/dynamic.xml +.idea/uiDesigner.xml + +# Gradle: +.idea/gradle.xml +.idea/libraries + +# Mongo Explorer plugin: +.idea/mongoSettings.xml + +## File-based project format: +*.iws + +## Plugin-specific files: + +# IntelliJ +/out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +### JetBrains Patch ### +# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 + +# *.iml +# modules.xml +# .idea/misc.xml +# *.ipr + + +### WebStorm ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff: + +# Sensitive or high-churn files: + +# Gradle: + +# Mongo Explorer plugin: + +## File-based project format: + +## Plugin-specific files: + +# IntelliJ + +# mpeltonen/sbt-idea plugin + +# JIRA plugin + +# Crashlytics plugin (for Android Studio and IntelliJ) + +### WebStorm Patch ### +# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 + +# *.iml +# modules.xml +# .idea/misc.xml +# *.ipr + + +### Node ### +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + + +# End of https://www.gitignore.io/api/osx ,osx,jetbrains,webstorm,node \ No newline at end of file From ceac8c036f0b09caff199b1cfb65a96f4f61c5ae Mon Sep 17 00:00:00 2001 From: Michael Spyratos Date: Tue, 31 Jan 2017 10:40:55 +0000 Subject: [PATCH 3/8] Fixed "content-scroll" to be a class for latest ionic. --- src/ion-pullup.scss | 71 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 src/ion-pullup.scss diff --git a/src/ion-pullup.scss b/src/ion-pullup.scss new file mode 100644 index 0000000..7e544a7 --- /dev/null +++ b/src/ion-pullup.scss @@ -0,0 +1,71 @@ + +$tabWidth: 120px; // tab width +$tabHeight: 22px; // tab height, set to 0px if there is no tab +$tabRadius: 20px; // tab radius +$tabBackground: color($colors, primary, base); // tab background color +$tabIconColor: white; // icon color within tab +$tabShadow: #666; // shadow color + +@mixin pullup-tab($width, $height, $radius, $background: color($colors, primary, base), $foreground: color($colors, primary, contrast)) { + position: relative; + width: $width; + height: $height; + background: $background; + color: $foreground; + border-radius: $radius $radius 0 0; + margin: 0 auto; +} + +@mixin pullup-tab-shadow($shadowColor) { + box-shadow: 0px -2px 2px $shadowColor; +} + +ion-pullup { + background : color($colors, primary, base); + + ion-footer { + &::before { + content: none; + } + + ion-pullup-tab { + z-index: 1000; + display: flex; + justify-content: center; + + @include pullup-tab($tabWidth, $tabHeight, $tabRadius, $tabBackground, $tabIconColor); + @include pullup-tab-shadow($tabShadow); + } + + ion-content { + position:absolute; + + .ios & { + @import 'node_modules/ionic-angular/components/toolbar/toolbar.ios'; + margin-top: calc(#{$toolbar-ios-height} + #{$tabHeight}); + + .scroll-content { + margin-bottom: calc(#{$toolbar-ios-height} + #{$tabHeight}); + } + } + .md & { + @import 'node_modules/ionic-angular/components/toolbar/toolbar.md'; + margin-top: calc(#{$toolbar-md-height} + #{$tabHeight}); + + .scroll-content { + margin-bottom: calc(#{$toolbar-md-height} + #{$tabHeight}); + } + } + } + + ion-toolbar { + @include pullup-tab-shadow($tabShadow); + + .toolbar-background { + .ios & { + border-top: none; + } + } + } + } +} \ No newline at end of file From b400e0204ce1a3908ff0c010541a10fb6866ff2d Mon Sep 17 00:00:00 2001 From: Michael Spyratos Date: Tue, 31 Jan 2017 10:41:31 +0000 Subject: [PATCH 4/8] Updated node module to be able to be included as "ionic-pull". --- index.js | 3 + index.ts | 3 + package.json | 9 +- src/ion-pullup-tab.js | 70 ++++++++++ src/ion-pullup-tab.ts | 51 +++++++ src/ion-pullup.js | 259 +++++++++++++++++++++++++++++++++++ src/ion-pullup.module.js | 37 +++++ src/ion-pullup.module.ts | 40 +++--- src/ion-pullup.ts | 285 +++++++++++++++++++++++++++++++++++++++ tsconfig.json | 20 +-- 10 files changed, 740 insertions(+), 37 deletions(-) create mode 100644 index.js create mode 100644 index.ts create mode 100644 src/ion-pullup-tab.js create mode 100644 src/ion-pullup-tab.ts create mode 100644 src/ion-pullup.js create mode 100644 src/ion-pullup.module.js create mode 100644 src/ion-pullup.ts diff --git a/index.js b/index.js new file mode 100644 index 0000000..2528527 --- /dev/null +++ b/index.js @@ -0,0 +1,3 @@ +export { IonPullUpComponent, IonPullUpFooterState } from './src/ion-pullup'; +export { IonPullUpTabComponent } from './src/ion-pullup-tab'; +export { IonPullUpModule } from './src/ion-pullup.module'; diff --git a/index.ts b/index.ts new file mode 100644 index 0000000..8df7196 --- /dev/null +++ b/index.ts @@ -0,0 +1,3 @@ +export {IonPullUpComponent, IonPullUpFooterState} from './src/ion-pullup'; +export {IonPullUpTabComponent} from './src/ion-pullup-tab'; +export {IonPullUpModule} from './src/ion-pullup.module'; diff --git a/package.json b/package.json index 6f4c687..aec1e5b 100644 --- a/package.json +++ b/package.json @@ -1,4 +1,7 @@ { + "name": "ionic-pullup", + "description": "ionic-pullup for Angular 2 and Ionic 2", + "version": "2.1.0", "dependencies": { "@angular/common": "2.1.1", "@angular/compiler": "2.1.1", @@ -18,9 +21,7 @@ }, "devDependencies": { "@ionic/app-scripts": "0.0.44", + "@types/core-js": "^0.9.35", "typescript": "2.0.6" - }, - "name": "ionic-pullup", - "description": "ionic-pullup for Angular 2 and Ionic 2", - "version": "2.1.0" + } } diff --git a/src/ion-pullup-tab.js b/src/ion-pullup-tab.js new file mode 100644 index 0000000..6405992 --- /dev/null +++ b/src/ion-pullup-tab.js @@ -0,0 +1,70 @@ +/* +ionic-pullup v2 for Ionic/Angular 2 + +Copyright 2016 Ariel Faur (https://github.com/arielfaur) +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +import { Component, ElementRef, Renderer, Input } from '@angular/core'; +import { Gesture } from 'ionic-angular/gestures/gesture'; +import { IonPullUpComponent, IonPullUpFooterState } from './ion-pullup'; +var IonPullUpTabComponent = (function () { + function IonPullUpTabComponent(el, renderer) { + this.el = el; + this.renderer = renderer; + } + Object.defineProperty(IonPullUpTabComponent.prototype, "IsExpanded", { + get: function () { + return this.footer.state == IonPullUpFooterState.Expanded; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(IonPullUpTabComponent.prototype, "IsCollapsed", { + get: function () { + return this.footer.state == IonPullUpFooterState.Collapsed; + }, + enumerable: true, + configurable: true + }); + IonPullUpTabComponent.prototype.ngOnInit = function () { + var _this = this; + var tabGesture = new Gesture(this.el.nativeElement); + tabGesture.listen(); + tabGesture.on('tap', function (e) { + _this.footer && _this.footer.onTap(e); + }); + tabGesture.on('pan panstart panend', function (e) { + _this.footer && _this.footer.onDrag(e); + }); + }; + return IonPullUpTabComponent; +}()); +__decorate([ + Input(), + __metadata("design:type", IonPullUpComponent) +], IonPullUpTabComponent.prototype, "footer", void 0); +IonPullUpTabComponent = __decorate([ + Component({ + selector: 'ion-pullup-tab', + template: '' + }), + __metadata("design:paramtypes", [ElementRef, Renderer]) +], IonPullUpTabComponent); +export { IonPullUpTabComponent }; diff --git a/src/ion-pullup-tab.ts b/src/ion-pullup-tab.ts new file mode 100644 index 0000000..aefd7e3 --- /dev/null +++ b/src/ion-pullup-tab.ts @@ -0,0 +1,51 @@ +/* +ionic-pullup v2 for Ionic/Angular 2 + +Copyright 2016 Ariel Faur (https://github.com/arielfaur) +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import {Attribute, Component, Directive, DoCheck, SimpleChange, OnChanges, EventEmitter, ElementRef, Renderer, ContentChild, Output, Input, Injectable, Inject, Optional, Pipe, PipeTransform} from '@angular/core'; +import {Gesture} from 'ionic-angular/gestures/gesture'; +import {Toolbar} from 'ionic-angular/components/toolbar/toolbar'; +import {IonPullUpComponent, IonPullUpFooterState} from './ion-pullup'; + +@Component({ + selector: 'ion-pullup-tab', + template: '' +}) +export class IonPullUpTabComponent { + @Input() footer: IonPullUpComponent; + + constructor(private el: ElementRef, private renderer: Renderer) { + + } + + public get IsExpanded(): boolean { + return this.footer.state == IonPullUpFooterState.Expanded; + } + + public get IsCollapsed(): boolean { + return this.footer.state == IonPullUpFooterState.Collapsed; + } + + ngOnInit() { + let tabGesture = new Gesture(this.el.nativeElement); + tabGesture.listen(); + tabGesture.on('tap', e => { + this.footer && this.footer.onTap(e); + }); + tabGesture.on('pan panstart panend', e => { + this.footer && this.footer.onDrag(e); + }); + } + +} \ No newline at end of file diff --git a/src/ion-pullup.js b/src/ion-pullup.js new file mode 100644 index 0000000..0ef4c25 --- /dev/null +++ b/src/ion-pullup.js @@ -0,0 +1,259 @@ +/* + ionic-pullup v2 for Ionic/Angular 2 + + Copyright 2016 Ariel Faur (https://github.com/arielfaur) + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +import { ChangeDetectionStrategy, Component, EventEmitter, ElementRef, Renderer, ViewChild, ContentChild, Output, Input } from '@angular/core'; +import { Gesture } from 'ionic-angular/gestures/gesture'; +import { Toolbar } from 'ionic-angular/components/toolbar/toolbar'; +import { Platform } from 'ionic-angular'; +export var IonPullUpFooterState; +(function (IonPullUpFooterState) { + IonPullUpFooterState[IonPullUpFooterState["Collapsed"] = 0] = "Collapsed"; + IonPullUpFooterState[IonPullUpFooterState["Expanded"] = 1] = "Expanded"; + IonPullUpFooterState[IonPullUpFooterState["Minimized"] = 2] = "Minimized"; +})(IonPullUpFooterState || (IonPullUpFooterState = {})); +export var IonPullUpFooterBehavior; +(function (IonPullUpFooterBehavior) { + IonPullUpFooterBehavior[IonPullUpFooterBehavior["Hide"] = 0] = "Hide"; + IonPullUpFooterBehavior[IonPullUpFooterBehavior["Expand"] = 1] = "Expand"; +})(IonPullUpFooterBehavior || (IonPullUpFooterBehavior = {})); +var IonPullUpComponent = (function () { + function IonPullUpComponent(platform, el, renderer) { + this.platform = platform; + this.el = el; + this.renderer = renderer; + this.stateChange = new EventEmitter(); + this.onExpand = new EventEmitter(); + this.onCollapse = new EventEmitter(); + this.onMinimize = new EventEmitter(); + this._footerMeta = { + height: 0, + posY: 0, + lastPosY: 0 + }; + this._currentViewMeta = {}; + // sets initial state + this.initialState = this.initialState || IonPullUpFooterState.Collapsed; + this.defaultBehavior = this.defaultBehavior || IonPullUpFooterBehavior.Expand; + this.maxHeight = this.maxHeight || 0; + } + IonPullUpComponent.prototype.ngOnInit = function () { + var _this = this; + console.debug('ionic-pullup => Initializing footer...'); + window.addEventListener("orientationchange", function () { + console.debug('ionic-pullup => Changed orientation => updating'); + _this.updateUI(); + }); + this.platform.resume.subscribe(function () { + console.debug('ionic-pullup => Resumed from background => updating'); + _this.updateUI(); + }); + }; + IonPullUpComponent.prototype.ngAfterContentInit = function () { + var _this = this; + this.computeDefaults(); + var barGesture = new Gesture(this.childToolbar.getNativeElement()); + barGesture.listen(); + barGesture.on('tap', function (e) { + _this.onTap(e); + }); + barGesture.on('pan panstart panend', function (e) { + _this.onDrag(e); + }); + this.state = IonPullUpFooterState.Collapsed; + this.updateUI(true); // need to indicate whether it's first run to avoid emitting events twice due to change detection + }; + Object.defineProperty(IonPullUpComponent.prototype, "expandedHeight", { + get: function () { + return window.innerHeight - this._currentViewMeta.headerHeight; + }, + enumerable: true, + configurable: true + }); + IonPullUpComponent.prototype.computeDefaults = function () { + this._footerMeta.defaultHeight = this.childFooter.nativeElement.offsetHeight; + // TODO: still need to test with tabs template (not convinced it is a valid use case...) + this._currentViewMeta.tabs = this.el.nativeElement.closest('ion-tabs'); + this._currentViewMeta.tabsHeight = this._currentViewMeta.tabs ? this._currentViewMeta.tabs.querySelector('.tabbar').offsetHeight : 0; + console.debug(this._currentViewMeta.tabsHeight ? 'ionic-pullup => Tabs detected' : 'ionic.pullup => View has no tabs'); + //this._currentViewMeta.hasBottomTabs = this._currentViewMeta.tabs && this._currentViewMeta.tabs.classList.contains('tabs-bottom'); + this._currentViewMeta.header = document.querySelector('ion-navbar.toolbar'); + this._currentViewMeta.headerHeight = this._currentViewMeta.header ? this._currentViewMeta.header.offsetHeight : 0; + }; + IonPullUpComponent.prototype.computeHeights = function (isInit) { + if (isInit === void 0) { isInit = false; } + this._footerMeta.height = this.maxHeight > 0 ? this.maxHeight : this.expandedHeight; + this.renderer.setElementStyle(this.childFooter.nativeElement, 'height', this._footerMeta.height + 'px'); + // TODO: implement minimize mode + //this.renderer.setElementStyle(this.el.nativeElement, 'min-height', this._footerMeta.height + 'px'); + //if (this.initialState == IonPullUpFooterState.Minimized) { + // this.minimize() + //} else { + this.collapse(isInit); + //} + }; + IonPullUpComponent.prototype.updateUI = function (isInit) { + var _this = this; + if (isInit === void 0) { isInit = false; } + setTimeout(function () { + _this.computeHeights(isInit); + }, 300); + this.renderer.setElementStyle(this.childFooter.nativeElement, 'transition', 'none'); // avoids flickering when changing orientation + }; + IonPullUpComponent.prototype.expand = function () { + this._footerMeta.lastPosY = 0; + this.renderer.setElementStyle(this.childFooter.nativeElement, '-webkit-transform', 'translate3d(0, 0, 0)'); + this.renderer.setElementStyle(this.childFooter.nativeElement, 'transform', 'translate3d(0, 0, 0)'); + this.renderer.setElementStyle(this.childFooter.nativeElement, 'transition', '300ms ease-in-out'); + this.onExpand.emit(null); + }; + IonPullUpComponent.prototype.collapse = function (isInit) { + if (isInit === void 0) { isInit = false; } + this._footerMeta.lastPosY = this._footerMeta.height - this._footerMeta.defaultHeight - this._currentViewMeta.tabsHeight; + this.renderer.setElementStyle(this.childFooter.nativeElement, '-webkit-transform', 'translate3d(0, ' + this._footerMeta.lastPosY + 'px, 0)'); + this.renderer.setElementStyle(this.childFooter.nativeElement, 'transform', 'translate3d(0, ' + this._footerMeta.lastPosY + 'px, 0)'); + if (!isInit) + this.onCollapse.emit(null); + }; + IonPullUpComponent.prototype.minimize = function () { + this._footerMeta.lastPosY = this._footerMeta.height; + this.renderer.setElementStyle(this.childFooter.nativeElement, '-webkit-transform', 'translate3d(0, ' + this._footerMeta.lastPosY + 'px, 0)'); + this.renderer.setElementStyle(this.childFooter.nativeElement, 'transform', 'translate3d(0, ' + this._footerMeta.lastPosY + 'px, 0)'); + this.onMinimize.emit(null); + }; + IonPullUpComponent.prototype.onTap = function (e) { + e.preventDefault(); + if (this.state == IonPullUpFooterState.Collapsed) { + if (this.defaultBehavior == IonPullUpFooterBehavior.Hide) + this.state = IonPullUpFooterState.Minimized; + else + this.state = IonPullUpFooterState.Expanded; + } + else { + if (this.state == IonPullUpFooterState.Minimized) { + if (this.defaultBehavior == IonPullUpFooterBehavior.Hide) + this.state = IonPullUpFooterState.Collapsed; + else + this.state = IonPullUpFooterState.Expanded; + } + else { + // footer is expanded + this.state = this.initialState == IonPullUpFooterState.Minimized ? IonPullUpFooterState.Minimized : IonPullUpFooterState.Collapsed; + } + } + }; + IonPullUpComponent.prototype.onDrag = function (e) { + e.preventDefault(); + switch (e.type) { + case 'panstart': + this.renderer.setElementStyle(this.childFooter.nativeElement, 'transition', 'none'); + break; + case 'pan': + this._footerMeta.posY = Math.round(e.deltaY) + this._footerMeta.lastPosY; + if (this._footerMeta.posY < 0 || this._footerMeta.posY > this._footerMeta.height) + return; + this.renderer.setElementStyle(this.childFooter.nativeElement, '-webkit-transform', 'translate3d(0, ' + this._footerMeta.posY + 'px, 0)'); + this.renderer.setElementStyle(this.childFooter.nativeElement, 'transform', 'translate3d(0, ' + this._footerMeta.posY + 'px, 0)'); + break; + case 'panend': + this.renderer.setElementStyle(this.childFooter.nativeElement, 'transition', '300ms ease-in-out'); + if (this._footerMeta.lastPosY > this._footerMeta.posY) { + this.state = IonPullUpFooterState.Expanded; + } + else if (this._footerMeta.lastPosY < this._footerMeta.posY) { + this.state = (this.initialState == IonPullUpFooterState.Minimized) ? IonPullUpFooterState.Minimized : IonPullUpFooterState.Collapsed; + } + break; + } + }; + IonPullUpComponent.prototype.ngDoCheck = function () { + var _this = this; + if (!Object.is(this.state, this._oldState)) { + switch (this.state) { + case IonPullUpFooterState.Collapsed: + this.collapse(); + break; + case IonPullUpFooterState.Expanded: + this.expand(); + break; + case IonPullUpFooterState.Minimized: + this.minimize(); + break; + } + this._oldState = this.state; + // TODO: fix hack due to BUG (https://github.com/angular/angular/issues/6005) + window.setTimeout(function () { + _this.stateChange.emit(_this.state); + }); + } + }; + return IonPullUpComponent; +}()); +__decorate([ + Input(), + __metadata("design:type", Number) +], IonPullUpComponent.prototype, "state", void 0); +__decorate([ + Output(), + __metadata("design:type", EventEmitter) +], IonPullUpComponent.prototype, "stateChange", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], IonPullUpComponent.prototype, "initialState", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], IonPullUpComponent.prototype, "defaultBehavior", void 0); +__decorate([ + Input(), + __metadata("design:type", Number) +], IonPullUpComponent.prototype, "maxHeight", void 0); +__decorate([ + Output(), + __metadata("design:type", Object) +], IonPullUpComponent.prototype, "onExpand", void 0); +__decorate([ + Output(), + __metadata("design:type", Object) +], IonPullUpComponent.prototype, "onCollapse", void 0); +__decorate([ + Output(), + __metadata("design:type", Object) +], IonPullUpComponent.prototype, "onMinimize", void 0); +__decorate([ + ContentChild(Toolbar), + __metadata("design:type", Object) +], IonPullUpComponent.prototype, "childToolbar", void 0); +__decorate([ + ViewChild('footer'), + __metadata("design:type", Object) +], IonPullUpComponent.prototype, "childFooter", void 0); +IonPullUpComponent = __decorate([ + Component({ + selector: 'ion-pullup', + changeDetection: ChangeDetectionStrategy.OnPush, + template: "\n \n \n \n " + }), + __metadata("design:paramtypes", [Platform, ElementRef, Renderer]) +], IonPullUpComponent); +export { IonPullUpComponent }; diff --git a/src/ion-pullup.module.js b/src/ion-pullup.module.js new file mode 100644 index 0000000..007609f --- /dev/null +++ b/src/ion-pullup.module.js @@ -0,0 +1,37 @@ +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; +import { IonicModule } from 'ionic-angular'; +import { IonPullUpComponent } from './ion-pullup'; +import { IonPullUpTabComponent } from './ion-pullup-tab'; +var IonPullUpModule = (function () { + function IonPullUpModule() { + } + return IonPullUpModule; +}()); +IonPullUpModule = __decorate([ + NgModule({ + imports: [ + CommonModule, + FormsModule, + IonicModule + ], + declarations: [ + IonPullUpComponent, + IonPullUpTabComponent + ], + exports: [ + IonPullUpComponent, + IonPullUpTabComponent + ], + providers: [], + schemas: [CUSTOM_ELEMENTS_SCHEMA] + }) +], IonPullUpModule); +export { IonPullUpModule }; diff --git a/src/ion-pullup.module.ts b/src/ion-pullup.module.ts index 28af041..072c2f9 100644 --- a/src/ion-pullup.module.ts +++ b/src/ion-pullup.module.ts @@ -1,25 +1,27 @@ -import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; -import { IonicModule } from 'ionic-angular'; +import {NgModule, CUSTOM_ELEMENTS_SCHEMA} from '@angular/core'; +import {CommonModule} from '@angular/common'; +import {FormsModule} from '@angular/forms'; +import {IonicModule} from 'ionic-angular'; import {IonPullUpComponent} from './ion-pullup'; import {IonPullUpTabComponent} from './ion-pullup-tab'; @NgModule({ - imports: [ CommonModule, FormsModule, IonicModule ], - declarations: [ - IonPullUpComponent, - IonPullUpTabComponent - ], - exports: [ - IonPullUpComponent, - IonPullUpTabComponent - ], - providers: [], - schemas: [ CUSTOM_ELEMENTS_SCHEMA ] + imports: [ + CommonModule, + FormsModule, + IonicModule + ], + declarations: [ + IonPullUpComponent, + IonPullUpTabComponent + ], + exports: [ + IonPullUpComponent, + IonPullUpTabComponent + ], + providers: [], + schemas: [CUSTOM_ELEMENTS_SCHEMA] }) -export class IonPullupModule { } - -export * from './ion-pullup'; -export * from './ion-pullup-tab'; \ No newline at end of file +export class IonPullUpModule { +} \ No newline at end of file diff --git a/src/ion-pullup.ts b/src/ion-pullup.ts new file mode 100644 index 0000000..16a46a3 --- /dev/null +++ b/src/ion-pullup.ts @@ -0,0 +1,285 @@ +/* + ionic-pullup v2 for Ionic/Angular 2 + + Copyright 2016 Ariel Faur (https://github.com/arielfaur) + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +import { + Attribute, + ChangeDetectionStrategy, + Component, + Directive, + DoCheck, + SimpleChange, + OnChanges, + EventEmitter, + ElementRef, + Renderer, + ViewChild, + ContentChild, + Output, + Input, + Injectable, + Inject, + Optional +} from '@angular/core'; +import {Gesture} from 'ionic-angular/gestures/gesture'; +import {Toolbar, Footer} from 'ionic-angular/components/toolbar/toolbar'; +import {Platform} from 'ionic-angular'; + +interface FooterMetadata { + height: number; + posY: number; + lastPosY: number; + defaultHeight?: number; +} + +interface ViewMetadata { + tabs?: Element; + tabsHeight?: number; + hasBottomTabs?: boolean; + header?: Element; + headerHeight?: number; +} + +interface FooterTab { + x?: number; + y?: number; + upperLeftRadius?: number; + upperRightRadius?: number; + backgroundColor?: string; + color?: string; + content?: string; +} + +export enum IonPullUpFooterState { + Collapsed = 0, + Expanded = 1, + Minimized = 2 +} + +export enum IonPullUpFooterBehavior { + Hide, + Expand +} + +@Component({ + selector: 'ion-pullup', + changeDetection: ChangeDetectionStrategy.OnPush, + template: ` + + + + ` +}) +export class IonPullUpComponent { + @Input() state: IonPullUpFooterState; + @Output() stateChange: EventEmitter = new EventEmitter(); + + @Input() initialState: IonPullUpFooterState; // TODO implemment + @Input() defaultBehavior: IonPullUpFooterBehavior; // TODO implemment + @Input() maxHeight: number; + + @Output() onExpand = new EventEmitter(); + @Output() onCollapse = new EventEmitter(); + @Output() onMinimize = new EventEmitter(); + + @ContentChild(Toolbar) childToolbar; + @ViewChild('footer') childFooter; + + protected _footerMeta: FooterMetadata; + protected _currentViewMeta: ViewMetadata; + protected _oldState: IonPullUpFooterState; + + constructor(private platform: Platform, private el: ElementRef, private renderer: Renderer) { + this._footerMeta = { + height: 0, + posY: 0, + lastPosY: 0 + } + this._currentViewMeta = {}; + + // sets initial state + this.initialState = this.initialState || IonPullUpFooterState.Collapsed; + this.defaultBehavior = this.defaultBehavior || IonPullUpFooterBehavior.Expand; + this.maxHeight = this.maxHeight || 0; + } + + ngOnInit() { + console.debug('ionic-pullup => Initializing footer...'); + + window.addEventListener("orientationchange", () => { + console.debug('ionic-pullup => Changed orientation => updating'); + this.updateUI(); + }); + this.platform.resume.subscribe(() => { + console.debug('ionic-pullup => Resumed from background => updating'); + this.updateUI(); + }); + } + + ngAfterContentInit() { + this.computeDefaults(); + + let barGesture = new Gesture(this.childToolbar.getNativeElement()); + barGesture.listen(); + barGesture.on('tap', e => { + this.onTap(e); + }); + barGesture.on('pan panstart panend', e => { + this.onDrag(e); + }); + + this.state = IonPullUpFooterState.Collapsed; + + this.updateUI(true); // need to indicate whether it's first run to avoid emitting events twice due to change detection + + } + + public get expandedHeight(): number { + return window.innerHeight - this._currentViewMeta.headerHeight; + } + + computeDefaults() { + this._footerMeta.defaultHeight = this.childFooter.nativeElement.offsetHeight; + + + // TODO: still need to test with tabs template (not convinced it is a valid use case...) + this._currentViewMeta.tabs = this.el.nativeElement.closest('ion-tabs'); + this._currentViewMeta.tabsHeight = this._currentViewMeta.tabs ? ( this._currentViewMeta.tabs.querySelector('.tabbar')).offsetHeight : 0 + console.debug(this._currentViewMeta.tabsHeight ? 'ionic-pullup => Tabs detected' : 'ionic.pullup => View has no tabs'); + //this._currentViewMeta.hasBottomTabs = this._currentViewMeta.tabs && this._currentViewMeta.tabs.classList.contains('tabs-bottom'); + + + this._currentViewMeta.header = document.querySelector('ion-navbar.toolbar'); + this._currentViewMeta.headerHeight = this._currentViewMeta.header ? (this._currentViewMeta.header).offsetHeight : 0; + } + + computeHeights(isInit: boolean = false) { + this._footerMeta.height = this.maxHeight > 0 ? this.maxHeight : this.expandedHeight; + + this.renderer.setElementStyle(this.childFooter.nativeElement, 'height', this._footerMeta.height + 'px'); + + // TODO: implement minimize mode + //this.renderer.setElementStyle(this.el.nativeElement, 'min-height', this._footerMeta.height + 'px'); + //if (this.initialState == IonPullUpFooterState.Minimized) { + // this.minimize() + //} else { + this.collapse(isInit); + //} + } + + updateUI(isInit: boolean = false) { + setTimeout(() => { + this.computeHeights(isInit); + }, 300); + this.renderer.setElementStyle(this.childFooter.nativeElement, 'transition', 'none'); // avoids flickering when changing orientation + } + + expand() { + this._footerMeta.lastPosY = 0; + this.renderer.setElementStyle(this.childFooter.nativeElement, '-webkit-transform', 'translate3d(0, 0, 0)'); + this.renderer.setElementStyle(this.childFooter.nativeElement, 'transform', 'translate3d(0, 0, 0)'); + this.renderer.setElementStyle(this.childFooter.nativeElement, 'transition', '300ms ease-in-out'); + + this.onExpand.emit(null); + } + + collapse(isInit: boolean = false) { + this._footerMeta.lastPosY = this._footerMeta.height - this._footerMeta.defaultHeight - this._currentViewMeta.tabsHeight; + this.renderer.setElementStyle(this.childFooter.nativeElement, '-webkit-transform', 'translate3d(0, ' + this._footerMeta.lastPosY + 'px, 0)'); + this.renderer.setElementStyle(this.childFooter.nativeElement, 'transform', 'translate3d(0, ' + this._footerMeta.lastPosY + 'px, 0)'); + + if (!isInit) this.onCollapse.emit(null); + } + + minimize() { + this._footerMeta.lastPosY = this._footerMeta.height; + this.renderer.setElementStyle(this.childFooter.nativeElement, '-webkit-transform', 'translate3d(0, ' + this._footerMeta.lastPosY + 'px, 0)'); + this.renderer.setElementStyle(this.childFooter.nativeElement, 'transform', 'translate3d(0, ' + this._footerMeta.lastPosY + 'px, 0)'); + + this.onMinimize.emit(null); + } + + + onTap(e: any) { + e.preventDefault(); + + if (this.state == IonPullUpFooterState.Collapsed) { + if (this.defaultBehavior == IonPullUpFooterBehavior.Hide) + this.state = IonPullUpFooterState.Minimized; + else + this.state = IonPullUpFooterState.Expanded; + } else { + if (this.state == IonPullUpFooterState.Minimized) { + if (this.defaultBehavior == IonPullUpFooterBehavior.Hide) + this.state = IonPullUpFooterState.Collapsed; + else + this.state = IonPullUpFooterState.Expanded; + } else { + // footer is expanded + this.state = this.initialState == IonPullUpFooterState.Minimized ? IonPullUpFooterState.Minimized : IonPullUpFooterState.Collapsed; + } + } + } + + + onDrag(e: any) { + e.preventDefault(); + + switch (e.type) { + case 'panstart': + this.renderer.setElementStyle(this.childFooter.nativeElement, 'transition', 'none'); + break; + case 'pan': + this._footerMeta.posY = Math.round(e.deltaY) + this._footerMeta.lastPosY; + if (this._footerMeta.posY < 0 || this._footerMeta.posY > this._footerMeta.height) return; + this.renderer.setElementStyle(this.childFooter.nativeElement, '-webkit-transform', 'translate3d(0, ' + this._footerMeta.posY + 'px, 0)'); + this.renderer.setElementStyle(this.childFooter.nativeElement, 'transform', 'translate3d(0, ' + this._footerMeta.posY + 'px, 0)'); + break; + case 'panend': + this.renderer.setElementStyle(this.childFooter.nativeElement, 'transition', '300ms ease-in-out'); + + if (this._footerMeta.lastPosY > this._footerMeta.posY) { + this.state = IonPullUpFooterState.Expanded; + } + else if (this._footerMeta.lastPosY < this._footerMeta.posY) { + this.state = (this.initialState == IonPullUpFooterState.Minimized) ? IonPullUpFooterState.Minimized : IonPullUpFooterState.Collapsed; + } + + break; + } + } + + ngDoCheck() { + if (!Object.is(this.state, this._oldState)) { + switch (this.state) { + case IonPullUpFooterState.Collapsed: + this.collapse(); + break; + case IonPullUpFooterState.Expanded: + this.expand(); + break; + case IonPullUpFooterState.Minimized: + this.minimize(); + break; + } + this._oldState = this.state; + + // TODO: fix hack due to BUG (https://github.com/angular/angular/issues/6005) + window.setTimeout(() => { + this.stateChange.emit(this.state); + }) + } + } + +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index 260bda1..3a47c85 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,21 +1,13 @@ { "compilerOptions": { "target": "es5", - "module": "commonjs", + "module": "es2015", + "moduleResolution": "node", + "sourceMap": true, "emitDecoratorMetadata": true, "experimentalDecorators": true }, - "filesGlob": [ - "**/*.ts", - "!node_modules/**/*" - ], - "exclude": [ - "node_modules", - "typings/global", - "typings/global.d.ts" - ], - "compileOnSave": false, - "atom": { - "rewriteTsconfig": false - } + "files": [ + "index.ts" + ] } From d85365f54e2c634e1e355c6a211cfcf08d6e7403 Mon Sep 17 00:00:00 2001 From: Michael Spyratos Date: Wed, 1 Feb 2017 13:15:13 +0000 Subject: [PATCH 5/8] Included compiled map files --- index.js.map | 1 + src/ion-pullup-tab.js.map | 1 + src/ion-pullup.js.map | 1 + src/ion-pullup.module.js.map | 1 + 4 files changed, 4 insertions(+) create mode 100644 index.js.map create mode 100644 src/ion-pullup-tab.js.map create mode 100644 src/ion-pullup.js.map create mode 100644 src/ion-pullup.module.js.map diff --git a/index.js.map b/index.js.map new file mode 100644 index 0000000..520ccb9 --- /dev/null +++ b/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,kBAAkB,EAAE,oBAAoB,EAAC,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAC,qBAAqB,EAAC,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAC,eAAe,EAAC,MAAM,yBAAyB,CAAC"} \ No newline at end of file diff --git a/src/ion-pullup-tab.js.map b/src/ion-pullup-tab.js.map new file mode 100644 index 0000000..2d1380e --- /dev/null +++ b/src/ion-pullup-tab.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ion-pullup-tab.js","sourceRoot":"","sources":["ion-pullup-tab.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;EAaE;;;;;;;;;;AAEF,OAAO,EAAY,SAAS,EAA6D,UAAU,EAAE,QAAQ,EAAwB,KAAK,EAAoD,MAAM,eAAe,CAAC;AACpN,OAAO,EAAC,OAAO,EAAC,MAAM,gCAAgC,CAAC;AAEvD,OAAO,EAAC,kBAAkB,EAAE,oBAAoB,EAAC,MAAM,cAAc,CAAC;AAMtE,IAAa,qBAAqB;IAGhC,+BAAoB,EAAc,EAAU,QAAkB;QAA1C,OAAE,GAAF,EAAE,CAAY;QAAU,aAAQ,GAAR,QAAQ,CAAU;IAE9D,CAAC;IAED,sBAAW,6CAAU;aAArB;YACE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,oBAAoB,CAAC,QAAQ,CAAC;QAC5D,CAAC;;;OAAA;IAED,sBAAW,8CAAW;aAAtB;YACE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,oBAAoB,CAAC,SAAS,CAAC;QAC7D,CAAC;;;OAAA;IAED,wCAAQ,GAAR;QAAA,iBASC;QARC,IAAI,UAAU,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;QACpD,UAAU,CAAC,MAAM,EAAE,CAAC;QACpB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,UAAA,CAAC;YACpB,KAAI,CAAC,MAAM,IAAI,KAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QACH,UAAU,CAAC,EAAE,CAAC,qBAAqB,EAAE,UAAA,CAAC;YACpC,KAAI,CAAC,MAAM,IAAI,KAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC;IAEH,4BAAC;AAAD,CAAC,AA1BD,IA0BC;AAzBU;IAAR,KAAK,EAAE;8BAAS,kBAAkB;qDAAC;AADzB,qBAAqB;IAJjC,SAAS,CAAC;QACP,QAAQ,EAAE,gBAAgB;QAC1B,QAAQ,EAAE,2BAA2B;KACxC,CAAC;qCAIwB,UAAU,EAAoB,QAAQ;GAHnD,qBAAqB,CA0BjC;SA1BY,qBAAqB"} \ No newline at end of file diff --git a/src/ion-pullup.js.map b/src/ion-pullup.js.map new file mode 100644 index 0000000..a6ab35c --- /dev/null +++ b/src/ion-pullup.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ion-pullup.js","sourceRoot":"","sources":["ion-pullup.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/ion-pullup.module.js.map b/src/ion-pullup.module.js.map new file mode 100644 index 0000000..baa2efd --- /dev/null +++ b/src/ion-pullup.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ion-pullup.module.js","sourceRoot":"","sources":["ion-pullup.module.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAC,QAAQ,EAAE,sBAAsB,EAAC,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAC,kBAAkB,EAAC,MAAM,cAAc,CAAC;AAChD,OAAO,EAAC,qBAAqB,EAAC,MAAM,kBAAkB,CAAC;AAmBvD,IAAa,eAAe;IAA5B;IACA,CAAC;IAAD,sBAAC;AAAD,CAAC,AADD,IACC;AADY,eAAe;IAjB3B,QAAQ,CAAC;QACN,OAAO,EAAE;YACL,YAAY;YACZ,WAAW;YACX,WAAW;SACd;QACD,YAAY,EAAE;YACV,kBAAkB;YAClB,qBAAqB;SACxB;QACD,OAAO,EAAE;YACL,kBAAkB;YAClB,qBAAqB;SACxB;QACD,SAAS,EAAE,EAAE;QACb,OAAO,EAAE,CAAC,sBAAsB,CAAC;KACpC,CAAC;GACW,eAAe,CAC3B;SADY,eAAe"} \ No newline at end of file From 648cd8bfb4a5c9c0fabd938e9f251e7454a7586b Mon Sep 17 00:00:00 2001 From: Michael Spyratos Date: Wed, 1 Feb 2017 15:07:28 +0000 Subject: [PATCH 6/8] Updated compiled files --- demo/ionic-pullup/index.d.ts | 3 + demo/ionic-pullup/index.js.map | 2 +- demo/ionic-pullup/ion-pullup-tab.ts | 51 ++++ demo/ionic-pullup/ion-pullup.module.ts | 27 ++ demo/ionic-pullup/ion-pullup.scss | 71 +++++ demo/ionic-pullup/ion-pullup.ts | 285 ++++++++++++++++++ demo/ionic-pullup/package.json | 61 ++-- demo/ionic-pullup/src/ion-pullup-tab.js | 25 +- demo/ionic-pullup/src/ion-pullup-tab.js.map | 2 +- demo/ionic-pullup/src/ion-pullup.js | 101 ++++--- demo/ionic-pullup/src/ion-pullup.js.map | 2 +- demo/ionic-pullup/src/ion-pullup.module.js | 45 +-- .../ionic-pullup/src/ion-pullup.module.js.map | 2 +- demo/ionic-pullup/src/ion-pullup.scss | 10 +- demo/ionic-pullup/typings.json | 7 - index.d.ts | 3 + index.js | 1 + index.js.map | 2 +- src/ion-pullup-tab.js | 26 +- src/ion-pullup-tab.js.map | 2 +- src/ion-pullup.js | 102 ++++--- src/ion-pullup.js.map | 2 +- src/ion-pullup.module.js | 46 +-- src/ion-pullup.module.js.map | 2 +- 24 files changed, 667 insertions(+), 213 deletions(-) create mode 100644 demo/ionic-pullup/index.d.ts create mode 100644 demo/ionic-pullup/ion-pullup-tab.ts create mode 100644 demo/ionic-pullup/ion-pullup.module.ts create mode 100644 demo/ionic-pullup/ion-pullup.scss create mode 100644 demo/ionic-pullup/ion-pullup.ts delete mode 100644 demo/ionic-pullup/typings.json create mode 100644 index.d.ts diff --git a/demo/ionic-pullup/index.d.ts b/demo/ionic-pullup/index.d.ts new file mode 100644 index 0000000..8df7196 --- /dev/null +++ b/demo/ionic-pullup/index.d.ts @@ -0,0 +1,3 @@ +export {IonPullUpComponent, IonPullUpFooterState} from './src/ion-pullup'; +export {IonPullUpTabComponent} from './src/ion-pullup-tab'; +export {IonPullUpModule} from './src/ion-pullup.module'; diff --git a/demo/ionic-pullup/index.js.map b/demo/ionic-pullup/index.js.map index 520ccb9..002da3d 100644 --- a/demo/ionic-pullup/index.js.map +++ b/demo/ionic-pullup/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,kBAAkB,EAAE,oBAAoB,EAAC,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAC,qBAAqB,EAAC,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAC,eAAe,EAAC,MAAM,yBAAyB,CAAC"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,SAAQ,kBAAkB,EAAE,oBAAoB,QAAO,kBAAkB,CAAC;AAC1E,SAAQ,qBAAqB,QAAO,sBAAsB,CAAC;AAC3D,SAAQ,eAAe,QAAO,yBAAyB,CAAC"} \ No newline at end of file diff --git a/demo/ionic-pullup/ion-pullup-tab.ts b/demo/ionic-pullup/ion-pullup-tab.ts new file mode 100644 index 0000000..aefd7e3 --- /dev/null +++ b/demo/ionic-pullup/ion-pullup-tab.ts @@ -0,0 +1,51 @@ +/* +ionic-pullup v2 for Ionic/Angular 2 + +Copyright 2016 Ariel Faur (https://github.com/arielfaur) +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import {Attribute, Component, Directive, DoCheck, SimpleChange, OnChanges, EventEmitter, ElementRef, Renderer, ContentChild, Output, Input, Injectable, Inject, Optional, Pipe, PipeTransform} from '@angular/core'; +import {Gesture} from 'ionic-angular/gestures/gesture'; +import {Toolbar} from 'ionic-angular/components/toolbar/toolbar'; +import {IonPullUpComponent, IonPullUpFooterState} from './ion-pullup'; + +@Component({ + selector: 'ion-pullup-tab', + template: '' +}) +export class IonPullUpTabComponent { + @Input() footer: IonPullUpComponent; + + constructor(private el: ElementRef, private renderer: Renderer) { + + } + + public get IsExpanded(): boolean { + return this.footer.state == IonPullUpFooterState.Expanded; + } + + public get IsCollapsed(): boolean { + return this.footer.state == IonPullUpFooterState.Collapsed; + } + + ngOnInit() { + let tabGesture = new Gesture(this.el.nativeElement); + tabGesture.listen(); + tabGesture.on('tap', e => { + this.footer && this.footer.onTap(e); + }); + tabGesture.on('pan panstart panend', e => { + this.footer && this.footer.onDrag(e); + }); + } + +} \ No newline at end of file diff --git a/demo/ionic-pullup/ion-pullup.module.ts b/demo/ionic-pullup/ion-pullup.module.ts new file mode 100644 index 0000000..072c2f9 --- /dev/null +++ b/demo/ionic-pullup/ion-pullup.module.ts @@ -0,0 +1,27 @@ +import {NgModule, CUSTOM_ELEMENTS_SCHEMA} from '@angular/core'; +import {CommonModule} from '@angular/common'; +import {FormsModule} from '@angular/forms'; +import {IonicModule} from 'ionic-angular'; + +import {IonPullUpComponent} from './ion-pullup'; +import {IonPullUpTabComponent} from './ion-pullup-tab'; + +@NgModule({ + imports: [ + CommonModule, + FormsModule, + IonicModule + ], + declarations: [ + IonPullUpComponent, + IonPullUpTabComponent + ], + exports: [ + IonPullUpComponent, + IonPullUpTabComponent + ], + providers: [], + schemas: [CUSTOM_ELEMENTS_SCHEMA] +}) +export class IonPullUpModule { +} \ No newline at end of file diff --git a/demo/ionic-pullup/ion-pullup.scss b/demo/ionic-pullup/ion-pullup.scss new file mode 100644 index 0000000..7e544a7 --- /dev/null +++ b/demo/ionic-pullup/ion-pullup.scss @@ -0,0 +1,71 @@ + +$tabWidth: 120px; // tab width +$tabHeight: 22px; // tab height, set to 0px if there is no tab +$tabRadius: 20px; // tab radius +$tabBackground: color($colors, primary, base); // tab background color +$tabIconColor: white; // icon color within tab +$tabShadow: #666; // shadow color + +@mixin pullup-tab($width, $height, $radius, $background: color($colors, primary, base), $foreground: color($colors, primary, contrast)) { + position: relative; + width: $width; + height: $height; + background: $background; + color: $foreground; + border-radius: $radius $radius 0 0; + margin: 0 auto; +} + +@mixin pullup-tab-shadow($shadowColor) { + box-shadow: 0px -2px 2px $shadowColor; +} + +ion-pullup { + background : color($colors, primary, base); + + ion-footer { + &::before { + content: none; + } + + ion-pullup-tab { + z-index: 1000; + display: flex; + justify-content: center; + + @include pullup-tab($tabWidth, $tabHeight, $tabRadius, $tabBackground, $tabIconColor); + @include pullup-tab-shadow($tabShadow); + } + + ion-content { + position:absolute; + + .ios & { + @import 'node_modules/ionic-angular/components/toolbar/toolbar.ios'; + margin-top: calc(#{$toolbar-ios-height} + #{$tabHeight}); + + .scroll-content { + margin-bottom: calc(#{$toolbar-ios-height} + #{$tabHeight}); + } + } + .md & { + @import 'node_modules/ionic-angular/components/toolbar/toolbar.md'; + margin-top: calc(#{$toolbar-md-height} + #{$tabHeight}); + + .scroll-content { + margin-bottom: calc(#{$toolbar-md-height} + #{$tabHeight}); + } + } + } + + ion-toolbar { + @include pullup-tab-shadow($tabShadow); + + .toolbar-background { + .ios & { + border-top: none; + } + } + } + } +} \ No newline at end of file diff --git a/demo/ionic-pullup/ion-pullup.ts b/demo/ionic-pullup/ion-pullup.ts new file mode 100644 index 0000000..16a46a3 --- /dev/null +++ b/demo/ionic-pullup/ion-pullup.ts @@ -0,0 +1,285 @@ +/* + ionic-pullup v2 for Ionic/Angular 2 + + Copyright 2016 Ariel Faur (https://github.com/arielfaur) + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +import { + Attribute, + ChangeDetectionStrategy, + Component, + Directive, + DoCheck, + SimpleChange, + OnChanges, + EventEmitter, + ElementRef, + Renderer, + ViewChild, + ContentChild, + Output, + Input, + Injectable, + Inject, + Optional +} from '@angular/core'; +import {Gesture} from 'ionic-angular/gestures/gesture'; +import {Toolbar, Footer} from 'ionic-angular/components/toolbar/toolbar'; +import {Platform} from 'ionic-angular'; + +interface FooterMetadata { + height: number; + posY: number; + lastPosY: number; + defaultHeight?: number; +} + +interface ViewMetadata { + tabs?: Element; + tabsHeight?: number; + hasBottomTabs?: boolean; + header?: Element; + headerHeight?: number; +} + +interface FooterTab { + x?: number; + y?: number; + upperLeftRadius?: number; + upperRightRadius?: number; + backgroundColor?: string; + color?: string; + content?: string; +} + +export enum IonPullUpFooterState { + Collapsed = 0, + Expanded = 1, + Minimized = 2 +} + +export enum IonPullUpFooterBehavior { + Hide, + Expand +} + +@Component({ + selector: 'ion-pullup', + changeDetection: ChangeDetectionStrategy.OnPush, + template: ` + + + + ` +}) +export class IonPullUpComponent { + @Input() state: IonPullUpFooterState; + @Output() stateChange: EventEmitter = new EventEmitter(); + + @Input() initialState: IonPullUpFooterState; // TODO implemment + @Input() defaultBehavior: IonPullUpFooterBehavior; // TODO implemment + @Input() maxHeight: number; + + @Output() onExpand = new EventEmitter(); + @Output() onCollapse = new EventEmitter(); + @Output() onMinimize = new EventEmitter(); + + @ContentChild(Toolbar) childToolbar; + @ViewChild('footer') childFooter; + + protected _footerMeta: FooterMetadata; + protected _currentViewMeta: ViewMetadata; + protected _oldState: IonPullUpFooterState; + + constructor(private platform: Platform, private el: ElementRef, private renderer: Renderer) { + this._footerMeta = { + height: 0, + posY: 0, + lastPosY: 0 + } + this._currentViewMeta = {}; + + // sets initial state + this.initialState = this.initialState || IonPullUpFooterState.Collapsed; + this.defaultBehavior = this.defaultBehavior || IonPullUpFooterBehavior.Expand; + this.maxHeight = this.maxHeight || 0; + } + + ngOnInit() { + console.debug('ionic-pullup => Initializing footer...'); + + window.addEventListener("orientationchange", () => { + console.debug('ionic-pullup => Changed orientation => updating'); + this.updateUI(); + }); + this.platform.resume.subscribe(() => { + console.debug('ionic-pullup => Resumed from background => updating'); + this.updateUI(); + }); + } + + ngAfterContentInit() { + this.computeDefaults(); + + let barGesture = new Gesture(this.childToolbar.getNativeElement()); + barGesture.listen(); + barGesture.on('tap', e => { + this.onTap(e); + }); + barGesture.on('pan panstart panend', e => { + this.onDrag(e); + }); + + this.state = IonPullUpFooterState.Collapsed; + + this.updateUI(true); // need to indicate whether it's first run to avoid emitting events twice due to change detection + + } + + public get expandedHeight(): number { + return window.innerHeight - this._currentViewMeta.headerHeight; + } + + computeDefaults() { + this._footerMeta.defaultHeight = this.childFooter.nativeElement.offsetHeight; + + + // TODO: still need to test with tabs template (not convinced it is a valid use case...) + this._currentViewMeta.tabs = this.el.nativeElement.closest('ion-tabs'); + this._currentViewMeta.tabsHeight = this._currentViewMeta.tabs ? ( this._currentViewMeta.tabs.querySelector('.tabbar')).offsetHeight : 0 + console.debug(this._currentViewMeta.tabsHeight ? 'ionic-pullup => Tabs detected' : 'ionic.pullup => View has no tabs'); + //this._currentViewMeta.hasBottomTabs = this._currentViewMeta.tabs && this._currentViewMeta.tabs.classList.contains('tabs-bottom'); + + + this._currentViewMeta.header = document.querySelector('ion-navbar.toolbar'); + this._currentViewMeta.headerHeight = this._currentViewMeta.header ? (this._currentViewMeta.header).offsetHeight : 0; + } + + computeHeights(isInit: boolean = false) { + this._footerMeta.height = this.maxHeight > 0 ? this.maxHeight : this.expandedHeight; + + this.renderer.setElementStyle(this.childFooter.nativeElement, 'height', this._footerMeta.height + 'px'); + + // TODO: implement minimize mode + //this.renderer.setElementStyle(this.el.nativeElement, 'min-height', this._footerMeta.height + 'px'); + //if (this.initialState == IonPullUpFooterState.Minimized) { + // this.minimize() + //} else { + this.collapse(isInit); + //} + } + + updateUI(isInit: boolean = false) { + setTimeout(() => { + this.computeHeights(isInit); + }, 300); + this.renderer.setElementStyle(this.childFooter.nativeElement, 'transition', 'none'); // avoids flickering when changing orientation + } + + expand() { + this._footerMeta.lastPosY = 0; + this.renderer.setElementStyle(this.childFooter.nativeElement, '-webkit-transform', 'translate3d(0, 0, 0)'); + this.renderer.setElementStyle(this.childFooter.nativeElement, 'transform', 'translate3d(0, 0, 0)'); + this.renderer.setElementStyle(this.childFooter.nativeElement, 'transition', '300ms ease-in-out'); + + this.onExpand.emit(null); + } + + collapse(isInit: boolean = false) { + this._footerMeta.lastPosY = this._footerMeta.height - this._footerMeta.defaultHeight - this._currentViewMeta.tabsHeight; + this.renderer.setElementStyle(this.childFooter.nativeElement, '-webkit-transform', 'translate3d(0, ' + this._footerMeta.lastPosY + 'px, 0)'); + this.renderer.setElementStyle(this.childFooter.nativeElement, 'transform', 'translate3d(0, ' + this._footerMeta.lastPosY + 'px, 0)'); + + if (!isInit) this.onCollapse.emit(null); + } + + minimize() { + this._footerMeta.lastPosY = this._footerMeta.height; + this.renderer.setElementStyle(this.childFooter.nativeElement, '-webkit-transform', 'translate3d(0, ' + this._footerMeta.lastPosY + 'px, 0)'); + this.renderer.setElementStyle(this.childFooter.nativeElement, 'transform', 'translate3d(0, ' + this._footerMeta.lastPosY + 'px, 0)'); + + this.onMinimize.emit(null); + } + + + onTap(e: any) { + e.preventDefault(); + + if (this.state == IonPullUpFooterState.Collapsed) { + if (this.defaultBehavior == IonPullUpFooterBehavior.Hide) + this.state = IonPullUpFooterState.Minimized; + else + this.state = IonPullUpFooterState.Expanded; + } else { + if (this.state == IonPullUpFooterState.Minimized) { + if (this.defaultBehavior == IonPullUpFooterBehavior.Hide) + this.state = IonPullUpFooterState.Collapsed; + else + this.state = IonPullUpFooterState.Expanded; + } else { + // footer is expanded + this.state = this.initialState == IonPullUpFooterState.Minimized ? IonPullUpFooterState.Minimized : IonPullUpFooterState.Collapsed; + } + } + } + + + onDrag(e: any) { + e.preventDefault(); + + switch (e.type) { + case 'panstart': + this.renderer.setElementStyle(this.childFooter.nativeElement, 'transition', 'none'); + break; + case 'pan': + this._footerMeta.posY = Math.round(e.deltaY) + this._footerMeta.lastPosY; + if (this._footerMeta.posY < 0 || this._footerMeta.posY > this._footerMeta.height) return; + this.renderer.setElementStyle(this.childFooter.nativeElement, '-webkit-transform', 'translate3d(0, ' + this._footerMeta.posY + 'px, 0)'); + this.renderer.setElementStyle(this.childFooter.nativeElement, 'transform', 'translate3d(0, ' + this._footerMeta.posY + 'px, 0)'); + break; + case 'panend': + this.renderer.setElementStyle(this.childFooter.nativeElement, 'transition', '300ms ease-in-out'); + + if (this._footerMeta.lastPosY > this._footerMeta.posY) { + this.state = IonPullUpFooterState.Expanded; + } + else if (this._footerMeta.lastPosY < this._footerMeta.posY) { + this.state = (this.initialState == IonPullUpFooterState.Minimized) ? IonPullUpFooterState.Minimized : IonPullUpFooterState.Collapsed; + } + + break; + } + } + + ngDoCheck() { + if (!Object.is(this.state, this._oldState)) { + switch (this.state) { + case IonPullUpFooterState.Collapsed: + this.collapse(); + break; + case IonPullUpFooterState.Expanded: + this.expand(); + break; + case IonPullUpFooterState.Minimized: + this.minimize(); + break; + } + this._oldState = this.state; + + // TODO: fix hack due to BUG (https://github.com/angular/angular/issues/6005) + window.setTimeout(() => { + this.stateChange.emit(this.state); + }) + } + } + +} \ No newline at end of file diff --git a/demo/ionic-pullup/package.json b/demo/ionic-pullup/package.json index aec1e5b..db035ff 100644 --- a/demo/ionic-pullup/package.json +++ b/demo/ionic-pullup/package.json @@ -1,27 +1,38 @@ { - "name": "ionic-pullup", - "description": "ionic-pullup for Angular 2 and Ionic 2", - "version": "2.1.0", - "dependencies": { - "@angular/common": "2.1.1", - "@angular/compiler": "2.1.1", - "@angular/compiler-cli": "2.1.1", - "@angular/core": "2.1.1", - "@angular/forms": "2.1.1", - "@angular/http": "2.1.1", - "@angular/platform-browser": "2.1.1", - "@angular/platform-browser-dynamic": "2.1.1", - "@angular/platform-server": "2.1.1", - "@ionic/storage": "1.1.6", - "ionic-angular": "2.0.0-rc.2", - "ionic-native": "2.2.3", - "ionicons": "3.0.0", - "rxjs": "5.0.0-beta.12", - "zone.js": "0.6.21" - }, - "devDependencies": { - "@ionic/app-scripts": "0.0.44", - "@types/core-js": "^0.9.35", - "typescript": "2.0.6" - } + "name": "ionic-pullup", + "description": "ionic-pullup for Angular 2 and Ionic 2", + "version": "2.1.0", + "license": "MIT", + "main": "index.js", + "typings": "index.d.ts", + "repository": { + "type": "git", + "url": "https://github.com/arielfaur/ionic-pullup.git" + }, + "dependencies": { + "@angular/common": "2.1.1", + "@angular/compiler": "2.1.1", + "@angular/compiler-cli": "2.1.1", + "@angular/core": "2.1.1", + "@angular/forms": "2.1.1", + "@angular/http": "2.1.1", + "@angular/platform-browser": "2.1.1", + "@angular/platform-browser-dynamic": "2.1.1", + "@angular/platform-server": "2.1.1", + "@ionic/storage": "1.1.6", + "ionic-angular": "2.0.0-rc.2", + "ionic-native": "2.2.3", + "ionicons": "3.0.0", + "rxjs": "5.0.0-beta.12", + "zone.js": "0.6.21" + }, + "devDependencies": { + "@ionic/app-scripts": "0.0.44", + "@types/core-js": "^0.9.35", + "typescript": "2.0.6" + }, + "scripts": { + "build": "npm install && tsc -p tsconfig.json", + "release": "npm run build && npm publish" + } } diff --git a/demo/ionic-pullup/src/ion-pullup-tab.js b/demo/ionic-pullup/src/ion-pullup-tab.js index 5134d4c..e1ab3d8 100644 --- a/demo/ionic-pullup/src/ion-pullup-tab.js +++ b/demo/ionic-pullup/src/ion-pullup-tab.js @@ -24,7 +24,7 @@ var __metadata = (this && this.__metadata) || function (k, v) { import { Component, ElementRef, Renderer, Input } from '@angular/core'; import { Gesture } from 'ionic-angular/gestures/gesture'; import { IonPullUpComponent, IonPullUpFooterState } from './ion-pullup'; -var IonPullUpTabComponent = (function () { +export var IonPullUpTabComponent = (function () { function IonPullUpTabComponent(el, renderer) { this.el = el; this.renderer = renderer; @@ -54,18 +54,17 @@ var IonPullUpTabComponent = (function () { _this.footer && _this.footer.onDrag(e); }); }; + __decorate([ + Input(), + __metadata('design:type', IonPullUpComponent) + ], IonPullUpTabComponent.prototype, "footer", void 0); + IonPullUpTabComponent = __decorate([ + Component({ + selector: 'ion-pullup-tab', + template: '' + }), + __metadata('design:paramtypes', [ElementRef, Renderer]) + ], IonPullUpTabComponent); return IonPullUpTabComponent; }()); -__decorate([ - Input(), - __metadata("design:type", IonPullUpComponent) -], IonPullUpTabComponent.prototype, "footer", void 0); -IonPullUpTabComponent = __decorate([ - Component({ - selector: 'ion-pullup-tab', - template: '' - }), - __metadata("design:paramtypes", [ElementRef, Renderer]) -], IonPullUpTabComponent); -export { IonPullUpTabComponent }; //# sourceMappingURL=ion-pullup-tab.js.map \ No newline at end of file diff --git a/demo/ionic-pullup/src/ion-pullup-tab.js.map b/demo/ionic-pullup/src/ion-pullup-tab.js.map index 2d1380e..9ad40ef 100644 --- a/demo/ionic-pullup/src/ion-pullup-tab.js.map +++ b/demo/ionic-pullup/src/ion-pullup-tab.js.map @@ -1 +1 @@ -{"version":3,"file":"ion-pullup-tab.js","sourceRoot":"","sources":["ion-pullup-tab.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;EAaE;;;;;;;;;;AAEF,OAAO,EAAY,SAAS,EAA6D,UAAU,EAAE,QAAQ,EAAwB,KAAK,EAAoD,MAAM,eAAe,CAAC;AACpN,OAAO,EAAC,OAAO,EAAC,MAAM,gCAAgC,CAAC;AAEvD,OAAO,EAAC,kBAAkB,EAAE,oBAAoB,EAAC,MAAM,cAAc,CAAC;AAMtE,IAAa,qBAAqB;IAGhC,+BAAoB,EAAc,EAAU,QAAkB;QAA1C,OAAE,GAAF,EAAE,CAAY;QAAU,aAAQ,GAAR,QAAQ,CAAU;IAE9D,CAAC;IAED,sBAAW,6CAAU;aAArB;YACE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,oBAAoB,CAAC,QAAQ,CAAC;QAC5D,CAAC;;;OAAA;IAED,sBAAW,8CAAW;aAAtB;YACE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,oBAAoB,CAAC,SAAS,CAAC;QAC7D,CAAC;;;OAAA;IAED,wCAAQ,GAAR;QAAA,iBASC;QARC,IAAI,UAAU,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;QACpD,UAAU,CAAC,MAAM,EAAE,CAAC;QACpB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,UAAA,CAAC;YACpB,KAAI,CAAC,MAAM,IAAI,KAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QACH,UAAU,CAAC,EAAE,CAAC,qBAAqB,EAAE,UAAA,CAAC;YACpC,KAAI,CAAC,MAAM,IAAI,KAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC;IAEH,4BAAC;AAAD,CAAC,AA1BD,IA0BC;AAzBU;IAAR,KAAK,EAAE;8BAAS,kBAAkB;qDAAC;AADzB,qBAAqB;IAJjC,SAAS,CAAC;QACP,QAAQ,EAAE,gBAAgB;QAC1B,QAAQ,EAAE,2BAA2B;KACxC,CAAC;qCAIwB,UAAU,EAAoB,QAAQ;GAHnD,qBAAqB,CA0BjC;SA1BY,qBAAqB"} \ No newline at end of file +{"version":3,"file":"ion-pullup-tab.js","sourceRoot":"","sources":["ion-pullup-tab.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;EAaE;;;;;;;;;;OAEK,EAAY,SAAS,EAA6D,UAAU,EAAE,QAAQ,EAAwB,KAAK,EAAoD,MAAM,eAAe;OAC5M,EAAC,OAAO,EAAC,MAAM,gCAAgC;OAE/C,EAAC,kBAAkB,EAAE,oBAAoB,EAAC,MAAM,cAAc;AAMrE;IAGE,+BAAoB,EAAc,EAAU,QAAkB;QAA1C,OAAE,GAAF,EAAE,CAAY;QAAU,aAAQ,GAAR,QAAQ,CAAU;IAE9D,CAAC;IAED,sBAAW,6CAAU;aAArB;YACE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,oBAAoB,CAAC,QAAQ,CAAC;QAC5D,CAAC;;;OAAA;IAED,sBAAW,8CAAW;aAAtB;YACE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,oBAAoB,CAAC,SAAS,CAAC;QAC7D,CAAC;;;OAAA;IAED,wCAAQ,GAAR;QAAA,iBASC;QARC,IAAI,UAAU,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;QACpD,UAAU,CAAC,MAAM,EAAE,CAAC;QACpB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,UAAA,CAAC;YACpB,KAAI,CAAC,MAAM,IAAI,KAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QACH,UAAU,CAAC,EAAE,CAAC,qBAAqB,EAAE,UAAA,CAAC;YACpC,KAAI,CAAC,MAAM,IAAI,KAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC;IAvBD;QAAC,KAAK,EAAE;;yDAAA;IALV;QAAC,SAAS,CAAC;YACP,QAAQ,EAAE,gBAAgB;YAC1B,QAAQ,EAAE,2BAA2B;SACxC,CAAC;;6BAAA;IA2BF,4BAAC;AAAD,CAAC,AA1BD,IA0BC"} \ No newline at end of file diff --git a/demo/ionic-pullup/src/ion-pullup.js b/demo/ionic-pullup/src/ion-pullup.js index 71980c8..c471d52 100644 --- a/demo/ionic-pullup/src/ion-pullup.js +++ b/demo/ionic-pullup/src/ion-pullup.js @@ -36,7 +36,7 @@ export var IonPullUpFooterBehavior; IonPullUpFooterBehavior[IonPullUpFooterBehavior["Hide"] = 0] = "Hide"; IonPullUpFooterBehavior[IonPullUpFooterBehavior["Expand"] = 1] = "Expand"; })(IonPullUpFooterBehavior || (IonPullUpFooterBehavior = {})); -var IonPullUpComponent = (function () { +export var IonPullUpComponent = (function () { function IonPullUpComponent(platform, el, renderer) { this.platform = platform; this.el = el; @@ -206,55 +206,56 @@ var IonPullUpComponent = (function () { }); } }; + __decorate([ + Input(), + __metadata('design:type', Number) + ], IonPullUpComponent.prototype, "state", void 0); + __decorate([ + Output(), + __metadata('design:type', EventEmitter) + ], IonPullUpComponent.prototype, "stateChange", void 0); + __decorate([ + Input(), + __metadata('design:type', Number) + ], IonPullUpComponent.prototype, "initialState", void 0); + __decorate([ + // TODO implemment + Input(), + __metadata('design:type', Number) + ], IonPullUpComponent.prototype, "defaultBehavior", void 0); + __decorate([ + // TODO implemment + Input(), + __metadata('design:type', Number) + ], IonPullUpComponent.prototype, "maxHeight", void 0); + __decorate([ + Output(), + __metadata('design:type', Object) + ], IonPullUpComponent.prototype, "onExpand", void 0); + __decorate([ + Output(), + __metadata('design:type', Object) + ], IonPullUpComponent.prototype, "onCollapse", void 0); + __decorate([ + Output(), + __metadata('design:type', Object) + ], IonPullUpComponent.prototype, "onMinimize", void 0); + __decorate([ + ContentChild(Toolbar), + __metadata('design:type', Object) + ], IonPullUpComponent.prototype, "childToolbar", void 0); + __decorate([ + ViewChild('footer'), + __metadata('design:type', Object) + ], IonPullUpComponent.prototype, "childFooter", void 0); + IonPullUpComponent = __decorate([ + Component({ + selector: 'ion-pullup', + changeDetection: ChangeDetectionStrategy.OnPush, + template: "\n \n \n \n " + }), + __metadata('design:paramtypes', [Platform, ElementRef, Renderer]) + ], IonPullUpComponent); return IonPullUpComponent; }()); -__decorate([ - Input(), - __metadata("design:type", Number) -], IonPullUpComponent.prototype, "state", void 0); -__decorate([ - Output(), - __metadata("design:type", EventEmitter) -], IonPullUpComponent.prototype, "stateChange", void 0); -__decorate([ - Input(), - __metadata("design:type", Number) -], IonPullUpComponent.prototype, "initialState", void 0); -__decorate([ - Input(), - __metadata("design:type", Number) -], IonPullUpComponent.prototype, "defaultBehavior", void 0); -__decorate([ - Input(), - __metadata("design:type", Number) -], IonPullUpComponent.prototype, "maxHeight", void 0); -__decorate([ - Output(), - __metadata("design:type", Object) -], IonPullUpComponent.prototype, "onExpand", void 0); -__decorate([ - Output(), - __metadata("design:type", Object) -], IonPullUpComponent.prototype, "onCollapse", void 0); -__decorate([ - Output(), - __metadata("design:type", Object) -], IonPullUpComponent.prototype, "onMinimize", void 0); -__decorate([ - ContentChild(Toolbar), - __metadata("design:type", Object) -], IonPullUpComponent.prototype, "childToolbar", void 0); -__decorate([ - ViewChild('footer'), - __metadata("design:type", Object) -], IonPullUpComponent.prototype, "childFooter", void 0); -IonPullUpComponent = __decorate([ - Component({ - selector: 'ion-pullup', - changeDetection: ChangeDetectionStrategy.OnPush, - template: "\n \n \n \n " - }), - __metadata("design:paramtypes", [Platform, ElementRef, Renderer]) -], IonPullUpComponent); -export { IonPullUpComponent }; //# sourceMappingURL=ion-pullup.js.map \ No newline at end of file diff --git a/demo/ionic-pullup/src/ion-pullup.js.map b/demo/ionic-pullup/src/ion-pullup.js.map index a6ab35c..f64a09b 100644 --- a/demo/ionic-pullup/src/ion-pullup.js.map +++ b/demo/ionic-pullup/src/ion-pullup.js.map @@ -1 +1 @@ -{"version":3,"file":"ion-pullup.js","sourceRoot":"","sources":["ion-pullup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;;;;;;;;;;AAEH,OAAO,EAEH,uBAAuB,EACvB,SAAS,EAKT,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,MAAM,EACN,KAAK,EAIR,MAAM,eAAe,CAAC;AACvB,OAAO,EAAC,OAAO,EAAC,MAAM,gCAAgC,CAAC;AACvD,OAAO,EAAC,OAAO,EAAS,MAAM,0CAA0C,CAAC;AACzE,OAAO,EAAC,QAAQ,EAAC,MAAM,eAAe,CAAC;AA2BvC,MAAM,CAAN,IAAY,oBAIX;AAJD,WAAY,oBAAoB;IAC5B,yEAAa,CAAA;IACb,uEAAY,CAAA;IACZ,yEAAa,CAAA;AACjB,CAAC,EAJW,oBAAoB,KAApB,oBAAoB,QAI/B;AAED,MAAM,CAAN,IAAY,uBAGX;AAHD,WAAY,uBAAuB;IAC/B,qEAAI,CAAA;IACJ,yEAAM,CAAA;AACV,CAAC,EAHW,uBAAuB,KAAvB,uBAAuB,QAGlC;AAWD,IAAa,kBAAkB;IAmB3B,4BAAoB,QAAkB,EAAU,EAAc,EAAU,QAAkB;QAAtE,aAAQ,GAAR,QAAQ,CAAU;QAAU,OAAE,GAAF,EAAE,CAAY;QAAU,aAAQ,GAAR,QAAQ,CAAU;QAjBhF,gBAAW,GAAuC,IAAI,YAAY,EAAwB,CAAC;QAM3F,aAAQ,GAAG,IAAI,YAAY,EAAO,CAAC;QACnC,eAAU,GAAG,IAAI,YAAY,EAAO,CAAC;QACrC,eAAU,GAAG,IAAI,YAAY,EAAO,CAAC;QAU3C,IAAI,CAAC,WAAW,GAAG;YACf,MAAM,EAAE,CAAC;YACT,IAAI,EAAE,CAAC;YACP,QAAQ,EAAE,CAAC;SACd,CAAA;QACD,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAE3B,qBAAqB;QACrB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,oBAAoB,CAAC,SAAS,CAAC;QACxE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,IAAI,uBAAuB,CAAC,MAAM,CAAC;QAC9E,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,qCAAQ,GAAR;QAAA,iBAWC;QAVG,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAExD,MAAM,CAAC,gBAAgB,CAAC,mBAAmB,EAAE;YACzC,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;YACjE,KAAI,CAAC,QAAQ,EAAE,CAAC;QACpB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;YACrE,KAAI,CAAC,QAAQ,EAAE,CAAC;QACpB,CAAC,CAAC,CAAC;IACP,CAAC;IAED,+CAAkB,GAAlB;QAAA,iBAgBC;QAfG,IAAI,CAAC,eAAe,EAAE,CAAC;QAEvB,IAAI,UAAU,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,gBAAgB,EAAE,CAAC,CAAC;QACnE,UAAU,CAAC,MAAM,EAAE,CAAC;QACpB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,UAAA,CAAC;YAClB,KAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,UAAU,CAAC,EAAE,CAAC,qBAAqB,EAAE,UAAA,CAAC;YAClC,KAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,KAAK,GAAG,oBAAoB,CAAC,SAAS,CAAC;QAE5C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAE,iGAAiG;IAE3H,CAAC;IAED,sBAAW,8CAAc;aAAzB;YACI,MAAM,CAAC,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC;QACnE,CAAC;;;OAAA;IAED,4CAAe,GAAf;QACI,IAAI,CAAC,WAAW,CAAC,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,YAAY,CAAC;QAG7E,wFAAwF;QACxF,IAAI,CAAC,gBAAgB,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACvE,IAAI,CAAC,gBAAgB,CAAC,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,GAAkB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAE,CAAC,YAAY,GAAG,CAAC,CAAA;QACpJ,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,GAAG,+BAA+B,GAAG,kCAAkC,CAAC,CAAC;QACvH,mIAAmI;QAGnI,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,oBAAoB,CAAC,CAAC;QAC5E,IAAI,CAAC,gBAAgB,CAAC,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAiB,IAAI,CAAC,gBAAgB,CAAC,MAAO,CAAC,YAAY,GAAG,CAAC,CAAC;IACrI,CAAC;IAED,2CAAc,GAAd,UAAe,MAAuB;QAAvB,uBAAA,EAAA,cAAuB;QAClC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC;QAEpF,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QAExG,gCAAgC;QAChC,qGAAqG;QACrG,4DAA4D;QAC5D,mBAAmB;QACnB,UAAU;QACV,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACtB,GAAG;IACP,CAAC;IAED,qCAAQ,GAAR,UAAS,MAAuB;QAAhC,iBAKC;QALQ,uBAAA,EAAA,cAAuB;QAC5B,UAAU,CAAC;YACP,KAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC,EAAE,GAAG,CAAC,CAAC;QACR,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC,CAAE,8CAA8C;IACxI,CAAC;IAED,mCAAM,GAAN;QACI,IAAI,CAAC,WAAW,CAAC,QAAQ,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,mBAAmB,EAAE,sBAAsB,CAAC,CAAC;QAC3G,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,WAAW,EAAE,sBAAsB,CAAC,CAAC;QACnG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,YAAY,EAAE,mBAAmB,CAAC,CAAC;QAEjG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,qCAAQ,GAAR,UAAS,MAAuB;QAAvB,uBAAA,EAAA,cAAuB;QAC5B,IAAI,CAAC,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC;QACxH,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,mBAAmB,EAAE,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,GAAG,QAAQ,CAAC,CAAC;QAC7I,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,WAAW,EAAE,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,GAAG,QAAQ,CAAC,CAAC;QAErI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;YAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;IAED,qCAAQ,GAAR;QACI,IAAI,CAAC,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;QACpD,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,mBAAmB,EAAE,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,GAAG,QAAQ,CAAC,CAAC;QAC7I,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,WAAW,EAAE,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,GAAG,QAAQ,CAAC,CAAC;QAErI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAGD,kCAAK,GAAL,UAAM,CAAM;QACR,CAAC,CAAC,cAAc,EAAE,CAAC;QAEnB,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC;YAC/C,EAAE,CAAC,CAAC,IAAI,CAAC,eAAe,IAAI,uBAAuB,CAAC,IAAI,CAAC;gBACrD,IAAI,CAAC,KAAK,GAAG,oBAAoB,CAAC,SAAS,CAAC;YAChD,IAAI;gBACA,IAAI,CAAC,KAAK,GAAG,oBAAoB,CAAC,QAAQ,CAAC;QACnD,CAAC;QAAC,IAAI,CAAC,CAAC;YACJ,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC;gBAC/C,EAAE,CAAC,CAAC,IAAI,CAAC,eAAe,IAAI,uBAAuB,CAAC,IAAI,CAAC;oBACrD,IAAI,CAAC,KAAK,GAAG,oBAAoB,CAAC,SAAS,CAAC;gBAChD,IAAI;oBACA,IAAI,CAAC,KAAK,GAAG,oBAAoB,CAAC,QAAQ,CAAC;YACnD,CAAC;YAAC,IAAI,CAAC,CAAC;gBACJ,qBAAqB;gBACrB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,IAAI,oBAAoB,CAAC,SAAS,GAAG,oBAAoB,CAAC,SAAS,GAAG,oBAAoB,CAAC,SAAS,CAAC;YACvI,CAAC;QACL,CAAC;IACL,CAAC;IAGD,mCAAM,GAAN,UAAO,CAAM;QACT,CAAC,CAAC,cAAc,EAAE,CAAC;QAEnB,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACb,KAAK,UAAU;gBACX,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;gBACpF,KAAK,CAAC;YACV,KAAK,KAAK;gBACN,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;gBACzE,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;oBAAC,MAAM,CAAC;gBACzF,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,mBAAmB,EAAE,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC;gBACzI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,WAAW,EAAE,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC;gBACjI,KAAK,CAAC;YACV,KAAK,QAAQ;gBACT,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,YAAY,EAAE,mBAAmB,CAAC,CAAC;gBAEjG,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;oBACpD,IAAI,CAAC,KAAK,GAAG,oBAAoB,CAAC,QAAQ,CAAC;gBAC/C,CAAC;gBACD,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;oBACzD,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,oBAAoB,CAAC,SAAS,CAAC,GAAG,oBAAoB,CAAC,SAAS,GAAG,oBAAoB,CAAC,SAAS,CAAC;gBACzI,CAAC;gBAED,KAAK,CAAC;QACd,CAAC;IACL,CAAC;IAED,sCAAS,GAAT;QAAA,iBAoBC;QAnBG,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACzC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBACjB,KAAK,oBAAoB,CAAC,SAAS;oBAC/B,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAChB,KAAK,CAAC;gBACV,KAAK,oBAAoB,CAAC,QAAQ;oBAC9B,IAAI,CAAC,MAAM,EAAE,CAAC;oBACd,KAAK,CAAC;gBACV,KAAK,oBAAoB,CAAC,SAAS;oBAC/B,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAChB,KAAK,CAAC;YACd,CAAC;YACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;YAE5B,6EAA6E;YAC7E,MAAM,CAAC,UAAU,CAAC;gBACd,KAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAI,CAAC,KAAK,CAAC,CAAC;YACtC,CAAC,CAAC,CAAA;QACN,CAAC;IACL,CAAC;IAEL,yBAAC;AAAD,CAAC,AAzMD,IAyMC;AAxMY;IAAR,KAAK,EAAE;;iDAA6B;AAC3B;IAAT,MAAM,EAAE;8BAAc,YAAY;uDAAkE;AAE5F;IAAR,KAAK,EAAE;;wDAAoC;AACnC;IAAR,KAAK,EAAE;;2DAA0C;AACzC;IAAR,KAAK,EAAE;;qDAAmB;AAEjB;IAAT,MAAM,EAAE;;oDAAoC;AACnC;IAAT,MAAM,EAAE;;sDAAsC;AACrC;IAAT,MAAM,EAAE;;sDAAsC;AAExB;IAAtB,YAAY,CAAC,OAAO,CAAC;;wDAAc;AACf;IAApB,SAAS,CAAC,QAAQ,CAAC;;uDAAa;AAbxB,kBAAkB;IAT9B,SAAS,CAAC;QACP,QAAQ,EAAE,YAAY;QACtB,eAAe,EAAE,uBAAuB,CAAC,MAAM;QAC/C,QAAQ,EAAE,sFAIT;KACJ,CAAC;qCAoBgC,QAAQ,EAAc,UAAU,EAAoB,QAAQ;GAnBjF,kBAAkB,CAyM9B;SAzMY,kBAAkB"} \ No newline at end of file +{"version":3,"file":"ion-pullup.js","sourceRoot":"","sources":["ion-pullup.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/demo/ionic-pullup/src/ion-pullup.module.js b/demo/ionic-pullup/src/ion-pullup.module.js index 19f2829..d7f8943 100644 --- a/demo/ionic-pullup/src/ion-pullup.module.js +++ b/demo/ionic-pullup/src/ion-pullup.module.js @@ -4,35 +4,38 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key, else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; import { CommonModule } from '@angular/common'; import { FormsModule } from '@angular/forms'; import { IonicModule } from 'ionic-angular'; import { IonPullUpComponent } from './ion-pullup'; import { IonPullUpTabComponent } from './ion-pullup-tab'; -var IonPullUpModule = (function () { +export var IonPullUpModule = (function () { function IonPullUpModule() { } + IonPullUpModule = __decorate([ + NgModule({ + imports: [ + CommonModule, + FormsModule, + IonicModule + ], + declarations: [ + IonPullUpComponent, + IonPullUpTabComponent + ], + exports: [ + IonPullUpComponent, + IonPullUpTabComponent + ], + providers: [], + schemas: [CUSTOM_ELEMENTS_SCHEMA] + }), + __metadata('design:paramtypes', []) + ], IonPullUpModule); return IonPullUpModule; }()); -IonPullUpModule = __decorate([ - NgModule({ - imports: [ - CommonModule, - FormsModule, - IonicModule - ], - declarations: [ - IonPullUpComponent, - IonPullUpTabComponent - ], - exports: [ - IonPullUpComponent, - IonPullUpTabComponent - ], - providers: [], - schemas: [CUSTOM_ELEMENTS_SCHEMA] - }) -], IonPullUpModule); -export { IonPullUpModule }; //# sourceMappingURL=ion-pullup.module.js.map \ No newline at end of file diff --git a/demo/ionic-pullup/src/ion-pullup.module.js.map b/demo/ionic-pullup/src/ion-pullup.module.js.map index baa2efd..2ca5a61 100644 --- a/demo/ionic-pullup/src/ion-pullup.module.js.map +++ b/demo/ionic-pullup/src/ion-pullup.module.js.map @@ -1 +1 @@ -{"version":3,"file":"ion-pullup.module.js","sourceRoot":"","sources":["ion-pullup.module.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAC,QAAQ,EAAE,sBAAsB,EAAC,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAC,kBAAkB,EAAC,MAAM,cAAc,CAAC;AAChD,OAAO,EAAC,qBAAqB,EAAC,MAAM,kBAAkB,CAAC;AAmBvD,IAAa,eAAe;IAA5B;IACA,CAAC;IAAD,sBAAC;AAAD,CAAC,AADD,IACC;AADY,eAAe;IAjB3B,QAAQ,CAAC;QACN,OAAO,EAAE;YACL,YAAY;YACZ,WAAW;YACX,WAAW;SACd;QACD,YAAY,EAAE;YACV,kBAAkB;YAClB,qBAAqB;SACxB;QACD,OAAO,EAAE;YACL,kBAAkB;YAClB,qBAAqB;SACxB;QACD,SAAS,EAAE,EAAE;QACb,OAAO,EAAE,CAAC,sBAAsB,CAAC;KACpC,CAAC;GACW,eAAe,CAC3B;SADY,eAAe"} \ No newline at end of file +{"version":3,"file":"ion-pullup.module.js","sourceRoot":"","sources":["ion-pullup.module.ts"],"names":[],"mappings":";;;;;;;;;OAAO,EAAC,QAAQ,EAAE,sBAAsB,EAAC,MAAM,eAAe;OACvD,EAAC,YAAY,EAAC,MAAM,iBAAiB;OACrC,EAAC,WAAW,EAAC,MAAM,gBAAgB;OACnC,EAAC,WAAW,EAAC,MAAM,eAAe;OAElC,EAAC,kBAAkB,EAAC,MAAM,cAAc;OACxC,EAAC,qBAAqB,EAAC,MAAM,kBAAkB;AAmBtD;IAAA;IACA,CAAC;IAlBD;QAAC,QAAQ,CAAC;YACN,OAAO,EAAE;gBACL,YAAY;gBACZ,WAAW;gBACX,WAAW;aACd;YACD,YAAY,EAAE;gBACV,kBAAkB;gBAClB,qBAAqB;aACxB;YACD,OAAO,EAAE;gBACL,kBAAkB;gBAClB,qBAAqB;aACxB;YACD,SAAS,EAAE,EAAE;YACb,OAAO,EAAE,CAAC,sBAAsB,CAAC;SACpC,CAAC;;uBAAA;IAEF,sBAAC;AAAD,CAAC,AADD,IACC"} \ No newline at end of file diff --git a/demo/ionic-pullup/src/ion-pullup.scss b/demo/ionic-pullup/src/ion-pullup.scss index 8efda03..7e544a7 100644 --- a/demo/ionic-pullup/src/ion-pullup.scss +++ b/demo/ionic-pullup/src/ion-pullup.scss @@ -13,11 +13,11 @@ $tabShadow: #666; // shadow color background: $background; color: $foreground; border-radius: $radius $radius 0 0; - margin: 0 auto; + margin: 0 auto; } @mixin pullup-tab-shadow($shadowColor) { - box-shadow: 0px -2px 2px $shadowColor; + box-shadow: 0px -2px 2px $shadowColor; } ion-pullup { @@ -39,7 +39,7 @@ ion-pullup { ion-content { position:absolute; - + .ios & { @import 'node_modules/ionic-angular/components/toolbar/toolbar.ios'; margin-top: calc(#{$toolbar-ios-height} + #{$tabHeight}); @@ -60,12 +60,12 @@ ion-pullup { ion-toolbar { @include pullup-tab-shadow($tabShadow); - + .toolbar-background { .ios & { border-top: none; } } } - } + } } \ No newline at end of file diff --git a/demo/ionic-pullup/typings.json b/demo/ionic-pullup/typings.json deleted file mode 100644 index c44aff9..0000000 --- a/demo/ionic-pullup/typings.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "dependencies": {}, - "devDependencies": {}, - "globalDependencies": { - "es6-shim": "registry:dt/es6-shim#0.31.2+20160602141504" - } -} diff --git a/index.d.ts b/index.d.ts new file mode 100644 index 0000000..8df7196 --- /dev/null +++ b/index.d.ts @@ -0,0 +1,3 @@ +export {IonPullUpComponent, IonPullUpFooterState} from './src/ion-pullup'; +export {IonPullUpTabComponent} from './src/ion-pullup-tab'; +export {IonPullUpModule} from './src/ion-pullup.module'; diff --git a/index.js b/index.js index 2528527..8a1796a 100644 --- a/index.js +++ b/index.js @@ -1,3 +1,4 @@ export { IonPullUpComponent, IonPullUpFooterState } from './src/ion-pullup'; export { IonPullUpTabComponent } from './src/ion-pullup-tab'; export { IonPullUpModule } from './src/ion-pullup.module'; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/index.js.map b/index.js.map index 520ccb9..002da3d 100644 --- a/index.js.map +++ b/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,kBAAkB,EAAE,oBAAoB,EAAC,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAC,qBAAqB,EAAC,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAC,eAAe,EAAC,MAAM,yBAAyB,CAAC"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,SAAQ,kBAAkB,EAAE,oBAAoB,QAAO,kBAAkB,CAAC;AAC1E,SAAQ,qBAAqB,QAAO,sBAAsB,CAAC;AAC3D,SAAQ,eAAe,QAAO,yBAAyB,CAAC"} \ No newline at end of file diff --git a/src/ion-pullup-tab.js b/src/ion-pullup-tab.js index 6405992..e1ab3d8 100644 --- a/src/ion-pullup-tab.js +++ b/src/ion-pullup-tab.js @@ -24,7 +24,7 @@ var __metadata = (this && this.__metadata) || function (k, v) { import { Component, ElementRef, Renderer, Input } from '@angular/core'; import { Gesture } from 'ionic-angular/gestures/gesture'; import { IonPullUpComponent, IonPullUpFooterState } from './ion-pullup'; -var IonPullUpTabComponent = (function () { +export var IonPullUpTabComponent = (function () { function IonPullUpTabComponent(el, renderer) { this.el = el; this.renderer = renderer; @@ -54,17 +54,17 @@ var IonPullUpTabComponent = (function () { _this.footer && _this.footer.onDrag(e); }); }; + __decorate([ + Input(), + __metadata('design:type', IonPullUpComponent) + ], IonPullUpTabComponent.prototype, "footer", void 0); + IonPullUpTabComponent = __decorate([ + Component({ + selector: 'ion-pullup-tab', + template: '' + }), + __metadata('design:paramtypes', [ElementRef, Renderer]) + ], IonPullUpTabComponent); return IonPullUpTabComponent; }()); -__decorate([ - Input(), - __metadata("design:type", IonPullUpComponent) -], IonPullUpTabComponent.prototype, "footer", void 0); -IonPullUpTabComponent = __decorate([ - Component({ - selector: 'ion-pullup-tab', - template: '' - }), - __metadata("design:paramtypes", [ElementRef, Renderer]) -], IonPullUpTabComponent); -export { IonPullUpTabComponent }; +//# sourceMappingURL=ion-pullup-tab.js.map \ No newline at end of file diff --git a/src/ion-pullup-tab.js.map b/src/ion-pullup-tab.js.map index 2d1380e..9ad40ef 100644 --- a/src/ion-pullup-tab.js.map +++ b/src/ion-pullup-tab.js.map @@ -1 +1 @@ -{"version":3,"file":"ion-pullup-tab.js","sourceRoot":"","sources":["ion-pullup-tab.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;EAaE;;;;;;;;;;AAEF,OAAO,EAAY,SAAS,EAA6D,UAAU,EAAE,QAAQ,EAAwB,KAAK,EAAoD,MAAM,eAAe,CAAC;AACpN,OAAO,EAAC,OAAO,EAAC,MAAM,gCAAgC,CAAC;AAEvD,OAAO,EAAC,kBAAkB,EAAE,oBAAoB,EAAC,MAAM,cAAc,CAAC;AAMtE,IAAa,qBAAqB;IAGhC,+BAAoB,EAAc,EAAU,QAAkB;QAA1C,OAAE,GAAF,EAAE,CAAY;QAAU,aAAQ,GAAR,QAAQ,CAAU;IAE9D,CAAC;IAED,sBAAW,6CAAU;aAArB;YACE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,oBAAoB,CAAC,QAAQ,CAAC;QAC5D,CAAC;;;OAAA;IAED,sBAAW,8CAAW;aAAtB;YACE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,oBAAoB,CAAC,SAAS,CAAC;QAC7D,CAAC;;;OAAA;IAED,wCAAQ,GAAR;QAAA,iBASC;QARC,IAAI,UAAU,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;QACpD,UAAU,CAAC,MAAM,EAAE,CAAC;QACpB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,UAAA,CAAC;YACpB,KAAI,CAAC,MAAM,IAAI,KAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QACH,UAAU,CAAC,EAAE,CAAC,qBAAqB,EAAE,UAAA,CAAC;YACpC,KAAI,CAAC,MAAM,IAAI,KAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC;IAEH,4BAAC;AAAD,CAAC,AA1BD,IA0BC;AAzBU;IAAR,KAAK,EAAE;8BAAS,kBAAkB;qDAAC;AADzB,qBAAqB;IAJjC,SAAS,CAAC;QACP,QAAQ,EAAE,gBAAgB;QAC1B,QAAQ,EAAE,2BAA2B;KACxC,CAAC;qCAIwB,UAAU,EAAoB,QAAQ;GAHnD,qBAAqB,CA0BjC;SA1BY,qBAAqB"} \ No newline at end of file +{"version":3,"file":"ion-pullup-tab.js","sourceRoot":"","sources":["ion-pullup-tab.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;EAaE;;;;;;;;;;OAEK,EAAY,SAAS,EAA6D,UAAU,EAAE,QAAQ,EAAwB,KAAK,EAAoD,MAAM,eAAe;OAC5M,EAAC,OAAO,EAAC,MAAM,gCAAgC;OAE/C,EAAC,kBAAkB,EAAE,oBAAoB,EAAC,MAAM,cAAc;AAMrE;IAGE,+BAAoB,EAAc,EAAU,QAAkB;QAA1C,OAAE,GAAF,EAAE,CAAY;QAAU,aAAQ,GAAR,QAAQ,CAAU;IAE9D,CAAC;IAED,sBAAW,6CAAU;aAArB;YACE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,oBAAoB,CAAC,QAAQ,CAAC;QAC5D,CAAC;;;OAAA;IAED,sBAAW,8CAAW;aAAtB;YACE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,oBAAoB,CAAC,SAAS,CAAC;QAC7D,CAAC;;;OAAA;IAED,wCAAQ,GAAR;QAAA,iBASC;QARC,IAAI,UAAU,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;QACpD,UAAU,CAAC,MAAM,EAAE,CAAC;QACpB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,UAAA,CAAC;YACpB,KAAI,CAAC,MAAM,IAAI,KAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QACH,UAAU,CAAC,EAAE,CAAC,qBAAqB,EAAE,UAAA,CAAC;YACpC,KAAI,CAAC,MAAM,IAAI,KAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC;IAvBD;QAAC,KAAK,EAAE;;yDAAA;IALV;QAAC,SAAS,CAAC;YACP,QAAQ,EAAE,gBAAgB;YAC1B,QAAQ,EAAE,2BAA2B;SACxC,CAAC;;6BAAA;IA2BF,4BAAC;AAAD,CAAC,AA1BD,IA0BC"} \ No newline at end of file diff --git a/src/ion-pullup.js b/src/ion-pullup.js index 0ef4c25..c471d52 100644 --- a/src/ion-pullup.js +++ b/src/ion-pullup.js @@ -36,7 +36,7 @@ export var IonPullUpFooterBehavior; IonPullUpFooterBehavior[IonPullUpFooterBehavior["Hide"] = 0] = "Hide"; IonPullUpFooterBehavior[IonPullUpFooterBehavior["Expand"] = 1] = "Expand"; })(IonPullUpFooterBehavior || (IonPullUpFooterBehavior = {})); -var IonPullUpComponent = (function () { +export var IonPullUpComponent = (function () { function IonPullUpComponent(platform, el, renderer) { this.platform = platform; this.el = el; @@ -206,54 +206,56 @@ var IonPullUpComponent = (function () { }); } }; + __decorate([ + Input(), + __metadata('design:type', Number) + ], IonPullUpComponent.prototype, "state", void 0); + __decorate([ + Output(), + __metadata('design:type', EventEmitter) + ], IonPullUpComponent.prototype, "stateChange", void 0); + __decorate([ + Input(), + __metadata('design:type', Number) + ], IonPullUpComponent.prototype, "initialState", void 0); + __decorate([ + // TODO implemment + Input(), + __metadata('design:type', Number) + ], IonPullUpComponent.prototype, "defaultBehavior", void 0); + __decorate([ + // TODO implemment + Input(), + __metadata('design:type', Number) + ], IonPullUpComponent.prototype, "maxHeight", void 0); + __decorate([ + Output(), + __metadata('design:type', Object) + ], IonPullUpComponent.prototype, "onExpand", void 0); + __decorate([ + Output(), + __metadata('design:type', Object) + ], IonPullUpComponent.prototype, "onCollapse", void 0); + __decorate([ + Output(), + __metadata('design:type', Object) + ], IonPullUpComponent.prototype, "onMinimize", void 0); + __decorate([ + ContentChild(Toolbar), + __metadata('design:type', Object) + ], IonPullUpComponent.prototype, "childToolbar", void 0); + __decorate([ + ViewChild('footer'), + __metadata('design:type', Object) + ], IonPullUpComponent.prototype, "childFooter", void 0); + IonPullUpComponent = __decorate([ + Component({ + selector: 'ion-pullup', + changeDetection: ChangeDetectionStrategy.OnPush, + template: "\n \n \n \n " + }), + __metadata('design:paramtypes', [Platform, ElementRef, Renderer]) + ], IonPullUpComponent); return IonPullUpComponent; }()); -__decorate([ - Input(), - __metadata("design:type", Number) -], IonPullUpComponent.prototype, "state", void 0); -__decorate([ - Output(), - __metadata("design:type", EventEmitter) -], IonPullUpComponent.prototype, "stateChange", void 0); -__decorate([ - Input(), - __metadata("design:type", Number) -], IonPullUpComponent.prototype, "initialState", void 0); -__decorate([ - Input(), - __metadata("design:type", Number) -], IonPullUpComponent.prototype, "defaultBehavior", void 0); -__decorate([ - Input(), - __metadata("design:type", Number) -], IonPullUpComponent.prototype, "maxHeight", void 0); -__decorate([ - Output(), - __metadata("design:type", Object) -], IonPullUpComponent.prototype, "onExpand", void 0); -__decorate([ - Output(), - __metadata("design:type", Object) -], IonPullUpComponent.prototype, "onCollapse", void 0); -__decorate([ - Output(), - __metadata("design:type", Object) -], IonPullUpComponent.prototype, "onMinimize", void 0); -__decorate([ - ContentChild(Toolbar), - __metadata("design:type", Object) -], IonPullUpComponent.prototype, "childToolbar", void 0); -__decorate([ - ViewChild('footer'), - __metadata("design:type", Object) -], IonPullUpComponent.prototype, "childFooter", void 0); -IonPullUpComponent = __decorate([ - Component({ - selector: 'ion-pullup', - changeDetection: ChangeDetectionStrategy.OnPush, - template: "\n \n \n \n " - }), - __metadata("design:paramtypes", [Platform, ElementRef, Renderer]) -], IonPullUpComponent); -export { IonPullUpComponent }; +//# sourceMappingURL=ion-pullup.js.map \ No newline at end of file diff --git a/src/ion-pullup.js.map b/src/ion-pullup.js.map index a6ab35c..f64a09b 100644 --- a/src/ion-pullup.js.map +++ b/src/ion-pullup.js.map @@ -1 +1 @@ -{"version":3,"file":"ion-pullup.js","sourceRoot":"","sources":["ion-pullup.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"ion-pullup.js","sourceRoot":"","sources":["ion-pullup.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/ion-pullup.module.js b/src/ion-pullup.module.js index 007609f..d7f8943 100644 --- a/src/ion-pullup.module.js +++ b/src/ion-pullup.module.js @@ -4,34 +4,38 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key, else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; import { CommonModule } from '@angular/common'; import { FormsModule } from '@angular/forms'; import { IonicModule } from 'ionic-angular'; import { IonPullUpComponent } from './ion-pullup'; import { IonPullUpTabComponent } from './ion-pullup-tab'; -var IonPullUpModule = (function () { +export var IonPullUpModule = (function () { function IonPullUpModule() { } + IonPullUpModule = __decorate([ + NgModule({ + imports: [ + CommonModule, + FormsModule, + IonicModule + ], + declarations: [ + IonPullUpComponent, + IonPullUpTabComponent + ], + exports: [ + IonPullUpComponent, + IonPullUpTabComponent + ], + providers: [], + schemas: [CUSTOM_ELEMENTS_SCHEMA] + }), + __metadata('design:paramtypes', []) + ], IonPullUpModule); return IonPullUpModule; }()); -IonPullUpModule = __decorate([ - NgModule({ - imports: [ - CommonModule, - FormsModule, - IonicModule - ], - declarations: [ - IonPullUpComponent, - IonPullUpTabComponent - ], - exports: [ - IonPullUpComponent, - IonPullUpTabComponent - ], - providers: [], - schemas: [CUSTOM_ELEMENTS_SCHEMA] - }) -], IonPullUpModule); -export { IonPullUpModule }; +//# sourceMappingURL=ion-pullup.module.js.map \ No newline at end of file diff --git a/src/ion-pullup.module.js.map b/src/ion-pullup.module.js.map index baa2efd..2ca5a61 100644 --- a/src/ion-pullup.module.js.map +++ b/src/ion-pullup.module.js.map @@ -1 +1 @@ -{"version":3,"file":"ion-pullup.module.js","sourceRoot":"","sources":["ion-pullup.module.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAC,QAAQ,EAAE,sBAAsB,EAAC,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAC,kBAAkB,EAAC,MAAM,cAAc,CAAC;AAChD,OAAO,EAAC,qBAAqB,EAAC,MAAM,kBAAkB,CAAC;AAmBvD,IAAa,eAAe;IAA5B;IACA,CAAC;IAAD,sBAAC;AAAD,CAAC,AADD,IACC;AADY,eAAe;IAjB3B,QAAQ,CAAC;QACN,OAAO,EAAE;YACL,YAAY;YACZ,WAAW;YACX,WAAW;SACd;QACD,YAAY,EAAE;YACV,kBAAkB;YAClB,qBAAqB;SACxB;QACD,OAAO,EAAE;YACL,kBAAkB;YAClB,qBAAqB;SACxB;QACD,SAAS,EAAE,EAAE;QACb,OAAO,EAAE,CAAC,sBAAsB,CAAC;KACpC,CAAC;GACW,eAAe,CAC3B;SADY,eAAe"} \ No newline at end of file +{"version":3,"file":"ion-pullup.module.js","sourceRoot":"","sources":["ion-pullup.module.ts"],"names":[],"mappings":";;;;;;;;;OAAO,EAAC,QAAQ,EAAE,sBAAsB,EAAC,MAAM,eAAe;OACvD,EAAC,YAAY,EAAC,MAAM,iBAAiB;OACrC,EAAC,WAAW,EAAC,MAAM,gBAAgB;OACnC,EAAC,WAAW,EAAC,MAAM,eAAe;OAElC,EAAC,kBAAkB,EAAC,MAAM,cAAc;OACxC,EAAC,qBAAqB,EAAC,MAAM,kBAAkB;AAmBtD;IAAA;IACA,CAAC;IAlBD;QAAC,QAAQ,CAAC;YACN,OAAO,EAAE;gBACL,YAAY;gBACZ,WAAW;gBACX,WAAW;aACd;YACD,YAAY,EAAE;gBACV,kBAAkB;gBAClB,qBAAqB;aACxB;YACD,OAAO,EAAE;gBACL,kBAAkB;gBAClB,qBAAqB;aACxB;YACD,SAAS,EAAE,EAAE;YACb,OAAO,EAAE,CAAC,sBAAsB,CAAC;SACpC,CAAC;;uBAAA;IAEF,sBAAC;AAAD,CAAC,AADD,IACC"} \ No newline at end of file From 2dfb5532584fca7ccb2b0719a918d38976ae6605 Mon Sep 17 00:00:00 2001 From: Michael Spyratos Date: Wed, 1 Feb 2017 15:09:41 +0000 Subject: [PATCH 7/8] Missing properties warning fix + Build scripts --- package.json | 61 +++++++++++++++++++++++++++++++--------------------- 1 file changed, 36 insertions(+), 25 deletions(-) diff --git a/package.json b/package.json index aec1e5b..db035ff 100644 --- a/package.json +++ b/package.json @@ -1,27 +1,38 @@ { - "name": "ionic-pullup", - "description": "ionic-pullup for Angular 2 and Ionic 2", - "version": "2.1.0", - "dependencies": { - "@angular/common": "2.1.1", - "@angular/compiler": "2.1.1", - "@angular/compiler-cli": "2.1.1", - "@angular/core": "2.1.1", - "@angular/forms": "2.1.1", - "@angular/http": "2.1.1", - "@angular/platform-browser": "2.1.1", - "@angular/platform-browser-dynamic": "2.1.1", - "@angular/platform-server": "2.1.1", - "@ionic/storage": "1.1.6", - "ionic-angular": "2.0.0-rc.2", - "ionic-native": "2.2.3", - "ionicons": "3.0.0", - "rxjs": "5.0.0-beta.12", - "zone.js": "0.6.21" - }, - "devDependencies": { - "@ionic/app-scripts": "0.0.44", - "@types/core-js": "^0.9.35", - "typescript": "2.0.6" - } + "name": "ionic-pullup", + "description": "ionic-pullup for Angular 2 and Ionic 2", + "version": "2.1.0", + "license": "MIT", + "main": "index.js", + "typings": "index.d.ts", + "repository": { + "type": "git", + "url": "https://github.com/arielfaur/ionic-pullup.git" + }, + "dependencies": { + "@angular/common": "2.1.1", + "@angular/compiler": "2.1.1", + "@angular/compiler-cli": "2.1.1", + "@angular/core": "2.1.1", + "@angular/forms": "2.1.1", + "@angular/http": "2.1.1", + "@angular/platform-browser": "2.1.1", + "@angular/platform-browser-dynamic": "2.1.1", + "@angular/platform-server": "2.1.1", + "@ionic/storage": "1.1.6", + "ionic-angular": "2.0.0-rc.2", + "ionic-native": "2.2.3", + "ionicons": "3.0.0", + "rxjs": "5.0.0-beta.12", + "zone.js": "0.6.21" + }, + "devDependencies": { + "@ionic/app-scripts": "0.0.44", + "@types/core-js": "^0.9.35", + "typescript": "2.0.6" + }, + "scripts": { + "build": "npm install && tsc -p tsconfig.json", + "release": "npm run build && npm publish" + } } From e7ce14eea3c9f0ceda34bbe31dafb414af2ea0ec Mon Sep 17 00:00:00 2001 From: Michael Spyratos Date: Wed, 1 Feb 2017 17:13:55 +0000 Subject: [PATCH 8/8] Used "!default" for variables to be able to override them. Fixed non legal calc with zero value. --- src/ion-pullup.scss | 44 +++++++++++++++++++++++++++++--------------- 1 file changed, 29 insertions(+), 15 deletions(-) diff --git a/src/ion-pullup.scss b/src/ion-pullup.scss index 7e544a7..695892d 100644 --- a/src/ion-pullup.scss +++ b/src/ion-pullup.scss @@ -1,10 +1,9 @@ - -$tabWidth: 120px; // tab width -$tabHeight: 22px; // tab height, set to 0px if there is no tab -$tabRadius: 20px; // tab radius -$tabBackground: color($colors, primary, base); // tab background color -$tabIconColor: white; // icon color within tab -$tabShadow: #666; // shadow color +$tabWidth: 120px !default; // tab width +$tabHeight: 22px !default; // tab height, set to 0px if there is no tab +$tabRadius: 20px !default; // tab radius +$tabBackground: color($colors, primary, base) !default; // tab background color +$tabIconColor: white !default; // icon color within tab +$tabShadow: #666 !default; // shadow color @mixin pullup-tab($width, $height, $radius, $background: color($colors, primary, base), $foreground: color($colors, primary, contrast)) { position: relative; @@ -21,7 +20,7 @@ $tabShadow: #666; // shadow color } ion-pullup { - background : color($colors, primary, base); + background: color($colors, primary, base); ion-footer { &::before { @@ -38,22 +37,37 @@ ion-pullup { } ion-content { - position:absolute; + position: absolute; .ios & { @import 'node_modules/ionic-angular/components/toolbar/toolbar.ios'; - margin-top: calc(#{$toolbar-ios-height} + #{$tabHeight}); - .scroll-content { - margin-bottom: calc(#{$toolbar-ios-height} + #{$tabHeight}); + @if $tabHeight != 0 { + margin-top: calc(#{$toolbar-ios-height} + #{$tabHeight}); + .scroll-content { + margin-bottom: calc(#{$toolbar-ios-height} + #{$tabHeight}); + } + } @else { + margin-top: $toolbar-ios-height; + .scroll-content { + margin-bottom: $toolbar-ios-height; + } } + } .md & { @import 'node_modules/ionic-angular/components/toolbar/toolbar.md'; - margin-top: calc(#{$toolbar-md-height} + #{$tabHeight}); - .scroll-content { - margin-bottom: calc(#{$toolbar-md-height} + #{$tabHeight}); + @if $tabHeight != 0 { + margin-top: calc(#{$toolbar-md-height} + #{$tabHeight}); + .scroll-content { + margin-bottom: calc(#{$toolbar-md-height} + #{$tabHeight}); + } + } @else { + margin-top: $toolbar-md-height; + .scroll-content { + margin-bottom: $toolbar-md-height; + } } } }