rocketjob_mission_control 1.2.4 → 2.0.0.rc1

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/LICENSE.txt +201 -0
  3. data/README.md +85 -0
  4. data/Rakefile +12 -18
  5. data/app/assets/javascripts/rocket_job_mission_control/application.js +3 -0
  6. data/app/assets/javascripts/rocket_job_mission_control/base.js.coffee +9 -12
  7. data/app/assets/javascripts/rocket_job_mission_control/datatable.js.coffee +31 -0
  8. data/app/assets/javascripts/rocket_job_mission_control/dirmon_entries.js.coffee +0 -1
  9. data/app/assets/stylesheets/rocket_job_mission_control/application.scss +2 -0
  10. data/app/assets/stylesheets/rocket_job_mission_control/base.scss +310 -357
  11. data/app/assets/stylesheets/rocket_job_mission_control/bootstrap_and_overrides.scss +474 -3
  12. data/app/assets/stylesheets/rocket_job_mission_control/callout.scss +57 -12
  13. data/app/assets/stylesheets/rocket_job_mission_control/jobs.scss +3 -2
  14. data/app/assets/stylesheets/rocket_job_mission_control/worker_processes.scss +9 -0
  15. data/app/controllers/rocket_job_mission_control/active_processes_controller.rb +26 -0
  16. data/app/controllers/rocket_job_mission_control/dirmon_entries/index_filters_controller.rb +50 -0
  17. data/app/controllers/rocket_job_mission_control/dirmon_entries_controller.rb +11 -14
  18. data/app/controllers/rocket_job_mission_control/jobs/failures_controller.rb +2 -2
  19. data/app/controllers/rocket_job_mission_control/jobs/index_filters_controller.rb +69 -0
  20. data/app/controllers/rocket_job_mission_control/jobs_controller.rb +10 -12
  21. data/app/controllers/rocket_job_mission_control/workers/index_filters_controller.rb +50 -0
  22. data/app/controllers/rocket_job_mission_control/workers_controller.rb +14 -5
  23. data/app/datatables/rocket_job_mission_control/active_processes_datatable.rb +79 -0
  24. data/app/datatables/rocket_job_mission_control/completed_jobs_datatable.rb +26 -0
  25. data/app/datatables/rocket_job_mission_control/dirmon_entries_datatable.rb +95 -0
  26. data/app/datatables/rocket_job_mission_control/interrupted_jobs_datatable.rb +25 -0
  27. data/app/datatables/rocket_job_mission_control/jobs_datatable.rb +95 -0
  28. data/app/datatables/rocket_job_mission_control/queued_jobs_datatable.rb +22 -0
  29. data/app/datatables/rocket_job_mission_control/running_jobs_datatable.rb +35 -0
  30. data/app/datatables/rocket_job_mission_control/scheduled_jobs_datatable.rb +30 -0
  31. data/app/datatables/rocket_job_mission_control/workers_datatable.rb +127 -0
  32. data/app/helpers/rocket_job_mission_control/application_helper.rb +21 -2
  33. data/app/helpers/rocket_job_mission_control/dirmon_entries_helper.rb +7 -0
  34. data/app/helpers/rocket_job_mission_control/jobs_helper.rb +9 -26
  35. data/app/helpers/rocket_job_mission_control/workers_helper.rb +18 -6
  36. data/app/interactors/rocket_job_mission_control/dirmon_entries/search.rb +19 -0
  37. data/app/interactors/rocket_job_mission_control/jobs/search.rb +19 -0
  38. data/app/interactors/rocket_job_mission_control/workers/search.rb +19 -0
  39. data/app/models/job_failures.rb +5 -5
  40. data/app/views/layouts/rocket_job_mission_control/application.html.haml +22 -22
  41. data/app/views/layouts/rocket_job_mission_control/partials/_header.html.haml +33 -18
  42. data/app/views/layouts/rocket_job_mission_control/partials/_sidebar.html.haml +11 -24
  43. data/app/views/rocket_job_mission_control/active_processes/index.html.haml +24 -0
  44. data/app/views/rocket_job_mission_control/dirmon_entries/_form.html.haml +11 -10
  45. data/app/views/rocket_job_mission_control/dirmon_entries/_properties.html.haml +6 -3
  46. data/app/views/rocket_job_mission_control/dirmon_entries/_sidebar.html.haml +27 -0
  47. data/app/views/rocket_job_mission_control/dirmon_entries/_status.html.haml +0 -3
  48. data/app/views/rocket_job_mission_control/dirmon_entries/edit.html.haml +3 -7
  49. data/app/views/rocket_job_mission_control/dirmon_entries/index.html.haml +17 -10
  50. data/app/views/rocket_job_mission_control/dirmon_entries/index_filters/disabled.html.haml +17 -0
  51. data/app/views/rocket_job_mission_control/dirmon_entries/index_filters/enabled.html.haml +17 -0
  52. data/app/views/rocket_job_mission_control/dirmon_entries/index_filters/failed.html.haml +17 -0
  53. data/app/views/rocket_job_mission_control/dirmon_entries/index_filters/pending.html.haml +17 -0
  54. data/app/views/rocket_job_mission_control/dirmon_entries/new.html.haml +5 -8
  55. data/app/views/rocket_job_mission_control/dirmon_entries/show.html.haml +18 -22
  56. data/app/views/rocket_job_mission_control/jobs/_sidebar.html.haml +28 -0
  57. data/app/views/rocket_job_mission_control/jobs/failures/index.html.haml +2 -2
  58. data/app/views/rocket_job_mission_control/jobs/index.html.haml +23 -10
  59. data/app/views/rocket_job_mission_control/jobs/index_filters/aborted.html.haml +22 -0
  60. data/app/views/rocket_job_mission_control/jobs/index_filters/completed.html.haml +23 -0
  61. data/app/views/rocket_job_mission_control/jobs/index_filters/failed.html.haml +22 -0
  62. data/app/views/rocket_job_mission_control/jobs/index_filters/paused.html.haml +22 -0
  63. data/app/views/rocket_job_mission_control/jobs/index_filters/queued.html.haml +23 -0
  64. data/app/views/rocket_job_mission_control/jobs/index_filters/running.html.haml +24 -0
  65. data/app/views/rocket_job_mission_control/jobs/index_filters/scheduled.html.haml +23 -0
  66. data/app/views/rocket_job_mission_control/jobs/show.html.haml +5 -8
  67. data/app/views/rocket_job_mission_control/workers/_sidebar.html.haml +20 -0
  68. data/app/views/rocket_job_mission_control/workers/index.html.haml +36 -59
  69. data/app/views/rocket_job_mission_control/workers/index_filters/paused.html.haml +37 -0
  70. data/app/views/rocket_job_mission_control/workers/index_filters/running.html.haml +37 -0
  71. data/app/views/rocket_job_mission_control/workers/index_filters/starting.html.haml +37 -0
  72. data/app/views/rocket_job_mission_control/workers/index_filters/stopping.html.haml +37 -0
  73. data/config/routes.rb +28 -5
  74. data/lib/rocket_job_mission_control/engine.rb +2 -0
  75. data/lib/rocket_job_mission_control/version.rb +1 -1
  76. data/spec/controllers/application_controller_spec.rb +1 -1
  77. data/spec/controllers/dirmon_entries_controller_spec.rb +35 -97
  78. data/spec/controllers/jobs/failures_controller_spec.rb +4 -4
  79. data/spec/controllers/jobs_controller_spec.rb +10 -80
  80. data/spec/dummy/config/environments/development.rb +7 -7
  81. data/spec/dummy/config/environments/test.rb +9 -9
  82. data/spec/dummy/log/test.log +5446 -23487
  83. data/spec/helpers/application_helper_spec.rb +58 -0
  84. data/spec/helpers/jobs_helper_spec.rb +0 -65
  85. data/spec/helpers/slices_helper_spec.rb +1 -1
  86. data/spec/helpers/workers_helper_spec.rb +1 -1
  87. metadata +64 -44
  88. data/MIT-LICENSE +0 -20
  89. data/app/assets/javascripts/rocket_job_mission_control/jobs.js.coffee +0 -11
  90. data/app/views/rocket_job_mission_control/dirmon_entries/_list.html.haml +0 -31
  91. data/app/views/rocket_job_mission_control/jobs/_list.html.haml +0 -35
  92. data/app/views/rocket_job_mission_control/jobs/running.html.haml +0 -37
  93. data/spec/dummy/log/development.log +0 -0
  94. data/spec/views/workers/index.html.haml_spec.rb +0 -23
@@ -1,6 +1,9 @@
1
+ html, body, #wrapper, #wrapper > .container-fluid, #main, .row.row-offcanvas.row-offcanvas-left {
2
+ height: 100%
3
+ }
4
+
1
5
  #wrapper {
2
- height: 100%;
3
- overflow: hidden;
6
+ background-color: #f7f7f7;
4
7
  }
5
8
 
6
9
  .footer {
@@ -10,451 +13,401 @@
10
13
  padding-top:20px;
11
14
  }
12
15
 
13
- body.rocket_job {
14
- padding: 0;
15
-
16
- #queue { height: 100%; }
17
-
18
- .job-list {
19
- height: 100%;
20
- min-height: 768px;
21
- border-right: 1px solid #ddd;
22
- }
23
-
24
- .job-status {
25
- padding: 0 3em;
26
- height: 100%;
27
- background-color: #fff;
28
- overflow: scroll;
29
- padding-bottom: 100px;
30
-
31
- .lead {
32
- color: #50555b;
33
- float: left;
34
- margin-top: 1em;
35
- vertical-align: middle;
36
- }
16
+ table.datatable {
17
+ border-collapse: collapse;
18
+ }
37
19
 
38
- p {
39
- font-size: 14px;
40
- color: #666;
41
- }
20
+ .dataTables_wrapper {
21
+ margin-top: 2em;
22
+ }
42
23
 
43
- .welcome_screen {
44
- text-align: center;
45
- margin-top: 2%;
24
+ .dt-reload {
25
+ margin: 1em 0;
26
+ }
46
27
 
47
- h1 { margin-bottom: 10px; }
48
- p { font-size: 16px; }
49
- }
28
+ table.dataTable thead .sorting_asc:after {
29
+ content: "\e155";
30
+ }
50
31
 
51
- .job-actions {
52
- float: left;
53
- margin-top: 23px;
54
- margin-left: 20px;
32
+ table.dataTable thead .sorting:after, table.dataTable thead .sorting_asc:after, table.dataTable thead .sorting_desc:after {
33
+ position: absolute;
34
+ top: 8px;
35
+ left: 8px;
36
+ display: block;
37
+ font-family: 'Glyphicons Halflings';
38
+ opacity: 0.5;
39
+ }
55
40
 
56
- .btn { padding: 2px 6px; }
57
- }
41
+ table.dataTable thead > tr > th {
42
+ padding-left: 30px;
43
+ }
58
44
 
59
- .pagination-buttons {
60
- float: left;
61
- margin-top: 23px;
62
- margin-left: 20px;
63
- }
45
+ .job-list {
46
+ height: 100%;
47
+ min-height: 768px;
48
+ }
64
49
 
65
- .job-state {
66
- margin-left: 20px;
67
- padding: 0;
68
- font-size: 12px;
69
- margin-top: 25px;
70
- vertical-align: middle;
71
- float: left;
50
+ .job-status {
51
+ .lead {
52
+ color: #50555b;
53
+ float: left;
54
+ margin-top: 1em;
55
+ vertical-align: middle;
56
+ }
72
57
 
73
- .left {
74
- float: left;
75
- text-shadow: 0 2px 3px #000;
76
- background-color: #404650;
77
- color: #fff;
78
- padding: 2px 6px;
79
- border-top-left-radius: 3px;
80
- border-bottom-left-radius: 3px;
81
- }
58
+ p {
59
+ font-size: 14px;
60
+ color: #666;
61
+ }
82
62
 
83
- .right {
84
- float: left;
85
- color: #fff;
86
- padding: 2px 6px;
87
- border-top-right-radius: 3px;
88
- border-bottom-right-radius: 3px;
89
- }
63
+ .welcome_screen {
64
+ text-align: center;
65
+ margin-top: 2%;
90
66
 
91
- .queued, .pending { background-color: darkgrey; }
92
- .running { background-color: #337ab7; }
93
- .completed, .enabled { background-color: green; }
94
- .paused, .disabled { background-color: orange; }
95
- .failed { background-color: red; }
96
- .aborted { background-color: darkorange; }
97
- }
67
+ h1 { margin-bottom: 10px; }
68
+ p { font-size: 16px; }
69
+ }
98
70
 
99
- .priority {
100
- display: inline-block;
101
- vertical-align: middle;
102
- float: right;
103
- margin-top: 20px;
71
+ .job-actions {
72
+ float: left;
73
+ margin-top: 23px;
74
+ margin-left: 20px;
104
75
 
105
- .form-control {
106
- width: 47px;
107
- height: 34px;
108
- }
109
- }
110
-
111
- .priority-set {
112
- float: right;
113
- padding: 7px 14px;
114
- font-weight: bold;
115
- border-top-left-radius: 0;
116
- border-bottom-left-radius: 0;
117
- }
76
+ .btn { padding: 2px 6px; }
118
77
  }
119
78
 
120
- /* Header Styles */
121
-
122
- #header {
123
- padding: 5px;
124
- background-color: dimgrey;//#526A95;
125
- border-bottom: 1px solid #ddd;
79
+ .pagination-buttons {
80
+ float: left;
81
+ margin-top: 23px;
82
+ margin-left: 20px;
83
+ }
126
84
 
127
- .first { left: 15px; }
128
- .last { right: 15px; }
85
+ .job-state {
86
+ margin-left: 20px;
87
+ padding: 0;
88
+ font-size: 12px;
89
+ margin-top: 25px;
90
+ vertical-align: middle;
91
+ float: left;
129
92
 
130
- .btn {
93
+ .left {
94
+ float: left;
95
+ text-shadow: 0 2px 3px #000;
96
+ background-color: #404650;
131
97
  color: #fff;
132
- position: absolute;
133
- z-index: 2;
98
+ padding: 2px 6px;
99
+ border-top-left-radius: 3px;
100
+ border-bottom-left-radius: 3px;
134
101
  }
135
102
 
136
- .brand {
137
- font-size: 23px;
138
- text-align: center;
139
-
140
- a {
141
- display: inline-block;
142
- color: orange;
143
- font-weight: bold;
144
-
145
- }
146
-
147
- a:hover, a:active {
148
- text-decoration: none;
149
- }
150
-
151
-
152
- span {
153
- display: inline-block;
154
- position: relative;
155
- left: -3px;
156
- color: orangered;
157
- font-weight: bold;
158
- }
103
+ .right {
104
+ float: left;
105
+ color: #fff;
106
+ padding: 2px 6px;
107
+ border-top-right-radius: 3px;
108
+ border-bottom-right-radius: 3px;
159
109
  }
160
- }
161
-
162
- /* Toggle Styles */
163
110
 
164
- #wrapper {
165
- padding-left: 0;
166
- -webkit-transition: all 0.5s ease;
167
- -moz-transition: all 0.5s ease;
168
- -o-transition: all 0.5s ease;
169
- transition: all 0.5s ease;
111
+ .queued, .pending { background-color: darkgrey; }
112
+ .running { background-color: #337ab7; }
113
+ .completed, .enabled { background-color: green; }
114
+ .paused, .disabled { background-color: orange; }
115
+ .failed { background-color: red; }
116
+ .aborted { background-color: darkorange; }
170
117
  }
171
118
 
172
- #wrapper.toggled { padding-left: 250px; }
119
+ .priority {
120
+ display: inline-block;
121
+ vertical-align: middle;
122
+ float: right;
123
+ margin-top: 20px;
173
124
 
174
- #sidebar-wrapper {
175
- z-index: 1000;
176
- position: fixed;
177
- left: 215px;
178
- width: 0;
179
- height: 100%;
180
- margin-left: -215px;
181
- overflow-y: auto;
182
- background: #4D628A;
183
- -webkit-transition: all 0.5s ease;
184
- -moz-transition: all 0.5s ease;
185
- -o-transition: all 0.5s ease;
186
- transition: all 0.5s ease;
187
- border-right: 1px solid #fff;
188
-
189
- .active {
190
- background-color: rgba(255, 255, 255, 0.2);
125
+ .form-control {
126
+ width: 47px;
127
+ height: 34px;
191
128
  }
192
129
  }
193
130
 
194
- #wrapper.toggled #sidebar-wrapper {
195
- width: 250px;
196
- border: 0;
197
- }
198
-
199
- #page-content-wrapper {
200
- width: 100%;
201
- height: 100%;
202
- position: absolute;
203
- overflow: auto;
131
+ .priority-set {
132
+ float: right;
133
+ padding: 7px 14px;
134
+ font-weight: bold;
135
+ border-top-left-radius: 0;
136
+ border-bottom-left-radius: 0;
204
137
  }
138
+ }
205
139
 
206
- #wrapper.toggled #page-content-wrapper {
207
- position: absolute;
208
- margin-right: -215px;
209
- }
140
+ #content {
141
+ margin-top: 60px;
142
+ padding: 20px;
143
+ }
210
144
 
211
- /* Sidebar Styles */
145
+ #main {
146
+ padding-left: 0;
147
+ }
212
148
 
213
- .sidebar-nav {
214
- position: absolute;
215
- top: 0;
216
- width: 215px;
217
- margin: 0;
218
- padding: 0;
219
- list-style: none;
149
+ .white-background{
150
+ background-color: #fff;
151
+ }
220
152
 
221
- li {
222
- text-indent: 20px;
223
- line-height: 40px;
153
+ /* Sidebar */
224
154
 
225
- a {
226
- display: block;
227
- text-decoration: none;
228
- color: #C3D3E3;
155
+ #sidebar {
156
+ padding:0px;
157
+ padding-top:15px;
158
+ margin-top: 5em;
159
+ }
229
160
 
230
- &:hover {
231
- text-decoration: none;
232
- color: #fff;
233
- background: rgba(255,255,255,0.2);
234
- }
161
+ #sidebar, #sidebar a {
162
+ color: #555;
163
+ // text-shadow: 0 0 2px #000;
164
+ background-color: transparent;
165
+ padding-left: 5px;
166
+ }
235
167
 
236
- &:active, &:focus { text-decoration: none; }
237
- }
238
- }
168
+ #sidebar .nav li > a:hover {
169
+ color: #000;
170
+ }
239
171
 
240
- .sidebar-brand {
241
- height: 65px;
242
- font-size: 18px;
243
- line-height: 60px;
244
- }
172
+ @media screen and (max-width: 768px) {
173
+ .row-offcanvas {
174
+ position: relative;
175
+ -webkit-transition: all 0.25s ease-out;
176
+ -moz-transition: all 0.25s ease-out;
177
+ transition: all 0.25s ease-out;
245
178
  }
246
179
 
247
- .sidebar-nav > .sidebar-brand a {
248
- color: #fff;
180
+ .row-offcanvas-left.active {
181
+ left: 33%;
182
+ }
249
183
 
250
- &:hover {
251
- color: #fff;
252
- background: none;
253
- }
184
+ .row-offcanvas-left.active .sidebar-offcanvas {
185
+ left: -33%;
186
+ position: absolute;
187
+ top: 0;
188
+ width: 33%;
189
+ margin-left: 5px;
254
190
  }
255
191
 
256
- .panel-footer {
257
- background-color: #fff;
258
- border-top: 1px solid #eee;
192
+ #sidebar, #sidebar a, #sidebar-footer a {
193
+ padding-left:6px;
259
194
  }
195
+ }
260
196
 
261
- .pagination { margin: 0; }
197
+ /* Header Styles */
262
198
 
263
- @media(min-width:768px) {
264
- #wrapper { padding-left: 215px; }
199
+ #header {
200
+ padding: 5px;
201
+ border-radius: 0;
202
+ border-bottom: 1px solid #ddd;
203
+ position: fixed;
204
+ z-index: 1000;
205
+ right: 0;
206
+ left: 0;
265
207
 
266
- #wrapper.toggled { padding-left: 0; }
208
+ .navbar {
209
+ position: relative;
210
+ }
267
211
 
268
- #sidebar-wrapper { width: 215px; }
212
+ .brand {
213
+ position: absolute;
214
+ left: 50%;
215
+ margin-left: -96px !important;
216
+ display: block;
217
+ }
269
218
 
270
- #wrapper.toggled #sidebar-wrapper { width: 0; }
219
+ .first { left: 15px; }
220
+ .last { right: 15px; }
271
221
 
272
- #page-content-wrapper { position: relative; }
222
+ a.navbar-brand.brand {
223
+ font-size: 28px;
224
+ color: orange;
225
+ font-weight: bold;
226
+ margin-top: -5px;
273
227
 
274
- #wrapper.toggled #page-content-wrapper {
228
+ span {
229
+ display: inline-block;
275
230
  position: relative;
276
- margin-right: 0;
231
+ left: -3px;
232
+ color: orangered;
233
+ font-weight: bold;
277
234
  }
278
235
  }
236
+ }
279
237
 
280
- .btn-blank {
281
- background: none;
282
- border: none;
283
- }
284
-
285
- .menu-close {
286
- position: absolute;
287
- right: 20px;
288
- color: #C3D3E3 !important;
289
-
290
- &:hover { color: #fff !important; }
291
- }
238
+ #jobs-menu {
239
+ margin-top: 1.5em;
240
+ background-color: #B3B3B3;
241
+ border-color: white;
242
+ }
292
243
 
293
- // List View
244
+ // List View
294
245
 
295
- .job-search-box { padding: 20px 100px; }
246
+ .job-search-box { padding: 20px 100px; }
296
247
 
297
- .list {
298
- a { display: block; }
248
+ .list {
249
+ a { display: block; }
299
250
 
300
- .card:nth-child(1) { border-top: 1px solid #ddd; }
301
- .card:nth-child(odd):not(.selected) { background-color: #fff; }
251
+ .card:nth-child(1) { border-top: 1px solid #ddd; }
252
+ .card:nth-child(odd) { background-color: #fff; }
302
253
 
303
- .card {
304
- border-bottom: 1px solid #ddd;
305
- height: 6em;
306
- background-color: #F7F7F7;
254
+ .card {
255
+ border-bottom: 1px solid #ddd;
256
+ border-right: 1px solid #ddd;
257
+ height: 100%;
258
+ background-color: #F7F7F7;
307
259
 
308
- &:hover {
309
- cursor: pointer;
310
- background-color: #E7F4FF;
311
- }
260
+ &:hover {
261
+ cursor: pointer;
262
+ background-color: #DADADA;
263
+ }
312
264
 
313
- .inner {
314
- padding: 0.5em;
315
- position: relative;
316
- margin: 0 0 0 10px;
317
-
318
- .title {
319
- display: inline-block;
320
- vertical-align: middle;
321
-
322
- i.queued { color: darkgrey; }
323
- i.running { color: #337ab7; }
324
- i.completed { color: green; }
325
- i.paused { color: orange; }
326
- i.failed { color: red; }
327
- i.aborted { color: darkorange; }
328
- i.enabled { color: green; }
329
- i.disabled { color: orange; }
330
-
331
- h3 {
332
- font-weight: bold;
333
- margin: 0;
334
- font-size: 16px;
335
- }
336
- }
265
+ .inner {
266
+ padding: 0.5em;
267
+ position: relative;
268
+ margin: 0 0 0 10px;
337
269
 
338
- .lead {
339
- margin-bottom: 5px;
340
- font-size: 18px;
270
+ .title {
271
+ display: inline-block;
272
+ vertical-align: middle;
273
+
274
+ i.queued { color: darkgrey; }
275
+ i.running { color: #337ab7; }
276
+ i.completed { color: green; }
277
+ i.paused { color: orange; }
278
+ i.failed { color: red; }
279
+ i.aborted { color: darkorange; }
280
+ i.enabled { color: green; }
281
+ i.disabled { color: orange; }
282
+
283
+ h3 {
284
+ font-weight: bold;
285
+ margin: 0;
286
+ font-size: 16px;
341
287
  }
288
+ }
342
289
 
343
- .duration, .description {
344
- color: #7C735C;
345
- }
290
+ .lead {
291
+ margin-bottom: 5px;
292
+ font-size: 18px;
293
+ }
346
294
 
347
- .batch {
348
- position: absolute;
349
- right: -10px;
350
- top: -10px;
351
- background-color: #444;
352
- border-radius: 30px;
353
- padding: 4px 10px;
354
- color: #fff;
355
- z-index: 2;
356
- }
295
+ .duration, .description, .completion {
296
+ color: #7C735C;
297
+ font-size: 18px;
298
+ font-weight: 200;
357
299
  }
358
- }
359
300
 
360
- .selected {
361
- border-bottom: 1px solid blue;
362
- border-right: 1px solid blue;
363
- border-top: 1px solid blue;
364
- background-color: lightcyan;
301
+ .batch {
302
+ position: absolute;
303
+ right: -10px;
304
+ top: -10px;
305
+ background-color: #444;
306
+ border-radius: 30px;
307
+ padding: 4px 10px;
308
+ color: #fff;
309
+ z-index: 2;
310
+ }
365
311
  }
312
+ }
366
313
 
314
+ .selected {
315
+ border-bottom: 1px solid blue;
316
+ border-right: 1px solid blue;
317
+ border-top: 1px solid blue;
318
+ background-color: lightcyan;
367
319
  }
368
320
 
369
- // Grid View
321
+ }
322
+
323
+ // Grid View
324
+
325
+ .grid {
326
+ padding: 1em;
327
+ font-size: .85em;
370
328
 
371
- .grid {
329
+ .card {
372
330
  padding: 1em;
373
- font-size: .85em;
374
331
 
375
- .card {
332
+ .inner {
376
333
  padding: 1em;
334
+ border-radius: 3px;
335
+ display: inline-block;
336
+ background: #fff;
337
+ width: 100%;
338
+ min-height: 250px;
339
+ box-sizing: border-box;
340
+ -moz-box-sizing: border-box;
341
+ -webkit-box-sizing: border-box;
342
+ box-shadow: 0px 1px 2px 0 #ccc;
343
+ position: relative;
344
+ text-align: center;
377
345
 
378
- .inner {
379
- padding: 1em;
380
- border-radius: 3px;
381
- display: inline-block;
382
- background: #fff;
383
- width: 100%;
384
- min-height: 250px;
385
- box-sizing: border-box;
386
- -moz-box-sizing: border-box;
387
- -webkit-box-sizing: border-box;
388
- box-shadow: 0px 1px 2px 0 #ccc;
389
- position: relative;
390
- text-align: center;
391
-
392
- .title, .state, .threads, .time { margin-bottom: 10px; }
346
+ .title, .state, .threads, .time { margin-bottom: 10px; }
393
347
 
394
- .actions {
395
- padding: 10px 0;
396
- background: #f5f5f5;
397
- border: 1px solid #eee;
398
- border-radius: 2px;
399
- }
348
+ .actions {
349
+ padding: 10px 0;
350
+ background: #f5f5f5;
351
+ border: 1px solid #eee;
352
+ border-radius: 2px;
353
+ }
400
354
 
401
- .title {
402
- text-align: center;
355
+ .title {
356
+ text-align: center;
403
357
 
404
- h3 {
405
- font-weight: bold;
406
- margin: 0;
407
- font-size: 16px;
408
- }
358
+ h3 {
359
+ font-weight: bold;
360
+ margin: 0;
361
+ font-size: 16px;
409
362
  }
410
363
  }
411
364
  }
412
365
  }
366
+ }
413
367
 
414
- .priority-group {
415
- width: 67px;
416
- margin: 0 auto;
368
+ .priority-group {
369
+ width: 67px;
370
+ margin: 0 auto;
417
371
 
418
- input { text-align: right; }
372
+ input { text-align: right; }
419
373
 
420
- .input-group-btn-vertical {
421
- position: relative;
422
- white-space: nowrap;
423
- width: 1%;
424
- vertical-align: middle;
425
- display: table-cell;
426
- }
374
+ .input-group-btn-vertical {
375
+ position: relative;
376
+ white-space: nowrap;
377
+ width: 1%;
378
+ vertical-align: middle;
379
+ display: table-cell;
380
+ }
427
381
 
428
- .input-group-btn-vertical > .btn {
429
- display: block;
430
- float: none;
431
- width: 100%;
432
- max-width: 100%;
433
- padding: 8px;
434
- margin-left: -1px;
435
- position: relative;
436
- border-radius: 0;
437
- }
382
+ .input-group-btn-vertical > .btn {
383
+ display: block;
384
+ float: none;
385
+ width: 100%;
386
+ max-width: 100%;
387
+ padding: 8px;
388
+ margin-left: -1px;
389
+ position: relative;
390
+ border-radius: 0;
391
+ }
438
392
 
439
- .input-group-btn-vertical > .btn:first-child {
440
- border-right: 0;
441
- }
393
+ .input-group-btn-vertical > .btn:first-child {
394
+ border-right: 0;
395
+ }
442
396
 
443
- .input-group-btn-vertical > .btn:last-child {
444
- margin-top: -2px;
445
- border-right: 0;
446
- }
397
+ .input-group-btn-vertical > .btn:last-child {
398
+ margin-top: -2px;
399
+ border-right: 0;
400
+ }
447
401
 
448
- .input-group-btn-vertical i{
449
- position: absolute;
450
- top: 0;
451
- left: 4px;
452
- }
402
+ .input-group-btn-vertical i{
403
+ position: absolute;
404
+ top: 0;
405
+ left: 4px;
453
406
  }
407
+ }
454
408
 
455
- .code-block { margin-top: 25px; }
409
+ .code-block { margin-top: 25px; }
456
410
 
457
- .status {
458
- padding: 1em;
459
- }
411
+ .status {
412
+ padding: 1em;
460
413
  }