robeaux 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gruntfile.js +43 -0
- data/Makefile +11 -2
- data/README.markdown +2 -0
- data/css/main.css +1 -0
- data/css/style.css +113 -24
- data/css/themes/blackboard.css +1 -0
- data/css/themes/dark.css +1 -0
- data/css/themes/gray.css +1 -0
- data/css/themes/whiteboard.css +1 -0
- data/images/bullet-connections-2.png +0 -0
- data/images/bullet-connections.png +0 -0
- data/images/bullet-devices-2.png +0 -0
- data/images/bullet-devices.png +0 -0
- data/images/devices-image-2.png +0 -0
- data/images/devices-image.png +0 -0
- data/images/logo-robeaux.png +0 -0
- data/images/robots-icon_03.png +0 -0
- data/index.html +15 -8
- data/js/controllers/widget_editor_ctrl.js +44 -0
- data/js/controllers/widgets_ctrl.js +40 -0
- data/js/directives/widget.js +50 -0
- data/js/router.js +5 -0
- data/js/services/themes.js +9 -5
- data/js/services/widgets.js +86 -0
- data/js/vendor/angular-route.min.js +1 -2
- data/js/vendor/angular.min.js +208 -206
- data/js/widgets/attitude.html +32 -0
- data/js/widgets/attitude.js +27 -0
- data/js/widgets/mindwave.html +51 -0
- data/js/widgets/mindwave.js +23 -0
- data/less/app.less +21 -0
- data/less/objects/buttons.less +32 -0
- data/less/objects/connections.less +28 -0
- data/less/objects/device.less +30 -0
- data/less/objects/forms.less +29 -0
- data/less/objects/list.less +27 -0
- data/less/objects/nav.less +33 -0
- data/less/objects/robot.less +43 -0
- data/less/objects/themes.less +18 -0
- data/less/objects/widgets.less +85 -0
- data/less/support/buttons.less +39 -0
- data/less/support/container.less +9 -0
- data/less/support/forms.less +18 -0
- data/less/support/mixins.less +3 -0
- data/less/themes/blackboard.less +158 -0
- data/less/themes/dark.less +148 -0
- data/less/themes/default.less +52 -0
- data/less/themes/gray.less +121 -0
- data/less/themes/whiteboard.less +152 -0
- data/less/vendor/elements.less +156 -0
- data/less/vendor/normalize.less +425 -0
- data/less/vendor/semantic-grid.less +67 -0
- data/less/views/devices.less +47 -0
- data/less/views/robots.less +132 -0
- data/less/views/themes.less +31 -0
- data/less/views/widgets.less +50 -0
- data/package.json +6 -3
- data/partials/device.html +66 -57
- data/partials/index.html +12 -6
- data/partials/robot.html +104 -51
- data/partials/themes.html +32 -29
- data/partials/widget_editor.html +68 -0
- data/robeaux.gemspec +1 -1
- data/test/controllers/device_commands_ctrl.js +129 -0
- data/test/controllers/device_events_ctrl.js +82 -0
- data/test/controllers/index_ctrl.js +48 -0
- data/test/controllers/nav_ctrl.js +40 -0
- data/test/controllers/robot_commands_ctrl.js +127 -0
- data/test/controllers/robot_ctrl.js +62 -0
- data/test/controllers/themes_ctrl.js +96 -0
- data/test/controllers/widget_editor_ctrl.js +111 -0
- data/test/controllers/widgets_ctrl.js +74 -0
- data/test/functions/functions.js +30 -0
- data/test/karma.conf.js +3 -7
- data/test/karma_test_all.conf.js +23 -0
- data/test/karma_test_controllers.conf.js +19 -0
- data/test/karma_test_functions.conf.js +14 -0
- data/test/karma_test_services.conf.js +17 -0
- data/test/services/themes.js +122 -0
- data/test/services/widgets.js +104 -0
- data/test/support/themes.json +9 -0
- data/test/support/widgets.json +18 -0
- data/test/vendor/angular-mocks.js +13 -13
- data/test/vendor/jquery.js +8 -8
- metadata +69 -3
- data/test/main.js +0 -248
@@ -0,0 +1,132 @@
|
|
1
|
+
body {
|
2
|
+
background: @body-background-color;
|
3
|
+
font-family: "Roboto", "Helvetica Neue", Helvetica, Arial, sans-serif;
|
4
|
+
color: @body-text-color;
|
5
|
+
}
|
6
|
+
|
7
|
+
.container-wrap {
|
8
|
+
margin-bottom: 30px;
|
9
|
+
}
|
10
|
+
|
11
|
+
.container, .robot, .widgets, .connections, .themes {
|
12
|
+
width: @gridsystem-width;
|
13
|
+
padding:0;
|
14
|
+
.container();
|
15
|
+
}
|
16
|
+
|
17
|
+
.row {
|
18
|
+
background: #fff;
|
19
|
+
padding: 15px 0;
|
20
|
+
margin-top: 10px;
|
21
|
+
.clearfix();
|
22
|
+
}
|
23
|
+
|
24
|
+
.robot-details {
|
25
|
+
.column(12);
|
26
|
+
}
|
27
|
+
|
28
|
+
.robot {
|
29
|
+
|
30
|
+
h2 {
|
31
|
+
.column(12);
|
32
|
+
text-align: center;
|
33
|
+
margin-bottom: 15px;
|
34
|
+
}
|
35
|
+
|
36
|
+
.input, .results {
|
37
|
+
.column(6);
|
38
|
+
}
|
39
|
+
}
|
40
|
+
|
41
|
+
.robot-detail {
|
42
|
+
.widgets {
|
43
|
+
.new-widget-instance {
|
44
|
+
height: 100vh;
|
45
|
+
width: 100%;
|
46
|
+
}
|
47
|
+
|
48
|
+
.active-widgets {
|
49
|
+
|
50
|
+
.add-widget {
|
51
|
+
.column(3);
|
52
|
+
}
|
53
|
+
|
54
|
+
button {
|
55
|
+
font-size: 2em;
|
56
|
+
}
|
57
|
+
|
58
|
+
widget {
|
59
|
+
.column(9);
|
60
|
+
}
|
61
|
+
}
|
62
|
+
|
63
|
+
.panel {
|
64
|
+
margin: 10% auto;
|
65
|
+
width: 600px;
|
66
|
+
|
67
|
+
.type {
|
68
|
+
.column(5);
|
69
|
+
}
|
70
|
+
|
71
|
+
.attrs {
|
72
|
+
.column(7);
|
73
|
+
|
74
|
+
label {
|
75
|
+
.column(4);
|
76
|
+
}
|
77
|
+
|
78
|
+
input {
|
79
|
+
.column(8);
|
80
|
+
}
|
81
|
+
}
|
82
|
+
}
|
83
|
+
}
|
84
|
+
|
85
|
+
.robot-devices {
|
86
|
+
.column(6);
|
87
|
+
}
|
88
|
+
|
89
|
+
.robot-connection {
|
90
|
+
.column(6);
|
91
|
+
}
|
92
|
+
}
|
93
|
+
|
94
|
+
.commands, .device-commands {
|
95
|
+
.param {
|
96
|
+
.row(6);
|
97
|
+
height: 40px;
|
98
|
+
|
99
|
+
input[type='text'] {
|
100
|
+
.column(2,6);
|
101
|
+
}
|
102
|
+
|
103
|
+
select {
|
104
|
+
.column(1.5,6);
|
105
|
+
}
|
106
|
+
|
107
|
+
.close {
|
108
|
+
.column(0.5,6);
|
109
|
+
line-height: 34px;
|
110
|
+
&:hover {
|
111
|
+
color: #f00;
|
112
|
+
cursor: pointer;
|
113
|
+
}
|
114
|
+
}
|
115
|
+
}
|
116
|
+
|
117
|
+
.input>select, &>select {
|
118
|
+
width: 100%;
|
119
|
+
.container-block();
|
120
|
+
margin-bottom: 15px;
|
121
|
+
}
|
122
|
+
|
123
|
+
button {
|
124
|
+
width: 70%;
|
125
|
+
margin-top: 15px;
|
126
|
+
.container-block();
|
127
|
+
}
|
128
|
+
|
129
|
+
table {
|
130
|
+
width: 100%;
|
131
|
+
}
|
132
|
+
}
|
@@ -0,0 +1,31 @@
|
|
1
|
+
.themes {
|
2
|
+
.sidebar {
|
3
|
+
.column(4);
|
4
|
+
}
|
5
|
+
|
6
|
+
.new-theme {
|
7
|
+
.row(4);
|
8
|
+
|
9
|
+
input {
|
10
|
+
.column(3,4);
|
11
|
+
}
|
12
|
+
|
13
|
+
button {
|
14
|
+
.column(1,4);
|
15
|
+
}
|
16
|
+
}
|
17
|
+
|
18
|
+
.editor {
|
19
|
+
.column(8);
|
20
|
+
|
21
|
+
textarea {
|
22
|
+
width: 100%;
|
23
|
+
height: 250px;
|
24
|
+
}
|
25
|
+
}
|
26
|
+
|
27
|
+
.footer {
|
28
|
+
.clearfix();
|
29
|
+
.column(12);
|
30
|
+
}
|
31
|
+
}
|
@@ -0,0 +1,50 @@
|
|
1
|
+
.widgets {
|
2
|
+
.sidebar {
|
3
|
+
.column(3);
|
4
|
+
}
|
5
|
+
|
6
|
+
.new-widget {
|
7
|
+
.row(3);
|
8
|
+
|
9
|
+
input {
|
10
|
+
.column(2, 3);
|
11
|
+
}
|
12
|
+
|
13
|
+
button {
|
14
|
+
.column(1, 3);
|
15
|
+
}
|
16
|
+
}
|
17
|
+
|
18
|
+
.new-attr {
|
19
|
+
.row(9);
|
20
|
+
|
21
|
+
input {
|
22
|
+
.column(5, 9);
|
23
|
+
}
|
24
|
+
|
25
|
+
button {
|
26
|
+
.column(3, 9);
|
27
|
+
}
|
28
|
+
}
|
29
|
+
|
30
|
+
.editor {
|
31
|
+
.column(9);
|
32
|
+
}
|
33
|
+
|
34
|
+
.attrs {
|
35
|
+
.column(9, 9);
|
36
|
+
}
|
37
|
+
|
38
|
+
.field {
|
39
|
+
.column(4.5, 9);
|
40
|
+
|
41
|
+
textarea {
|
42
|
+
width: 100%;
|
43
|
+
min-height: 250px;
|
44
|
+
}
|
45
|
+
}
|
46
|
+
|
47
|
+
.footer {
|
48
|
+
.column(12);
|
49
|
+
}
|
50
|
+
}
|
data/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "robeaux",
|
3
|
-
"version": "0.
|
3
|
+
"version": "0.3.0",
|
4
4
|
"description": "An AngularJS interface for the CPPP-IO API spec",
|
5
5
|
"homepage": "http://cylonjs.com",
|
6
6
|
"bugs": "https://github.com/hybridgroup/robeaux/issues",
|
@@ -11,8 +11,11 @@
|
|
11
11
|
},
|
12
12
|
"license": "Apache 2.0",
|
13
13
|
"devDependencies": {
|
14
|
+
"grunt": "^0.4.5",
|
15
|
+
"grunt-contrib-less": "^0.12.0",
|
16
|
+
"grunt-contrib-watch": "^0.6.1",
|
14
17
|
"karma": "~0.12.16",
|
15
|
-
"karma-
|
16
|
-
"karma-
|
18
|
+
"karma-jasmine": "~0.1.5",
|
19
|
+
"karma-phantomjs-launcher": "~0.1"
|
17
20
|
}
|
18
21
|
}
|
data/partials/device.html
CHANGED
@@ -1,67 +1,76 @@
|
|
1
|
-
<
|
2
|
-
<
|
3
|
-
<
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
<div class="device-commands" ng-controller="DeviceCommandsCtrl">
|
8
|
-
<select ng-model="command" ng-options="cmd for cmd in device.commands">
|
9
|
-
</select>
|
10
|
-
|
11
|
-
<div class="params">
|
12
|
-
<div class="param" ng-repeat="param in device.params">
|
13
|
-
<input placeholder='name' type="text" ng-model="param.name" ng-focus="addParam($last)">
|
14
|
-
<input placeholder='value' type="text" ng-model="param.value" ng-focus="addParam($last)">
|
15
|
-
<select ng-options="type for type in types" ng-model="param.type"></select>
|
16
|
-
<span class="close" ng-click="removeParam($index)">X</span>
|
17
|
-
</div>
|
1
|
+
<section class="device-detail">
|
2
|
+
<div class="row">
|
3
|
+
<div class="device-header">
|
4
|
+
<h2>Commands</h2>
|
5
|
+
<h2>Events</h2>
|
18
6
|
</div>
|
7
|
+
</div>
|
19
8
|
|
20
|
-
|
9
|
+
<div class="row row-device">
|
10
|
+
<div class="container">
|
11
|
+
<div class="device-commands" ng-controller="DeviceCommandsCtrl">
|
12
|
+
<select ng-model="command" ng-options="cmd for cmd in device.commands">
|
13
|
+
</select>
|
21
14
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
15
|
+
<div class="params">
|
16
|
+
<div class="param" ng-repeat="param in device.params">
|
17
|
+
<input placeholder='name' type="text" ng-model="param.name" ng-focus="addParam($last)">
|
18
|
+
<input placeholder='value' type="text" ng-model="param.value" ng-focus="addParam($last)">
|
19
|
+
<select ng-options="type for type in types" ng-model="param.type"></select>
|
20
|
+
<span class="close" ng-click="removeParam($index)">✖</span>
|
21
|
+
</div>
|
22
|
+
</div>
|
26
23
|
|
27
|
-
|
28
|
-
<tr class="result" ng-repeat="entry in device.results">
|
29
|
-
<td>{{entry.result}}</td>
|
30
|
-
</tr>
|
31
|
-
</tbody>
|
32
|
-
</table>
|
33
|
-
</div>
|
24
|
+
<button class="btn btn-run" ng-click="submit()" ng-disabled="isDisabled()">run</button>
|
34
25
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
26
|
+
<table class="results">
|
27
|
+
<thead>
|
28
|
+
<tr>
|
29
|
+
<th>Results</th>
|
30
|
+
</tr>
|
31
|
+
</thead>
|
32
|
+
<tbody>
|
33
|
+
<tr class="result" ng-repeat="entry in device.results">
|
34
|
+
<td>{{entry.result}}</td>
|
35
|
+
</tr>
|
36
|
+
</tbody>
|
37
|
+
</table>
|
38
|
+
</div>
|
39
|
+
|
40
|
+
<div class="device-events" ng-controller="DeviceEventsCtrl">
|
41
|
+
<div class="input">
|
42
|
+
<input type="text" ng-model="eventName" placeholder="event name">
|
43
|
+
<button class="btn btn-robot" ng-click="listen()">listen</button>
|
44
|
+
</div>
|
40
45
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
46
|
+
<div class="listeners-div">
|
47
|
+
<table class="listeners">
|
48
|
+
<thead>
|
49
|
+
<th colspan="2">Listeners</th>
|
50
|
+
</thead>
|
45
51
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
52
|
+
<tbody>
|
53
|
+
<tr class="listener" ng-repeat="(name, listeners) in device.listeners">
|
54
|
+
<td>{{name}}</td>
|
55
|
+
<td class="remove" ng-click="remove(name)">remove</td>
|
56
|
+
</tr>
|
57
|
+
</tbody>
|
58
|
+
</table>
|
59
|
+
</div>
|
53
60
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
61
|
+
<table class="events">
|
62
|
+
<thead>
|
63
|
+
<th colspan="2">Events</th>
|
64
|
+
</thead>
|
58
65
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
+
<tbody>
|
67
|
+
<tr class="event" ng-repeat="event in device.events">
|
68
|
+
<td>{{event.name}}</td>
|
69
|
+
<td>{{event.data}}</td>
|
70
|
+
</tr>
|
71
|
+
</tbody>
|
72
|
+
</table>
|
73
|
+
</div>
|
74
|
+
</div>
|
66
75
|
</div>
|
67
|
-
</
|
76
|
+
</section>
|
data/partials/index.html
CHANGED
@@ -1,11 +1,17 @@
|
|
1
1
|
<div class="robots">
|
2
|
-
<div class="
|
3
|
-
<
|
4
|
-
|
2
|
+
<div class="row" ng-repeat="robot in robots" ng-click="details(robot.name)">
|
3
|
+
<div class="robot">
|
4
|
+
<div class="robot-details">
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
<span class="btn btn-robot btn-big">robot</span>
|
7
|
+
<span class="name">{{robot.name}}</span>
|
8
|
+
|
9
|
+
<div class="details">
|
10
|
+
<span class="bullet-connections"><strong>Connections</strong> {{robot.connections.length}}</span>
|
11
|
+
<span class="bullet-devices"><strong>Devices</strong> {{robot.devices.length}}</span>
|
12
|
+
</div>
|
13
|
+
|
14
|
+
</div>
|
9
15
|
</div>
|
10
16
|
</div>
|
11
17
|
</div>
|
data/partials/robot.html
CHANGED
@@ -1,74 +1,127 @@
|
|
1
1
|
<div class="robot-detail">
|
2
|
-
<div class="robot" ng-class="{'with-commands': (robot.commands.length > 0)}">
|
3
|
-
<span class="icon">robot</span>
|
4
|
-
<span class="name">{{robot.name}}</span>
|
5
2
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
3
|
+
<!-- begin robot section -->
|
4
|
+
<div class="row">
|
5
|
+
<div class="robot" ng-class="{'with-commands': (robot.commands.length > 0)}">
|
6
|
+
<div class="robot-details">
|
7
|
+
<span class="btn btn-robot btn-big">robot</span>
|
8
|
+
<span class="name">{{robot.name}}</span>
|
9
|
+
|
10
|
+
<div class="details">
|
11
|
+
<span class="bullet-connections"><strong>Connections</strong> {{robot.connections.length}}</span>
|
12
|
+
<span class="bullet-devices"><strong>Devices</strong> {{robot.devices.length}}</span>
|
13
|
+
</div>
|
14
|
+
</div>
|
15
|
+
|
16
|
+
<div class="commands" ng-if="(robot.commands.length > 0)" ng-controller="RobotCommandsCtrl">
|
17
|
+
<h2>Commands</h2>
|
18
|
+
<div class="input">
|
19
|
+
<select ng-model="command" ng-options="cmd for cmd in robot.commands">
|
20
|
+
</select>
|
10
21
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
<div class="param" ng-repeat="param in robot.params">
|
19
|
-
<input placeholder='name' type="text" ng-model="param.name" ng-focus="addParam($last)">
|
20
|
-
<input placeholder='value' type="text" ng-model="param.value" ng-focus="addParam($last)">
|
21
|
-
<select ng-options="type for type in types" ng-model="param.type"></select>
|
22
|
-
<span class="close" ng-click="removeParam($index)">X</span>
|
22
|
+
<div class="params">
|
23
|
+
<div class="param" ng-repeat="param in robot.params">
|
24
|
+
<input placeholder='name' type="text" ng-model="param.name" ng-focus="addParam($last)">
|
25
|
+
<input placeholder='value' type="text" ng-model="param.value" ng-focus="addParam($last)">
|
26
|
+
<select ng-options="type for type in types" ng-model="param.type"></select>
|
27
|
+
<span class="close" ng-click="removeParam($index)">✖</span>
|
28
|
+
</div>
|
23
29
|
</div>
|
30
|
+
|
31
|
+
<button class="btn btn-run" ng-click="submit()" ng-disabled="isDisabled()">run</button>
|
24
32
|
</div>
|
25
33
|
|
26
|
-
<
|
27
|
-
|
34
|
+
<div class="results">
|
35
|
+
<table>
|
36
|
+
<thead>
|
37
|
+
<th>Results</th>
|
38
|
+
</thead>
|
28
39
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
<tr class="result" ng-repeat="entry in robot.results">
|
37
|
-
<td>{{entry.result}}</td>
|
38
|
-
</tr>
|
39
|
-
</tbody>
|
40
|
-
</table>
|
40
|
+
<tbody>
|
41
|
+
<tr class="result" ng-repeat="entry in robot.results">
|
42
|
+
<td>{{entry.result}}</td>
|
43
|
+
</tr>
|
44
|
+
</tbody>
|
45
|
+
</table>
|
46
|
+
</div>
|
41
47
|
</div>
|
42
48
|
</div>
|
43
49
|
</div>
|
50
|
+
<!-- end robot section -->
|
44
51
|
|
45
|
-
|
46
|
-
|
52
|
+
<!-- begin widgets -->
|
53
|
+
<div class="row">
|
54
|
+
<div class="widgets" ng-controller="WidgetsCtrl">
|
55
|
+
<div class="new-widget-instance" ng-show="newWidget">
|
56
|
+
<div class="panel">
|
57
|
+
<div class="panel-header">
|
58
|
+
<span class="close" ng-click="newWidget = null"> ✖ </span>
|
59
|
+
<h2>New Widget Instance</h2>
|
60
|
+
</div>
|
47
61
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
ng-click="select(device)">
|
54
|
-
<span class="icon">device</span>
|
55
|
-
<span class="name">{{device.name}}</span>
|
62
|
+
<div class="panel-body">
|
63
|
+
<div class="type">
|
64
|
+
<h3>Widget Type:</h3>
|
65
|
+
<select ng-model="newWidget.base" ng-options="w.name for w in widgets.list"></select>
|
66
|
+
</div>
|
56
67
|
|
57
|
-
|
58
|
-
|
68
|
+
<div class="attrs" ng-if="newWidget.base.attrs.length">
|
69
|
+
<h3>Params:</h3>
|
70
|
+
|
71
|
+
<div class="attr-element" ng-repeat="attr in newWidget.base.attrs">
|
72
|
+
<label>{{attr}}</label>
|
73
|
+
<input type="text" ng-model="newWidget.attrs[attr]">
|
74
|
+
</div>
|
75
|
+
</div>
|
76
|
+
</div>
|
77
|
+
|
78
|
+
<div class="panel-footer">
|
79
|
+
<button class="btn btn-device" ng-click="newActiveWidget(newWidget)">Create</button>
|
80
|
+
<button class="btn btn-run" ng-click="newWidget = null">Close</button>
|
81
|
+
</div>
|
59
82
|
</div>
|
60
83
|
</div>
|
84
|
+
|
85
|
+
<div class="active-widgets">
|
86
|
+
<div class="add-widget">
|
87
|
+
<button class="btn btn-robot btn-big" ng-click="newWidget = { base: '', attrs: {} }"> + </button>
|
88
|
+
</div>
|
89
|
+
|
90
|
+
<widget ng-repeat="widget in activeWidgets" data-name="{{widget.name}}" data-attrs="{{widget.attrs}}">
|
91
|
+
<span class="close" ng-click="removeWidget($index)"> ✖ </span>
|
92
|
+
</widget>
|
93
|
+
</div>
|
61
94
|
</div>
|
95
|
+
</div>
|
96
|
+
<!-- end widgets -->
|
62
97
|
|
63
|
-
|
64
|
-
<div class="connection" ng-repeat="connection in robot.connections">
|
65
|
-
<span class="icon">connection</span>
|
66
|
-
<span class="name">{{connection.name}}</span>
|
98
|
+
<div ng-show="device" ng-include="'/partials/device.html'"></div>
|
67
99
|
|
68
|
-
|
69
|
-
|
100
|
+
<!-- begin connections -->
|
101
|
+
<section class="row">
|
102
|
+
<div class="connections">
|
103
|
+
<div class="robot-devices">
|
104
|
+
<div class="device" ng-class="{selected: selected(device)}" ng-repeat="device in robot.devices">
|
105
|
+
<button ng-click="select(device)" class="btn btn-device">device</button>
|
106
|
+
<span class="name">{{device.name}}</span>
|
107
|
+
|
108
|
+
<div class="details">
|
109
|
+
<span>{{device.connection}}</span>
|
110
|
+
</div>
|
111
|
+
</div>
|
112
|
+
</div>
|
113
|
+
|
114
|
+
<div class="robot-connections">
|
115
|
+
<div class="connection" ng-repeat="connection in robot.connections">
|
116
|
+
<span class="btn btn-connect">connection</span>
|
117
|
+
<span class="name">{{connection.name}}</span>
|
118
|
+
|
119
|
+
<div class="details">
|
120
|
+
<span ng-if="connection.port">{{connection.port}}</span>
|
121
|
+
</div>
|
70
122
|
</div>
|
71
123
|
</div>
|
72
124
|
</div>
|
73
125
|
</section>
|
126
|
+
<!-- end connections -->
|
74
127
|
</div>
|
data/partials/themes.html
CHANGED
@@ -1,39 +1,42 @@
|
|
1
|
-
<div class="
|
2
|
-
<div class="
|
3
|
-
<
|
1
|
+
<div class="row">
|
2
|
+
<div class="themes">
|
3
|
+
<div class="sidebar">
|
4
|
+
<h2>Themes</h2>
|
4
5
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
<
|
6
|
+
<div class="new-theme">
|
7
|
+
<input type="text" ng-model="name" placeholder="new theme name">
|
8
|
+
<button ng-click="add(name)" class="btn btn-device">Add</button>
|
9
|
+
</div>
|
10
|
+
|
11
|
+
<div class="list">
|
12
|
+
<div class="theme"
|
13
|
+
ng-repeat="theme in themes.list | filter:{custom: true}"
|
14
|
+
ng-click="edit(theme)"
|
15
|
+
ng-class="{selected: (editing === theme)}">
|
16
|
+
{{theme.name}}
|
17
|
+
<span class="close" ng-if="theme.custom" ng-click="remove(theme.name)">✖</span>
|
18
|
+
</div>
|
12
19
|
</div>
|
13
|
-
</div>
|
14
20
|
|
15
|
-
<div class="new-theme">
|
16
|
-
<input type="text" ng-model="name" placeholder="new theme name">
|
17
|
-
<button ng-click="add(name)">add new theme</button>
|
18
21
|
</div>
|
19
|
-
</div>
|
20
22
|
|
21
|
-
|
22
|
-
|
23
|
+
<div class="editor">
|
24
|
+
<h2>Editor</h2>
|
23
25
|
|
24
|
-
|
25
|
-
|
26
|
-
|
26
|
+
<textarea ng-disabled="!editing" ng-model="editing.css" ng-blur="themes.save()" placeholder="write your css here">
|
27
|
+
</textarea>
|
28
|
+
</div>
|
27
29
|
|
28
|
-
|
29
|
-
|
30
|
-
|
30
|
+
<div class="footer">
|
31
|
+
<button class="btn btn-save" ng-click="themes.save()">save</button>
|
32
|
+
<button class="btn btn-reset" ng-click="themes.reset()">reset</button>
|
31
33
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
34
|
+
<div class="selector">
|
35
|
+
<span>use theme: </span>
|
36
|
+
<select ng-model="themes.active"
|
37
|
+
ng-options="theme.name for theme in themes.list">
|
38
|
+
</select>
|
39
|
+
</div>
|
37
40
|
</div>
|
38
41
|
</div>
|
39
|
-
</div>
|
42
|
+
</div>
|