nutella_framework 0.4.27 → 0.4.28

Sign up to get free protection for your applications and to get access to all the features.
Files changed (94) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -1
  3. data/VERSION +1 -1
  4. data/framework_components/order.json +2 -1
  5. data/framework_components/room-places-interface/.gitignore +3 -0
  6. data/framework_components/room-places-interface/LICENSE +21 -0
  7. data/framework_components/room-places-interface/Readme.md +0 -0
  8. data/framework_components/room-places-interface/bower.json +29 -0
  9. data/framework_components/room-places-interface/bower_components/bower-mqttws/.bower.json +23 -0
  10. data/framework_components/room-places-interface/bower_components/bower-mqttws/bower.json +14 -0
  11. data/framework_components/room-places-interface/bower_components/bower-mqttws/mqttws31.js +2081 -0
  12. data/framework_components/room-places-interface/bower_components/bower-mqttws/readme.md +4 -0
  13. data/framework_components/room-places-interface/bower_components/nutella_lib/.bower.json +37 -0
  14. data/framework_components/room-places-interface/bower_components/nutella_lib/LICENSE +21 -0
  15. data/framework_components/room-places-interface/bower_components/nutella_lib/README.md +15 -0
  16. data/framework_components/room-places-interface/bower_components/nutella_lib/bower.json +28 -0
  17. data/framework_components/room-places-interface/bower_components/nutella_lib/examples/browser/mqtt_client_hello_world.html +23 -0
  18. data/framework_components/room-places-interface/bower_components/nutella_lib/examples/browser/nutella_hello_world.html +52 -0
  19. data/framework_components/room-places-interface/bower_components/nutella_lib/examples/node/mqtt_client_hello_world.js +14 -0
  20. data/framework_components/room-places-interface/bower_components/nutella_lib/examples/node/nutella_hello_world.js +38 -0
  21. data/framework_components/room-places-interface/bower_components/nutella_lib/nutella_lib.js +789 -0
  22. data/framework_components/room-places-interface/bower_components/nutella_lib/package.json +30 -0
  23. data/framework_components/room-places-interface/css/animation.css +22 -0
  24. data/framework_components/room-places-interface/css/bootstrap.min.css +5 -0
  25. data/framework_components/room-places-interface/css/cursor.css +22 -0
  26. data/framework_components/room-places-interface/css/font-awesome/css/font-awesome.css +1801 -0
  27. data/framework_components/room-places-interface/css/font-awesome/css/font-awesome.min.css +4 -0
  28. data/framework_components/room-places-interface/css/font-awesome/fonts/FontAwesome.otf +0 -0
  29. data/framework_components/room-places-interface/css/font-awesome/fonts/fontawesome-webfont.eot +0 -0
  30. data/framework_components/room-places-interface/css/font-awesome/fonts/fontawesome-webfont.svg +565 -0
  31. data/framework_components/room-places-interface/css/font-awesome/fonts/fontawesome-webfont.ttf +0 -0
  32. data/framework_components/room-places-interface/css/font-awesome/fonts/fontawesome-webfont.woff +0 -0
  33. data/framework_components/room-places-interface/css/font-awesome/fonts/fontawesome-webfont.woff2 +0 -0
  34. data/framework_components/room-places-interface/css/font-awesome/less/animated.less +34 -0
  35. data/framework_components/room-places-interface/css/font-awesome/less/bordered-pulled.less +16 -0
  36. data/framework_components/room-places-interface/css/font-awesome/less/core.less +13 -0
  37. data/framework_components/room-places-interface/css/font-awesome/less/fixed-width.less +6 -0
  38. data/framework_components/room-places-interface/css/font-awesome/less/font-awesome.less +17 -0
  39. data/framework_components/room-places-interface/css/font-awesome/less/icons.less +596 -0
  40. data/framework_components/room-places-interface/css/font-awesome/less/larger.less +13 -0
  41. data/framework_components/room-places-interface/css/font-awesome/less/list.less +19 -0
  42. data/framework_components/room-places-interface/css/font-awesome/less/mixins.less +27 -0
  43. data/framework_components/room-places-interface/css/font-awesome/less/path.less +15 -0
  44. data/framework_components/room-places-interface/css/font-awesome/less/rotated-flipped.less +20 -0
  45. data/framework_components/room-places-interface/css/font-awesome/less/stacked.less +20 -0
  46. data/framework_components/room-places-interface/css/font-awesome/less/variables.less +606 -0
  47. data/framework_components/room-places-interface/css/font-awesome/scss/_animated.scss +34 -0
  48. data/framework_components/room-places-interface/css/font-awesome/scss/_bordered-pulled.scss +16 -0
  49. data/framework_components/room-places-interface/css/font-awesome/scss/_core.scss +13 -0
  50. data/framework_components/room-places-interface/css/font-awesome/scss/_fixed-width.scss +6 -0
  51. data/framework_components/room-places-interface/css/font-awesome/scss/_icons.scss +596 -0
  52. data/framework_components/room-places-interface/css/font-awesome/scss/_larger.scss +13 -0
  53. data/framework_components/room-places-interface/css/font-awesome/scss/_list.scss +19 -0
  54. data/framework_components/room-places-interface/css/font-awesome/scss/_mixins.scss +27 -0
  55. data/framework_components/room-places-interface/css/font-awesome/scss/_path.scss +15 -0
  56. data/framework_components/room-places-interface/css/font-awesome/scss/_rotated-flipped.scss +20 -0
  57. data/framework_components/room-places-interface/css/font-awesome/scss/_stacked.scss +20 -0
  58. data/framework_components/room-places-interface/css/font-awesome/scss/_variables.scss +606 -0
  59. data/framework_components/room-places-interface/css/font-awesome/scss/font-awesome.scss +17 -0
  60. data/framework_components/room-places-interface/css/icomoon.css +57 -0
  61. data/framework_components/room-places-interface/css/page_layout.css +82 -0
  62. data/framework_components/room-places-interface/fonts/icomoon.eot +0 -0
  63. data/framework_components/room-places-interface/fonts/icomoon.svg +17 -0
  64. data/framework_components/room-places-interface/fonts/icomoon.ttf +0 -0
  65. data/framework_components/room-places-interface/fonts/icomoon.woff +0 -0
  66. data/framework_components/room-places-interface/gulpfile.js +24 -0
  67. data/framework_components/room-places-interface/index.html +73 -0
  68. data/framework_components/room-places-interface/index2.html +1753 -0
  69. data/framework_components/room-places-interface/js/component.js +438 -0
  70. data/framework_components/room-places-interface/js/lib/JSXTransformer-0.12.2.js +15199 -0
  71. data/framework_components/room-places-interface/js/lib/bootstrap.min.js +7 -0
  72. data/framework_components/room-places-interface/js/lib/d3.v3.min.js +5 -0
  73. data/framework_components/room-places-interface/js/lib/jquery-1.10.0.min.js +6 -0
  74. data/framework_components/room-places-interface/js/lib/nutella_lib.js +4145 -0
  75. data/framework_components/room-places-interface/js/lib/react-with-addons-0.12.2.js +19822 -0
  76. data/framework_components/room-places-interface/js/lib/underscore.js +6 -0
  77. data/framework_components/room-places-interface/js/map.js +1593 -0
  78. data/framework_components/room-places-interface/js/position.js +6 -0
  79. data/framework_components/room-places-interface/js/react/dist/beacon.js +30 -0
  80. data/framework_components/room-places-interface/js/react/dist/discrete.js +282 -0
  81. data/framework_components/room-places-interface/js/react/dist/interactive-label.js +54 -0
  82. data/framework_components/room-places-interface/js/react/dist/resource-add.js +203 -0
  83. data/framework_components/room-places-interface/js/react/dist/resource-table.js +227 -0
  84. data/framework_components/room-places-interface/js/react/dist/resource.js +433 -0
  85. data/framework_components/room-places-interface/js/react/src/beacon.js +30 -0
  86. data/framework_components/room-places-interface/js/react/src/discrete.js +282 -0
  87. data/framework_components/room-places-interface/js/react/src/interactive-label.js +54 -0
  88. data/framework_components/room-places-interface/js/react/src/resource-add.js +203 -0
  89. data/framework_components/room-places-interface/js/react/src/resource-table.js +227 -0
  90. data/framework_components/room-places-interface/js/react/src/resource.js +433 -0
  91. data/framework_components/room-places-interface/js/room.js +65 -0
  92. data/framework_components/room-places-interface/nutella.json +6 -0
  93. data/nutella_framework.gemspec +93 -5
  94. metadata +91 -3
@@ -0,0 +1,6 @@
1
+ var Position = {
2
+ top: "Position.top",
3
+ bottom: "Position.bottom",
4
+ right: "Position.right",
5
+ left: "Position.left"
6
+ }
@@ -0,0 +1,30 @@
1
+
2
+ var Beacon = React.createClass({displayName: "Beacon",
3
+ componentDidMount: function () {
4
+
5
+ },
6
+ handleAddPressed: function() {
7
+ var resource = {rid: this.props.beacon.rid, type: "DYNAMIC", model: "IBEACON", proximity: {}};
8
+
9
+ this.props.addResource(resource);
10
+ this.props.updateResource(resource);
11
+ },
12
+ render: function () {
13
+ var self = this;
14
+
15
+ return(
16
+ React.createElement("tr", null,
17
+ React.createElement("td", {className: "col-md-12 col-sm-12 col-xs-12"},
18
+ React.createElement("div", {className: "col-md-4 col-sm-4 col-xs-4"}, React.createElement("div", {className: "vertical-center"}, React.createElement("span", null, this.props.beacon.rid))),
19
+
20
+ React.createElement("div", {className: "right"},
21
+ React.createElement("button", {type: "button", className: "btn btn-default", onClick: this.handleAddPressed}, React.createElement("span", {className: "glyphicon glyphicon-plus", "aria-hidden": "true"}))
22
+ )
23
+
24
+ )
25
+ )
26
+ );
27
+
28
+ }
29
+ });
30
+
@@ -0,0 +1,282 @@
1
+ var Discrete = React.createClass({displayName: "Discrete",
2
+ getInitialState: function () {
3
+ return {
4
+ tracking: undefined
5
+ };
6
+ },
7
+ componentDidMount: function () {
8
+ var self = this;
9
+
10
+ nutella.net.subscribe("location/tracking/discrete/updated", function(message) {
11
+ var tracking = message["tracking"];
12
+ if(_.isEmpty(tracking)) {
13
+ tracking = undefined;
14
+ }
15
+ self.setState({tracking: tracking});
16
+ });
17
+
18
+ nutella.net.request("location/tracking/discrete", {}, function(reply) {
19
+ var tracking = reply["tracking"];
20
+ if(_.isEmpty(tracking)){
21
+ tracking = undefined;
22
+ }
23
+ self.setState({tracking: tracking});
24
+ });
25
+ },
26
+ handleEnable: function () {
27
+ var tracking = {
28
+ x: 0,
29
+ y: 0,
30
+ width: this.props.room.x,
31
+ height: this.props.room.y,
32
+ n_x: 5,
33
+ n_y: 5,
34
+ t_x: 'NUMBER',
35
+ t_y: 'NUMBER'
36
+ };
37
+ nutella.net.publish("location/tracking/discrete/update", {tracking: tracking});
38
+ self.setState({tracking: tracking});
39
+ },
40
+ handleDisable: function () {
41
+ self.setState({tracking: undefined});
42
+ nutella.net.publish("location/tracking/discrete/update", {tracking: {}});
43
+ },
44
+ handleKeyPress: function (event) {
45
+ if(event.which == 13) {
46
+ event.target.textContent = event.target.textContent.trim();
47
+ event.target.blur();
48
+ }
49
+ },
50
+ handleModifyAttribute: function (name, key, value) {
51
+
52
+ var tracking = this.state.tracking;
53
+
54
+ switch(key) {
55
+ case "n_x":
56
+ case "n_y":
57
+ tracking[key] = parseInt(value);
58
+ break;
59
+
60
+ case "width":
61
+ case "height":
62
+ case "x":
63
+ case "y":
64
+ tracking[key] = parseFloat(value);
65
+ break;
66
+ }
67
+
68
+ nutella.net.publish("location/tracking/discrete/update", {tracking: tracking});
69
+
70
+ this.setState({tracking: tracking});
71
+ },
72
+ handleTypeChange: function (axis_type, type) {
73
+ var tracking = this.state.tracking;
74
+
75
+ tracking[axis_type] = type;
76
+
77
+ nutella.net.publish("location/tracking/discrete/update", {tracking: tracking});
78
+
79
+ this.setState({tracking: tracking});
80
+ },
81
+ render: function () {
82
+ var self = this;
83
+
84
+ if(self.state.tracking == undefined) {
85
+ return(
86
+ React.createElement("div", {className: "col-md-12 col-sm-12 col-xs-12 table-responsive table_container animated", style: {overflowX: "hide", height: this.props.tableHeight}},
87
+ React.createElement("table", {className: "table table-bordered table-striped table-hover", id: "resource_table", style: {overflowX: "visible"}},
88
+ React.createElement("thead", {onClick: _.partial(this.props.showTable, "table.discrete"), className: "pointer"},
89
+ React.createElement("tr", null,
90
+ React.createElement("th", {className: "col-md-12 col-sm-12 col-xs-12 text-center"}, "Discrete Tracking")
91
+ )
92
+ ),
93
+ React.createElement("tbody", null,
94
+ React.createElement("tr", null,
95
+ React.createElement("td", {className: "col-md-12 col-sm-12 col-xs-12"},
96
+
97
+ React.createElement("div", {className: "col-md-4 col-sm-4 col-xs-4 btn-group"},
98
+ React.createElement("a", {className: "btn btn-default", onClick: this.handleEnable}, React.createElement("i", {className: "fa fa-ban fa-fw"})),
99
+ React.createElement("a", {className: "btn btn-default dropdown-toggle", "data-toggle": "dropdown", href: "#"},
100
+ React.createElement("span", {className: "fa fa-caret-down"})),
101
+ React.createElement("ul", {className: "dropdown-menu"},
102
+ React.createElement("li", null, React.createElement("a", {onClick: self.handleEnable}, React.createElement("i", {className: "fa fa-th-large fa-fw"}), " Enabled")),
103
+ React.createElement("li", null, React.createElement("a", {onClick: self.handleDisable}, React.createElement("i", {className: "fa fa-ban fa-fw"}), " Disabled"))
104
+ )
105
+ ),
106
+ React.createElement("div", {className: "col-md-8 col-sm-8 col-xs-8", style: {marginTop: "6px"}}, "Discrete tracking system disabled")
107
+ )
108
+ )
109
+ )
110
+ )
111
+ )
112
+ );
113
+ }
114
+ else {
115
+ var t_x = "";
116
+ var t_y = "";
117
+ switch(self.state.tracking.t_x) {
118
+ case 'NUMBER':
119
+ t_x = React.createElement("b", null, "NUMBER");
120
+ break;
121
+ case 'LETTER':
122
+ t_x = React.createElement("b", null, "LETTER");
123
+ break;
124
+ }
125
+ switch(self.state.tracking.t_y) {
126
+ case 'NUMBER':
127
+ t_y = React.createElement("b", null, "NUMBER");
128
+ break;
129
+ case 'LETTER':
130
+ t_y = React.createElement("b", null, "LETTER");
131
+ break;
132
+ }
133
+
134
+ return(
135
+ React.createElement("div", {className: "col-md-12 col-sm-12 col-xs-12 table-responsive table_container animated", style: {overflowX: "hide", height: this.props.tableHeight}},
136
+ React.createElement("table", {className: "table table-bordered table-striped table-hover", id: "resource_table", style: {overflowX: "visible"}},
137
+ React.createElement("thead", {onClick: _.partial(this.props.showTable, "table.discrete"), className: "pointer"},
138
+ React.createElement("tr", null,
139
+ React.createElement("th", {className: "col-md-12 col-sm-12 col-xs-12 text-center"}, "Discrete Tracking")
140
+ )
141
+ ),
142
+ React.createElement("tbody", null,
143
+ React.createElement("tr", null,
144
+ React.createElement("td", {className: "col-md-12 col-sm-12 col-xs-12"},
145
+
146
+ React.createElement("div", {className: "col-md-4 col-sm-3 col-xs-4 btn-group"},
147
+ React.createElement("a", {className: "btn btn-default", onClick: this.handleDisable}, React.createElement("i", {className: "fa fa-th-large fa-fw"})),
148
+ React.createElement("a", {className: "btn btn-default dropdown-toggle", "data-toggle": "dropdown", href: "#"},
149
+ React.createElement("span", {className: "fa fa-caret-down"})),
150
+ React.createElement("ul", {className: "dropdown-menu"},
151
+ React.createElement("li", null, React.createElement("a", {onClick: self.handleEnable}, React.createElement("i", {className: "fa fa-th-large fa-fw"}), " Enabled")),
152
+ React.createElement("li", null, React.createElement("a", {onClick: self.handleDisable}, React.createElement("i", {className: "fa fa-ban fa-fw"}), " Disabled"))
153
+ )
154
+ ),
155
+
156
+
157
+ React.createElement("div", {className: "right", "data-toggle": "collapse", "data-target": "#collapseExample2"},
158
+ React.createElement("button", {type: "button", className: "btn btn-default"}, React.createElement("span", {className: "glyphicon glyphicon-chevron-down", "aria-hidden": "true"}))
159
+ ),
160
+
161
+ React.createElement("div", {className: "collapse", id: "collapseExample2"},
162
+ React.createElement("div", {style: {marginTop: "20px", padding: "10px"}},
163
+ React.createElement("table", {className: "table table-bordered table-striped table-hover", id: "resource_table"},
164
+ React.createElement("tbody", null,
165
+ React.createElement("tr", null,
166
+ React.createElement("td", {className: "col-md-6 col-sm-6 col-xs-6"}, React.createElement("span", {id: "A3"}, "X number")),
167
+ React.createElement("td", {className: "col-md-6 col-sm-6 col-xs-6"},
168
+
169
+ /*
170
+ <span contentEditable="true"
171
+ onKeyUp={self.handleKeyPress}
172
+ onBlur={self.handleBlur}
173
+ ref="n_x">
174
+ {self.state.tracking.n_x}
175
+ </span>
176
+ */
177
+
178
+ React.createElement(InteractiveLabel, {
179
+ onKeyPress: self.handleKeyPress,
180
+ onValueChange: self.handleModifyAttribute,
181
+ labelName: "value",
182
+ labelValue: self.state.tracking.n_x,
183
+ labelKey: "n_x"})
184
+ )
185
+ ),
186
+ React.createElement("tr", null,
187
+ React.createElement("td", {className: "col-md-6 col-sm-6 col-xs-6"}, React.createElement("span", {id: "A3"}, "Y number")),
188
+ React.createElement("td", {className: "col-md-6 col-sm-6 col-xs-6"},
189
+ React.createElement(InteractiveLabel, {
190
+ onKeyPress: self.handleKeyPress,
191
+ onValueChange: self.handleModifyAttribute,
192
+ labelName: "value",
193
+ labelValue: self.state.tracking.n_y,
194
+ labelKey: "n_y"})
195
+ )
196
+ ),
197
+ React.createElement("tr", null,
198
+ React.createElement("td", {className: "col-md-6 col-sm-6 col-xs-6"}, React.createElement("span", {id: "A3"}, "Width")),
199
+ React.createElement("td", {className: "col-md-6 col-sm-6 col-xs-6"},
200
+ React.createElement(InteractiveLabel, {
201
+ onKeyPress: self.handleKeyPress,
202
+ onValueChange: self.handleModifyAttribute,
203
+ labelName: "value",
204
+ labelValue: self.state.tracking.width.toFixed(2),
205
+ labelKey: "width"})
206
+ )
207
+ ),
208
+ React.createElement("tr", null,
209
+ React.createElement("td", {className: "col-md-6 col-sm-6 col-xs-6"}, React.createElement("span", {id: "A3"}, "Height")),
210
+ React.createElement("td", {className: "col-md-6 col-sm-6 col-xs-6"},
211
+ React.createElement(InteractiveLabel, {
212
+ onKeyPress: self.handleKeyPress,
213
+ onValueChange: self.handleModifyAttribute,
214
+ labelName: "value",
215
+ labelValue: self.state.tracking.height.toFixed(2),
216
+ labelKey: "height"})
217
+ )
218
+ ),
219
+ React.createElement("tr", null,
220
+ React.createElement("td", {className: "col-md-6 col-sm-6 col-xs-6"}, React.createElement("span", {id: "A3"}, "X origin")),
221
+ React.createElement("td", {className: "col-md-6 col-sm-6 col-xs-6"},
222
+ React.createElement(InteractiveLabel, {
223
+ onKeyPress: self.handleKeyPress,
224
+ onValueChange: self.handleModifyAttribute,
225
+ labelName: "value",
226
+ labelValue: self.state.tracking.x.toFixed(2),
227
+ labelKey: "x"})
228
+ )
229
+ ),
230
+ React.createElement("tr", null,
231
+ React.createElement("td", {className: "col-md-6 col-sm-6 col-xs-6"}, React.createElement("span", {id: "A3"}, "Y origin")),
232
+ React.createElement("td", {className: "col-md-6 col-sm-6 col-xs-6"},
233
+ React.createElement(InteractiveLabel, {
234
+ onKeyPress: self.handleKeyPress,
235
+ onValueChange: self.handleModifyAttribute,
236
+ labelName: "value",
237
+ labelValue: self.state.tracking.y.toFixed(2),
238
+ labelKey: "y"})
239
+ )
240
+ ),
241
+ React.createElement("tr", null,
242
+ React.createElement("td", {className: "col-md-6 col-sm-6 col-xs-6", style: {height: "48px"}}, React.createElement("span", {id: "A3"}, "X type")),
243
+ React.createElement("td", {className: "col-md-6 col-sm-6 col-xs-6"},
244
+ React.createElement("div", {className: "btn-group dropup"},
245
+ React.createElement("a", {className: "btn btn-default btn-sm", href: "#"}, t_x),
246
+ React.createElement("a", {className: "btn btn-default dropdown-toggle btn-sm", "data-toggle": "dropdown", href: "#"},
247
+ React.createElement("span", {className: "fa fa-caret-up"})),
248
+ React.createElement("ul", {className: "dropdown-menu"},
249
+ React.createElement("li", null, React.createElement("a", {onClick: function(){self.handleTypeChange('t_x', 'NUMBER')}}, React.createElement("b", null, "N"), " Number")),
250
+ React.createElement("li", null, React.createElement("a", {onClick: function(){self.handleTypeChange('t_x', 'LETTER')}}, React.createElement("b", null, "L"), " Letter"))
251
+ )
252
+ )
253
+ )
254
+ ),
255
+ React.createElement("tr", null,
256
+ React.createElement("td", {className: "col-md-6 col-sm-6 col-xs-6", style: {height: "48px"}}, React.createElement("span", {id: "A3"}, "Y type")),
257
+ React.createElement("td", {className: "col-md-6 col-sm-6 col-xs-6"},
258
+ React.createElement("div", {className: "btn-group dropup"},
259
+ React.createElement("a", {className: "btn btn-default btn-sm", href: "#"}, t_y),
260
+ React.createElement("a", {className: "btn btn-default dropdown-toggle btn-sm", "data-toggle": "dropdown", href: "#"},
261
+ React.createElement("span", {className: "fa fa-caret-up"})),
262
+ React.createElement("ul", {className: "dropdown-menu"},
263
+ React.createElement("li", null, React.createElement("a", {onClick: function(){self.handleTypeChange('t_y', 'NUMBER')}}, React.createElement("b", null, "N"), " Number")),
264
+ React.createElement("li", null, React.createElement("a", {onClick: function(){self.handleTypeChange('t_y', 'LETTER')}}, React.createElement("b", null, "L"), " Letter"))
265
+ )
266
+ )
267
+ )
268
+ )
269
+ )
270
+ )
271
+ )
272
+ )
273
+
274
+ )
275
+ )
276
+ )
277
+ )
278
+ )
279
+ );
280
+ }
281
+ }
282
+ });
@@ -0,0 +1,54 @@
1
+ var InteractiveLabel = React.createClass({displayName: "InteractiveLabel",
2
+ getInitialState: function () {
3
+ return {
4
+ value: this.props.labelValue
5
+ };
6
+ },
7
+ componentWillReceiveProps: function(nextProps) {
8
+ this.setState({
9
+ value: nextProps.labelValue
10
+ });
11
+ },
12
+ onBlur: function(event) {
13
+ this.onSubmit();
14
+
15
+ return false;
16
+ },
17
+ onSubmit: function(event) {
18
+ if(this.props.id != undefined) {
19
+ $("#"+this.props.id).attr("v", this.state.value);
20
+ }
21
+ this.props.onValueChange(this.props.labelName, this.props.labelKey, this.state.value);
22
+
23
+ if(event != undefined) {
24
+ event.preventDefault();
25
+ }
26
+
27
+ return false;
28
+ },
29
+ handleChange: function(event) {
30
+ this.setState({value: event.target.value});
31
+ },
32
+ render: function() {
33
+ return (
34
+ React.createElement("form", {onSubmit: this.onSubmit},
35
+ this.props.id != undefined ?
36
+ React.createElement("input", {
37
+ id: this.props.id,
38
+ className: "pointer",
39
+ value: this.state.value,
40
+ onKeyPress: this.props.onKeyPress,
41
+ onChange: this.handleChange,
42
+ onBlur: this.onBlur})
43
+ :
44
+ React.createElement("input", {
45
+ className: "pointer",
46
+ value: this.state.value,
47
+ onKeyPress: this.props.onKeyPress,
48
+ onChange: this.handleChange,
49
+ onBlur: this.onBlur})
50
+
51
+ )
52
+ )
53
+ }
54
+ });
@@ -0,0 +1,203 @@
1
+
2
+ var ResourceAdd = React.createClass({displayName: "ResourceAdd",
3
+ componentDidMount: function () {
4
+
5
+ },
6
+ getInitialState: function() {
7
+ return {name: "", model: "IPAD", type: "DYNAMIC", tracking: "CONTINUOUS"};
8
+ },
9
+ handleSubmit: function(e) {
10
+ e.preventDefault();
11
+
12
+ var resource = {rid: this.state.name, model: this.state.model, type: this.state.type};
13
+
14
+ nutella.net.publish("location/resource/add", resource);
15
+
16
+ if(this.state.tracking == "CONTINUOUS") {
17
+ if(this.state.type == "STATIC")
18
+ resource.proximity_range = 0;
19
+ resource.continuous = {x: this.props.room.x/2, y: this.props.room.y/2};
20
+ }
21
+ else if(this.state.tracking == "DISCRETE") {
22
+ resource.discrete = {x: 0, y: 0};
23
+ }
24
+ else if(this.state.tracking == "PROXIMITY") {
25
+ resource.proximity = {};
26
+ }
27
+
28
+
29
+ nutella.net.publish("location/resource/update", resource);
30
+
31
+ // Clean the form
32
+ this.setState({name: ""});
33
+ },
34
+ handleChangeName: function(e) {
35
+ this.setState({name: event.target.value});
36
+ },
37
+ handleChangeTypeDynamic: function(e) {
38
+ this.setState({type: "DYNAMIC"});
39
+ },
40
+ handleChangeTypeStatic: function(e) {
41
+ this.setState({type: "STATIC"});
42
+ if(this.state.tracking == "PROXIMITY") {
43
+ this.setState({tracking: "NONE"});
44
+ }
45
+ },
46
+ handleChangeTrackingContinuous: function(e) {
47
+ this.setState({tracking: "CONTINUOUS"});
48
+ },
49
+ handleChangeTrackingDiscrete: function(e) {
50
+ this.setState({tracking: "DISCRETE"});
51
+ },
52
+ handleTrackingProximity: function(e) {
53
+ this.setState({tracking: "PROXIMITY"});
54
+ },
55
+ handleChangeTrackingNone: function(e) {
56
+ this.setState({tracking: "NONE"});
57
+ },
58
+ handleChangeModelIMAC: function(e) {
59
+ this.setState({model: "IMAC"});
60
+ },
61
+ handleChangeModelIPHONE: function(e) {
62
+ this.setState({model: "IPHONE"});
63
+ },
64
+ handleChangeModelIPAD: function(e) {
65
+ this.setState({model: "IPAD"});
66
+ },
67
+ handleChangeModelIBEACON: function(e) {
68
+ this.setState({model: "IBEACON"});
69
+ },
70
+ handleChangeModelADISPLAY: function(e) {
71
+ this.setState({model: "ADISPLAY"});
72
+ },
73
+ handleChangeModelTTABLE: function(e) {
74
+ this.setState({model: "TTABLE"});
75
+ },
76
+ handleChangeModelOTHER: function(e) {
77
+ this.setState({model: "OTHER"});
78
+ },
79
+ handleChangeModel: function(e) {
80
+ this.setState({model: event.target.value});
81
+ },
82
+ render: function () {
83
+
84
+ var type = "";
85
+
86
+ if(this.state.type == "STATIC") {
87
+ type = React.createElement("b", null, "S");
88
+ }
89
+ else if(this.state.type == "DYNAMIC") {
90
+ type = React.createElement("b", null, "D");
91
+ }
92
+
93
+ var proximity = {};
94
+ if(this.state.type == "DYNAMIC")
95
+ proximity = React.createElement("li", {onClick: this.handleTrackingProximity}, React.createElement("a", {href: "#"}, React.createElement("i", {className: "fa fa-location-arrow fa-fw"}), " Proximity"));
96
+
97
+ var tracking = "";
98
+
99
+ if(this.state.tracking == "CONTINUOUS")
100
+ tracking = "fa-arrows";
101
+ else if(this.state.tracking == "DISCRETE")
102
+ tracking = "fa-th-large";
103
+ else if(this.state.tracking == "PROXIMITY")
104
+ tracking = "fa-location-arrow";
105
+ else
106
+ tracking = "fa-ban";
107
+
108
+ var model = "";
109
+
110
+ switch(this.state.model) {
111
+ case "IMAC":
112
+ model = "icon-iMac";
113
+ break;
114
+ case "IPHONE":
115
+ model = "icon-iPhone";
116
+ break;
117
+ case "IPAD":
118
+ model = "icon-iPad";
119
+ break;
120
+ case "IBEACON":
121
+ model = "icon-iBeacon";
122
+ break;
123
+ case "ADISPLAY":
124
+ model = "icon-aDisplay";
125
+ break;
126
+ case "TTABLE":
127
+ model = "icon-tTable";
128
+ break;
129
+ case "OTHER":
130
+ model = "icon-other";
131
+ break;
132
+ }
133
+
134
+ return(
135
+ React.createElement("div", {className: "col-md-12 col-sm-12 col-xs-12 table-responsive table_container animated", style: {"overflowX": "hide", height: this.props.tableHeight}},
136
+ React.createElement("table", {className: "table table-bordered table-striped table-hover", id: "resource_table", style: {"overflowX": "visible"}},
137
+ React.createElement("thead", {onClick: _.partial(this.props.showTable, "table.addResource"), className: "pointer"},
138
+ React.createElement("tr", null,
139
+ React.createElement("th", {className: "col-md-12 col-sm-12 col-xs-12 text-center"}, "Add resource")
140
+ )
141
+ ),
142
+ React.createElement("tbody", null,
143
+ React.createElement("tr", null,
144
+ React.createElement("td", {className: "col-md-12 col-sm-12 col-xs-12"},
145
+ React.createElement("form", {onSubmit: this.handleSubmit},
146
+ React.createElement("div", {className: "col-md-4 col-sm-4 col-xs-4"},
147
+ React.createElement("input", {type: "text", className: "form-control", placeholder: "resource-id", value: this.state.name, onChange: this.handleChangeName})
148
+ ),
149
+
150
+ React.createElement("div", {className: "btn-group"},
151
+ React.createElement("a", {className: "btn btn-default", href: "#"}, React.createElement("i", {className: "fa " + model + " fa-fw"})),
152
+ React.createElement("a", {className: "btn btn-default dropdown-toggle", "data-toggle": "dropdown", href: "#"},
153
+ React.createElement("span", {className: "fa fa-caret-down"})
154
+ ),
155
+ React.createElement("ul", {className: "dropdown-menu"},
156
+ React.createElement("li", {onClick: this.handleChangeModelIMAC}, React.createElement("a", {href: "#"}, React.createElement("i", {className: "icon-iMac"}), " iMac")),
157
+ React.createElement("li", {onClick: this.handleChangeModelIPHONE}, React.createElement("a", {href: "#"}, React.createElement("i", {className: "icon-iPhone"}), " iPhone")),
158
+ React.createElement("li", {onClick: this.handleChangeModelIPAD}, React.createElement("a", {href: "#"}, React.createElement("i", {className: "icon-iPad"}), " iPad")),
159
+ React.createElement("li", {onClick: this.handleChangeModelIBEACON}, React.createElement("a", {href: "#"}, React.createElement("i", {className: "icon-iBeacon"}), " iBeacon")),
160
+ React.createElement("li", {onClick: this.handleChangeModelADISPLAY}, React.createElement("a", {href: "#"}, React.createElement("i", {className: "icon-aDisplay"}), " Ambient Display")),
161
+ React.createElement("li", {onClick: this.handleChangeModelTTABLE}, React.createElement("a", {href: "#"}, React.createElement("i", {className: "icon-tTable"}), " Touch Table")),
162
+ React.createElement("li", {onClick: this.handleChangeModelOTHER}, React.createElement("a", {href: "#"}, React.createElement("i", {className: "icon-other"}), " Other"))
163
+ )
164
+ ),
165
+
166
+ React.createElement("div", {className: "btn-group"},
167
+ React.createElement("a", {className: "btn btn-default", href: "#"}, React.createElement("i", {className: "fa " + tracking + " fa-fw"})),
168
+ React.createElement("a", {className: "btn btn-default dropdown-toggle", "data-toggle": "dropdown", href: "#"},
169
+ React.createElement("span", {className: "fa fa-caret-down"})
170
+ ),
171
+ React.createElement("ul", {className: "dropdown-menu"},
172
+ React.createElement("li", {onClick: this.handleChangeTrackingContinuous}, React.createElement("a", {href: "#"}, React.createElement("i", {className: "fa fa-arrows fa-fw"}), " Continuous")),
173
+ React.createElement("li", {onClick: this.handleChangeTrackingDiscrete}, " ", React.createElement("a", {href: "#"}, React.createElement("i", {className: "fa fa-th-large fa-fw"}), " Discrete")),
174
+ proximity,
175
+ React.createElement("li", {onClick: this.handleChangeTrackingNone}, " ", React.createElement("a", {href: "#"}, React.createElement("i", {className: "fa fa-ban fa-fw"}), " Disabled"))
176
+ )
177
+ ),
178
+
179
+ React.createElement("div", {className: "btn-group", role: "group"},
180
+ React.createElement("div", {className: "btn-group", role: "group"},
181
+ React.createElement("button", {type: "button", className: "btn btn-default dropdown-toggle", "data-toggle": "dropdown", "aria-expanded": "false"},
182
+ type,
183
+ React.createElement("span", {className: "caret"})
184
+ ),
185
+ React.createElement("ul", {className: "dropdown-menu", role: "menu"},
186
+ React.createElement("li", {onClick: this.handleChangeTypeStatic}, " ", React.createElement("a", {href: "#"}, React.createElement("b", null, "S"), " Static")),
187
+ React.createElement("li", {onClick: this.handleChangeTypeDynamic}, React.createElement("a", {href: "#"}, React.createElement("b", null, "D"), " Dynamic"))
188
+ )
189
+ )
190
+ ),
191
+
192
+ React.createElement("button", {onClick: this.handleSubmit, type: "button", className: "btn btn-default right"},
193
+ React.createElement("span", {className: "glyphicon glyphicon-plus", "aria-hidden": "true"})
194
+ )
195
+ )
196
+ )
197
+ )
198
+ )
199
+ )
200
+ )
201
+ );
202
+ }
203
+ });