From b11c24d0b114b7863ecbef1c60894d2e9b5d36fb Mon Sep 17 00:00:00 2001 From: Egor Date: Mon, 10 Aug 2015 22:35:25 -0700 Subject: [PATCH] Initial push --- .bowerrc | 4 + .editorconfig | 34 + .ember-cli | 9 + .gitignore | 17 + .idea/.name | 1 + .idea/encodings.xml | 15 + .idea/huegasm.iml | 14 + .idea/jsLibraryMappings.xml | 7 + .idea/libraries/huegasm_node_modules.xml | 14 + .idea/misc.xml | 14 + .idea/modules.xml | 8 + .idea/vcs.xml | 6 + .idea/watcherTasks.xml | 4 + .idea/webResources.xml | 14 + .idea/workspace.xml | 612 ++++++++++++++++++ .jshintrc | 32 + .travis.yml | 23 + .watchmanconfig | 3 + README.md | 53 ++ app/app.js | 18 + app/components/bridge-controls.js | 69 ++ app/components/bridge-finder.js | 80 +++ app/components/huegasm-app.js | 18 + app/index.html | 25 + app/router.js | 11 + app/routes/.gitkeep | 0 app/styles/app.scss | 20 + app/templates/application.hbs | 1 + app/templates/components/bridge-controls.hbs | 5 + app/templates/components/bridge-finder.hbs | 14 + app/templates/components/huegasm-app.hbs | 5 + assets/pressButtonBridge.psd | Bin 0 -> 184293 bytes bower.json | 18 + config/environment.js | 57 ++ ember-cli-build.js | 26 + package.json | 44 ++ public/assets/images/pressButtonBridge.png | Bin 0 -> 7578 bytes public/crossdomain.xml | 15 + public/robots.txt | 3 + testem.json | 12 + tests/.jshintrc | 52 ++ tests/helpers/resolver.js | 11 + tests/helpers/start-app.js | 18 + tests/index.html | 33 + .../components/bridge-controls-test.js | 26 + .../components/bridge-finder-test.js | 26 + .../components/huegasm-app-test.js | 26 + tests/test-helper.js | 6 + tests/unit/.gitkeep | 0 vendor/.gitkeep | 0 50 files changed, 1523 insertions(+) create mode 100644 .bowerrc create mode 100644 .editorconfig create mode 100644 .ember-cli create mode 100644 .gitignore create mode 100644 .idea/.name create mode 100644 .idea/encodings.xml create mode 100644 .idea/huegasm.iml create mode 100644 .idea/jsLibraryMappings.xml create mode 100644 .idea/libraries/huegasm_node_modules.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 .idea/watcherTasks.xml create mode 100644 .idea/webResources.xml create mode 100644 .idea/workspace.xml create mode 100644 .jshintrc create mode 100644 .travis.yml create mode 100644 .watchmanconfig create mode 100644 README.md create mode 100644 app/app.js create mode 100644 app/components/bridge-controls.js create mode 100644 app/components/bridge-finder.js create mode 100644 app/components/huegasm-app.js create mode 100644 app/index.html create mode 100644 app/router.js create mode 100644 app/routes/.gitkeep create mode 100644 app/styles/app.scss create mode 100644 app/templates/application.hbs create mode 100644 app/templates/components/bridge-controls.hbs create mode 100644 app/templates/components/bridge-finder.hbs create mode 100644 app/templates/components/huegasm-app.hbs create mode 100644 assets/pressButtonBridge.psd create mode 100644 bower.json create mode 100644 config/environment.js create mode 100644 ember-cli-build.js create mode 100644 package.json create mode 100644 public/assets/images/pressButtonBridge.png create mode 100644 public/crossdomain.xml create mode 100644 public/robots.txt create mode 100644 testem.json create mode 100644 tests/.jshintrc create mode 100644 tests/helpers/resolver.js create mode 100644 tests/helpers/start-app.js create mode 100644 tests/index.html create mode 100644 tests/integration/components/bridge-controls-test.js create mode 100644 tests/integration/components/bridge-finder-test.js create mode 100644 tests/integration/components/huegasm-app-test.js create mode 100644 tests/test-helper.js create mode 100644 tests/unit/.gitkeep create mode 100644 vendor/.gitkeep diff --git a/.bowerrc b/.bowerrc new file mode 100644 index 0000000..959e169 --- /dev/null +++ b/.bowerrc @@ -0,0 +1,4 @@ +{ + "directory": "bower_components", + "analytics": false +} diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..47c5438 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,34 @@ +# EditorConfig helps developers define and maintain consistent +# coding styles between different editors and IDEs +# editorconfig.org + +root = true + + +[*] +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true +indent_style = space +indent_size = 2 + +[*.js] +indent_style = space +indent_size = 2 + +[*.hbs] +insert_final_newline = false +indent_style = space +indent_size = 2 + +[*.css] +indent_style = space +indent_size = 2 + +[*.html] +indent_style = space +indent_size = 2 + +[*.{diff,md}] +trim_trailing_whitespace = false diff --git a/.ember-cli b/.ember-cli new file mode 100644 index 0000000..ee64cfe --- /dev/null +++ b/.ember-cli @@ -0,0 +1,9 @@ +{ + /** + Ember CLI sends analytics information by default. The data is completely + anonymous, but there are times when you might want to disable this behavior. + + Setting `disableAnalytics` to true will prevent any data from being sent. + */ + "disableAnalytics": false +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..86fceae --- /dev/null +++ b/.gitignore @@ -0,0 +1,17 @@ +# See http://help.github.com/ignore-files/ for more about ignoring files. + +# compiled output +/dist +/tmp + +# dependencies +/node_modules +/bower_components + +# misc +/.sass-cache +/connect.lock +/coverage/* +/libpeerconnection.log +npm-debug.log +testem.log diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..3b798d1 --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +huegasm \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..f8c49ca --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/huegasm.iml b/.idea/huegasm.iml new file mode 100644 index 0000000..d71cf15 --- /dev/null +++ b/.idea/huegasm.iml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/jsLibraryMappings.xml b/.idea/jsLibraryMappings.xml new file mode 100644 index 0000000..e9ead71 --- /dev/null +++ b/.idea/jsLibraryMappings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/huegasm_node_modules.xml b/.idea/libraries/huegasm_node_modules.xml new file mode 100644 index 0000000..880a038 --- /dev/null +++ b/.idea/libraries/huegasm_node_modules.xml @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..19f74da --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..0fffe46 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..6564d52 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/watcherTasks.xml b/.idea/watcherTasks.xml new file mode 100644 index 0000000..75eea12 --- /dev/null +++ b/.idea/watcherTasks.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/webResources.xml b/.idea/webResources.xml new file mode 100644 index 0000000..3703461 --- /dev/null +++ b/.idea/webResources.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..eafd423 --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,612 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + 1439013917791 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.jshintrc b/.jshintrc new file mode 100644 index 0000000..08096ef --- /dev/null +++ b/.jshintrc @@ -0,0 +1,32 @@ +{ + "predef": [ + "document", + "window", + "-Promise" + ], + "browser": true, + "boss": true, + "curly": true, + "debug": false, + "devel": true, + "eqeqeq": true, + "evil": true, + "forin": false, + "immed": false, + "laxbreak": false, + "newcap": true, + "noarg": true, + "noempty": false, + "nonew": false, + "nomen": false, + "onevar": false, + "plusplus": false, + "regexp": false, + "undef": true, + "sub": true, + "strict": false, + "white": false, + "eqnull": true, + "esnext": true, + "unused": true +} diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..66dd107 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,23 @@ +--- +language: node_js +node_js: + - "0.12" + +sudo: false + +cache: + directories: + - node_modules + +before_install: + - export PATH=/usr/local/phantomjs-2.0.0/bin:$PATH + - "npm config set spin false" + - "npm install -g npm@^2" + +install: + - npm install -g bower + - npm install + - bower install + +script: + - npm test diff --git a/.watchmanconfig b/.watchmanconfig new file mode 100644 index 0000000..5e9462c --- /dev/null +++ b/.watchmanconfig @@ -0,0 +1,3 @@ +{ + "ignore_dirs": ["tmp"] +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..4723afa --- /dev/null +++ b/README.md @@ -0,0 +1,53 @@ +# Huegasm + +This README outlines the details of collaborating on this Ember application. +A short introduction of this app could easily go here. + +## Prerequisites + +You will need the following things properly installed on your computer. + +* [Git](http://git-scm.com/) +* [Node.js](http://nodejs.org/) (with NPM) +* [Bower](http://bower.io/) +* [Ember CLI](http://www.ember-cli.com/) +* [PhantomJS](http://phantomjs.org/) + +## Installation + +* `git clone ` this repository +* change into the new directory +* `npm install` +* `bower install` + +## Running / Development + +* `ember server` +* Visit your app at [http://localhost:4200](http://localhost:4200). + +### Code Generators + +Make use of the many generators for code, try `ember help generate` for more details + +### Running Tests + +* `ember test` +* `ember test --server` + +### Building + +* `ember build` (development) +* `ember build --environment production` (production) + +### Deploying + +Specify what it takes to deploy your app. + +## Further Reading / Useful Links + +* [ember.js](http://emberjs.com/) +* [ember-cli](http://www.ember-cli.com/) +* Development Browser Extensions + * [ember inspector for chrome](https://chrome.google.com/webstore/detail/ember-inspector/bmdblncegkenkacieihfhpjfppoconhi) + * [ember inspector for firefox](https://addons.mozilla.org/en-US/firefox/addon/ember-inspector/) + diff --git a/app/app.js b/app/app.js new file mode 100644 index 0000000..8d66b95 --- /dev/null +++ b/app/app.js @@ -0,0 +1,18 @@ +import Ember from 'ember'; +import Resolver from 'ember/resolver'; +import loadInitializers from 'ember/load-initializers'; +import config from './config/environment'; + +var App; + +Ember.MODEL_FACTORY_INJECTIONS = true; + +App = Ember.Application.extend({ + modulePrefix: config.modulePrefix, + podModulePrefix: config.podModulePrefix, + Resolver: Resolver +}); + +loadInitializers(App, config.modulePrefix); + +export default App; diff --git a/app/components/bridge-controls.js b/app/components/bridge-controls.js new file mode 100644 index 0000000..5ba08e0 --- /dev/null +++ b/app/components/bridge-controls.js @@ -0,0 +1,69 @@ +import Em from 'ember'; + +export default Em.Component.extend({ + bridgeIp: null, + + bridgeUsername: null, + + lightsData: null, + + lightsDataIntervalHandle: null, + + lightsApiURL: function(){ + return 'http://' + this.get('bridgeIp') + '/api/' + this.get('bridgeUsername') + '/lights'; + }.property('bridgeIp', 'bridgeUsername'), + + didInsertElement: function() { + this.set('lightsDataIntervalHandle', setInterval(this.updateLightData.bind(this), 1000)); + }, + + lightsOn: function(){ + var lightsData = this.get('lightsData'); + + for (var key in lightsData) { + if (lightsData.hasOwnProperty(key)) { + if(lightsData[key].state.on){ + return true; + } + } + } + + return false; + }.property('lightsData'), + + onLightsOnChange: function(){ + var lightsData = this.get('lightsData'), lightsOnState = false, lightsOn = this.get('lightsOn'); + + for (let key in lightsData) { + if (lightsData.hasOwnProperty(key)) { + if(lightsData[key].state.on){ + lightsOnState = true; + break; + } + } + } + + if(lightsOn !== lightsOnState){ + for (let key in lightsData) { + Em.$.ajax(this.get('lightsApiURL') + '/' + key + '/state', { + data: JSON.stringify({"on": lightsOn}), + contentType: 'application/json', + type: 'PUT' + }) + } + } + }.observes('lightsOn'), + + lightsOnTxt: function(){ + return this.get('lightsOn') ? 'On' : 'Off'; + }.property('lightsOn'), + + updateLightData: function(){ + var self = this; + Em.$.get(this.get('lightsApiURL'), function (result, status) { + if (status === 'success') { + self.set('lightsData', result); + } + }); + } +}); diff --git a/app/components/bridge-finder.js b/app/components/bridge-finder.js new file mode 100644 index 0000000..8836163 --- /dev/null +++ b/app/components/bridge-finder.js @@ -0,0 +1,80 @@ +import Em from 'ember'; + +export default Em.Component.extend({ + bridgeIp: null, + + bridgeUsername: null, + + bridgeFindStatus: null, + + // 30 seconds + bridgeUsernamePingMaxTime: 30000, + bridgeUsernamePingIntervalTime: 1000, + bridgeUserNamePingIntervalProgress: 0, + + bridgePingIntervalHandle: null, + bridgeAuthenticateReachedStatus: null, + + actions: { + retry: function(){ + this.onBridgeIpChange(); + } + }, + + // find the bridge ip here + didInsertElement: function () { + if(this.get('bridgeIp') === null){ + var self = this; + + Em.$.get('https://www.meethue.com/api/nupnp', function (result, status) { + if (status === 'success') { + self.set('bridgeIp', result[0].internalipaddress); + localStorage.setItem('huegasm.bridgeIp', result[0].internalipaddress); + } + + self.set('bridgeFindStatus', status); + }); + } + }, + + // try to authenticate against the bridge here + onBridgeIpChange: function () { + this.setProperties({ + bridgePingIntervalHandle: setInterval(this.pingBridgeUser.bind(this), this.get('bridgeUsernamePingIntervalTime')), + bridgeUserNamePingIntervalProgress: 0 + }); + }.observes('bridgeIp'), + + pingBridgeUser: function () { + var bridgeIp = this.get('bridgeIp'), self = this, bridgeUserNamePingIntervalProgress = this.get('bridgeUserNamePingIntervalProgress'), bridgeUsernamePingMaxTime = this.get('bridgeUsernamePingMaxTime'); + + if (bridgeIp !== null && bridgeUserNamePingIntervalProgress < 100) { + Em.$.ajax('http://' + bridgeIp + '/api', { + data: JSON.stringify({"devicetype": "huegasm"}), + contentType: 'application/json', + type: 'POST' + }).done(function (result, status) { + if (status === 'success') { + if (!result[0].error) { + self.set('bridgeUsername', result[0].success.username); + localStorage.setItem('huegasm.bridgeUsername', result[0].success.username); + clearInterval(self.get('bridgePingIntervalHandle')); + self.set('bridgePingIntervalHandle', null); + } + self.set('bridgeAuthenticateError', result[0].internalipaddress); + } + + self.set('bridgeAuthenticateReachedStatus', status); + }); + + this.incrementProperty('bridgeUserNamePingIntervalProgress', this.get('bridgeUsernamePingIntervalTime')/bridgeUsernamePingMaxTime*100); + } else { + clearInterval(this.get('bridgePingIntervalHandle')); + this.set('bridgePingIntervalHandle', null); + } + }, + + isAuthenticating: function(){ + return this.get('bridgePingIntervalHandle') !== null; + }.property('bridgePingIntervalHandle') +}); diff --git a/app/components/huegasm-app.js b/app/components/huegasm-app.js new file mode 100644 index 0000000..c56af83 --- /dev/null +++ b/app/components/huegasm-app.js @@ -0,0 +1,18 @@ +import Em from 'ember'; + +export default Em.Component.extend({ + bridgeIp: null, + + bridgeUsername: null, + + init: function(){ + this._super(); + if(localStorage.getItem('huegasm.bridgeIp')){ + this.set('bridgeIp', localStorage.getItem('huegasm.bridgeIp')); + } + + if(localStorage.getItem('huegasm.bridgeUsername')){ + this.set('bridgeUsername', localStorage.getItem('huegasm.bridgeUsername')); + } + } +}); diff --git a/app/index.html b/app/index.html new file mode 100644 index 0000000..cddb02a --- /dev/null +++ b/app/index.html @@ -0,0 +1,25 @@ + + + + + + Huegasm + + + + {{content-for 'head'}} + + + + + {{content-for 'head-footer'}} + + + {{content-for 'body'}} + + + + + {{content-for 'body-footer'}} + + diff --git a/app/router.js b/app/router.js new file mode 100644 index 0000000..cef554b --- /dev/null +++ b/app/router.js @@ -0,0 +1,11 @@ +import Ember from 'ember'; +import config from './config/environment'; + +var Router = Ember.Router.extend({ + location: config.locationType +}); + +Router.map(function() { +}); + +export default Router; diff --git a/app/routes/.gitkeep b/app/routes/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/app/styles/app.scss b/app/styles/app.scss new file mode 100644 index 0000000..25cc68d --- /dev/null +++ b/app/styles/app.scss @@ -0,0 +1,20 @@ +@import 'ember-paper'; + +#pressButtonBridgeImg { + width: 200px; + margin: 0 auto 0 auto; + display: inherit; +} + +.noTextDecoration { + text-decoration: none; +} + +md-switch { + display: inline-flex; + margin: 0; +} + +.controlTxt { + margin-top: 20px; +} diff --git a/app/templates/application.hbs b/app/templates/application.hbs new file mode 100644 index 0000000..d53e9c5 --- /dev/null +++ b/app/templates/application.hbs @@ -0,0 +1 @@ +{{huegasm-app}} \ No newline at end of file diff --git a/app/templates/components/bridge-controls.hbs b/app/templates/components/bridge-controls.hbs new file mode 100644 index 0000000..025b568 --- /dev/null +++ b/app/templates/components/bridge-controls.hbs @@ -0,0 +1,5 @@ +
Lights:
+{{#paper-switch checked=lightsOn}} {{lightsOnTxt}} {{/paper-switch}} + +
Brightness:
+{{paper-slider flex=true min='0' max='255' value=lightsBrightness}} diff --git a/app/templates/components/bridge-finder.hbs b/app/templates/components/bridge-finder.hbs new file mode 100644 index 0000000..1825b5b --- /dev/null +++ b/app/templates/components/bridge-finder.hbs @@ -0,0 +1,14 @@ +{{#unless bridgeUsername}} + {{#if bridgeIp}} + + {{paper-progress-linear warn=true value=bridgeUserNamePingIntervalProgress}} + {{#if isAuthenticating}} +

Press the button on your bridge to authenticate this application.

+ {{else}} +

You failed to press the button. RETRY

+ {{/if}} + {{else}} + {{paper-progress-circular}} +

Trying to find your bridge's IP.

+ {{/if}} +{{/unless}} \ No newline at end of file diff --git a/app/templates/components/huegasm-app.hbs b/app/templates/components/huegasm-app.hbs new file mode 100644 index 0000000..708f5b9 --- /dev/null +++ b/app/templates/components/huegasm-app.hbs @@ -0,0 +1,5 @@ +{{#if bridgeUsername}} + {{bridge-controls bridgeIp=bridgeIp bridgeUsername=bridgeUsername}} +{{else}} + {{bridge-finder bridgeIp=bridgeIp bridgeUsername=bridgeUsername}} +{{/if}} diff --git a/assets/pressButtonBridge.psd b/assets/pressButtonBridge.psd new file mode 100644 index 0000000000000000000000000000000000000000..5dcf20d2baf0065ab9bd39d9a072394564e92d59 GIT binary patch literal 184293 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

6^Ip#i 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 literal 0 HcmV?d00001 diff --git a/bower.json b/bower.json new file mode 100644 index 0000000..bd86c1c --- /dev/null +++ b/bower.json @@ -0,0 +1,18 @@ +{ + "name": "huegasm", + "dependencies": { + "ember": "1.13.6", + "ember-cli-shims": "ember-cli/ember-cli-shims#0.0.3", + "ember-cli-test-loader": "ember-cli-test-loader#0.1.3", + "ember-data": "1.13.7", + "ember-load-initializers": "ember-cli/ember-load-initializers#0.1.5", + "ember-qunit": "0.4.9", + "ember-qunit-notifications": "0.0.7", + "ember-resolver": "~0.1.18", + "jquery": "^1.11.1", + "loader.js": "ember-cli/loader.js#3.2.0", + "qunit": "~1.18.0", + "hammerjs": "~2.0.4", + "bootstrap-sass": "~3.3.5" + } +} diff --git a/config/environment.js b/config/environment.js new file mode 100644 index 0000000..dd06d31 --- /dev/null +++ b/config/environment.js @@ -0,0 +1,57 @@ +/* jshint node: true */ + +module.exports = function(environment) { + var ENV = { + modulePrefix: 'huegasm', + environment: environment, + baseURL: '/', + locationType: 'auto', + EmberENV: { + FEATURES: { + // Here you can enable experimental features on an ember canary build + // e.g. 'with-controller': true + } + }, + + APP: { + // Here you can pass flags/options to your application instance + // when it is created + }, + + contentSecurityPolicy: { + 'default-src': "'none'", + 'script-src': "'self'", + 'font-src': "'self' fonts.gstatic.com", + 'connect-src': "'self' *", + 'img-src': "'self' data:", + 'media-src': "'self'", + 'style-src': "'self' 'unsafe-inline'" + } + }; + + if (environment === 'development') { + // ENV.APP.LOG_RESOLVER = true; + // ENV.APP.LOG_ACTIVE_GENERATION = true; + // ENV.APP.LOG_TRANSITIONS = true; + // ENV.APP.LOG_TRANSITIONS_INTERNAL = true; + // ENV.APP.LOG_VIEW_LOOKUPS = true; + } + + if (environment === 'test') { + // Testem prefers this... + ENV.baseURL = '/'; + ENV.locationType = 'none'; + + // keep test console output quieter + ENV.APP.LOG_ACTIVE_GENERATION = false; + ENV.APP.LOG_VIEW_LOOKUPS = false; + + ENV.APP.rootElement = '#ember-testing'; + } + + if (environment === 'production') { + + } + + return ENV; +}; diff --git a/ember-cli-build.js b/ember-cli-build.js new file mode 100644 index 0000000..44a5026 --- /dev/null +++ b/ember-cli-build.js @@ -0,0 +1,26 @@ +/* global require, module */ +var EmberApp = require('ember-cli/lib/broccoli/ember-app'); + +module.exports = function(defaults) { + var app = new EmberApp(defaults, { + // Add options here + }); + + app.import('bower_components/bootstrap-sass/assets/javascripts/bootstrap/collapse.js'); + app.import('bower_components/bootstrap-sass/assets/stylesheets/_bootstrap.scss'); + + // Use `app.import` to add additional libraries to the generated + // output files. + // + // If you need to use different assets in different + // environments, specify an object as the first parameter. That + // object's keys should be the environment name and the values + // should be the asset to use in that environment. + // + // If the library that you are including contains AMD or ES6 + // modules that you would like to import into your application + // please specify an object with the list of modules as keys + // along with the exports of each module as its value. + + return app.toTree(); +}; diff --git a/package.json b/package.json new file mode 100644 index 0000000..897398b --- /dev/null +++ b/package.json @@ -0,0 +1,44 @@ +{ + "name": "huegasm", + "version": "0.0.0", + "description": "Small description for huegasm goes here", + "private": true, + "directories": { + "doc": "doc", + "test": "tests" + }, + "scripts": { + "start": "ember server", + "build": "ember build", + "test": "ember test" + }, + "repository": "", + "engines": { + "node": ">= 0.10.0" + }, + "author": "", + "license": "MIT", + "devDependencies": { + "broccoli-asset-rev": "^2.0.2", + "ember-cli": "1.13.7", + "ember-cli-app-version": "0.4.0", + "ember-cli-babel": "^5.0.0", + "ember-cli-content-security-policy": "0.4.0", + "ember-cli-dependency-checker": "^1.0.0", + "ember-cli-htmlbars": "0.7.9", + "ember-cli-htmlbars-inline-precompile": "^0.1.1", + "ember-cli-ic-ajax": "0.2.1", + "ember-cli-inject-live-reload": "^1.3.0", + "ember-cli-qunit": "0.3.20", + "ember-cli-release": "0.2.3", + "ember-cli-sass": "4.0.1", + "ember-cli-sri": "^1.0.1", + "ember-cli-uglify": "^1.0.1", + "ember-cli-windows-addon": "^1.2.2", + "ember-data": "1.13.7", + "ember-disable-proxy-controllers": "^1.0.0", + "ember-export-application-global": "^1.0.3", + "ember-paper": "0.2.6", + "liquid-fire": "0.21.2" + } +} diff --git a/public/assets/images/pressButtonBridge.png b/public/assets/images/pressButtonBridge.png new file mode 100644 index 0000000000000000000000000000000000000000..595d29474efec2b9990a6ec2da2d370b6535612a GIT binary patch literal 7578 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 literal 0 HcmV?d00001 diff --git a/public/crossdomain.xml b/public/crossdomain.xml new file mode 100644 index 0000000..0c16a7a --- /dev/null +++ b/public/crossdomain.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 0000000..f591645 --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,3 @@ +# http://www.robotstxt.org +User-agent: * +Disallow: diff --git a/testem.json b/testem.json new file mode 100644 index 0000000..0f35392 --- /dev/null +++ b/testem.json @@ -0,0 +1,12 @@ +{ + "framework": "qunit", + "test_page": "tests/index.html?hidepassed", + "disable_watching": true, + "launch_in_ci": [ + "PhantomJS" + ], + "launch_in_dev": [ + "PhantomJS", + "Chrome" + ] +} diff --git a/tests/.jshintrc b/tests/.jshintrc new file mode 100644 index 0000000..6ec0b7c --- /dev/null +++ b/tests/.jshintrc @@ -0,0 +1,52 @@ +{ + "predef": [ + "document", + "window", + "location", + "setTimeout", + "$", + "-Promise", + "define", + "console", + "visit", + "exists", + "fillIn", + "click", + "keyEvent", + "triggerEvent", + "find", + "findWithAssert", + "wait", + "DS", + "andThen", + "currentURL", + "currentPath", + "currentRouteName" + ], + "node": false, + "browser": false, + "boss": true, + "curly": true, + "debug": false, + "devel": false, + "eqeqeq": true, + "evil": true, + "forin": false, + "immed": false, + "laxbreak": false, + "newcap": true, + "noarg": true, + "noempty": false, + "nonew": false, + "nomen": false, + "onevar": false, + "plusplus": false, + "regexp": false, + "undef": true, + "sub": true, + "strict": false, + "white": false, + "eqnull": true, + "esnext": true, + "unused": true +} diff --git a/tests/helpers/resolver.js b/tests/helpers/resolver.js new file mode 100644 index 0000000..28f4ece --- /dev/null +++ b/tests/helpers/resolver.js @@ -0,0 +1,11 @@ +import Resolver from 'ember/resolver'; +import config from '../../config/environment'; + +var resolver = Resolver.create(); + +resolver.namespace = { + modulePrefix: config.modulePrefix, + podModulePrefix: config.podModulePrefix +}; + +export default resolver; diff --git a/tests/helpers/start-app.js b/tests/helpers/start-app.js new file mode 100644 index 0000000..0f7aab1 --- /dev/null +++ b/tests/helpers/start-app.js @@ -0,0 +1,18 @@ +import Ember from 'ember'; +import Application from '../../app'; +import config from '../../config/environment'; + +export default function startApp(attrs) { + var application; + + var attributes = Ember.merge({}, config.APP); + attributes = Ember.merge(attributes, attrs); // use defaults, but you can override; + + Ember.run(function() { + application = Application.create(attributes); + application.setupForTesting(); + application.injectTestHelpers(); + }); + + return application; +} diff --git a/tests/index.html b/tests/index.html new file mode 100644 index 0000000..32ad896 --- /dev/null +++ b/tests/index.html @@ -0,0 +1,33 @@ + + + + + + Huegasm Tests + + + + {{content-for 'head'}} + {{content-for 'test-head'}} + + + + + + {{content-for 'head-footer'}} + {{content-for 'test-head-footer'}} + + + + {{content-for 'body'}} + {{content-for 'test-body'}} + + + + + + + {{content-for 'body-footer'}} + {{content-for 'test-body-footer'}} + + diff --git a/tests/integration/components/bridge-controls-test.js b/tests/integration/components/bridge-controls-test.js new file mode 100644 index 0000000..ef74d03 --- /dev/null +++ b/tests/integration/components/bridge-controls-test.js @@ -0,0 +1,26 @@ +import { moduleForComponent, test } from 'ember-qunit'; +import hbs from 'htmlbars-inline-precompile'; + +moduleForComponent('bridge-controls', 'Integration | Component | bridge controls', { + integration: true +}); + +test('it renders', function(assert) { + assert.expect(2); + + // Set any properties with this.set('myProperty', 'value'); + // Handle any actions with this.on('myAction', function(val) { ... }); + + this.render(hbs`{{bridge-controls}}`); + + assert.equal(this.$().text().trim(), ''); + + // Template block usage: + this.render(hbs` + {{#bridge-controls}} + template block text + {{/bridge-controls}} + `); + + assert.equal(this.$().text().trim(), 'template block text'); +}); diff --git a/tests/integration/components/bridge-finder-test.js b/tests/integration/components/bridge-finder-test.js new file mode 100644 index 0000000..c42803d --- /dev/null +++ b/tests/integration/components/bridge-finder-test.js @@ -0,0 +1,26 @@ +import { moduleForComponent, test } from 'ember-qunit'; +import hbs from 'htmlbars-inline-precompile'; + +moduleForComponent('bridge-finder', 'Integration | Component | bridge finder', { + integration: true +}); + +test('it renders', function(assert) { + assert.expect(2); + + // Set any properties with this.set('myProperty', 'value'); + // Handle any actions with this.on('myAction', function(val) { ... }); + + this.render(hbs`{{bridge-finder}}`); + + assert.equal(this.$().text().trim(), ''); + + // Template block usage: + this.render(hbs` + {{#bridge-finder}} + template block text + {{/bridge-finder}} + `); + + assert.equal(this.$().text().trim(), 'template block text'); +}); diff --git a/tests/integration/components/huegasm-app-test.js b/tests/integration/components/huegasm-app-test.js new file mode 100644 index 0000000..53484b6 --- /dev/null +++ b/tests/integration/components/huegasm-app-test.js @@ -0,0 +1,26 @@ +import { moduleForComponent, test } from 'ember-qunit'; +import hbs from 'htmlbars-inline-precompile'; + +moduleForComponent('huegasm-app', 'Integration | Component | huegasm app', { + integration: true +}); + +test('it renders', function(assert) { + assert.expect(2); + + // Set any properties with this.set('myProperty', 'value'); + // Handle any actions with this.on('myAction', function(val) { ... }); + + this.render(hbs`{{huegasm-app}}`); + + assert.equal(this.$().text().trim(), ''); + + // Template block usage: + this.render(hbs` + {{#huegasm-app}} + template block text + {{/huegasm-app}} + `); + + assert.equal(this.$().text().trim(), 'template block text'); +}); diff --git a/tests/test-helper.js b/tests/test-helper.js new file mode 100644 index 0000000..e6cfb70 --- /dev/null +++ b/tests/test-helper.js @@ -0,0 +1,6 @@ +import resolver from './helpers/resolver'; +import { + setResolver +} from 'ember-qunit'; + +setResolver(resolver); diff --git a/tests/unit/.gitkeep b/tests/unit/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/vendor/.gitkeep b/vendor/.gitkeep new file mode 100644 index 0000000..e69de29