From 4474503e9751b05d36dc7a601c48216482a33df5 Mon Sep 17 00:00:00 2001 From: lone-cloud Date: Sun, 14 May 2017 00:39:18 -0700 Subject: [PATCH] huegasm chrome promo, bug fixes --- .../components/bridge-finder/component.js | 13 +- .../components/bridge-finder/template.hbs | 63 +-- .../pods/components/lights-tab/component.js | 4 +- mobile/bower.json | 2 +- mobile/ember-cordova/cordova/config.xml | 2 +- mobile/package.json | 6 +- mobile/yarn.lock | 386 +++++++++++------- .../components/bridge-finder/component.js | 13 +- .../components/bridge-finder/template.hbs | 62 +-- .../pods/components/hue-controls/component.js | 87 ++-- .../pods/components/hue-controls/template.hbs | 30 ++ .../pods/components/lights-tab/component.js | 4 +- .../add-soundcloud-sound-modal/component.js | 19 +- .../pods/components/music-tab/component.js | 1 - web/app/styles/hue-controls.scss | 11 + web/package.json | 6 +- web/public/assets/images/promo.png | Bin 0 -> 35686 bytes web/yarn.lock | 230 +++++++---- 18 files changed, 580 insertions(+), 359 deletions(-) create mode 100644 web/public/assets/images/promo.png diff --git a/mobile/app/pods/components/bridge-finder/component.js b/mobile/app/pods/components/bridge-finder/component.js index 17646a1..9c6e7ac 100644 --- a/mobile/app/pods/components/bridge-finder/component.js +++ b/mobile/app/pods/components/bridge-finder/component.js @@ -7,7 +7,8 @@ const { on, isNone, run: { later }, - $ + $, + String: { htmlSafe } } = Ember; export default Component.extend({ @@ -24,7 +25,6 @@ export default Component.extend({ bridgeUsernamePingIntervalTime: 1500, bridgeUserNamePingIntervalProgress: 0, bridgePingIntervalHandle: null, - bridgeAuthenticateReachedStatus: null, manualBridgeIp: null, manualBridgeIpNotFound: false, multipleBridgeIps: [], @@ -101,14 +101,19 @@ export default Component.extend({ type: 'POST' }).done((result, status) => { if (!this.isDestroyed) { - this.set('bridgeAuthenticateReachedStatus', status); - if (status === 'success' && !result[0].error) { this.clearBridgePingIntervalHandle(); this.get('storage').set('huegasm.bridgeUsername', result[0].success.username); this.set('bridgeUsername', result[0].success.username); } } + }).fail(() => { + this.clearBridgePingIntervalHandle(); + this.setProperties({ + bridgeConnectError: true, + bridgeConnectMessage: htmlSafe('Your network and/or system security settings are preventing Huegasm from connecting to your Hue bridge.' + + '
Feel free to contact us at huegasm.app@gmail.com if this is unexpected and you need help debugging the problem.') + }) }); this.incrementProperty('bridgeUserNamePingIntervalProgress', this.get('bridgeUsernamePingIntervalTime') / bridgeUsernamePingMaxTime * 100); diff --git a/mobile/app/pods/components/bridge-finder/template.hbs b/mobile/app/pods/components/bridge-finder/template.hbs index dfd68d9..22f4760 100644 --- a/mobile/app/pods/components/bridge-finder/template.hbs +++ b/mobile/app/pods/components/bridge-finder/template.hbs @@ -1,39 +1,46 @@ {{#unless bridgeUsername}} {{#if bridgeIp}} - - - - - - - - + {{#unless bridgeConnectError}} + + + + + + + + + + {{paper-progress-linear warn=true value=bridgeUserNamePingIntervalProgress}} + {{/unless}} - {{paper-progress-linear warn=true value=bridgeUserNamePingIntervalProgress}}

{{#if isAuthenticating}} Your bridge IP is {{bridgeIp}}
Press the button on your bridge to authenticate Huegasm. {{else}} - You failed to press the button in time. RETRY + {{#if bridgeConnectError}} + {{bridgeConnectMessage}} + {{else}} +

You failed to press the button in time. RETRY

+ {{/if}} {{/if}}

{{else}} diff --git a/mobile/app/pods/components/lights-tab/component.js b/mobile/app/pods/components/lights-tab/component.js index 22c9db8..d9beaec 100644 --- a/mobile/app/pods/components/lights-tab/component.js +++ b/mobile/app/pods/components/lights-tab/component.js @@ -29,7 +29,7 @@ export default Component.extend({ }), // determines the average brightness of the hue system for the brightness slider - lightsBrightness: computed('lightsData', function () { + lightsBrightness: computed('lightsData', 'activeLights.[]', function () { let lightsData = this.get('lightsData'), activeLights = this.get('activeLights'), lightsBrightness = 0; @@ -108,7 +108,7 @@ export default Component.extend({ $('.color').css('background', 'rgb(' + 255 + ',' + 255 + ',' + 255 + ')'); } })), - + // determines whether the lights are on/off for the lights switch lightsOnChange: on('init', observer('lightsData.@each.state.on', 'activeLights.[]', function () { if (!this.get('strobeOn')) { diff --git a/mobile/bower.json b/mobile/bower.json index 3b5e4ee..62e171c 100644 --- a/mobile/bower.json +++ b/mobile/bower.json @@ -8,6 +8,6 @@ "locallyjs": "^0.3.2", "matchMedia": "^0.3.0", "velocity": "^1.3.1", - "perfect-scrollbar": "^0.6.15" + "perfect-scrollbar": "^0.7.0" } } diff --git a/mobile/ember-cordova/cordova/config.xml b/mobile/ember-cordova/cordova/config.xml index 1d52f22..0b65184 100644 --- a/mobile/ember-cordova/cordova/config.xml +++ b/mobile/ember-cordova/cordova/config.xml @@ -1,5 +1,5 @@ - + Huegasm diff --git a/mobile/package.json b/mobile/package.json index 0a2441f..6656977 100644 --- a/mobile/package.json +++ b/mobile/package.json @@ -22,8 +22,8 @@ "ember-cli": "^2.11.0", "ember-cli-app-version": "^3.0.0", "ember-cli-babel": "^6.0.0", - "ember-cli-dependency-checker": "^1.2.0", - "ember-cli-htmlbars": "^1.0.1", + "ember-cli-dependency-checker": "^2.0.0", + "ember-cli-htmlbars": "^2.0.0", "ember-cli-htmlbars-inline-precompile": "^0.4.0", "ember-cli-inject-live-reload": "^1.3.1", "ember-cli-nouislider": "^0.13.0", @@ -36,7 +36,7 @@ "ember-export-application-global": "^2.0.0", "ember-inline-svg": "^0.1.7", "ember-load-initializers": "^1.0.0", - "ember-modal-dialog": "^1.0.0", + "ember-modal-dialog": "^2.0.0", "ember-notify": "^5.0.4", "ember-paper": "^1.0.0-alpha.19", "ember-resolver": "^4.0.0", diff --git a/mobile/yarn.lock b/mobile/yarn.lock index c785d5c..7580afc 100644 --- a/mobile/yarn.lock +++ b/mobile/yarn.lock @@ -345,6 +345,10 @@ ast-types@0.8.12: version "0.8.12" resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.8.12.tgz#a0d90e4351bb887716c83fd637ebf818af4adfcc" +ast-types@0.8.15: + version "0.8.15" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.8.15.tgz#8eef0827f04dff0ec8857ba925abe3fea6194e52" + ast-types@0.9.6: version "0.9.6" resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.6.tgz#102c9e9e9005d3e7e3829bf0c4fa24ee862ee9b9" @@ -1010,8 +1014,8 @@ babylon@^5.8.38: resolved "https://registry.yarnpkg.com/babylon/-/babylon-5.8.38.tgz#ec9b120b11bf6ccd4173a18bf217e60b79859ffd" babylon@^6.11.0, babylon@^6.15.0: - version "6.17.0" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.0.tgz#37da948878488b9c4e3c4038893fa3314b3fc932" + version "6.17.1" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.1.tgz#17f14fddf361b695981fe679385e4f1c01ebd86f" backbone@^1.1.2: version "1.3.3" @@ -1158,7 +1162,7 @@ bplist-parser@0.1.1, bplist-parser@^0.1.0: dependencies: big-integer "^1.6.7" -brace-expansion@^1.0.0: +brace-expansion@^1.0.0, brace-expansion@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.7.tgz#3effc3c50e000531fb720eaff80f0ae8ef23cf59" dependencies: @@ -1318,6 +1322,18 @@ broccoli-config-replace@^1.1.2: debug "^2.2.0" fs-extra "^0.24.0" +broccoli-debug@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/broccoli-debug/-/broccoli-debug-0.6.1.tgz#aec612ba8e5419952f44dc78be52bfabcbc087f6" + dependencies: + broccoli-plugin "^1.2.1" + fs-tree-diff "^0.5.2" + heimdalljs "^0.2.1" + heimdalljs-logger "^0.1.7" + minimatch "^3.0.3" + sanitize-filename "^1.6.1" + tree-sync "^1.2.2" + broccoli-filter@^0.1.6: version "0.1.14" resolved "https://registry.yarnpkg.com/broccoli-filter/-/broccoli-filter-0.1.14.tgz#23cae3891ff9ebb7b4d7db00c6dcf03535daf7ad" @@ -1486,9 +1502,10 @@ broccoli-sri-hash@^2.1.0: symlink-or-copy "^1.0.1" broccoli-stew@^1.2.0, broccoli-stew@^1.3.3: - version "1.4.2" - resolved "https://registry.yarnpkg.com/broccoli-stew/-/broccoli-stew-1.4.2.tgz#9ec4062fd7162c6026561a2fbf64558363aff8d6" + version "1.5.0" + resolved "https://registry.yarnpkg.com/broccoli-stew/-/broccoli-stew-1.5.0.tgz#d7af8c18511dce510e49d308a62e5977f461883c" dependencies: + broccoli-debug "^0.6.1" broccoli-funnel "^1.0.1" broccoli-merge-trees "^1.0.0" broccoli-persistent-filter "^1.1.6" @@ -1500,7 +1517,6 @@ broccoli-stew@^1.2.0, broccoli-stew@^1.3.3: minimatch "^3.0.2" resolve "^1.1.6" rsvp "^3.0.16" - sanitize-filename "^1.5.3" symlink-or-copy "^1.1.8" walk-sync "^0.3.0" @@ -1754,8 +1770,8 @@ can-symlink@^1.0.0: tmp "0.0.28" caniuse-db@^1.0.30000153, caniuse-db@^1.0.30000214, caniuse-db@^1.0.30000639: - version "1.0.30000664" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000664.tgz#e16316e5fdabb9c7209b2bf0744ffc8a14201f22" + version "1.0.30000669" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000669.tgz#dbe8f25700ecda631dfb05cb71027762bd4b03e5" capture-exit@^1.1.0: version "1.2.0" @@ -1835,7 +1851,7 @@ chownr@^1.0.1, chownr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" -cipher-base@^1.0.0, cipher-base@^1.0.1: +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.3.tgz#eeabf194419ce900da3018c207d212f2a6df0a07" dependencies: @@ -1860,8 +1876,8 @@ clean-css-promise@^0.1.0: pinkie-promise "^2.0.0" clean-css@^3.4.5: - version "3.4.25" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-3.4.25.tgz#9e9a52d5c1e6bc5123e1b2783fa65fe958946ede" + version "3.4.26" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-3.4.26.tgz#55323b344ff3bcee684a2eac81c93df8fa73deeb" dependencies: commander "2.8.x" source-map "0.4.x" @@ -2089,14 +2105,14 @@ configstore@2.1.0: xdg-basedir "^2.0.0" configstore@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.0.0.tgz#e1b8669c1803ccc50b545e92f8e6e79aa80e0196" + version "3.1.0" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.0.tgz#45df907073e26dfa1cf4b2d52f5b60545eaa11d1" dependencies: dot-prop "^4.1.0" graceful-fs "^4.1.2" - mkdirp "^0.5.0" + make-dir "^1.0.0" unique-string "^1.0.0" - write-file-atomic "^1.1.2" + write-file-atomic "^2.0.0" xdg-basedir "^3.0.0" console-browserify@^1.1.0: @@ -2167,8 +2183,8 @@ copy-dir@^0.3.0: mkdir-p "~0.0.4" cordova-app-hello-world@^3.11.0: - version "3.11.0" - resolved "https://registry.yarnpkg.com/cordova-app-hello-world/-/cordova-app-hello-world-3.11.0.tgz#9214feb9dd713ca481a1cbabceeca60966c1c0cf" + version "3.12.0" + resolved "https://registry.yarnpkg.com/cordova-app-hello-world/-/cordova-app-hello-world-3.12.0.tgz#270e06b67b2ae94bcfee6592ed39eb42303d186f" cordova-common@2.0.0: version "2.0.0" @@ -2188,14 +2204,14 @@ cordova-common@2.0.0: underscore "^1.8.3" unorm "^1.3.3" -cordova-common@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/cordova-common/-/cordova-common-2.0.2.tgz#57467976b8afd5e0bd0a13111b66a420441601cb" +cordova-common@2.0.3, cordova-common@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/cordova-common/-/cordova-common-2.0.3.tgz#2214ee04ae1c2ec012a52c7c185313e341a6fb38" dependencies: ansi "^0.3.1" bplist-parser "^0.1.0" cordova-registry-mapper "^1.1.8" - elementtree "^0.1.6" + elementtree "0.1.6" glob "^5.0.13" minimatch "^3.0.0" osenv "^0.1.3" @@ -2207,12 +2223,12 @@ cordova-common@^2.0.0: unorm "^1.3.3" cordova-create@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/cordova-create/-/cordova-create-1.0.2.tgz#cb9bba9817c62a645bacb6e00da8cc50936a0fa5" + version "1.1.1" + resolved "https://registry.yarnpkg.com/cordova-create/-/cordova-create-1.1.1.tgz#55282493ab396d9303f72febbaf2f978fa764cd2" dependencies: cordova-app-hello-world "^3.11.0" - cordova-common "2.0.0" - cordova-fetch "1.0.2" + cordova-common "2.0.3" + cordova-fetch "1.1.0" q "1.0.1" shelljs "0.3.0" valid-identifier "0.0.1" @@ -2227,6 +2243,16 @@ cordova-fetch@1.0.2: q "^1.4.1" shelljs "^0.7.0" +cordova-fetch@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/cordova-fetch/-/cordova-fetch-1.1.0.tgz#1549f9ff4e6345f3c6fb6bd6523e8b19311a7b54" + dependencies: + cordova-common "2.0.3" + dependency-ls "^1.1.0" + is-url "^1.2.1" + q "^1.4.1" + shelljs "^0.7.0" + cordova-js@4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/cordova-js/-/cordova-js-4.2.1.tgz#01ca186e14e63b01cb6d24e469750e481a038355" @@ -2305,21 +2331,25 @@ create-ecdh@^4.0.0: bn.js "^4.1.0" elliptic "^6.0.0" -create-hash@^1.1.0, create-hash@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.2.tgz#51210062d7bb7479f6c65bb41a92208b1d61abad" +create-hash@^1.1.0, create-hash@^1.1.1, create-hash@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.3.tgz#606042ac8b9262750f483caddab0f5819172d8fd" dependencies: cipher-base "^1.0.1" inherits "^2.0.1" - ripemd160 "^1.0.0" - sha.js "^2.3.6" + ripemd160 "^2.0.0" + sha.js "^2.4.0" -create-hmac@^1.1.0, create-hmac@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.4.tgz#d3fb4ba253eb8b3f56e39ea2fbcb8af747bd3170" +create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: + version "1.1.6" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.6.tgz#acb9e221a4e17bdb076e90657c42b93e3726cf06" dependencies: + cipher-base "^1.0.3" create-hash "^1.1.0" inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" cross-spawn@^3.0.0: version "3.0.1" @@ -2489,7 +2519,7 @@ depd@1.1.0, depd@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3" -dependency-ls@^1.0.0: +dependency-ls@^1.0.0, dependency-ls@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/dependency-ls/-/dependency-ls-1.1.0.tgz#94cfe674620f5e9f2924d0501f9c6e710fc90f55" dependencies: @@ -2602,21 +2632,15 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" electron-to-chromium@^1.2.7: - version "1.3.8" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.8.tgz#b2c8a2c79bb89fbbfd3724d9555e15095b5f5fb6" + version "1.3.10" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.10.tgz#63d62b785471f0d8dda85199d64579de8a449f08" -elementtree@0.1.6: +elementtree@0.1.6, elementtree@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/elementtree/-/elementtree-0.1.6.tgz#2ac4c46ea30516c8c4cbdb5e3ac7418e592de20c" dependencies: sax "0.3.5" -elementtree@^0.1.6: - version "0.1.7" - resolved "https://registry.yarnpkg.com/elementtree/-/elementtree-0.1.7.tgz#9ac91be6e52fb6e6244c4e54a4ac3ed8ae8e29c0" - dependencies: - sax "1.1.4" - elliptic@^6.0.0: version "6.4.0" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df" @@ -2645,7 +2669,7 @@ ember-cli-app-version@^3.0.0: ember-cli-htmlbars "^1.0.0" git-repo-version "0.4.1" -ember-cli-babel@^5.0.0, ember-cli-babel@^5.1.10, ember-cli-babel@^5.1.5, ember-cli-babel@^5.1.6, ember-cli-babel@^5.1.7, ember-cli-babel@^5.2.4: +ember-cli-babel@^5.1.10, ember-cli-babel@^5.1.5, ember-cli-babel@^5.1.6, ember-cli-babel@^5.1.7: version "5.2.4" resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-5.2.4.tgz#5ce4f46b08ed6f6d21e878619fb689719d6e8e13" dependencies: @@ -2655,7 +2679,7 @@ ember-cli-babel@^5.0.0, ember-cli-babel@^5.1.10, ember-cli-babel@^5.1.5, ember-c ember-cli-version-checker "^1.0.2" resolve "^1.1.2" -ember-cli-babel@^6.0.0, ember-cli-babel@^6.0.0-beta.4, ember-cli-babel@^6.0.0-beta.7: +ember-cli-babel@^6.0.0, ember-cli-babel@^6.0.0-beta.4, ember-cli-babel@^6.0.0-beta.7, ember-cli-babel@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-6.1.0.tgz#d9c83a7d0c67cc8a3ccb9bd082971c3593e54fad" dependencies: @@ -2680,13 +2704,13 @@ ember-cli-broccoli-sane-watcher@^2.0.4: rsvp "^3.0.18" sane "^1.1.1" -ember-cli-dependency-checker@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/ember-cli-dependency-checker/-/ember-cli-dependency-checker-1.4.0.tgz#2b13f977e1eea843fc1a21a001be6ca5d4ef1942" +ember-cli-dependency-checker@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ember-cli-dependency-checker/-/ember-cli-dependency-checker-2.0.0.tgz#f2f2ff144acce7447cde7e0a8666dbfe5029a355" dependencies: - chalk "^0.5.1" - is-git-url "^0.2.0" - semver "^4.1.0" + chalk "^1.1.3" + is-git-url "^1.0.0" + semver "^5.3.0" ember-cli-get-component-path-option@^1.0.0: version "1.0.0" @@ -2697,16 +2721,17 @@ ember-cli-get-dependency-depth@^1.0.0: resolved "https://registry.yarnpkg.com/ember-cli-get-dependency-depth/-/ember-cli-get-dependency-depth-1.0.0.tgz#e0afecf82a2d52f00f28ab468295281aec368d11" ember-cli-htmlbars-inline-precompile@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/ember-cli-htmlbars-inline-precompile/-/ember-cli-htmlbars-inline-precompile-0.4.0.tgz#4a6d2211b804419953104a9231e112dbd2057f3c" + version "0.4.3" + resolved "https://registry.yarnpkg.com/ember-cli-htmlbars-inline-precompile/-/ember-cli-htmlbars-inline-precompile-0.4.3.tgz#4123f507fea6c59ba4c272ef7e713a6d55ba06c9" dependencies: babel-plugin-htmlbars-inline-precompile "^0.2.3" - ember-cli-version-checker "^1.2.0" + ember-cli-version-checker "^2.0.0" hash-for-dep "^1.0.2" + silent-error "^1.1.0" -ember-cli-htmlbars@^1.0.0, ember-cli-htmlbars@^1.0.1, ember-cli-htmlbars@^1.0.10, ember-cli-htmlbars@^1.0.3, ember-cli-htmlbars@^1.0.8, ember-cli-htmlbars@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/ember-cli-htmlbars/-/ember-cli-htmlbars-1.3.0.tgz#e090f011239153bf45dab29625f94a46fce205af" +ember-cli-htmlbars@^1.0.0, ember-cli-htmlbars@^1.0.10, ember-cli-htmlbars@^1.0.3, ember-cli-htmlbars@^1.1.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/ember-cli-htmlbars/-/ember-cli-htmlbars-1.3.2.tgz#906279c48be32986a3cc41e730ecc3513a34c4d1" dependencies: broccoli-persistent-filter "^1.0.3" ember-cli-version-checker "^1.0.2" @@ -2714,6 +2739,15 @@ ember-cli-htmlbars@^1.0.0, ember-cli-htmlbars@^1.0.1, ember-cli-htmlbars@^1.0.10 json-stable-stringify "^1.0.0" strip-bom "^2.0.0" +ember-cli-htmlbars@^2.0.0, ember-cli-htmlbars@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ember-cli-htmlbars/-/ember-cli-htmlbars-2.0.1.tgz#e1e333c7ef4cc546c67734996541fd94ca4423ca" + dependencies: + broccoli-persistent-filter "^1.0.3" + hash-for-dep "^1.0.2" + json-stable-stringify "^1.0.0" + strip-bom "^3.0.0" + ember-cli-inject-live-reload@^1.3.1: version "1.6.1" resolved "https://registry.yarnpkg.com/ember-cli-inject-live-reload/-/ember-cli-inject-live-reload-1.6.1.tgz#82b8f5be454815a75e7f6d42c9ce0bc883a914a3" @@ -2849,9 +2883,16 @@ ember-cli-version-checker@^1.0.2, ember-cli-version-checker@^1.1.6, ember-cli-ve dependencies: semver "^5.3.0" +ember-cli-version-checker@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ember-cli-version-checker/-/ember-cli-version-checker-2.0.0.tgz#e1f7d8e4cdcd752ac35f1611e4daa8836db4c4c7" + dependencies: + resolve "^1.3.3" + semver "^5.3.0" + ember-cli@^2.11.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/ember-cli/-/ember-cli-2.13.0.tgz#c80d06ff8e16a47b0b2e5fbdb8761feebca86368" + version "2.13.1" + resolved "https://registry.yarnpkg.com/ember-cli/-/ember-cli-2.13.1.tgz#ac02ca2d967bb660b577286e4c88c7cea13806b3" dependencies: amd-name-resolver "0.0.6" babel-plugin-transform-es2015-modules-amd "^6.24.0" @@ -2956,8 +2997,8 @@ ember-concurrency@^0.7.15: ember-maybe-import-regenerator "^0.1.4" ember-cordova@^0.4.0: - version "0.4.9" - resolved "https://registry.yarnpkg.com/ember-cordova/-/ember-cordova-0.4.9.tgz#46206d7062c2cd2385d725edc9011fa98d9430d8" + version "0.4.10" + resolved "https://registry.yarnpkg.com/ember-cordova/-/ember-cordova-0.4.10.tgz#7418741d2f077e182441917cf2d5456628c95201" dependencies: broccoli-funnel "^1.1.0" broccoli-merge-trees "1.2.4" @@ -2966,8 +3007,8 @@ ember-cordova@^0.4.0: copy-dir "^0.3.0" cordova-common "^2.0.0" cordova-lib "^6.5.0" - ember-cli-babel "^5.2.4" - fs-extra "^2.0.0" + ember-cli-babel "^6.0.0" + fs-extra "^3.0.0" leek "0.0.24" lodash "^4.13.1" portfinder "^1.0.5" @@ -2997,6 +3038,12 @@ ember-getowner-polyfill@1.1.1, ember-getowner-polyfill@^1.1.0: ember-cli-babel "^5.1.6" ember-cli-version-checker "^1.2.0" +ember-ignore-children-helper@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ember-ignore-children-helper/-/ember-ignore-children-helper-1.0.0.tgz#7645d769377779ff292235725b5b1f5c2e4c16ab" + dependencies: + ember-cli-babel "^5.1.6" + ember-inline-svg@^0.1.7: version "0.1.11" resolved "https://registry.yarnpkg.com/ember-inline-svg/-/ember-inline-svg-0.1.11.tgz#bb5af24cef1db3ab2e1a8aec543bee262a368c37" @@ -3028,14 +3075,14 @@ ember-maybe-import-regenerator@^0.1.4: ember-cli-babel "^6.0.0-beta.4" regenerator-runtime "^0.9.5" -ember-modal-dialog@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/ember-modal-dialog/-/ember-modal-dialog-1.0.0.tgz#829f083cb4a4162dd2a5158e3980123b7cb69328" +ember-modal-dialog@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ember-modal-dialog/-/ember-modal-dialog-2.1.0.tgz#e3beb05bcaaa52c37766b82e8fda0561cd95fdb8" dependencies: - ember-cli-babel "^5.1.6" - ember-cli-htmlbars "^1.0.8" - ember-cli-version-checker "^1.2.0" - ember-wormhole "~0.3.6" + ember-cli-babel "^6.1.0" + ember-cli-htmlbars "^2.0.1" + ember-ignore-children-helper "^1.0.0" + ember-wormhole "^0.5.1" ember-notify@^5.0.4: version "5.2.1" @@ -3177,12 +3224,6 @@ ember-wormhole@0.5.1, ember-wormhole@^0.5.1: ember-cli-babel "^5.1.6" ember-cli-htmlbars "^1.0.3" -ember-wormhole@~0.3.6: - version "0.3.6" - resolved "https://registry.yarnpkg.com/ember-wormhole/-/ember-wormhole-0.3.6.tgz#bbe21bb5478ad254efe4fff4019ac6710f4ad85c" - dependencies: - ember-cli-babel "^5.0.0" - encodeurl@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" @@ -3254,8 +3295,8 @@ error@^7.0.0: xtend "~4.0.0" es5-ext@^0.10.14, es5-ext@^0.10.9, es5-ext@~0.10.14: - version "0.10.15" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.15.tgz#c330a5934c1ee21284a7c081a86e5fd937c91ea6" + version "0.10.16" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.16.tgz#1ef1b04f3d09db6a5d630226d62202f2e425e45a" dependencies: es6-iterator "2" es6-symbol "~3.1" @@ -3511,8 +3552,8 @@ filename-regex@^2.0.0: resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" filesize@^3.1.3: - version "3.5.8" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.5.8.tgz#5cd23aef46eeeaf812707f7098d245de513e4328" + version "3.5.9" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.5.9.tgz#9e3dd8a9b124f5b2f1fb2ee9cd13a86c707bb222" fill-range@^2.1.0: version "2.2.3" @@ -3630,7 +3671,7 @@ fs-exists-sync@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add" -fs-extra@2.0.0: +fs-extra@2.0.0, fs-extra@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-2.0.0.tgz#337352bded4a0b714f3eb84de8cea765e9d37600" dependencies: @@ -3674,12 +3715,13 @@ fs-extra@^1.0.0, fs-extra@~1.0.0: jsonfile "^2.1.0" klaw "^1.0.0" -fs-extra@^2.0.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-2.1.2.tgz#046c70163cef9aad46b0e4a7fa467fb22d71de35" +fs-extra@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-3.0.1.tgz#3794f378c58b342ea7dbbb23095109c4b3b62291" dependencies: graceful-fs "^4.1.2" - jsonfile "^2.1.0" + jsonfile "^3.0.0" + universalify "^0.1.0" fs-readdir-recursive@^0.1.0: version "0.1.2" @@ -3760,7 +3802,7 @@ gauge@~1.2.0, gauge@~1.2.5: lodash.padend "^4.1.0" lodash.padstart "^4.1.0" -gauge@~2.7.1: +gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" dependencies: @@ -3948,8 +3990,8 @@ hammerjs@^2.0.6, hammerjs@^2.0.8: resolved "https://registry.yarnpkg.com/hammerjs/-/hammerjs-2.0.8.tgz#04ef77862cff2bb79d30f7692095930222bf60f1" handlebars@^4.0.4, handlebars@^4.0.6: - version "4.0.7" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.7.tgz#e97325aeb8ea0b9e12b9c4dd73c4c312ad0ede59" + version "4.0.8" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.8.tgz#22b875cd3f0e6cbea30314f144e82bc7a72ff420" dependencies: async "^1.4.0" optimist "^0.6.1" @@ -4019,6 +4061,12 @@ has@^1.0.0: dependencies: function-bind "^1.0.2" +hash-base@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1" + dependencies: + inherits "^2.0.1" + hash-for-dep@^1.0.2: version "1.1.2" resolved "https://registry.yarnpkg.com/hash-for-dep/-/hash-for-dep-1.1.2.tgz#e3347ed92960eb0bb53a2c6c2b70e36d75b7cd0c" @@ -4164,8 +4212,8 @@ https-browserify@~0.0.0: resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82" iconv-lite@^0.4.5, iconv-lite@~0.4.13: - version "0.4.16" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.16.tgz#65de3beeb39e2960d67f049f1634ffcbcde9014b" + version "0.4.17" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.17.tgz#4fdaa3b38acbc2c031b045d0edcdfe1ecab18c8d" ieee754@^1.1.4: version "1.1.8" @@ -4360,6 +4408,10 @@ is-git-url@^0.2.0: version "0.2.3" resolved "https://registry.yarnpkg.com/is-git-url/-/is-git-url-0.2.3.tgz#445200d6fbd6da028fb5e01440d9afc93f3ccb64" +is-git-url@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-git-url/-/is-git-url-1.0.0.tgz#53f684cd143285b52c3244b4e6f28253527af66b" + is-glob@^2.0.0, is-glob@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" @@ -4367,8 +4419,8 @@ is-glob@^2.0.0, is-glob@^2.0.1: is-extglob "^1.0.0" is-integer@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/is-integer/-/is-integer-1.0.6.tgz#5273819fada880d123e1ac00a938e7172dd8d95e" + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-integer/-/is-integer-1.0.7.tgz#6bde81aacddf78b659b6629d629cadc51a886d5c" dependencies: is-finite "^1.0.0" @@ -4494,8 +4546,8 @@ js-tokens@^3.0.0: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" js-yaml@^3.2.5, js-yaml@^3.2.7, js-yaml@^3.6.1: - version "3.8.3" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.3.tgz#33a05ec481c850c8875929166fe1beb61c728766" + version "3.8.4" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.4.tgz#520b4564f86573ba96662af85a8cafa7b4b5a6f6" dependencies: argparse "^1.0.7" esprima "^3.1.1" @@ -4563,13 +4615,19 @@ jsonfile@^2.1.0: optionalDependencies: graceful-fs "^4.1.6" +jsonfile@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.0.tgz#92e7c7444e5ffd5fa32e6a9ae8b85034df8347d0" + optionalDependencies: + graceful-fs "^4.1.6" + jsonify@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" jsonparse@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.0.tgz#85fc245b1d9259acc6941960b905adf64e7de0e8" + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" jsonpointer@^4.0.0: version "4.0.1" @@ -4663,8 +4721,8 @@ load-json-file@^1.0.0: strip-bom "^2.0.0" loader.js@^4.0.7: - version "4.3.0" - resolved "https://registry.yarnpkg.com/loader.js/-/loader.js-4.3.0.tgz#736c13eb8afdf75abd6c2d7b4f7fd40e1105a71f" + version "4.4.0" + resolved "https://registry.yarnpkg.com/loader.js/-/loader.js-4.4.0.tgz#02bf55650b78afee5e9d8cf972efd484faa3b2c1" locate-path@^2.0.0: version "2.0.0" @@ -5042,6 +5100,12 @@ make-array@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/make-array/-/make-array-0.1.2.tgz#335e36ebb0c5a43154d21213a1ecaeae2a1bb3ef" +make-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.0.0.tgz#97a011751e91dd87cfadef58832ebb04936de978" + dependencies: + pify "^2.3.0" + makeerror@1.0.x: version "1.0.11" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" @@ -5193,10 +5257,14 @@ mime-types@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-1.0.2.tgz#995ae1392ab8affcbfcb2641dd054e943c0d5dce" -mime@1.3.4, mime@^1.2.11: +mime@1.3.4: version "1.3.4" resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" +mime@^1.2.11: + version "1.3.6" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.6.tgz#591d84d3653a6b0b4a3b9df8de5aa8108e72e5e0" + mime@~1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/mime/-/mime-1.2.11.tgz#58203eed86e3a5ef17aed2b7d9ebd47f0a60dd10" @@ -5216,11 +5284,11 @@ minimatch@1: lru-cache "2" sigmund "~1.0.0" -"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@~3.0.2, minimatch@~3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" +"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@~3.0.2, minimatch@~3.0.3: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" dependencies: - brace-expansion "^1.0.0" + brace-expansion "^1.1.7" minimatch@^2.0.1, minimatch@^2.0.3: version "2.0.10" @@ -5344,8 +5412,8 @@ node-fetch@^1.3.3: is-stream "^1.0.1" node-gyp@^3.3.1, node-gyp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.6.0.tgz#7474f63a3a0501161dda0b6341f022f14c423fa6" + version "3.6.1" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.6.1.tgz#19561067ff185464aded478212681f47fd578cbc" dependencies: fstream "^1.0.0" glob "^7.0.3" @@ -5687,12 +5755,12 @@ npm@~3.5.2: gauge "~1.2.0" "npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f" + version "4.1.0" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.0.tgz#dc59bee85f64f00ed424efb2af0783df25d1c0b5" dependencies: are-we-there-yet "~1.1.2" console-control-strings "~1.1.0" - gauge "~2.7.1" + gauge "~2.7.3" set-blocking "~2.0.0" "npmlog@0.1 || 1 || 2", npmlog@~2.0.0, "npmlog@~2.0.0 || ~3.1.0", npmlog@~2.0.4: @@ -5969,10 +6037,14 @@ path-type@^1.0.0: pinkie-promise "^2.0.0" pbkdf2@^3.0.3: - version "3.0.9" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.9.tgz#f2c4b25a600058b3c3773c086c37dbbee1ffe693" + version "3.0.12" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.12.tgz#be36785c5067ea48d806ff923288c5f750b6b8a2" dependencies: - create-hmac "^1.1.2" + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" pegjs@^0.10.0: version "0.10.0" @@ -6000,7 +6072,7 @@ phantomjs-prebuilt@^2.1.12, phantomjs-prebuilt@^2.1.14: request-progress "~2.0.1" which "~1.2.10" -pify@^2.0.0: +pify@^2.0.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -6332,7 +6404,7 @@ realize-package-specifier@~3.0.1: dezalgo "^1.0.1" npm-package-arg "^4.1.1" -recast@0.10.33, recast@^0.10.10: +recast@0.10.33: version "0.10.33" resolved "https://registry.yarnpkg.com/recast/-/recast-0.10.33.tgz#942808f7aa016f1fa7142c461d7e5704aaa8d697" dependencies: @@ -6341,6 +6413,15 @@ recast@0.10.33, recast@^0.10.10: private "~0.1.5" source-map "~0.5.0" +recast@^0.10.10: + version "0.10.43" + resolved "https://registry.yarnpkg.com/recast/-/recast-0.10.43.tgz#b95d50f6d60761a5f6252e15d80678168491ce7f" + dependencies: + ast-types "0.8.15" + esprima-fb "~15001.1001.0-dev-harmony-fb" + private "~0.1.5" + source-map "~0.5.0" + recast@^0.11.17, recast@^0.11.3: version "0.11.23" resolved "https://registry.yarnpkg.com/recast/-/recast-0.11.23.tgz#451fd3004ab1e4df9b4e4b66376b2a21912462d3" @@ -6616,7 +6697,7 @@ resolve@1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" -resolve@^1.1.2, resolve@^1.1.3, resolve@^1.1.4, resolve@^1.1.6, resolve@^1.1.7, resolve@^1.3.0, resolve@^1.3.2: +resolve@^1.1.2, resolve@^1.1.3, resolve@^1.1.4, resolve@^1.1.6, resolve@^1.1.7, resolve@^1.3.0, resolve@^1.3.2, resolve@^1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.3.tgz#655907c3469a8680dc2de3a275a8fdd69691f0e5" dependencies: @@ -6659,9 +6740,12 @@ rimraf@~2.5.0, rimraf@~2.5.4: dependencies: glob "^7.0.5" -ripemd160@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-1.0.1.tgz#93a4bbd4942bc574b69a8fa57c71de10ecca7d6e" +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.1.tgz#0f4584295c53a3628af7e6d79aca21ce57d1c6e7" + dependencies: + hash-base "^2.0.0" + inherits "^2.0.1" rsvp@^3.0.14, rsvp@^3.0.16, rsvp@^3.0.17, rsvp@^3.0.18, rsvp@^3.0.21, rsvp@^3.0.6, rsvp@^3.1.0, rsvp@^3.2.1, rsvp@^3.3.3, rsvp@^3.4.0: version "3.5.0" @@ -6705,36 +6789,32 @@ sane@^1.1.1, sane@^1.6.0: walker "~1.0.5" watch "~0.10.0" -sanitize-filename@^1.5.3: +sanitize-filename@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/sanitize-filename/-/sanitize-filename-1.6.1.tgz#612da1c96473fa02dccda92dcd5b4ab164a6772a" dependencies: truncate-utf8-bytes "^1.0.0" sass-graph@^2.1.1: - version "2.2.2" - resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.2.tgz#f4d6c95b546ea2a09d14176d0fc1a07ee2b48354" + version "2.2.3" + resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.3.tgz#2ba9f170f6cafed5b51665abe13cf319c9269c31" dependencies: glob "^7.0.0" lodash "^4.0.0" - scss-tokenizer "^0.2.1" + scss-tokenizer "^0.2.3" yargs "^6.6.0" sax@0.3.5: version "0.3.5" resolved "https://registry.yarnpkg.com/sax/-/sax-0.3.5.tgz#88fcfc1f73c0c8bbd5b7c776b6d3f3501eed073d" -sax@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.1.4.tgz#74b6d33c9ae1e001510f179a91168588f1aedaa9" - sax@>=0.6.0, sax@~1.2.1: version "1.2.2" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.2.tgz#fd8631a23bc7826bef5d871bdb87378c95647828" -scss-tokenizer@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.1.tgz#07c0cc577bb7ab4d08fd900185adbf4bc844141d" +scss-tokenizer@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1" dependencies: js-base64 "^2.1.8" source-map "^0.4.2" @@ -6743,7 +6823,7 @@ scss-tokenizer@^0.2.1: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" -semver@^4.1.0, semver@^4.3.1, semver@^4.3.x: +semver@^4.3.1, semver@^4.3.x: version "4.3.6" resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" @@ -6786,7 +6866,7 @@ setprototypeof@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" -sha.js@^2.3.6, sha.js@~2.4.4: +sha.js@^2.4.0, sha.js@^2.4.8, sha.js@~2.4.4: version "2.4.8" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.8.tgz#37068c2c476b6baf402d14a49c67f597921f634f" dependencies: @@ -6853,9 +6933,9 @@ signal-exit@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" -silent-error@^1.0.0, silent-error@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/silent-error/-/silent-error-1.0.1.tgz#71b7d503d1c6f94882b51b56be879b113cb4822c" +silent-error@^1.0.0, silent-error@^1.0.1, silent-error@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/silent-error/-/silent-error-1.1.0.tgz#2209706f1c850a9f1d10d0d840918b46f26e1bc9" dependencies: debug "^2.2.0" @@ -7093,8 +7173,8 @@ stream-combiner2@^1.1.1: readable-stream "^2.0.2" stream-http@^2.0.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.7.0.tgz#cec1f4e3b494bc4a81b451808970f8b20b4ed5f6" + version "2.7.1" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.7.1.tgz#546a51741ad5a6b07e9e31b0b10441a917df528a" dependencies: builtin-status-codes "^3.0.0" inherits "^2.0.1" @@ -7165,6 +7245,10 @@ strip-bom@^2.0.0: dependencies: is-utf8 "^0.2.0" +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" @@ -7267,8 +7351,8 @@ temp@0.8.3: rimraf "~2.2.6" testem@^1.15.0: - version "1.16.0" - resolved "https://registry.yarnpkg.com/testem/-/testem-1.16.0.tgz#3933040b5d5b5fbdb6a2b1e7032e511b54a05867" + version "1.16.1" + resolved "https://registry.yarnpkg.com/testem/-/testem-1.16.1.tgz#ef8b2c793a47082ca1791e2a49d3f22bf1d4ca28" dependencies: backbone "^1.1.2" bluebird "^3.4.6" @@ -7362,8 +7446,8 @@ to-arraybuffer@^1.0.0: resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" to-fast-properties@^1.0.0, to-fast-properties@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.2.tgz#f3f5c0c3ba7299a7ef99427e44633257ade43320" + version "1.0.3" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" tough-cookie@>=0.12.0, tough-cookie@~2.3.0: version "2.3.2" @@ -7375,7 +7459,7 @@ tough-cookie@~2.2.0: version "2.2.2" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.2.2.tgz#c83a1830f4e5ef0b93ef2a3488e724f8de016ac7" -tree-sync@^1.2.1: +tree-sync@^1.2.1, tree-sync@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/tree-sync/-/tree-sync-1.2.2.tgz#2cf76b8589f59ffedb58db5a3ac7cb013d0158b7" dependencies: @@ -7441,8 +7525,8 @@ uc.micro@^1.0.0, uc.micro@^1.0.1, uc.micro@^1.0.3: resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.3.tgz#7ed50d5e0f9a9fb0a573379259f2a77458d50192" uglify-js@^2.6, uglify-js@^2.7.0: - version "2.8.22" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.22.tgz#d54934778a8da14903fa29a326fb24c0ab51a1a0" + version "2.8.24" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.24.tgz#48eb5175cf32e22ec11a47e638d7c8b4e0faf2dd" dependencies: source-map "~0.5.1" yargs "~3.10.0" @@ -7506,6 +7590,10 @@ unique-string@^1.0.0: dependencies: crypto-random-string "^1.0.0" +universalify@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.0.tgz#9eb1c4651debcc670cc94f1a75762332bb967778" + unorm@1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/unorm/-/unorm-1.3.3.tgz#16a8772671ebd6f7cde6f8c5e49bb60ac47dba93" @@ -7670,10 +7758,10 @@ which@1, which@^1.2.12, which@^1.2.9, which@~1.2.1, which@~1.2.10, which@~1.2.11 isexe "^2.0.0" wide-align@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad" + version "1.1.2" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" dependencies: - string-width "^1.0.1" + string-width "^1.0.2" window-size@0.1.0: version "0.1.0" @@ -7710,6 +7798,14 @@ write-file-atomic@^1.1.2: imurmurhash "^0.1.4" slide "^1.1.5" +write-file-atomic@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.1.0.tgz#1769f4b551eedce419f0505deae2e26763542d37" + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + slide "^1.1.5" + write-file-atomic@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.1.4.tgz#b1f52dc2e8dc0e3cb04d187a25f758a38a90ca3b" diff --git a/web/app/pods/components/bridge-finder/component.js b/web/app/pods/components/bridge-finder/component.js index 581b885..fff1ac3 100644 --- a/web/app/pods/components/bridge-finder/component.js +++ b/web/app/pods/components/bridge-finder/component.js @@ -7,7 +7,8 @@ const { on, isNone, run: { later }, - $ + $, + String: { htmlSafe } } = Ember; export default Component.extend({ @@ -24,7 +25,6 @@ export default Component.extend({ bridgeUsernamePingIntervalTime: 1500, bridgeUserNamePingIntervalProgress: 0, bridgePingIntervalHandle: null, - bridgeAuthenticateReachedStatus: null, manualBridgeIp: null, manualBridgeIpNotFound: false, multipleBridgeIps: [], @@ -95,14 +95,19 @@ export default Component.extend({ type: 'POST' }).done((result, status) => { if (!this.isDestroyed) { - this.set('bridgeAuthenticateReachedStatus', status); - if (status === 'success' && !result[0].error) { this.clearBridgePingIntervalHandle(); this.get('storage').set('huegasm.bridgeUsername', result[0].success.username); this.set('bridgeUsername', result[0].success.username); } } + }).fail(() => { + this.clearBridgePingIntervalHandle(); + this.setProperties({ + bridgeConnectError: true, + bridgeConnectMessage: htmlSafe('Your network and/or computer security settings are preventing Huegasm from connecting to your Hue bridge.' + + '
Feel free to contact us at huegasm.app@gmail.com if this is unexpected and you need help debugging the problem.') + }) }); this.incrementProperty('bridgeUserNamePingIntervalProgress', this.get('bridgeUsernamePingIntervalTime') / bridgeUsernamePingMaxTime * 100); diff --git a/web/app/pods/components/bridge-finder/template.hbs b/web/app/pods/components/bridge-finder/template.hbs index 648b898..a9672d3 100644 --- a/web/app/pods/components/bridge-finder/template.hbs +++ b/web/app/pods/components/bridge-finder/template.hbs @@ -1,33 +1,35 @@ {{#unless bridgeUsername}} {{#if bridgeIp}} - - - - - - - - + {{#unless bridgeConnectError}} + + + + + + + + - {{paper-progress-linear warn=true value=bridgeUserNamePingIntervalProgress}} + {{paper-progress-linear warn=true value=bridgeUserNamePingIntervalProgress}} + {{/unless}} {{#if isAuthenticating}}

@@ -35,7 +37,11 @@
Press the button on your bridge to authenticate Huegasm.

{{else}} -

You failed to press the button in time. RETRY

+ {{#if bridgeConnectError}} + {{bridgeConnectMessage}} + {{else}} +

You failed to press the button in time. RETRY

+ {{/if}} {{/if}} {{else}} {{#unless bridgeFindStatus}} diff --git a/web/app/pods/components/hue-controls/component.js b/web/app/pods/components/hue-controls/component.js index 561a9c7..a53c648 100644 --- a/web/app/pods/components/hue-controls/component.js +++ b/web/app/pods/components/hue-controls/component.js @@ -1,12 +1,13 @@ import Ember from 'ember'; -const { A, Component,computed, isEmpty, isNone, run: { later, scheduleOnce }, inject, $, set } = Ember; +const { A, Component, computed, isEmpty, isNone, run: { later, scheduleOnce }, inject, $, set } = Ember; export default Component.extend({ classNames: ['container-fluid'], elementId: 'hue-controls', lightsData: null, + firstVisitApp: true, canTryChrome: false, activeLights: A(), tabList: ["Lights", "Music"], @@ -17,64 +18,70 @@ export default Component.extend({ notify: inject.service(), - dimmerOnClass: computed('dimmerOn', function(){ + dimmerOnClass: computed('dimmerOn', function () { return this.get('dimmerOn') ? 'dimmerOn md-menu-origin' : 'md-menu-origin'; }), - ready: computed('lightsData', 'trial', function() { + ready: computed('lightsData', 'trial', function () { return this.get('trial') || !isNone(this.get('lightsData')); }), - apiURL: computed('bridgeIp', 'bridgeUsername', function(){ + apiURL: computed('bridgeIp', 'bridgeUsername', function () { return 'http://' + this.get('bridgeIp') + '/api/' + this.get('bridgeUsername'); }), - tabData: computed('tabList', 'selectedTab', function(){ + tabData: computed('tabList', 'selectedTab', function () { let tabData = [], selectedTab = this.get('selectedTab'); - this.get('tabList').forEach(function(tab, i){ + this.get('tabList').forEach(function (tab, i) { let selected = false; - if(i === selectedTab){ + if (i === selectedTab) { selected = true; } - tabData.push({"name": tab, "selected": selected }); + tabData.push({ "name": tab, "selected": selected }); }); return tabData; }), - didInsertElement(){ - if(!window.matchMedia || (window.matchMedia("(min-width: 768px)").matches)){ + didInsertElement() { + if (!window.matchMedia || (window.matchMedia("(min-width: 768px)").matches)) { // here's a weird way to automatically initialize bootstrap tooltips - let observer = new MutationObserver(function(mutations) { - let haveTooltip = !mutations.every(function(mutation) { + let observer = new MutationObserver(function (mutations) { + let haveTooltip = !mutations.every(function (mutation) { return isEmpty(mutation.addedNodes) || isNone(mutation.addedNodes[0].classList) || mutation.addedNodes[0].classList.contains('tooltip'); }); - if(haveTooltip) { - scheduleOnce('afterRender', function(){ + if (haveTooltip) { + scheduleOnce('afterRender', function () { $('.bootstrap-tooltip').tooltip(); }); } }); - observer.observe($('#hue-controls')[0], {childList: true, subtree: true}); + observer.observe($('#hue-controls')[0], { childList: true, subtree: true }); } }, init() { this._super(...arguments); - let isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor); + let isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor), + storage = this.get('storage'), + firstVisitApp = storage.get('huegasm.firstVisitApp'); - if(!this.get('trial')) { + if (!isEmpty(firstVisitApp)) { + this.set('firstVisitApp', false); + } + + if (!this.get('trial')) { this.updateLightData(); setInterval(this.updateLightData.bind(this), 2000); } - if (!isNone(this.get('storage').get('huegasm.selectedTab'))) { + if (!isNone(storage.get('huegasm.selectedTab'))) { this.set('selectedTab', this.get('storage').get('huegasm.selectedTab')); } @@ -85,7 +92,7 @@ export default Component.extend({ 'mbjanbdhcpohhfecjgbdpcfhnnbofooj', {}, (response) => { - if (response && response.installed){ + if (response && response.installed) { set(this, 'canTryChrome', false); } } @@ -93,23 +100,23 @@ export default Component.extend({ } }, - updateLightData(){ - let fail = ()=>{ - if(isNone(this.get('lightsData'))) { + updateLightData() { + let fail = () => { + if (isNone(this.get('lightsData'))) { this.send('clearBridge'); - } else if(this.get('displayFailure')){ - this.get('notify').warning({html: ''}); + } else if (this.get('displayFailure')) { + this.get('notify').warning({ html: '' }); this.set('displayFailure', false); - later(this, function() { + later(this, function () { this.set('displayFailure', true); }, 30000); } }; - if(!this.get('pauseLightUpdates')){ - $.get(this.get('apiURL') + '/lights', (result, status)=>{ - if(!isNone(result[0]) && !isNone(result[0].error)){ + if (!this.get('pauseLightUpdates')) { + $.get(this.get('apiURL') + '/lights', (result, status) => { + if (!isNone(result[0]) && !isNone(result[0].error)) { fail(); } else if (status === 'success' && JSON.stringify(this.get('lightsData')) !== JSON.stringify(result)) { this.set('lightsData', result); @@ -125,7 +132,7 @@ export default Component.extend({ tryExtension() { chrome.webstore.install("https://chrome.google.com/webstore/detail/mbjanbdhcpohhfecjgbdpcfhnnbofooj"); }, - changeTab(tabName){ + changeTab(tabName) { let index = this.get('tabList').indexOf(tabName); this.set('selectedTab', index); this.get('storage').set('huegasm.selectedTab', index); @@ -149,11 +156,11 @@ export default Component.extend({ email() { window.open("mailto:huegasm.app@gmail.com", '_blank'); }, - startIntro(){ + startIntro() { let intro = introJs(), playerBottom = $('#player-bottom'); - if(this.get('dimmerOn')) { + if (this.get('dimmerOn')) { this.send('toggleDimmer'); } @@ -227,29 +234,29 @@ export default Component.extend({ }); intro.onchange((element) => { - if(element.id === '' || element.id === 'music-tab' || element.id === 'playlist' || element.id === 'player-area' || element.id === 'beat-option-row' || element.id === 'beat-option-button-group' || element.id === 'beat-container' || element.id === 'using-mic-audio-tooltip' || element.nodeName === 'MD-MENU'){ + if (element.id === '' || element.id === 'music-tab' || element.id === 'playlist' || element.id === 'player-area' || element.id === 'beat-option-row' || element.id === 'beat-option-button-group' || element.id === 'beat-container' || element.id === 'using-mic-audio-tooltip' || element.nodeName === 'MD-MENU') { $('.navigation-item').eq(1).click(); } else { $('.navigation-item').eq(0).click(); } - if(element.id === 'music-tab' || element.id === 'playlist' || element.id === 'player-area'){ + if (element.id === 'music-tab' || element.id === 'playlist' || element.id === 'player-area') { playerBottom.hide(); - } else if(element.id === 'beat-option-row' || element.id === 'beat-option-button-group' || element.id === 'beat-container'){ + } else if (element.id === 'beat-option-row' || element.id === 'beat-option-button-group' || element.id === 'beat-container') { playerBottom.show(); - } else if(element.id === 'dimmer'){ + } else if (element.id === 'dimmer') { $(document).click(); } }); // skip hidden/missing elements - intro.onafterchange((element)=>{ + intro.onafterchange((element) => { let elem = $(element); - if(elem.html() === ''){ + if (elem.html() === '') { $('.introjs-nextbutton').click(); } - if(element.id === ''){ + if (element.id === '') { later(this, () => { $('body').velocity('scroll'); }, 500); @@ -259,6 +266,10 @@ export default Component.extend({ }, 500); } }).start(); + }, + closeNotificationModal() { + this.set('firstVisitApp', false); + this.get('storage').set('huegasm.firstVisitApp', false); } } }); diff --git a/web/app/pods/components/hue-controls/template.hbs b/web/app/pods/components/hue-controls/template.hbs index 6ae635e..9a8ae89 100644 --- a/web/app/pods/components/hue-controls/template.hbs +++ b/web/app/pods/components/hue-controls/template.hbs @@ -58,6 +58,36 @@ {{music-tab active=(eq selectedTab 1) apiURL=apiURL lightsData=lightsData activeLights=activeLights pauseLightUpdates=pauseLightUpdates dimmerOn=dimmerOn storage=storage colorLoopOn=colorLoopOn playing=playing action="startIntro"}} + + {{#if firstVisitApp}} + {{#paper-dialog fullscreen=fullscreen onClose=(action "closeNotificationModal") origin=dialogOrigin}} + + {{#paper-dialog-content}} +

+ Check out the Huegasm Chrome extension +

+

+ The newly updated Huegasm Chrome adds: +

    +
  • ability to listen for music from either a Chrome tab, microphone or your entire system
  • +
  • "Ambience mode" whcih sporatically changes the color of your lights throughout the song
  • +
  • and more...
  • +
+ + + + +

+ {{/paper-dialog-content}} + + {{#paper-dialog-actions class="layout-row" }} + + {{#paper-button primary=true onClick=(action "closeNotificationModal")}}OK{{/paper-button}} + {{/paper-dialog-actions}} + + {{/paper-dialog}} + {{/if}} + {{else}} {{paper-progress-circular diameter=100}} {{/if}} diff --git a/web/app/pods/components/lights-tab/component.js b/web/app/pods/components/lights-tab/component.js index c4001dd..07143fa 100644 --- a/web/app/pods/components/lights-tab/component.js +++ b/web/app/pods/components/lights-tab/component.js @@ -23,7 +23,7 @@ export default Component.extend({ }), // determines the average brightness of the hue system for the brightness slider - lightsBrightness: computed('lightsData', function () { + lightsBrightness: computed('lightsData', 'activeLights.[]', function () { let lightsData = this.get('lightsData'), activeLights = this.get('activeLights'), lightsBrightness = 0; @@ -102,7 +102,7 @@ export default Component.extend({ $('.color').css('background', 'rgb(' + 255 + ',' + 255 + ',' + 255 + ')'); } })), - + // determines whether the lights are on/off for the lights switch lightsOnChange: on('init', observer('lightsData.@each.state.on', 'activeLights.[]', function () { if (!this.get('strobeOn')) { diff --git a/web/app/pods/components/music-tab/add-soundcloud-sound-modal/component.js b/web/app/pods/components/music-tab/add-soundcloud-sound-modal/component.js index 072e4a9..7c772f5 100644 --- a/web/app/pods/components/music-tab/add-soundcloud-sound-modal/component.js +++ b/web/app/pods/components/music-tab/add-soundcloud-sound-modal/component.js @@ -13,33 +13,32 @@ const { export default Component.extend({ url: null, - onIsShowingModalChange: observer('isShowingModal', function(){ - if(this.get('isShowingModal')){ + onIsShowingModalChange: observer('isShowingModal', function () { + if (this.get('isShowingModal')) { this.set('url', null); - later(function(){ + later(function () { $('md-input-container input').focus(); }, 500); } - }), - saveDisabled: computed('url', function(){ + saveDisabled: computed('url', function () { return isNone(this.get('url')) || isEmpty(this.get('url').trim()); }), - didInsertElement: function() { - $(document).keypress((event)=>{ - if(!this.get('saveDisabled') && event.which === 13) { + didInsertElement: function () { + $(document).keypress((event) => { + if (!this.get('saveDisabled') && event.which === 13) { this.send('add'); } }); }, actions: { - close () { + close() { this.sendAction(); }, - add (){ + add() { this.sendAction('action', this.get('url')); } } diff --git a/web/app/pods/components/music-tab/component.js b/web/app/pods/components/music-tab/component.js index 4d8eee0..f410974 100644 --- a/web/app/pods/components/music-tab/component.js +++ b/web/app/pods/components/music-tab/component.js @@ -280,7 +280,6 @@ export default Component.extend(helperMixin, visualizerMixin, { this.send('handleNewSoundCloudURL', 'https://soundcloud.com/mrsuicidesheep/vallis-alps-young-feki-remix'); this.send('handleNewSoundCloudURL', 'https://soundcloud.com/mrsuicidesheep/andrew-luce-when-to-love-you-feat-chelsea-cutler'); this.send('handleNewSoundCloudURL', 'https://soundcloud.com/mrsuicidesheep/ahh-ooh-carefree-with-me'); - this.send('handleNewSoundCloudURL', 'https://soundcloud.com/mrsuicidesheep/crywolf-slow-burn'); this.send('handleNewSoundCloudURL', 'https://soundcloud.com/mrsuicidesheep/clozee-red-forest'); this.send('handleNewSoundCloudURL', 'https://soundcloud.com/mrsuicidesheep/elo-method-subranger-solace'); this.send('handleNewSoundCloudURL', 'https://soundcloud.com/mrsuicidesheep/90-pounds-of-pete-waited-too-long-feat-devon-baldwin'); diff --git a/web/app/styles/hue-controls.scss b/web/app/styles/hue-controls.scss index 6ebe165..998036d 100644 --- a/web/app/styles/hue-controls.scss +++ b/web/app/styles/hue-controls.scss @@ -5,6 +5,17 @@ } } +.promo-img { + display: block; + margin: auto; + height: 50vh; + min-height: 250px; +} + +.promo-title { + font-size: 18px; +} + .lights-control-tooltip + .tooltip { left: 0 !important; } diff --git a/web/package.json b/web/package.json index 099d404..510d8a1 100644 --- a/web/package.json +++ b/web/package.json @@ -21,11 +21,11 @@ "ember-cli": "^2.8.0", "ember-cli-app-version": "^3.0.0", "ember-cli-babel": "^6.0.0", - "ember-cli-dependency-checker": "^1.2.0", + "ember-cli-dependency-checker": "^2.0.0", "ember-cli-deploy": "^1.0.0", "ember-cli-deploy-build": "^1.0.0", "ember-cli-deploy-git": "^1.1.0", - "ember-cli-htmlbars": "^1.0.1", + "ember-cli-htmlbars": "^2.0.0", "ember-cli-htmlbars-inline-precompile": "^0.4.0", "ember-cli-inject-live-reload": "^1.3.1", "ember-cli-nouislider": "^0.13.0", @@ -37,7 +37,7 @@ "ember-export-application-global": "^2.0.0", "ember-inline-svg": "^0.1.7", "ember-load-initializers": "^1.0.0", - "ember-modal-dialog": "^1.0.0", + "ember-modal-dialog": "^2.0.0", "ember-notify": "^5.0.4", "ember-paper": "^1.0.0-alpha.19", "ember-resolver": "^4.0.0", diff --git a/web/public/assets/images/promo.png b/web/public/assets/images/promo.png new file mode 100644 index 0000000000000000000000000000000000000000..fa6dd15fae002fa99345cb64e79fd8e0b6ead93c GIT binary patch literal 35686 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
  • 0!47(7W;x+3R$*N>kT>2*|N-Gb=WsJVO5(XM(P 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