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,282 @@
1
+ var Discrete = React.createClass({
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
+ <div className="col-md-12 col-sm-12 col-xs-12 table-responsive table_container animated" style={{overflowX: "hide", height: this.props.tableHeight}}>
87
+ <table className="table table-bordered table-striped table-hover" id="resource_table" style={{overflowX: "visible"}}>
88
+ <thead onClick={_.partial(this.props.showTable, "table.discrete")} className="pointer">
89
+ <tr>
90
+ <th className="col-md-12 col-sm-12 col-xs-12 text-center">Discrete Tracking</th>
91
+ </tr>
92
+ </thead>
93
+ <tbody>
94
+ <tr>
95
+ <td className="col-md-12 col-sm-12 col-xs-12">
96
+
97
+ <div className="col-md-4 col-sm-4 col-xs-4 btn-group">
98
+ <a className="btn btn-default" onClick={this.handleEnable}><i className="fa fa-ban fa-fw"></i></a>
99
+ <a className="btn btn-default dropdown-toggle" data-toggle="dropdown" href="#">
100
+ <span className="fa fa-caret-down"></span></a>
101
+ <ul className="dropdown-menu">
102
+ <li><a onClick={self.handleEnable}><i className="fa fa-th-large fa-fw"></i> Enabled</a></li>
103
+ <li><a onClick={self.handleDisable}><i className="fa fa-ban fa-fw"></i> Disabled</a></li>
104
+ </ul>
105
+ </div>
106
+ <div className="col-md-8 col-sm-8 col-xs-8" style={{marginTop: "6px"}}>Discrete tracking system disabled</div>
107
+ </td>
108
+ </tr>
109
+ </tbody>
110
+ </table>
111
+ </div>
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 = <b>NUMBER</b>;
120
+ break;
121
+ case 'LETTER':
122
+ t_x = <b>LETTER</b>;
123
+ break;
124
+ }
125
+ switch(self.state.tracking.t_y) {
126
+ case 'NUMBER':
127
+ t_y = <b>NUMBER</b>;
128
+ break;
129
+ case 'LETTER':
130
+ t_y = <b>LETTER</b>;
131
+ break;
132
+ }
133
+
134
+ return(
135
+ <div className="col-md-12 col-sm-12 col-xs-12 table-responsive table_container animated" style={{overflowX: "hide", height: this.props.tableHeight}}>
136
+ <table className="table table-bordered table-striped table-hover" id="resource_table" style={{overflowX: "visible"}}>
137
+ <thead onClick={_.partial(this.props.showTable, "table.discrete")} className="pointer">
138
+ <tr>
139
+ <th className="col-md-12 col-sm-12 col-xs-12 text-center">Discrete Tracking</th>
140
+ </tr>
141
+ </thead>
142
+ <tbody>
143
+ <tr>
144
+ <td className="col-md-12 col-sm-12 col-xs-12">
145
+
146
+ <div className="col-md-4 col-sm-3 col-xs-4 btn-group">
147
+ <a className="btn btn-default" onClick={this.handleDisable}><i className="fa fa-th-large fa-fw"></i></a>
148
+ <a className="btn btn-default dropdown-toggle" data-toggle="dropdown" href="#">
149
+ <span className="fa fa-caret-down"></span></a>
150
+ <ul className="dropdown-menu">
151
+ <li><a onClick={self.handleEnable}><i className="fa fa-th-large fa-fw"></i> Enabled</a></li>
152
+ <li><a onClick={self.handleDisable}><i className="fa fa-ban fa-fw"></i> Disabled</a></li>
153
+ </ul>
154
+ </div>
155
+
156
+
157
+ <div className="right" data-toggle="collapse" data-target="#collapseExample2">
158
+ <button type="button" className="btn btn-default"><span className="glyphicon glyphicon-chevron-down" aria-hidden="true"></span></button>
159
+ </div>
160
+
161
+ <div className="collapse" id="collapseExample2">
162
+ <div style={{marginTop: "20px", padding: "10px"}}>
163
+ <table className="table table-bordered table-striped table-hover" id="resource_table">
164
+ <tbody>
165
+ <tr>
166
+ <td className="col-md-6 col-sm-6 col-xs-6"><span id="A3">X number</span></td>
167
+ <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
+ <InteractiveLabel
179
+ onKeyPress={self.handleKeyPress}
180
+ onValueChange={self.handleModifyAttribute}
181
+ labelName="value"
182
+ labelValue={self.state.tracking.n_x}
183
+ labelKey="n_x"/>
184
+ </td>
185
+ </tr>
186
+ <tr>
187
+ <td className="col-md-6 col-sm-6 col-xs-6"><span id="A3">Y number</span></td>
188
+ <td className="col-md-6 col-sm-6 col-xs-6">
189
+ <InteractiveLabel
190
+ onKeyPress={self.handleKeyPress}
191
+ onValueChange={self.handleModifyAttribute}
192
+ labelName="value"
193
+ labelValue={self.state.tracking.n_y}
194
+ labelKey="n_y"/>
195
+ </td>
196
+ </tr>
197
+ <tr>
198
+ <td className="col-md-6 col-sm-6 col-xs-6"><span id="A3">Width</span></td>
199
+ <td className="col-md-6 col-sm-6 col-xs-6">
200
+ <InteractiveLabel
201
+ onKeyPress={self.handleKeyPress}
202
+ onValueChange={self.handleModifyAttribute}
203
+ labelName="value"
204
+ labelValue={self.state.tracking.width.toFixed(2)}
205
+ labelKey="width"/>
206
+ </td>
207
+ </tr>
208
+ <tr>
209
+ <td className="col-md-6 col-sm-6 col-xs-6"><span id="A3">Height</span></td>
210
+ <td className="col-md-6 col-sm-6 col-xs-6">
211
+ <InteractiveLabel
212
+ onKeyPress={self.handleKeyPress}
213
+ onValueChange={self.handleModifyAttribute}
214
+ labelName="value"
215
+ labelValue={self.state.tracking.height.toFixed(2)}
216
+ labelKey="height"/>
217
+ </td>
218
+ </tr>
219
+ <tr>
220
+ <td className="col-md-6 col-sm-6 col-xs-6"><span id="A3">X origin</span></td>
221
+ <td className="col-md-6 col-sm-6 col-xs-6">
222
+ <InteractiveLabel
223
+ onKeyPress={self.handleKeyPress}
224
+ onValueChange={self.handleModifyAttribute}
225
+ labelName="value"
226
+ labelValue={self.state.tracking.x.toFixed(2)}
227
+ labelKey="x"/>
228
+ </td>
229
+ </tr>
230
+ <tr>
231
+ <td className="col-md-6 col-sm-6 col-xs-6"><span id="A3">Y origin</span></td>
232
+ <td className="col-md-6 col-sm-6 col-xs-6">
233
+ <InteractiveLabel
234
+ onKeyPress={self.handleKeyPress}
235
+ onValueChange={self.handleModifyAttribute}
236
+ labelName="value"
237
+ labelValue={self.state.tracking.y.toFixed(2)}
238
+ labelKey="y"/>
239
+ </td>
240
+ </tr>
241
+ <tr>
242
+ <td className="col-md-6 col-sm-6 col-xs-6" style={{height: "48px"}}><span id="A3">X type</span></td>
243
+ <td className="col-md-6 col-sm-6 col-xs-6">
244
+ <div className="btn-group dropup">
245
+ <a className="btn btn-default btn-sm" href="#">{t_x}</a>
246
+ <a className="btn btn-default dropdown-toggle btn-sm" data-toggle="dropdown" href="#">
247
+ <span className="fa fa-caret-up"></span></a>
248
+ <ul className="dropdown-menu">
249
+ <li><a onClick={function(){self.handleTypeChange('t_x', 'NUMBER')}}><b>N</b> Number</a></li>
250
+ <li><a onClick={function(){self.handleTypeChange('t_x', 'LETTER')}}><b>L</b> Letter</a></li>
251
+ </ul>
252
+ </div>
253
+ </td>
254
+ </tr>
255
+ <tr>
256
+ <td className="col-md-6 col-sm-6 col-xs-6" style={{height: "48px"}}><span id="A3">Y type</span></td>
257
+ <td className="col-md-6 col-sm-6 col-xs-6">
258
+ <div className="btn-group dropup">
259
+ <a className="btn btn-default btn-sm" href="#">{t_y}</a>
260
+ <a className="btn btn-default dropdown-toggle btn-sm" data-toggle="dropdown" href="#">
261
+ <span className="fa fa-caret-up"></span></a>
262
+ <ul className="dropdown-menu">
263
+ <li><a onClick={function(){self.handleTypeChange('t_y', 'NUMBER')}}><b>N</b> Number</a></li>
264
+ <li><a onClick={function(){self.handleTypeChange('t_y', 'LETTER')}}><b>L</b> Letter</a></li>
265
+ </ul>
266
+ </div>
267
+ </td>
268
+ </tr>
269
+ </tbody>
270
+ </table>
271
+ </div>
272
+ </div>
273
+
274
+ </td>
275
+ </tr>
276
+ </tbody>
277
+ </table>
278
+ </div>
279
+ );
280
+ }
281
+ }
282
+ });
@@ -0,0 +1,54 @@
1
+ var InteractiveLabel = React.createClass({
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
+ <form onSubmit={this.onSubmit}>
35
+ {this.props.id != undefined ?
36
+ <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
+ <input
45
+ className="pointer"
46
+ value={this.state.value}
47
+ onKeyPress={this.props.onKeyPress}
48
+ onChange={this.handleChange}
49
+ onBlur={this.onBlur}/>
50
+ }
51
+ </form>
52
+ )
53
+ }
54
+ });
@@ -0,0 +1,203 @@
1
+
2
+ var ResourceAdd = React.createClass({
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 = <b>S</b>;
88
+ }
89
+ else if(this.state.type == "DYNAMIC") {
90
+ type = <b>D</b>;
91
+ }
92
+
93
+ var proximity = {};
94
+ if(this.state.type == "DYNAMIC")
95
+ proximity = <li onClick={this.handleTrackingProximity}><a href="#"><i className="fa fa-location-arrow fa-fw"></i> Proximity</a></li>;
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
+ <div className="col-md-12 col-sm-12 col-xs-12 table-responsive table_container animated" style={{"overflowX": "hide", height: this.props.tableHeight}}>
136
+ <table className="table table-bordered table-striped table-hover" id="resource_table" style={{"overflowX": "visible"}}>
137
+ <thead onClick={_.partial(this.props.showTable, "table.addResource")} className="pointer">
138
+ <tr>
139
+ <th className="col-md-12 col-sm-12 col-xs-12 text-center">Add resource</th>
140
+ </tr>
141
+ </thead>
142
+ <tbody>
143
+ <tr>
144
+ <td className="col-md-12 col-sm-12 col-xs-12">
145
+ <form onSubmit={this.handleSubmit}>
146
+ <div className="col-md-4 col-sm-4 col-xs-4">
147
+ <input type="text" className="form-control" placeholder="resource-id" value={this.state.name} onChange={this.handleChangeName}/>
148
+ </div>
149
+
150
+ <div className="btn-group">
151
+ <a className="btn btn-default" href="#"><i className={"fa " + model + " fa-fw"}></i></a>
152
+ <a className="btn btn-default dropdown-toggle" data-toggle="dropdown" href="#">
153
+ <span className="fa fa-caret-down"></span>
154
+ </a>
155
+ <ul className="dropdown-menu">
156
+ <li onClick={this.handleChangeModelIMAC}><a href="#"><i className="icon-iMac"></i> iMac</a></li>
157
+ <li onClick={this.handleChangeModelIPHONE}><a href="#"><i className="icon-iPhone"></i> iPhone</a></li>
158
+ <li onClick={this.handleChangeModelIPAD}><a href="#"><i className="icon-iPad"></i> iPad</a></li>
159
+ <li onClick={this.handleChangeModelIBEACON}><a href="#"><i className="icon-iBeacon"></i> iBeacon</a></li>
160
+ <li onClick={this.handleChangeModelADISPLAY}><a href="#"><i className="icon-aDisplay"></i> Ambient Display</a></li>
161
+ <li onClick={this.handleChangeModelTTABLE}><a href="#"><i className="icon-tTable"></i> Touch Table</a></li>
162
+ <li onClick={this.handleChangeModelOTHER}><a href="#"><i className="icon-other"></i> Other</a></li>
163
+ </ul>
164
+ </div>
165
+
166
+ <div className="btn-group">
167
+ <a className="btn btn-default" href="#"><i className={"fa " + tracking + " fa-fw"}></i></a>
168
+ <a className="btn btn-default dropdown-toggle" data-toggle="dropdown" href="#">
169
+ <span className="fa fa-caret-down"></span>
170
+ </a>
171
+ <ul className="dropdown-menu">
172
+ <li onClick={this.handleChangeTrackingContinuous}><a href="#"><i className="fa fa-arrows fa-fw"></i> Continuous</a></li>
173
+ <li onClick={this.handleChangeTrackingDiscrete}> <a href="#"><i className="fa fa-th-large fa-fw"></i> Discrete</a></li>
174
+ {proximity}
175
+ <li onClick={this.handleChangeTrackingNone}> <a href="#"><i className="fa fa-ban fa-fw"></i> Disabled</a></li>
176
+ </ul>
177
+ </div>
178
+
179
+ <div className="btn-group" role="group">
180
+ <div className="btn-group" role="group">
181
+ <button type="button" className="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
182
+ {type}
183
+ <span className="caret"></span>
184
+ </button>
185
+ <ul className="dropdown-menu" role="menu">
186
+ <li onClick={this.handleChangeTypeStatic}> <a href="#"><b>S</b> Static</a></li>
187
+ <li onClick={this.handleChangeTypeDynamic}><a href="#"><b>D</b> Dynamic</a></li>
188
+ </ul>
189
+ </div>
190
+ </div>
191
+
192
+ <button onClick={this.handleSubmit} type="button" className="btn btn-default right">
193
+ <span className="glyphicon glyphicon-plus" aria-hidden="true"></span>
194
+ </button>
195
+ </form>
196
+ </td>
197
+ </tr>
198
+ </tbody>
199
+ </table>
200
+ </div>
201
+ );
202
+ }
203
+ });