chore(demos): making progress on the conf app

This commit is contained in:
Dan Bucholtz
2017-12-22 14:51:38 -06:00
parent a0688886d9
commit f5392297d2
21 changed files with 791 additions and 48 deletions

View File

@@ -43,7 +43,7 @@
"@ngtools/json-schema": "1.1.0",
"@schematics/schematics": "0.0.11",
"minimist": "1.2.0",
"rxjs": "5.5.5"
"rxjs": "5.5.6"
}
},
"@angular/animations": {
@@ -100,7 +100,7 @@
"postcss-url": "7.3.0",
"raw-loader": "0.5.1",
"resolve": "1.5.0",
"rxjs": "5.5.5",
"rxjs": "5.5.6",
"sass-loader": "6.0.6",
"semver": "5.4.1",
"silent-error": "1.1.0",
@@ -263,18 +263,35 @@
"tslib": "1.8.1"
}
},
"@ionic/angular": {
"version": "0.0.2-11",
"resolved": "https://registry.npmjs.org/@ionic/angular/-/angular-0.0.2-11.tgz",
"integrity": "sha512-emi1e4RaPujlBUK07zvZAZlmXVQwyOE/DpOqK6182RIhd/f1NcRG+FuWdcldK6IrzIH1iO6PgM4vibWJAguhZQ==",
"requires": {
"@stencil/core": "0.1.0"
}
"@ionic-native/core": {
"version": "4.5.2",
"resolved": "https://registry.npmjs.org/@ionic-native/core/-/core-4.5.2.tgz",
"integrity": "sha512-/Y4gvrfNqO+wpa+i41tkud6WdVawju/+c+pD1E9b8lMeWimvFfqA0/q/6+S8VWjGLKz1GrZqW9cfwJU75SC4Ug=="
},
"@ionic/core": {
"version": "0.0.2-31",
"resolved": "https://registry.npmjs.org/@ionic/core/-/core-0.0.2-31.tgz",
"integrity": "sha512-3Sn2GLIW9VyIWiK4HlWc9uSl3NZzYAca/h1rZdSncNkmGN+sF9QV2sVQUNH/C5FICS0wvzP3Qq62c7/dlInDVg=="
"@ionic-native/in-app-browser": {
"version": "4.5.2",
"resolved": "https://registry.npmjs.org/@ionic-native/in-app-browser/-/in-app-browser-4.5.2.tgz",
"integrity": "sha512-GagPWh1rNYLb6gTt/OKI++tPNYqYaGTi5ljEem6v1KVcUpYae71Nl26UY5muAC7jDbMi1+hu/cXeIo6jc85eRA=="
},
"@ionic-native/splash-screen": {
"version": "4.5.2",
"resolved": "https://registry.npmjs.org/@ionic-native/splash-screen/-/splash-screen-4.5.2.tgz",
"integrity": "sha512-8bWonxhxOold+2EhC9oSGB+z2naCLBfgTozBWt1Npi2AAe1D//nSA8KTjPTRdWF6SH0iUuhbhgo5HIZ7OZz2DQ=="
},
"@ionic-native/status-bar": {
"version": "4.5.2",
"resolved": "https://registry.npmjs.org/@ionic-native/status-bar/-/status-bar-4.5.2.tgz",
"integrity": "sha512-i2j2J9KIobCqyX6LlrlYhaHgd7qmP1pzHs4XAthHgth8m6c4gsHsh+Pl3fqknD7AX18ghpqo3tVtv0EFhSFU3w=="
},
"@ionic/storage": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/@ionic/storage/-/storage-2.1.3.tgz",
"integrity": "sha512-/i3Vn2jNBqteAm5FuGCNei5oJlFQB2JYFkH3nR5f5i7X4kRz17XAsAKXVQjyR9wiye8HmxglIz05JsC92nYUjQ==",
"requires": {
"@types/localforage": "0.0.30",
"localforage": "1.4.3",
"localforage-cordovasqlitedriver": "1.5.0"
}
},
"@ngtools/json-schema": {
"version": "1.1.0",
@@ -344,9 +361,9 @@
"dev": true
},
"@stencil/core": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/@stencil/core/-/core-0.1.0.tgz",
"integrity": "sha512-1I/fMUk+iLDY+0kyRQvLz6KcnWDQjL4HlTSfAg1T8VA2T5EhGL5232lgK62000Xwg3MbSAH+vAe5lwoOJDc8TA==",
"version": "0.1.1-0",
"resolved": "https://registry.npmjs.org/@stencil/core/-/core-0.1.1-0.tgz",
"integrity": "sha512-F4frvyNcIJoWO+ht2Hw8nT7TS7IN0/WKx4vGUbdKWnSvIN4/V+gO5pu/Um3MccSEDFnp+VYMKEZk99scF2wX2g==",
"requires": {
"chokidar": "1.7.0",
"jsdom": "11.3.0",
@@ -381,11 +398,15 @@
"@types/jasmine": "2.5.54"
}
},
"@types/localforage": {
"version": "0.0.30",
"resolved": "https://registry.npmjs.org/@types/localforage/-/localforage-0.0.30.tgz",
"integrity": "sha1-PWCmv23aOOP4pGlhFZg3nx9klQk="
},
"@types/node": {
"version": "6.0.95",
"resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.95.tgz",
"integrity": "sha512-d1Twx1NM49dQ7jbNZfaHTQWuYL9cFVrGxYpbc3BvMf4626lOJOZnp2aJQNB9vP/WX3UOe1TrTUMABrGRu6FZhg==",
"dev": true
"integrity": "sha512-d1Twx1NM49dQ7jbNZfaHTQWuYL9cFVrGxYpbc3BvMf4626lOJOZnp2aJQNB9vP/WX3UOe1TrTUMABrGRu6FZhg=="
},
"@types/q": {
"version": "0.0.32",
@@ -695,6 +716,11 @@
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
},
"ast-types": {
"version": "0.8.15",
"resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.8.15.tgz",
"integrity": "sha1-ju8IJ/BN/w7IhXupJavj/qYZTlI="
},
"async": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz",
@@ -856,6 +882,11 @@
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
},
"base62": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/base62/-/base62-0.1.1.tgz",
"integrity": "sha1-e0F0wvlESXU7EcJlHAg9qEGnsIQ="
},
"base64-arraybuffer": {
"version": "0.1.5",
"resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz",
@@ -2580,6 +2611,23 @@
"is-symbol": "1.0.1"
}
},
"es3ify": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/es3ify/-/es3ify-0.1.4.tgz",
"integrity": "sha1-rZ+l3xrjTz8x4SEbWBiy1RB439E=",
"requires": {
"esprima-fb": "3001.1.0-dev-harmony-fb",
"jstransform": "3.0.0",
"through": "2.3.8"
},
"dependencies": {
"esprima-fb": {
"version": "3001.1.0-dev-harmony-fb",
"resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-3001.0001.0000-dev-harmony-fb.tgz",
"integrity": "sha1-t303q8046gt3Qmu4vCkizmtCZBE="
}
}
},
"es5-ext": {
"version": "0.10.37",
"resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.37.tgz",
@@ -2685,6 +2733,11 @@
"estraverse": "4.2.0"
}
},
"esmangle-evaluator": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/esmangle-evaluator/-/esmangle-evaluator-1.0.1.tgz",
"integrity": "sha1-Yg2GbvSGGzMR91dm1SqFcrs8YzY="
},
"esprima": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
@@ -2942,6 +2995,29 @@
"resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
"integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
},
"falafel": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/falafel/-/falafel-1.2.0.tgz",
"integrity": "sha1-wY0k71CRF0pJfzGM0ksCaiXN2rQ=",
"requires": {
"acorn": "1.2.2",
"foreach": "2.0.5",
"isarray": "0.0.1",
"object-keys": "1.0.11"
},
"dependencies": {
"acorn": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-1.2.2.tgz",
"integrity": "sha1-yM4n3grMdtiW0rH6099YjZ6C8BQ="
},
"isarray": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
}
}
},
"fast-deep-equal": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz",
@@ -3076,8 +3152,7 @@
"foreach": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz",
"integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=",
"dev": true
"integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k="
},
"forever-agent": {
"version": "0.6.1",
@@ -4642,6 +4717,11 @@
"dev": true,
"optional": true
},
"immediate": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
"integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps="
},
"import-local": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/import-local/-/import-local-0.1.1.tgz",
@@ -4703,6 +4783,15 @@
"integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
"dev": true
},
"inline-process-browser": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/inline-process-browser/-/inline-process-browser-1.0.0.tgz",
"integrity": "sha1-RqYbFT3TybFiSxoAYm7bT39BTyI=",
"requires": {
"falafel": "1.2.0",
"through2": "0.6.5"
}
},
"internal-ip": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-1.2.0.tgz",
@@ -5302,6 +5391,31 @@
"verror": "1.10.0"
}
},
"jstransform": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/jstransform/-/jstransform-3.0.0.tgz",
"integrity": "sha1-olkats7o2XvzvoMNv6IxO4fNZAs=",
"requires": {
"base62": "0.1.1",
"esprima-fb": "3001.1.0-dev-harmony-fb",
"source-map": "0.1.31"
},
"dependencies": {
"esprima-fb": {
"version": "3001.1.0-dev-harmony-fb",
"resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-3001.0001.0000-dev-harmony-fb.tgz",
"integrity": "sha1-t303q8046gt3Qmu4vCkizmtCZBE="
},
"source-map": {
"version": "0.1.31",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.31.tgz",
"integrity": "sha1-n3BNDWnZ4TioG63267T94z0VHGE=",
"requires": {
"amdefine": "1.0.1"
}
}
}
},
"karma": {
"version": "1.7.1",
"resolved": "https://registry.npmjs.org/karma/-/karma-1.7.1.tgz",
@@ -5641,6 +5755,17 @@
"ejs": "2.5.7"
}
},
"lie": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/lie/-/lie-3.0.2.tgz",
"integrity": "sha1-/9oh17uibzd8rYZdNkmy/Izjn+o=",
"requires": {
"es3ify": "0.1.4",
"immediate": "3.0.6",
"inline-process-browser": "1.0.0",
"unreachable-branch-transform": "0.3.0"
}
},
"load-json-file": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
@@ -5670,6 +5795,23 @@
"json5": "0.5.1"
}
},
"localforage": {
"version": "1.4.3",
"resolved": "https://registry.npmjs.org/localforage/-/localforage-1.4.3.tgz",
"integrity": "sha1-ohJUPDnHx2Qk7dEr9HTEiarKSUw=",
"requires": {
"lie": "3.0.2"
}
},
"localforage-cordovasqlitedriver": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/localforage-cordovasqlitedriver/-/localforage-cordovasqlitedriver-1.5.0.tgz",
"integrity": "sha1-+TR4nmrZo5usBf3RFogS9DhTV2I=",
"requires": {
"@types/localforage": "0.0.30",
"localforage": "1.4.3"
}
},
"locate-path": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
@@ -6066,6 +6208,18 @@
"pumpify": "1.3.5",
"stream-each": "1.2.2",
"through2": "2.0.3"
},
"dependencies": {
"through2": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
"integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
"dev": true,
"requires": {
"readable-stream": "2.3.3",
"xtend": "4.0.1"
}
}
}
},
"mixin-object": {
@@ -6376,8 +6530,7 @@
"object-keys": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz",
"integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=",
"dev": true
"integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0="
},
"object.omit": {
"version": "2.0.1",
@@ -6619,14 +6772,7 @@
"resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz",
"integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==",
"requires": {
"@types/node": "8.5.2"
},
"dependencies": {
"@types/node": {
"version": "8.5.2",
"resolved": "https://registry.npmjs.org/@types/node/-/node-8.5.2.tgz",
"integrity": "sha512-KA4GKOpgXnrqEH2eCVhiv2CsxgXGQJgV1X0vsGlh+WCnxbeAE1GT44ZsTU1IN5dEeV/gDupKa7gWo08V5IxWVQ=="
}
"@types/node": "6.0.95"
}
},
"parsejson": {
@@ -7575,6 +7721,11 @@
"utila": "0.4.0"
}
},
"private": {
"version": "0.1.8",
"resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
"integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg=="
},
"process": {
"version": "0.11.10",
"resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
@@ -7910,6 +8061,24 @@
"set-immediate-shim": "1.0.1"
}
},
"recast": {
"version": "0.10.43",
"resolved": "https://registry.npmjs.org/recast/-/recast-0.10.43.tgz",
"integrity": "sha1-uV1Q9tYHYaX2JS4V2AZ4FoSRzn8=",
"requires": {
"ast-types": "0.8.15",
"esprima-fb": "15001.1001.0-dev-harmony-fb",
"private": "0.1.8",
"source-map": "0.5.7"
},
"dependencies": {
"esprima-fb": {
"version": "15001.1001.0-dev-harmony-fb",
"resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz",
"integrity": "sha1-Q761fsJujPI3092LM+QlM1d/Jlk="
}
}
},
"redent": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
@@ -8230,9 +8399,9 @@
}
},
"rxjs": {
"version": "5.5.5",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.5.tgz",
"integrity": "sha512-D/MfQnPMBk8P8gfwGxvCkuaWBcG58W7dUMT//URPoYzIbDEKT0GezdirkK5whMgKFBATfCoTpxO8bJQGJ04W5A==",
"version": "5.5.6",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.6.tgz",
"integrity": "sha512-v4Q5HDC0FHAQ7zcBX7T2IL6O5ltl1a2GX4ENjPXg6SjDY69Cmx9v4113C99a4wGF16ClPv5Z8mghuYorVkg/kg==",
"requires": {
"symbol-observable": "1.0.1"
}
@@ -9087,17 +9256,38 @@
"through": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
"integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
"dev": true
"integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
},
"through2": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
"integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
"dev": true,
"version": "0.6.5",
"resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
"integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
"requires": {
"readable-stream": "2.3.3",
"readable-stream": "1.0.34",
"xtend": "4.0.1"
},
"dependencies": {
"isarray": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
},
"readable-stream": {
"version": "1.0.34",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
"integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
"requires": {
"core-util-is": "1.0.2",
"inherits": "2.0.3",
"isarray": "0.0.1",
"string_decoder": "0.10.31"
}
},
"string_decoder": {
"version": "0.10.31",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
"integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
}
}
},
"thunky": {
@@ -9474,6 +9664,16 @@
"integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
"dev": true
},
"unreachable-branch-transform": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/unreachable-branch-transform/-/unreachable-branch-transform-0.3.0.tgz",
"integrity": "sha1-2ZzExudG0mSSiEW2EdtUsPNHTKo=",
"requires": {
"esmangle-evaluator": "1.0.1",
"recast": "0.10.43",
"through2": "0.6.5"
}
},
"upper-case": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz",
@@ -10338,8 +10538,7 @@
"xtend": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
"integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
"dev": true
"integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68="
},
"xxhashjs": {
"version": "0.2.1",

View File

@@ -21,8 +21,14 @@
"@angular/platform-browser": "^5.0.0",
"@angular/platform-browser-dynamic": "^5.0.0",
"@angular/router": "^5.0.0",
"@ionic-native/core": "^4.3.1",
"@ionic-native/in-app-browser": "^4.3.1",
"@ionic-native/splash-screen": "^4.3.1",
"@ionic-native/status-bar": "^4.3.1",
"@ionic/angular": "next",
"@ionic/core": "next",
"@ionic/storage": "2.1.3",
"@stencil/core": "^0.1.1-0",
"core-js": "^2.4.1",
"rxjs": "^5.5.2",
"zone.js": "^0.8.14"

View File

@@ -1,3 +1,3 @@
<ion-app>
Hello World
<ion-nav [root]="rootPage" #content swipeBackEnabled="false" main name="app"></ion-nav>
</ion-app>

View File

@@ -1,10 +1,12 @@
import { Component } from '@angular/core';
import { TabsPage } from '../pages/tabs-page/tabs-page';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
styleUrls: ['./app.component.scss']
})
export class AppComponent {
title = 'app';
rootPage = TabsPage;
}

View File

@@ -1,16 +1,35 @@
import { BrowserModule, } from '@angular/platform-browser';
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { IonicAngularModule } from '@ionic/angular';
import { IonicStorageModule } from '@ionic/storage';
import { AppComponent } from './app.component';
import { AboutPage } from '../pages/about/about';
import { PopoverPage } from '../pages/about-popover/about-popover';
import { MapPage } from '../pages/map/map';
import { TabsPage } from '../pages/tabs-page/tabs-page';
@NgModule({
declarations: [
AppComponent
AboutPage,
AppComponent,
MapPage,
PopoverPage,
TabsPage
],
entryComponents: [
AboutPage,
MapPage,
PopoverPage,
TabsPage
],
imports: [
BrowserModule
BrowserModule,
IonicAngularModule.forRoot(),
IonicStorageModule.forRoot()
],
providers: [],
bootstrap: [AppComponent],

View File

@@ -7,6 +7,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="favicon.ico">
<script src="ionic/core/ionic.js"></script>
</head>
<body>
<app-root></app-root>

View File

@@ -0,0 +1,5 @@
export interface UserOptions {
username: string;
password: string;
}

View File

@@ -0,0 +1,31 @@
import { Component } from '@angular/core';
import { PublicNav } from '@ionic/core';
import { App } from '@ionic/angular';
@Component({
template: `
<ion-list>
<button ion-item (click)="close('http://ionicframework.com/docs/v2/getting-started')">Learn Ionic</button>
<button ion-item (click)="close('http://ionicframework.com/docs/v2')">Documentation</button>
<button ion-item (click)="close('http://showcase.ionicframework.com')">Showcase</button>
<button ion-item (click)="close('https://github.com/ionic-team/ionic')">GitHub Repo</button>
<button ion-item (click)="support()">Support</button>
</ion-list>
`
})
export class PopoverPage {
constructor(public app: App) { }
support() {
(this.app.getRootNavs()[0] as PublicNav).push('SupportPage');
// this.viewCtrl.dismiss();
}
close(url: string) {
window.open(url, '_blank');
// this.viewCtrl.dismiss();
}
}

View File

@@ -0,0 +1,51 @@
<ion-header>
<ion-toolbar>
<button ion-button menuToggle>
<ion-icon name="menu"></ion-icon>
</button>
<ion-title>About</ion-title>
<ion-buttons end>
<button ion-button icon-only (click)="presentPopover($event)">
<ion-icon name="more"></ion-icon>
</button>
</ion-buttons>
</ion-toolbar>
</ion-header>
<ion-content>
<div class="about-header">
<img src="assets/img/ionic-logo-white.svg" alt="ionic logo">
</div>
<div padding class="about-info">
<h4>Ionic Conference</h4>
<ion-list no-lines>
<ion-item>
<ion-icon name="calendar" item-start></ion-icon>
<ion-label>Date</ion-label>
<ion-datetime displayFormat="MMM DD, YYYY" max="2056" [(ngModel)]="conferenceDate"></ion-datetime>
</ion-item>
<ion-item>
<ion-icon name="pin" item-start></ion-icon>
<ion-label>Location</ion-label>
<ion-select>
<ion-option value="madison" selected>Madison, WI</ion-option>
<ion-option value="austin">Austin, TX</ion-option>
<ion-option value="chicago">Chicago, IL</ion-option>
<ion-option value="seattle">Seattle, WA</ion-option>
</ion-select>
</ion-item>
</ion-list>
<p>
The Ionic Conference is a one-day conference featuring talks from the
Ionic team. It is focused on Ionic applications being built with
Ionic 2. This includes migrating apps from Ionic 1 to Ionic 2,
Angular concepts, Webpack, Sass, and many other technologies used
in Ionic 2. Tickets are completely sold out, and were expecting
more than 1000 developers making this the largest Ionic
conference ever!
</p>
</div>
</ion-content>

View File

@@ -0,0 +1,40 @@
.about-header {
background-color: #434954;
padding: 16px;
width: 100%;
min-height: 150px;
text-align: center;
}
.about-header img {
max-width: 200px;
min-height: 115px;
margin-left: -15px;
padding: 25px 0 20px 0;
}
.about-info p {
color: #697072;
text-align: left;
}
.about-info ion-icon {
color: color($colors, primary);
width: 20px;
}
.md,
.wp {
.about-info [text-right] {
margin-right: 0;
}
}
.ios .about-info {
text-align: center;
}
.ios .about-info ion-icon {
width: auto;
margin-right: 10px;
}

View File

@@ -0,0 +1,20 @@
import { Component } from '@angular/core';
import { PopoverController } from '@ionic/angular';
import { PopoverPage } from '../about-popover/about-popover';
@Component({
selector: 'page-about',
templateUrl: 'about.html',
styleUrls: ['./about.scss']
})
export class AboutPage {
conferenceDate = '2047-05-17';
constructor(public popoverCtrl: PopoverController) { }
presentPopover(event: Event) {
const popover = this.popoverCtrl.create(PopoverPage);
popover.present({ ev: event });
}
}

View File

@@ -0,0 +1,12 @@
<ion-header>
<ion-toolbar>
<button ion-button menuToggle>
<ion-icon name="menu"></ion-icon>
</button>
<ion-title>Map</ion-title>
</ion-toolbar>
</ion-header>
<ion-content class="map-page">
<div style="height: 100%; width: 100%" #mapCanvas id="map_canvas"></div>
</ion-content>

View File

@@ -0,0 +1,31 @@
page-map ion-content {
background: rgb(229, 227, 223);
}
page-map {
#map_canvas {
height: 500px;
width: 320px;
background-color : transparent;
}
}
page-map ion-content {
background: rgb(229, 227, 223);
}
page-map #map_canvas {
width: 100%;
height: 100%;
opacity: 0;
transition: opacity 150ms ease-in
}
page-map #map_canvas.show-map {
opacity: 1;
}
ion-app._gmaps_cdv_ .nav-decor{
background-color: transparent !important;
}

View File

@@ -0,0 +1,51 @@
import { Component, ViewChild, ElementRef } from '@angular/core';
import { ConferenceData } from '../../providers/conference-data';
declare var google: any;
@Component({
selector: 'page-map',
templateUrl: 'map.html',
styleUrls: ['./map.scss']
})
export class MapPage {
@ViewChild('mapCanvas') mapElement: ElementRef;
constructor(public confData: ConferenceData) {
}
ionViewDidLoad() {
this.confData.getMap().subscribe((mapData: any) => {
const mapEle = this.mapElement.nativeElement;
const map = new google.maps.Map(mapEle, {
center: mapData.find((d: any) => d.center),
zoom: 16
});
mapData.forEach((markerData: any) => {
const infoWindow = new google.maps.InfoWindow({
content: `<h5>${markerData.name}</h5>`
});
const marker = new google.maps.Marker({
position: markerData,
map: map,
title: markerData.name
});
marker.addListener('click', () => {
infoWindow.open(map, marker);
});
});
google.maps.event.addListenerOnce(map, 'idle', () => {
mapEle.classList.add('show-map');
});
});
}
}

View File

@@ -0,0 +1,14 @@
<ion-tabs name="conference">
<ion-tab title="Schedule" icon="calendar">
<ion-nav [root]="tab1Root"></ion-nav>
</ion-tab>
<ion-tab title="Speakers" icon="contacts">
<ion-nav [root]="tab2Root"></ion-nav>
</ion-tab>
<ion-tab title="Map" icon="map">
<ion-nav [root]="tab3Root"></ion-nav>
</ion-tab>
<ion-tab title="About" icon="information-circle">
<ion-nav [root]="tab4Root"></ion-nav>
</ion-tab>
</ion-tabs>

View File

@@ -0,0 +1,7 @@
.tabbar {
justify-content: center;
}
.tab-button {
max-width: 200px;
}

View File

@@ -0,0 +1,28 @@
import { Component } from '@angular/core';
import { AboutPage } from '../about/about';
import { MapPage } from '../map/map';
// import { SchedulePage } from '../schedule/schedule';
// import { SpeakerListPage } from '../speaker-list/speaker-list';
@Component({
templateUrl: 'tabs-page.html'
})
export class TabsPage {
// set the root pages for each tab
tab1Root: any = AboutPage;
tab2Root: any = AboutPage;
tab3Root: any = MapPage;
tab4Root: any = AboutPage;
mySelectedIndex: number;
/*constructor(navParams: NavParams) {
this.mySelectedIndex = navParams.data.tabIndex || 0;
}
*/
constructor() {
this.mySelectedIndex = 0;
}
}

View File

@@ -0,0 +1,155 @@
import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
import { UserData } from './user-data';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import 'rxjs/add/observable/of';
@Injectable()
export class ConferenceData {
data: any;
constructor(public http: Http, public user: UserData) { }
load(): any {
if (this.data) {
return Observable.of(this.data);
} else {
return this.http.get('assets/data/data.json')
.map(this.processData, this);
}
}
processData(data: any) {
// just some good 'ol JS fun with objects and arrays
// build up the data by linking speakers to sessions
this.data = data.json();
this.data.tracks = [];
// loop through each day in the schedule
this.data.schedule.forEach((day: any) => {
// loop through each timeline group in the day
day.groups.forEach((group: any) => {
// loop through each session in the timeline group
group.sessions.forEach((session: any) => {
session.speakers = [];
if (session.speakerNames) {
session.speakerNames.forEach((speakerName: any) => {
const speaker = this.data.speakers.find((s: any) => s.name === speakerName);
if (speaker) {
session.speakers.push(speaker);
speaker.sessions = speaker.sessions || [];
speaker.sessions.push(session);
}
});
}
if (session.tracks) {
session.tracks.forEach((track: any) => {
if (this.data.tracks.indexOf(track) < 0) {
this.data.tracks.push(track);
}
});
}
});
});
});
return this.data;
}
getTimeline(dayIndex: number, queryText = '', excludeTracks: any[] = [], segment = 'all') {
return this.load().map((data: any) => {
const day = data.schedule[dayIndex];
day.shownSessions = 0;
queryText = queryText.toLowerCase().replace(/,|\.|-/g, ' ');
const queryWords = queryText.split(' ').filter(w => !!w.trim().length);
day.groups.forEach((group: any) => {
group.hide = true;
group.sessions.forEach((session: any) => {
// check if this session should show or not
this.filterSession(session, queryWords, excludeTracks, segment);
if (!session.hide) {
// if this session is not hidden then this group should show
group.hide = false;
day.shownSessions++;
}
});
});
return day;
});
}
filterSession(session: any, queryWords: string[], excludeTracks: any[], segment: string) {
let matchesQueryText = false;
if (queryWords.length) {
// of any query word is in the session name than it passes the query test
queryWords.forEach((queryWord: string) => {
if (session.name.toLowerCase().indexOf(queryWord) > -1) {
matchesQueryText = true;
}
});
} else {
// if there are no query words then this session passes the query test
matchesQueryText = true;
}
// if any of the sessions tracks are not in the
// exclude tracks then this session passes the track test
let matchesTracks = false;
session.tracks.forEach((trackName: string) => {
if (excludeTracks.indexOf(trackName) === -1) {
matchesTracks = true;
}
});
// if the segement is 'favorites', but session is not a user favorite
// then this session does not pass the segment test
let matchesSegment = false;
if (segment === 'favorites') {
if (this.user.hasFavorite(session.name)) {
matchesSegment = true;
}
} else {
matchesSegment = true;
}
// all tests must be true if it should not be hidden
session.hide = !(matchesQueryText && matchesTracks && matchesSegment);
}
getSpeakers() {
return this.load().map((data: any) => {
return data.speakers.sort((a: any, b: any) => {
const aName = a.name.split(' ').pop();
const bName = b.name.split(' ').pop();
return aName.localeCompare(bName);
});
});
}
getTracks() {
return this.load().map((data: any) => {
return data.tracks.sort();
});
}
getMap() {
return this.load().map((data: any) => {
return data.map;
});
}
}

View File

@@ -0,0 +1,72 @@
import { Injectable } from '@angular/core';
import { Events } from '@ionic/angular';
import { Storage } from '@ionic/storage';
@Injectable()
export class UserData {
_favorites: string[] = [];
HAS_LOGGED_IN = 'hasLoggedIn';
HAS_SEEN_TUTORIAL = 'hasSeenTutorial';
constructor(
public events: Events,
public storage: Storage
) {}
hasFavorite(sessionName: string): boolean {
return (this._favorites.indexOf(sessionName) > -1);
}
addFavorite(sessionName: string): void {
this._favorites.push(sessionName);
}
removeFavorite(sessionName: string): void {
const index = this._favorites.indexOf(sessionName);
if (index > -1) {
this._favorites.splice(index, 1);
}
}
login(username: string): void {
this.storage.set(this.HAS_LOGGED_IN, true);
this.setUsername(username);
this.events.publish('user:login');
}
signup(username: string): void {
this.storage.set(this.HAS_LOGGED_IN, true);
this.setUsername(username);
this.events.publish('user:signup');
}
logout(): void {
this.storage.remove(this.HAS_LOGGED_IN);
this.storage.remove('username');
this.events.publish('user:logout');
}
setUsername(username: string): void {
this.storage.set('username', username);
}
getUsername(): Promise<string> {
return this.storage.get('username').then((value) => {
return value;
});
}
hasLoggedIn(): Promise<boolean> {
return this.storage.get(this.HAS_LOGGED_IN).then((value) => {
return value === true;
});
}
checkHasSeenTutorial(): Promise<string> {
return this.storage.get(this.HAS_SEEN_TUTORIAL).then((value) => {
return value;
});
}
}

View File

@@ -1,6 +1,5 @@
{
"rulesDirectory": [
"node_modules/codelyzer"
],
"rules": {
"arrow-return-shorthand": true,