robeaux 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (87) hide show
  1. checksums.yaml +4 -4
  2. data/Gruntfile.js +43 -0
  3. data/Makefile +11 -2
  4. data/README.markdown +2 -0
  5. data/css/main.css +1 -0
  6. data/css/style.css +113 -24
  7. data/css/themes/blackboard.css +1 -0
  8. data/css/themes/dark.css +1 -0
  9. data/css/themes/gray.css +1 -0
  10. data/css/themes/whiteboard.css +1 -0
  11. data/images/bullet-connections-2.png +0 -0
  12. data/images/bullet-connections.png +0 -0
  13. data/images/bullet-devices-2.png +0 -0
  14. data/images/bullet-devices.png +0 -0
  15. data/images/devices-image-2.png +0 -0
  16. data/images/devices-image.png +0 -0
  17. data/images/logo-robeaux.png +0 -0
  18. data/images/robots-icon_03.png +0 -0
  19. data/index.html +15 -8
  20. data/js/controllers/widget_editor_ctrl.js +44 -0
  21. data/js/controllers/widgets_ctrl.js +40 -0
  22. data/js/directives/widget.js +50 -0
  23. data/js/router.js +5 -0
  24. data/js/services/themes.js +9 -5
  25. data/js/services/widgets.js +86 -0
  26. data/js/vendor/angular-route.min.js +1 -2
  27. data/js/vendor/angular.min.js +208 -206
  28. data/js/widgets/attitude.html +32 -0
  29. data/js/widgets/attitude.js +27 -0
  30. data/js/widgets/mindwave.html +51 -0
  31. data/js/widgets/mindwave.js +23 -0
  32. data/less/app.less +21 -0
  33. data/less/objects/buttons.less +32 -0
  34. data/less/objects/connections.less +28 -0
  35. data/less/objects/device.less +30 -0
  36. data/less/objects/forms.less +29 -0
  37. data/less/objects/list.less +27 -0
  38. data/less/objects/nav.less +33 -0
  39. data/less/objects/robot.less +43 -0
  40. data/less/objects/themes.less +18 -0
  41. data/less/objects/widgets.less +85 -0
  42. data/less/support/buttons.less +39 -0
  43. data/less/support/container.less +9 -0
  44. data/less/support/forms.less +18 -0
  45. data/less/support/mixins.less +3 -0
  46. data/less/themes/blackboard.less +158 -0
  47. data/less/themes/dark.less +148 -0
  48. data/less/themes/default.less +52 -0
  49. data/less/themes/gray.less +121 -0
  50. data/less/themes/whiteboard.less +152 -0
  51. data/less/vendor/elements.less +156 -0
  52. data/less/vendor/normalize.less +425 -0
  53. data/less/vendor/semantic-grid.less +67 -0
  54. data/less/views/devices.less +47 -0
  55. data/less/views/robots.less +132 -0
  56. data/less/views/themes.less +31 -0
  57. data/less/views/widgets.less +50 -0
  58. data/package.json +6 -3
  59. data/partials/device.html +66 -57
  60. data/partials/index.html +12 -6
  61. data/partials/robot.html +104 -51
  62. data/partials/themes.html +32 -29
  63. data/partials/widget_editor.html +68 -0
  64. data/robeaux.gemspec +1 -1
  65. data/test/controllers/device_commands_ctrl.js +129 -0
  66. data/test/controllers/device_events_ctrl.js +82 -0
  67. data/test/controllers/index_ctrl.js +48 -0
  68. data/test/controllers/nav_ctrl.js +40 -0
  69. data/test/controllers/robot_commands_ctrl.js +127 -0
  70. data/test/controllers/robot_ctrl.js +62 -0
  71. data/test/controllers/themes_ctrl.js +96 -0
  72. data/test/controllers/widget_editor_ctrl.js +111 -0
  73. data/test/controllers/widgets_ctrl.js +74 -0
  74. data/test/functions/functions.js +30 -0
  75. data/test/karma.conf.js +3 -7
  76. data/test/karma_test_all.conf.js +23 -0
  77. data/test/karma_test_controllers.conf.js +19 -0
  78. data/test/karma_test_functions.conf.js +14 -0
  79. data/test/karma_test_services.conf.js +17 -0
  80. data/test/services/themes.js +122 -0
  81. data/test/services/widgets.js +104 -0
  82. data/test/support/themes.json +9 -0
  83. data/test/support/widgets.json +18 -0
  84. data/test/vendor/angular-mocks.js +13 -13
  85. data/test/vendor/jquery.js +8 -8
  86. metadata +69 -3
  87. data/test/main.js +0 -248
@@ -944,7 +944,7 @@ var i,
944
944
  identifier = characterEncoding.replace( "w", "w#" ),
945
945
 
946
946
  // Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors
947
- attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace +
947
+ attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace
948
948
  "*(?:([*^$|!~]?=)" + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]",
949
949
 
950
950
  // Prefer arguments quoted,
@@ -973,13 +973,13 @@ var i,
973
973
  "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
974
974
  "ATTR": new RegExp( "^" + attributes ),
975
975
  "PSEUDO": new RegExp( "^" + pseudos ),
976
- "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
977
- "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
976
+ "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace
977
+ "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace
978
978
  "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
979
979
  "boolean": new RegExp( "^(?:" + booleans + ")$", "i" ),
980
980
  // For use in libraries implementing .is()
981
981
  // We use this for POS matching in `select`
982
- "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
982
+ "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("
983
983
  whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
984
984
  },
985
985
 
@@ -6389,7 +6389,7 @@ function getWidthOrHeight( elem, name, extra ) {
6389
6389
  }
6390
6390
 
6391
6391
  // use the active box-sizing model to add/subtract irrelevant styles
6392
- return ( val +
6392
+ return ( val
6393
6393
  augmentWidthOrHeight(
6394
6394
  elem,
6395
6395
  name,
@@ -6646,8 +6646,8 @@ function buildParams( prefix, obj, traditional, add ) {
6646
6646
  add( prefix, obj );
6647
6647
  }
6648
6648
  }
6649
- jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
6650
- "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
6649
+ jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick "
6650
+ "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave "
6651
6651
  "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
6652
6652
 
6653
6653
  // Handle event binding
@@ -8752,4 +8752,4 @@ if ( typeof window === "object" && typeof window.document === "object" ) {
8752
8752
  window.jQuery = window.$ = jQuery;
8753
8753
  }
8754
8754
 
8755
- })( window );
8755
+ })( window );
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: robeaux
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ron Evans
@@ -13,7 +13,7 @@ authors:
13
13
  autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
- date: 2014-08-04 00:00:00.000000000 Z
16
+ date: 2014-12-05 00:00:00.000000000 Z
17
17
  dependencies: []
18
18
  description: Angular-based front end for the CPPP-IO API spec
19
19
  email:
@@ -23,14 +23,20 @@ extensions: []
23
23
  extra_rdoc_files: []
24
24
  files:
25
25
  - ".gitignore"
26
+ - Gruntfile.js
26
27
  - Makefile
27
28
  - README.markdown
28
29
  - css/fonts.css
30
+ - css/main.css
29
31
  - css/normalize.css
30
32
  - css/style.css
31
33
  - css/themes/artoo.css
34
+ - css/themes/blackboard.css
32
35
  - css/themes/cylon.css
36
+ - css/themes/dark.css
33
37
  - css/themes/gobot.css
38
+ - css/themes/gray.css
39
+ - css/themes/whiteboard.css
34
40
  - fonts/inconsolata-bold-webfont.eot
35
41
  - fonts/inconsolata-bold-webfont.svg
36
42
  - fonts/inconsolata-bold-webfont.ttf
@@ -51,7 +57,15 @@ files:
51
57
  - fonts/robotoslab-bold-webfont.svg
52
58
  - fonts/robotoslab-bold-webfont.ttf
53
59
  - fonts/robotoslab-bold-webfont.woff
60
+ - images/bullet-connections-2.png
61
+ - images/bullet-connections.png
62
+ - images/bullet-devices-2.png
63
+ - images/bullet-devices.png
54
64
  - images/delete.png
65
+ - images/devices-image-2.png
66
+ - images/devices-image.png
67
+ - images/logo-robeaux.png
68
+ - images/robots-icon_03.png
55
69
  - index.html
56
70
  - js/app.js
57
71
  - js/controllers/device_commands_ctrl.js
@@ -61,21 +75,73 @@ files:
61
75
  - js/controllers/robot_commands_ctrl.js
62
76
  - js/controllers/robot_ctrl.js
63
77
  - js/controllers/themes_ctrl.js
78
+ - js/controllers/widget_editor_ctrl.js
79
+ - js/controllers/widgets_ctrl.js
80
+ - js/directives/widget.js
64
81
  - js/router.js
65
82
  - js/services/themes.js
83
+ - js/services/widgets.js
66
84
  - js/vendor/angular-route.min.js
67
85
  - js/vendor/angular.min.js
86
+ - js/widgets/attitude.html
87
+ - js/widgets/attitude.js
88
+ - js/widgets/mindwave.html
89
+ - js/widgets/mindwave.js
90
+ - less/app.less
91
+ - less/objects/buttons.less
92
+ - less/objects/connections.less
93
+ - less/objects/device.less
94
+ - less/objects/forms.less
95
+ - less/objects/list.less
96
+ - less/objects/nav.less
97
+ - less/objects/robot.less
98
+ - less/objects/themes.less
99
+ - less/objects/widgets.less
100
+ - less/support/buttons.less
101
+ - less/support/container.less
102
+ - less/support/forms.less
103
+ - less/support/mixins.less
104
+ - less/themes/blackboard.less
105
+ - less/themes/dark.less
106
+ - less/themes/default.less
107
+ - less/themes/gray.less
108
+ - less/themes/whiteboard.less
109
+ - less/vendor/elements.less
110
+ - less/vendor/normalize.less
111
+ - less/vendor/semantic-grid.less
112
+ - less/views/devices.less
113
+ - less/views/robots.less
114
+ - less/views/themes.less
115
+ - less/views/widgets.less
68
116
  - package.json
69
117
  - partials/device.html
70
118
  - partials/index.html
71
119
  - partials/robot.html
72
120
  - partials/themes.html
121
+ - partials/widget_editor.html
73
122
  - robeaux.gemspec
123
+ - test/controllers/device_commands_ctrl.js
124
+ - test/controllers/device_events_ctrl.js
125
+ - test/controllers/index_ctrl.js
126
+ - test/controllers/nav_ctrl.js
127
+ - test/controllers/robot_commands_ctrl.js
128
+ - test/controllers/robot_ctrl.js
129
+ - test/controllers/themes_ctrl.js
130
+ - test/controllers/widget_editor_ctrl.js
131
+ - test/controllers/widgets_ctrl.js
132
+ - test/functions/functions.js
74
133
  - test/karma.conf.js
75
- - test/main.js
134
+ - test/karma_test_all.conf.js
135
+ - test/karma_test_controllers.conf.js
136
+ - test/karma_test_functions.conf.js
137
+ - test/karma_test_services.conf.js
138
+ - test/services/themes.js
139
+ - test/services/widgets.js
76
140
  - test/support/myDevice.json
77
141
  - test/support/myRobot.json
78
142
  - test/support/robots.json
143
+ - test/support/themes.json
144
+ - test/support/widgets.json
79
145
  - test/vendor/angular-mocks.js
80
146
  - test/vendor/jasmine-jquery.js
81
147
  - test/vendor/jquery.js
data/test/main.js DELETED
@@ -1,248 +0,0 @@
1
- describe('IndexCtrl', function() {
2
- var $scope, $rootScope, $httpBackend, $timeout, testController;
3
- beforeEach(inject(function($injector) {
4
- $timeout = $injector.get('$timeout');
5
- $httpBackend = $injector.get('$httpBackend');
6
- $rootScope = $injector.get('$rootScope');
7
- $scope = $rootScope.$new();
8
-
9
- var $controller = $injector.get('$controller');
10
-
11
- testController = function() {
12
- return $controller('IndexCtrl', {
13
- '$scope': $scope
14
- });
15
- };
16
- }));
17
-
18
- afterEach(function() {
19
- $httpBackend.verifyNoOutstandingExpectation();
20
- $httpBackend.verifyNoOutstandingRequest();
21
- });
22
-
23
- it('IndexCtrl should get array of robots', function() {
24
- var controller = testController();
25
- jasmine.getJSONFixtures().fixturesPath='base/test/support';
26
- var data = loadJSONFixtures('robots.json')['robots.json'];
27
- $httpBackend.expect('GET', '/api/robots').respond(data);
28
- $httpBackend.flush();
29
- expect($scope.robots).toEqual(data.robots);
30
- });
31
- });
32
-
33
- describe('RobotCtrl', function() {
34
- beforeEach(module('robeaux'));
35
- var $scope, $rootScope, $httpBackend, $timeout, $routeParams, testController;
36
- beforeEach(inject(function($injector) {
37
- $timeout = $injector.get('$timeout');
38
- $httpBackend = $injector.get('$httpBackend');
39
- $rootScope = $injector.get('$rootScope');
40
- $routeParams = $injector.get('$routeParams');
41
- $scope = $rootScope.$new();
42
-
43
- var $controller = $injector.get('$controller');
44
-
45
- testController = function() {
46
- return $controller('RobotCtrl', {
47
- '$scope': $scope
48
-
49
- });
50
- };
51
- var controller = testController();
52
-
53
- jasmine.getJSONFixtures().fixturesPath='base/test/support';
54
- $httpBackend.expect('GET', '/api/robots/' + $routeParams.robot).respond(loadJSONFixtures('myRobot.json')['myRobot.json']);
55
- $httpBackend.flush();
56
-
57
- }));
58
-
59
- afterEach(function() {
60
- $httpBackend.verifyNoOutstandingExpectation();
61
- $httpBackend.verifyNoOutstandingRequest();
62
- });
63
-
64
- it('RobotCtrl should get robot data', function() {
65
- var data = loadJSONFixtures('myRobot.json')['myRobot.json'];
66
- data.robot.params = [ { name: '', value: '', type: 'string' } ];
67
- data.robot.results = [];
68
- expect($scope.robot).toEqual(data.robot);
69
- });
70
-
71
- it('RobotCtrl should select device', function (){
72
- var robotArray= [{"name": "robo1"},{"name":"robo2"}];
73
- $scope.robot = robotArray;
74
- $scope.select($scope.robot[1]);
75
- expect($scope.robot[1]).toEqual($scope.device);
76
- expect($scope.robot[0]).toNotEqual($scope.device);
77
- });
78
-
79
-
80
- it('RobotCtrl should keep device selected', function (){
81
- var robotArray= [{"name": "robo1"},{"name":"robo2"}];
82
- $scope.robot = robotArray;
83
- $scope.select($scope.robot);
84
- expect($scope.selected($scope.robot)).toBeTruthy();
85
- });
86
- });
87
-
88
-
89
-
90
- describe('parseParams', function(){
91
-
92
- beforeEach(module('robeaux'));
93
-
94
-
95
- it('should set param name to value', function(){
96
- var form = [
97
- { 'name': 'bool', 'value': 'TRUE', 'type': 'boolean' },
98
- { 'name': 'boole', 'value': 'sadg', 'type': 'boolean' },
99
- { 'name': 'str', 'value': 'isOn', 'type': 'string' },
100
- { 'name': 'num', 'value': 100, 'type': 'number' }
101
- ];
102
- var params = parseParams(form);
103
- expect(params['num']).toEqual(100);
104
- expect(params['bool']).toEqual(true);
105
- expect(params['boole']).toEqual(false);
106
- expect(params['str']).toEqual('isOn');
107
- });
108
-
109
- it('should set empty params to true', function(){
110
- var form = [
111
- { 'name': '', 'value': '', 'type': 'boolean' },
112
- { 'name': '21', 'value': '12','type': 'boolean' },
113
- ];
114
-
115
- expect(paramsAreEmpty([form[1]])).toEqual(false);
116
- expect(paramsAreEmpty([form[0]])).toEqual(true);
117
- });
118
-
119
- });
120
-
121
- describe('RobotCommandsCtrl', function() {
122
- beforeEach(module('robeaux'));
123
- var $scope, $rootScope, $httpBackend, $timeout, testController;
124
- var $injector = angular.injector(['robeaux', 'ng']);
125
- beforeEach(inject(function($injector) {
126
- $timeout = $injector.get('$timeout');
127
- $httpBackend = $injector.get('$httpBackend');
128
- $rootScope = $injector.get('$rootScope');
129
- $scope = $rootScope.$new();
130
-
131
- var $controller = $injector.get('$controller');
132
-
133
- testController = function() {
134
- return $controller('RobotCommandsCtrl', {
135
- '$scope': $scope
136
- });
137
- };
138
- var controller = testController();
139
-
140
- jasmine.getJSONFixtures().fixturesPath='base/test/support';
141
- var data = loadJSONFixtures('myRobot.json')['myRobot.json'];
142
- $scope.robot = data.robot;
143
- }));
144
-
145
- afterEach(function() {
146
- $httpBackend.verifyNoOutstandingExpectation();
147
- $httpBackend.verifyNoOutstandingRequest();
148
- });
149
-
150
- it('RobotCommandsCtrl command should be an empty string', function (){
151
- $scope.command = "";
152
- expect($scope.isDisabled()).toBe(true);
153
- });
154
-
155
- it('RobotCommandsCtrl should add params if last', function (){
156
- expect($scope.robot.params.length).toBe(1)
157
- $scope.addParam($scope.robot);
158
- expect($scope.robot.params.length).toBe(2)
159
- });
160
-
161
- it('RobotCommandsCtrl command should be an empty string', function (){
162
- expect($scope.robot.params.length).toBe(2)
163
- $scope.removeParam($scope.robot);
164
- expect($scope.robot.params.length).toBe(1)
165
- });
166
-
167
- it('RobotCommandsCtrl should get robot command results', function (){
168
- $scope.robot.name = "myRobot";
169
- $scope.command = "relax";
170
- $scope.robot.params= [{'name': 'relax', 'value':'true', 'type':'string'}];
171
- var params = {'relax': 'true'};
172
- var data= {'result': "myRobot says relax"};
173
-
174
- $scope.submit();
175
- $httpBackend.expectPOST('/api/robots/myRobot/commands/relax', params).respond(data);
176
- $httpBackend.flush();
177
- expect($scope.robot.results).toEqual([{'result': "myRobot says relax"}])
178
- });
179
- });
180
-
181
- describe('DeviceCommandsCtrl', function() {
182
- beforeEach(module('robeaux'));
183
- var $scope, $rootScope, $httpBackend, $timeout, testController;
184
- beforeEach(inject(function($injector) {
185
- $timeout = $injector.get('$timeout');
186
- $httpBackend = $injector.get('$httpBackend');
187
- $rootScope = $injector.get('$rootScope');
188
- $scope = $rootScope.$new();
189
-
190
- var $controller = $injector.get('$controller');
191
-
192
- testController = function() {
193
- return $controller('DeviceCommandsCtrl', {
194
- '$scope': $scope
195
- });
196
- };
197
- var controller = testController();
198
-
199
- jasmine.getJSONFixtures().fixturesPath='base/test/support';
200
-
201
- var data = loadJSONFixtures('myDevice.json')['myDevice.json'];
202
-
203
- $scope.device = data[0];
204
- $scope.device.results = [];
205
- $scope.device.params = [{ name: '', value: '', type: 'string' }];
206
- }));
207
-
208
- afterEach(function() {
209
- $httpBackend.verifyNoOutstandingExpectation();
210
- $httpBackend.verifyNoOutstandingRequest();
211
- });
212
-
213
- it('DeviceCommandsCtrl command should be an empty string', function (){
214
- $scope.command = "";
215
- expect($scope.isDisabled()).toBe(true);
216
- });
217
-
218
- it('DeviceCommandsCtrl should add params if last', function (){
219
- expect($scope.device.params.length).toBe(1)
220
- $scope.addParam($scope.device);
221
- expect($scope.device.params.length).toBe(2)
222
- });
223
-
224
- it('DeviceCommandsCtrl command should be an empty string', function (){
225
- $scope.device.params = [
226
- { name: '', value: '', type: 'string' },
227
- { name: '', value: '', type: 'string' }
228
- ];
229
- $scope.removeParam($scope.device);
230
- expect($scope.device.params.length).toBe(1)
231
- });
232
-
233
- it('DeviceCommandsCtrl command should be an empty string', function (){
234
- $scope.robot = {'name':"myRobot"};
235
- $scope.device.name = "led";
236
- $scope.command = "brightness";
237
- $scope.device.params = [{'name': 'brightness', 'value': 255, 'type':'string'}];
238
- var params = {'brightness': 255};
239
- var data= {'result': "brightness is 255"};
240
-
241
- $scope.submit();
242
- $httpBackend.expectPOST('/api/robots/myRobot/devices/led/commands/brightness', params).respond(data);
243
- $httpBackend.flush();
244
- expect($scope.device.results[0]).toEqual({'result': "brightness is 255"})
245
- });
246
-
247
- });
248
-