diff --git a/config.xml b/config.xml
index 7fba698..274250a 100644
--- a/config.xml
+++ b/config.xml
@@ -1,8 +1,8 @@
openSenseApp
- An awesome Ionic/Cordova app.
- Ionic Framework Team
+ Apps utilizing the openSenseMap and senseBox.
+ re:edu
@@ -82,4 +82,6 @@
+
+
diff --git a/package-lock.json b/package-lock.json
index e7886c3..09ef33c 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1079,6 +1079,901 @@
"resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
"integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40="
},
+ "cordova-android": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/cordova-android/-/cordova-android-7.1.1.tgz",
+ "integrity": "sha512-MAOwEMT3TuGjKw4McNzzYyHmxkWY3ozafbIgdMAvPzqSBVGIcn+H3SmWfaHtUXfmIPFliT171ICsSm6W5lZXEA==",
+ "requires": {
+ "abbrev": "1.1.1",
+ "android-versions": "1.3.0",
+ "ansi": "0.3.1",
+ "balanced-match": "1.0.0",
+ "base64-js": "1.2.0",
+ "big-integer": "1.6.32",
+ "bplist-parser": "0.1.1",
+ "brace-expansion": "1.1.11",
+ "concat-map": "0.0.1",
+ "cordova-common": "2.2.5",
+ "cordova-registry-mapper": "1.1.15",
+ "elementtree": "0.1.6",
+ "glob": "5.0.15",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "nopt": "3.0.1",
+ "once": "1.4.0",
+ "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": "1.9.1",
+ "unorm": "1.4.1",
+ "wrappy": "1.0.2",
+ "xmlbuilder": "8.2.2",
+ "xmldom": "0.1.27"
+ },
+ "dependencies": {
+ "abbrev": {
+ "version": "1.1.1",
+ "bundled": true
+ },
+ "android-versions": {
+ "version": "1.3.0",
+ "bundled": true,
+ "requires": {
+ "semver": "5.5.0"
+ }
+ },
+ "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.32"
+ }
+ },
+ "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.1",
+ "cordova-registry-mapper": "1.1.15",
+ "elementtree": "0.1.6",
+ "glob": "5.0.15",
+ "minimatch": "3.0.4",
+ "plist": "2.1.0",
+ "q": "1.4.1",
+ "shelljs": "0.5.3",
+ "underscore": "1.9.1",
+ "unorm": "1.4.1"
+ }
+ },
+ "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.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "bundled": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "bundled": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "bundled": true,
+ "requires": {
+ "brace-expansion": "1.1.11"
+ }
+ },
+ "nopt": {
+ "version": "3.0.1",
+ "bundled": true,
+ "requires": {
+ "abbrev": "1.1.1"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "bundled": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "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.27"
+ }
+ },
+ "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
+ }
+ }
+ },
+ "cordova-browser": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/cordova-browser/-/cordova-browser-5.0.4.tgz",
+ "integrity": "sha512-EDuG+9NGsaYpNSY6wF0kR34m1m38V+nRglGXxQ609fgMYrMHEYR2lg38nDr1Os4qeF0LJz8UQ7nq7Y+idg6Aig==",
+ "requires": {
+ "abbrev": "1.1.1",
+ "accepts": "1.3.5",
+ "ansi": "0.3.1",
+ "ansi-regex": "2.1.1",
+ "ansi-styles": "2.2.1",
+ "array-flatten": "1.1.1",
+ "balanced-match": "1.0.0",
+ "base64-js": "1.2.0",
+ "big-integer": "1.6.32",
+ "body-parser": "1.18.2",
+ "bplist-parser": "0.1.1",
+ "brace-expansion": "1.1.11",
+ "bytes": "3.0.0",
+ "chalk": "1.1.3",
+ "compressible": "2.0.14",
+ "compression": "1.7.2",
+ "concat-map": "0.0.1",
+ "content-disposition": "0.5.2",
+ "content-type": "1.0.4",
+ "cookie": "0.3.1",
+ "cookie-signature": "1.0.6",
+ "cordova-common": "2.2.5",
+ "cordova-registry-mapper": "1.1.15",
+ "cordova-serve": "2.0.1",
+ "debug": "2.6.9",
+ "depd": "1.1.2",
+ "destroy": "1.0.4",
+ "ee-first": "1.1.1",
+ "elementtree": "0.1.6",
+ "encodeurl": "1.0.2",
+ "escape-html": "1.0.3",
+ "escape-string-regexp": "1.0.5",
+ "etag": "1.8.1",
+ "express": "4.16.3",
+ "finalhandler": "1.1.1",
+ "forwarded": "0.1.2",
+ "fresh": "0.5.2",
+ "glob": "5.0.15",
+ "has-ansi": "2.0.0",
+ "http-errors": "1.6.3",
+ "iconv-lite": "0.4.19",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "ipaddr.js": "1.6.0",
+ "is-wsl": "1.1.0",
+ "media-typer": "0.3.0",
+ "merge-descriptors": "1.0.1",
+ "methods": "1.1.2",
+ "mime": "1.4.1",
+ "mime-db": "1.33.0",
+ "mime-types": "2.1.18",
+ "minimatch": "3.0.4",
+ "ms": "2.0.0",
+ "negotiator": "0.6.1",
+ "nopt": "3.0.6",
+ "on-finished": "2.3.0",
+ "on-headers": "1.0.1",
+ "once": "1.4.0",
+ "opn": "5.3.0",
+ "parseurl": "1.3.2",
+ "path-is-absolute": "1.0.1",
+ "path-to-regexp": "0.1.7",
+ "plist": "2.1.0",
+ "proxy-addr": "2.0.3",
+ "q": "1.5.1",
+ "qs": "6.5.1",
+ "range-parser": "1.2.0",
+ "raw-body": "2.3.2",
+ "safe-buffer": "5.1.1",
+ "sax": "0.3.5",
+ "send": "0.16.2",
+ "serve-static": "1.13.2",
+ "setprototypeof": "1.1.0",
+ "shelljs": "0.5.3",
+ "statuses": "1.4.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0",
+ "type-is": "1.6.16",
+ "underscore": "1.9.1",
+ "unorm": "1.4.1",
+ "unpipe": "1.0.0",
+ "utils-merge": "1.0.1",
+ "vary": "1.1.2",
+ "wrappy": "1.0.2",
+ "xmlbuilder": "8.2.2",
+ "xmldom": "0.1.27"
+ },
+ "dependencies": {
+ "abbrev": {
+ "version": "1.1.1",
+ "bundled": true
+ },
+ "accepts": {
+ "version": "1.3.5",
+ "bundled": true,
+ "requires": {
+ "mime-types": "2.1.18",
+ "negotiator": "0.6.1"
+ }
+ },
+ "ansi": {
+ "version": "0.3.1",
+ "bundled": true
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "bundled": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "bundled": true
+ },
+ "array-flatten": {
+ "version": "1.1.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
+ },
+ "body-parser": {
+ "version": "1.18.2",
+ "bundled": true,
+ "requires": {
+ "bytes": "3.0.0",
+ "content-type": "1.0.4",
+ "debug": "2.6.9",
+ "depd": "1.1.2",
+ "http-errors": "1.6.3",
+ "iconv-lite": "0.4.19",
+ "on-finished": "2.3.0",
+ "qs": "6.5.1",
+ "raw-body": "2.3.2",
+ "type-is": "1.6.16"
+ }
+ },
+ "bplist-parser": {
+ "version": "0.1.1",
+ "bundled": true,
+ "requires": {
+ "big-integer": "1.6.32"
+ }
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "bundled": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "bytes": {
+ "version": "3.0.0",
+ "bundled": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "bundled": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "compressible": {
+ "version": "2.0.14",
+ "bundled": true,
+ "requires": {
+ "mime-db": "1.34.0"
+ },
+ "dependencies": {
+ "mime-db": {
+ "version": "1.34.0",
+ "bundled": true
+ }
+ }
+ },
+ "compression": {
+ "version": "1.7.2",
+ "bundled": true,
+ "requires": {
+ "accepts": "1.3.5",
+ "bytes": "3.0.0",
+ "compressible": "2.0.14",
+ "debug": "2.6.9",
+ "on-headers": "1.0.1",
+ "safe-buffer": "5.1.1",
+ "vary": "1.1.2"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "bundled": true
+ },
+ "content-disposition": {
+ "version": "0.5.2",
+ "bundled": true
+ },
+ "content-type": {
+ "version": "1.0.4",
+ "bundled": true
+ },
+ "cookie": {
+ "version": "0.3.1",
+ "bundled": true
+ },
+ "cookie-signature": {
+ "version": "1.0.6",
+ "bundled": true
+ },
+ "cordova-common": {
+ "version": "2.2.5",
+ "bundled": true,
+ "requires": {
+ "ansi": "0.3.1",
+ "bplist-parser": "0.1.1",
+ "cordova-registry-mapper": "1.1.15",
+ "elementtree": "0.1.6",
+ "glob": "5.0.15",
+ "minimatch": "3.0.4",
+ "plist": "2.1.0",
+ "q": "1.5.1",
+ "shelljs": "0.5.3",
+ "underscore": "1.9.1",
+ "unorm": "1.4.1"
+ }
+ },
+ "cordova-registry-mapper": {
+ "version": "1.1.15",
+ "bundled": true
+ },
+ "cordova-serve": {
+ "version": "2.0.1",
+ "bundled": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "compression": "1.7.2",
+ "express": "4.16.3",
+ "opn": "5.3.0",
+ "shelljs": "0.5.3"
+ }
+ },
+ "debug": {
+ "version": "2.6.9",
+ "bundled": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "depd": {
+ "version": "1.1.2",
+ "bundled": true
+ },
+ "destroy": {
+ "version": "1.0.4",
+ "bundled": true
+ },
+ "ee-first": {
+ "version": "1.1.1",
+ "bundled": true
+ },
+ "elementtree": {
+ "version": "0.1.6",
+ "bundled": true,
+ "requires": {
+ "sax": "0.3.5"
+ }
+ },
+ "encodeurl": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "escape-html": {
+ "version": "1.0.3",
+ "bundled": true
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "bundled": true
+ },
+ "etag": {
+ "version": "1.8.1",
+ "bundled": true
+ },
+ "express": {
+ "version": "4.16.3",
+ "bundled": true,
+ "requires": {
+ "accepts": "1.3.5",
+ "array-flatten": "1.1.1",
+ "body-parser": "1.18.2",
+ "content-disposition": "0.5.2",
+ "content-type": "1.0.4",
+ "cookie": "0.3.1",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.9",
+ "depd": "1.1.2",
+ "encodeurl": "1.0.2",
+ "escape-html": "1.0.3",
+ "etag": "1.8.1",
+ "finalhandler": "1.1.1",
+ "fresh": "0.5.2",
+ "merge-descriptors": "1.0.1",
+ "methods": "1.1.2",
+ "on-finished": "2.3.0",
+ "parseurl": "1.3.2",
+ "path-to-regexp": "0.1.7",
+ "proxy-addr": "2.0.3",
+ "qs": "6.5.1",
+ "range-parser": "1.2.0",
+ "safe-buffer": "5.1.1",
+ "send": "0.16.2",
+ "serve-static": "1.13.2",
+ "setprototypeof": "1.1.0",
+ "statuses": "1.4.0",
+ "type-is": "1.6.16",
+ "utils-merge": "1.0.1",
+ "vary": "1.1.2"
+ }
+ },
+ "finalhandler": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "debug": "2.6.9",
+ "encodeurl": "1.0.2",
+ "escape-html": "1.0.3",
+ "on-finished": "2.3.0",
+ "parseurl": "1.3.2",
+ "statuses": "1.4.0",
+ "unpipe": "1.0.0"
+ }
+ },
+ "forwarded": {
+ "version": "0.1.2",
+ "bundled": true
+ },
+ "fresh": {
+ "version": "0.5.2",
+ "bundled": true
+ },
+ "glob": {
+ "version": "5.0.15",
+ "bundled": true,
+ "requires": {
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "bundled": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "http-errors": {
+ "version": "1.6.3",
+ "bundled": true,
+ "requires": {
+ "depd": "1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.0",
+ "statuses": "1.4.0"
+ }
+ },
+ "iconv-lite": {
+ "version": "0.4.19",
+ "bundled": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "bundled": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "bundled": true
+ },
+ "ipaddr.js": {
+ "version": "1.6.0",
+ "bundled": true
+ },
+ "is-wsl": {
+ "version": "1.1.0",
+ "bundled": true
+ },
+ "media-typer": {
+ "version": "0.3.0",
+ "bundled": true
+ },
+ "merge-descriptors": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "methods": {
+ "version": "1.1.2",
+ "bundled": true
+ },
+ "mime": {
+ "version": "1.4.1",
+ "bundled": true
+ },
+ "mime-db": {
+ "version": "1.33.0",
+ "bundled": true
+ },
+ "mime-types": {
+ "version": "2.1.18",
+ "bundled": true,
+ "requires": {
+ "mime-db": "1.33.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "bundled": true,
+ "requires": {
+ "brace-expansion": "1.1.11"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "negotiator": {
+ "version": "0.6.1",
+ "bundled": true
+ },
+ "nopt": {
+ "version": "3.0.6",
+ "bundled": true,
+ "requires": {
+ "abbrev": "1.1.1"
+ }
+ },
+ "on-finished": {
+ "version": "2.3.0",
+ "bundled": true,
+ "requires": {
+ "ee-first": "1.1.1"
+ }
+ },
+ "on-headers": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "bundled": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "opn": {
+ "version": "5.3.0",
+ "bundled": true,
+ "requires": {
+ "is-wsl": "1.1.0"
+ }
+ },
+ "parseurl": {
+ "version": "1.3.2",
+ "bundled": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "path-to-regexp": {
+ "version": "0.1.7",
+ "bundled": true
+ },
+ "plist": {
+ "version": "2.1.0",
+ "bundled": true,
+ "requires": {
+ "base64-js": "1.2.0",
+ "xmlbuilder": "8.2.2",
+ "xmldom": "0.1.27"
+ }
+ },
+ "proxy-addr": {
+ "version": "2.0.3",
+ "bundled": true,
+ "requires": {
+ "forwarded": "0.1.2",
+ "ipaddr.js": "1.6.0"
+ }
+ },
+ "q": {
+ "version": "1.5.1",
+ "bundled": true
+ },
+ "qs": {
+ "version": "6.5.1",
+ "bundled": true
+ },
+ "range-parser": {
+ "version": "1.2.0",
+ "bundled": true
+ },
+ "raw-body": {
+ "version": "2.3.2",
+ "bundled": true,
+ "requires": {
+ "bytes": "3.0.0",
+ "http-errors": "1.6.2",
+ "iconv-lite": "0.4.19",
+ "unpipe": "1.0.0"
+ },
+ "dependencies": {
+ "depd": {
+ "version": "1.1.1",
+ "bundled": true
+ },
+ "http-errors": {
+ "version": "1.6.2",
+ "bundled": true,
+ "requires": {
+ "depd": "1.1.1",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.0.3",
+ "statuses": "1.4.0"
+ }
+ },
+ "setprototypeof": {
+ "version": "1.0.3",
+ "bundled": true
+ }
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.1",
+ "bundled": true
+ },
+ "sax": {
+ "version": "0.3.5",
+ "bundled": true
+ },
+ "send": {
+ "version": "0.16.2",
+ "bundled": true,
+ "requires": {
+ "debug": "2.6.9",
+ "depd": "1.1.2",
+ "destroy": "1.0.4",
+ "encodeurl": "1.0.2",
+ "escape-html": "1.0.3",
+ "etag": "1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "1.6.3",
+ "mime": "1.4.1",
+ "ms": "2.0.0",
+ "on-finished": "2.3.0",
+ "range-parser": "1.2.0",
+ "statuses": "1.4.0"
+ }
+ },
+ "serve-static": {
+ "version": "1.13.2",
+ "bundled": true,
+ "requires": {
+ "encodeurl": "1.0.2",
+ "escape-html": "1.0.3",
+ "parseurl": "1.3.2",
+ "send": "0.16.2"
+ }
+ },
+ "setprototypeof": {
+ "version": "1.1.0",
+ "bundled": true
+ },
+ "shelljs": {
+ "version": "0.5.3",
+ "bundled": true
+ },
+ "statuses": {
+ "version": "1.4.0",
+ "bundled": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "bundled": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "type-is": {
+ "version": "1.6.16",
+ "bundled": true,
+ "requires": {
+ "media-typer": "0.3.0",
+ "mime-types": "2.1.18"
+ }
+ },
+ "underscore": {
+ "version": "1.9.1",
+ "bundled": true
+ },
+ "unorm": {
+ "version": "1.4.1",
+ "bundled": true
+ },
+ "unpipe": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "utils-merge": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "vary": {
+ "version": "1.1.2",
+ "bundled": true
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "xmlbuilder": {
+ "version": "8.2.2",
+ "bundled": true
+ },
+ "xmldom": {
+ "version": "0.1.27",
+ "bundled": true
+ }
+ }
+ },
+ "cordova-plugin-device": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/cordova-plugin-device/-/cordova-plugin-device-2.0.2.tgz",
+ "integrity": "sha1-/Ajzci5n7ve2xnv8mag99q3Quro="
+ },
+ "cordova-plugin-ionic-keyboard": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/cordova-plugin-ionic-keyboard/-/cordova-plugin-ionic-keyboard-2.1.3.tgz",
+ "integrity": "sha512-6ucQ6FdlLdBm8kJfFnzozmBTjru/0xekHP/dAhjoCZggkGRlgs8TsUJFkxa/bV+qi7Dlo50JjmpE4UMWAO+aOQ=="
+ },
+ "cordova-plugin-ionic-webview": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/cordova-plugin-ionic-webview/-/cordova-plugin-ionic-webview-2.2.0.tgz",
+ "integrity": "sha512-mNTJaIRsz83Vntk2d3jrPCnlqEPQsfOJW6U2AzS7WV1T15Jj/STdXI/Uv1vIyvPVd9h1OLF+yu64ZsmQH2VRMQ=="
+ },
+ "cordova-plugin-splashscreen": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/cordova-plugin-splashscreen/-/cordova-plugin-splashscreen-5.0.2.tgz",
+ "integrity": "sha1-dH509W4gHNWFvGLRS8oZ9oZ/8e0="
+ },
+ "cordova-plugin-statusbar": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/cordova-plugin-statusbar/-/cordova-plugin-statusbar-2.4.2.tgz",
+ "integrity": "sha1-/B+9wNjXAzp+jh8ff/FnrJvU+vY="
+ },
+ "cordova-plugin-whitelist": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/cordova-plugin-whitelist/-/cordova-plugin-whitelist-1.3.3.tgz",
+ "integrity": "sha1-tehezbv+Wu3tQKG/TuI3LmfZb7Q="
+ },
"core-util-is": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
diff --git a/package.json b/package.json
index bd884e4..cba779a 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
{
"name": "openSenseApp",
"version": "0.0.1",
- "author": "Ionic Framework",
- "homepage": "http://ionicframework.com/",
+ "author": "Reedu GmbH",
+ "homepage": "https://reedu.de/",
"private": true,
"scripts": {
"start": "ionic-app-scripts serve",
@@ -24,6 +24,14 @@
"@ionic-native/splash-screen": "~4.15.0",
"@ionic-native/status-bar": "~4.15.0",
"@ionic/storage": "2.2.0",
+ "cordova-android": "7.1.1",
+ "cordova-browser": "5.0.4",
+ "cordova-plugin-device": "^2.0.2",
+ "cordova-plugin-ionic-keyboard": "^2.1.3",
+ "cordova-plugin-ionic-webview": "^2.2.0",
+ "cordova-plugin-splashscreen": "^5.0.2",
+ "cordova-plugin-statusbar": "^2.4.2",
+ "cordova-plugin-whitelist": "^1.3.3",
"ionic-angular": "3.9.2",
"ionicons": "3.0.0",
"rxjs": "5.5.11",
@@ -34,5 +42,21 @@
"@ionic/app-scripts": "3.2.0",
"typescript": "~2.6.2"
},
- "description": "An Ionic project"
-}
+ "description": "OpenSenseApps by IfGI 2018 App-Dev course.",
+ "cordova": {
+ "plugins": {
+ "cordova-plugin-whitelist": {},
+ "cordova-plugin-statusbar": {},
+ "cordova-plugin-device": {},
+ "cordova-plugin-splashscreen": {},
+ "cordova-plugin-ionic-webview": {
+ "ANDROID_SUPPORT_ANNOTATIONS_VERSION": "27.+"
+ },
+ "cordova-plugin-ionic-keyboard": {}
+ },
+ "platforms": [
+ "android",
+ "browser"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/resources/android/icon/drawable-hdpi-icon.png b/resources/android/icon/drawable-hdpi-icon.png
index b910093..34f8091 100644
Binary files a/resources/android/icon/drawable-hdpi-icon.png and b/resources/android/icon/drawable-hdpi-icon.png differ
diff --git a/resources/android/icon/drawable-ldpi-icon.png b/resources/android/icon/drawable-ldpi-icon.png
index 16cd5db..ec18d06 100644
Binary files a/resources/android/icon/drawable-ldpi-icon.png and b/resources/android/icon/drawable-ldpi-icon.png differ
diff --git a/resources/android/icon/drawable-mdpi-icon.png b/resources/android/icon/drawable-mdpi-icon.png
index 64a6cbc..615f2ce 100644
Binary files a/resources/android/icon/drawable-mdpi-icon.png and b/resources/android/icon/drawable-mdpi-icon.png differ
diff --git a/resources/android/icon/drawable-xhdpi-icon.png b/resources/android/icon/drawable-xhdpi-icon.png
index 1605f69..8454027 100644
Binary files a/resources/android/icon/drawable-xhdpi-icon.png and b/resources/android/icon/drawable-xhdpi-icon.png differ
diff --git a/resources/android/icon/drawable-xxhdpi-icon.png b/resources/android/icon/drawable-xxhdpi-icon.png
index 56fb29e..595df67 100644
Binary files a/resources/android/icon/drawable-xxhdpi-icon.png and b/resources/android/icon/drawable-xxhdpi-icon.png differ
diff --git a/resources/android/icon/drawable-xxxhdpi-icon.png b/resources/android/icon/drawable-xxxhdpi-icon.png
index e4a9152..86a5d3f 100644
Binary files a/resources/android/icon/drawable-xxxhdpi-icon.png and b/resources/android/icon/drawable-xxxhdpi-icon.png differ
diff --git a/resources/android/splash/drawable-land-hdpi-screen.png b/resources/android/splash/drawable-land-hdpi-screen.png
index 66b12fe..0a7468d 100644
Binary files a/resources/android/splash/drawable-land-hdpi-screen.png and b/resources/android/splash/drawable-land-hdpi-screen.png differ
diff --git a/resources/android/splash/drawable-land-ldpi-screen.png b/resources/android/splash/drawable-land-ldpi-screen.png
index 7dceec7..fe64d92 100644
Binary files a/resources/android/splash/drawable-land-ldpi-screen.png and b/resources/android/splash/drawable-land-ldpi-screen.png differ
diff --git a/resources/android/splash/drawable-land-mdpi-screen.png b/resources/android/splash/drawable-land-mdpi-screen.png
index 0dc2ba7..96e81eb 100644
Binary files a/resources/android/splash/drawable-land-mdpi-screen.png and b/resources/android/splash/drawable-land-mdpi-screen.png differ
diff --git a/resources/android/splash/drawable-land-xhdpi-screen.png b/resources/android/splash/drawable-land-xhdpi-screen.png
index 39ae00c..d50ebf6 100644
Binary files a/resources/android/splash/drawable-land-xhdpi-screen.png and b/resources/android/splash/drawable-land-xhdpi-screen.png differ
diff --git a/resources/android/splash/drawable-land-xxhdpi-screen.png b/resources/android/splash/drawable-land-xxhdpi-screen.png
index 3f591b1..15c6584 100644
Binary files a/resources/android/splash/drawable-land-xxhdpi-screen.png and b/resources/android/splash/drawable-land-xxhdpi-screen.png differ
diff --git a/resources/android/splash/drawable-land-xxxhdpi-screen.png b/resources/android/splash/drawable-land-xxxhdpi-screen.png
index 253e6f1..bd04209 100644
Binary files a/resources/android/splash/drawable-land-xxxhdpi-screen.png and b/resources/android/splash/drawable-land-xxxhdpi-screen.png differ
diff --git a/resources/android/splash/drawable-port-hdpi-screen.png b/resources/android/splash/drawable-port-hdpi-screen.png
index e0dbb62..73efa7f 100644
Binary files a/resources/android/splash/drawable-port-hdpi-screen.png and b/resources/android/splash/drawable-port-hdpi-screen.png differ
diff --git a/resources/android/splash/drawable-port-ldpi-screen.png b/resources/android/splash/drawable-port-ldpi-screen.png
index 8e93c2d..652b453 100644
Binary files a/resources/android/splash/drawable-port-ldpi-screen.png and b/resources/android/splash/drawable-port-ldpi-screen.png differ
diff --git a/resources/android/splash/drawable-port-mdpi-screen.png b/resources/android/splash/drawable-port-mdpi-screen.png
index 0aaad62..0019c27 100644
Binary files a/resources/android/splash/drawable-port-mdpi-screen.png and b/resources/android/splash/drawable-port-mdpi-screen.png differ
diff --git a/resources/android/splash/drawable-port-xhdpi-screen.png b/resources/android/splash/drawable-port-xhdpi-screen.png
index 64c27f8..5f091fc 100644
Binary files a/resources/android/splash/drawable-port-xhdpi-screen.png and b/resources/android/splash/drawable-port-xhdpi-screen.png differ
diff --git a/resources/android/splash/drawable-port-xxhdpi-screen.png b/resources/android/splash/drawable-port-xxhdpi-screen.png
index f605e6a..d98419f 100644
Binary files a/resources/android/splash/drawable-port-xxhdpi-screen.png and b/resources/android/splash/drawable-port-xxhdpi-screen.png differ
diff --git a/resources/android/splash/drawable-port-xxxhdpi-screen.png b/resources/android/splash/drawable-port-xxxhdpi-screen.png
index 2b993cf..9d26848 100644
Binary files a/resources/android/splash/drawable-port-xxxhdpi-screen.png and b/resources/android/splash/drawable-port-xxxhdpi-screen.png differ
diff --git a/resources/icon.png b/resources/icon.png
index bee7766..843b316 100644
Binary files a/resources/icon.png and b/resources/icon.png differ
diff --git a/resources/icon.png.md5 b/resources/icon.png.md5
new file mode 100644
index 0000000..6242785
--- /dev/null
+++ b/resources/icon.png.md5
@@ -0,0 +1 @@
+41e1c536c5dfb47db1311f7335b357b3
\ No newline at end of file
diff --git a/resources/icon2.png b/resources/icon2.png
new file mode 100644
index 0000000..bee7766
Binary files /dev/null and b/resources/icon2.png differ
diff --git a/resources/splash.png b/resources/splash.png
index 960cb82..746e432 100644
Binary files a/resources/splash.png and b/resources/splash.png differ
diff --git a/resources/splash.png.md5 b/resources/splash.png.md5
new file mode 100644
index 0000000..f888ffa
--- /dev/null
+++ b/resources/splash.png.md5
@@ -0,0 +1 @@
+287a089b0cd0ff44dfda2fd7bd7ad812
\ No newline at end of file
diff --git a/resources/splash2.png b/resources/splash2.png
new file mode 100644
index 0000000..960cb82
Binary files /dev/null and b/resources/splash2.png differ
diff --git a/src/app/app.component.ts b/src/app/app.component.ts
index ab78376..e94fb1b 100644
--- a/src/app/app.component.ts
+++ b/src/app/app.component.ts
@@ -1,5 +1,5 @@
-import { Component } from '@angular/core';
-import { Platform } from 'ionic-angular';
+import { Component, ViewChild } from '@angular/core';
+import { Nav, Platform } from 'ionic-angular';
import { StatusBar } from '@ionic-native/status-bar';
import { SplashScreen } from '@ionic-native/splash-screen';
@@ -7,10 +7,21 @@ import { HomePage } from '../pages/home/home';
@Component({
templateUrl: 'app.html'
})
-export class MyApp {
+export class openSenseApp {
+
+ @ViewChild(Nav) nav: Nav;
+
rootPage:any = HomePage;
+ pages: Array<{title: string, component: any}> = [
+ { title: 'Home', component: HomePage },
+ { title: 'About', component: 'AboutPage' },
+ { title: 'senseBox', component: 'SenseBoxPage' }
+ ];
+
constructor(platform: Platform, statusBar: StatusBar, splashScreen: SplashScreen) {
+
+
platform.ready().then(() => {
// Okay, so the platform is ready and our plugins are available.
// Here you can do any higher level native things you might need.
@@ -18,5 +29,11 @@ export class MyApp {
splashScreen.hide();
});
}
+
+ openPage(page) {
+ // Reset the content nav to have just this page
+ // we wouldn't want the back button to show in this scenario
+ this.nav.setRoot(page.component);
+ }
}
diff --git a/src/app/app.html b/src/app/app.html
index 7b88c96..d1a04fd 100644
--- a/src/app/app.html
+++ b/src/app/app.html
@@ -1 +1,20 @@
-
+
+
+
+ Menu
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/app/app.module.ts b/src/app/app.module.ts
index 13bde06..de3d9a5 100644
--- a/src/app/app.module.ts
+++ b/src/app/app.module.ts
@@ -4,27 +4,31 @@ import { IonicApp, IonicErrorHandler, IonicModule } from 'ionic-angular';
import { SplashScreen } from '@ionic-native/splash-screen';
import { StatusBar } from '@ionic-native/status-bar';
-import { MyApp } from './app.component';
+import { openSenseApp } from './app.component';
import { HomePage } from '../pages/home/home';
+import { ApiProvider } from '../providers/api/api';
+import { HttpClientModule } from '@angular/common/http';
@NgModule({
declarations: [
- MyApp,
- HomePage
+ openSenseApp,
+ HomePage,
],
imports: [
+ HttpClientModule,
BrowserModule,
- IonicModule.forRoot(MyApp)
+ IonicModule.forRoot(openSenseApp)
],
bootstrap: [IonicApp],
entryComponents: [
- MyApp,
+ openSenseApp,
HomePage
],
providers: [
StatusBar,
SplashScreen,
- {provide: ErrorHandler, useClass: IonicErrorHandler}
+ {provide: ErrorHandler, useClass: IonicErrorHandler},
+ ApiProvider
]
})
export class AppModule {}
diff --git a/src/app/app.scss b/src/app/app.scss
index 1392a6e..336ebd2 100644
--- a/src/app/app.scss
+++ b/src/app/app.scss
@@ -14,3 +14,16 @@
// To declare rules for a specific mode, create a child rule
// for the .md, .ios, or .wp mode classes. The mode class is
// automatically applied to the
element in the app.
+
+
+.toolbar {
+ .toolbar-title {
+ color: white;
+ }
+ .button-inner {
+ color: white;
+ }
+ .toolbar-background {
+ background: map-get($colors, primary);
+ }
+}
\ No newline at end of file
diff --git a/src/assets/icon/favicon.ico b/src/assets/icon/favicon.ico
deleted file mode 100644
index d76fa29..0000000
Binary files a/src/assets/icon/favicon.ico and /dev/null differ
diff --git a/src/assets/icon/favicon.png b/src/assets/icon/favicon.png
new file mode 100644
index 0000000..5dc7b7b
Binary files /dev/null and b/src/assets/icon/favicon.png differ
diff --git a/src/assets/imgs/logo.png b/src/assets/imgs/logo.png
index 80f631d..843b316 100644
Binary files a/src/assets/imgs/logo.png and b/src/assets/imgs/logo.png differ
diff --git a/src/assets/imgs/sensebox_wort_und_logo_no_bg.svg b/src/assets/imgs/sensebox_wort_und_logo_no_bg.svg
new file mode 100644
index 0000000..ca0aa18
--- /dev/null
+++ b/src/assets/imgs/sensebox_wort_und_logo_no_bg.svg
@@ -0,0 +1,23 @@
+
+
+
diff --git a/src/index.html b/src/index.html
index e254871..212d7bd 100644
--- a/src/index.html
+++ b/src/index.html
@@ -2,12 +2,12 @@
- Ionic App
+ openSenseApp
-
+
diff --git a/src/manifest.json b/src/manifest.json
index f6456bb..f1d873c 100644
--- a/src/manifest.json
+++ b/src/manifest.json
@@ -1,11 +1,11 @@
{
- "name": "Ionic",
- "short_name": "Ionic",
+ "name": "openSenseApp",
+ "short_name": "openSenseApp",
"start_url": "index.html",
"display": "standalone",
"icons": [{
"src": "assets/imgs/logo.png",
- "sizes": "512x512",
+ "sizes": "377x376",
"type": "image/png"
}],
"background_color": "#4e8ef7",
diff --git a/src/pages/about/about.html b/src/pages/about/about.html
new file mode 100644
index 0000000..ceda3e1
--- /dev/null
+++ b/src/pages/about/about.html
@@ -0,0 +1,27 @@
+
+
+
+
+ About
+
+
+
+
+
+
+ These apps were made at IfGI 2018.
+
+
+
+ - Institut für Geoinformatik
+ - Heisenbergstr. 2
+ - 48149 Münster
+
+
diff --git a/src/pages/about/about.module.ts b/src/pages/about/about.module.ts
new file mode 100644
index 0000000..f180630
--- /dev/null
+++ b/src/pages/about/about.module.ts
@@ -0,0 +1,13 @@
+import { NgModule } from '@angular/core';
+import { IonicPageModule } from 'ionic-angular';
+import { AboutPage } from './about';
+
+@NgModule({
+ declarations: [
+ AboutPage,
+ ],
+ imports: [
+ IonicPageModule.forChild(AboutPage),
+ ],
+})
+export class AboutPageModule {}
diff --git a/src/pages/about/about.scss b/src/pages/about/about.scss
new file mode 100644
index 0000000..55fe91c
--- /dev/null
+++ b/src/pages/about/about.scss
@@ -0,0 +1,9 @@
+page-about p{
+ color: map-get($colors, primary);
+}
+
+ul {
+ margin-top: 2.2em;
+ list-style: none;
+ padding: 0;
+}
\ No newline at end of file
diff --git a/src/pages/about/about.ts b/src/pages/about/about.ts
new file mode 100644
index 0000000..6ff96d5
--- /dev/null
+++ b/src/pages/about/about.ts
@@ -0,0 +1,25 @@
+import { Component } from '@angular/core';
+import { IonicPage, NavController, NavParams } from 'ionic-angular';
+
+/**
+ * Generated class for the AboutPage page.
+ *
+ * See https://ionicframework.com/docs/components/#navigation for more info on
+ * Ionic pages and navigation.
+ */
+
+@IonicPage()
+@Component({
+ selector: 'page-about',
+ templateUrl: 'about.html',
+})
+export class AboutPage {
+
+ constructor(public navCtrl: NavController, public navParams: NavParams) {
+ }
+
+ ionViewDidLoad() {
+ console.log('ionViewDidLoad AboutPage');
+ }
+
+}
diff --git a/src/pages/home/home.html b/src/pages/home/home.html
index bbe6e77..2a4ef44 100644
--- a/src/pages/home/home.html
+++ b/src/pages/home/home.html
@@ -1,14 +1,13 @@
-
-
- Ionic Blank
-
-
-
+
+
+ Home
+
+
- The world is your oyster.
-
- If you get lost, the docs will be your guide.
-
+ Its all about sensors.
+ Create new pages for your project und link them in the menu please.
diff --git a/src/pages/sense-box/sense-box.html b/src/pages/sense-box/sense-box.html
new file mode 100644
index 0000000..f226491
--- /dev/null
+++ b/src/pages/sense-box/sense-box.html
@@ -0,0 +1,35 @@
+
+
+
+
+ senseBox
+
+
+
+
+
+
+
+
+
+
+
+
{{boxData.name}}
+
+
+
{{sensor.title}}
+
{{sensor.lastMeasurement.value}} {{sensor.unit}}
+
+
+
+
+
diff --git a/src/pages/sense-box/sense-box.module.ts b/src/pages/sense-box/sense-box.module.ts
new file mode 100644
index 0000000..0926410
--- /dev/null
+++ b/src/pages/sense-box/sense-box.module.ts
@@ -0,0 +1,13 @@
+import { NgModule } from '@angular/core';
+import { IonicPageModule } from 'ionic-angular';
+import { SenseBoxPage } from './sense-box';
+
+@NgModule({
+ declarations: [
+ SenseBoxPage,
+ ],
+ imports: [
+ IonicPageModule.forChild(SenseBoxPage),
+ ],
+})
+export class SenseBoxPageModule {}
diff --git a/src/pages/sense-box/sense-box.scss b/src/pages/sense-box/sense-box.scss
new file mode 100644
index 0000000..d9bc03a
--- /dev/null
+++ b/src/pages/sense-box/sense-box.scss
@@ -0,0 +1,3 @@
+page-sense-box {
+
+}
diff --git a/src/pages/sense-box/sense-box.ts b/src/pages/sense-box/sense-box.ts
new file mode 100644
index 0000000..405d5f9
--- /dev/null
+++ b/src/pages/sense-box/sense-box.ts
@@ -0,0 +1,36 @@
+import { ApiProvider } from './../../providers/api/api';
+import { Component } from '@angular/core';
+import { IonicPage, NavController, NavParams } from 'ionic-angular';
+
+/**
+ * Generated class for the SenseBoxPage page.
+ *
+ * See https://ionicframework.com/docs/components/#navigation for more info on
+ * Ionic pages and navigation.
+ */
+
+@IonicPage()
+@Component({
+ selector: 'page-sense-box',
+ templateUrl: 'sense-box.html',
+})
+export class SenseBoxPage {
+
+ boxData: any;
+
+ constructor(public navCtrl: NavController, public navParams: NavParams, private api: ApiProvider) {
+ }
+
+ ionViewDidLoad() {
+ console.log('ionViewDidLoad SenseBoxPage');
+ }
+
+ getData(){
+ this.api.getData().subscribe(res => {
+ console.log(res);
+ this.boxData = res;
+ })
+
+ }
+
+}
diff --git a/src/providers/api/api.ts b/src/providers/api/api.ts
new file mode 100644
index 0000000..2fe8bda
--- /dev/null
+++ b/src/providers/api/api.ts
@@ -0,0 +1,24 @@
+import { HttpClient } from '@angular/common/http';
+import { Injectable } from '@angular/core';
+
+/*
+ Generated class for the ApiProvider provider.
+
+ See https://angular.io/guide/dependency-injection for more info on providers
+ and Angular DI.
+*/
+@Injectable()
+export class ApiProvider {
+
+ private API_URL = 'https://api.testing.opensensemap.org'
+
+ constructor(public http: HttpClient) {
+ console.log('Hello ApiProvider Provider');
+ }
+
+
+ getData(){
+ return this.http.get(`${this.API_URL}/boxes/5b0d436fd40a290019ef444d`);
+ }
+
+}
diff --git a/src/theme/variables.scss b/src/theme/variables.scss
index 18276a4..492d52d 100644
--- a/src/theme/variables.scss
+++ b/src/theme/variables.scss
@@ -33,15 +33,19 @@ $app-direction: ltr;
// colors so you can add, rename and remove colors as needed.
// The "primary" color is the only required color in the map.
+
+
$colors: (
- primary: #488aff,
- secondary: #32db64,
+ primary: #4EAF47,
+ secondary: #45beed,
+ yellow: #fff200,
danger: #f53d3d,
light: #f4f4f4,
dark: #222
);
+
// App iOS Variables
// --------------------------------------------------
// iOS only Sass variables can go here
diff --git a/typings/cordova-typings.d.ts b/typings/cordova-typings.d.ts
new file mode 100644
index 0000000..108537a
--- /dev/null
+++ b/typings/cordova-typings.d.ts
@@ -0,0 +1,3 @@
+
+///
+///
\ No newline at end of file