From b616f407faa726670b33e291a34a2264f1fa5a7b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E2=80=9CYoung?= <“hogusong1@gmail.com”>
Date: Mon, 10 Dec 2018 11:02:57 -0500
Subject: [PATCH 01/25] Initial commit
---
package-lock.json | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index 57a8f2055..d52b40cae 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -784,7 +784,7 @@
"resolved": "https://registry.npmjs.org/@ionic-native/core/-/core-5.0.0-beta.15.tgz",
"integrity": "sha512-71Fiy/UlchvjkWpRaZ90E9hrrf+v/x+CCl6JPGg3nLGYqrVtja5xJCU0jVsGQMrYdgfcwK9d1KLC/3GPvOQK1w==",
"requires": {
- "@types/cordova": "0.0.34"
+ "@types/cordova": "^0.0.34"
}
},
"@ionic-native/in-app-browser": {
@@ -792,7 +792,7 @@
"resolved": "https://registry.npmjs.org/@ionic-native/in-app-browser/-/in-app-browser-5.0.0-beta.15.tgz",
"integrity": "sha512-C6OO6SUwKeTsDeyN1DpTgCidrcPo1Ny2HOYQpAG4/8Wlkbl0R2Z3vK63wZuRf3hR+4VNge/SRWsXT6qRTFPa8g==",
"requires": {
- "@types/cordova": "0.0.34"
+ "@types/cordova": "^0.0.34"
}
},
"@ionic-native/splash-screen": {
@@ -800,7 +800,7 @@
"resolved": "https://registry.npmjs.org/@ionic-native/splash-screen/-/splash-screen-5.0.0-beta.15.tgz",
"integrity": "sha512-ZoMw1kmTtKP0ylmtkr5KyJtmrUnJbtO+DIeUp7R/58wdKlvY7nq/y5oNAdmJKuJ6Oe88LqpTz5jm+V2DzXr/gA==",
"requires": {
- "@types/cordova": "0.0.34"
+ "@types/cordova": "^0.0.34"
}
},
"@ionic-native/status-bar": {
@@ -808,7 +808,7 @@
"resolved": "https://registry.npmjs.org/@ionic-native/status-bar/-/status-bar-5.0.0-beta.15.tgz",
"integrity": "sha512-FSKOCeLq8H9JvdjY7v4wYJCK8Lj/PAnDc+ddvA1j9u2vXOMDABnpTXc+WLssBf3El9n9LPHNa+Kk0nsxV02obA==",
"requires": {
- "@types/cordova": "0.0.34"
+ "@types/cordova": "^0.0.34"
}
},
"@ionic/angular": {
From 11f6cb71120eff7a76bc80510f3d83cbd3b9e808 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E2=80=9CYoung?= <“hogusong1@gmail.com”>
Date: Tue, 18 Dec 2018 23:00:10 -0500
Subject: [PATCH 02/25] update login and signup module: made API request
---
.gitignore | 1 +
package-lock.json | 822 +++++++++++++++++++++++++--
package.json | 3 +
src/app/app.module.ts | 10 +-
src/app/models.ts | 66 +++
src/app/pages/login/login.html | 8 +-
src/app/pages/login/login.ts | 51 +-
src/app/pages/signup/signup.html | 30 +-
src/app/pages/signup/signup.ts | 49 +-
src/app/providers/user-data.ts | 71 ++-
src/assets/data/data.json | 35 +-
src/environments/environment.prod.ts | 3 -
src/environments/environment.ts | 15 -
13 files changed, 1017 insertions(+), 147 deletions(-)
create mode 100644 src/app/models.ts
delete mode 100644 src/environments/environment.prod.ts
delete mode 100644 src/environments/environment.ts
diff --git a/.gitignore b/.gitignore
index 7002d1672..b6cb3e8b8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -21,6 +21,7 @@ npm-debug.log*
coverage/
dist/
node_modules/
+src/environments
tmp/
temp/
hooks/
diff --git a/package-lock.json b/package-lock.json
index d52b40cae..5adfecfb7 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -559,6 +559,11 @@
"tslib": "^1.9.0"
}
},
+ "@angular/fire": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/@angular/fire/-/fire-5.1.1.tgz",
+ "integrity": "sha512-QfLVEhZYW3+3fh2d1z76/vab1GkLnEQWzFQK06D1ZaT8jZsVEdFMIPr7GSTJWAuOdqBRYq14iqzqEkJH3WHzig=="
+ },
"@angular/forms": {
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/@angular/forms/-/forms-7.1.0.tgz",
@@ -779,6 +784,212 @@
}
}
},
+ "@firebase/app": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.3.5.tgz",
+ "integrity": "sha512-DaAlb74yzwXbkFXvfsUVFeurSETPJAvKNtVpAKlS6RThyD+Y+ci1/8JVw4INm2hihbj/edxlAUelg9eoOZNCKA==",
+ "requires": {
+ "@firebase/app-types": "0.3.2",
+ "@firebase/util": "0.2.3",
+ "dom-storage": "2.1.0",
+ "tslib": "1.9.0",
+ "xmlhttprequest": "1.8.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.0.tgz",
+ "integrity": "sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ=="
+ }
+ }
+ },
+ "@firebase/app-types": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.3.2.tgz",
+ "integrity": "sha512-ZD8lTgW07NGgo75bTyBJA8Lt9+NweNzot7lrsBtIvfciwUzaFJLsv2EShqjBeuhF7RpG6YFucJ6m67w5buCtzw=="
+ },
+ "@firebase/auth": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-0.9.0.tgz",
+ "integrity": "sha512-pNxfxFr4/tJluGfmPYUiuy2Tq/ZSRniJlWP4fj1mg+a9r+KevheeISZdWEZwJMosieXeCg+BzY0tvFD9j5ZrDw==",
+ "requires": {
+ "@firebase/auth-types": "0.5.0"
+ }
+ },
+ "@firebase/auth-types": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.5.0.tgz",
+ "integrity": "sha512-DSjtsIjTy5RSiWyGHqiGkLcDgEgFEf2aD2O0t/0+lHmAzxUGrJFO5+IkPNV6i0ffmtiJaXQDJ7z7q4OdypDBCg=="
+ },
+ "@firebase/database": {
+ "version": "0.3.7",
+ "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.3.7.tgz",
+ "integrity": "sha512-BB5L3PqwQVJUdS1WY+sq3eun5n5oimFWolXYl6pyACJwqL2qnPp0cnjK6kOqTsRPPMayZZmfUI38RBDwXaUJhQ==",
+ "requires": {
+ "@firebase/database-types": "0.3.2",
+ "@firebase/logger": "0.1.2",
+ "@firebase/util": "0.2.3",
+ "faye-websocket": "0.11.1",
+ "tslib": "1.9.0"
+ },
+ "dependencies": {
+ "faye-websocket": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz",
+ "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=",
+ "requires": {
+ "websocket-driver": ">=0.5.1"
+ }
+ },
+ "tslib": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.0.tgz",
+ "integrity": "sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ=="
+ }
+ }
+ },
+ "@firebase/database-types": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.3.2.tgz",
+ "integrity": "sha512-9ZYdvYQ6r3aaHJarhUM5Hf6lQWu3ZJme+RR0o8qfBb9L04TL3uNjt+AJFku1ysVPntTn+9GqJjiIB2/OC3JtwA=="
+ },
+ "@firebase/firestore": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-0.9.0.tgz",
+ "integrity": "sha512-ub9BXce75D7t2yQxqopJhqE5YrsdePLg7wP8aMLR2Twe+O89IZqOhdbE0VALjplD2rAWXkOLqf6zYsppu2hh4g==",
+ "requires": {
+ "@firebase/firestore-types": "0.8.0",
+ "@firebase/logger": "0.1.2",
+ "@firebase/webchannel-wrapper": "0.2.11",
+ "grpc": "1.16.1",
+ "tslib": "1.9.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.0.tgz",
+ "integrity": "sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ=="
+ }
+ }
+ },
+ "@firebase/firestore-types": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-0.8.0.tgz",
+ "integrity": "sha512-FdLy2TbZ6aAeT9eDmVMPAFsUqhjN2e+jcdVpl0Pz1W6ElRWWyr30hgTY7xIqIKpMs1iT6IF/8w9CKvI6fPbKxA=="
+ },
+ "@firebase/functions": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.3.3.tgz",
+ "integrity": "sha512-t8CE1AQivqWeDJ1MvaITGn+x6Z78CVnJi3mLz/+2Vx7UwU4HRhkfJcxhrRnnMzWY9OoCJ9j1wUoDsXfKmU546w==",
+ "requires": {
+ "@firebase/functions-types": "0.2.1",
+ "@firebase/messaging-types": "0.2.3",
+ "isomorphic-fetch": "2.2.1",
+ "tslib": "1.9.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.0.tgz",
+ "integrity": "sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ=="
+ }
+ }
+ },
+ "@firebase/functions-types": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.2.1.tgz",
+ "integrity": "sha512-hH78lgDoa5E1peBSXnfQyshENmh/5a8aia+S4Ocjc53OUWRJ4VqYwWUV5gE4b2mqVKTpN4akJccLq2pCnNGZcA=="
+ },
+ "@firebase/logger": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.1.2.tgz",
+ "integrity": "sha512-4NHGRIbZChg9vDUxynzYrw14G/U/71v0pea+jXPicrpflL0N0PSCULXGGSTmzn9fqZ5W5djEwVLBCVwKndXG8w=="
+ },
+ "@firebase/messaging": {
+ "version": "0.3.7",
+ "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.3.7.tgz",
+ "integrity": "sha512-8tZgRVJuvmFe5HDUiKvGAsK/jehrMnoUx95XU3RkZHX2D5QHjXAvvXIfFQ118EtG5/whZoEo1nCjEHAd9mSalA==",
+ "requires": {
+ "@firebase/messaging-types": "0.2.3",
+ "@firebase/util": "0.2.3",
+ "tslib": "1.9.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.0.tgz",
+ "integrity": "sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ=="
+ }
+ }
+ },
+ "@firebase/messaging-types": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/@firebase/messaging-types/-/messaging-types-0.2.3.tgz",
+ "integrity": "sha512-avwCgZzcx2uxIW/wT3p3G/EyHftIrvMyiTS7AA7dxDlzfx+8dpAeTsb1+jsHJT4F6foSh5HG17Nw8sDzYuxH1Q=="
+ },
+ "@firebase/polyfill": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/@firebase/polyfill/-/polyfill-0.3.3.tgz",
+ "integrity": "sha512-xs8IZf1WEbufYXyfV8YjmiFZOaujRRq0T03NteihYfuGVTTym7z5SmvLvEHLEUjf2fgeobPEzZ2JgrCQHS+QHw==",
+ "requires": {
+ "core-js": "2.5.5",
+ "promise-polyfill": "7.1.2",
+ "whatwg-fetch": "2.0.4"
+ },
+ "dependencies": {
+ "core-js": {
+ "version": "2.5.5",
+ "resolved": "http://registry.npmjs.org/core-js/-/core-js-2.5.5.tgz",
+ "integrity": "sha1-sU3ek2xkDAV5prUMq8wTLdYSfjs="
+ },
+ "whatwg-fetch": {
+ "version": "2.0.4",
+ "resolved": "http://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz",
+ "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng=="
+ }
+ }
+ },
+ "@firebase/storage": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.2.4.tgz",
+ "integrity": "sha512-uqA6CoZYkugk69ImqB16VBPP7JRPRfZwcUP9CsE0GPVGQkZQQfBGwzIyEoFA8lUfVLrvxQiL0sQvHUXZ945LMg==",
+ "requires": {
+ "@firebase/storage-types": "0.2.3",
+ "tslib": "1.9.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.0.tgz",
+ "integrity": "sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ=="
+ }
+ }
+ },
+ "@firebase/storage-types": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.2.3.tgz",
+ "integrity": "sha512-RaZeam2LgsB7xwAtOQr4G0Geoyf7D5TnLF3a12By6Rh0Z9PqBSlWn0SVYGW3SkmxIdqvWZMZvCyamUlqQvQzWw=="
+ },
+ "@firebase/util": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/@firebase/util/-/util-0.2.3.tgz",
+ "integrity": "sha512-ngAG4qYpcnnshUKbBlEiR9+j37U7dTrTVJlS4v7ahW1ROuyLT9xj6cWyHQANzcTR2yKLmEv3yfwoZwedz7V0oQ==",
+ "requires": {
+ "tslib": "1.9.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.0.tgz",
+ "integrity": "sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ=="
+ }
+ }
+ },
+ "@firebase/webchannel-wrapper": {
+ "version": "0.2.11",
+ "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.2.11.tgz",
+ "integrity": "sha512-WyMXDxk/WZ+f2lOCeEvDWUce2f5Kk2sNfvArK8f+PlUnzFdy/MBzLXrmbMgyZXP7GP4ooUxYV8Sdmoh1hGk1Uw=="
+ },
"@ionic-native/core": {
"version": "5.0.0-beta.15",
"resolved": "https://registry.npmjs.org/@ionic-native/core/-/core-5.0.0-beta.15.tgz",
@@ -1507,6 +1718,14 @@
"integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
"dev": true
},
+ "angularfire2": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/angularfire2/-/angularfire2-5.1.1.tgz",
+ "integrity": "sha512-xW37qu3y9yZyqEYF/j2CIMaavwaufhlESfVKQ6FVCcSI2XaZ7bwlNwLJ6AIMyUL2uuf5P+iHyh9HnnJJkmCyFQ==",
+ "requires": {
+ "@angular/fire": "5.1.1"
+ }
+ },
"ansi-colors": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.1.tgz",
@@ -1528,8 +1747,7 @@
"ansi-regex": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "dev": true
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
},
"ansi-styles": {
"version": "3.2.1",
@@ -1662,6 +1880,15 @@
"dev": true,
"optional": true
},
+ "ascli": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/ascli/-/ascli-1.0.1.tgz",
+ "integrity": "sha1-vPpZdKYvGOgcq660lzKrSoj5Brw=",
+ "requires": {
+ "colour": "~0.7.1",
+ "optjs": "~3.2.2"
+ }
+ },
"asn1": {
"version": "0.2.4",
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
@@ -1916,8 +2143,7 @@
"balanced-match": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
- "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
- "dev": true
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
},
"base": {
"version": "0.11.2",
@@ -2103,7 +2329,6 @@
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
@@ -2310,6 +2535,14 @@
"integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=",
"dev": true
},
+ "bytebuffer": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/bytebuffer/-/bytebuffer-5.0.1.tgz",
+ "integrity": "sha1-WC7qSxqHO20CCkjVjfhfC7ps/d0=",
+ "requires": {
+ "long": "~3"
+ }
+ },
"bytes": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
@@ -2362,9 +2595,7 @@
"camelcase": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
- "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
- "dev": true,
- "optional": true
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8="
},
"camelcase-keys": {
"version": "2.1.0",
@@ -2532,7 +2763,6 @@
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
"integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
- "dev": true,
"requires": {
"string-width": "^1.0.1",
"strip-ansi": "^3.0.1",
@@ -2566,8 +2796,7 @@
"code-point-at": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
- "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
- "dev": true
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
},
"codelyzer": {
"version": "4.5.0",
@@ -2621,6 +2850,11 @@
"integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=",
"dev": true
},
+ "colour": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/colour/-/colour-0.7.1.tgz",
+ "integrity": "sha1-nLFpkX7F0SwHNtPoaFdG3xyt93g="
+ },
"combine-lists": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/combine-lists/-/combine-lists-1.0.1.tgz",
@@ -2701,8 +2935,7 @@
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
- "dev": true
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
},
"concat-stream": {
"version": "1.6.2",
@@ -3643,8 +3876,7 @@
"decamelize": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
- "dev": true
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
},
"decode-uri-component": {
"version": "0.2.0",
@@ -3889,6 +4121,11 @@
"void-elements": "^2.0.0"
}
},
+ "dom-storage": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/dom-storage/-/dom-storage-2.1.0.tgz",
+ "integrity": "sha512-g6RpyWXzl0RR6OTElHKBl7nwnK87GUyZMYC7JWsB/IA73vpqK2K6LT39x4VepLxlSsWBFrPVLnsSR5Jyty0+2Q=="
+ },
"domain-browser": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
@@ -3969,7 +4206,6 @@
"version": "0.1.12",
"resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
"integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=",
- "dev": true,
"requires": {
"iconv-lite": "~0.4.13"
}
@@ -4701,6 +4937,21 @@
"locate-path": "^2.0.0"
}
},
+ "firebase": {
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/firebase/-/firebase-5.7.0.tgz",
+ "integrity": "sha512-8sQYXCUbUuzpyZS+XpBogstQE/7lvX6tPWtrUH0Cf4mH7flH/Sue5GUvZzwBpkgKOrMpI+clzuoYm/ffGi/TjQ==",
+ "requires": {
+ "@firebase/app": "0.3.5",
+ "@firebase/auth": "0.9.0",
+ "@firebase/database": "0.3.7",
+ "@firebase/firestore": "0.9.0",
+ "@firebase/functions": "0.3.3",
+ "@firebase/messaging": "0.3.7",
+ "@firebase/polyfill": "0.3.3",
+ "@firebase/storage": "0.2.4"
+ }
+ },
"flush-write-stream": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz",
@@ -4825,8 +5076,7 @@
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
- "dev": true
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
},
"fsevents": {
"version": "1.2.4",
@@ -5436,7 +5686,6 @@
"version": "7.1.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
"integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
- "dev": true,
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
@@ -5538,6 +5787,422 @@
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
"integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA=="
},
+ "grpc": {
+ "version": "1.16.1",
+ "resolved": "https://registry.npmjs.org/grpc/-/grpc-1.16.1.tgz",
+ "integrity": "sha512-7uHN1Nd3UqfvwgQ6f5U3+EZb/0iuHJ9mbPH+ydaTkszJsUi3nwdz6DuSh0eJwYVXXn6Gojv2khiQAadMongGKg==",
+ "requires": {
+ "lodash": "^4.17.5",
+ "nan": "^2.0.0",
+ "node-pre-gyp": "^0.12.0",
+ "protobufjs": "^5.0.3"
+ },
+ "dependencies": {
+ "abbrev": {
+ "version": "1.1.1",
+ "bundled": true
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "bundled": true
+ },
+ "aproba": {
+ "version": "1.2.0",
+ "bundled": true
+ },
+ "are-we-there-yet": {
+ "version": "1.1.5",
+ "bundled": true,
+ "requires": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^2.0.6"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "bundled": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "chownr": {
+ "version": "1.1.1",
+ "bundled": true
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "bundled": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "bundled": true
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "bundled": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "debug": {
+ "version": "2.6.9",
+ "bundled": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "deep-extend": {
+ "version": "0.6.0",
+ "bundled": true
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "detect-libc": {
+ "version": "1.0.3",
+ "bundled": true
+ },
+ "fs-minipass": {
+ "version": "1.2.5",
+ "bundled": true,
+ "requires": {
+ "minipass": "^2.2.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "gauge": {
+ "version": "2.7.4",
+ "bundled": true,
+ "requires": {
+ "aproba": "^1.0.3",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.0",
+ "object-assign": "^4.1.0",
+ "signal-exit": "^3.0.0",
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wide-align": "^1.1.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.3",
+ "bundled": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "bundled": true
+ },
+ "iconv-lite": {
+ "version": "0.4.24",
+ "bundled": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "ignore-walk": {
+ "version": "3.0.1",
+ "bundled": true,
+ "requires": {
+ "minimatch": "^3.0.4"
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "bundled": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "bundled": true
+ },
+ "ini": {
+ "version": "1.3.5",
+ "bundled": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "bundled": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "bundled": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "bundled": true
+ },
+ "minipass": {
+ "version": "2.3.5",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.0"
+ }
+ },
+ "minizlib": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "minipass": "^2.2.1"
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "bundled": true,
+ "requires": {
+ "minimist": "0.0.8"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.8",
+ "bundled": true
+ }
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "needle": {
+ "version": "2.2.4",
+ "bundled": true,
+ "requires": {
+ "debug": "^2.1.2",
+ "iconv-lite": "^0.4.4",
+ "sax": "^1.2.4"
+ }
+ },
+ "node-pre-gyp": {
+ "version": "0.12.0",
+ "bundled": true,
+ "requires": {
+ "detect-libc": "^1.0.2",
+ "mkdirp": "^0.5.1",
+ "needle": "^2.2.1",
+ "nopt": "^4.0.1",
+ "npm-packlist": "^1.1.6",
+ "npmlog": "^4.0.2",
+ "rc": "^1.2.7",
+ "rimraf": "^2.6.1",
+ "semver": "^5.3.0",
+ "tar": "^4"
+ }
+ },
+ "nopt": {
+ "version": "4.0.1",
+ "bundled": true,
+ "requires": {
+ "abbrev": "1",
+ "osenv": "^0.1.4"
+ }
+ },
+ "npm-bundled": {
+ "version": "1.0.5",
+ "bundled": true
+ },
+ "npm-packlist": {
+ "version": "1.1.12",
+ "bundled": true,
+ "requires": {
+ "ignore-walk": "^3.0.1",
+ "npm-bundled": "^1.0.1"
+ }
+ },
+ "npmlog": {
+ "version": "4.1.2",
+ "bundled": true,
+ "requires": {
+ "are-we-there-yet": "~1.1.2",
+ "console-control-strings": "~1.1.0",
+ "gauge": "~2.7.3",
+ "set-blocking": "~2.0.0"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "bundled": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "bundled": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "osenv": {
+ "version": "0.1.5",
+ "bundled": true,
+ "requires": {
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.0"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "rc": {
+ "version": "1.2.8",
+ "bundled": true,
+ "requires": {
+ "deep-extend": "^0.6.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.2",
+ "bundled": true,
+ "requires": {
+ "glob": "^7.0.5"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "bundled": true
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "bundled": true
+ },
+ "sax": {
+ "version": "1.2.4",
+ "bundled": true
+ },
+ "semver": {
+ "version": "5.6.0",
+ "bundled": true
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "bundled": true
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "bundled": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "bundled": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "bundled": true
+ },
+ "tar": {
+ "version": "4.4.8",
+ "bundled": true,
+ "requires": {
+ "chownr": "^1.1.1",
+ "fs-minipass": "^1.2.5",
+ "minipass": "^2.3.4",
+ "minizlib": "^1.1.1",
+ "mkdirp": "^0.5.0",
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.2"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "wide-align": {
+ "version": "1.1.3",
+ "bundled": true,
+ "requires": {
+ "string-width": "^1.0.2 || 2"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "yallist": {
+ "version": "3.0.2",
+ "bundled": true
+ }
+ }
+ },
"handle-thing": {
"version": "1.2.5",
"resolved": "http://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz",
@@ -5779,8 +6444,7 @@
"http-parser-js": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.0.tgz",
- "integrity": "sha512-cZdEF7r4gfRIq7ezX9J0T+kQmJNOub71dWbgAXVHDct80TKP4MCETtZQ31xyv38UwgzkWPYF/Xc0ge55dW9Z9w==",
- "dev": true
+ "integrity": "sha512-cZdEF7r4gfRIq7ezX9J0T+kQmJNOub71dWbgAXVHDct80TKP4MCETtZQ31xyv38UwgzkWPYF/Xc0ge55dW9Z9w=="
},
"http-proxy": {
"version": "1.17.0",
@@ -5908,7 +6572,6 @@
"version": "0.4.23",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
"integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
- "dev": true,
"requires": {
"safer-buffer": ">= 2.1.2 < 3"
}
@@ -6067,7 +6730,6 @@
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
- "dev": true,
"requires": {
"once": "^1.3.0",
"wrappy": "1"
@@ -6166,8 +6828,7 @@
"invert-kv": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
- "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
- "dev": true
+ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY="
},
"ionicons": {
"version": "4.4.7",
@@ -6326,7 +6987,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
"integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
- "dev": true,
"requires": {
"number-is-nan": "^1.0.0"
}
@@ -6410,8 +7070,7 @@
"is-stream": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
- "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
- "dev": true
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
},
"is-typedarray": {
"version": "1.0.0",
@@ -6461,6 +7120,15 @@
"resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
"integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
},
+ "isomorphic-fetch": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz",
+ "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=",
+ "requires": {
+ "node-fetch": "^1.0.1",
+ "whatwg-fetch": ">=0.10.0"
+ }
+ },
"isstream": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
@@ -7021,7 +7689,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
"integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
- "dev": true,
"requires": {
"invert-kv": "^1.0.0"
}
@@ -7157,8 +7824,7 @@
"lodash": {
"version": "4.17.11",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
- "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
- "dev": true
+ "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
},
"lodash.assign": {
"version": "4.2.0",
@@ -7281,6 +7947,11 @@
"integrity": "sha1-4PyVEztu8nbNyIh82vJKpvFW+Po=",
"dev": true
},
+ "long": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz",
+ "integrity": "sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s="
+ },
"loose-envify": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
@@ -7612,7 +8283,6 @@
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "dev": true,
"requires": {
"brace-expansion": "^1.1.7"
}
@@ -7758,8 +8428,7 @@
"nan": {
"version": "2.11.1",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz",
- "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==",
- "optional": true
+ "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA=="
},
"nanomatch": {
"version": "1.2.13",
@@ -7803,6 +8472,15 @@
"integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
"dev": true
},
+ "node-fetch": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz",
+ "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==",
+ "requires": {
+ "encoding": "^0.1.11",
+ "is-stream": "^1.0.1"
+ }
+ },
"node-fetch-npm": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz",
@@ -8080,8 +8758,7 @@
"number-is-nan": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
- "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
- "dev": true
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
},
"oauth-sign": {
"version": "0.9.0",
@@ -8191,7 +8868,6 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
- "dev": true,
"requires": {
"wrappy": "1"
}
@@ -8246,6 +8922,11 @@
"wordwrap": "~1.0.0"
}
},
+ "optjs": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/optjs/-/optjs-3.2.2.tgz",
+ "integrity": "sha1-aabOicRCpEQDFBrS+bNwvVu29O4="
+ },
"original": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz",
@@ -8271,8 +8952,6 @@
"version": "1.4.0",
"resolved": "http://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
"integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
- "dev": true,
- "optional": true,
"requires": {
"lcid": "^1.0.0"
}
@@ -8826,6 +9505,11 @@
"integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
"dev": true
},
+ "promise-polyfill": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-7.1.2.tgz",
+ "integrity": "sha512-FuEc12/eKqqoRYIGBrUptCBRhobL19PS2U31vMNTfyck1FxPyMfgsXyW4Mav85y/ZN1hop3hOwRlUDok23oYfQ=="
+ },
"promise-retry": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-1.1.1.tgz",
@@ -8836,6 +9520,38 @@
"retry": "^0.10.0"
}
},
+ "protobufjs": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-5.0.3.tgz",
+ "integrity": "sha512-55Kcx1MhPZX0zTbVosMQEO5R6/rikNXd9b6RQK4KSPcrSIIwoXTtebIczUrXlwaSrbz4x8XUVThGPob1n8I4QA==",
+ "requires": {
+ "ascli": "~1",
+ "bytebuffer": "~5",
+ "glob": "^7.0.5",
+ "yargs": "^3.10.0"
+ },
+ "dependencies": {
+ "y18n": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
+ "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE="
+ },
+ "yargs": {
+ "version": "3.32.0",
+ "resolved": "http://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz",
+ "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=",
+ "requires": {
+ "camelcase": "^2.0.1",
+ "cliui": "^3.0.3",
+ "decamelize": "^1.1.1",
+ "os-locale": "^1.4.0",
+ "string-width": "^1.0.1",
+ "window-size": "^0.1.4",
+ "y18n": "^3.2.0"
+ }
+ }
+ }
+ },
"protoduck": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/protoduck/-/protoduck-5.0.1.tgz",
@@ -9526,8 +10242,7 @@
"safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
- "dev": true
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
"sass-graph": {
"version": "2.2.4",
@@ -10433,7 +11148,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
"integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "dev": true,
"requires": {
"code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0",
@@ -10452,7 +11166,6 @@
"version": "3.0.1",
"resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
"integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
- "dev": true,
"requires": {
"ansi-regex": "^2.0.0"
}
@@ -11735,7 +12448,6 @@
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz",
"integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=",
- "dev": true,
"requires": {
"http-parser-js": ">=0.4.0",
"websocket-extensions": ">=0.1.1"
@@ -11744,8 +12456,12 @@
"websocket-extensions": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz",
- "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==",
- "dev": true
+ "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg=="
+ },
+ "whatwg-fetch": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz",
+ "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q=="
},
"when": {
"version": "3.6.4",
@@ -11778,6 +12494,11 @@
"string-width": "^1.0.2 || 2"
}
},
+ "window-size": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz",
+ "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY="
+ },
"wordwrap": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
@@ -11797,7 +12518,6 @@
"version": "2.1.0",
"resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
"integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
- "dev": true,
"requires": {
"string-width": "^1.0.1",
"strip-ansi": "^3.0.1"
@@ -11806,8 +12526,7 @@
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
- "dev": true
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
},
"write-file-atomic": {
"version": "2.3.0",
@@ -11855,6 +12574,11 @@
"integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=",
"dev": true
},
+ "xmlhttprequest": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz",
+ "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw="
+ },
"xmlhttprequest-ssl": {
"version": "1.5.5",
"resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz",
diff --git a/package.json b/package.json
index 5a8f47990..dc5df4d9c 100644
--- a/package.json
+++ b/package.json
@@ -19,6 +19,7 @@
"dependencies": {
"@angular/common": "~7.1.0",
"@angular/core": "~7.1.0",
+ "@angular/fire": "^5.1.1",
"@angular/forms": "~7.1.0",
"@angular/http": "~7.1.0",
"@angular/platform-browser": "~7.1.0",
@@ -32,6 +33,7 @@
"@ionic-native/status-bar": "5.0.0-beta.15",
"@ionic/angular": "4.0.0-beta.16",
"@ionic/storage": "^2.1.3",
+ "angularfire2": "^5.1.1",
"cordova-android": "^7.1.1",
"cordova-ios": "^4.5.5",
"cordova-plugin-device": "^2.0.2",
@@ -42,6 +44,7 @@
"cordova-plugin-statusbar": "^2.4.2",
"cordova-plugin-whitelist": "^1.3.2",
"core-js": "^2.5.7",
+ "firebase": "^5.7.0",
"rxjs": "6.3.3",
"sw-toolbox": "3.6.0",
"zone.js": "^0.8.26"
diff --git a/src/app/app.module.ts b/src/app/app.module.ts
index 6ebafab6d..7d14b4f77 100644
--- a/src/app/app.module.ts
+++ b/src/app/app.module.ts
@@ -7,10 +7,13 @@ import { StatusBar } from '@ionic-native/status-bar/ngx';
import { IonicModule } from '@ionic/angular';
import { IonicStorageModule } from '@ionic/storage';
+import { environment } from '../environments/environment';
+import { AngularFireModule } from 'angularfire2';
+import { AngularFirestoreModule } from 'angularfire2/firestore';
+import { AngularFireAuthModule } from 'angularfire2/auth';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { ServiceWorkerModule } from '@angular/service-worker';
-import { environment } from '../environments/environment';
@NgModule({
imports: [
@@ -21,7 +24,10 @@ import { environment } from '../environments/environment';
IonicStorageModule.forRoot(),
ServiceWorkerModule.register('ngsw-worker.js', {
enabled: environment.production
- })
+ }),
+ AngularFireModule.initializeApp(environment.firebase, 'ionic-conference'),
+ AngularFireAuthModule,
+ AngularFirestoreModule,
],
declarations: [AppComponent],
providers: [InAppBrowser, SplashScreen, StatusBar],
diff --git a/src/app/models.ts b/src/app/models.ts
new file mode 100644
index 000000000..b5ccbec7d
--- /dev/null
+++ b/src/app/models.ts
@@ -0,0 +1,66 @@
+// These are the categories for filtering stuff
+export interface Track {
+ id?: string;
+ name: string;
+}
+
+export interface Speaker {
+ id?: string;
+ name: string;
+ profilePic?: string;
+ twitter?: string;
+ about?: string;
+ location?: string;
+ email: string;
+ phone?: string;
+ sessions?: IdName[]; // session id & name
+}
+
+export interface Session {
+ id?: string;
+ name: string;
+ date: string; // 2018-12-06
+ timeStart: string; // 15:30 for 3:30pm
+ timeEnd?: string;
+ location?: string;
+ description?: string;
+ speakerIDs: string[]; // speaker's id
+ tracks: string[]; // name of track
+}
+
+export interface IdName {
+ id: string;
+ name: string;
+}
+
+export interface Map {
+ id?: string;
+ name: string;
+ lat: number;
+ lng: number;
+ center?: boolean;
+}
+
+export interface UserOptions {
+ id?: string;
+ username: string;
+ password: string;
+ email: string;
+ favorites: IdName[]; // session's id and name.
+}
+
+export interface PartOfDay {
+ partOfDay: string; // morning, afternoon, evening, overnight
+ timeFrom: string;
+ timeTo: string;
+}
+
+export interface Schedule {
+ date: string; // 2018-12-06
+ groups: SessionGroup[];
+}
+
+export interface SessionGroup {
+ time: PartOfDay;
+ sessions: Session[];
+}
diff --git a/src/app/pages/login/login.html b/src/app/pages/login/login.html
index 4b7d92aa8..825fd6ee4 100644
--- a/src/app/pages/login/login.html
+++ b/src/app/pages/login/login.html
@@ -17,25 +17,25 @@
Username
-
-
+
Username is required
Password
-
+
-
+
Password is required
diff --git a/src/app/pages/login/login.ts b/src/app/pages/login/login.ts
index 19222240f..94977365d 100644
--- a/src/app/pages/login/login.ts
+++ b/src/app/pages/login/login.ts
@@ -1,12 +1,9 @@
-import { Component, ViewEncapsulation } from '@angular/core';
+import { Component, ViewEncapsulation, OnInit } from '@angular/core';
import { NgForm } from '@angular/forms';
import { Router } from '@angular/router';
import { UserData } from '../../providers/user-data';
-
-import { UserOptions } from '../../interfaces/user-options';
-
-
+import { UserOptions } from '../../models';
@Component({
selector: 'page-login',
@@ -14,22 +11,42 @@ import { UserOptions } from '../../interfaces/user-options';
styleUrls: ['./login.scss'],
encapsulation: ViewEncapsulation.None
})
-export class LoginPage {
- login: UserOptions = { username: '', password: '' };
- submitted = false;
-
- constructor(
- public userData: UserData,
- public router: Router
- ) { }
+export class LoginPage implements OnInit {
+ username: '';
+ password: '' ;
+ users: UserOptions[];
+
+ constructor(public userData: UserData,
+ public router: Router,
+ private userService: UserData) { }
+
+ ngOnInit() {
+ this.userService.getUsers().subscribe(
+ (data: UserOptions[]) => { this.users = data; }
+ );
+ }
onLogin(form: NgForm) {
- this.submitted = true;
-
if (form.valid) {
- this.userData.login(this.login.username);
- this.router.navigateByUrl('/app/tabs/(schedule:schedule)');
+ const user = this.findUser(this.username.toLowerCase().trim());
+ if (user) {
+ if (user.password === this.password) {
+ this.userData.login(user);
+ this.router.navigateByUrl('/app/tabs/(schedule:schedule)');
+ } else {
+ alert('Invalid password. Try again.');
+ }
+ } else {
+ alert('User not found. Try again.');
+ }
+ }
+ }
+
+ findUser(data: string) {
+ if (data.indexOf('@') > -1) {
+ return this.users.find(user => user.email.toLowerCase() === data);
}
+ return this.users.find(user => user.username.toLowerCase() === data);
}
onSignup() {
diff --git a/src/app/pages/signup/signup.html b/src/app/pages/signup/signup.html
index 38c5bed9c..b572b2ea5 100644
--- a/src/app/pages/signup/signup.html
+++ b/src/app/pages/signup/signup.html
@@ -26,9 +26,21 @@
+
+ Email
+
+
+
+
+
+ Email is required
+
+
+
Password
-
+
@@ -36,6 +48,22 @@
Password is required
+
+
+ Confirm Password
+
+
+
+
+
+ Confirm Password is required
+
+
+
+
+ Password does not match with Confirm Password
+
+
diff --git a/src/app/pages/signup/signup.ts b/src/app/pages/signup/signup.ts
index f8b8da113..374f15347 100644
--- a/src/app/pages/signup/signup.ts
+++ b/src/app/pages/signup/signup.ts
@@ -1,12 +1,9 @@
-import { Component, ViewEncapsulation } from '@angular/core';
+import { Component, ViewEncapsulation, OnInit } from '@angular/core';
import { NgForm } from '@angular/forms';
import { Router } from '@angular/router';
import { UserData } from '../../providers/user-data';
-
-import { UserOptions } from '../../interfaces/user-options';
-
-
+import { UserOptions } from '../../models';
@Component({
selector: 'page-signup',
@@ -14,21 +11,43 @@ import { UserOptions } from '../../interfaces/user-options';
styleUrls: ['./signup.scss'],
encapsulation: ViewEncapsulation.None
})
-export class SignupPage {
- signup: UserOptions = { username: '', password: '' };
+export class SignupPage implements OnInit {
+ users: UserOptions[];
+ signup: UserOptions = {
+ username: '', password: '', email: '', favorites: []
+ };
+ confirmPassword = '';
submitted = false;
- constructor(
- public router: Router,
- public userData: UserData
- ) {}
+ constructor(public router: Router,
+ public userData: UserData,
+ private userService: UserData) {}
+
+ ngOnInit() {
+ this.userService.getUsers().subscribe(
+ (data: UserOptions[]) => { this.users = data; }
+ );
+ }
onSignup(form: NgForm) {
this.submitted = true;
-
- if (form.valid) {
- this.userData.signup(this.signup.username);
- this.router.navigateByUrl('/app/tabs/(schedule:schedule)');
+ if (form.valid && this.signup.password === this.confirmPassword) {
+ if (this.isNameUsed(this.signup.username)) {
+ alert('Name is already taken.');
+ } else if (this.isEmailUsed(this.signup.email)) {
+ alert('Email is already taken.');
+ } else {
+ this.userData.signup(this.signup);
+ this.router.navigateByUrl('/app/tabs/(schedule:schedule)');
+ }
}
}
+
+ isNameUsed(name) {
+ return this.users.find(ur => ur.username.toLowerCase() === name.toLowerCase());
+ }
+
+ isEmailUsed(email) {
+ return this.users.find(ur => ur.email.toLowerCase() === email.toLowerCase());
+ }
}
diff --git a/src/app/providers/user-data.ts b/src/app/providers/user-data.ts
index c171627b1..8634d9a3e 100644
--- a/src/app/providers/user-data.ts
+++ b/src/app/providers/user-data.ts
@@ -1,20 +1,49 @@
import { Injectable } from '@angular/core';
import { Events } from '@ionic/angular';
import { Storage } from '@ionic/storage';
+import { AngularFirestore,
+ AngularFirestoreCollection,
+ AngularFirestoreDocument } from 'angularfire2/firestore';
+import { Observable } from 'rxjs';
+import { map } from 'rxjs/operators';
+import { UserOptions } from '../models';
@Injectable({
providedIn: 'root'
})
export class UserData {
+ usersCollection: AngularFirestoreCollection
;
+ userDoc: AngularFirestoreDocument ;
+ users: Observable ;
+ user: Observable ;
_favorites: string[] = [];
HAS_LOGGED_IN = 'hasLoggedIn';
HAS_SEEN_TUTORIAL = 'hasSeenTutorial';
- constructor(
- public events: Events,
- public storage: Storage
- ) { }
+ constructor(private afs: AngularFirestore,
+ public events: Events,
+ public storage: Storage) {
+ this.usersCollection = this.afs.collection(
+ 'usersYS', ref => ref.orderBy('username', 'asc'));
+ }
+
+ getUsers(): Observable {
+ this.users = this.usersCollection.snapshotChanges()
+ .pipe(map(response => {
+ return response.map(action => {
+ const data = action.payload.doc.data() as UserOptions;
+ data.id = action.payload.doc.id;
+ return data;
+ });
+ }));
+ return this.users;
+ }
+
+ signup(user: UserOptions) {
+ this.usersCollection.add(user);
+ this.login(user);
+ }
hasFavorite(sessionName: string): boolean {
return (this._favorites.indexOf(sessionName) > -1);
@@ -31,35 +60,47 @@ export class UserData {
}
}
- login(username: string): Promise {
+ login(user: UserOptions): Promise {
return this.storage.set(this.HAS_LOGGED_IN, true).then(() => {
- this.setUsername(username);
+ this.setUser(user);
return this.events.publish('user:login');
});
}
- signup(username: string): Promise {
- return this.storage.set(this.HAS_LOGGED_IN, true).then(() => {
- this.setUsername(username);
- return this.events.publish('user:signup');
- });
- }
+ // signup(user: UserOptions): Promise {
+ // console.log(user);
+ // return this.storage.set(this.HAS_LOGGED_IN, true).then(() => {
+ // this.setUsername(user.username);
+ // return this.events.publish('user:signup');
+ // });
+ // }
logout(): Promise {
return this.storage.remove(this.HAS_LOGGED_IN).then(() => {
- return this.storage.remove('username');
+ return this.storage.remove('user');
}).then(() => {
this.events.publish('user:logout');
});
}
+ setUser(user: UserOptions): Promise {
+ return this.storage.set('user', user);
+ }
+
setUsername(username: string): Promise {
+ console.log('need to fix');
return this.storage.set('username', username);
}
getUsername(): Promise {
- return this.storage.get('username').then((value) => {
- return value;
+ return this.storage.get('user').then((value) => {
+ return value.username;
+ });
+ }
+
+ getUserId(): Promise {
+ return this.storage.get('user').then((value) => {
+ return value.id;
});
}
diff --git a/src/assets/data/data.json b/src/assets/data/data.json
index 717bc0a35..fcbe9776c 100755
--- a/src/assets/data/data.json
+++ b/src/assets/data/data.json
@@ -3,7 +3,7 @@
"schedule": [{
"date": "2047-05-17",
"groups": [{
- "time": "8:00 am",
+ "time": "Morning",
"sessions": [{
"name": "Breakfast",
"timeStart": "8:00 am",
@@ -11,10 +11,7 @@
"location": "Dining Hall",
"tracks": ["Food"],
"id": "1"
- }]
- }, {
- "time": "9:15 am",
- "sessions": [{
+ }, {
"name": "Getting Started with Ionic",
"location": "Hall 2",
"description": "Mobile devices and browsers are now advanced enough that developers can build native-quality mobile apps using open web technologies like HTML5, Javascript, and CSS. In this talk, we’ll provide background on why and how we created Ionic, the design decisions made as we integrated Ionic with Angular, and the performance considerations for mobile platforms that our team had to overcome. We’ll also review new and upcoming Ionic features, and talk about the hidden powers and benefits of combining mobile app development and Angular.",
@@ -22,6 +19,7 @@
"timeStart": "9:30 am",
"timeEnd": "9:45 am",
"tracks": ["Ionic"],
+ "hide": true,
"id": "2"
}, {
"name": "Ionic Tooling",
@@ -41,10 +39,7 @@
"timeEnd": "9:30 am",
"tracks": ["Ionic"],
"id": "4"
- }]
- }, {
- "time": "10:00 am",
- "sessions": [{
+ }, {
"name": "Migrating to Ionic",
"location": "Hall 1",
"description": "Mobile devices and browsers are now advanced enough that developers can build native-quality mobile apps using open web technologies like HTML5, Javascript, and CSS. In this talk, we’ll provide background on why and how we created Ionic, the design decisions made as we integrated Ionic with Angular, and the performance considerations for mobile platforms that our team had to overcome. We’ll also review new and upcoming Ionic features, and talk about the hidden powers and benefits of combining mobile app development and Angular.",
@@ -80,10 +75,7 @@
"timeEnd": "11:00 am",
"tracks": ["Services"],
"id": "8"
- }]
- }, {
- "time": "11:00 am",
- "sessions": [{
+ }, {
"name": "Ionic Workshop",
"location": "Hall 1",
"description": "Mobile devices and browsers are now advanced enough that developers can build native-quality mobile apps using open web technologies like HTML5, Javascript, and CSS. In this talk, we’ll provide background on why and how we created Ionic, the design decisions made as we integrated Ionic with Angular, and the performance considerations for mobile platforms that our team had to overcome. We’ll also review new and upcoming Ionic features, and talk about the hidden powers and benefits of combining mobile app development and Angular.",
@@ -112,7 +104,7 @@
"id": "11"
}]
}, {
- "time": "12:00 pm",
+ "time": "Afternoon",
"sessions": [{
"name": "Lunch",
"location": "Dining Hall",
@@ -121,10 +113,7 @@
"timeEnd": "1:00 pm",
"tracks": ["Food"],
"id": "12"
- }]
- }, {
- "time": "1:00 pm",
- "sessions": [{
+ }, {
"name": "Ionic in the Enterprise",
"location": "Hall 1",
"description": "Mobile devices and browsers are now advanced enough that developers can build native-quality mobile apps using open web technologies like HTML5, Javascript, and CSS. In this talk, we’ll provide background on why and how we created Ionic, the design decisions made as we integrated Ionic with Angular, and the performance considerations for mobile platforms that our team had to overcome. We’ll also review new and upcoming Ionic features, and talk about the hidden powers and benefits of combining mobile app development and Angular.",
@@ -151,10 +140,7 @@
"timeEnd": "2:00 pm",
"tracks": ["Services"],
"id": "15"
- }]
- }, {
- "time": "2:00 pm",
- "sessions": [{
+ }, {
"name": "Push Notifications in Ionic",
"location": "Hall 2",
"description": "Mobile devices and browsers are now advanced enough that developers can build native-quality mobile apps using open web technologies like HTML5, Javascript, and CSS. In this talk, we’ll provide background on why and how we created Ionic, the design decisions made as we integrated Ionic with Angular, and the performance considerations for mobile platforms that our team had to overcome. We’ll also review new and upcoming Ionic features, and talk about the hidden powers and benefits of combining mobile app development and Angular.",
@@ -181,10 +167,7 @@
"timeEnd": "3:00 pm",
"tracks": ["Design"],
"id": "18"
- }]
- }, {
- "time": "3:00",
- "sessions": [{
+ }, {
"name": "Angular Directives in Ionic",
"location": "Hall 1",
"description": "Mobile devices and browsers are now advanced enough that developers can build native-quality mobile apps using open web technologies like HTML5, Javascript, and CSS. In this talk, we’ll provide background on why and how we created Ionic, the design decisions made as we integrated Ionic with Angular, and the performance considerations for mobile platforms that our team had to overcome. We’ll also review new and upcoming Ionic features, and talk about the hidden powers and benefits of combining mobile app development and Angular.",
diff --git a/src/environments/environment.prod.ts b/src/environments/environment.prod.ts
deleted file mode 100644
index 3612073bc..000000000
--- a/src/environments/environment.prod.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-export const environment = {
- production: true
-};
diff --git a/src/environments/environment.ts b/src/environments/environment.ts
deleted file mode 100644
index ad4196020..000000000
--- a/src/environments/environment.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-// The file contents for the current environment will overwrite these during build.
-// The build system defaults to the dev environment which uses `environment.ts`, but if you do
-// `ng build --env=prod` then `environment.prod.ts` will be used instead.
-// The list of which env maps to which file can be found in `.angular-cli.json`.
-export const environment = {
- production: false
-};
-
-/*
- * In development mode, to ignore zone related error stack frames such as
- * `zone.run`, `zoneDelegate.invokeTask` for easier debugging, you can
- * import the following file, but please comment it out in production mode
- * because it will have performance impact when throw error
- */
-// import 'zone.js/dist/zone-error'; // Included with Angular CLI.
From fbfd6e69f1e76abff109a35472b6761d3fdfbd84 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E2=80=9CYoung?= <“hogusong1@gmail.com”>
Date: Wed, 19 Dec 2018 12:44:46 -0500
Subject: [PATCH 03/25] update 'support' mode: connect with firebase
---
src/app/models.ts | 7 ++++
src/app/pages/support/support.html | 8 +++--
src/app/pages/support/support.scss | 4 +++
src/app/pages/support/support.ts | 24 +++++++------
src/app/providers/function-data.ts | 22 ++++++++++++
src/app/providers/support-data.ts | 54 ++++++++++++++++++++++++++++++
src/app/providers/user-data.ts | 9 +++--
7 files changed, 111 insertions(+), 17 deletions(-)
create mode 100644 src/app/providers/function-data.ts
create mode 100644 src/app/providers/support-data.ts
diff --git a/src/app/models.ts b/src/app/models.ts
index b5ccbec7d..b40175b6e 100644
--- a/src/app/models.ts
+++ b/src/app/models.ts
@@ -49,6 +49,13 @@ export interface UserOptions {
favorites: IdName[]; // session's id and name.
}
+export interface Support {
+ id?: string;
+ userId: string;
+ date: string; // 2018-12-19
+ support: string;
+}
+
export interface PartOfDay {
partOfDay: string; // morning, afternoon, evening, overnight
timeFrom: string;
diff --git a/src/app/pages/support/support.html b/src/app/pages/support/support.html
index 278e9856f..054ef7c87 100644
--- a/src/app/pages/support/support.html
+++ b/src/app/pages/support/support.html
@@ -5,10 +5,9 @@
Support
-
-
+
@@ -26,9 +25,12 @@
Support message is required
-
Submit
+
+ You need to login first!
+
+
diff --git a/src/app/pages/support/support.scss b/src/app/pages/support/support.scss
index 3e465b273..64dd92e36 100644
--- a/src/app/pages/support/support.scss
+++ b/src/app/pages/support/support.scss
@@ -12,4 +12,8 @@ page-support {
.list {
margin-bottom: 0;
}
+
+ .support-msg h4 {
+ margin: 200px 80px;
+ }
}
diff --git a/src/app/pages/support/support.ts b/src/app/pages/support/support.ts
index bda531c6c..8c93eae04 100644
--- a/src/app/pages/support/support.ts
+++ b/src/app/pages/support/support.ts
@@ -1,8 +1,10 @@
import { Component, ViewEncapsulation } from '@angular/core';
import { NgForm } from '@angular/forms';
+import { Storage } from '@ionic/storage';
import { AlertController, ToastController } from '@ionic/angular';
-
+import { UserData } from '../../providers/user-data';
+import { SupportData } from '../../providers/support-data';
@Component({
selector: 'page-support',
@@ -11,29 +13,29 @@ import { AlertController, ToastController } from '@ionic/angular';
encapsulation: ViewEncapsulation.None
})
export class SupportPage {
+ isLoggedIn = false;
submitted = false;
supportMessage: string;
- constructor(
- public alertCtrl: AlertController,
- public toastCtrl: ToastController
- ) { }
+ constructor(public alertCtrl: AlertController,
+ public toastCtrl: ToastController,
+ private userData: UserData,
+ private supportData: SupportData,
+ public storage: Storage) {
+ }
async ionViewDidEnter() {
- const toast = await this.toastCtrl.create({
- message: 'This does not actually send a support request.',
- duration: 3000
- });
- await toast.present();
+ this.userData.isLoggedIn()
+ .then(res => this.isLoggedIn = res);
}
async submit(form: NgForm) {
this.submitted = true;
if (form.valid) {
+ this.supportData.addSupport(this.supportMessage);
this.supportMessage = '';
this.submitted = false;
-
const toast = await this.toastCtrl.create({
message: 'Your support request has been sent.',
duration: 3000
diff --git a/src/app/providers/function-data.ts b/src/app/providers/function-data.ts
new file mode 100644
index 000000000..2025543a8
--- /dev/null
+++ b/src/app/providers/function-data.ts
@@ -0,0 +1,22 @@
+import { Injectable } from '@angular/core';
+
+@Injectable({
+ providedIn: 'root'
+})
+export class FunctionlData {
+
+ getDataFormat(date: Date) {
+ if (!date) {
+ date = new Date();
+ }
+ const dateArray = date.toLocaleDateString().split('/');
+ return dateArray[2] + '-' +
+ this.reform2digits(dateArray[0]) + '-' +
+ this.reform2digits(dateArray[1]);
+ }
+
+ reform2digits(value) {
+ if (value.length === 1) return '0' + value;
+ return value ;
+ }
+}
\ No newline at end of file
diff --git a/src/app/providers/support-data.ts b/src/app/providers/support-data.ts
new file mode 100644
index 000000000..a0e27ce5f
--- /dev/null
+++ b/src/app/providers/support-data.ts
@@ -0,0 +1,54 @@
+import { Injectable } from '@angular/core';
+import { Events } from '@ionic/angular';
+import { AngularFirestore,
+ AngularFirestoreCollection,
+ AngularFirestoreDocument } from 'angularfire2/firestore';
+import { Observable } from 'rxjs';
+import { map } from 'rxjs/operators';
+
+import { Support } from '../models';
+import { FunctionlData } from './function-data';
+import { UserData } from './user-data';
+
+@Injectable({
+ providedIn: 'root'
+})
+export class SupportData {
+ supportsCollection: AngularFirestoreCollection ;
+ supportDoc: AngularFirestoreDocument ;
+ supports: Observable ;
+ support: Observable ;
+
+ constructor(private afs: AngularFirestore,
+ private functionData: FunctionlData,
+ private userData: UserData,
+ public events: Events) {
+ this.supportsCollection = this.afs.collection(
+ 'supports', ref => ref.orderBy('date', 'asc'));
+ }
+
+ getSupports(): Observable {
+ this.supports = this.supportsCollection.snapshotChanges()
+ .pipe(map(response => {
+ return response.map(action => {
+ const data = action.payload.doc.data() as Support;
+ data.id = action.payload.doc.id;
+ return data;
+ });
+ }));
+ return this.supports;
+ }
+
+ addSupport(message: string) {
+ const date = this.functionData.getDataFormat(null);
+ this.userData.getUserId()
+ .then(id => {
+ const support: Support = {
+ date: date,
+ userId: id,
+ support: message
+ };
+ this.supportsCollection.add(support);
+ });
+ }
+}
\ No newline at end of file
diff --git a/src/app/providers/user-data.ts b/src/app/providers/user-data.ts
index 8634d9a3e..868e3135d 100644
--- a/src/app/providers/user-data.ts
+++ b/src/app/providers/user-data.ts
@@ -25,7 +25,7 @@ export class UserData {
public events: Events,
public storage: Storage) {
this.usersCollection = this.afs.collection(
- 'usersYS', ref => ref.orderBy('username', 'asc'));
+ 'users', ref => ref.orderBy('username', 'asc'));
}
getUsers(): Observable {
@@ -41,8 +41,11 @@ export class UserData {
}
signup(user: UserOptions) {
- this.usersCollection.add(user);
- this.login(user);
+ this.usersCollection.add(user)
+ .then(res => {
+ user.id = res.id;
+ this.login(user);
+ });
}
hasFavorite(sessionName: string): boolean {
From 0bdf96f4f0c955f1e98ab4d24ec7c6c7e8f9ddb0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E2=80=9CYoung?= <“hogusong1@gmail.com”>
Date: Wed, 19 Dec 2018 14:22:00 -0500
Subject: [PATCH 04/25] update 'change username' of the account mode
---
src/app/interfaces/user-options.ts | 2 +-
src/app/pages/account/account.html | 1 +
src/app/pages/account/account.ts | 43 +++++++++++++++++++++---------
src/app/providers/function-data.ts | 10 +++----
src/app/providers/support-data.ts | 4 +--
src/app/providers/user-data.ts | 23 ++++++++++------
6 files changed, 55 insertions(+), 28 deletions(-)
diff --git a/src/app/interfaces/user-options.ts b/src/app/interfaces/user-options.ts
index 16437e175..1dda3fc7f 100644
--- a/src/app/interfaces/user-options.ts
+++ b/src/app/interfaces/user-options.ts
@@ -1,5 +1,5 @@
-export interface UserOptions {
+export interface UserOption {
username: string;
password: string;
}
diff --git a/src/app/pages/account/account.html b/src/app/pages/account/account.html
index 176248f12..3ed80ecb2 100644
--- a/src/app/pages/account/account.html
+++ b/src/app/pages/account/account.html
@@ -19,5 +19,6 @@ {{username}}
Support
Logout
+ {{ jobDescription }}
diff --git a/src/app/pages/account/account.ts b/src/app/pages/account/account.ts
index 6541b5625..4a1f30fc0 100644
--- a/src/app/pages/account/account.ts
+++ b/src/app/pages/account/account.ts
@@ -1,10 +1,9 @@
import { AfterViewInit, Component, ViewEncapsulation } from '@angular/core';
import { Router } from '@angular/router';
-
import { AlertController } from '@ionic/angular';
import { UserData } from '../../providers/user-data';
-
+import { UserOptions } from '../../models';
@Component({
selector: 'page-account',
@@ -13,15 +12,17 @@ import { UserData } from '../../providers/user-data';
encapsulation: ViewEncapsulation.None
})
export class AccountPage implements AfterViewInit {
+ users: UserOptions[];
username: string;
+ succeed: boolean;
+ jobDescription: string;
- constructor(
- public alertCtrl: AlertController,
- public router: Router,
- public userData: UserData
- ) { }
+ constructor(public alertCtrl: AlertController,
+ public router: Router,
+ public userData: UserData) {}
ngAfterViewInit() {
+ this.getUsers();
this.getUsername();
}
@@ -33,15 +34,22 @@ export class AccountPage implements AfterViewInit {
// clicking OK will update the username and display it
// clicking Cancel will close the alert and do nothing
async changeUsername() {
- const alert = await this.alertCtrl.create({
+ this.succeed = false;
+ const changeForm = await this.alertCtrl.create({
header: 'Change Username',
buttons: [
'Cancel',
{
text: 'Ok',
handler: (data: any) => {
- this.userData.setUsername(data.username);
- this.getUsername();
+ if (this.isNameExist(data.username)) {
+ alert(data.username + ' is used already. Try another.')
+ } else {
+ this.userData.updateUsername(data.username);
+ this.username = data.username;
+ this.succeed = true;
+ this.jobDescription = "User's name is changed."
+ }
}
}
],
@@ -50,11 +58,11 @@ export class AccountPage implements AfterViewInit {
type: 'text',
name: 'username',
value: this.username,
- placeholder: 'username'
+ placeholder: 'new username'
}
]
});
- await alert.present();
+ await changeForm.present();
}
getUsername() {
@@ -63,6 +71,17 @@ export class AccountPage implements AfterViewInit {
});
}
+ getUsers() {
+ this.userData.getUsers().subscribe(
+ users => { this.users = users; }
+ )
+ }
+
+ isNameExist(name: string) {
+ return this.users.find(
+ user => user.username.toLowerCase() === name.toLowerCase());
+ }
+
changePassword() {
console.log('Clicked to change password');
}
diff --git a/src/app/providers/function-data.ts b/src/app/providers/function-data.ts
index 2025543a8..c3334c8cf 100644
--- a/src/app/providers/function-data.ts
+++ b/src/app/providers/function-data.ts
@@ -4,19 +4,19 @@ import { Injectable } from '@angular/core';
providedIn: 'root'
})
export class FunctionlData {
-
+
getDataFormat(date: Date) {
if (!date) {
date = new Date();
}
const dateArray = date.toLocaleDateString().split('/');
- return dateArray[2] + '-' +
- this.reform2digits(dateArray[0]) + '-' +
+ return dateArray[2] + '-' +
+ this.reform2digits(dateArray[0]) + '-' +
this.reform2digits(dateArray[1]);
}
reform2digits(value) {
- if (value.length === 1) return '0' + value;
+ if (value.length === 1) { return '0' + value; }
return value ;
}
-}
\ No newline at end of file
+}
diff --git a/src/app/providers/support-data.ts b/src/app/providers/support-data.ts
index a0e27ce5f..ec7660b08 100644
--- a/src/app/providers/support-data.ts
+++ b/src/app/providers/support-data.ts
@@ -48,7 +48,7 @@ export class SupportData {
userId: id,
support: message
};
- this.supportsCollection.add(support);
+ this.supportsCollection.add(support);
});
}
-}
\ No newline at end of file
+}
diff --git a/src/app/providers/user-data.ts b/src/app/providers/user-data.ts
index 868e3135d..501383f41 100644
--- a/src/app/providers/user-data.ts
+++ b/src/app/providers/user-data.ts
@@ -70,14 +70,6 @@ export class UserData {
});
}
- // signup(user: UserOptions): Promise {
- // console.log(user);
- // return this.storage.set(this.HAS_LOGGED_IN, true).then(() => {
- // this.setUsername(user.username);
- // return this.events.publish('user:signup');
- // });
- // }
-
logout(): Promise {
return this.storage.remove(this.HAS_LOGGED_IN).then(() => {
return this.storage.remove('user');
@@ -90,6 +82,21 @@ export class UserData {
return this.storage.set('user', user);
}
+ updateUsername(username: string) {
+ this.storage.get('user')
+ .then((user) => {
+ const id = user.id ;
+ delete(user.id);
+ user.username = username;
+ this.userDoc = this.afs.doc(`users/${id}`);
+ this.userDoc.update(user)
+ .then(() => {
+ user.id = id;
+ this.storage.set('user', user);
+ });
+ })
+ }
+
setUsername(username: string): Promise {
console.log('need to fix');
return this.storage.set('username', username);
From 58702601db6cae8a36f62fc2b2f6abc83034dddd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E2=80=9CYoung?= <“hogusong1@gmail.com”>
Date: Wed, 19 Dec 2018 14:22:22 -0500
Subject: [PATCH 05/25] update 'change username' of the account mode
---
src/app/pages/account/account.ts | 6 +++---
src/app/providers/user-data.ts | 2 +-
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/src/app/pages/account/account.ts b/src/app/pages/account/account.ts
index 4a1f30fc0..939939492 100644
--- a/src/app/pages/account/account.ts
+++ b/src/app/pages/account/account.ts
@@ -43,12 +43,12 @@ export class AccountPage implements AfterViewInit {
text: 'Ok',
handler: (data: any) => {
if (this.isNameExist(data.username)) {
- alert(data.username + ' is used already. Try another.')
+ alert(data.username + ' is used already. Try another.');
} else {
this.userData.updateUsername(data.username);
this.username = data.username;
this.succeed = true;
- this.jobDescription = "User's name is changed."
+ this.jobDescription = 'User"s name is changed.';
}
}
}
@@ -74,7 +74,7 @@ export class AccountPage implements AfterViewInit {
getUsers() {
this.userData.getUsers().subscribe(
users => { this.users = users; }
- )
+ );
}
isNameExist(name: string) {
diff --git a/src/app/providers/user-data.ts b/src/app/providers/user-data.ts
index 501383f41..896956168 100644
--- a/src/app/providers/user-data.ts
+++ b/src/app/providers/user-data.ts
@@ -94,7 +94,7 @@ export class UserData {
user.id = id;
this.storage.set('user', user);
});
- })
+ });
}
setUsername(username: string): Promise {
From 34e81e1d397c895b5180927a56bd091fea878fff Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E2=80=9CYoung?= <“hogusong1@gmail.com”>
Date: Wed, 19 Dec 2018 14:39:03 -0500
Subject: [PATCH 06/25] change a model name: UserOptions to User
---
src/app/models.ts | 2 +-
src/app/pages/account/account.ts | 4 ++--
src/app/pages/login/login.ts | 6 +++---
src/app/pages/signup/signup.ts | 8 ++++----
src/app/providers/user-data.ts | 20 ++++++++++----------
5 files changed, 20 insertions(+), 20 deletions(-)
diff --git a/src/app/models.ts b/src/app/models.ts
index b40175b6e..26b691ed5 100644
--- a/src/app/models.ts
+++ b/src/app/models.ts
@@ -41,7 +41,7 @@ export interface Map {
center?: boolean;
}
-export interface UserOptions {
+export interface User {
id?: string;
username: string;
password: string;
diff --git a/src/app/pages/account/account.ts b/src/app/pages/account/account.ts
index 939939492..ff7f4986e 100644
--- a/src/app/pages/account/account.ts
+++ b/src/app/pages/account/account.ts
@@ -3,7 +3,7 @@ import { Router } from '@angular/router';
import { AlertController } from '@ionic/angular';
import { UserData } from '../../providers/user-data';
-import { UserOptions } from '../../models';
+import { User } from '../../models';
@Component({
selector: 'page-account',
@@ -12,7 +12,7 @@ import { UserOptions } from '../../models';
encapsulation: ViewEncapsulation.None
})
export class AccountPage implements AfterViewInit {
- users: UserOptions[];
+ users: User[];
username: string;
succeed: boolean;
jobDescription: string;
diff --git a/src/app/pages/login/login.ts b/src/app/pages/login/login.ts
index 94977365d..85fa691a2 100644
--- a/src/app/pages/login/login.ts
+++ b/src/app/pages/login/login.ts
@@ -3,7 +3,7 @@ import { NgForm } from '@angular/forms';
import { Router } from '@angular/router';
import { UserData } from '../../providers/user-data';
-import { UserOptions } from '../../models';
+import { User } from '../../models';
@Component({
selector: 'page-login',
@@ -14,7 +14,7 @@ import { UserOptions } from '../../models';
export class LoginPage implements OnInit {
username: '';
password: '' ;
- users: UserOptions[];
+ users: User[];
constructor(public userData: UserData,
public router: Router,
@@ -22,7 +22,7 @@ export class LoginPage implements OnInit {
ngOnInit() {
this.userService.getUsers().subscribe(
- (data: UserOptions[]) => { this.users = data; }
+ (data: User[]) => { this.users = data; }
);
}
diff --git a/src/app/pages/signup/signup.ts b/src/app/pages/signup/signup.ts
index 374f15347..9c2284dfe 100644
--- a/src/app/pages/signup/signup.ts
+++ b/src/app/pages/signup/signup.ts
@@ -3,7 +3,7 @@ import { NgForm } from '@angular/forms';
import { Router } from '@angular/router';
import { UserData } from '../../providers/user-data';
-import { UserOptions } from '../../models';
+import { User } from '../../models';
@Component({
selector: 'page-signup',
@@ -12,8 +12,8 @@ import { UserOptions } from '../../models';
encapsulation: ViewEncapsulation.None
})
export class SignupPage implements OnInit {
- users: UserOptions[];
- signup: UserOptions = {
+ users: User[];
+ signup: User = {
username: '', password: '', email: '', favorites: []
};
confirmPassword = '';
@@ -25,7 +25,7 @@ export class SignupPage implements OnInit {
ngOnInit() {
this.userService.getUsers().subscribe(
- (data: UserOptions[]) => { this.users = data; }
+ (data: User[]) => { this.users = data; }
);
}
diff --git a/src/app/providers/user-data.ts b/src/app/providers/user-data.ts
index 896956168..1b071e684 100644
--- a/src/app/providers/user-data.ts
+++ b/src/app/providers/user-data.ts
@@ -7,16 +7,16 @@ import { AngularFirestore,
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
-import { UserOptions } from '../models';
+import { User } from '../models';
@Injectable({
providedIn: 'root'
})
export class UserData {
- usersCollection: AngularFirestoreCollection ;
- userDoc: AngularFirestoreDocument ;
- users: Observable ;
- user: Observable ;
+ usersCollection: AngularFirestoreCollection ;
+ userDoc: AngularFirestoreDocument ;
+ users: Observable ;
+ user: Observable ;
_favorites: string[] = [];
HAS_LOGGED_IN = 'hasLoggedIn';
HAS_SEEN_TUTORIAL = 'hasSeenTutorial';
@@ -28,11 +28,11 @@ export class UserData {
'users', ref => ref.orderBy('username', 'asc'));
}
- getUsers(): Observable {
+ getUsers(): Observable {
this.users = this.usersCollection.snapshotChanges()
.pipe(map(response => {
return response.map(action => {
- const data = action.payload.doc.data() as UserOptions;
+ const data = action.payload.doc.data() as User;
data.id = action.payload.doc.id;
return data;
});
@@ -40,7 +40,7 @@ export class UserData {
return this.users;
}
- signup(user: UserOptions) {
+ signup(user: User) {
this.usersCollection.add(user)
.then(res => {
user.id = res.id;
@@ -63,7 +63,7 @@ export class UserData {
}
}
- login(user: UserOptions): Promise {
+ login(user: User): Promise {
return this.storage.set(this.HAS_LOGGED_IN, true).then(() => {
this.setUser(user);
return this.events.publish('user:login');
@@ -78,7 +78,7 @@ export class UserData {
});
}
- setUser(user: UserOptions): Promise {
+ setUser(user: User): Promise {
return this.storage.set('user', user);
}
From c042a3e786c1851e11cdee89c16b185539dda16f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E2=80=9CYoung?= <“hogusong1@gmail.com”>
Date: Wed, 19 Dec 2018 15:56:33 -0500
Subject: [PATCH 07/25] update account.ts: add changeEmail(), user-data.ts:
updateUsername to updateUser
---
src/app/pages/account/account.html | 5 ++-
src/app/pages/account/account.ts | 72 +++++++++++++++++++++---------
src/app/providers/user-data.ts | 56 ++++++++++++-----------
3 files changed, 82 insertions(+), 51 deletions(-)
diff --git a/src/app/pages/account/account.html b/src/app/pages/account/account.html
index 3ed80ecb2..f02b75548 100644
--- a/src/app/pages/account/account.html
+++ b/src/app/pages/account/account.html
@@ -8,13 +8,14 @@
-
+
-
{{username}}
+
{{user.username}}
Update Picture
Change Username
+ Change Email
Change Password
Support
Logout
diff --git a/src/app/pages/account/account.ts b/src/app/pages/account/account.ts
index ff7f4986e..2ef2a7b52 100644
--- a/src/app/pages/account/account.ts
+++ b/src/app/pages/account/account.ts
@@ -13,7 +13,7 @@ import { User } from '../../models';
})
export class AccountPage implements AfterViewInit {
users: User[];
- username: string;
+ user: User;
succeed: boolean;
jobDescription: string;
@@ -22,8 +22,12 @@ export class AccountPage implements AfterViewInit {
public userData: UserData) {}
ngAfterViewInit() {
- this.getUsers();
- this.getUsername();
+ this.userData.getUsers().subscribe(
+ users => this.users = users
+ );
+ this.userData.getUser().then(
+ user => this.user = user
+ );
}
updatePicture() {
@@ -42,13 +46,13 @@ export class AccountPage implements AfterViewInit {
{
text: 'Ok',
handler: (data: any) => {
- if (this.isNameExist(data.username)) {
- alert(data.username + ' is used already. Try another.');
+ if (this.isTheValueUsed(data.username)) {
+ alert(data.username + ' was used already. Try another.');
} else {
- this.userData.updateUsername(data.username);
- this.username = data.username;
+ this.user.username = data.username;
+ this.userData.updateUser(this.user);
this.succeed = true;
- this.jobDescription = 'User"s name is changed.';
+ this.jobDescription = 'Username has been changed.';
}
}
}
@@ -57,7 +61,7 @@ export class AccountPage implements AfterViewInit {
{
type: 'text',
name: 'username',
- value: this.username,
+ value: this.user.username,
placeholder: 'new username'
}
]
@@ -65,25 +69,49 @@ export class AccountPage implements AfterViewInit {
await changeForm.present();
}
- getUsername() {
- this.userData.getUsername().then((username) => {
- this.username = username;
+ async changeEmail() {
+ this.succeed = false;
+ const changeForm = await this.alertCtrl.create({
+ header: 'Change Email',
+ buttons: [
+ 'Cancel',
+ {
+ text: 'Ok',
+ handler: (data: any) => {
+ if (this.isTheValueUsed(data.email)) {
+ alert(data.email + ' was used already. Try another.');
+ } else {
+ this.user.email = data.email;
+ this.userData.updateUser(this.user);
+ this.succeed = true;
+ this.jobDescription = 'Email has been changed.';
+ }
+ }
+ }
+ ],
+ inputs: [
+ {
+ type: 'text',
+ name: 'email',
+ value: this.user.email,
+ placeholder: 'new email'
+ }
+ ]
});
+ await changeForm.present();
}
- getUsers() {
- this.userData.getUsers().subscribe(
- users => { this.users = users; }
- );
+ changePassword() {
+ console.log('Clicked to change password');
}
- isNameExist(name: string) {
+ isTheValueUsed(value: string) {
+ if (value.indexOf('@') < 0) {
+ return this.users.find(
+ user => user.username.toLowerCase() === value.toLowerCase());
+ }
return this.users.find(
- user => user.username.toLowerCase() === name.toLowerCase());
- }
-
- changePassword() {
- console.log('Clicked to change password');
+ user => user.email.toLowerCase() === value.toLowerCase());
}
logout() {
diff --git a/src/app/providers/user-data.ts b/src/app/providers/user-data.ts
index 1b071e684..82134fac6 100644
--- a/src/app/providers/user-data.ts
+++ b/src/app/providers/user-data.ts
@@ -82,47 +82,49 @@ export class UserData {
return this.storage.set('user', user);
}
- updateUsername(username: string) {
- this.storage.get('user')
- .then((user) => {
- const id = user.id ;
- delete(user.id);
- user.username = username;
- this.userDoc = this.afs.doc(`users/${id}`);
- this.userDoc.update(user)
- .then(() => {
- user.id = id;
- this.storage.set('user', user);
- });
+ updateUser(user: User) {
+ const id = user.id;
+ delete(user.id);
+ this.userDoc = this.afs.doc(`users/${id}`);
+ this.userDoc.update(user)
+ .then(() => {
+ user.id = id;
+ this.storage.set('user', user);
});
}
- setUsername(username: string): Promise {
- console.log('need to fix');
- return this.storage.set('username', username);
+ // updateUsername(username: string) {
+ // this.storage.get('user')
+ // .then((user) => {
+ // const id = user.id ;
+ // delete(user.id);
+ // user.username = username;
+ // this.userDoc = this.afs.doc(`users/${id}`);
+ // this.userDoc.update(user)
+ // .then(() => {
+ // user.id = id;
+ // this.storage.set('user', user);
+ // });
+ // });
+ // }
+
+ getUser(): Promise {
+ return this.storage.get('user').then(user => user);
}
getUsername(): Promise {
- return this.storage.get('user').then((value) => {
- return value.username;
- });
+ return this.storage.get('user').then(value => value.username);
}
getUserId(): Promise {
- return this.storage.get('user').then((value) => {
- return value.id;
- });
+ return this.storage.get('user').then(value => value.id);
}
isLoggedIn(): Promise {
- return this.storage.get(this.HAS_LOGGED_IN).then((value) => {
- return value === true;
- });
+ return this.storage.get(this.HAS_LOGGED_IN).then(value => value);
}
checkHasSeenTutorial(): Promise {
- return this.storage.get(this.HAS_SEEN_TUTORIAL).then((value) => {
- return value;
- });
+ return this.storage.get(this.HAS_SEEN_TUTORIAL).then(value => value);
}
}
From 13b3de5cbca68ae0ff947342af361da2a1f5934f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E2=80=9CYoung?= <“hogusong1@gmail.com”>
Date: Wed, 19 Dec 2018 16:47:52 -0500
Subject: [PATCH 08/25] add change password mode to account.ts
---
src/app/pages/account/account.ts | 47 ++++++++++++++++++++++++++++++--
1 file changed, 44 insertions(+), 3 deletions(-)
diff --git a/src/app/pages/account/account.ts b/src/app/pages/account/account.ts
index 2ef2a7b52..3ca9922fc 100644
--- a/src/app/pages/account/account.ts
+++ b/src/app/pages/account/account.ts
@@ -91,7 +91,7 @@ export class AccountPage implements AfterViewInit {
],
inputs: [
{
- type: 'text',
+ type: 'email',
name: 'email',
value: this.user.email,
placeholder: 'new email'
@@ -101,8 +101,49 @@ export class AccountPage implements AfterViewInit {
await changeForm.present();
}
- changePassword() {
- console.log('Clicked to change password');
+ async changePassword() {
+ this.succeed = false;
+ const changeForm = await this.alertCtrl.create({
+ header: 'Change Password',
+ buttons: [
+ 'Cancel',
+ {
+ text: 'Ok',
+ handler: (data: any) => {
+ if (this.user.password !== data.currentPW) {
+ alert('Current password does not match your password.');
+ } else if (data.newPW.length < 4) {
+ alert('Password should be more than 3 characters.');
+ } else if (data.newPW !== data.confirmPW) {
+ alert('New password does not match Confirm password.');
+ } else {
+ this.user.password = data.newPW;
+ this.userData.updateUser(this.user);
+ this.succeed = true;
+ this.jobDescription = 'Password has been changed.';
+ }
+ }
+ }
+ ],
+ inputs: [
+ {
+ type: 'password',
+ name: 'newPW',
+ placeholder: 'new password'
+ },
+ {
+ type: 'password',
+ name: 'confirmPW',
+ placeholder: 'confirm password'
+ },
+ {
+ type: 'password',
+ name: 'currentPW',
+ placeholder: 'current password'
+ }
+ ]
+ });
+ await changeForm.present();
}
isTheValueUsed(value: string) {
From 6e139521e70fee0566a294970c2ac19e85e2f347 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E2=80=9CYoung?= <“hogusong1@gmail.com”>
Date: Thu, 20 Dec 2018 13:39:55 -0500
Subject: [PATCH 09/25] create more providers and update speaker-list,
session-detail connecting firebase
---
src/app/pages/account/account.ts | 14 ++--
src/app/pages/login/login.ts | 4 +-
.../pages/session-detail/session-detail.ts | 59 ++++++++-------
src/app/pages/signup/signup.ts | 7 +-
src/app/pages/speaker-list/speaker-list.ts | 72 ++++++++++++++++---
src/app/providers/conference-data.ts | 6 +-
src/app/providers/function-data.ts | 31 ++++++--
src/app/providers/session-data.ts | 62 ++++++++++++++++
src/app/providers/speaker-data.ts | 60 ++++++++++++++++
src/app/providers/support-data.ts | 8 +--
10 files changed, 265 insertions(+), 58 deletions(-)
create mode 100644 src/app/providers/session-data.ts
create mode 100644 src/app/providers/speaker-data.ts
diff --git a/src/app/pages/account/account.ts b/src/app/pages/account/account.ts
index 3ca9922fc..25cb408a1 100644
--- a/src/app/pages/account/account.ts
+++ b/src/app/pages/account/account.ts
@@ -19,13 +19,13 @@ export class AccountPage implements AfterViewInit {
constructor(public alertCtrl: AlertController,
public router: Router,
- public userData: UserData) {}
+ public userProvider: UserData) {}
ngAfterViewInit() {
- this.userData.getUsers().subscribe(
+ this.userProvider.getUsers().subscribe(
users => this.users = users
);
- this.userData.getUser().then(
+ this.userProvider.getUser().then(
user => this.user = user
);
}
@@ -50,7 +50,7 @@ export class AccountPage implements AfterViewInit {
alert(data.username + ' was used already. Try another.');
} else {
this.user.username = data.username;
- this.userData.updateUser(this.user);
+ this.userProvider.updateUser(this.user);
this.succeed = true;
this.jobDescription = 'Username has been changed.';
}
@@ -82,7 +82,7 @@ export class AccountPage implements AfterViewInit {
alert(data.email + ' was used already. Try another.');
} else {
this.user.email = data.email;
- this.userData.updateUser(this.user);
+ this.userProvider.updateUser(this.user);
this.succeed = true;
this.jobDescription = 'Email has been changed.';
}
@@ -118,7 +118,7 @@ export class AccountPage implements AfterViewInit {
alert('New password does not match Confirm password.');
} else {
this.user.password = data.newPW;
- this.userData.updateUser(this.user);
+ this.userProvider.updateUser(this.user);
this.succeed = true;
this.jobDescription = 'Password has been changed.';
}
@@ -156,7 +156,7 @@ export class AccountPage implements AfterViewInit {
}
logout() {
- this.userData.logout();
+ this.userProvider.logout();
this.router.navigateByUrl('/login');
}
diff --git a/src/app/pages/login/login.ts b/src/app/pages/login/login.ts
index 85fa691a2..998e8b127 100644
--- a/src/app/pages/login/login.ts
+++ b/src/app/pages/login/login.ts
@@ -18,10 +18,10 @@ export class LoginPage implements OnInit {
constructor(public userData: UserData,
public router: Router,
- private userService: UserData) { }
+ private userProvider: UserData) { }
ngOnInit() {
- this.userService.getUsers().subscribe(
+ this.userProvider.getUsers().subscribe(
(data: User[]) => { this.users = data; }
);
}
diff --git a/src/app/pages/session-detail/session-detail.ts b/src/app/pages/session-detail/session-detail.ts
index 333cf1148..c4fb44f89 100644
--- a/src/app/pages/session-detail/session-detail.ts
+++ b/src/app/pages/session-detail/session-detail.ts
@@ -1,8 +1,9 @@
import { Component } from '@angular/core';
-
-import { ConferenceData } from '../../providers/conference-data';
import { ActivatedRoute } from '@angular/router';
+
import { UserData } from '../../providers/user-data';
+import { SessionData } from '../../providers/session-data';
+import { Session } from '../../models';
@Component({
selector: 'page-session-detail',
@@ -10,10 +11,10 @@ import { UserData } from '../../providers/user-data';
templateUrl: 'session-detail.html'
})
export class SessionDetailPage {
- session: any;
+ session: Session;
isFavorite = false;
constructor(
- private dataProvider: ConferenceData,
+ private sessionProvider: SessionData,
private userProvider: UserData,
private route: ActivatedRoute
) {}
@@ -22,7 +23,6 @@ export class SessionDetailPage {
console.log('Clicked', item);
}
-
toggleFavorite() {
if (this.userProvider.hasFavorite(this.session.name)) {
this.userProvider.removeFavorite(this.session.name);
@@ -32,27 +32,34 @@ export class SessionDetailPage {
this.isFavorite = true;
}
}
+
ionViewWillEnter() {
- this.dataProvider.load().subscribe((data: any) => {
- if (
- data &&
- data.schedule &&
- data.schedule[0] &&
- data.schedule[0].groups
- ) {
- const sessionId = this.route.snapshot.paramMap.get('sessionId');
- for (const group of data.schedule[0].groups) {
- if (group && group.sessions) {
- for (const session of group.sessions) {
- if (session && session.id === sessionId) {
- this.session = session;
- this.isFavorite = this.userProvider.hasFavorite(this.session.name);
- break;
- }
- }
- }
- }
- }
- });
+ const id = this.route.snapshot.paramMap.get('sessionId');
+ this.sessionProvider.getSession(id)
+ .then( data => { this.session = data; }
+ );
+ // const id = this.route.snapshot.paramMap.get('sessionId');
+ // this.session = this.sessionProvider.getSession(id);
+ // this.dataProvider.load().subscribe((data: any) => {
+ // if (
+ // data &&
+ // data.schedule &&
+ // data.schedule[0] &&
+ // data.schedule[0].groups
+ // ) {
+ // const sessionId = this.route.snapshot.paramMap.get('sessionId');
+ // for (const group of data.schedule[0].groups) {
+ // if (group && group.sessions) {
+ // for (const session of group.sessions) {
+ // if (session && session.id === sessionId) {
+ // this.session = session;
+ // this.isFavorite = this.userProvider.hasFavorite(this.session.name);
+ // break;
+ // }
+ // }
+ // }
+ // }
+ // }
+ // });
}
}
diff --git a/src/app/pages/signup/signup.ts b/src/app/pages/signup/signup.ts
index 9c2284dfe..491158b24 100644
--- a/src/app/pages/signup/signup.ts
+++ b/src/app/pages/signup/signup.ts
@@ -20,11 +20,10 @@ export class SignupPage implements OnInit {
submitted = false;
constructor(public router: Router,
- public userData: UserData,
- private userService: UserData) {}
+ public userProvider: UserData) {}
ngOnInit() {
- this.userService.getUsers().subscribe(
+ this.userProvider.getUsers().subscribe(
(data: User[]) => { this.users = data; }
);
}
@@ -37,7 +36,7 @@ export class SignupPage implements OnInit {
} else if (this.isEmailUsed(this.signup.email)) {
alert('Email is already taken.');
} else {
- this.userData.signup(this.signup);
+ this.userProvider.signup(this.signup);
this.router.navigateByUrl('/app/tabs/(schedule:schedule)');
}
}
diff --git a/src/app/pages/speaker-list/speaker-list.ts b/src/app/pages/speaker-list/speaker-list.ts
index 1b99c4a32..626e15c71 100644
--- a/src/app/pages/speaker-list/speaker-list.ts
+++ b/src/app/pages/speaker-list/speaker-list.ts
@@ -1,9 +1,10 @@
-import { Component, ViewEncapsulation } from '@angular/core';
+import { Component, ViewEncapsulation, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import { InAppBrowser } from '@ionic-native/in-app-browser/ngx';
-import { ActionSheetController } from '@ionic/angular';
+import { ActionSheetController, AlertController } from '@ionic/angular';
-import { ConferenceData } from '../../providers/conference-data';
+import { Speaker } from '../../models';
+import { SpeakerData } from '../../providers/speaker-data';
@Component({
selector: 'page-speaker-list',
@@ -11,20 +12,27 @@ import { ConferenceData } from '../../providers/conference-data';
styleUrls: ['./speaker-list.scss'],
encapsulation: ViewEncapsulation.None
})
-export class SpeakerListPage {
- speakers: any[] = [];
+export class SpeakerListPage implements OnInit {
+ speakers: Speaker[];
constructor(
public actionSheetCtrl: ActionSheetController,
- public confData: ConferenceData,
+ public alertCtrl: AlertController,
+ private speakerProvider: SpeakerData,
public inAppBrowser: InAppBrowser,
public router: Router
) {}
+ ngOnInit() {
+ this.speakerProvider.getSpeakers().subscribe(
+ speakers => { this.speakers = speakers; }
+ );
+ }
+
ionViewDidEnter() {
- this.confData.getSpeakers().subscribe((speakers: any[]) => {
- this.speakers = speakers;
- });
+ // this.dataProvider.getSpeakers().subscribe((speakers: any[]) => {
+ // this.speakers = speakers;
+ // });
}
goToSpeakerTwitter(speaker: any) {
@@ -92,4 +100,50 @@ export class SpeakerListPage {
await actionSheet.present();
}
+
+ async addNewSpeaker() {
+ // this.succeed = false;
+ const changeForm = await this.alertCtrl.create({
+ header: 'Change Password',
+ buttons: [
+ 'Cancel',
+ {
+ text: 'Ok',
+ handler: (data: any) => {
+ // if (this.user.password !== data.currentPW) {
+ // alert('Current password does not match your password.');
+ // } else if (data.newPW.length < 4) {
+ // alert('Password should be more than 3 characters.');
+ // } else if (data.newPW !== data.confirmPW) {
+ // alert('New password does not match Confirm password.');
+ // } else {
+ // this.user.password = data.newPW;
+ // this.userData.updateUser(this.user);
+ // this.succeed = true;
+ // this.jobDescription = 'Password has been changed.';
+ // }
+ }
+ }
+ ],
+ inputs: [
+ {
+ type: 'password',
+ name: 'newPW',
+ placeholder: 'new password'
+ },
+ {
+ type: 'password',
+ name: 'confirmPW',
+ placeholder: 'confirm password'
+ },
+ {
+ type: 'password',
+ name: 'currentPW',
+ placeholder: 'current password'
+ }
+ ]
+ });
+ await changeForm.present();
+ }
+
}
diff --git a/src/app/providers/conference-data.ts b/src/app/providers/conference-data.ts
index 9891292d4..cc0dce599 100644
--- a/src/app/providers/conference-data.ts
+++ b/src/app/providers/conference-data.ts
@@ -2,7 +2,6 @@ import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { of } from 'rxjs';
import { map } from 'rxjs/operators';
-
import { UserData } from './user-data';
@Injectable({
@@ -11,7 +10,10 @@ import { UserData } from './user-data';
export class ConferenceData {
data: any;
- constructor(public http: HttpClient, public user: UserData) {}
+ constructor(
+ public http: HttpClient,
+ public user: UserData
+ ) {}
load(): any {
if (this.data) {
diff --git a/src/app/providers/function-data.ts b/src/app/providers/function-data.ts
index c3334c8cf..dc8816c89 100644
--- a/src/app/providers/function-data.ts
+++ b/src/app/providers/function-data.ts
@@ -5,7 +5,7 @@ import { Injectable } from '@angular/core';
})
export class FunctionlData {
- getDataFormat(date: Date) {
+ getDateFormat(date: Date) {
if (!date) {
date = new Date();
}
@@ -15,8 +15,31 @@ export class FunctionlData {
this.reform2digits(dateArray[1]);
}
- reform2digits(value) {
- if (value.length === 1) { return '0' + value; }
- return value ;
+ getAmPmTimeFormat(time: string): string {
+ if (!time) { return '00:00 am' ; }
+ let t = +time.split(':')[0];
+ let m = time.split(':')[1];
+ if (t > 11) {
+ m = m + ' pm';
+ t = (t === 12) ? t : t - 12 ;
+ } else {
+ m = m + ' am';
+ }
+ return this.reform2digits(t) + ':' + m ;
+ }
+
+ get24HoursFormat(time: string): string {
+ if (!time) { return '' ; }
+ const data = time.split(' ');
+ let t = +data[0].split(':')[0];
+ const m = data[0].split(':')[1];
+ if (data[1] === 'pm' && t < 12) { t = t + 12 ; }
+ const realTime = (t < 10 ? '0' : '') + t;
+ return realTime + ':' + m ;
+ }
+
+ reform2digits(value): string {
+ value = +value;
+ return ((value < 10) ? '0' : '') + value ;
}
}
diff --git a/src/app/providers/session-data.ts b/src/app/providers/session-data.ts
new file mode 100644
index 000000000..1d1cef267
--- /dev/null
+++ b/src/app/providers/session-data.ts
@@ -0,0 +1,62 @@
+import { Injectable } from '@angular/core';
+import { AngularFirestore,
+ AngularFirestoreCollection,
+ AngularFirestoreDocument } from 'angularfire2/firestore';
+import { Observable } from 'rxjs';
+import { map } from 'rxjs/operators';
+
+import { Session, Speaker } from '../models';
+
+@Injectable({
+ providedIn: 'root'
+})
+export class SessionData {
+ sessionsCollection: AngularFirestoreCollection ;
+ sessionDoc: AngularFirestoreDocument ;
+ sessions: Observable ;
+ session: Observable ;
+ id: string;
+
+ constructor(private afs: AngularFirestore) {
+ this.sessionsCollection = this.afs.collection(
+ 'sessions', ref => ref.orderBy('date', 'asc'));
+ }
+
+ getSessions(): Observable {
+ this.sessions = this.sessionsCollection.snapshotChanges()
+ .pipe(map(response => {
+ return response.map(action => {
+ const data = action.payload.doc.data() as Session;
+ data.id = action.payload.doc.id;
+ return data;
+ });
+ }));
+ return this.sessions ;
+ }
+
+ addNewSession(session: Session) {
+ return this.sessionsCollection.add(session)
+ .then(docRef => {
+ const id = docRef.id;
+ return id;
+ });
+ }
+
+ updateSession(id: string, session: Session) {
+ this.sessionDoc = this.afs.doc(`sessions/${id}`);
+ this.sessionDoc.update(session);
+ }
+
+ deleteSession(session: Session) {
+ this.sessionDoc = this.afs.doc(`sessions/${session.id}`);
+ this.sessionDoc.delete();
+ }
+
+ getSession(id: string) {
+ return this.sessionsCollection.doc(id).ref.get()
+ .then(doc => {
+ const res = doc.data() as Session ;
+ return res;
+ });
+ }
+}
diff --git a/src/app/providers/speaker-data.ts b/src/app/providers/speaker-data.ts
new file mode 100644
index 000000000..9e09d6a48
--- /dev/null
+++ b/src/app/providers/speaker-data.ts
@@ -0,0 +1,60 @@
+import { Injectable } from '@angular/core';
+import { AngularFirestore,
+ AngularFirestoreCollection,
+ AngularFirestoreDocument } from 'angularfire2/firestore';
+import { Observable } from 'rxjs';
+import { map } from 'rxjs/operators';
+
+import { Speaker } from '../models';
+
+@Injectable({
+ providedIn: 'root'
+})
+export class SpeakerData {
+ speakersCollection: AngularFirestoreCollection ;
+ speakerDoc: AngularFirestoreDocument ;
+ speakers: Observable ;
+ speaker: Observable ;
+
+ constructor(private afs: AngularFirestore) {
+ this.speakersCollection = this.afs.collection(
+ 'speakers', ref => ref.orderBy('name', 'asc'));
+ }
+
+ getSpeakers(): Observable {
+ this.speakers = this.speakersCollection.snapshotChanges()
+ .pipe(map(response => {
+ return response.map(action => {
+ const data = action.payload.doc.data() as Speaker;
+ data.id = action.payload.doc.id;
+ return data;
+ });
+ }));
+ return this.speakers ;
+ }
+
+ getSpeaker(name: string): Speaker {
+ let speaker;
+ this.getSpeakers().subscribe(
+ (data: Speaker[]) => {
+ speaker = data.find(spk => spk.name === name);
+ });
+ return speaker;
+ }
+
+ addNewSpeaker(speaker: Speaker) {
+ this.speakersCollection.add(speaker) ;
+ }
+
+ updateSpeaker(speaker: Speaker) {
+ this.speakerDoc = this.afs.doc(`speakers/${speaker.id}`);
+ delete(speaker.id);
+ this.speakerDoc.update(speaker);
+ }
+
+ getSpeakerName(id: string) {
+ this.speakerDoc = this.afs.doc(`speakers/${id}`);
+ const name = this.speakerDoc.snapshotChanges.name;
+ return name;
+ }
+}
diff --git a/src/app/providers/support-data.ts b/src/app/providers/support-data.ts
index ec7660b08..4168b2520 100644
--- a/src/app/providers/support-data.ts
+++ b/src/app/providers/support-data.ts
@@ -20,8 +20,8 @@ export class SupportData {
support: Observable ;
constructor(private afs: AngularFirestore,
- private functionData: FunctionlData,
- private userData: UserData,
+ private functionProvider: FunctionlData,
+ private userProvider: UserData,
public events: Events) {
this.supportsCollection = this.afs.collection(
'supports', ref => ref.orderBy('date', 'asc'));
@@ -40,8 +40,8 @@ export class SupportData {
}
addSupport(message: string) {
- const date = this.functionData.getDataFormat(null);
- this.userData.getUserId()
+ const date = this.functionProvider.getDateFormat(null);
+ this.userProvider.getUserId()
.then(id => {
const support: Support = {
date: date,
From a57388b34bc613c2449b6ee4ea28b9840f3e2edb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E2=80=9CYoung?= <“hogusong1@gmail.com”>
Date: Thu, 20 Dec 2018 15:58:17 -0500
Subject: [PATCH 10/25] update speaker-detail.ts: add links and show all
details of speaker.
---
src/app/models.ts | 2 +
src/app/pages/account/account.ts | 4 +-
.../pages/session-detail/session-detail.html | 2 +-
.../pages/speaker-detail/speaker-detail.html | 12 ++--
.../pages/speaker-detail/speaker-detail.ts | 48 ++++++++++-----
src/app/pages/speaker-list/speaker-list.ts | 60 ++-----------------
src/app/providers/speaker-data.ts | 29 ++++++---
7 files changed, 72 insertions(+), 85 deletions(-)
diff --git a/src/app/models.ts b/src/app/models.ts
index 26b691ed5..dfe2f276f 100644
--- a/src/app/models.ts
+++ b/src/app/models.ts
@@ -9,6 +9,8 @@ export interface Speaker {
name: string;
profilePic?: string;
twitter?: string;
+ github?: string;
+ instagram?: string;
about?: string;
location?: string;
email: string;
diff --git a/src/app/pages/account/account.ts b/src/app/pages/account/account.ts
index 25cb408a1..0d7c8e685 100644
--- a/src/app/pages/account/account.ts
+++ b/src/app/pages/account/account.ts
@@ -4,6 +4,7 @@ import { AlertController } from '@ionic/angular';
import { UserData } from '../../providers/user-data';
import { User } from '../../models';
+import { SpeakerData } from '../../providers/speaker-data';
@Component({
selector: 'page-account',
@@ -19,7 +20,8 @@ export class AccountPage implements AfterViewInit {
constructor(public alertCtrl: AlertController,
public router: Router,
- public userProvider: UserData) {}
+ public userProvider: UserData,
+ public spkProvider: SpeakerData) {}
ngAfterViewInit() {
this.userProvider.getUsers().subscribe(
diff --git a/src/app/pages/session-detail/session-detail.html b/src/app/pages/session-detail/session-detail.html
index 7a40fe5c1..1eb28ebd6 100644
--- a/src/app/pages/session-detail/session-detail.html
+++ b/src/app/pages/session-detail/session-detail.html
@@ -1,7 +1,7 @@
-
+
{{session?.name}}
diff --git a/src/app/pages/speaker-detail/speaker-detail.html b/src/app/pages/speaker-detail/speaker-detail.html
index 6de184107..824af706f 100644
--- a/src/app/pages/speaker-detail/speaker-detail.html
+++ b/src/app/pages/speaker-detail/speaker-detail.html
@@ -1,7 +1,7 @@
-
+
{{speaker?.name}}
@@ -12,16 +12,20 @@
-
+
-
+
-
+
{{speaker?.about}}
+
{{speaker?.location}}
+
{{speaker?.email}}
+
{{speaker?.phone}}
+
Sessions involved: {{speaker?.sessions.length}}
diff --git a/src/app/pages/speaker-detail/speaker-detail.ts b/src/app/pages/speaker-detail/speaker-detail.ts
index 63b6a47fb..29729b5d5 100644
--- a/src/app/pages/speaker-detail/speaker-detail.ts
+++ b/src/app/pages/speaker-detail/speaker-detail.ts
@@ -1,7 +1,9 @@
import { Component, ViewEncapsulation } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
-import { ConferenceData } from '../../providers/conference-data';
+import { InAppBrowser } from '@ionic-native/in-app-browser/ngx';
+import { SpeakerData } from '../../providers/speaker-data';
+import { Speaker } from '../../models';
@Component({
selector: 'page-speaker-detail',
@@ -10,30 +12,44 @@ import { ConferenceData } from '../../providers/conference-data';
encapsulation: ViewEncapsulation.None
})
export class SpeakerDetailPage {
- speaker: any;
+ speaker: Speaker;
constructor(
- private dataProvider: ConferenceData,
+ private speakerProvider: SpeakerData,
private router: Router,
- private route: ActivatedRoute
+ private route: ActivatedRoute,
+ public inAppBrowser: InAppBrowser
) {}
ionViewWillEnter() {
- this.dataProvider.load().subscribe((data: any) => {
- const speakerId = this.route.snapshot.paramMap.get('speakerId');
- if (data && data.speakers) {
- for (const speaker of data.speakers) {
- if (speaker && speaker.id === speakerId) {
- this.speaker = speaker;
- break;
- }
- }
- }
- });
-
+ const id = this.route.snapshot.paramMap.get('speakerId');
+ this.speakerProvider.getSpeaker(id)
+ .then( data => { this.speaker = data; }
+ );
}
goToSessionDetail(session: any) {
this.router.navigateByUrl(`app/tabs/(schedule:session/${session.id})`);
}
+
+ goToSpeakerTwitter() {
+ this.inAppBrowser.create(
+ `https://twitter.com/${this.speaker.twitter}`,
+ '_blank'
+ );
+ }
+
+ goToSpeakergithub() {
+ this.inAppBrowser.create(
+ `https://github.com/${this.speaker.github}`,
+ '_blank'
+ );
+ }
+
+ goToSpeakerInstagram() {
+ this.inAppBrowser.create(
+ `https://instagram.com/${this.speaker.instagram}`,
+ '_blank'
+ );
+ }
}
diff --git a/src/app/pages/speaker-list/speaker-list.ts b/src/app/pages/speaker-list/speaker-list.ts
index 626e15c71..ae6b943ec 100644
--- a/src/app/pages/speaker-list/speaker-list.ts
+++ b/src/app/pages/speaker-list/speaker-list.ts
@@ -1,4 +1,4 @@
-import { Component, ViewEncapsulation, OnInit } from '@angular/core';
+import { Component, ViewEncapsulation } from '@angular/core';
import { Router } from '@angular/router';
import { InAppBrowser } from '@ionic-native/in-app-browser/ngx';
import { ActionSheetController, AlertController } from '@ionic/angular';
@@ -12,7 +12,7 @@ import { SpeakerData } from '../../providers/speaker-data';
styleUrls: ['./speaker-list.scss'],
encapsulation: ViewEncapsulation.None
})
-export class SpeakerListPage implements OnInit {
+export class SpeakerListPage {
speakers: Speaker[];
constructor(
@@ -23,19 +23,13 @@ export class SpeakerListPage implements OnInit {
public router: Router
) {}
- ngOnInit() {
+ ionViewDidEnter() {
this.speakerProvider.getSpeakers().subscribe(
speakers => { this.speakers = speakers; }
);
}
- ionViewDidEnter() {
- // this.dataProvider.getSpeakers().subscribe((speakers: any[]) => {
- // this.speakers = speakers;
- // });
- }
-
- goToSpeakerTwitter(speaker: any) {
+ goToSpeakerTwitter(speaker: Speaker) {
this.inAppBrowser.create(
`https://twitter.com/${speaker.twitter}`,
'_blank'
@@ -100,50 +94,4 @@ export class SpeakerListPage implements OnInit {
await actionSheet.present();
}
-
- async addNewSpeaker() {
- // this.succeed = false;
- const changeForm = await this.alertCtrl.create({
- header: 'Change Password',
- buttons: [
- 'Cancel',
- {
- text: 'Ok',
- handler: (data: any) => {
- // if (this.user.password !== data.currentPW) {
- // alert('Current password does not match your password.');
- // } else if (data.newPW.length < 4) {
- // alert('Password should be more than 3 characters.');
- // } else if (data.newPW !== data.confirmPW) {
- // alert('New password does not match Confirm password.');
- // } else {
- // this.user.password = data.newPW;
- // this.userData.updateUser(this.user);
- // this.succeed = true;
- // this.jobDescription = 'Password has been changed.';
- // }
- }
- }
- ],
- inputs: [
- {
- type: 'password',
- name: 'newPW',
- placeholder: 'new password'
- },
- {
- type: 'password',
- name: 'confirmPW',
- placeholder: 'confirm password'
- },
- {
- type: 'password',
- name: 'currentPW',
- placeholder: 'current password'
- }
- ]
- });
- await changeForm.present();
- }
-
}
diff --git a/src/app/providers/speaker-data.ts b/src/app/providers/speaker-data.ts
index 9e09d6a48..c6e71d6b7 100644
--- a/src/app/providers/speaker-data.ts
+++ b/src/app/providers/speaker-data.ts
@@ -2,7 +2,7 @@ import { Injectable } from '@angular/core';
import { AngularFirestore,
AngularFirestoreCollection,
AngularFirestoreDocument } from 'angularfire2/firestore';
-import { Observable } from 'rxjs';
+import { Observable, of } from 'rxjs';
import { map } from 'rxjs/operators';
import { Speaker } from '../models';
@@ -33,13 +33,12 @@ export class SpeakerData {
return this.speakers ;
}
- getSpeaker(name: string): Speaker {
- let speaker;
- this.getSpeakers().subscribe(
- (data: Speaker[]) => {
- speaker = data.find(spk => spk.name === name);
+ getSpeaker(id: string) {
+ return this.speakersCollection.doc(id).ref.get()
+ .then(doc => {
+ const speaker = doc.data() as Speaker;
+ return speaker;
});
- return speaker;
}
addNewSpeaker(speaker: Speaker) {
@@ -57,4 +56,20 @@ export class SpeakerData {
const name = this.speakerDoc.snapshotChanges.name;
return name;
}
+
+ updateSpeakers() {
+ this.getSpeakers().subscribe(
+ (speakers: Speaker[]) => {
+ speakers.forEach( speaker => {
+ const id = speaker.id;
+ delete(speaker.id);
+ speaker.instagram = '';
+ speaker.github = 'hogusong';
+ if (!speaker.twitter) { speaker.twitter = 'YoungSongJS'; }
+ this.speakerDoc = this.afs.doc(`speakers/${id}`);
+ this.speakerDoc.update(speaker);
+ });
+ }
+ );
+ }
}
From be2f9c17c740b815a84696bbaf03bb1cd84bb616 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E2=80=9CYoung?= <“hogusong1@gmail.com”>
Date: Thu, 20 Dec 2018 21:39:21 -0500
Subject: [PATCH 11/25] update schedule-filter.ts: work by user's default
setting and update user's data
---
src/app/models.ts | 1 +
src/app/pages/account/account.ts | 4 +--
.../schedule-filter/schedule-filter.html | 5 ++-
.../pages/schedule-filter/schedule-filter.ts | 36 +++++++++----------
src/app/pages/signup/signup.ts | 19 ++++++++--
src/app/providers/conference-data.ts | 33 ++++++++++++-----
src/app/providers/user-data.ts | 15 --------
7 files changed, 62 insertions(+), 51 deletions(-)
diff --git a/src/app/models.ts b/src/app/models.ts
index dfe2f276f..a2d2691b0 100644
--- a/src/app/models.ts
+++ b/src/app/models.ts
@@ -49,6 +49,7 @@ export interface User {
password: string;
email: string;
favorites: IdName[]; // session's id and name.
+ trackFilter: { name: string, isChecked: boolean }[];
}
export interface Support {
diff --git a/src/app/pages/account/account.ts b/src/app/pages/account/account.ts
index 0d7c8e685..25cb408a1 100644
--- a/src/app/pages/account/account.ts
+++ b/src/app/pages/account/account.ts
@@ -4,7 +4,6 @@ import { AlertController } from '@ionic/angular';
import { UserData } from '../../providers/user-data';
import { User } from '../../models';
-import { SpeakerData } from '../../providers/speaker-data';
@Component({
selector: 'page-account',
@@ -20,8 +19,7 @@ export class AccountPage implements AfterViewInit {
constructor(public alertCtrl: AlertController,
public router: Router,
- public userProvider: UserData,
- public spkProvider: SpeakerData) {}
+ public userProvider: UserData) {}
ngAfterViewInit() {
this.userProvider.getUsers().subscribe(
diff --git a/src/app/pages/schedule-filter/schedule-filter.html b/src/app/pages/schedule-filter/schedule-filter.html
index ffafd4cd0..4db1879e2 100644
--- a/src/app/pages/schedule-filter/schedule-filter.html
+++ b/src/app/pages/schedule-filter/schedule-filter.html
@@ -19,12 +19,11 @@
Tracks
-
+
{{track.name}}
-
+
-
diff --git a/src/app/pages/schedule-filter/schedule-filter.ts b/src/app/pages/schedule-filter/schedule-filter.ts
index 56739e835..a2ed6d8e6 100644
--- a/src/app/pages/schedule-filter/schedule-filter.ts
+++ b/src/app/pages/schedule-filter/schedule-filter.ts
@@ -2,7 +2,8 @@ import { AfterViewInit, Component, ViewEncapsulation } from '@angular/core';
import { ModalController } from '@ionic/angular';
import { ConferenceData } from '../../providers/conference-data';
-
+import { UserData } from '../../providers/user-data';
+import { User } from '../../models';
@Component({
selector: 'page-schedule-filter',
@@ -11,43 +12,42 @@ import { ConferenceData } from '../../providers/conference-data';
encapsulation: ViewEncapsulation.None
})
export class ScheduleFilterPage implements AfterViewInit {
-
- tracks: {name: string, isChecked: boolean}[] = [];
+ user: User;
+ trackFilter: { name: string, isChecked: boolean }[] = [];
constructor(
- public confData: ConferenceData,
- public modalCtrl: ModalController
+ public dataProvider: ConferenceData,
+ public modalCtrl: ModalController,
+ public userProvider: UserData
) { }
// TODO use the ionViewDidEnter event
ngAfterViewInit() {
- // passed in array of track names that should be excluded (unchecked)
- const excludedTrackNames = []; // this.navParams.data.excludedTracks;
-
- this.confData.getTracks().subscribe((trackNames: string[]) => {
- trackNames.forEach(trackName => {
- this.tracks.push({
- name: trackName,
- isChecked: (excludedTrackNames.indexOf(trackName) === -1)
- });
- });
+ this.userProvider.getUser().then(user => {
+ this.user = user;
+ this.trackFilter = user.trackFilter;
});
}
resetFilters() {
// reset all of the toggles to be checked
- this.tracks.forEach(track => {
+ this.trackFilter.forEach(track => {
track.isChecked = true;
});
}
applyFilters() {
+ // update user's trackFilter
+ console.log(this.trackFilter);
+ this.user.trackFilter = this.trackFilter;
+ this.userProvider.updateUser(this.user);
+
// Pass back a new array of track names to exclude
- const excludedTrackNames = this.tracks.filter(c => !c.isChecked).map(c => c.name);
+ const excludedTrackNames = this.trackFilter.filter(c => !c.isChecked).map(c => c.name);
this.dismiss(excludedTrackNames);
}
- dismiss(data?: any) {
+ dismiss(data: any) {
// using the injected ModalController this page
// can "dismiss" itself and pass back data
this.modalCtrl.dismiss(data);
diff --git a/src/app/pages/signup/signup.ts b/src/app/pages/signup/signup.ts
index 491158b24..c33da1ade 100644
--- a/src/app/pages/signup/signup.ts
+++ b/src/app/pages/signup/signup.ts
@@ -3,7 +3,8 @@ import { NgForm } from '@angular/forms';
import { Router } from '@angular/router';
import { UserData } from '../../providers/user-data';
-import { User } from '../../models';
+import { ConferenceData } from '../../providers/conference-data';
+import { User, Track } from '../../models';
@Component({
selector: 'page-signup',
@@ -14,18 +15,23 @@ import { User } from '../../models';
export class SignupPage implements OnInit {
users: User[];
signup: User = {
- username: '', password: '', email: '', favorites: []
+ username: '', password: '', email: '', favorites: [], trackFilter: []
};
+ tracks: Track[];
confirmPassword = '';
submitted = false;
constructor(public router: Router,
- public userProvider: UserData) {}
+ public userProvider: UserData,
+ public dataProvider: ConferenceData) {}
ngOnInit() {
this.userProvider.getUsers().subscribe(
(data: User[]) => { this.users = data; }
);
+ this.dataProvider.getTracks().subscribe(
+ (tracks: Track[]) => { this.tracks = tracks; }
+ );
}
onSignup(form: NgForm) {
@@ -36,12 +42,19 @@ export class SignupPage implements OnInit {
} else if (this.isEmailUsed(this.signup.email)) {
alert('Email is already taken.');
} else {
+ this.setTrackFilter()
this.userProvider.signup(this.signup);
this.router.navigateByUrl('/app/tabs/(schedule:schedule)');
}
}
}
+ setTrackFilter() {
+ this.tracks.forEach(track => {
+ this.signup.trackFilter.push({ name: track.name, isChecked: true });
+ });
+ }
+
isNameUsed(name) {
return this.users.find(ur => ur.username.toLowerCase() === name.toLowerCase());
}
diff --git a/src/app/providers/conference-data.ts b/src/app/providers/conference-data.ts
index cc0dce599..329b3bc4b 100644
--- a/src/app/providers/conference-data.ts
+++ b/src/app/providers/conference-data.ts
@@ -1,19 +1,30 @@
import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
-import { of } from 'rxjs';
+import { AngularFirestore,
+ AngularFirestoreCollection,
+ AngularFirestoreDocument } from 'angularfire2/firestore';
+import { Observable, of } from 'rxjs';
import { map } from 'rxjs/operators';
import { UserData } from './user-data';
+import { Track } from '../models';
@Injectable({
providedIn: 'root'
})
export class ConferenceData {
+ tracksCollection: AngularFirestoreCollection ;
+ trackDoc: AngularFirestoreDocument ;
+ tracks: Observable ;
+ track: Observable ;
data: any;
constructor(
public http: HttpClient,
- public user: UserData
- ) {}
+ public user: UserData,
+ private afs: AngularFirestore) {
+ this.tracksCollection = this.afs.collection(
+ 'tracks', ref => ref.orderBy('name', 'asc'));
+ }
load(): any {
if (this.data) {
@@ -155,12 +166,16 @@ export class ConferenceData {
);
}
- getTracks() {
- return this.load().pipe(
- map((data: any) => {
- return data.tracks.sort();
- })
- );
+ getTracks(): Observable {
+ this.tracks = this.tracksCollection.snapshotChanges()
+ .pipe(map(response => {
+ return response.map(action => {
+ const data = action.payload.doc.data() as Track;
+ data.id = action.payload.doc.id;
+ return data;
+ });
+ }));
+ return this.tracks ;
}
getMap() {
diff --git a/src/app/providers/user-data.ts b/src/app/providers/user-data.ts
index 82134fac6..97e05f8ad 100644
--- a/src/app/providers/user-data.ts
+++ b/src/app/providers/user-data.ts
@@ -93,21 +93,6 @@ export class UserData {
});
}
- // updateUsername(username: string) {
- // this.storage.get('user')
- // .then((user) => {
- // const id = user.id ;
- // delete(user.id);
- // user.username = username;
- // this.userDoc = this.afs.doc(`users/${id}`);
- // this.userDoc.update(user)
- // .then(() => {
- // user.id = id;
- // this.storage.set('user', user);
- // });
- // });
- // }
-
getUser(): Promise {
return this.storage.get('user').then(user => user);
}
From 1bfb8a52ae1a64d66a0ec6c7d1abb6f31667371f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E2=80=9CYoung?= <“hogusong1@gmail.com”>
Date: Fri, 21 Dec 2018 15:00:38 -0500
Subject: [PATCH 12/25] add 'trackFilter' to user and modify 'signup.ts' to
update user file
---
src/app/pages/schedule-filter/schedule-filter.ts | 1 -
src/app/pages/signup/signup.ts | 2 +-
2 files changed, 1 insertion(+), 2 deletions(-)
diff --git a/src/app/pages/schedule-filter/schedule-filter.ts b/src/app/pages/schedule-filter/schedule-filter.ts
index a2ed6d8e6..e2bc7692d 100644
--- a/src/app/pages/schedule-filter/schedule-filter.ts
+++ b/src/app/pages/schedule-filter/schedule-filter.ts
@@ -38,7 +38,6 @@ export class ScheduleFilterPage implements AfterViewInit {
applyFilters() {
// update user's trackFilter
- console.log(this.trackFilter);
this.user.trackFilter = this.trackFilter;
this.userProvider.updateUser(this.user);
diff --git a/src/app/pages/signup/signup.ts b/src/app/pages/signup/signup.ts
index c33da1ade..2a9c17e17 100644
--- a/src/app/pages/signup/signup.ts
+++ b/src/app/pages/signup/signup.ts
@@ -42,7 +42,7 @@ export class SignupPage implements OnInit {
} else if (this.isEmailUsed(this.signup.email)) {
alert('Email is already taken.');
} else {
- this.setTrackFilter()
+ this.setTrackFilter();
this.userProvider.signup(this.signup);
this.router.navigateByUrl('/app/tabs/(schedule:schedule)');
}
From 66b1677ed0ecdfe358c23d1a138a1689fcb5d701 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E2=80=9CYoung?= <“hogusong1@gmail.com”>
Date: Fri, 21 Dec 2018 20:10:50 -0500
Subject: [PATCH 13/25] add 'Select one track mode' to list up the schedule by
the selected track.
---
.../pages/schedule-track/schedule-track.html | 25 +++++++++
.../pages/schedule-track/schedule-track.scss | 0
.../pages/schedule-track/schedule-track.ts | 41 +++++++++++++++
src/app/pages/schedule/schedule.html | 5 +-
src/app/pages/schedule/schedule.module.ts | 7 ++-
src/app/pages/schedule/schedule.ts | 52 ++++++++++++++++---
6 files changed, 119 insertions(+), 11 deletions(-)
create mode 100644 src/app/pages/schedule-track/schedule-track.html
create mode 100644 src/app/pages/schedule-track/schedule-track.scss
create mode 100644 src/app/pages/schedule-track/schedule-track.ts
diff --git a/src/app/pages/schedule-track/schedule-track.html b/src/app/pages/schedule-track/schedule-track.html
new file mode 100644
index 000000000..a019a52c7
--- /dev/null
+++ b/src/app/pages/schedule-track/schedule-track.html
@@ -0,0 +1,25 @@
+
+
+
+ One Track Session
+
+
+
+ Cancel
+
+
+
+
+
+
+
+
+ Tracks
+
+
+
+ {{track.name}}
+
+
+
+
diff --git a/src/app/pages/schedule-track/schedule-track.scss b/src/app/pages/schedule-track/schedule-track.scss
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/app/pages/schedule-track/schedule-track.ts b/src/app/pages/schedule-track/schedule-track.ts
new file mode 100644
index 000000000..f985cb83d
--- /dev/null
+++ b/src/app/pages/schedule-track/schedule-track.ts
@@ -0,0 +1,41 @@
+import { AfterViewInit, Component, ViewEncapsulation } from '@angular/core';
+import { ModalController } from '@ionic/angular';
+
+import { ConferenceData } from '../../providers/conference-data';
+import { UserData } from '../../providers/user-data';
+import { Track } from '../../models';
+
+@Component({
+ selector: 'page-schedule-track',
+ templateUrl: './schedule-track.html',
+ styleUrls: ['./schedule-track.scss'],
+ encapsulation: ViewEncapsulation.None
+
+})
+export class ScheduleTrackPage implements AfterViewInit {
+ tracks: Track[] = [];
+
+ constructor(private dataProvider: ConferenceData,
+ public modalCtrl: ModalController) { }
+
+ ngAfterViewInit() {
+ this.dataProvider.getTracks().subscribe(
+ (tracks: Track[]) => { this.tracks = tracks; }
+ );
+ }
+
+ applyTrack(name: string) {
+ // Pass back a new array of track names to exclude
+ const excludedTracks = [];
+ this.tracks.forEach(
+ (track) => { if (track.name !== name ) { excludedTracks.push(track.name); }
+ });
+ this.dismiss(excludedTracks);
+ }
+
+ dismiss(data: any) {
+ // using the injected ModalController this page
+ // can "dismiss" itself and pass back data
+ this.modalCtrl.dismiss(data);
+ }
+}
diff --git a/src/app/pages/schedule/schedule.html b/src/app/pages/schedule/schedule.html
index 509d31258..76cf78e5d 100644
--- a/src/app/pages/schedule/schedule.html
+++ b/src/app/pages/schedule/schedule.html
@@ -4,10 +4,13 @@
-
+
All
+
+ Track
+
Favorites
diff --git a/src/app/pages/schedule/schedule.module.ts b/src/app/pages/schedule/schedule.module.ts
index 77ba69818..90f545e15 100644
--- a/src/app/pages/schedule/schedule.module.ts
+++ b/src/app/pages/schedule/schedule.module.ts
@@ -5,6 +5,7 @@ import { IonicModule } from '@ionic/angular';
import { SchedulePage } from './schedule';
import { ScheduleFilterPage } from '../schedule-filter/schedule-filter';
+import { ScheduleTrackPage } from '../schedule-track/schedule-track';
import { SchedulePageRoutingModule } from './schedule-routing.module';
@NgModule({
@@ -16,10 +17,12 @@ import { SchedulePageRoutingModule } from './schedule-routing.module';
],
declarations: [
SchedulePage,
- ScheduleFilterPage
+ ScheduleFilterPage,
+ ScheduleTrackPage
],
entryComponents: [
- ScheduleFilterPage
+ ScheduleFilterPage,
+ ScheduleTrackPage
]
})
export class ScheduleModule { }
diff --git a/src/app/pages/schedule/schedule.ts b/src/app/pages/schedule/schedule.ts
index 2d2d53cee..57ffbd56d 100644
--- a/src/app/pages/schedule/schedule.ts
+++ b/src/app/pages/schedule/schedule.ts
@@ -3,8 +3,10 @@ import { Router } from '@angular/router';
import { AlertController, List, LoadingController, ModalController, ToastController } from '@ionic/angular';
import { ScheduleFilterPage } from '../schedule-filter/schedule-filter';
+import { ScheduleTrackPage } from '../schedule-track/schedule-track';
import { ConferenceData } from '../../providers/conference-data';
import { UserData } from '../../providers/user-data';
+import { User } from '../../models';
@Component({
selector: 'page-schedule',
@@ -16,9 +18,10 @@ export class SchedulePage {
// Gets a reference to the list element
@ViewChild('scheduleList') scheduleList: List;
+ user: User;
dayIndex = 0;
queryText = '';
- segment = 'all';
+ segment = '';
excludeTracks: any = [];
shownSessions: any = [];
groups: any = [];
@@ -26,16 +29,22 @@ export class SchedulePage {
constructor(
public alertCtrl: AlertController,
- public confData: ConferenceData,
+ public dataProvider: ConferenceData,
public loadingCtrl: LoadingController,
public modalCtrl: ModalController,
public router: Router,
public toastCtrl: ToastController,
- public user: UserData
+ public userProvider: UserData
) { }
ionViewWillEnter() {
// this.app.setTitle('Schedule');
+ this.userProvider.getUser().then(user => {
+ this.user = user;
+ this.user.trackFilter.forEach(track => {
+ if (track.isChecked) { this.excludeTracks.push(track.name); }
+ });
+ });
this.updateSchedule();
}
@@ -45,12 +54,38 @@ export class SchedulePage {
this.scheduleList.closeSlidingItems();
}
- this.confData.getTimeline(this.dayIndex, this.queryText, this.excludeTracks, this.segment).subscribe((data: any) => {
+ this.dataProvider.getTimeline(this.dayIndex, this.queryText, this.excludeTracks, this.segment).subscribe((data: any) => {
this.shownSessions = data.shownSessions;
this.groups = data.groups;
});
}
+ processBySegment() {
+ if (this.segment === 'one') {
+ this.chooseTrack();
+ } else if (this.segment === 'all') {
+ this.excludeTracks = [];
+ this.updateSchedule();
+ }
+ }
+
+ async chooseTrack() {
+ const modal = await this.modalCtrl.create({
+ component: ScheduleTrackPage,
+ componentProps: { excludedTracks: this.excludeTracks }
+ });
+ await modal.present();
+
+ const { data } = await modal.onWillDismiss();
+ if (data) {
+ this.excludeTracks = data;
+ this.segment = 'user';
+ this.updateSchedule();
+ } else {
+ this.segment = '';
+ }
+ }
+
async presentFilter() {
const modal = await this.modalCtrl.create({
component: ScheduleFilterPage,
@@ -61,6 +96,7 @@ export class SchedulePage {
const { data } = await modal.onWillDismiss();
if (data) {
this.excludeTracks = data;
+ this.segment = 'user';
this.updateSchedule();
}
}
@@ -72,13 +108,13 @@ export class SchedulePage {
}
async addFavorite(slidingItem: HTMLIonItemSlidingElement, sessionData: any) {
- if (this.user.hasFavorite(sessionData.name)) {
+ if (this.userProvider.hasFavorite(sessionData.name)) {
// woops, they already favorited it! What shall we do!?
// prompt them to remove it
this.removeFavorite(slidingItem, sessionData, 'Favorite already added');
} else {
// remember this session as a user favorite
- this.user.addFavorite(sessionData.name);
+ this.userProvider.addFavorite(sessionData.name);
// create an alert instance
const alert = await this.alertCtrl.create({
@@ -114,7 +150,7 @@ export class SchedulePage {
text: 'Remove',
handler: () => {
// they want to remove this session from their favorites
- this.user.removeFavorite(sessionData.name);
+ this.userProvider.removeFavorite(sessionData.name);
this.updateSchedule();
// close the sliding item and hide the option buttons
@@ -138,7 +174,7 @@ export class SchedulePage {
}
/*doRefresh(refresher: Refresher) {
- this.confData.getTimeline(this.dayIndex, this.queryText, this.excludeTracks, this.segment).subscribe((data: any) => {
+ this.dataProvider.getTimeline(this.dayIndex, this.queryText, this.excludeTracks, this.segment).subscribe((data: any) => {
this.shownSessions = data.shownSessions;
this.groups = data.groups;
From 515cf8aa8a9b76edefa5b8a6441385f038208376 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E2=80=9CYoung?= <“hogusong1@gmail.com”>
Date: Sat, 22 Dec 2018 21:17:38 -0500
Subject: [PATCH 14/25] update 'schedule mode': get main sessions from firebase
and manipulate them
---
src/app/models.ts | 4 +-
src/app/pages/schedule/schedule.html | 54 +++++----
src/app/pages/schedule/schedule.ts | 108 +++++++++++++++--
src/app/providers/conference-data.ts | 172 +++++++++------------------
src/app/providers/session-data.ts | 2 +-
5 files changed, 181 insertions(+), 159 deletions(-)
diff --git a/src/app/models.ts b/src/app/models.ts
index a2d2691b0..50a1e6cfe 100644
--- a/src/app/models.ts
+++ b/src/app/models.ts
@@ -28,6 +28,7 @@ export interface Session {
description?: string;
speakerIDs: string[]; // speaker's id
tracks: string[]; // name of track
+ hide?: boolean;
}
export interface IdName {
@@ -60,7 +61,8 @@ export interface Support {
}
export interface PartOfDay {
- partOfDay: string; // morning, afternoon, evening, overnight
+ indexKey: number;
+ name: string; // morning, afternoon, evening, overnight
timeFrom: string;
timeTo: string;
}
diff --git a/src/app/pages/schedule/schedule.html b/src/app/pages/schedule/schedule.html
index 76cf78e5d..017175169 100644
--- a/src/app/pages/schedule/schedule.html
+++ b/src/app/pages/schedule/schedule.html
@@ -24,40 +24,42 @@
-
+
-
-
-
-
- {{group.time}}
-
-
-
-
-
+
+
+
+
- {{session.name}}
-
- {{session.timeStart}} — {{session.timeEnd}}: {{session.location}}
-
+ {{daily.date}} : {{group.partOfDay}}
-
-
-
- Favorite
-
-
- Remove
-
-
-
+
+
+
+
+
+ {{session.name}}
+
+ {{session.timeStart}} — {{session.timeEnd}}: {{session.location}}
+
+
+
+
+
+ Favorite
+
+
+ Remove
+
+
+
+
- 0">
+ 0">
No Sessions Found
diff --git a/src/app/pages/schedule/schedule.ts b/src/app/pages/schedule/schedule.ts
index 57ffbd56d..1a7956f8a 100644
--- a/src/app/pages/schedule/schedule.ts
+++ b/src/app/pages/schedule/schedule.ts
@@ -6,7 +6,7 @@ import { ScheduleFilterPage } from '../schedule-filter/schedule-filter';
import { ScheduleTrackPage } from '../schedule-track/schedule-track';
import { ConferenceData } from '../../providers/conference-data';
import { UserData } from '../../providers/user-data';
-import { User } from '../../models';
+import { User, Session, PartOfDay } from '../../models';
@Component({
selector: 'page-schedule',
@@ -19,13 +19,28 @@ export class SchedulePage {
@ViewChild('scheduleList') scheduleList: List;
user: User;
- dayIndex = 0;
+ // dayIndex = 0;
queryText = '';
segment = '';
- excludeTracks: any = [];
- shownSessions: any = [];
- groups: any = [];
- confDate: string;
+ excludeTracks: any[] = [];
+ // shownSessions: any = [];
+ // groups: any = [];
+ // confDate: string;
+
+ start = '2019-01-10';
+ end = '2019-01-15';
+ changePeriod = true;
+
+ partsOfDay: PartOfDay[];
+ sessions: Session[];
+ schedule: {
+ date: string,
+ groups: {
+ indexKey: number
+ partOfDay: string,
+ sessions: any[]
+ }[]
+ }[] = [];
constructor(
public alertCtrl: AlertController,
@@ -45,6 +60,11 @@ export class SchedulePage {
if (track.isChecked) { this.excludeTracks.push(track.name); }
});
});
+
+ this.dataProvider.getPartsOfDay().subscribe(
+ response => { this.partsOfDay = response ; }
+ );
+
this.updateSchedule();
}
@@ -54,9 +74,73 @@ export class SchedulePage {
this.scheduleList.closeSlidingItems();
}
- this.dataProvider.getTimeline(this.dayIndex, this.queryText, this.excludeTracks, this.segment).subscribe((data: any) => {
- this.shownSessions = data.shownSessions;
- this.groups = data.groups;
+ if (this.schedule.length === 0 || this.changePeriod) {
+ this.changePeriod = false;
+ this.dataProvider.getSessionInPeriod(this.start, this.end).subscribe(
+ (response: Session[]) => {
+ this.sessions = response;
+ this.buildSchedule();
+ });
+ }
+ }
+
+ getFilterOption() {
+ return {
+ queryText: this.queryText.toLowerCase().trim(),
+ segment: this.segment,
+ excludeTracks: this.excludeTracks
+ };
+ }
+
+ buildSchedule() {
+ const filterOption = this.getFilterOption();
+ this.sessions.forEach(session => {
+ session = this.dataProvider.filterSession(session, filterOption);
+ const partOfDay = this.partsOfDay.find(part => part.timeFrom <= session.timeStart && part.timeTo >= session.timeStart);
+ const newGroup = {
+ indexKey: partOfDay.indexKey,
+ partOfDay: partOfDay.name,
+ sessions: [session]
+ };
+ const newItem = { date: session.date, groups: [newGroup]};
+
+ const sIndex = this.schedule.findIndex(item => item.date === session.date);
+ if (sIndex < 0) {
+ this.schedule.push(newItem);
+ } else {
+ const gIndex = this.schedule[sIndex].groups.findIndex(
+ group => group.partOfDay === partOfDay.name
+ );
+ if (gIndex < 0) {
+ this.schedule[sIndex].groups.push(newGroup);
+ } else {
+ this.schedule[sIndex].groups[gIndex].sessions.push(session);
+ }
+ }
+ });
+ this.schedule.sort((a, b) => {
+ if (a.date > b.date) { return 1; }
+ return -1;
+ });
+ this.schedule.forEach(item => {
+ item.groups.sort((a, b) => a.indexKey - b.indexKey);
+ item.groups.forEach(group => {
+ group.sessions.sort((a, b) => {
+ if (a.timeStart > b.timeStart) { return 1; }
+ return -1;
+ });
+ });
+ });
+ }
+
+ updateFilter() {
+ const filterOption = this.getFilterOption();
+ this.schedule.forEach(daily => {
+ daily.groups.forEach(group => {
+ group.sessions.forEach(session => {
+ session = this.dataProvider.filterSession(session, filterOption);
+ });
+ });
});
}
@@ -65,7 +149,7 @@ export class SchedulePage {
this.chooseTrack();
} else if (this.segment === 'all') {
this.excludeTracks = [];
- this.updateSchedule();
+ this.updateFilter();
}
}
@@ -80,7 +164,7 @@ export class SchedulePage {
if (data) {
this.excludeTracks = data;
this.segment = 'user';
- this.updateSchedule();
+ this.updateFilter();
} else {
this.segment = '';
}
@@ -97,7 +181,7 @@ export class SchedulePage {
if (data) {
this.excludeTracks = data;
this.segment = 'user';
- this.updateSchedule();
+ this.updateFilter();
}
}
diff --git a/src/app/providers/conference-data.ts b/src/app/providers/conference-data.ts
index 329b3bc4b..b9e84bc2d 100644
--- a/src/app/providers/conference-data.ts
+++ b/src/app/providers/conference-data.ts
@@ -3,10 +3,10 @@ import { Injectable } from '@angular/core';
import { AngularFirestore,
AngularFirestoreCollection,
AngularFirestoreDocument } from 'angularfire2/firestore';
-import { Observable, of } from 'rxjs';
+import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
import { UserData } from './user-data';
-import { Track } from '../models';
+import { Track, Session, PartOfDay } from '../models';
@Injectable({
providedIn: 'root'
@@ -16,115 +16,60 @@ export class ConferenceData {
trackDoc: AngularFirestoreDocument ;
tracks: Observable ;
track: Observable ;
+
+ sessionsCollection: AngularFirestoreCollection;
+ sessions: Observable ;
+ session: Observable ;
+
+ partsOfDayCollection: AngularFirestoreCollection;
+ partsOfDay: Observable;
+
data: any;
constructor(
public http: HttpClient,
- public user: UserData,
+ public userProvider: UserData,
private afs: AngularFirestore) {
this.tracksCollection = this.afs.collection(
'tracks', ref => ref.orderBy('name', 'asc'));
+ this.partsOfDayCollection = this.afs.collection(
+ 'partsOfDay', ref => ref.orderBy('indexKey', 'asc'));
}
- load(): any {
- if (this.data) {
- return of(this.data);
- } else {
- return this.http
- .get('assets/data/data.json')
- .pipe(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;
-
- 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);
- }
- });
- }
- });
+ getPartsOfDay(): Observable {
+ this.partsOfDay = this.partsOfDayCollection.snapshotChanges()
+ .pipe(map(response => {
+ return response.map(action => {
+ const data = action.payload.doc.data() as PartOfDay;
+ return data;
});
- });
-
- return this.data;
+ }));
+ return this.partsOfDay ;
}
- getTimeline(
- dayIndex: number,
- queryText = '',
- excludeTracks: any[] = [],
- segment = 'all'
- ) {
- return this.load().pipe(
- 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;
- })
- );
+ getSessionInPeriod(start, end): Observable {
+ this.sessionsCollection = this.afs.collection(
+ 'sessions', ref => ref.where('date', '>=', start)
+ .where('date', '<=', end)
+ .orderBy('date', 'asc'));
+ this.sessions = this.sessionsCollection.snapshotChanges()
+ .pipe(map(response => {
+ return response.map(action => {
+ const data = action.payload.doc.data() as Session;
+ data.id = action.payload.doc.id;
+ return data;
+ });
+ }));
+ return this.sessions ;
}
- filterSession(
- session: any,
- queryWords: string[],
- excludeTracks: any[],
- segment: string
- ) {
+ filterSession(session: any, options: any) {
let matchesQueryText = false;
- if (queryWords.length) {
+ if (options.queryText.length > 0) {
// 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;
- }
- });
+ if (session.name.toLowerCase().indexOf(options.queryText) > -1) {
+ matchesQueryText = true;
+ }
} else {
// if there are no query words then this session passes the query test
matchesQueryText = true;
@@ -134,7 +79,7 @@ export class ConferenceData {
// exclude tracks then this session passes the track test
let matchesTracks = false;
session.tracks.forEach((trackName: string) => {
- if (excludeTracks.indexOf(trackName) === -1) {
+ if (options.excludeTracks.indexOf(trackName) === -1) {
matchesTracks = true;
}
});
@@ -142,28 +87,17 @@ export class ConferenceData {
// 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;
- }
+ if (options.segment === 'favorites') {
+ this.userProvider.getUser().then(user => {
+ matchesSegment = (user.favorites.indexOf(session.name) > -1);
+ });
} else {
matchesSegment = true;
}
// all tests must be true if it should not be hidden
session.hide = !(matchesQueryText && matchesTracks && matchesSegment);
- }
-
- getSpeakers() {
- return this.load().pipe(
- 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);
- });
- })
- );
+ return session;
}
getTracks(): Observable {
@@ -178,11 +112,11 @@ export class ConferenceData {
return this.tracks ;
}
- getMap() {
- return this.load().pipe(
- map((data: any) => {
- return data.map;
- })
- );
- }
+ // getMap() {
+ // return this.load().pipe(
+ // map((data: any) => {
+ // return data.map;
+ // })
+ // );
+ // }
}
diff --git a/src/app/providers/session-data.ts b/src/app/providers/session-data.ts
index 1d1cef267..f723b31cc 100644
--- a/src/app/providers/session-data.ts
+++ b/src/app/providers/session-data.ts
@@ -5,7 +5,7 @@ import { AngularFirestore,
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
-import { Session, Speaker } from '../models';
+import { Session } from '../models';
@Injectable({
providedIn: 'root'
From 0349790b2d5b3c699eb10576ccebb537a00416c9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E2=80=9CYoung?= <“hogusong1@gmail.com”>
Date: Sat, 22 Dec 2018 22:05:42 -0500
Subject: [PATCH 15/25] update 'session-detail mode': activated toggling
favorite function
---
src/app/models.ts | 9 +--
.../pages/session-detail/session-detail.ts | 62 ++++++++-----------
src/app/providers/conference-data.ts | 8 ---
3 files changed, 28 insertions(+), 51 deletions(-)
diff --git a/src/app/models.ts b/src/app/models.ts
index 50a1e6cfe..7f0851f19 100644
--- a/src/app/models.ts
+++ b/src/app/models.ts
@@ -15,7 +15,7 @@ export interface Speaker {
location?: string;
email: string;
phone?: string;
- sessions?: IdName[]; // session id & name
+ sessions?: { id: string, name: string }[]; // session id & name
}
export interface Session {
@@ -31,11 +31,6 @@ export interface Session {
hide?: boolean;
}
-export interface IdName {
- id: string;
- name: string;
-}
-
export interface Map {
id?: string;
name: string;
@@ -49,7 +44,7 @@ export interface User {
username: string;
password: string;
email: string;
- favorites: IdName[]; // session's id and name.
+ favorites: { id: string, name: string }[]; // session's id and name.
trackFilter: { name: string, isChecked: boolean }[];
}
diff --git a/src/app/pages/session-detail/session-detail.ts b/src/app/pages/session-detail/session-detail.ts
index c4fb44f89..0fb026e9f 100644
--- a/src/app/pages/session-detail/session-detail.ts
+++ b/src/app/pages/session-detail/session-detail.ts
@@ -3,7 +3,7 @@ import { ActivatedRoute } from '@angular/router';
import { UserData } from '../../providers/user-data';
import { SessionData } from '../../providers/session-data';
-import { Session } from '../../models';
+import { Session, User } from '../../models';
@Component({
selector: 'page-session-detail',
@@ -12,6 +12,7 @@ import { Session } from '../../models';
})
export class SessionDetailPage {
session: Session;
+ user: User;
isFavorite = false;
constructor(
private sessionProvider: SessionData,
@@ -19,47 +20,36 @@ export class SessionDetailPage {
private route: ActivatedRoute
) {}
+ ionViewWillEnter() {
+ const id = this.route.snapshot.paramMap.get('sessionId');
+ this.sessionProvider.getSession(id)
+ .then( data => {
+ data.id = id;
+ this.session = data;
+ this.userProvider.getUser().then(user => {
+ this.user = user;
+ this.user.favorites.forEach(favorite => {
+ if (favorite.id === this.session.id) { this.isFavorite = true; }
+ });
+ });
+ }
+ );
+ }
+
sessionClick(item: string) {
console.log('Clicked', item);
}
toggleFavorite() {
- if (this.userProvider.hasFavorite(this.session.name)) {
- this.userProvider.removeFavorite(this.session.name);
- this.isFavorite = false;
+ if (this.isFavorite) {
+ const index = this.user.favorites.findIndex(f => f.id === this.session.id);
+ if (index > -1) {
+ this.user.favorites.splice(index, 1);
+ }
} else {
- this.userProvider.addFavorite(this.session.name);
- this.isFavorite = true;
+ this.user.favorites.push({id: this.session.id, name: this.session.name });
}
- }
-
- ionViewWillEnter() {
- const id = this.route.snapshot.paramMap.get('sessionId');
- this.sessionProvider.getSession(id)
- .then( data => { this.session = data; }
- );
- // const id = this.route.snapshot.paramMap.get('sessionId');
- // this.session = this.sessionProvider.getSession(id);
- // this.dataProvider.load().subscribe((data: any) => {
- // if (
- // data &&
- // data.schedule &&
- // data.schedule[0] &&
- // data.schedule[0].groups
- // ) {
- // const sessionId = this.route.snapshot.paramMap.get('sessionId');
- // for (const group of data.schedule[0].groups) {
- // if (group && group.sessions) {
- // for (const session of group.sessions) {
- // if (session && session.id === sessionId) {
- // this.session = session;
- // this.isFavorite = this.userProvider.hasFavorite(this.session.name);
- // break;
- // }
- // }
- // }
- // }
- // }
- // });
+ this.userProvider.updateUser(this.user);
+ this.isFavorite = !this.isFavorite;
}
}
diff --git a/src/app/providers/conference-data.ts b/src/app/providers/conference-data.ts
index b9e84bc2d..90ffdcae2 100644
--- a/src/app/providers/conference-data.ts
+++ b/src/app/providers/conference-data.ts
@@ -111,12 +111,4 @@ export class ConferenceData {
}));
return this.tracks ;
}
-
- // getMap() {
- // return this.load().pipe(
- // map((data: any) => {
- // return data.map;
- // })
- // );
- // }
}
From 48604e88e922ed11f97824e2a50b8e0a4977b02c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E2=80=9CYoung?= <“hogusong1@gmail.com”>
Date: Sat, 22 Dec 2018 22:34:25 -0500
Subject: [PATCH 16/25] fix a bug: initial schedule were loaded opposit way.
---
src/app/pages/schedule/schedule.ts | 6 +++---
src/app/providers/user-data.ts | 1 +
2 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/src/app/pages/schedule/schedule.ts b/src/app/pages/schedule/schedule.ts
index 1a7956f8a..b87f65bd0 100644
--- a/src/app/pages/schedule/schedule.ts
+++ b/src/app/pages/schedule/schedule.ts
@@ -55,10 +55,10 @@ export class SchedulePage {
ionViewWillEnter() {
// this.app.setTitle('Schedule');
this.userProvider.getUser().then(user => {
- this.user = user;
- this.user.trackFilter.forEach(track => {
- if (track.isChecked) { this.excludeTracks.push(track.name); }
+ user.trackFilter.forEach(track => {
+ if (!track.isChecked) { this.excludeTracks.push(track.name); }
});
+ this.user = user;
});
this.dataProvider.getPartsOfDay().subscribe(
diff --git a/src/app/providers/user-data.ts b/src/app/providers/user-data.ts
index 97e05f8ad..87a53ce1b 100644
--- a/src/app/providers/user-data.ts
+++ b/src/app/providers/user-data.ts
@@ -66,6 +66,7 @@ export class UserData {
login(user: User): Promise {
return this.storage.set(this.HAS_LOGGED_IN, true).then(() => {
this.setUser(user);
+ console.log(user);
return this.events.publish('user:login');
});
}
From 9461f7b350712b2eab0dec8e6ae14123b3335bec Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E2=80=9CYoung?= <“hogusong1@gmail.com”>
Date: Sun, 23 Dec 2018 13:43:03 -0500
Subject: [PATCH 17/25] updated 'schedule mode': fixed showing favorites
schedule
---
src/app/pages/schedule/schedule.ts | 2 ++
src/app/providers/conference-data.ts | 10 +++++-----
2 files changed, 7 insertions(+), 5 deletions(-)
diff --git a/src/app/pages/schedule/schedule.ts b/src/app/pages/schedule/schedule.ts
index b87f65bd0..4d6484a3e 100644
--- a/src/app/pages/schedule/schedule.ts
+++ b/src/app/pages/schedule/schedule.ts
@@ -150,6 +150,8 @@ export class SchedulePage {
} else if (this.segment === 'all') {
this.excludeTracks = [];
this.updateFilter();
+ } else if (this.segment === 'favorites') {
+ this.updateFilter();
}
}
diff --git a/src/app/providers/conference-data.ts b/src/app/providers/conference-data.ts
index 90ffdcae2..f0e55c168 100644
--- a/src/app/providers/conference-data.ts
+++ b/src/app/providers/conference-data.ts
@@ -89,14 +89,14 @@ export class ConferenceData {
let matchesSegment = false;
if (options.segment === 'favorites') {
this.userProvider.getUser().then(user => {
- matchesSegment = (user.favorites.indexOf(session.name) > -1);
+ matchesSegment = (user.favorites.findIndex(f => f.name === session.name) > -1);
+ // all tests must be true if it should not be hidden
+ session.hide = !(matchesQueryText && matchesTracks && matchesSegment);
});
} else {
- matchesSegment = true;
+ // doesn't matter about favorites.
+ session.hide = !(matchesQueryText && matchesTracks);
}
-
- // all tests must be true if it should not be hidden
- session.hide = !(matchesQueryText && matchesTracks && matchesSegment);
return session;
}
From 3447f01f4a02bd8bf18ba7a882bd05167b5fc7c4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E2=80=9CYoung?= <“hogusong1@gmail.com”>
Date: Sun, 23 Dec 2018 16:27:14 -0500
Subject: [PATCH 18/25] update app openning mode: let app open after login or
signup
---
src/app/app.component.html | 4 +--
src/app/app.component.ts | 2 +-
src/app/interfaces/user-options.ts | 5 ---
src/app/models.ts | 11 +++----
src/app/pages/schedule/schedule.html | 6 ++--
src/app/pages/schedule/schedule.scss | 9 ++++++
src/app/pages/schedule/schedule.ts | 48 ++++++++--------------------
src/app/pages/signup/signup.ts | 2 +-
src/app/providers/user-data.ts | 1 -
9 files changed, 35 insertions(+), 53 deletions(-)
delete mode 100644 src/app/interfaces/user-options.ts
diff --git a/src/app/app.component.html b/src/app/app.component.html
index c32d483c1..b88cf4a44 100644
--- a/src/app/app.component.html
+++ b/src/app/app.component.html
@@ -14,7 +14,7 @@
Navigate
-
+
{{p.title}}
@@ -73,7 +73,7 @@
-
+
Support
diff --git a/src/app/app.component.ts b/src/app/app.component.ts
index 240cf968b..eaf41a7db 100644
--- a/src/app/app.component.ts
+++ b/src/app/app.component.ts
@@ -95,7 +95,7 @@ export class AppComponent implements OnInit {
logout() {
this.userData.logout().then(() => {
- return this.navigate('/app/tabs/(schedule:schedule)');
+ return this.openTutorial();
});
}
diff --git a/src/app/interfaces/user-options.ts b/src/app/interfaces/user-options.ts
deleted file mode 100644
index 1dda3fc7f..000000000
--- a/src/app/interfaces/user-options.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-
-export interface UserOption {
- username: string;
- password: string;
-}
diff --git a/src/app/models.ts b/src/app/models.ts
index 7f0851f19..246e07541 100644
--- a/src/app/models.ts
+++ b/src/app/models.ts
@@ -64,10 +64,9 @@ export interface PartOfDay {
export interface Schedule {
date: string; // 2018-12-06
- groups: SessionGroup[];
-}
-
-export interface SessionGroup {
- time: PartOfDay;
- sessions: Session[];
+ groups: {
+ indexKey: number
+ partOfDay: string,
+ sessions: any[]
+ }[];
}
diff --git a/src/app/pages/schedule/schedule.html b/src/app/pages/schedule/schedule.html
index 017175169..94bcc136c 100644
--- a/src/app/pages/schedule/schedule.html
+++ b/src/app/pages/schedule/schedule.html
@@ -59,8 +59,10 @@ {{session.name}}
-
0">
- No Sessions Found
+ 0">
+ No Sessions Found
+ You may
+ Login or Signup!
diff --git a/src/app/pages/schedule/schedule.scss b/src/app/pages/schedule/schedule.scss
index 0eddea0fd..b1b2ead45 100644
--- a/src/app/pages/schedule/schedule.scss
+++ b/src/app/pages/schedule/schedule.scss
@@ -20,3 +20,12 @@ page-schedule {
}
}
+.notFound {
+ display: inline;
+ text-align: center;
+}
+.notFound h4 {
+ margin-top: 70px;
+ font-size: 24px;
+}
+
diff --git a/src/app/pages/schedule/schedule.ts b/src/app/pages/schedule/schedule.ts
index 4d6484a3e..d970cd51a 100644
--- a/src/app/pages/schedule/schedule.ts
+++ b/src/app/pages/schedule/schedule.ts
@@ -19,13 +19,9 @@ export class SchedulePage {
@ViewChild('scheduleList') scheduleList: List;
user: User;
- // dayIndex = 0;
queryText = '';
segment = '';
excludeTracks: any[] = [];
- // shownSessions: any = [];
- // groups: any = [];
- // confDate: string;
start = '2019-01-10';
end = '2019-01-15';
@@ -54,18 +50,20 @@ export class SchedulePage {
ionViewWillEnter() {
// this.app.setTitle('Schedule');
- this.userProvider.getUser().then(user => {
- user.trackFilter.forEach(track => {
- if (!track.isChecked) { this.excludeTracks.push(track.name); }
- });
- this.user = user;
+ this.userProvider.isLoggedIn().then(loggedIn => {
+ if (loggedIn) {
+ this.userProvider.getUser().then(user => {
+ user.trackFilter.forEach(track => {
+ if (!track.isChecked) { this.excludeTracks.push(track.name); }
+ });
+ this.user = user;
+ this.dataProvider.getPartsOfDay().subscribe(
+ response => { this.partsOfDay = response ; }
+ );
+ this.updateSchedule();
+ });
+ }
});
-
- this.dataProvider.getPartsOfDay().subscribe(
- response => { this.partsOfDay = response ; }
- );
-
- this.updateSchedule();
}
updateSchedule() {
@@ -258,24 +256,4 @@ export class SchedulePage {
await loading.onWillDismiss();
fab.close();
}
-
- /*doRefresh(refresher: Refresher) {
- this.dataProvider.getTimeline(this.dayIndex, this.queryText, this.excludeTracks, this.segment).subscribe((data: any) => {
- this.shownSessions = data.shownSessions;
- this.groups = data.groups;
-
- // simulate a network request that would take longer
- // than just pulling from out local json file
- setTimeout(() => {
- refresher.complete();
-
- const toast = this.toastCtrl.create({
- message: 'Sessions have been updated.',
- duration: 3000
- });
- toast.present();
- }, 1000);
- });
- }
- */
}
diff --git a/src/app/pages/signup/signup.ts b/src/app/pages/signup/signup.ts
index 2a9c17e17..627623bc4 100644
--- a/src/app/pages/signup/signup.ts
+++ b/src/app/pages/signup/signup.ts
@@ -44,7 +44,7 @@ export class SignupPage implements OnInit {
} else {
this.setTrackFilter();
this.userProvider.signup(this.signup);
- this.router.navigateByUrl('/app/tabs/(schedule:schedule)');
+ this.router.navigateByUrl('/app/tabs/(speakers:speakers)');
}
}
}
diff --git a/src/app/providers/user-data.ts b/src/app/providers/user-data.ts
index 87a53ce1b..97e05f8ad 100644
--- a/src/app/providers/user-data.ts
+++ b/src/app/providers/user-data.ts
@@ -66,7 +66,6 @@ export class UserData {
login(user: User): Promise {
return this.storage.set(this.HAS_LOGGED_IN, true).then(() => {
this.setUser(user);
- console.log(user);
return this.events.publish('user:login');
});
}
From ddd158cf7ff61917e8f5f71b5f91104e1f71aad7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E2=80=9CYoung?= <“hogusong1@gmail.com”>
Date: Thu, 27 Dec 2018 23:03:54 -0500
Subject: [PATCH 19/25] created 'image downloading module' using
AngularFireStorage
---
src/app/app.module.ts | 2 ++
src/app/models.ts | 2 +-
src/app/pages/map/map.ts | 10 +++-------
src/app/providers/conference-data.ts | 18 +++++++++++++++++-
src/app/providers/speaker-data.ts | 14 +++++++++++---
5 files changed, 34 insertions(+), 12 deletions(-)
diff --git a/src/app/app.module.ts b/src/app/app.module.ts
index 7d14b4f77..bc4c62526 100644
--- a/src/app/app.module.ts
+++ b/src/app/app.module.ts
@@ -10,6 +10,7 @@ import { IonicStorageModule } from '@ionic/storage';
import { environment } from '../environments/environment';
import { AngularFireModule } from 'angularfire2';
import { AngularFirestoreModule } from 'angularfire2/firestore';
+import { AngularFireStorageModule } from 'angularfire2/storage';
import { AngularFireAuthModule } from 'angularfire2/auth';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
@@ -28,6 +29,7 @@ import { ServiceWorkerModule } from '@angular/service-worker';
AngularFireModule.initializeApp(environment.firebase, 'ionic-conference'),
AngularFireAuthModule,
AngularFirestoreModule,
+ AngularFireStorageModule
],
declarations: [AppComponent],
providers: [InAppBrowser, SplashScreen, StatusBar],
diff --git a/src/app/models.ts b/src/app/models.ts
index 246e07541..d26b7e304 100644
--- a/src/app/models.ts
+++ b/src/app/models.ts
@@ -56,7 +56,7 @@ export interface Support {
}
export interface PartOfDay {
- indexKey: number;
+ indexKey?: number;
name: string; // morning, afternoon, evening, overnight
timeFrom: string;
timeTo: string;
diff --git a/src/app/pages/map/map.ts b/src/app/pages/map/map.ts
index 271c95451..e01a24bc7 100644
--- a/src/app/pages/map/map.ts
+++ b/src/app/pages/map/map.ts
@@ -4,10 +4,8 @@ import { ConferenceData } from '../../providers/conference-data';
import { Platform } from '@ionic/angular';
-
declare var google: any;
-
@Component({
selector: 'page-map',
templateUrl: 'map.html',
@@ -19,16 +17,16 @@ export class MapPage {
@ViewChild('mapCanvas') mapElement: ElementRef;
constructor(
- public confData: ConferenceData,
+ public dataProvider: ConferenceData,
public platform: Platform
) { }
ionViewDidEnter() {
- this.confData.getMap().subscribe((mapData: any) => {
+ this.dataProvider.getMap().subscribe((mapData: any) => {
const mapEle = this.mapElement.nativeElement;
const map = new google.maps.Map(mapEle, {
- center: mapData.find((d: any) => d.center),
+ center: mapData.find((loc: any) => loc.center),
zoom: 16
});
@@ -51,8 +49,6 @@ export class MapPage {
google.maps.event.addListenerOnce(map, 'idle', () => {
mapEle.classList.add('show-map');
});
-
});
-
}
}
diff --git a/src/app/providers/conference-data.ts b/src/app/providers/conference-data.ts
index f0e55c168..cd92d4307 100644
--- a/src/app/providers/conference-data.ts
+++ b/src/app/providers/conference-data.ts
@@ -6,7 +6,7 @@ import { AngularFirestore,
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
import { UserData } from './user-data';
-import { Track, Session, PartOfDay } from '../models';
+import { Track, Session, PartOfDay, Map } from '../models';
@Injectable({
providedIn: 'root'
@@ -24,6 +24,9 @@ export class ConferenceData {
partsOfDayCollection: AngularFirestoreCollection;
partsOfDay: Observable;
+ mapsCollection: AngularFirestoreCollection;
+ maps: Observable;
+
data: any;
constructor(
@@ -34,6 +37,8 @@ export class ConferenceData {
'tracks', ref => ref.orderBy('name', 'asc'));
this.partsOfDayCollection = this.afs.collection(
'partsOfDay', ref => ref.orderBy('indexKey', 'asc'));
+ this.mapsCollection = this.afs.collection(
+ 'maps', ref => ref.orderBy('name', 'asc'));
}
getPartsOfDay(): Observable {
@@ -111,4 +116,15 @@ export class ConferenceData {
}));
return this.tracks ;
}
+
+ getMap() {
+ this.maps = this.mapsCollection.snapshotChanges()
+ .pipe(map(response => {
+ return response.map(action => {
+ const data = action.payload.doc.data() as any;
+ return data;
+ });
+ }));
+ return this.maps ;
+ }
}
diff --git a/src/app/providers/speaker-data.ts b/src/app/providers/speaker-data.ts
index c6e71d6b7..b76cba822 100644
--- a/src/app/providers/speaker-data.ts
+++ b/src/app/providers/speaker-data.ts
@@ -2,7 +2,8 @@ import { Injectable } from '@angular/core';
import { AngularFirestore,
AngularFirestoreCollection,
AngularFirestoreDocument } from 'angularfire2/firestore';
-import { Observable, of } from 'rxjs';
+import { AngularFireStorage } from 'angularfire2/storage';
+import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
import { Speaker } from '../models';
@@ -16,7 +17,8 @@ export class SpeakerData {
speakers: Observable ;
speaker: Observable ;
- constructor(private afs: AngularFirestore) {
+ constructor(private afs: AngularFirestore,
+ private storage: AngularFireStorage) {
this.speakersCollection = this.afs.collection(
'speakers', ref => ref.orderBy('name', 'asc'));
}
@@ -27,6 +29,9 @@ export class SpeakerData {
return response.map(action => {
const data = action.payload.doc.data() as Speaker;
data.id = action.payload.doc.id;
+ this.storage.ref(data.profilePic).getDownloadURL().subscribe(url => {
+ data.profilePic = url;
+ });
return data;
});
}));
@@ -37,7 +42,10 @@ export class SpeakerData {
return this.speakersCollection.doc(id).ref.get()
.then(doc => {
const speaker = doc.data() as Speaker;
- return speaker;
+ this.storage.ref(speaker.profilePic).getDownloadURL().subscribe(url => {
+ speaker.profilePic = url;
+ });
+ return speaker;
});
}
From ef5b979ed051a5aab2e4e96da83b28dcbff2934b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E2=80=9CYoung?= <“hogusong1@gmail.com”>
Date: Fri, 28 Dec 2018 12:22:46 -0500
Subject: [PATCH 20/25] testing pull request
---
src/app/providers/conference-data.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/app/providers/conference-data.ts b/src/app/providers/conference-data.ts
index cd92d4307..25fa1ece5 100644
--- a/src/app/providers/conference-data.ts
+++ b/src/app/providers/conference-data.ts
@@ -6,7 +6,7 @@ import { AngularFirestore,
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
import { UserData } from './user-data';
-import { Track, Session, PartOfDay, Map } from '../models';
+import { Track, Session, PartOfDay } from '../models';
@Injectable({
providedIn: 'root'
From f6ee2b25d3ba1294c50021d2e7517f7682cdc095 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E2=80=9CYoung?= <“hogusong1@gmail.com”>
Date: Fri, 28 Dec 2018 14:32:03 -0500
Subject: [PATCH 21/25] updated installing dependencies and matching versions
in package.json
---
package-lock.json | 244 ++-------------------------
package.json | 12 +-
src/app/providers/conference-data.ts | 18 +-
3 files changed, 30 insertions(+), 244 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index 5ad16180b..4b740c68f 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -930,9 +930,9 @@
"integrity": "sha512-ZD8lTgW07NGgo75bTyBJA8Lt9+NweNzot7lrsBtIvfciwUzaFJLsv2EShqjBeuhF7RpG6YFucJ6m67w5buCtzw=="
},
"@firebase/auth": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-0.9.0.tgz",
- "integrity": "sha512-pNxfxFr4/tJluGfmPYUiuy2Tq/ZSRniJlWP4fj1mg+a9r+KevheeISZdWEZwJMosieXeCg+BzY0tvFD9j5ZrDw==",
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-0.9.1.tgz",
+ "integrity": "sha512-kiJtKXzM7DD1UNTdWcMmmRoU4LBX95JPWgCUN6nzumO1Ed+1izsgE4OwYVbZo+inSlOp6au0JTJrecsHHBemug==",
"requires": {
"@firebase/auth-types": "0.5.0"
}
@@ -943,9 +943,9 @@
"integrity": "sha512-DSjtsIjTy5RSiWyGHqiGkLcDgEgFEf2aD2O0t/0+lHmAzxUGrJFO5+IkPNV6i0ffmtiJaXQDJ7z7q4OdypDBCg=="
},
"@firebase/database": {
- "version": "0.3.7",
- "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.3.7.tgz",
- "integrity": "sha512-BB5L3PqwQVJUdS1WY+sq3eun5n5oimFWolXYl6pyACJwqL2qnPp0cnjK6kOqTsRPPMayZZmfUI38RBDwXaUJhQ==",
+ "version": "0.3.8",
+ "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.3.8.tgz",
+ "integrity": "sha512-y+QJjxC62triL1g6e58sapkGKegvbNIp3hOttE6olYG/zzb+U4Q7lUbYjtMkVpGWKYSsQOPu8JkH3FNhFvX95Q==",
"requires": {
"@firebase/database-types": "0.3.2",
"@firebase/logger": "0.1.2",
@@ -975,9 +975,9 @@
"integrity": "sha512-9ZYdvYQ6r3aaHJarhUM5Hf6lQWu3ZJme+RR0o8qfBb9L04TL3uNjt+AJFku1ysVPntTn+9GqJjiIB2/OC3JtwA=="
},
"@firebase/firestore": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-0.9.0.tgz",
- "integrity": "sha512-ub9BXce75D7t2yQxqopJhqE5YrsdePLg7wP8aMLR2Twe+O89IZqOhdbE0VALjplD2rAWXkOLqf6zYsppu2hh4g==",
+ "version": "0.9.2",
+ "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-0.9.2.tgz",
+ "integrity": "sha512-a4T0JOJSS7XjQux9Dclw1hBcPZ61k3mbLHckKtZ/W7UE4nGcZcSGdwnNtQp9Mv6RuRnbGH6x364C7iiGq2hwSg==",
"requires": {
"@firebase/firestore-types": "0.8.0",
"@firebase/logger": "0.1.2",
@@ -3271,220 +3271,6 @@
"serialize-javascript": "^1.4.0"
}
},
- "cordova-android": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/cordova-android/-/cordova-android-7.0.0.tgz",
- "integrity": "sha1-yVvt/PvDhjsYDE0p7/7E95Nh0Z0=",
- "requires": {
- "android-versions": "^1.2.1",
- "cordova-common": "^2.2.0",
- "elementtree": "0.1.6",
- "nopt": "^3.0.1",
- "properties-parser": "^0.2.3",
- "q": "^1.4.1",
- "shelljs": "^0.5.3"
- },
- "dependencies": {
- "abbrev": {
- "version": "1.1.1",
- "bundled": true
- },
- "android-versions": {
- "version": "1.2.1",
- "bundled": true
- },
- "ansi": {
- "version": "0.3.1",
- "bundled": true
- },
- "balanced-match": {
- "version": "1.0.0",
- "bundled": true
- },
- "base64-js": {
- "version": "0.0.8",
- "bundled": true
- },
- "big-integer": {
- "version": "1.6.26",
- "bundled": true
- },
- "bplist-parser": {
- "version": "0.1.1",
- "bundled": true,
- "requires": {
- "big-integer": "^1.6.7"
- }
- },
- "brace-expansion": {
- "version": "1.1.8",
- "bundled": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "concat-map": {
- "version": "0.0.1",
- "bundled": true
- },
- "cordova-common": {
- "version": "2.2.0",
- "bundled": true,
- "requires": {
- "ansi": "^0.3.1",
- "bplist-parser": "^0.1.0",
- "cordova-registry-mapper": "^1.1.8",
- "elementtree": "0.1.6",
- "glob": "^5.0.13",
- "minimatch": "^3.0.0",
- "osenv": "^0.1.3",
- "plist": "^1.2.0",
- "q": "^1.4.1",
- "semver": "^5.0.1",
- "shelljs": "^0.5.3",
- "underscore": "^1.8.3",
- "unorm": "^1.3.3"
- }
- },
- "cordova-registry-mapper": {
- "version": "1.1.15",
- "bundled": true
- },
- "elementtree": {
- "version": "0.1.6",
- "bundled": true,
- "requires": {
- "sax": "0.3.5"
- }
- },
- "glob": {
- "version": "5.0.15",
- "bundled": true,
- "requires": {
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "2 || 3",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "inflight": {
- "version": "1.0.6",
- "bundled": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.3",
- "bundled": true
- },
- "lodash": {
- "version": "3.10.1",
- "bundled": true
- },
- "minimatch": {
- "version": "3.0.4",
- "bundled": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "nopt": {
- "version": "3.0.6",
- "bundled": true,
- "requires": {
- "abbrev": "1"
- }
- },
- "once": {
- "version": "1.4.0",
- "bundled": true,
- "requires": {
- "wrappy": "1"
- }
- },
- "os-homedir": {
- "version": "1.0.2",
- "bundled": true
- },
- "os-tmpdir": {
- "version": "1.0.2",
- "bundled": true
- },
- "osenv": {
- "version": "0.1.4",
- "bundled": true,
- "requires": {
- "os-homedir": "^1.0.0",
- "os-tmpdir": "^1.0.0"
- }
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "bundled": true
- },
- "plist": {
- "version": "1.2.0",
- "bundled": true,
- "requires": {
- "base64-js": "0.0.8",
- "util-deprecate": "1.0.2",
- "xmlbuilder": "4.0.0",
- "xmldom": "0.1.x"
- }
- },
- "properties-parser": {
- "version": "0.2.3",
- "bundled": true
- },
- "q": {
- "version": "1.5.1",
- "bundled": true
- },
- "sax": {
- "version": "0.3.5",
- "bundled": true
- },
- "semver": {
- "version": "5.4.1",
- "bundled": true
- },
- "shelljs": {
- "version": "0.5.3",
- "bundled": true
- },
- "underscore": {
- "version": "1.8.3",
- "bundled": true
- },
- "unorm": {
- "version": "1.4.1",
- "bundled": true
- },
- "util-deprecate": {
- "version": "1.0.2",
- "bundled": true
- },
- "wrappy": {
- "version": "1.0.2",
- "bundled": true
- },
- "xmlbuilder": {
- "version": "4.0.0",
- "bundled": true,
- "requires": {
- "lodash": "^3.5.0"
- }
- },
- "xmldom": {
- "version": "0.1.27",
- "bundled": true
- }
- }
- },
"cordova-ios": {
"version": "4.5.5",
"resolved": "https://registry.npmjs.org/cordova-ios/-/cordova-ios-4.5.5.tgz",
@@ -5125,14 +4911,14 @@
}
},
"firebase": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/firebase/-/firebase-5.7.0.tgz",
- "integrity": "sha512-8sQYXCUbUuzpyZS+XpBogstQE/7lvX6tPWtrUH0Cf4mH7flH/Sue5GUvZzwBpkgKOrMpI+clzuoYm/ffGi/TjQ==",
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/firebase/-/firebase-5.7.2.tgz",
+ "integrity": "sha512-RrjQ9q4dM9Q97vd+ucfuOAjby4vsjdW350ohy+Rw0lsA4Y+bJ0RAVnYimXqGfPfoIAErRJj6HctutE4gg1G2xw==",
"requires": {
"@firebase/app": "0.3.5",
- "@firebase/auth": "0.9.0",
- "@firebase/database": "0.3.7",
- "@firebase/firestore": "0.9.0",
+ "@firebase/auth": "0.9.1",
+ "@firebase/database": "0.3.8",
+ "@firebase/firestore": "0.9.2",
"@firebase/functions": "0.3.3",
"@firebase/messaging": "0.3.7",
"@firebase/polyfill": "0.3.3",
diff --git a/package.json b/package.json
index 7dfdced0b..bf2f4204d 100644
--- a/package.json
+++ b/package.json
@@ -17,10 +17,10 @@
},
"private": true,
"dependencies": {
- "@angular/common": "~7.1.0",
- "@angular/core": "~7.1.0",
+ "@angular/common": "~7.1.3",
+ "@angular/core": "~7.1.3",
"@angular/fire": "^5.1.1",
- "@angular/forms": "~7.1.0",
+ "@angular/forms": "~7.1.3",
"@angular/http": "~7.1.0",
"@angular/platform-browser": "7.1.3",
"@angular/platform-browser-dynamic": "7.1.3",
@@ -34,7 +34,7 @@
"@ionic/angular": "4.0.0-beta.19",
"@ionic/storage": "^2.1.3",
"angularfire2": "^5.1.1",
- "cordova-android": "^7.1.1",
+ "cordova-android": "^7.0.0",
"cordova-ios": "^4.5.5",
"cordova-plugin-device": "^2.0.2",
"cordova-plugin-inappbrowser": "^3.0.0",
@@ -44,7 +44,7 @@
"cordova-plugin-statusbar": "^2.4.2",
"cordova-plugin-whitelist": "^1.3.2",
"core-js": "^2.5.7",
- "firebase": "^5.7.0",
+ "firebase": "^5.7.2",
"rxjs": "6.3.3",
"sw-toolbox": "3.6.0",
"zone.js": "^0.8.26"
@@ -93,4 +93,4 @@
"cordova-plugin-ionic-keyboard": {}
}
}
-}
\ No newline at end of file
+}
diff --git a/src/app/providers/conference-data.ts b/src/app/providers/conference-data.ts
index 25fa1ece5..82cc9e51f 100644
--- a/src/app/providers/conference-data.ts
+++ b/src/app/providers/conference-data.ts
@@ -17,12 +17,12 @@ export class ConferenceData {
tracks: Observable ;
track: Observable ;
- sessionsCollection: AngularFirestoreCollection;
- sessions: Observable ;
- session: Observable ;
+ sessionsCollection: AngularFirestoreCollection;
+ sessions: Observable ;
+ session: Observable ;
- partsOfDayCollection: AngularFirestoreCollection;
- partsOfDay: Observable;
+ partsOfDayCollection: AngularFirestoreCollection;
+ partsOfDay: Observable;
mapsCollection: AngularFirestoreCollection;
maps: Observable;
@@ -41,18 +41,18 @@ export class ConferenceData {
'maps', ref => ref.orderBy('name', 'asc'));
}
- getPartsOfDay(): Observable {
+ getPartsOfDay(): Observable {
this.partsOfDay = this.partsOfDayCollection.snapshotChanges()
.pipe(map(response => {
return response.map(action => {
- const data = action.payload.doc.data() as PartOfDay;
+ const data = action.payload.doc.data() as any;
return data;
});
}));
return this.partsOfDay ;
}
- getSessionInPeriod(start, end): Observable {
+ getSessionInPeriod(start, end): Observable {
this.sessionsCollection = this.afs.collection(
'sessions', ref => ref.where('date', '>=', start)
.where('date', '<=', end)
@@ -60,7 +60,7 @@ export class ConferenceData {
this.sessions = this.sessionsCollection.snapshotChanges()
.pipe(map(response => {
return response.map(action => {
- const data = action.payload.doc.data() as Session;
+ const data = action.payload.doc.data() as any;
data.id = action.payload.doc.id;
return data;
});
From b4d31b9fc1c661964db95d66271cdb5ec96ab1c5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E2=80=9CYoung?= <“hogusong1@gmail.com”>
Date: Fri, 28 Dec 2018 22:13:39 -0500
Subject: [PATCH 22/25] fixed all errors after merge. Mainly version conflict
of @ionic/angular.
---
package-lock.json | 2137 ++++++++---------
package.json | 22 +-
src/app/app-routing.module.ts | 4 +-
src/app/app.component.ts | 14 +-
src/app/pages/about/about.ts | 1 +
src/app/pages/account/account.ts | 1 +
src/app/pages/login/login.ts | 1 +
.../pages/schedule-filter/schedule-filter.ts | 1 +
src/app/pages/schedule/schedule.ts | 15 +-
src/app/pages/signup/signup.ts | 1 +
src/app/pages/speaker-list/speaker-list.html | 6 +-
src/app/pages/speaker-list/speaker-list.ts | 1 +
src/app/pages/support/support.ts | 23 +-
.../tabs-page/tabs-page-routing.module.ts | 76 +-
src/app/pages/tabs-page/tabs-page.html | 24 +-
src/app/pages/tutorial/tutorial.ts | 7 +-
src/index.html | 2 +-
17 files changed, 1105 insertions(+), 1231 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index 4b740c68f..200a6b00a 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -12,27 +12,6 @@
"requires": {
"@angular-devkit/core": "7.1.0",
"rxjs": "6.3.3"
- },
- "dependencies": {
- "@angular-devkit/core": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.1.0.tgz",
- "integrity": "sha512-mR0YNRBEWfK3y5JfPmENw6Qy8kk6jaJTjDOso1uOwRKWQDe642tnK0P1HTmZ+WBgp+RhYD4pHbKePqOHw/tsdQ==",
- "dev": true,
- "requires": {
- "ajv": "6.5.3",
- "chokidar": "2.0.4",
- "fast-json-stable-stringify": "2.0.0",
- "rxjs": "6.3.3",
- "source-map": "0.7.3"
- }
- },
- "source-map": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
- "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
- "dev": true
- }
}
},
"@angular-devkit/build-angular": {
@@ -90,38 +69,10 @@
"webpack-subresource-integrity": "1.1.0-rc.6"
},
"dependencies": {
- "@angular-devkit/core": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.1.0.tgz",
- "integrity": "sha512-mR0YNRBEWfK3y5JfPmENw6Qy8kk6jaJTjDOso1uOwRKWQDe642tnK0P1HTmZ+WBgp+RhYD4pHbKePqOHw/tsdQ==",
- "dev": true,
- "requires": {
- "ajv": "6.5.3",
- "chokidar": "2.0.4",
- "fast-json-stable-stringify": "2.0.0",
- "rxjs": "6.3.3",
- "source-map": "0.7.3"
- }
- },
- "opn": {
- "version": "5.3.0",
- "resolved": "http://registry.npmjs.org/opn/-/opn-5.3.0.tgz",
- "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==",
- "dev": true,
- "requires": {
- "is-wsl": "^1.1.0"
- }
- },
- "semver": {
- "version": "5.5.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz",
- "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==",
- "dev": true
- },
- "source-map": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
- "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
+ "parse5": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
"dev": true
}
}
@@ -173,57 +124,26 @@
"@angular-devkit/architect": "0.11.0",
"@angular-devkit/core": "7.1.0",
"rxjs": "6.3.3"
- },
- "dependencies": {
- "@angular-devkit/core": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.1.0.tgz",
- "integrity": "sha512-mR0YNRBEWfK3y5JfPmENw6Qy8kk6jaJTjDOso1uOwRKWQDe642tnK0P1HTmZ+WBgp+RhYD4pHbKePqOHw/tsdQ==",
- "dev": true,
- "requires": {
- "ajv": "6.5.3",
- "chokidar": "2.0.4",
- "fast-json-stable-stringify": "2.0.0",
- "rxjs": "6.3.3",
- "source-map": "0.7.3"
- }
- },
- "source-map": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
- "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
- "dev": true
- }
}
},
"@angular-devkit/core": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.1.2.tgz",
- "integrity": "sha512-LyjHGuLnLWrgX7SYDkKmc3eW4H5uuaoC+CXYjRfgx3qundrLfvTCRgNGC6FPjhQNnVXH9qar+j9P1aMmKFb4Lw==",
- "dev": true,
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.1.0.tgz",
+ "integrity": "sha512-mR0YNRBEWfK3y5JfPmENw6Qy8kk6jaJTjDOso1uOwRKWQDe642tnK0P1HTmZ+WBgp+RhYD4pHbKePqOHw/tsdQ==",
"requires": {
"ajv": "6.5.3",
"chokidar": "2.0.4",
"fast-json-stable-stringify": "2.0.0",
"rxjs": "6.3.3",
"source-map": "0.7.3"
- },
- "dependencies": {
- "source-map": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
- "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
- "dev": true
- }
}
},
"@angular-devkit/schematics": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-7.1.2.tgz",
- "integrity": "sha512-NFhHLYWf9gpGQm0s19lq+nAw3CZ0udBpoBLzCm8Crlmu6+7aAXgw7Fv5P4ukWJ/e1m7NDGVids+B6kBGXaY6Ig==",
- "dev": true,
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-7.1.0.tgz",
+ "integrity": "sha512-MIK6eT3x6EppUcz7KFwJ63z3gUVmi5dQPiN8p+kTpHE2SorZCQvQ6+YKUMw9VZ6WLEQOZYJfoQozKyEWllNlsw==",
"requires": {
- "@angular-devkit/core": "7.1.2",
+ "@angular-devkit/core": "7.1.0",
"rxjs": "6.3.3"
}
},
@@ -242,75 +162,29 @@
"opn": "5.3.0",
"semver": "5.5.1",
"symbol-observable": "1.2.0"
- },
- "dependencies": {
- "@angular-devkit/core": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.1.0.tgz",
- "integrity": "sha512-mR0YNRBEWfK3y5JfPmENw6Qy8kk6jaJTjDOso1uOwRKWQDe642tnK0P1HTmZ+WBgp+RhYD4pHbKePqOHw/tsdQ==",
- "dev": true,
- "requires": {
- "ajv": "6.5.3",
- "chokidar": "2.0.4",
- "fast-json-stable-stringify": "2.0.0",
- "rxjs": "6.3.3",
- "source-map": "0.7.3"
- }
- },
- "@angular-devkit/schematics": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-7.1.0.tgz",
- "integrity": "sha512-MIK6eT3x6EppUcz7KFwJ63z3gUVmi5dQPiN8p+kTpHE2SorZCQvQ6+YKUMw9VZ6WLEQOZYJfoQozKyEWllNlsw==",
- "dev": true,
- "requires": {
- "@angular-devkit/core": "7.1.0",
- "rxjs": "6.3.3"
- }
- },
- "opn": {
- "version": "5.3.0",
- "resolved": "http://registry.npmjs.org/opn/-/opn-5.3.0.tgz",
- "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==",
- "dev": true,
- "requires": {
- "is-wsl": "^1.1.0"
- }
- },
- "semver": {
- "version": "5.5.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz",
- "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==",
- "dev": true
- },
- "source-map": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
- "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
- "dev": true
- }
}
},
"@angular/common": {
- "version": "7.1.3",
- "resolved": "https://registry.npmjs.org/@angular/common/-/common-7.1.3.tgz",
- "integrity": "sha512-4LnvTevDJW9Fmpmg6KeEyYcz8O4pS88nkm8FwKz+bkbFEiPz6tIxzhDlGuCAH0UmU4GojdWKMWhvLLvTEyCMpw==",
+ "version": "7.1.4",
+ "resolved": "https://registry.npmjs.org/@angular/common/-/common-7.1.4.tgz",
+ "integrity": "sha512-oQPCilcf1H/OXmt4z6PfGoCSb1YPRBAXGs/KRBARm3tYan2r5CmV0BFwpWXWQrEMt8YQqqLiBQUQ64d8+VFm8Q==",
"requires": {
"tslib": "^1.9.0"
}
},
"@angular/compiler": {
- "version": "7.1.3",
- "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-7.1.3.tgz",
- "integrity": "sha512-uOcMyP9UBr7EkBWDMnGe/f3A1OidDt3Mq1TCp/8ETAxjerD7HxPJgdP0psBm85j6S5LorTUIOUm6ETfVP09E7A==",
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-7.1.0.tgz",
+ "integrity": "sha512-1Hjx6e+lVXZyXFFe4OW34ZpiaGEYyB1MQ7k2C+cMm0ABMQS3LsWT4DYhY7bk0mmMuuXQj66C62MX76ladDtdIg==",
"dev": true,
"requires": {
"tslib": "^1.9.0"
}
},
"@angular/compiler-cli": {
- "version": "7.1.3",
- "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-7.1.3.tgz",
- "integrity": "sha512-24r/7+qyXnDNsKWPxOnMECmncqc+Ucvd/clHHmEXX50EJOw8cA9odOJI1LnO+aWcMVRkjTidL6kVlagddkyOMg==",
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-7.1.0.tgz",
+ "integrity": "sha512-Q42B3YmjMNYWTxTWfyDDFa6HSVqwY3rZO5Kp3Q/NKhQ6w/WddduxjARf/OCbtp0bVX3wZNObS6nO4H65rNCtsw==",
"dev": true,
"requires": {
"canonical-path": "1.0.0",
@@ -606,12 +480,6 @@
"integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
"dev": true
},
- "y18n": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
- "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
- "dev": true
- },
"yargs": {
"version": "9.0.1",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-9.0.1.tgz",
@@ -645,9 +513,9 @@
}
},
"@angular/core": {
- "version": "7.1.3",
- "resolved": "https://registry.npmjs.org/@angular/core/-/core-7.1.3.tgz",
- "integrity": "sha512-Vv2Eolb5fZZZLIyodazDTIH6l3wT0ss7oJq+op0aqfrH43HlZ1LkkoovPskX2w0Om9bzPfvfPz+fWm36WXrFyA==",
+ "version": "7.1.4",
+ "resolved": "https://registry.npmjs.org/@angular/core/-/core-7.1.4.tgz",
+ "integrity": "sha512-36uWLrmmlzf8JKaq2A5F2tPQEHvFSsbTQWOT559Drp1tzM2uSA7PysNHv5TXUshDn5i54S2EQFm4bj2YPp4Hzg==",
"requires": {
"tslib": "^1.9.0"
}
@@ -658,39 +526,39 @@
"integrity": "sha512-QfLVEhZYW3+3fh2d1z76/vab1GkLnEQWzFQK06D1ZaT8jZsVEdFMIPr7GSTJWAuOdqBRYq14iqzqEkJH3WHzig=="
},
"@angular/forms": {
- "version": "7.1.3",
- "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-7.1.3.tgz",
- "integrity": "sha512-gzXuQAaYQU2Gus8CZCyQtD/mzzxlgHvFtGRRNg9/UksekftVSk7/l+oj57NGMGh/0MF5rpRB3BYATZlF/TGHsw==",
+ "version": "7.1.4",
+ "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-7.1.4.tgz",
+ "integrity": "sha512-YB2lDRe7aMsaO5ZlbeFZGH+uTQOcpotFDKCmTckpefRJ7id6TlUSBYdYRH80qOQfPJGpsnqQvLZkL24UMasKtQ==",
"requires": {
"tslib": "^1.9.0"
}
},
"@angular/http": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/@angular/http/-/http-7.1.0.tgz",
- "integrity": "sha512-Je3D374ccxTFGpFu9tXi6k95vTaG+3jYYtEQ7i43CHbaGyHR/KwMEr8DEzrABd1zCSxBX71WwHuReG2wBANfcA==",
+ "version": "7.1.4",
+ "resolved": "https://registry.npmjs.org/@angular/http/-/http-7.1.4.tgz",
+ "integrity": "sha512-Lrjb99sHu0Cv7MBbVLev1I1Fe+DJcwG4v7juZB/5nE5opKmbQo3Lfqvt2dVrMOxHeju9ReFznEnuGNMK6+m6pQ==",
"requires": {
"tslib": "^1.9.0"
}
},
"@angular/language-service": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-7.1.0.tgz",
- "integrity": "sha512-dgYCD4Kw6j14hPykprSkMJNCo05dKu+JroMR84/PA/J+weN39nAUj4+/TV4oElbRK2Mr/xtHzSkb259y3Rwm/Q==",
+ "version": "7.1.4",
+ "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-7.1.4.tgz",
+ "integrity": "sha512-Pvrk3W3+6XfrmpCRcTumfyplv6AQJXKfDdPFSbhdpHJlpdcQRo6TckA85Yln5/CXZSAiPaZeiejQt2OogrIRLg==",
"dev": true
},
"@angular/platform-browser": {
- "version": "7.1.3",
- "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-7.1.3.tgz",
- "integrity": "sha512-cGMPzsrKN6Gz9Ah5Jlp2lWe5Y+k1bCYug8Unnux9BHMpRo++RxYB8rOVK4kpmXQajOh5+NbXDzGEoZwMtlZWYQ==",
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-7.1.0.tgz",
+ "integrity": "sha512-kCrmaNZukWaXk6qlvzyE1Dln/YB2XOGbhb9e+y3NE94beCgDTWseKViMevIoGm/H+Lzf0I2RPg8GMKkQ7pQwNQ==",
"requires": {
"tslib": "^1.9.0"
}
},
"@angular/platform-browser-dynamic": {
- "version": "7.1.3",
- "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-7.1.3.tgz",
- "integrity": "sha512-QjcRuGW3MEqaPrWp/4jxOvYevljb1Yjxo0p8xWbtrvL+YVteEVPDWNk4NtzHhQW9j6NzWEjnV5ocNx9I+anXeg==",
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-7.1.0.tgz",
+ "integrity": "sha512-0yG6e/ZOI9LNUGgSjJ7xUWZhC41z87klO0oEHhEzQeaDxO/SOBasbMiws4ETuhulMgOR81UCAVobXMoOQJbfWg==",
"requires": {
"tslib": "^1.9.0"
}
@@ -705,48 +573,20 @@
"@schematics/angular": "7.1.0",
"parse5-html-rewriting-stream": "5.1.0",
"rxjs": "6.3.3"
- },
- "dependencies": {
- "@angular-devkit/core": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.1.0.tgz",
- "integrity": "sha512-mR0YNRBEWfK3y5JfPmENw6Qy8kk6jaJTjDOso1uOwRKWQDe642tnK0P1HTmZ+WBgp+RhYD4pHbKePqOHw/tsdQ==",
- "requires": {
- "ajv": "6.5.3",
- "chokidar": "2.0.4",
- "fast-json-stable-stringify": "2.0.0",
- "rxjs": "6.3.3",
- "source-map": "0.7.3"
- }
- },
- "@angular-devkit/schematics": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-7.1.0.tgz",
- "integrity": "sha512-MIK6eT3x6EppUcz7KFwJ63z3gUVmi5dQPiN8p+kTpHE2SorZCQvQ6+YKUMw9VZ6WLEQOZYJfoQozKyEWllNlsw==",
- "requires": {
- "@angular-devkit/core": "7.1.0",
- "rxjs": "6.3.3"
- }
- },
- "source-map": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
- "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ=="
- }
}
},
"@angular/router": {
- "version": "7.1.3",
- "resolved": "https://registry.npmjs.org/@angular/router/-/router-7.1.3.tgz",
- "integrity": "sha512-vQMUppMmBmUna/sU3tziy9Mqa8HCO/hAp2huTfSA/KF6y9gf1B4J/pISOrHizXL32PisU8Vi0bw+pfIeW/nbQw==",
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@angular/router/-/router-7.1.0.tgz",
+ "integrity": "sha512-yrjNvCj7XbXmZSmQfXGEkWJ9ogRZmIk5GHyOfGKNNRXhQK2OBznY0Avyer2r3mcgV/RLrI1FYQyKN9mdLftf6g==",
"requires": {
"tslib": "^1.9.0"
}
},
"@angular/service-worker": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/@angular/service-worker/-/service-worker-7.1.0.tgz",
- "integrity": "sha512-lmeJl8JDvmtDFM7h1gUs8vVsJhMuRKakBIwtQTWEX8TYRh/6fZCObHNjoGGps3BAPrgAbCyxJE2g3rhb/Y4YqA==",
+ "version": "7.1.4",
+ "resolved": "https://registry.npmjs.org/@angular/service-worker/-/service-worker-7.1.4.tgz",
+ "integrity": "sha512-PpR+Y1U1lpiRjH4PH+bbW0ccIV1AyB1lCTfZBa5NvDqUnJ7/df91RVzlCweCL2d187wOYgd2MSfzvDzSdl0Hvw==",
"requires": {
"tslib": "^1.9.0"
}
@@ -761,12 +601,12 @@
}
},
"@babel/generator": {
- "version": "7.1.6",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.1.6.tgz",
- "integrity": "sha512-brwPBtVvdYdGxtenbQgfCdDPmtkmUBZPjUoK5SXJEBuHaA5BCubh9ly65fzXz7R6o5rA76Rs22ES8Z+HCc0YIQ==",
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.2.2.tgz",
+ "integrity": "sha512-I4o675J/iS8k+P38dvJ3IBGqObLXyQLTxtrR4u9cSUJOURvafeEWb/pFMOTwtNrmq73mJzyF6ueTbO1BtN0Zeg==",
"dev": true,
"requires": {
- "@babel/types": "^7.1.6",
+ "@babel/types": "^7.2.2",
"jsesc": "^2.5.1",
"lodash": "^4.17.10",
"source-map": "^0.5.0",
@@ -778,6 +618,12 @@
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
"integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
"dev": true
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
}
}
},
@@ -830,43 +676,43 @@
}
},
"@babel/parser": {
- "version": "7.1.6",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.1.6.tgz",
- "integrity": "sha512-dWP6LJm9nKT6ALaa+bnL247GHHMWir3vSlZ2+IHgHgktZQx0L3Uvq2uAWcuzIe+fujRsYWBW2q622C5UvGK9iQ==",
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.2.3.tgz",
+ "integrity": "sha512-0LyEcVlfCoFmci8mXx8A5oIkpkOgyo8dRHtxBnK9RRBwxO2+JZPNsqtVEZQ7mJFPxnXF9lfmU24mHOPI0qnlkA==",
"dev": true
},
"@babel/template": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.1.2.tgz",
- "integrity": "sha512-SY1MmplssORfFiLDcOETrW7fCLl+PavlwMh92rrGcikQaRq4iWPVH0MpwPpY3etVMx6RnDjXtr6VZYr/IbP/Ag==",
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.2.2.tgz",
+ "integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.0.0",
- "@babel/parser": "^7.1.2",
- "@babel/types": "^7.1.2"
+ "@babel/parser": "^7.2.2",
+ "@babel/types": "^7.2.2"
}
},
"@babel/traverse": {
- "version": "7.1.6",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.1.6.tgz",
- "integrity": "sha512-CXedit6GpISz3sC2k2FsGCUpOhUqKdyL0lqNrImQojagnUMXf8hex4AxYFRuMkNGcvJX5QAFGzB5WJQmSv8SiQ==",
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.2.3.tgz",
+ "integrity": "sha512-Z31oUD/fJvEWVR0lNZtfgvVt512ForCTNKYcJBGbPb1QZfve4WGH8Wsy7+Mev33/45fhP/hwQtvgusNdcCMgSw==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.0.0",
- "@babel/generator": "^7.1.6",
+ "@babel/generator": "^7.2.2",
"@babel/helper-function-name": "^7.1.0",
"@babel/helper-split-export-declaration": "^7.0.0",
- "@babel/parser": "^7.1.6",
- "@babel/types": "^7.1.6",
+ "@babel/parser": "^7.2.3",
+ "@babel/types": "^7.2.2",
"debug": "^4.1.0",
"globals": "^11.1.0",
"lodash": "^4.17.10"
},
"dependencies": {
"debug": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz",
- "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==",
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
"dev": true,
"requires": {
"ms": "^2.1.1"
@@ -887,9 +733,9 @@
}
},
"@babel/types": {
- "version": "7.1.6",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.1.6.tgz",
- "integrity": "sha512-DMiUzlY9DSjVsOylJssxLHSgj6tWM9PRFJOGW/RaOglVOK9nzTxoOMfTfRQXGUCUQ/HmlG2efwC+XqUEJ5ay4w==",
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.2.2.tgz",
+ "integrity": "sha512-fKCuD6UFUMkR541eDWL+2ih/xFZBXPOg/7EQFeTluMDebfqR4jrpaCjLhkWlQS4hT6nRa2PMEgXKbRB5/H2fpg==",
"dev": true,
"requires": {
"esutils": "^2.0.2",
@@ -954,14 +800,6 @@
"tslib": "1.9.0"
},
"dependencies": {
- "faye-websocket": {
- "version": "0.11.1",
- "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz",
- "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=",
- "requires": {
- "websocket-driver": ">=0.5.1"
- }
- },
"tslib": {
"version": "1.9.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.0.tgz",
@@ -1144,12 +982,11 @@
}
},
"@ionic/angular": {
- "version": "4.0.0-beta.19",
- "resolved": "https://registry.npmjs.org/@ionic/angular/-/angular-4.0.0-beta.19.tgz",
- "integrity": "sha512-yDXx6tduSW9DliplVQv0xnTrxyCFltk3PcKkQDWKCcIwd5nsfPg/5ZcoM3CHKNmmp5mkDljdz8IxCR3VEvdcgQ==",
+ "version": "4.0.0-beta.16",
+ "resolved": "https://registry.npmjs.org/@ionic/angular/-/angular-4.0.0-beta.16.tgz",
+ "integrity": "sha512-JrU1r0+tRw9IMy3+4dr3ikPwZSkYryGzrj9k3izAT4ex24V5wQxO4HUgUe6mz4deWcAKGryNkbU0s+XfSDkceg==",
"requires": {
- "@ionic/core": "4.0.0-beta.19",
- "tslib": "^1.9.3"
+ "@ionic/core": "4.0.0-beta.16"
}
},
"@ionic/angular-toolkit": {
@@ -1161,105 +998,15 @@
"@schematics/angular": "^7.0.3",
"tslib": "^1.9.0",
"typescript": "^3.1.5"
- },
- "dependencies": {
- "@angular-devkit/core": {
- "version": "7.0.6",
- "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.0.6.tgz",
- "integrity": "sha512-RPSXUtLrpYDTqAEL0rCyDKxES76EomsPBvUUZTD6UkE2pihoh9ZIxkzhzlE+HU/xdqm28+smQYFhvvEAXFWwSQ==",
- "dev": true,
- "requires": {
- "ajv": "6.5.3",
- "chokidar": "2.0.4",
- "fast-json-stable-stringify": "2.0.0",
- "rxjs": "6.3.3",
- "source-map": "0.7.3"
- }
- },
- "@angular-devkit/schematics": {
- "version": "7.0.6",
- "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-7.0.6.tgz",
- "integrity": "sha512-S/3CrBDoh/BD4mBq8RNGQ8sgNFDsveCuFHDkOyct8+NDg2wcRkEGigyq8eZwVN/iVKCwjxc0I/bC336edoNMIQ==",
- "dev": true,
- "requires": {
- "@angular-devkit/core": "7.0.6",
- "rxjs": "6.3.3"
- }
- },
- "@schematics/angular": {
- "version": "7.0.6",
- "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-7.0.6.tgz",
- "integrity": "sha512-jOHL+vSu1cqAo3kRNDmgkq/GR2EDkJx5/h0VXGlbtdEpq892LipKHtyPgXa269AABgPKb3TSNBwZls6g2L9FCw==",
- "dev": true,
- "requires": {
- "@angular-devkit/core": "7.0.6",
- "@angular-devkit/schematics": "7.0.6",
- "typescript": "3.1.6"
- }
- },
- "ajv": {
- "version": "6.5.3",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.3.tgz",
- "integrity": "sha512-LqZ9wY+fx3UMiiPd741yB2pj3hhil+hQc8taf4o2QGRFpWgZ2V5C8HA165DY9sS3fJwsk7uT7ZlFEyC3Ig3lLg==",
- "dev": true,
- "requires": {
- "fast-deep-equal": "^2.0.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- }
- },
- "fast-deep-equal": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
- "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
- "dev": true
- },
- "json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
- },
- "rxjs": {
- "version": "6.3.3",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz",
- "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==",
- "dev": true,
- "requires": {
- "tslib": "^1.9.0"
- }
- },
- "source-map": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
- "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
- "dev": true
- },
- "typescript": {
- "version": "3.1.6",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.1.6.tgz",
- "integrity": "sha512-tDMYfVtvpb96msS1lDX9MEdHrW4yOuZ4Kdc4Him9oU796XldPYF/t2+uKoX0BBa0hXXwDlqYQbXY5Rzjzc5hBA==",
- "dev": true
- },
- "uri-js": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
- "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
- "dev": true,
- "requires": {
- "punycode": "^2.1.0"
- }
- }
}
},
"@ionic/cli-framework": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/@ionic/cli-framework/-/cli-framework-1.3.0.tgz",
- "integrity": "sha512-hJVWOqZVJXD0pa1amVFPlX7emXdEM6YpbllXkMQwYSubt9TXPRgUboC3JYxvwEfTscnvWO5OnKGZ29f0/zpTQg==",
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/@ionic/cli-framework/-/cli-framework-1.5.1.tgz",
+ "integrity": "sha512-O979w3XRftVfhiQJXv6c2IaOM4mY7z/8BOu54dR2ZJ/zYir6QW65loq6XQ373AqxoQpMc1xHMZqpYyTTVTScRw==",
"dev": true,
"requires": {
- "@ionic/utils-fs": "0.0.4",
+ "@ionic/utils-fs": "0.0.6",
"chalk": "^2.3.0",
"debug": "^4.0.0",
"inquirer": "^6.0.0",
@@ -1269,9 +1016,9 @@
"rimraf": "^2.6.2",
"slice-ansi": "^2.0.0",
"stream-combiner2": "^1.1.1",
- "string-width": "^2.1.1",
+ "string-width": "^3.0.0",
"strip-ansi": "^5.0.0",
- "tree-kill": "1.2.0",
+ "tree-kill": "1.2.1",
"tslib": "^1.9.0",
"untildify": "^3.0.2",
"wrap-ansi": "^4.0.0",
@@ -1279,15 +1026,15 @@
},
"dependencies": {
"ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz",
+ "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==",
"dev": true
},
"debug": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz",
- "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==",
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
"dev": true,
"requires": {
"ms": "^2.1.1"
@@ -1312,24 +1059,14 @@
"dev": true
},
"string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.0.0.tgz",
+ "integrity": "sha512-rr8CUxBbvOZDUvc5lNIJ+OC1nPVpz+Siw9VBtUjB9b6jZehZLFt0JMCZzShFHIsI8cbhm0EsNIfWJMFV3cu3Ew==",
"dev": true,
"requires": {
+ "emoji-regex": "^7.0.1",
"is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
- },
- "dependencies": {
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- }
+ "strip-ansi": "^5.0.0"
}
},
"strip-ansi": {
@@ -1339,20 +1076,12 @@
"dev": true,
"requires": {
"ansi-regex": "^4.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz",
- "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==",
- "dev": true
- }
}
},
"tree-kill": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.0.tgz",
- "integrity": "sha512-DlX6dR0lOIRDFxI0mjL9IYg6OTncLm/Zt+JiBhE5OlFcAR8yc9S7FFXU9so0oda47frdM/JFsk7UjNt9vscKcg==",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.1.tgz",
+ "integrity": "sha512-4hjqbObwlh2dLyW4tcz0Ymw0ggoaVDMveUB9w8kFSQScdRLo0gxO9J7WFcUBo+W3C1TLdFIEwNOWebgZZ0RH9Q==",
"dev": true
},
"wrap-ansi": {
@@ -1366,6 +1095,22 @@
"strip-ansi": "^4.0.0"
},
"dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ }
+ },
"strip-ansi": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
@@ -1380,21 +1125,29 @@
}
},
"@ionic/core": {
- "version": "4.0.0-beta.19",
- "resolved": "https://registry.npmjs.org/@ionic/core/-/core-4.0.0-beta.19.tgz",
- "integrity": "sha512-v9Bddlws7+1zpiPblgNQBzCFBrEMtkii+AUPJ+/fSb0uIuDTGlRKPfHrRscxnSgGOch+leOArFQ4N3WBrZZmFQ==",
+ "version": "4.0.0-beta.16",
+ "resolved": "https://registry.npmjs.org/@ionic/core/-/core-4.0.0-beta.16.tgz",
+ "integrity": "sha512-dZxJV30uOchQKZWY51ejhayIhg/dZR1dYY6agrBB/sGAZhNEwWgc5tV6IbpQvzx3rSXb9kJi7lZRs/bM9ztoYw==",
"requires": {
- "ionicons": "4.5.0"
+ "@types/node": "10.11.0",
+ "ionicons": "4.4.7"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.11.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.11.0.tgz",
+ "integrity": "sha512-R4Dvw6KjSYn/SpvjRchBOwXr14vVVcFXCtnM3f0aLvlJS8a599rrcEoihcP2/+Z/f75E5GNPd4aWM7j1yei9og=="
+ }
}
},
"@ionic/lab": {
- "version": "1.0.13",
- "resolved": "https://registry.npmjs.org/@ionic/lab/-/lab-1.0.13.tgz",
- "integrity": "sha512-pnYgzfPPdAs3Z9snhHGDaAm2i3Fj0s1K6eAVbCH9hfUE8slv8DTjlcYO2FLDQ0JlFwEaAtL+zXp4guMK/TEWiw==",
+ "version": "1.0.16",
+ "resolved": "https://registry.npmjs.org/@ionic/lab/-/lab-1.0.16.tgz",
+ "integrity": "sha512-I9AzTdZeLTQM0rGpLMv5kYagqfP708jz6IVpLe3O5GI4wHgK7MWR/2PekOhz3QhzAxKcm/i5UcbbAkolWPtKnw==",
"dev": true,
"requires": {
- "@ionic/cli-framework": "1.3.0",
- "@ionic/utils-fs": "0.0.4",
+ "@ionic/cli-framework": "1.5.1",
+ "@ionic/utils-fs": "0.0.6",
"chalk": "^2.3.0",
"express": "^4.16.2",
"tslib": "^1.9.0"
@@ -1411,21 +1164,21 @@
}
},
"@ionic/utils-fs": {
- "version": "0.0.4",
- "resolved": "https://registry.npmjs.org/@ionic/utils-fs/-/utils-fs-0.0.4.tgz",
- "integrity": "sha512-eipaSkrX3ODCQzGKxFgruq2J28RoEm+JC0jJv5S64OXATxsnbwuReTmA2EMJyevLJrORWM0yvsgqmiLHH5VYJg==",
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/@ionic/utils-fs/-/utils-fs-0.0.6.tgz",
+ "integrity": "sha512-/7EbKNbKiRK1C+WuZ/omgD/XaUZeE/CUXtlMAHeGb3pIilcRF+xwMvLu6Vt63O+EwZ/nSIRQI7nb5YP0yUhkUg==",
"dev": true,
"requires": {
"debug": "^4.0.0",
"ncp": "^2.0.0",
- "through2": "^2.0.3",
+ "through2": "^3.0.0",
"tslib": "^1.9.0"
},
"dependencies": {
"debug": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz",
- "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==",
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
"dev": true,
"requires": {
"ms": "^2.1.1"
@@ -1436,6 +1189,16 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
"integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
"dev": true
+ },
+ "through2": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.0.tgz",
+ "integrity": "sha512-8B+sevlqP4OiCjonI1Zw03Sf8PuV1eRsYQgLad5eonILOdyeRsY27A/2Ze8IlvlMvq31OH+3fz/styI7Ya62yQ==",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2 || 3",
+ "xtend": "~4.0.1"
+ }
}
}
},
@@ -1452,27 +1215,6 @@
"webpack-sources": "1.2.0"
},
"dependencies": {
- "@angular-devkit/core": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.1.0.tgz",
- "integrity": "sha512-mR0YNRBEWfK3y5JfPmENw6Qy8kk6jaJTjDOso1uOwRKWQDe642tnK0P1HTmZ+WBgp+RhYD4pHbKePqOHw/tsdQ==",
- "dev": true,
- "requires": {
- "ajv": "6.5.3",
- "chokidar": "2.0.4",
- "fast-json-stable-stringify": "2.0.0",
- "rxjs": "6.3.3",
- "source-map": "0.7.3"
- },
- "dependencies": {
- "source-map": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
- "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
- "dev": true
- }
- }
- },
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -1499,34 +1241,6 @@
"@angular-devkit/core": "7.1.0",
"@angular-devkit/schematics": "7.1.0",
"typescript": "3.1.6"
- },
- "dependencies": {
- "@angular-devkit/core": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.1.0.tgz",
- "integrity": "sha512-mR0YNRBEWfK3y5JfPmENw6Qy8kk6jaJTjDOso1uOwRKWQDe642tnK0P1HTmZ+WBgp+RhYD4pHbKePqOHw/tsdQ==",
- "requires": {
- "ajv": "6.5.3",
- "chokidar": "2.0.4",
- "fast-json-stable-stringify": "2.0.0",
- "rxjs": "6.3.3",
- "source-map": "0.7.3"
- }
- },
- "@angular-devkit/schematics": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-7.1.0.tgz",
- "integrity": "sha512-MIK6eT3x6EppUcz7KFwJ63z3gUVmi5dQPiN8p+kTpHE2SorZCQvQ6+YKUMw9VZ6WLEQOZYJfoQozKyEWllNlsw==",
- "requires": {
- "@angular-devkit/core": "7.1.0",
- "rxjs": "6.3.3"
- }
- },
- "source-map": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
- "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ=="
- }
}
},
"@schematics/update": {
@@ -1543,43 +1257,6 @@
"rxjs": "6.3.3",
"semver": "5.5.1",
"semver-intersect": "1.4.0"
- },
- "dependencies": {
- "@angular-devkit/core": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.1.0.tgz",
- "integrity": "sha512-mR0YNRBEWfK3y5JfPmENw6Qy8kk6jaJTjDOso1uOwRKWQDe642tnK0P1HTmZ+WBgp+RhYD4pHbKePqOHw/tsdQ==",
- "dev": true,
- "requires": {
- "ajv": "6.5.3",
- "chokidar": "2.0.4",
- "fast-json-stable-stringify": "2.0.0",
- "rxjs": "6.3.3",
- "source-map": "0.7.3"
- }
- },
- "@angular-devkit/schematics": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-7.1.0.tgz",
- "integrity": "sha512-MIK6eT3x6EppUcz7KFwJ63z3gUVmi5dQPiN8p+kTpHE2SorZCQvQ6+YKUMw9VZ6WLEQOZYJfoQozKyEWllNlsw==",
- "dev": true,
- "requires": {
- "@angular-devkit/core": "7.1.0",
- "rxjs": "6.3.3"
- }
- },
- "semver": {
- "version": "5.5.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz",
- "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==",
- "dev": true
- },
- "source-map": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
- "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
- "dev": true
- }
}
},
"@types/cordova": {
@@ -1615,9 +1292,9 @@
"dev": true
},
"@types/selenium-webdriver": {
- "version": "3.0.13",
- "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-3.0.13.tgz",
- "integrity": "sha512-rI0LGoMiZGUM+tjDakQpwZOvcmQoubiJ7hxqrYU12VRxBuGGvOThxrBOU/QmJKlKg1WG6FMzuvcEyLffvVSsmw==",
+ "version": "3.0.14",
+ "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-3.0.14.tgz",
+ "integrity": "sha512-4GbNCDs98uHCT/OMv40qQC/OpoPbYn9XdXeTiFwHBBFO6eJhYEPUu2zDKirXSbHlvDV8oZ9l8EQ+HrEx/YS9DQ==",
"dev": true
},
"@webassemblyjs/ast": {
@@ -1893,9 +1570,9 @@
}
},
"ajv-errors": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.0.tgz",
- "integrity": "sha1-7PAh+hCP0X37Xms4Py3SM+Mf/Fk=",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz",
+ "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==",
"dev": true
},
"ajv-keywords": {
@@ -1919,9 +1596,9 @@
}
},
"ansi-colors": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.1.tgz",
- "integrity": "sha512-Xt+zb6nqgvV9SWAVp0EG3lRsHcbq5DDgqjPPz6pwgtj6RKz65zGXMNa82oJfOSBA/to6GmRP7Dr+6o+kbApTzQ==",
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz",
+ "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==",
"dev": true
},
"ansi-escapes": {
@@ -2022,9 +1699,9 @@
"optional": true
},
"array-flatten": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.1.tgz",
- "integrity": "sha1-Qmu52oQJDBg42BLIFQryCoMx4pY=",
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz",
+ "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==",
"dev": true
},
"array-slice": {
@@ -2237,7 +1914,7 @@
},
"supports-color": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "resolved": "http://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
"integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
"dev": true
}
@@ -2257,6 +1934,14 @@
"lodash": "^4.17.4",
"source-map": "^0.5.7",
"trim-right": "^1.0.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
}
},
"babel-messages": {
@@ -2501,6 +2186,17 @@
"qs": "6.5.2",
"raw-body": "2.3.3",
"type-is": "~1.6.16"
+ },
+ "dependencies": {
+ "iconv-lite": {
+ "version": "0.4.23",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
+ "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
+ "dev": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ }
}
},
"bonjour": {
@@ -2631,14 +2327,14 @@
}
},
"browserslist": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.3.4.tgz",
- "integrity": "sha512-u5iz+ijIMUlmV8blX82VGFrB9ecnUg5qEt55CMZ/YJEhha+d8qpBfOFuutJ6F/VKRXjZoD33b6uvarpPxcl3RA==",
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.3.6.tgz",
+ "integrity": "sha512-kMGKs4BTzRWviZ8yru18xBpx+CyHG9eqgRbj9XbE3IMgtczf4aiA0Y1YCpVdvUieKGZ03kolSPXqTcscBCb9qw==",
"dev": true,
"requires": {
- "caniuse-lite": "^1.0.30000899",
- "electron-to-chromium": "^1.3.82",
- "node-releases": "^1.0.1"
+ "caniuse-lite": "^1.0.30000921",
+ "electron-to-chromium": "^1.3.92",
+ "node-releases": "^1.1.1"
}
},
"browserstack": {
@@ -2659,14 +2355,6 @@
"base64-js": "^1.0.2",
"ieee754": "^1.1.4",
"isarray": "^1.0.0"
- },
- "dependencies": {
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
- "dev": true
- }
}
},
"buffer-alloc": {
@@ -2760,6 +2448,14 @@
"ssri": "^5.2.4",
"unique-filename": "^1.1.0",
"y18n": "^4.0.0"
+ },
+ "dependencies": {
+ "y18n": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
+ "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
+ "dev": true
+ }
}
},
"cache-base": {
@@ -2801,9 +2497,9 @@
}
},
"caniuse-lite": {
- "version": "1.0.30000910",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000910.tgz",
- "integrity": "sha512-u/nxtHGAzCGZzIxt3dA/tpSPOcirBZFWKwz1EPz4aaupnBI2XR0Rbr74g0zc6Hzy41OEM4uMoZ38k56TpYAWjQ==",
+ "version": "1.0.30000925",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000925.tgz",
+ "integrity": "sha512-zcYupoUxtW46rOikuDF7vfL9N1Qe9ZuUBTz3n3q8fFsoJIs/h9UN6Vg/0QpjsmvImXw9mVc3g+ZBfqvUz/iALA==",
"dev": true
},
"canonical-path": {
@@ -3004,10 +2700,16 @@
"sprintf-js": "^1.1.1"
},
"dependencies": {
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
"sprintf-js": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.1.tgz",
- "integrity": "sha1-Nr54Mgr+WAH2zqPueLblqrlA6gw=",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz",
+ "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==",
"dev": true
}
}
@@ -3131,7 +2833,7 @@
},
"concat-stream": {
"version": "1.6.2",
- "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "resolved": "http://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
"integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
"dev": true,
"requires": {
@@ -3168,109 +2870,319 @@
"unpipe": "~1.0.0"
}
},
- "statuses": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
- "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=",
- "dev": true
+ "statuses": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
+ "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=",
+ "dev": true
+ }
+ }
+ },
+ "connect-history-api-fallback": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz",
+ "integrity": "sha1-sGhzk0vF40T+9hGhlqb6rgruAVo=",
+ "dev": true
+ },
+ "console-browserify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
+ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
+ "dev": true,
+ "requires": {
+ "date-now": "^0.1.4"
+ }
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
+ "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
+ "dev": true
+ },
+ "constants-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
+ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
+ "dev": true
+ },
+ "content-disposition": {
+ "version": "0.5.2",
+ "resolved": "http://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
+ "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=",
+ "dev": true
+ },
+ "content-type": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
+ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
+ "dev": true
+ },
+ "convert-source-map": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz",
+ "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.1"
+ }
+ },
+ "cookie": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
+ "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=",
+ "dev": true
+ },
+ "cookie-signature": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=",
+ "dev": true
+ },
+ "copy-concurrently": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
+ "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==",
+ "dev": true,
+ "requires": {
+ "aproba": "^1.1.1",
+ "fs-write-stream-atomic": "^1.0.8",
+ "iferr": "^0.1.5",
+ "mkdirp": "^0.5.1",
+ "rimraf": "^2.5.4",
+ "run-queue": "^1.0.0"
+ }
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40="
+ },
+ "copy-webpack-plugin": {
+ "version": "4.5.4",
+ "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.5.4.tgz",
+ "integrity": "sha512-0lstlEyj74OAtYMrDxlNZsU7cwFijAI3Ofz2fD6Mpo9r4xCv4yegfa3uHIKvZY1NSuOtE9nvG6TAhJ+uz9gDaQ==",
+ "dev": true,
+ "requires": {
+ "cacache": "^10.0.4",
+ "find-cache-dir": "^1.0.0",
+ "globby": "^7.1.1",
+ "is-glob": "^4.0.0",
+ "loader-utils": "^1.1.0",
+ "minimatch": "^3.0.4",
+ "p-limit": "^1.0.0",
+ "serialize-javascript": "^1.4.0"
+ }
+ },
+ "cordova-android": {
+ "version": "7.1.4",
+ "resolved": "https://registry.npmjs.org/cordova-android/-/cordova-android-7.1.4.tgz",
+ "integrity": "sha512-Rtvu002I83uzfVyCsE6p2krFKVHt9TSAqZUATes+zH+o9cdxYGrLHY+PKCQo4SLCdSMdrkIHCDnQPTYTp/d7+g==",
+ "requires": {
+ "abbrev": "*",
+ "android-versions": "1.4.0",
+ "ansi": "*",
+ "balanced-match": "*",
+ "base64-js": "1.2.0",
+ "big-integer": "1.6.32",
+ "bplist-parser": "*",
+ "brace-expansion": "*",
+ "concat-map": "*",
+ "cordova-common": "2.2.5",
+ "cordova-registry-mapper": "*",
+ "elementtree": "0.1.6",
+ "glob": "5.0.15",
+ "inflight": "*",
+ "inherits": "*",
+ "minimatch": "*",
+ "nopt": "3.0.1",
+ "once": "*",
+ "path-is-absolute": "1.0.1",
+ "plist": "2.1.0",
+ "properties-parser": "0.2.3",
+ "q": "1.4.1",
+ "sax": "0.3.5",
+ "semver": "5.5.0",
+ "shelljs": "0.5.3",
+ "underscore": "*",
+ "unorm": "*",
+ "wrappy": "*",
+ "xmlbuilder": "8.2.2",
+ "xmldom": "*"
+ },
+ "dependencies": {
+ "abbrev": {
+ "version": "1.1.1",
+ "bundled": true
+ },
+ "android-versions": {
+ "version": "1.4.0",
+ "bundled": true,
+ "requires": {
+ "semver": "^5.4.1"
+ }
+ },
+ "ansi": {
+ "version": "0.3.1",
+ "bundled": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "base64-js": {
+ "version": "1.2.0",
+ "bundled": true
+ },
+ "big-integer": {
+ "version": "1.6.32",
+ "bundled": true
+ },
+ "bplist-parser": {
+ "version": "0.1.1",
+ "bundled": true,
+ "requires": {
+ "big-integer": "^1.6.7"
+ }
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "bundled": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "bundled": true
+ },
+ "cordova-common": {
+ "version": "2.2.5",
+ "bundled": true,
+ "requires": {
+ "ansi": "^0.3.1",
+ "bplist-parser": "^0.1.0",
+ "cordova-registry-mapper": "^1.1.8",
+ "elementtree": "0.1.6",
+ "glob": "^5.0.13",
+ "minimatch": "^3.0.0",
+ "plist": "^2.1.0",
+ "q": "^1.4.1",
+ "shelljs": "^0.5.3",
+ "underscore": "^1.8.3",
+ "unorm": "^1.3.3"
+ }
+ },
+ "cordova-registry-mapper": {
+ "version": "1.1.15",
+ "bundled": true
+ },
+ "elementtree": {
+ "version": "0.1.6",
+ "bundled": true,
+ "requires": {
+ "sax": "0.3.5"
+ }
+ },
+ "glob": {
+ "version": "5.0.15",
+ "bundled": true,
+ "requires": {
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "2 || 3",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "bundled": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "bundled": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "bundled": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "nopt": {
+ "version": "3.0.1",
+ "bundled": true,
+ "requires": {
+ "abbrev": "1"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "bundled": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "plist": {
+ "version": "2.1.0",
+ "bundled": true,
+ "requires": {
+ "base64-js": "1.2.0",
+ "xmlbuilder": "8.2.2",
+ "xmldom": "0.1.x"
+ }
+ },
+ "properties-parser": {
+ "version": "0.2.3",
+ "bundled": true
+ },
+ "q": {
+ "version": "1.4.1",
+ "bundled": true
+ },
+ "sax": {
+ "version": "0.3.5",
+ "bundled": true
+ },
+ "semver": {
+ "version": "5.5.0",
+ "bundled": true
+ },
+ "shelljs": {
+ "version": "0.5.3",
+ "bundled": true
+ },
+ "underscore": {
+ "version": "1.9.1",
+ "bundled": true
+ },
+ "unorm": {
+ "version": "1.4.1",
+ "bundled": true
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "xmlbuilder": {
+ "version": "8.2.2",
+ "bundled": true
+ },
+ "xmldom": {
+ "version": "0.1.27",
+ "bundled": true
}
}
},
- "connect-history-api-fallback": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz",
- "integrity": "sha1-sGhzk0vF40T+9hGhlqb6rgruAVo=",
- "dev": true
- },
- "console-browserify": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
- "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
- "dev": true,
- "requires": {
- "date-now": "^0.1.4"
- }
- },
- "console-control-strings": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
- "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
- "dev": true
- },
- "constants-browserify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
- "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
- "dev": true
- },
- "content-disposition": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
- "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=",
- "dev": true
- },
- "content-type": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
- "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
- "dev": true
- },
- "convert-source-map": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz",
- "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.1.1"
- }
- },
- "cookie": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
- "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=",
- "dev": true
- },
- "cookie-signature": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
- "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=",
- "dev": true
- },
- "copy-concurrently": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
- "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==",
- "dev": true,
- "requires": {
- "aproba": "^1.1.1",
- "fs-write-stream-atomic": "^1.0.8",
- "iferr": "^0.1.5",
- "mkdirp": "^0.5.1",
- "rimraf": "^2.5.4",
- "run-queue": "^1.0.0"
- }
- },
- "copy-descriptor": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
- "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40="
- },
- "copy-webpack-plugin": {
- "version": "4.5.4",
- "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.5.4.tgz",
- "integrity": "sha512-0lstlEyj74OAtYMrDxlNZsU7cwFijAI3Ofz2fD6Mpo9r4xCv4yegfa3uHIKvZY1NSuOtE9nvG6TAhJ+uz9gDaQ==",
- "dev": true,
- "requires": {
- "cacache": "^10.0.4",
- "find-cache-dir": "^1.0.0",
- "globby": "^7.1.1",
- "is-glob": "^4.0.0",
- "loader-utils": "^1.1.0",
- "minimatch": "^3.0.4",
- "p-limit": "^1.0.0",
- "serialize-javascript": "^1.4.0"
- }
- },
"cordova-ios": {
"version": "4.5.5",
"resolved": "https://registry.npmjs.org/cordova-ios/-/cordova-ios-4.5.5.tgz",
@@ -3316,49 +3228,41 @@
"dependencies": {
"abbrev": {
"version": "1.1.1",
- "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
- "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
+ "bundled": true
},
"ansi": {
"version": "0.3.1",
- "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz",
- "integrity": "sha1-DELU+xcWDVqa8eSEus4cZpIsGyE="
+ "bundled": true
},
"balanced-match": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
- "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+ "bundled": true
},
"base64-js": {
"version": "1.2.0",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.0.tgz",
- "integrity": "sha1-o5mS1yNYSBGYK+XikLtqU9hnAPE="
+ "bundled": true
},
"big-integer": {
"version": "1.6.32",
- "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.32.tgz",
- "integrity": "sha512-ljKJdR3wk9thHfLj4DtrNiOSTxvGFaMjWrG4pW75juXC4j7+XuKJVFdg4kgFMYp85PVkO05dFMj2dk2xVsH4xw=="
+ "bundled": true
},
"bplist-creator": {
"version": "0.0.7",
- "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.7.tgz",
- "integrity": "sha1-N98VNgkoJLh8QvlXsBNEEXNyrkU=",
+ "bundled": true,
"requires": {
"stream-buffers": "~2.2.0"
}
},
"bplist-parser": {
"version": "0.1.1",
- "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.1.1.tgz",
- "integrity": "sha1-1g1dzCDLptx+HymbNdPh+V2vuuY=",
+ "bundled": true,
"requires": {
"big-integer": "^1.6.7"
}
},
"brace-expansion": {
"version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "bundled": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
@@ -3366,13 +3270,11 @@
},
"concat-map": {
"version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+ "bundled": true
},
"cordova-common": {
"version": "2.2.5",
- "resolved": "https://registry.npmjs.org/cordova-common/-/cordova-common-2.2.5.tgz",
- "integrity": "sha1-+TzvKtSUz8v1bEbj1hKqqctfzDI=",
+ "bundled": true,
"requires": {
"ansi": "^0.3.1",
"bplist-parser": "^0.1.0",
@@ -3389,21 +3291,18 @@
},
"cordova-registry-mapper": {
"version": "1.1.15",
- "resolved": "https://registry.npmjs.org/cordova-registry-mapper/-/cordova-registry-mapper-1.1.15.tgz",
- "integrity": "sha1-4kS5GFuBdUc7/2B5MkkFEV+D3Hw="
+ "bundled": true
},
"elementtree": {
"version": "0.1.6",
- "resolved": "https://registry.npmjs.org/elementtree/-/elementtree-0.1.6.tgz",
- "integrity": "sha1-KsTEbqMFFsjEy9teOsdBjlkt4gw=",
+ "bundled": true,
"requires": {
"sax": "0.3.5"
}
},
"glob": {
"version": "5.0.15",
- "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
- "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
+ "bundled": true,
"requires": {
"inflight": "^1.0.4",
"inherits": "2",
@@ -3414,8 +3313,7 @@
},
"inflight": {
"version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "bundled": true,
"requires": {
"once": "^1.3.0",
"wrappy": "1"
@@ -3423,13 +3321,11 @@
},
"inherits": {
"version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ "bundled": true
},
"ios-sim": {
"version": "6.1.3",
- "resolved": "https://registry.npmjs.org/ios-sim/-/ios-sim-6.1.3.tgz",
- "integrity": "sha512-xnpRKFH8ytVuSs+qlfBttVjNqFRovONT+K940518eVXWC151AJbzC6L0TCGnxyMPF5ghVCGcyGterfMOJKVb3w==",
+ "bundled": true,
"requires": {
"bplist-parser": "^0.0.6",
"nopt": "1.0.9",
@@ -3439,13 +3335,11 @@
"dependencies": {
"bplist-parser": {
"version": "0.0.6",
- "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.0.6.tgz",
- "integrity": "sha1-ONo0cYF9+dRKs4kuJ3B7u9daEbk="
+ "bundled": true
},
"nopt": {
"version": "1.0.9",
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.9.tgz",
- "integrity": "sha1-O8DXy6e/sNWmdtvtfA6+SKT9RU4=",
+ "bundled": true,
"requires": {
"abbrev": "1"
}
@@ -3454,37 +3348,32 @@
},
"minimatch": {
"version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "bundled": true,
"requires": {
"brace-expansion": "^1.1.7"
}
},
"nopt": {
"version": "3.0.6",
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
- "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
+ "bundled": true,
"requires": {
"abbrev": "1"
}
},
"once": {
"version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "bundled": true,
"requires": {
"wrappy": "1"
}
},
"path-is-absolute": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+ "bundled": true
},
"plist": {
"version": "2.1.0",
- "resolved": "https://registry.npmjs.org/plist/-/plist-2.1.0.tgz",
- "integrity": "sha1-V8zbeggh3yGDEhejytVOPhRqECU=",
+ "bundled": true,
"requires": {
"base64-js": "1.2.0",
"xmlbuilder": "8.2.2",
@@ -3493,23 +3382,19 @@
},
"q": {
"version": "1.5.1",
- "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
- "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc="
+ "bundled": true
},
"sax": {
"version": "0.3.5",
- "resolved": "https://registry.npmjs.org/sax/-/sax-0.3.5.tgz",
- "integrity": "sha1-iPz8H3PAyLvVt8d2ttPzUB7tBz0="
+ "bundled": true
},
"shelljs": {
"version": "0.5.3",
- "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.5.3.tgz",
- "integrity": "sha1-xUmCuZbHbvDB5rWfvcWCX1txMRM="
+ "bundled": true
},
"simctl": {
"version": "1.1.1",
- "resolved": "https://registry.npmjs.org/simctl/-/simctl-1.1.1.tgz",
- "integrity": "sha512-yY1WQMq/pneY5jQb2+lFp45qEtcz4yKBu1NOPo2OFDVCkwSkQhpkoaAaO1fWhq4IU0+8TQ2r1PMGSTedP0A/Og==",
+ "bundled": true,
"requires": {
"shelljs": "^0.2.6",
"tail": "^0.4.0"
@@ -3517,15 +3402,13 @@
"dependencies": {
"shelljs": {
"version": "0.2.6",
- "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.2.6.tgz",
- "integrity": "sha1-kEktcv/MgVmXa6umL7D2iE8MM3g="
+ "bundled": true
}
}
},
"simple-plist": {
"version": "0.2.1",
- "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-0.2.1.tgz",
- "integrity": "sha1-cXZts1IyaSjPOoByQrp2IyJjZyM=",
+ "bundled": true,
"requires": {
"bplist-creator": "0.0.7",
"bplist-parser": "0.1.1",
@@ -3534,13 +3417,11 @@
"dependencies": {
"base64-js": {
"version": "1.1.2",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.1.2.tgz",
- "integrity": "sha1-1kAMrBxMZgl22Q0HoENR2JOV9eg="
+ "bundled": true
},
"plist": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/plist/-/plist-2.0.1.tgz",
- "integrity": "sha1-CjLKlIGxw2TpLhjcVch23p0B2os=",
+ "bundled": true,
"requires": {
"base64-js": "1.1.2",
"xmlbuilder": "8.2.2",
@@ -3551,38 +3432,31 @@
},
"stream-buffers": {
"version": "2.2.0",
- "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz",
- "integrity": "sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ="
+ "bundled": true
},
"tail": {
"version": "0.4.0",
- "resolved": "https://registry.npmjs.org/tail/-/tail-0.4.0.tgz",
- "integrity": "sha1-0p3nJ1DMmdseBTr/E8NZ7PtxMAI="
+ "bundled": true
},
"underscore": {
"version": "1.9.1",
- "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz",
- "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg=="
+ "bundled": true
},
"unorm": {
"version": "1.4.1",
- "resolved": "https://registry.npmjs.org/unorm/-/unorm-1.4.1.tgz",
- "integrity": "sha1-NkIA1fE2RsqLzURJAnEzVhR5IwA="
+ "bundled": true
},
"uuid": {
"version": "3.0.1",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz",
- "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE="
+ "bundled": true
},
"wrappy": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ "bundled": true
},
"xcode": {
"version": "0.9.3",
- "resolved": "https://registry.npmjs.org/xcode/-/xcode-0.9.3.tgz",
- "integrity": "sha1-kQqJwWrubMC0LKgFptC0z4chHPM=",
+ "bundled": true,
"requires": {
"pegjs": "^0.10.0",
"simple-plist": "^0.2.1",
@@ -3591,18 +3465,15 @@
},
"xml-escape": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/xml-escape/-/xml-escape-1.1.0.tgz",
- "integrity": "sha1-OQTBQ/qOs6ADDsZG0pAqLxtwbEQ="
+ "bundled": true
},
"xmlbuilder": {
"version": "8.2.2",
- "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-8.2.2.tgz",
- "integrity": "sha1-aSSGc0ELS6QuGmE2VR0pIjNap3M="
+ "bundled": true
},
"xmldom": {
"version": "0.1.27",
- "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz",
- "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk="
+ "bundled": true
}
}
},
@@ -3622,9 +3493,9 @@
"integrity": "sha512-6ucQ6FdlLdBm8kJfFnzozmBTjru/0xekHP/dAhjoCZggkGRlgs8TsUJFkxa/bV+qi7Dlo50JjmpE4UMWAO+aOQ=="
},
"cordova-plugin-ionic-webview": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/cordova-plugin-ionic-webview/-/cordova-plugin-ionic-webview-2.2.3.tgz",
- "integrity": "sha512-U6ufU5VVwDZuRvv9MwFixAu37r5VnXoi15T/Fg29BTGZJRZKnQ9lsJfVKtm/uLp4ITc85/3RBubOyUkRE/SOuQ=="
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/cordova-plugin-ionic-webview/-/cordova-plugin-ionic-webview-2.3.1.tgz",
+ "integrity": "sha512-tGKRp2iEYbOwZ2sT/uBU2C1YW1a43QI3YGi4WMH4LsgUdDjYGj4OZ8o7xQtRlxOKpdAjtSyLn1wz3Jip04elMg=="
},
"cordova-plugin-splashscreen": {
"version": "5.0.2",
@@ -3642,9 +3513,9 @@
"integrity": "sha1-tehezbv+Wu3tQKG/TuI3LmfZb7Q="
},
"core-js": {
- "version": "2.5.7",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
- "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw=="
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.1.tgz",
+ "integrity": "sha512-L72mmmEayPJBejKIWe2pYtGis5r0tQ5NaJekdhyXgeMQTpJoBsH0NL4ElY2LfSoV15xeQWKQ+XTTOZdyero5Xg=="
},
"core-util-is": {
"version": "1.0.2",
@@ -4122,9 +3993,9 @@
"dev": true
},
"electron-to-chromium": {
- "version": "1.3.84",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.84.tgz",
- "integrity": "sha512-IYhbzJYOopiTaNWMBp7RjbecUBsbnbDneOP86f3qvS0G0xfzwNSvMJpTrvi5/Y1gU7tg2NAgeg8a8rCYvW9Whw==",
+ "version": "1.3.96",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.96.tgz",
+ "integrity": "sha512-ZUXBUyGLeoJxp4Nt6G/GjBRLnyz8IKQGexZ2ndWaoegThgMGFO1tdDYID5gBV32/1S83osjJHyfzvanE/8HY4Q==",
"dev": true
},
"elliptic": {
@@ -4142,6 +4013,12 @@
"minimalistic-crypto-utils": "^1.0.0"
}
},
+ "emoji-regex": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
+ "dev": true
+ },
"emojis-list": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
@@ -4486,7 +4363,7 @@
},
"expand-range": {
"version": "0.1.1",
- "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz",
+ "resolved": "http://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz",
"integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=",
"dev": true,
"requires": {
@@ -4542,7 +4419,7 @@
},
"expand-range": {
"version": "1.8.2",
- "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
+ "resolved": "http://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
"integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
"dev": true,
"requires": {
@@ -4571,12 +4448,6 @@
"kind-of": "^3.0.2"
}
},
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
- "dev": true
- },
"isobject": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
@@ -4637,7 +4508,7 @@
"dependencies": {
"array-flatten": {
"version": "1.1.1",
- "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+ "resolved": "http://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
"integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
"dev": true
},
@@ -4683,17 +4554,6 @@
"chardet": "^0.7.0",
"iconv-lite": "^0.4.24",
"tmp": "^0.0.33"
- },
- "dependencies": {
- "iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "dev": true,
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3"
- }
- }
}
},
"extglob": {
@@ -4796,10 +4656,9 @@
"dev": true
},
"faye-websocket": {
- "version": "0.10.0",
- "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz",
- "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=",
- "dev": true,
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz",
+ "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=",
"requires": {
"websocket-driver": ">=0.5.1"
}
@@ -4936,9 +4795,9 @@
}
},
"follow-redirects": {
- "version": "1.5.9",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.9.tgz",
- "integrity": "sha512-Bh65EZI/RU8nx0wbYF9shkFZlqLP+6WT/5FnA3cE/djNSuKNHJEinGGZgu/cQEkeeb2GdFOgenAmn8qaqYke2w==",
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.6.0.tgz",
+ "integrity": "sha512-4Oh4eI3S9OueVV41AgJ1oLjpaJUhbJ7JDGOMhe0AFqoSejl5Q2nn3eGglAzRUKVKZE8jG5MNn66TjCJMAnpsWA==",
"dev": true,
"requires": {
"debug": "=3.1.0"
@@ -5063,25 +4922,21 @@
"dependencies": {
"abbrev": {
"version": "1.1.1",
- "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
- "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
+ "bundled": true,
"optional": true
},
"ansi-regex": {
"version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+ "bundled": true
},
"aproba": {
"version": "1.2.0",
- "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
- "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
+ "bundled": true,
"optional": true
},
"are-we-there-yet": {
"version": "1.1.4",
- "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz",
- "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=",
+ "bundled": true,
"optional": true,
"requires": {
"delegates": "^1.0.0",
@@ -5090,13 +4945,11 @@
},
"balanced-match": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
- "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+ "bundled": true
},
"brace-expansion": {
"version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "bundled": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
@@ -5104,35 +4957,29 @@
},
"chownr": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz",
- "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=",
+ "bundled": true,
"optional": true
},
"code-point-at": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
- "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
+ "bundled": true
},
"concat-map": {
"version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+ "bundled": true
},
"console-control-strings": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
- "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4="
+ "bundled": true
},
"core-util-is": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "bundled": true,
"optional": true
},
"debug": {
"version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "bundled": true,
"optional": true,
"requires": {
"ms": "2.0.0"
@@ -5140,26 +4987,22 @@
},
"deep-extend": {
"version": "0.5.1",
- "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz",
- "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==",
+ "bundled": true,
"optional": true
},
"delegates": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
- "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
+ "bundled": true,
"optional": true
},
"detect-libc": {
"version": "1.0.3",
- "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
- "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=",
+ "bundled": true,
"optional": true
},
"fs-minipass": {
"version": "1.2.5",
- "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz",
- "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==",
+ "bundled": true,
"optional": true,
"requires": {
"minipass": "^2.2.1"
@@ -5167,14 +5010,12 @@
},
"fs.realpath": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "bundled": true,
"optional": true
},
"gauge": {
"version": "2.7.4",
- "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
- "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
+ "bundled": true,
"optional": true,
"requires": {
"aproba": "^1.0.3",
@@ -5189,8 +5030,7 @@
},
"glob": {
"version": "7.1.2",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
- "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "bundled": true,
"optional": true,
"requires": {
"fs.realpath": "^1.0.0",
@@ -5203,14 +5043,12 @@
},
"has-unicode": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
- "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
+ "bundled": true,
"optional": true
},
"iconv-lite": {
"version": "0.4.21",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.21.tgz",
- "integrity": "sha512-En5V9za5mBt2oUA03WGD3TwDv0MKAruqsuxstbMUZaj9W9k/m1CV/9py3l0L5kw9Bln8fdHQmzHSYtvpvTLpKw==",
+ "bundled": true,
"optional": true,
"requires": {
"safer-buffer": "^2.1.0"
@@ -5218,8 +5056,7 @@
},
"ignore-walk": {
"version": "3.0.1",
- "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz",
- "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==",
+ "bundled": true,
"optional": true,
"requires": {
"minimatch": "^3.0.4"
@@ -5227,8 +5064,7 @@
},
"inflight": {
"version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "bundled": true,
"optional": true,
"requires": {
"once": "^1.3.0",
@@ -5237,46 +5073,39 @@
},
"inherits": {
"version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ "bundled": true
},
"ini": {
"version": "1.3.5",
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
- "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
+ "bundled": true,
"optional": true
},
"is-fullwidth-code-point": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
- "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "bundled": true,
"requires": {
"number-is-nan": "^1.0.0"
}
},
"isarray": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "bundled": true,
"optional": true
},
"minimatch": {
"version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "bundled": true,
"requires": {
"brace-expansion": "^1.1.7"
}
},
"minimist": {
"version": "0.0.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
- "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
+ "bundled": true
},
"minipass": {
"version": "2.2.4",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.2.4.tgz",
- "integrity": "sha512-hzXIWWet/BzWhYs2b+u7dRHlruXhwdgvlTMDKC6Cb1U7ps6Ac6yQlR39xsbjWJE377YTCtKwIXIpJ5oP+j5y8g==",
+ "bundled": true,
"requires": {
"safe-buffer": "^5.1.1",
"yallist": "^3.0.0"
@@ -5284,8 +5113,7 @@
},
"minizlib": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.1.0.tgz",
- "integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==",
+ "bundled": true,
"optional": true,
"requires": {
"minipass": "^2.2.1"
@@ -5293,22 +5121,19 @@
},
"mkdirp": {
"version": "0.5.1",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
- "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "bundled": true,
"requires": {
"minimist": "0.0.8"
}
},
"ms": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "bundled": true,
"optional": true
},
"needle": {
"version": "2.2.0",
- "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.0.tgz",
- "integrity": "sha512-eFagy6c+TYayorXw/qtAdSvaUpEbBsDwDyxYFgLZ0lTojfH7K+OdBqAF7TAFwDokJaGpubpSGG0wO3iC0XPi8w==",
+ "bundled": true,
"optional": true,
"requires": {
"debug": "^2.1.2",
@@ -5318,8 +5143,7 @@
},
"node-pre-gyp": {
"version": "0.10.0",
- "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.10.0.tgz",
- "integrity": "sha512-G7kEonQLRbcA/mOoFoxvlMrw6Q6dPf92+t/l0DFSMuSlDoWaI9JWIyPwK0jyE1bph//CUEL65/Fz1m2vJbmjQQ==",
+ "bundled": true,
"optional": true,
"requires": {
"detect-libc": "^1.0.2",
@@ -5336,8 +5160,7 @@
},
"nopt": {
"version": "4.0.1",
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
- "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
+ "bundled": true,
"optional": true,
"requires": {
"abbrev": "1",
@@ -5346,14 +5169,12 @@
},
"npm-bundled": {
"version": "1.0.3",
- "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.3.tgz",
- "integrity": "sha512-ByQ3oJ/5ETLyglU2+8dBObvhfWXX8dtPZDMePCahptliFX2iIuhyEszyFk401PZUNQH20vvdW5MLjJxkwU80Ow==",
+ "bundled": true,
"optional": true
},
"npm-packlist": {
"version": "1.1.10",
- "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.1.10.tgz",
- "integrity": "sha512-AQC0Dyhzn4EiYEfIUjCdMl0JJ61I2ER9ukf/sLxJUcZHfo+VyEfz2rMJgLZSS1v30OxPQe1cN0LZA1xbcaVfWA==",
+ "bundled": true,
"optional": true,
"requires": {
"ignore-walk": "^3.0.1",
@@ -5362,8 +5183,7 @@
},
"npmlog": {
"version": "4.1.2",
- "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
- "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
+ "bundled": true,
"optional": true,
"requires": {
"are-we-there-yet": "~1.1.2",
@@ -5374,39 +5194,33 @@
},
"number-is-nan": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
- "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
+ "bundled": true
},
"object-assign": {
"version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "bundled": true,
"optional": true
},
"once": {
"version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "bundled": true,
"requires": {
"wrappy": "1"
}
},
"os-homedir": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
- "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+ "bundled": true,
"optional": true
},
"os-tmpdir": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
- "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+ "bundled": true,
"optional": true
},
"osenv": {
"version": "0.1.5",
- "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
- "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
+ "bundled": true,
"optional": true,
"requires": {
"os-homedir": "^1.0.0",
@@ -5415,20 +5229,17 @@
},
"path-is-absolute": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "bundled": true,
"optional": true
},
"process-nextick-args": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
- "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "bundled": true,
"optional": true
},
"rc": {
"version": "1.2.7",
- "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.7.tgz",
- "integrity": "sha512-LdLD8xD4zzLsAT5xyushXDNscEjB7+2ulnl8+r1pnESlYtlJtVSoCMBGr30eDRJ3+2Gq89jK9P9e4tCEH1+ywA==",
+ "bundled": true,
"optional": true,
"requires": {
"deep-extend": "^0.5.1",
@@ -5439,16 +5250,14 @@
"dependencies": {
"minimist": {
"version": "1.2.0",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "bundled": true,
"optional": true
}
}
},
"readable-stream": {
"version": "2.3.6",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
- "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "bundled": true,
"optional": true,
"requires": {
"core-util-is": "~1.0.0",
@@ -5462,8 +5271,7 @@
},
"rimraf": {
"version": "2.6.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
- "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+ "bundled": true,
"optional": true,
"requires": {
"glob": "^7.0.5"
@@ -5471,43 +5279,36 @@
},
"safe-buffer": {
"version": "5.1.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
- "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
+ "bundled": true
},
"safer-buffer": {
"version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "bundled": true,
"optional": true
},
"sax": {
"version": "1.2.4",
- "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
- "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
+ "bundled": true,
"optional": true
},
"semver": {
"version": "5.5.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
- "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
+ "bundled": true,
"optional": true
},
"set-blocking": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+ "bundled": true,
"optional": true
},
"signal-exit": {
"version": "3.0.2",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
- "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+ "bundled": true,
"optional": true
},
"string-width": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "bundled": true,
"requires": {
"code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0",
@@ -5516,8 +5317,7 @@
},
"string_decoder": {
"version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "bundled": true,
"optional": true,
"requires": {
"safe-buffer": "~5.1.0"
@@ -5525,22 +5325,19 @@
},
"strip-ansi": {
"version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "bundled": true,
"requires": {
"ansi-regex": "^2.0.0"
}
},
"strip-json-comments": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
- "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+ "bundled": true,
"optional": true
},
"tar": {
"version": "4.4.1",
- "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.1.tgz",
- "integrity": "sha512-O+v1r9yN4tOsvl90p5HAP4AEqbYhx4036AGMm075fH9F8Qwi3oJ+v4u50FkT/KkvywNGtwkk0zRI+8eYm1X/xg==",
+ "bundled": true,
"optional": true,
"requires": {
"chownr": "^1.0.1",
@@ -5554,14 +5351,12 @@
},
"util-deprecate": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "bundled": true,
"optional": true
},
"wide-align": {
"version": "1.1.2",
- "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz",
- "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==",
+ "bundled": true,
"optional": true,
"requires": {
"string-width": "^1.0.2"
@@ -5569,13 +5364,11 @@
},
"wrappy": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ "bundled": true
},
"yallist": {
"version": "3.0.2",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz",
- "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k="
+ "bundled": true
}
}
},
@@ -6222,42 +6015,21 @@
"resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
"integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
"dev": true,
- "requires": {
- "ajv": "^6.5.5",
- "har-schema": "^2.0.0"
- },
- "dependencies": {
- "ajv": {
- "version": "6.5.5",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.5.tgz",
- "integrity": "sha512-7q7gtRQDJSyuEHjuVgHoUa2VuemFiCMrfQc9Tc08XTAc4Zj/5U1buQJ0HU6i7fKjXU09SVgSmxa4sLvuvS8Iyg==",
- "dev": true,
- "requires": {
- "fast-deep-equal": "^2.0.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- }
- },
- "fast-deep-equal": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
- "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
- "dev": true
- },
- "json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
- },
- "uri-js": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
- "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
+ "requires": {
+ "ajv": "^6.5.5",
+ "har-schema": "^2.0.0"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "6.6.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.2.tgz",
+ "integrity": "sha512-FBHEW6Jf5TB9MGBgUUA9XHkTbjXYfAUjY43ACMfmdMRHniyoMHjHjzD50OK8LGDWQwp4rWEsIq5kEqq7rvIM1g==",
"dev": true,
"requires": {
- "punycode": "^2.1.0"
+ "fast-deep-equal": "^2.0.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
}
}
}
@@ -6346,9 +6118,9 @@
}
},
"hash.js": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.5.tgz",
- "integrity": "sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA==",
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
+ "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
"dev": true,
"requires": {
"inherits": "^2.0.3",
@@ -6542,9 +6314,9 @@
}
},
"iconv-lite": {
- "version": "0.4.23",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
- "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
"requires": {
"safer-buffer": ">= 2.1.2 < 3"
}
@@ -6636,9 +6408,9 @@
}
},
"p-limit": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz",
- "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz",
+ "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==",
"dev": true,
"requires": {
"p-try": "^2.0.0"
@@ -6784,9 +6556,9 @@
}
},
"interpret": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz",
- "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz",
+ "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==",
"dev": true
},
"invariant": {
@@ -6804,9 +6576,9 @@
"integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY="
},
"ionicons": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-4.5.0.tgz",
- "integrity": "sha512-nNkS/0wmPcW4Lbg+NqivlOl14BGKKpaZZzZVQzH63MuZZvuu5u8F/JCwcUYiPOAYGp02w0UaDL/slz+HZOuB3Q=="
+ "version": "4.4.7",
+ "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-4.4.7.tgz",
+ "integrity": "sha512-6DOSIWGJnMY7nP69Ov4WduUA/zInJ8bc4/Y/orj76hrL9AgtMozEb4MciZ7ocPxr97wc8J+1c5uHpNZSaWE8KQ=="
},
"ip": {
"version": "1.1.5",
@@ -6828,7 +6600,7 @@
},
"is-accessor-descriptor": {
"version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "resolved": "http://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
"integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
"requires": {
"kind-of": "^3.0.2"
@@ -6883,7 +6655,7 @@
},
"is-data-descriptor": {
"version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "resolved": "http://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
"integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
"requires": {
"kind-of": "^3.0.2"
@@ -7069,9 +6841,9 @@
"dev": true
},
"isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
},
"isbinaryfile": {
"version": "3.0.3",
@@ -7400,9 +7172,9 @@
"dev": true
},
"js-base64": {
- "version": "2.4.9",
- "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.9.tgz",
- "integrity": "sha512-xcinL3AuDJk7VSzsHgb9DvvIXayBbadtMZ4HFPx8rUszbW1MuNMlwYVC4zzCZ6e1sqZpnNS5ZFYOhXqA39T7LQ==",
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.0.tgz",
+ "integrity": "sha512-wlEBIZ5LP8usDylWbDNhKPEFVFdI5hCHpnVoT/Ysvoi/PRhJENm/Rlh9TvjYB38HFfKZN7OzEbRjmjvLkFw11g==",
"dev": true,
"optional": true
},
@@ -7520,12 +7292,6 @@
"integrity": "sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y=",
"dev": true
},
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
- "dev": true
- },
"process-nextick-args": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
@@ -7548,7 +7314,7 @@
},
"string_decoder": {
"version": "0.10.31",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
"integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
"dev": true
}
@@ -7590,9 +7356,9 @@
},
"dependencies": {
"mime": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz",
- "integrity": "sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg==",
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz",
+ "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==",
"dev": true
},
"source-map": {
@@ -7946,9 +7712,9 @@
}
},
"lru-cache": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz",
- "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==",
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
"dev": true,
"requires": {
"pseudomap": "^1.0.2",
@@ -7999,25 +7765,36 @@
},
"dependencies": {
"cacache": {
- "version": "11.3.1",
- "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.1.tgz",
- "integrity": "sha512-2PEw4cRRDu+iQvBTTuttQifacYjLPhET+SYO/gEFMy8uhi+jlJREDAjSF5FWSdV/Aw5h18caHA7vMTw2c+wDzA==",
+ "version": "11.3.2",
+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.2.tgz",
+ "integrity": "sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==",
"dev": true,
"requires": {
- "bluebird": "^3.5.1",
- "chownr": "^1.0.1",
- "figgy-pudding": "^3.1.0",
- "glob": "^7.1.2",
- "graceful-fs": "^4.1.11",
- "lru-cache": "^4.1.3",
+ "bluebird": "^3.5.3",
+ "chownr": "^1.1.1",
+ "figgy-pudding": "^3.5.1",
+ "glob": "^7.1.3",
+ "graceful-fs": "^4.1.15",
+ "lru-cache": "^5.1.1",
"mississippi": "^3.0.0",
"mkdirp": "^0.5.1",
"move-concurrently": "^1.0.1",
"promise-inflight": "^1.0.1",
"rimraf": "^2.6.2",
- "ssri": "^6.0.0",
- "unique-filename": "^1.1.0",
+ "ssri": "^6.0.1",
+ "unique-filename": "^1.1.1",
"y18n": "^4.0.0"
+ },
+ "dependencies": {
+ "lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "dev": true,
+ "requires": {
+ "yallist": "^3.0.2"
+ }
+ }
}
},
"mississippi": {
@@ -8056,6 +7833,18 @@
"requires": {
"figgy-pudding": "^3.5.1"
}
+ },
+ "y18n": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
+ "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
+ "dev": true
+ },
+ "yallist": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
+ "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==",
+ "dev": true
}
}
},
@@ -8285,9 +8074,9 @@
}
},
"minizlib": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.1.1.tgz",
- "integrity": "sha512-TrfjCjk4jLhcJyGMYymBH6oTXcWjYbUAXTHDbtnWHjZC25h0cdajHuPE1zxb4DVmu8crfh+HwH/WMuyLG0nHBg==",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz",
+ "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==",
"dev": true,
"requires": {
"minipass": "^2.2.1"
@@ -8394,14 +8183,14 @@
},
"mute-stream": {
"version": "0.0.7",
- "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+ "resolved": "http://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
"integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
"dev": true
},
"nan": {
- "version": "2.11.1",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz",
- "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA=="
+ "version": "2.12.1",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz",
+ "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw=="
},
"nanomatch": {
"version": "1.2.13",
@@ -8541,9 +8330,9 @@
}
},
"node-releases": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.0.4.tgz",
- "integrity": "sha512-GqRV9GcHw8JCRDaP/JoeNMNzEGzHAknMvIHqMb2VeTOmg1Cf9+ej8bkV12tHfzWHQMCkQ5zUFgwFUkfraynNCw==",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.2.tgz",
+ "integrity": "sha512-j1gEV/zX821yxdWp/1vBMN0pSUjuH9oGUdLCb4PfUko6ZW7KdRs3Z+QGGwDUhYtSpQvdVVyLd2V0YvLsmdg5jQ==",
"dev": true,
"requires": {
"semver": "^5.3.0"
@@ -8600,7 +8389,7 @@
},
"supports-color": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "resolved": "http://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
"integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
"dev": true,
"optional": true
@@ -8855,9 +8644,9 @@
}
},
"opn": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/opn/-/opn-5.4.0.tgz",
- "integrity": "sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==",
+ "version": "5.3.0",
+ "resolved": "http://registry.npmjs.org/opn/-/opn-5.3.0.tgz",
+ "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==",
"dev": true,
"requires": {
"is-wsl": "^1.1.0"
@@ -9029,25 +8818,36 @@
},
"dependencies": {
"cacache": {
- "version": "11.3.1",
- "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.1.tgz",
- "integrity": "sha512-2PEw4cRRDu+iQvBTTuttQifacYjLPhET+SYO/gEFMy8uhi+jlJREDAjSF5FWSdV/Aw5h18caHA7vMTw2c+wDzA==",
+ "version": "11.3.2",
+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.2.tgz",
+ "integrity": "sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==",
"dev": true,
"requires": {
- "bluebird": "^3.5.1",
- "chownr": "^1.0.1",
- "figgy-pudding": "^3.1.0",
- "glob": "^7.1.2",
- "graceful-fs": "^4.1.11",
- "lru-cache": "^4.1.3",
+ "bluebird": "^3.5.3",
+ "chownr": "^1.1.1",
+ "figgy-pudding": "^3.5.1",
+ "glob": "^7.1.3",
+ "graceful-fs": "^4.1.15",
+ "lru-cache": "^5.1.1",
"mississippi": "^3.0.0",
"mkdirp": "^0.5.1",
"move-concurrently": "^1.0.1",
"promise-inflight": "^1.0.1",
"rimraf": "^2.6.2",
- "ssri": "^6.0.0",
- "unique-filename": "^1.1.0",
+ "ssri": "^6.0.1",
+ "unique-filename": "^1.1.1",
"y18n": "^4.0.0"
+ },
+ "dependencies": {
+ "lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "dev": true,
+ "requires": {
+ "yallist": "^3.0.2"
+ }
+ }
}
},
"get-stream": {
@@ -9087,6 +8887,12 @@
"once": "^1.3.1"
}
},
+ "semver": {
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
+ "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
+ "dev": true
+ },
"ssri": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz",
@@ -9111,6 +8917,12 @@
"yallist": "^3.0.2"
}
},
+ "y18n": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
+ "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
+ "dev": true
+ },
"yallist": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
@@ -9120,9 +8932,9 @@
}
},
"pako": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz",
- "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==",
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.7.tgz",
+ "integrity": "sha512-3HNK5tW4x8o5mO8RuHZp3Ydw9icZXx0RANAOMzlMzx7LVXhMJ4mo3MOBpzyd7r/+RUu8BmndP47LXT+vzjtWcQ==",
"dev": true
},
"parallel-transform": {
@@ -9188,10 +9000,9 @@
}
},
"parse5": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
- "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
- "dev": true
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz",
+ "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ=="
},
"parse5-html-rewriting-stream": {
"version": "5.1.0",
@@ -9200,13 +9011,6 @@
"requires": {
"parse5": "^5.1.0",
"parse5-sax-parser": "^5.1.0"
- },
- "dependencies": {
- "parse5": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz",
- "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ=="
- }
}
},
"parse5-sax-parser": {
@@ -9215,13 +9019,6 @@
"integrity": "sha512-VEhdEDhBkoSILPmsZ96SoIIUow3hZbtgQsqXw7r8DxxnqsCIO0fwkT9mWgBcf9SPjVUh92liuEprHrrYzXBPWQ==",
"requires": {
"parse5": "^5.1.0"
- },
- "dependencies": {
- "parse5": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz",
- "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ=="
- }
}
},
"parseqs": {
@@ -9255,7 +9052,7 @@
},
"path-browserify": {
"version": "0.0.0",
- "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz",
+ "resolved": "http://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz",
"integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=",
"dev": true
},
@@ -9299,6 +9096,13 @@
"integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=",
"requires": {
"isarray": "0.0.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+ }
}
},
"path-type": {
@@ -9514,27 +9318,6 @@
"bytebuffer": "~5",
"glob": "^7.0.5",
"yargs": "^3.10.0"
- },
- "dependencies": {
- "y18n": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
- "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE="
- },
- "yargs": {
- "version": "3.32.0",
- "resolved": "http://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz",
- "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=",
- "requires": {
- "camelcase": "^2.0.1",
- "cliui": "^3.0.3",
- "decamelize": "^1.1.1",
- "os-locale": "^1.4.0",
- "string-width": "^1.0.1",
- "window-size": "^0.1.4",
- "y18n": "^3.2.0"
- }
- }
}
},
"protoduck": {
@@ -9636,6 +9419,12 @@
"integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
"dev": true
},
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
"source-map-support": {
"version": "0.4.18",
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
@@ -9647,14 +9436,14 @@
},
"supports-color": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "resolved": "http://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
"integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
"dev": true
},
"webdriver-manager": {
- "version": "12.1.0",
- "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.1.0.tgz",
- "integrity": "sha512-oEc5fmkpz6Yh6udhwir5m0eN5mgRPq9P/NU5YWuT3Up5slt6Zz+znhLU7q4+8rwCZz/Qq3Fgpr/4oao7NPCm2A==",
+ "version": "12.1.1",
+ "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.1.1.tgz",
+ "integrity": "sha512-L9TEQmZs6JbMMRQI1w60mfps265/NCr0toYJl7p/R2OAk6oXAfwI6jqYP7EWae+d7Ad2S2Aj4+rzxoSjqk3ZuA==",
"dev": true,
"requires": {
"adm-zip": "^0.4.9",
@@ -9701,9 +9490,9 @@
"dev": true
},
"psl": {
- "version": "1.1.29",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz",
- "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==",
+ "version": "1.1.31",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz",
+ "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==",
"dev": true
},
"public-encrypt": {
@@ -9763,9 +9552,9 @@
},
"dependencies": {
"debug": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz",
- "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==",
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
"dev": true,
"requires": {
"ms": "^2.1.1"
@@ -9884,11 +9673,22 @@
"http-errors": "1.6.3",
"iconv-lite": "0.4.23",
"unpipe": "1.0.0"
+ },
+ "dependencies": {
+ "iconv-lite": {
+ "version": "0.4.23",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
+ "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
+ "dev": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ }
}
},
"raw-loader": {
"version": "0.5.1",
- "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-0.5.1.tgz",
+ "resolved": "http://registry.npmjs.org/raw-loader/-/raw-loader-0.5.1.tgz",
"integrity": "sha1-DD0L6u2KAclm2Xh793goElKpeao=",
"dev": true
},
@@ -9982,13 +9782,6 @@
"safe-buffer": "~5.1.1",
"string_decoder": "~1.1.1",
"util-deprecate": "~1.0.1"
- },
- "dependencies": {
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
- }
}
},
"readdirp": {
@@ -10059,7 +9852,7 @@
},
"regexpu-core": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz",
+ "resolved": "http://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz",
"integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=",
"dev": true,
"requires": {
@@ -10076,7 +9869,7 @@
},
"regjsparser": {
"version": "0.1.5",
- "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz",
+ "resolved": "http://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz",
"integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=",
"dev": true,
"requires": {
@@ -10169,7 +9962,7 @@
},
"resolve": {
"version": "1.1.7",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
+ "resolved": "http://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
"integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
"dev": true
},
@@ -10294,6 +10087,37 @@
"lodash": "^4.0.0",
"scss-tokenizer": "^0.2.3",
"yargs": "^7.0.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
+ "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
+ "dev": true,
+ "optional": true
+ },
+ "yargs": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz",
+ "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "camelcase": "^3.0.0",
+ "cliui": "^3.2.0",
+ "decamelize": "^1.1.1",
+ "get-caller-file": "^1.0.1",
+ "os-locale": "^1.4.0",
+ "read-pkg-up": "^1.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^1.0.1",
+ "set-blocking": "^2.0.0",
+ "string-width": "^1.0.2",
+ "which-module": "^1.0.0",
+ "y18n": "^3.2.1",
+ "yargs-parser": "^5.0.0"
+ }
+ }
}
},
"sass-loader": {
@@ -10398,9 +10222,9 @@
}
},
"semver": {
- "version": "5.6.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
- "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
+ "version": "5.5.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz",
+ "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==",
"dev": true
},
"semver-dsl": {
@@ -10451,9 +10275,9 @@
}
},
"serialize-javascript": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.5.0.tgz",
- "integrity": "sha512-Ga8c8NjAAp46Br4+0oZ2WxJCwIzwP60Gq1YPgU+39PiTVxyed/iKE/zyZI6+UlVYH5Q4PaQdHhcegIFPZTUfoQ==",
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.6.1.tgz",
+ "integrity": "sha512-A5MOagrPFga4YaKQSWHryl7AXvbQkEqpw4NNYMTNYUNV51bA8ABHgYFpqKx+YFFrw59xMV1qGH1R4AgoNIVgCw==",
"dev": true
},
"serve-index": {
@@ -10649,6 +10473,11 @@
"requires": {
"is-extendable": "^0.1.0"
}
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
}
}
},
@@ -10816,6 +10645,17 @@
"requires": {
"faye-websocket": "^0.10.0",
"uuid": "^3.0.1"
+ },
+ "dependencies": {
+ "faye-websocket": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz",
+ "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=",
+ "dev": true,
+ "requires": {
+ "websocket-driver": ">=0.5.1"
+ }
+ }
}
},
"sockjs-client": {
@@ -10841,15 +10681,6 @@
"ms": "^2.1.1"
}
},
- "faye-websocket": {
- "version": "0.11.1",
- "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz",
- "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=",
- "dev": true,
- "requires": {
- "websocket-driver": ">=0.5.1"
- }
- },
"ms": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
@@ -10885,9 +10716,9 @@
"dev": true
},
"source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
+ "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ=="
},
"source-map-loader": {
"version": "0.2.4",
@@ -10952,9 +10783,9 @@
"dev": true
},
"spdx-correct": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.2.tgz",
- "integrity": "sha512-q9hedtzyXHr5S0A1vEPoK/7l8NpfkFYTq6iCY+Pno2ZbdZR6WexZFtqeVGkGxW3TEJMN914Z55EnAGMmenlIQQ==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
+ "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==",
"dev": true,
"requires": {
"spdx-expression-parse": "^3.0.0",
@@ -10978,9 +10809,9 @@
}
},
"spdx-license-ids": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.2.tgz",
- "integrity": "sha512-qky9CVt0lVIECkEsYbNILVnPvycuEBkXoMFLRWsREkomQLevYhtRKC+R91a5TOAQ3bCMjikRwhyaRqj1VYatYg==",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz",
+ "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==",
"dev": true
},
"spdy": {
@@ -11031,14 +10862,14 @@
},
"sprintf-js": {
"version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "resolved": "http://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
"dev": true
},
"sshpk": {
- "version": "1.15.2",
- "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.15.2.tgz",
- "integrity": "sha512-Ra/OXQtuh0/enyl4ETZAfTaeksa6BXks5ZcjpSUNrjBr0DvrJKX+1fsKDPpT9TBXgHAFsa4510aNVgI8g/+SzA==",
+ "version": "1.16.0",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.0.tgz",
+ "integrity": "sha512-Zhev35/y7hRMcID/upReIvRse+I9SVhyVre/KTJSJQWMz3C3+G+HpO7m1wK/yckEtujKZ7dS4hkVxAnmHaIGVQ==",
"dev": true,
"requires": {
"asn1": "~0.2.3",
@@ -11107,7 +10938,7 @@
},
"stream-browserify": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz",
+ "resolved": "http://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz",
"integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=",
"dev": true,
"requires": {
@@ -11185,7 +11016,7 @@
},
"string-width": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "resolved": "http://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
"integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
"requires": {
"code-point-at": "^1.0.0",
@@ -11195,7 +11026,7 @@
},
"string_decoder": {
"version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"requires": {
"safe-buffer": "~5.1.0"
@@ -11319,9 +11150,9 @@
"dev": true
},
"tapable": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.0.tgz",
- "integrity": "sha512-IlqtmLVaZA2qab8epUXbVWRn3aB1imbDMJtjB3nu4X0NqPkcY/JH9ZtCBWKHWPxs8Svi9tyo8w2dBoi07qZbBA==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.1.tgz",
+ "integrity": "sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA==",
"dev": true
},
"tar": {
@@ -11337,9 +11168,9 @@
}
},
"terser": {
- "version": "3.10.12",
- "resolved": "https://registry.npmjs.org/terser/-/terser-3.10.12.tgz",
- "integrity": "sha512-3ODPC1eVt25EVNb04s/PkHxOmzKBQUF6bwwuR6h2DbEF8/j265Y1UkwNtOk9am/pRxfJ5HPapOlUlO6c16mKQQ==",
+ "version": "3.13.1",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-3.13.1.tgz",
+ "integrity": "sha512-ogyZye4DFqOtMzT92Y3Nxxw8OvXmL39HOALro4fc+EUYFFF9G/kk0znkvwMz6PPYgBtdKAodh3FPR70eugdaQA==",
"dev": true,
"requires": {
"commander": "~2.17.1",
@@ -11372,24 +11203,24 @@
},
"dependencies": {
"cacache": {
- "version": "11.3.1",
- "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.1.tgz",
- "integrity": "sha512-2PEw4cRRDu+iQvBTTuttQifacYjLPhET+SYO/gEFMy8uhi+jlJREDAjSF5FWSdV/Aw5h18caHA7vMTw2c+wDzA==",
+ "version": "11.3.2",
+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.2.tgz",
+ "integrity": "sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==",
"dev": true,
"requires": {
- "bluebird": "^3.5.1",
- "chownr": "^1.0.1",
- "figgy-pudding": "^3.1.0",
- "glob": "^7.1.2",
- "graceful-fs": "^4.1.11",
- "lru-cache": "^4.1.3",
+ "bluebird": "^3.5.3",
+ "chownr": "^1.1.1",
+ "figgy-pudding": "^3.5.1",
+ "glob": "^7.1.3",
+ "graceful-fs": "^4.1.15",
+ "lru-cache": "^5.1.1",
"mississippi": "^3.0.0",
"mkdirp": "^0.5.1",
"move-concurrently": "^1.0.1",
"promise-inflight": "^1.0.1",
"rimraf": "^2.6.2",
- "ssri": "^6.0.0",
- "unique-filename": "^1.1.0",
+ "ssri": "^6.0.1",
+ "unique-filename": "^1.1.1",
"y18n": "^4.0.0"
}
},
@@ -11423,6 +11254,15 @@
"path-exists": "^3.0.0"
}
},
+ "lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "dev": true,
+ "requires": {
+ "yallist": "^3.0.2"
+ }
+ },
"mississippi": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
@@ -11442,9 +11282,9 @@
}
},
"p-limit": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz",
- "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz",
+ "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==",
"dev": true,
"requires": {
"p-try": "^2.0.0"
@@ -11498,6 +11338,18 @@
"requires": {
"figgy-pudding": "^3.5.1"
}
+ },
+ "y18n": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
+ "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
+ "dev": true
+ },
+ "yallist": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
+ "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==",
+ "dev": true
}
}
},
@@ -11674,9 +11526,9 @@
"integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ=="
},
"tslint": {
- "version": "5.11.0",
- "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.11.0.tgz",
- "integrity": "sha1-mPMMAurjzecAYgHkwzywi0hYHu0=",
+ "version": "5.12.0",
+ "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.12.0.tgz",
+ "integrity": "sha512-CKEcH1MHUBhoV43SA/Jmy1l24HJJgI0eyLbBNSRyFlsQvb9v6Zdq+Nz2vEOH00nC5SUx4SneJ59PZUS/ARcokQ==",
"dev": true,
"requires": {
"babel-code-frame": "^6.22.0",
@@ -11694,12 +11546,12 @@
},
"dependencies": {
"resolve": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz",
- "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.9.0.tgz",
+ "integrity": "sha512-TZNye00tI67lwYvzxCxHGjwTNlUV70io54/Ed4j6PscB8xVfuBJpRenI/o6dVk0cY0PYTY27AgCoGGxRnYuItQ==",
"dev": true,
"requires": {
- "path-parse": "^1.0.5"
+ "path-parse": "^1.0.6"
}
}
}
@@ -11715,7 +11567,7 @@
},
"tty-browserify": {
"version": "0.0.0",
- "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
+ "resolved": "http://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
"integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
"dev": true
},
@@ -11929,11 +11781,6 @@
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
"integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E="
- },
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
}
}
},
@@ -12006,7 +11853,7 @@
"dependencies": {
"lru-cache": {
"version": "2.2.4",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.2.4.tgz",
+ "resolved": "http://registry.npmjs.org/lru-cache/-/lru-cache-2.2.4.tgz",
"integrity": "sha1-bGWGGb7PFAMdDQtZSxYELOTcBj0=",
"dev": true
}
@@ -12076,7 +11923,7 @@
},
"vm-browserify": {
"version": "0.0.4",
- "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz",
+ "resolved": "http://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz",
"integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=",
"dev": true,
"requires": {
@@ -12280,6 +12127,19 @@
}
}
},
+ "cross-spawn": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+ "dev": true,
+ "requires": {
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
"debug": {
"version": "3.2.6",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
@@ -12298,6 +12158,21 @@
"xregexp": "4.0.0"
}
},
+ "execa": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
+ "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^6.0.0",
+ "get-stream": "^4.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ }
+ },
"find-up": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
@@ -12307,6 +12182,15 @@
"locate-path": "^3.0.0"
}
},
+ "get-stream": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+ "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+ "dev": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ },
"invert-kv": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz",
@@ -12345,20 +12229,20 @@
"dev": true
},
"os-locale": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.0.1.tgz",
- "integrity": "sha512-7g5e7dmXPtzcP4bgsZ8ixDVqA7oWYuEz4lOSujeWyliPai4gfVDiFIcwBg3aGCPnmSGfzOKTK3ccPn0CKv3DBw==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz",
+ "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==",
"dev": true,
"requires": {
- "execa": "^0.10.0",
+ "execa": "^1.0.0",
"lcid": "^2.0.0",
"mem": "^4.0.0"
}
},
"p-limit": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz",
- "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz",
+ "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==",
"dev": true,
"requires": {
"p-try": "^2.0.0"
@@ -12379,6 +12263,16 @@
"integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==",
"dev": true
},
+ "pump": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
"string-width": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
@@ -12637,10 +12531,9 @@
"dev": true
},
"y18n": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
- "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
- "dev": true
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
+ "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE="
},
"yallist": {
"version": "2.1.2",
@@ -12649,41 +12542,17 @@
"dev": true
},
"yargs": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz",
- "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=",
- "dev": true,
- "optional": true,
+ "version": "3.32.0",
+ "resolved": "http://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz",
+ "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=",
"requires": {
- "camelcase": "^3.0.0",
- "cliui": "^3.2.0",
+ "camelcase": "^2.0.1",
+ "cliui": "^3.0.3",
"decamelize": "^1.1.1",
- "get-caller-file": "^1.0.1",
"os-locale": "^1.4.0",
- "read-pkg-up": "^1.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^1.0.1",
- "set-blocking": "^2.0.0",
- "string-width": "^1.0.2",
- "which-module": "^1.0.0",
- "y18n": "^3.2.1",
- "yargs-parser": "^5.0.0"
- },
- "dependencies": {
- "camelcase": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
- "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
- "dev": true,
- "optional": true
- },
- "y18n": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
- "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
- "dev": true,
- "optional": true
- }
+ "string-width": "^1.0.1",
+ "window-size": "^0.1.4",
+ "y18n": "^3.2.0"
}
},
"yargs-parser": {
diff --git a/package.json b/package.json
index bf2f4204d..cce7076b4 100644
--- a/package.json
+++ b/package.json
@@ -17,21 +17,21 @@
},
"private": true,
"dependencies": {
- "@angular/common": "~7.1.3",
- "@angular/core": "~7.1.3",
+ "@angular/common": "~7.1.0",
+ "@angular/core": "~7.1.0",
"@angular/fire": "^5.1.1",
- "@angular/forms": "~7.1.3",
+ "@angular/forms": "~7.1.0",
"@angular/http": "~7.1.0",
- "@angular/platform-browser": "7.1.3",
- "@angular/platform-browser-dynamic": "7.1.3",
+ "@angular/platform-browser": "7.1.0",
+ "@angular/platform-browser-dynamic": "7.1.0",
"@angular/pwa": "0.11.0",
- "@angular/router": "7.1.3",
+ "@angular/router": "7.1.0",
"@angular/service-worker": "~7.1.0",
"@ionic-native/core": "5.0.0-beta.15",
"@ionic-native/in-app-browser": "5.0.0-beta.15",
"@ionic-native/splash-screen": "5.0.0-beta.15",
"@ionic-native/status-bar": "5.0.0-beta.15",
- "@ionic/angular": "4.0.0-beta.19",
+ "@ionic/angular": "^4.0.0-beta.16",
"@ionic/storage": "^2.1.3",
"angularfire2": "^5.1.1",
"cordova-android": "^7.0.0",
@@ -52,11 +52,11 @@
"devDependencies": {
"@angular-devkit/architect": "0.11.0",
"@angular-devkit/build-angular": "0.11.0",
- "@angular-devkit/core": "7.1.2",
- "@angular-devkit/schematics": "7.1.2",
+ "@angular-devkit/core": "7.1.0",
+ "@angular-devkit/schematics": "7.1.0",
"@angular/cli": "7.1.0",
- "@angular/compiler": "7.1.3",
- "@angular/compiler-cli": "7.1.3",
+ "@angular/compiler": "7.1.0",
+ "@angular/compiler-cli": "7.1.0",
"@angular/language-service": "~7.1.0",
"@ionic/angular-toolkit": "1.2.0",
"@ionic/lab": "^1.0.0",
diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts
index 0b9bb3fdd..e59c938fd 100644
--- a/src/app/app-routing.module.ts
+++ b/src/app/app-routing.module.ts
@@ -1,6 +1,6 @@
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
-import { CheckTutorial } from './providers/check-tutorial.service';
+// import { CheckTutorial } from './providers/check-tutorial.service';
const routes: Routes = [
{
@@ -31,7 +31,7 @@ const routes: Routes = [
{
path: 'tutorial',
loadChildren: './pages/tutorial/tutorial.module#TutorialModule',
- canLoad: [CheckTutorial]
+ // canLoad: [CheckTutorial]
}
];
diff --git a/src/app/app.component.ts b/src/app/app.component.ts
index bb3ae64d1..eaf41a7db 100644
--- a/src/app/app.component.ts
+++ b/src/app/app.component.ts
@@ -17,22 +17,22 @@ export class AppComponent implements OnInit {
appPages = [
{
title: 'Schedule',
- url: '/app/tabs/schedule',
+ url: '/app/tabs/(schedule:schedule)',
icon: 'calendar'
},
{
title: 'Speakers',
- url: '/app/tabs/speakers',
+ url: '/app/tabs/(speakers:speakers)',
icon: 'contacts'
},
{
title: 'Map',
- url: '/app/tabs/map',
+ url: '/app/tabs/(map:map)',
icon: 'map'
},
{
title: 'About',
- url: '/app/tabs/about',
+ url: '/app/tabs/(about:about)',
icon: 'information-circle'
}
];
@@ -89,6 +89,10 @@ export class AppComponent implements OnInit {
});
}
+ navigate(url: string) {
+ return this.router.navigateByUrl(url);
+ }
+
logout() {
this.userData.logout().then(() => {
return this.openTutorial();
@@ -97,7 +101,7 @@ export class AppComponent implements OnInit {
openTutorial() {
this.menu.enable(false);
- this.storage.set('ion_did_tutorial', false);
+ this.storage.set('ion_did_tutorial', 'false');
this.router.navigateByUrl('/tutorial');
}
}
diff --git a/src/app/pages/about/about.ts b/src/app/pages/about/about.ts
index 5d2e3b301..3e5fb0363 100644
--- a/src/app/pages/about/about.ts
+++ b/src/app/pages/about/about.ts
@@ -8,6 +8,7 @@ import { PopoverPage } from '../about-popover/about-popover';
selector: 'page-about',
templateUrl: 'about.html',
styleUrls: ['./about.scss'],
+ encapsulation: ViewEncapsulation.None
})
export class AboutPage {
conferenceDate = '2047-05-17';
diff --git a/src/app/pages/account/account.ts b/src/app/pages/account/account.ts
index 48ce63db6..25cb408a1 100644
--- a/src/app/pages/account/account.ts
+++ b/src/app/pages/account/account.ts
@@ -9,6 +9,7 @@ import { User } from '../../models';
selector: 'page-account',
templateUrl: 'account.html',
styleUrls: ['./account.scss'],
+ encapsulation: ViewEncapsulation.None
})
export class AccountPage implements AfterViewInit {
users: User[];
diff --git a/src/app/pages/login/login.ts b/src/app/pages/login/login.ts
index 998e8b127..6f747691d 100644
--- a/src/app/pages/login/login.ts
+++ b/src/app/pages/login/login.ts
@@ -32,6 +32,7 @@ export class LoginPage implements OnInit {
if (user) {
if (user.password === this.password) {
this.userData.login(user);
+ // this.router.navigateByUrl('/app/tabs/schedule')
this.router.navigateByUrl('/app/tabs/(schedule:schedule)');
} else {
alert('Invalid password. Try again.');
diff --git a/src/app/pages/schedule-filter/schedule-filter.ts b/src/app/pages/schedule-filter/schedule-filter.ts
index db1904507..e2bc7692d 100644
--- a/src/app/pages/schedule-filter/schedule-filter.ts
+++ b/src/app/pages/schedule-filter/schedule-filter.ts
@@ -9,6 +9,7 @@ import { User } from '../../models';
selector: 'page-schedule-filter',
templateUrl: 'schedule-filter.html',
styleUrls: ['./schedule-filter.scss'],
+ encapsulation: ViewEncapsulation.None
})
export class ScheduleFilterPage implements AfterViewInit {
user: User;
diff --git a/src/app/pages/schedule/schedule.ts b/src/app/pages/schedule/schedule.ts
index 07ae93a13..d29b3f3f2 100644
--- a/src/app/pages/schedule/schedule.ts
+++ b/src/app/pages/schedule/schedule.ts
@@ -1,6 +1,6 @@
-import { Component, ViewChild, OnInit } from '@angular/core';
+import { Component, ViewChild, OnInit, ViewEncapsulation } from '@angular/core';
import { Router } from '@angular/router';
-import { AlertController, IonList, LoadingController, ModalController, ToastController } from '@ionic/angular';
+import { AlertController, List, LoadingController, ModalController, ToastController } from '@ionic/angular';
import { ScheduleFilterPage } from '../schedule-filter/schedule-filter';
import { ScheduleTrackPage } from '../schedule-track/schedule-track';
@@ -12,10 +12,11 @@ import { User, Session, PartOfDay } from '../../models';
selector: 'page-schedule',
templateUrl: 'schedule.html',
styleUrls: ['./schedule.scss'],
+ encapsulation: ViewEncapsulation.None
})
export class SchedulePage implements OnInit {
// Gets a reference to the list element
- @ViewChild('scheduleList') scheduleList: IonList;
+ @ViewChild('scheduleList') scheduleList: List;
user: User;
queryText = '';
@@ -184,7 +185,13 @@ export class SchedulePage implements OnInit {
}
}
- async addFavorite(slidingItem: HTMLIonItemSlidingElement, sessionData: any) {
+ goToSessionDetail(sessionData: any) {
+ // go to the session detail page
+ // and pass in the session data
+ this.router.navigateByUrl(`app/tabs/(schedule:session/${sessionData.id})`);
+ }
+
+async addFavorite(slidingItem: HTMLIonItemSlidingElement, sessionData: any) {
if (this.userProvider.hasFavorite(sessionData.name)) {
// woops, they already favorited it! What shall we do!?
// prompt them to remove it
diff --git a/src/app/pages/signup/signup.ts b/src/app/pages/signup/signup.ts
index 57ec3bb23..627623bc4 100644
--- a/src/app/pages/signup/signup.ts
+++ b/src/app/pages/signup/signup.ts
@@ -10,6 +10,7 @@ import { User, Track } from '../../models';
selector: 'page-signup',
templateUrl: 'signup.html',
styleUrls: ['./signup.scss'],
+ encapsulation: ViewEncapsulation.None
})
export class SignupPage implements OnInit {
users: User[];
diff --git a/src/app/pages/speaker-list/speaker-list.html b/src/app/pages/speaker-list/speaker-list.html
index 05cd974a4..6cc008fa4 100644
--- a/src/app/pages/speaker-list/speaker-list.html
+++ b/src/app/pages/speaker-list/speaker-list.html
@@ -14,7 +14,7 @@
-
+
@@ -24,11 +24,11 @@
-
+
{{session.name}}
-
+
About {{speaker.name}}
diff --git a/src/app/pages/speaker-list/speaker-list.ts b/src/app/pages/speaker-list/speaker-list.ts
index 876bf997f..ae6b943ec 100644
--- a/src/app/pages/speaker-list/speaker-list.ts
+++ b/src/app/pages/speaker-list/speaker-list.ts
@@ -10,6 +10,7 @@ import { SpeakerData } from '../../providers/speaker-data';
selector: 'page-speaker-list',
templateUrl: 'speaker-list.html',
styleUrls: ['./speaker-list.scss'],
+ encapsulation: ViewEncapsulation.None
})
export class SpeakerListPage {
speakers: Speaker[];
diff --git a/src/app/pages/support/support.ts b/src/app/pages/support/support.ts
index 35ac30d3c..d32db0846 100644
--- a/src/app/pages/support/support.ts
+++ b/src/app/pages/support/support.ts
@@ -10,6 +10,7 @@ import { SupportData } from '../../providers/support-data';
selector: 'page-support',
templateUrl: 'support.html',
styleUrls: ['./support.scss'],
+ encapsulation: ViewEncapsulation.None
})
export class SupportPage {
isLoggedIn = false;
@@ -42,26 +43,4 @@ export class SupportPage {
await toast.present();
}
}
-
- // If the user enters text in the support question and then navigates
- // without submitting first, ask if they meant to leave the page
- // async ionViewCanLeave(): Promise {
- // // If the support message is empty we should just navigate
- // if (!this.supportMessage || this.supportMessage.trim().length === 0) {
- // return true;
- // }
-
- // return new Promise((resolve: any, reject: any) => {
- // const alert = await this.alertCtrl.create({
- // title: 'Leave this page?',
- // message: 'Are you sure you want to leave this page? Your support message will not be submitted.',
- // buttons: [
- // { text: 'Stay', handler: reject },
- // { text: 'Leave', role: 'cancel', handler: resolve }
- // ]
- // });
-
- // await alert.present();
- // });
- // }
}
diff --git a/src/app/pages/tabs-page/tabs-page-routing.module.ts b/src/app/pages/tabs-page/tabs-page-routing.module.ts
index fa31409c5..6ebfeac42 100644
--- a/src/app/pages/tabs-page/tabs-page-routing.module.ts
+++ b/src/app/pages/tabs-page/tabs-page-routing.module.ts
@@ -1,7 +1,14 @@
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
+
import { TabsPage } from './tabs-page';
+
+import { AboutPage } from '../about/about';
+import { MapPage } from '../map/map';
import { SchedulePage } from '../schedule/schedule';
+import { SessionDetailPage } from '../session-detail/session-detail';
+import { SpeakerDetailPage } from '../speaker-detail/speaker-detail';
+import { SpeakerListPage } from '../speaker-list/speaker-list';
const routes: Routes = [
@@ -9,58 +16,44 @@ const routes: Routes = [
path: 'tabs',
component: TabsPage,
children: [
+ // tab one
{
path: 'schedule',
- children: [
- {
- path: '',
- component: SchedulePage,
- },
- {
- path: 'session/:sessionId',
- loadChildren: '../session-detail/session-detail.module#SessionDetailModule'
- }
- ]
+ component: SchedulePage,
+ outlet: 'schedule'
+ },
+ {
+ path: 'session/:sessionId',
+ component: SessionDetailPage,
+ outlet: 'schedule'
},
+ // tab two
{
path: 'speakers',
- children: [
- {
- path: '',
- loadChildren: '../speaker-list/speaker-list.module#SpeakerListModule'
- },
- {
- path: 'session/:sessionId',
- loadChildren: '../session-detail/session-detail.module#SessionDetailModule'
- },
- {
- path: 'speaker-details/:speakerId',
- loadChildren: '../speaker-detail/speaker-detail.module#SpeakerDetailModule'
- }
- ]
+ component: SpeakerListPage,
+ outlet: 'speakers'
},
{
- path: 'map',
- children: [
- {
- path: '',
- loadChildren: '../map/map.module#MapModule'
- }
- ]
+ path: 'session/:sessionId',
+ component: SessionDetailPage,
+ outlet: 'speakers'
},
{
- path: 'about',
- children: [
- {
- path: '',
- loadChildren: '../about/about.module#AboutModule'
- }
- ]
+ path: 'speaker-details/:speakerId',
+ component: SpeakerDetailPage,
+ outlet: 'speakers'
},
+ // tab three
{
- path: '',
- redirectTo: '/app/tabs/schedule',
- pathMatch: 'full'
+ path: 'map',
+ component: MapPage,
+ outlet: 'map'
+ },
+ // tab four
+ {
+ path: 'about',
+ component: AboutPage,
+ outlet: 'about'
}
]
}
@@ -71,4 +64,3 @@ const routes: Routes = [
exports: [RouterModule]
})
export class TabsPageRoutingModule { }
-
diff --git a/src/app/pages/tabs-page/tabs-page.html b/src/app/pages/tabs-page/tabs-page.html
index d7da8656e..70e29fbb2 100644
--- a/src/app/pages/tabs-page/tabs-page.html
+++ b/src/app/pages/tabs-page/tabs-page.html
@@ -1,25 +1,41 @@
-
+
Schedule
-
+
Speakers
-
+
Map
-
+
About
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/app/pages/tutorial/tutorial.ts b/src/app/pages/tutorial/tutorial.ts
index 79fc63ca3..9e6751bf7 100644
--- a/src/app/pages/tutorial/tutorial.ts
+++ b/src/app/pages/tutorial/tutorial.ts
@@ -1,7 +1,7 @@
import { Component, ViewChild, ViewEncapsulation } from '@angular/core';
import { Router } from '@angular/router';
-import { MenuController, IonSlides } from '@ionic/angular';
+import { MenuController, Slides } from '@ionic/angular';
import { Storage } from '@ionic/storage';
@@ -9,11 +9,12 @@ import { Storage } from '@ionic/storage';
selector: 'page-tutorial',
templateUrl: 'tutorial.html',
styleUrls: ['./tutorial.scss'],
+ encapsulation: ViewEncapsulation.None
})
export class TutorialPage {
showSkip = true;
- @ViewChild('slides') slides: IonSlides;
+ @ViewChild('slides') slides: Slides;
constructor(
public menu: MenuController,
@@ -23,7 +24,7 @@ export class TutorialPage {
startApp() {
this.router
- .navigateByUrl('/app/tabs/schedule')
+ .navigateByUrl('/app/tabs/(speakers:speakers)')
.then(() => this.storage.set('ion_did_tutorial', 'true'));
}
diff --git a/src/index.html b/src/index.html
index b6e26a29c..46281cc6b 100644
--- a/src/index.html
+++ b/src/index.html
@@ -29,7 +29,7 @@
-
+
Please enable JavaScript to continue using this application.