diff --git a/packages/demos/conference-app/angular/package-lock.json b/packages/demos/conference-app/angular/package-lock.json index 5d8e1ce6cd..427bce1b3d 100644 --- a/packages/demos/conference-app/angular/package-lock.json +++ b/packages/demos/conference-app/angular/package-lock.json @@ -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", diff --git a/packages/demos/conference-app/angular/package.json b/packages/demos/conference-app/angular/package.json index 808e5a1fe0..3da9e3baa9 100644 --- a/packages/demos/conference-app/angular/package.json +++ b/packages/demos/conference-app/angular/package.json @@ -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" diff --git a/packages/demos/conference-app/angular/src/app/app.component.html b/packages/demos/conference-app/angular/src/app/app.component.html index debb0fde42..87f58eca29 100644 --- a/packages/demos/conference-app/angular/src/app/app.component.html +++ b/packages/demos/conference-app/angular/src/app/app.component.html @@ -1,3 +1,3 @@ - Hello World + \ No newline at end of file diff --git a/packages/demos/conference-app/angular/src/app/app.component.css b/packages/demos/conference-app/angular/src/app/app.component.scss similarity index 100% rename from packages/demos/conference-app/angular/src/app/app.component.css rename to packages/demos/conference-app/angular/src/app/app.component.scss diff --git a/packages/demos/conference-app/angular/src/app/app.component.ts b/packages/demos/conference-app/angular/src/app/app.component.ts index 7b0f672831..f95e79ad79 100644 --- a/packages/demos/conference-app/angular/src/app/app.component.ts +++ b/packages/demos/conference-app/angular/src/app/app.component.ts @@ -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; } diff --git a/packages/demos/conference-app/angular/src/app/app.module.ts b/packages/demos/conference-app/angular/src/app/app.module.ts index 1694a384dd..17c99a41f6 100644 --- a/packages/demos/conference-app/angular/src/app/app.module.ts +++ b/packages/demos/conference-app/angular/src/app/app.module.ts @@ -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], diff --git a/packages/demos/conference-app/angular/src/index.html b/packages/demos/conference-app/angular/src/index.html index 0450fa57c3..4ae119d549 100644 --- a/packages/demos/conference-app/angular/src/index.html +++ b/packages/demos/conference-app/angular/src/index.html @@ -7,6 +7,7 @@ + diff --git a/packages/demos/conference-app/angular/src/interfaces/user-options.ts b/packages/demos/conference-app/angular/src/interfaces/user-options.ts new file mode 100644 index 0000000000..16437e175d --- /dev/null +++ b/packages/demos/conference-app/angular/src/interfaces/user-options.ts @@ -0,0 +1,5 @@ + +export interface UserOptions { + username: string; + password: string; +} diff --git a/packages/demos/conference-app/angular/src/pages/about-popover/about-popover.ts b/packages/demos/conference-app/angular/src/pages/about-popover/about-popover.ts new file mode 100644 index 0000000000..94be471add --- /dev/null +++ b/packages/demos/conference-app/angular/src/pages/about-popover/about-popover.ts @@ -0,0 +1,31 @@ +import { Component } from '@angular/core'; + +import { PublicNav } from '@ionic/core'; +import { App } from '@ionic/angular'; + + +@Component({ + template: ` + + + + + + + + ` +}) +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(); + } +} diff --git a/packages/demos/conference-app/angular/src/pages/about/about.html b/packages/demos/conference-app/angular/src/pages/about/about.html new file mode 100644 index 0000000000..af23fe3e7e --- /dev/null +++ b/packages/demos/conference-app/angular/src/pages/about/about.html @@ -0,0 +1,51 @@ + + + + About + + + + + + + +
+ ionic logo +
+
+

Ionic Conference

+ + + + + Date + + + + + + Location + + Madison, WI + Austin, TX + Chicago, IL + Seattle, WA + + + + +

+ 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 we’re expecting + more than 1000 developers – making this the largest Ionic + conference ever! +

+
+
diff --git a/packages/demos/conference-app/angular/src/pages/about/about.scss b/packages/demos/conference-app/angular/src/pages/about/about.scss new file mode 100644 index 0000000000..a366ec44be --- /dev/null +++ b/packages/demos/conference-app/angular/src/pages/about/about.scss @@ -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; +} diff --git a/packages/demos/conference-app/angular/src/pages/about/about.ts b/packages/demos/conference-app/angular/src/pages/about/about.ts new file mode 100644 index 0000000000..4bfc4bbec8 --- /dev/null +++ b/packages/demos/conference-app/angular/src/pages/about/about.ts @@ -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 }); + } +} diff --git a/packages/demos/conference-app/angular/src/pages/map/map.html b/packages/demos/conference-app/angular/src/pages/map/map.html new file mode 100644 index 0000000000..61030405a2 --- /dev/null +++ b/packages/demos/conference-app/angular/src/pages/map/map.html @@ -0,0 +1,12 @@ + + + + Map + + + + +
+
diff --git a/packages/demos/conference-app/angular/src/pages/map/map.scss b/packages/demos/conference-app/angular/src/pages/map/map.scss new file mode 100644 index 0000000000..ca5d2bb696 --- /dev/null +++ b/packages/demos/conference-app/angular/src/pages/map/map.scss @@ -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; +} diff --git a/packages/demos/conference-app/angular/src/pages/map/map.ts b/packages/demos/conference-app/angular/src/pages/map/map.ts new file mode 100644 index 0000000000..d3849e961e --- /dev/null +++ b/packages/demos/conference-app/angular/src/pages/map/map.ts @@ -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: `
${markerData.name}
` + }); + + 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'); + }); + + }); + } +} diff --git a/packages/demos/conference-app/angular/src/pages/tabs-page/tabs-page.html b/packages/demos/conference-app/angular/src/pages/tabs-page/tabs-page.html new file mode 100644 index 0000000000..5c3ec9b738 --- /dev/null +++ b/packages/demos/conference-app/angular/src/pages/tabs-page/tabs-page.html @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/packages/demos/conference-app/angular/src/pages/tabs-page/tabs-page.scss b/packages/demos/conference-app/angular/src/pages/tabs-page/tabs-page.scss new file mode 100644 index 0000000000..924e15aab7 --- /dev/null +++ b/packages/demos/conference-app/angular/src/pages/tabs-page/tabs-page.scss @@ -0,0 +1,7 @@ +.tabbar { + justify-content: center; +} + +.tab-button { + max-width: 200px; +} \ No newline at end of file diff --git a/packages/demos/conference-app/angular/src/pages/tabs-page/tabs-page.ts b/packages/demos/conference-app/angular/src/pages/tabs-page/tabs-page.ts new file mode 100644 index 0000000000..748a8ac511 --- /dev/null +++ b/packages/demos/conference-app/angular/src/pages/tabs-page/tabs-page.ts @@ -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; + } + +} diff --git a/packages/demos/conference-app/angular/src/providers/conference-data.ts b/packages/demos/conference-app/angular/src/providers/conference-data.ts new file mode 100644 index 0000000000..703175e58e --- /dev/null +++ b/packages/demos/conference-app/angular/src/providers/conference-data.ts @@ -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; + }); + } + +} diff --git a/packages/demos/conference-app/angular/src/providers/user-data.ts b/packages/demos/conference-app/angular/src/providers/user-data.ts new file mode 100644 index 0000000000..c5c4c06073 --- /dev/null +++ b/packages/demos/conference-app/angular/src/providers/user-data.ts @@ -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 { + return this.storage.get('username').then((value) => { + return value; + }); + } + + hasLoggedIn(): Promise { + return this.storage.get(this.HAS_LOGGED_IN).then((value) => { + return value === true; + }); + } + + checkHasSeenTutorial(): Promise { + return this.storage.get(this.HAS_SEEN_TUTORIAL).then((value) => { + return value; + }); + } +} diff --git a/packages/demos/conference-app/angular/tslint.json b/packages/demos/conference-app/angular/tslint.json index a2e30eff29..2b9f506259 100644 --- a/packages/demos/conference-app/angular/tslint.json +++ b/packages/demos/conference-app/angular/tslint.json @@ -1,6 +1,5 @@ { "rulesDirectory": [ - "node_modules/codelyzer" ], "rules": { "arrow-return-shorthand": true,