@@ -1,8 +1,9 @@ |
||
1 | 1 |
// Avalanche Theme Stylesheet |
2 | 2 |
// ------------------------------------------------ |
3 | 3 |
|
4 |
-@import "colors.less"; |
|
5 |
- |
|
4 |
+@import "avl2_theme/colors.less"; |
|
5 |
+@import "avl2_theme/buttons.less"; |
|
6 |
+@import "avl2_theme/panel.less"; |
|
6 | 7 |
|
7 | 8 |
html, body { |
8 | 9 |
height: 100%; |
@@ -219,54 +220,6 @@ h4 { |
||
219 | 220 |
margin-bottom: 60px; |
220 | 221 |
} |
221 | 222 |
|
222 |
- |
|
223 |
-// Buttons |
|
224 |
- |
|
225 |
-.btn.btn-success { |
|
226 |
- color: @green; |
|
227 |
- border-color: @green; |
|
228 |
-} |
|
229 |
- |
|
230 |
-.btn { |
|
231 |
- display: inline-block; |
|
232 |
- padding: 4px 12px; |
|
233 |
- margin-bottom: 0; |
|
234 |
- text-align: center; |
|
235 |
- vertical-align: middle; |
|
236 |
- cursor: pointer; |
|
237 |
- color: #333333; |
|
238 |
- background-color: transparent; |
|
239 |
- border: 2px solid @black; |
|
240 |
- border-bottom-color: @black; |
|
241 |
- border-radius: 4px; |
|
242 |
- text-shadow: none; |
|
243 |
- /* Create Mission: */ |
|
244 |
- font-family: Avenir-Book; |
|
245 |
- font-style: normal; |
|
246 |
- color: #333333; |
|
247 |
- text-transform: none; |
|
248 |
-} |
|
249 |
- |
|
250 |
-.btn-large { |
|
251 |
- font-family: Avenir-Black; |
|
252 |
- font-size: 18px; |
|
253 |
- color: #333333; |
|
254 |
- line-height: 20px; |
|
255 |
-} |
|
256 |
- |
|
257 |
-.btn:hover { |
|
258 |
- background: rgba(0, 0, 0, 0.2); |
|
259 |
-} |
|
260 |
- |
|
261 |
-.btn-link { |
|
262 |
- border: none; |
|
263 |
-} |
|
264 |
- |
|
265 |
-.btn-link:hover { |
|
266 |
- border: none; |
|
267 |
- background-color: transparent; |
|
268 |
-} |
|
269 |
- |
|
270 | 223 |
// Progress Bar |
271 | 224 |
|
272 | 225 |
.progress-success.progress-striped .bar, .progress-striped .bar-success { |
@@ -297,77 +250,6 @@ h4 { |
||
297 | 250 |
margin-right: auto; |
298 | 251 |
} |
299 | 252 |
|
300 |
-// Panel |
|
301 |
- |
|
302 |
-.panel.panel-default { |
|
303 |
- margin-top: 15px; |
|
304 |
- .box-theme; |
|
305 |
-} |
|
306 |
- |
|
307 |
-.panel { |
|
308 |
- .panel-heading { |
|
309 |
- background-color: @light-gray; |
|
310 |
- height: 32px; |
|
311 |
- .theme-box-padding; |
|
312 |
- } |
|
313 |
- .panel-heading.panel-divider { |
|
314 |
- border-top: @theme-border; |
|
315 |
- border-bottom: @theme-border; |
|
316 |
- height: 32px; |
|
317 |
- margin-bottom: -2px; |
|
318 |
- background-color: @white; |
|
319 |
- .caret { margin-top: 16px; margin-left: 5px; margin-right: 5px; } |
|
320 |
- } |
|
321 |
- .panel-title { |
|
322 |
- margin-top: 0px; |
|
323 |
- margin-bottom: 0px; |
|
324 |
- .task-text { |
|
325 |
- font-family: Avenir-Medium; |
|
326 |
- font-size: 18px; |
|
327 |
- color: #000000; |
|
328 |
- line-height: 25px; |
|
329 |
- padding-top: 6px; |
|
330 |
- font-weight: 200; |
|
331 |
- } |
|
332 |
- .label { |
|
333 |
- margin-top: 5px; |
|
334 |
- font-family: Avenir-Oblique; |
|
335 |
- color: #000000; |
|
336 |
- font-style: oblique; |
|
337 |
- text-shadow: none; |
|
338 |
- padding: 5px; |
|
339 |
- } |
|
340 |
- .label.label-warning { background-color: #F2CB63; } |
|
341 |
- .caret { |
|
342 |
- float: left; |
|
343 |
- margin-top: 14px; |
|
344 |
- margin-right: 5px; |
|
345 |
- margin-left: 5px; |
|
346 |
- } |
|
347 |
- .task-number { line-height: 36px;} |
|
348 |
- .task-icon { padding-top: 7px } |
|
349 |
- .task-icon i { color: @black } |
|
350 |
- } |
|
351 |
- .panel-body { |
|
352 |
- .panel-content { |
|
353 |
- .panel-text { |
|
354 |
- font-family: Avenir-Light; |
|
355 |
- font-size: 18px; |
|
356 |
- color: #1D1D26; |
|
357 |
- line-height: 26px; |
|
358 |
- .theme-box-padding; |
|
359 |
- } |
|
360 |
- } |
|
361 |
- .accordion { |
|
362 |
- margin-bottom: 0px; |
|
363 |
- } |
|
364 |
- } |
|
365 |
- .panel-body.in { border-top: @theme-border; } |
|
366 |
- .panel-footer {} |
|
367 |
-} |
|
368 |
- |
|
369 |
-// Overrides |
|
370 |
-.accordion-inner { padding: 0px; } |
|
371 | 253 |
|
372 | 254 |
// Footer |
373 | 255 |
|
@@ -0,0 +1,55 @@ |
||
1 |
+// Buttons |
|
2 |
+ |
|
3 |
+@import "colors.less"; |
|
4 |
+ |
|
5 |
+.btn.btn-success { |
|
6 |
+ color: @green; |
|
7 |
+ border-color: @green; |
|
8 |
+} |
|
9 |
+.btn.btn-success:hover { background-color: fade(@green, 25%); } |
|
10 |
+ |
|
11 |
+.btn.btn-danger { |
|
12 |
+ color: @red; |
|
13 |
+ border-color: @red; |
|
14 |
+} |
|
15 |
+.btn.btn-danger:hover { background-color: fade(@red, 25%); } |
|
16 |
+ |
|
17 |
+.btn { |
|
18 |
+ display: inline-block; |
|
19 |
+ padding: 4px 12px; |
|
20 |
+ margin-bottom: 0; |
|
21 |
+ text-align: center; |
|
22 |
+ vertical-align: middle; |
|
23 |
+ cursor: pointer; |
|
24 |
+ color: #333333; |
|
25 |
+ background-color: transparent; |
|
26 |
+ border: 2px solid @black; |
|
27 |
+ border-bottom-color: @black; |
|
28 |
+ border-radius: 4px; |
|
29 |
+ text-shadow: none; |
|
30 |
+ /* Create Mission: */ |
|
31 |
+ font-family: Avenir-Book; |
|
32 |
+ font-style: normal; |
|
33 |
+ color: #333333; |
|
34 |
+ text-transform: none; |
|
35 |
+} |
|
36 |
+ |
|
37 |
+.btn-large { |
|
38 |
+ font-family: Avenir-Black; |
|
39 |
+ font-size: 18px; |
|
40 |
+ color: #333333; |
|
41 |
+ line-height: 20px; |
|
42 |
+} |
|
43 |
+ |
|
44 |
+.btn:hover { |
|
45 |
+ background: rgba(0, 0, 0, 0.2); |
|
46 |
+} |
|
47 |
+ |
|
48 |
+.btn-link { |
|
49 |
+ border: none; |
|
50 |
+} |
|
51 |
+ |
|
52 |
+.btn-link:hover { |
|
53 |
+ border: none; |
|
54 |
+ background-color: transparent; |
|
55 |
+} |
@@ -0,0 +1,105 @@ |
||
1 |
+// Panel |
|
2 |
+ |
|
3 |
+@import "colors.less"; |
|
4 |
+ |
|
5 |
+.panel.panel-default { |
|
6 |
+ margin-top: 15px; |
|
7 |
+ .box-theme; |
|
8 |
+} |
|
9 |
+ |
|
10 |
+.panel { |
|
11 |
+ .panel-heading { |
|
12 |
+ background-color: @light-gray; |
|
13 |
+ height: 32px; |
|
14 |
+ .theme-box-padding; |
|
15 |
+ } |
|
16 |
+ .panel-heading.panel-divider { |
|
17 |
+ border-top: @theme-border; |
|
18 |
+ border-bottom: @theme-border; |
|
19 |
+ height: 32px; |
|
20 |
+ margin-bottom: -2px; |
|
21 |
+ background-color: @white; |
|
22 |
+ .caret { margin-top: 16px; margin-left: 5px; margin-right: 5px; } |
|
23 |
+ } |
|
24 |
+ .panel-title { |
|
25 |
+ margin-top: 0px; |
|
26 |
+ margin-bottom: 0px; |
|
27 |
+ .task-text { |
|
28 |
+ font-family: Avenir-Medium; |
|
29 |
+ font-size: 18px; |
|
30 |
+ color: #000000; |
|
31 |
+ line-height: 25px; |
|
32 |
+ padding-top: 6px; |
|
33 |
+ font-weight: 200; |
|
34 |
+ } |
|
35 |
+ .label { |
|
36 |
+ margin-top: 5px; |
|
37 |
+ font-family: Avenir-Oblique; |
|
38 |
+ color: #000000; |
|
39 |
+ font-style: oblique; |
|
40 |
+ text-shadow: none; |
|
41 |
+ padding: 5px; |
|
42 |
+ } |
|
43 |
+ .label.label-warning { background-color: #F2CB63; } |
|
44 |
+ .caret { |
|
45 |
+ float: left; |
|
46 |
+ margin-top: 14px; |
|
47 |
+ margin-right: 5px; |
|
48 |
+ margin-left: 5px; |
|
49 |
+ } |
|
50 |
+ .task-number { line-height: 36px;} |
|
51 |
+ .task-icon { padding-top: 7px } |
|
52 |
+ .task-icon i { color: @black } |
|
53 |
+ .task-icon.mission-control { float: left; |
|
54 |
+ padding-top: 0px; |
|
55 |
+ margin-top: -3px; |
|
56 |
+ } |
|
57 |
+ } |
|
58 |
+ .panel-body { |
|
59 |
+ .panel-content { |
|
60 |
+ .panel-text { |
|
61 |
+ font-family: Avenir-Light; |
|
62 |
+ font-size: 18px; |
|
63 |
+ color: #1D1D26; |
|
64 |
+ line-height: 26px; |
|
65 |
+ .theme-box-padding; |
|
66 |
+ } |
|
67 |
+ } |
|
68 |
+ .accordion { |
|
69 |
+ margin-bottom: 0px; |
|
70 |
+ } |
|
71 |
+ } |
|
72 |
+ .panel-body.in { border-top: @theme-border; } |
|
73 |
+ .panel-footer { |
|
74 |
+ border-top: @theme-border; |
|
75 |
+ border-bottom: @theme-border; |
|
76 |
+ height: 32px; |
|
77 |
+ margin-bottom: -2px; |
|
78 |
+ background-color: @white; |
|
79 |
+ .theme-box-padding; |
|
80 |
+ .caret { margin-top: 16px; margin-left: 5px; margin-right: 5px; } |
|
81 |
+ .description { |
|
82 |
+ /* Agente James Peret (: */ |
|
83 |
+ font-family: Avenir-Medium; |
|
84 |
+ font-size: 14px; |
|
85 |
+ color: #000000; |
|
86 |
+ line-height: 15px; |
|
87 |
+ margin-bottom: 0px; |
|
88 |
+ margin-top: 2px; |
|
89 |
+ margin-left: 8px; |
|
90 |
+ } |
|
91 |
+ .sub-text { |
|
92 |
+ /* Agente James Peret (: */ |
|
93 |
+ font-family: Avenir-Light; |
|
94 |
+ font-size: 11px; |
|
95 |
+ color: #000000; |
|
96 |
+ line-height: 15px; |
|
97 |
+ margin-bottom: 0px; |
|
98 |
+ margin-top: 0px; |
|
99 |
+ margin-left: 8px; |
|
100 |
+ } |
|
101 |
+ } |
|
102 |
+} |
|
103 |
+ |
|
104 |
+// Overrides |
|
105 |
+.accordion-inner { padding: 0px; } |
@@ -1,7 +1,7 @@ |
||
1 | 1 |
// Dashboard Stylesheet |
2 | 2 |
//------------------------------------ |
3 | 3 |
|
4 |
-@import "colors.less"; |
|
4 |
+@import "avl2_theme/colors.less"; |
|
5 | 5 |
|
6 | 6 |
.dashboard-stats { |
7 | 7 |
float: left; |
@@ -8,7 +8,7 @@ |
||
8 | 8 |
|
9 | 9 |
// Mission Status |
10 | 10 |
|
11 |
-@import "colors.less"; |
|
11 |
+@import "avl2_theme/colors.less"; |
|
12 | 12 |
|
13 | 13 |
.mission-status { |
14 | 14 |
padding-left: 6px; |
@@ -312,4 +312,43 @@ p.agent-stats i { |
||
312 | 312 |
line-height: 22px; |
313 | 313 |
float: left; |
314 | 314 |
margin-top: 5px; |
315 |
+} |
|
316 |
+ |
|
317 |
+// Mission Control |
|
318 |
+ |
|
319 |
+.mission-control-agents-sidebar { |
|
320 |
+ background-color: #f3f3f3; |
|
321 |
+ padding-top: 10px; |
|
322 |
+ padding-bottom: 0px; |
|
323 |
+ ul { |
|
324 |
+ .theme-box-padding; |
|
325 |
+ list-style: none; |
|
326 |
+ margin-left: 0px; |
|
327 |
+ margin-right: 0px; |
|
328 |
+ } |
|
329 |
+ li { |
|
330 |
+ list-style: none; |
|
331 |
+ margin-left: 0px; |
|
332 |
+ margin-right: 0px; |
|
333 |
+ margin-bottom: 15px; |
|
334 |
+ .description { |
|
335 |
+ font-family: Avenir-Medium; |
|
336 |
+ font-size: 14px; |
|
337 |
+ color: #1D1D26; |
|
338 |
+ line-height: 19px; |
|
339 |
+ margin-bottom: 0px; |
|
340 |
+ margin-left: 8px; |
|
341 |
+ margin-top: -4px; |
|
342 |
+ } |
|
343 |
+ .sub-text { |
|
344 |
+ /* James Peret 3: */ |
|
345 |
+ font-family: Avenir-Light; |
|
346 |
+ font-size: 14px; |
|
347 |
+ color: #1D1D26; |
|
348 |
+ line-height: 19px; |
|
349 |
+ margin-bottom: 0px; |
|
350 |
+ margin-left: 8px; |
|
351 |
+ margin-top: -4px; |
|
352 |
+ } |
|
353 |
+ } |
|
315 | 354 |
} |
@@ -10,7 +10,17 @@ class MissionsController < ApplicationController |
||
10 | 10 |
end |
11 | 11 |
|
12 | 12 |
def mission_control |
13 |
- @mission = Mission.find(params[:id]) |
|
13 |
+ @mission = Mission.friendly.find(params[:id]) |
|
14 |
+ @submissions = Array.new |
|
15 |
+ @mission.mission_agents.each do |agent| |
|
16 |
+ agent.agent_steps.each do |step| |
|
17 |
+ if step.step_submissions.count > 0 |
|
18 |
+ if step.step_submissions.last.validated == nil |
|
19 |
+ @submissions << step.step_submissions.last |
|
20 |
+ end |
|
21 |
+ end |
|
22 |
+ end |
|
23 |
+ end |
|
14 | 24 |
if current_user != @mission.owner |
15 | 25 |
redirect_to missions_path, alert: (t 'mission.access_denied_error') |
16 | 26 |
end |
@@ -109,6 +119,34 @@ class MissionsController < ApplicationController |
||
109 | 119 |
end |
110 | 120 |
end |
111 | 121 |
end |
122 |
+ |
|
123 |
+ def accept_step_submission |
|
124 |
+ mission = Mission.friendly.find(params[:id]) |
|
125 |
+ if current_user != mission.owner |
|
126 |
+ redirect_to missions_path, alert: (t 'mission.access_denied_error') |
|
127 |
+ else |
|
128 |
+ submission = StepSubmission.find(params[:step_submission_id]) |
|
129 |
+ submission.validated = true |
|
130 |
+ submission.validated_by = current_user |
|
131 |
+ submission.date_validated = Time.now |
|
132 |
+ submission.save |
|
133 |
+ redirect_to mission_control_path(mission) |
|
134 |
+ end |
|
135 |
+ end |
|
136 |
+ |
|
137 |
+ def reject_step_submission |
|
138 |
+ mission = Mission.friendly.find(params[:id]) |
|
139 |
+ if current_user != mission.owner |
|
140 |
+ redirect_to missions_path, alert: (t 'mission.access_denied_error') |
|
141 |
+ else |
|
142 |
+ submission = StepSubmission.find(params[:step_submission_id]) |
|
143 |
+ submission.validated = false |
|
144 |
+ submission.validated_by = current_user |
|
145 |
+ submission.date_validated = Time.now |
|
146 |
+ submission.save |
|
147 |
+ redirect_to mission_control_path(mission) |
|
148 |
+ end |
|
149 |
+ end |
|
112 | 150 |
|
113 | 151 |
private |
114 | 152 |
# Use callbacks to share common setup or constraints between actions. |
@@ -11,6 +11,14 @@ |
||
11 | 11 |
<%= content_tag(:small, (t 'mission.mission')+':') %> |
12 | 12 |
<%= content_tag(:h1) do %> |
13 | 13 |
<%= mission.title %> |
14 |
+ <% if user_signed_in? %> |
|
15 |
+ <% if current_user == mission.owner %> |
|
16 |
+ <%= link_to (t 'nav.edit'), edit_mission_path(mission), class: 'btn btn-mini' %> |
|
17 |
+ <% end %> |
|
18 |
+ <% if mission.mission_agents.find_by_user_id(current_user.id) != nil || current_user == mission.owner %> |
|
19 |
+ <%= link_to (t 'nav.back'), dashboard_path, class: 'btn btn-mini' %> |
|
20 |
+ <% end %> |
|
21 |
+ <% end %> |
|
14 | 22 |
<%= status(mission.status) %> |
15 | 23 |
<% end %> |
16 | 24 |
<% end %> |
@@ -59,7 +67,7 @@ |
||
59 | 67 |
<%= content_tag(:div, class: 'mission-call-to-action') do %> |
60 | 68 |
<%= link_to (t 'mission.join'), '#', class: 'btn btn-large' %> |
61 | 69 |
<% end %> |
62 |
- |
|
70 |
+ <%= content_tag(:div, '', class: 'clearfix', id: 'mission-tab') %> |
|
63 | 71 |
<% end %> |
64 | 72 |
<% end %> |
65 | 73 |
<% end %> |
@@ -0,0 +1,19 @@ |
||
1 |
+<%= content_tag(:div, class: 'container container-tabs') do %> |
|
2 |
+ <%= content_tag(:div, class: 'row') do %> |
|
3 |
+ <%= content_tag(:div, class: 'span12') do %> |
|
4 |
+ <%= content_tag(:ul, class: 'nav nav-tabs') do %> |
|
5 |
+ <% if user_signed_in? %> |
|
6 |
+ <% if current_user = @mission.owner %> |
|
7 |
+ <%= content_tag(:li, (link_to (t 'mission.mission_control'), mission_control_path(@mission, anchor: "mission-tab")), class: ('active' if params[:action] == 'mission_control' )) %> |
|
8 |
+ <% end %> |
|
9 |
+ <% end %> |
|
10 |
+ <%= content_tag(:li, (link_to (t 'mission.briefing'), mission_path(@mission, anchor: "mission-tab")), class: ('active' if params[:action] == 'show' )) %> |
|
11 |
+ <% if params[:action] == 'show_agents' then link_class = 'active' end %> |
|
12 |
+ <% if params[:action] == 'show_agent_details' then link_class = 'active clickable' end %> |
|
13 |
+ <%= content_tag(:li, (link_to (t 'mission.agents'), mission_agents_list_path(@mission, anchor: "mission-tab")), class: link_class) %> |
|
14 |
+ <%= content_tag(:li, (link_to (t 'mission.chat'), '#'), class: 'disabled') %> |
|
15 |
+ <%= content_tag(:li, (link_to (t 'mission.log'), '#'), class: 'disabled') %> |
|
16 |
+ <% end %> |
|
17 |
+ <% end %> |
|
18 |
+ <% end %> |
|
19 |
+<% end %> |
@@ -1,17 +1,93 @@ |
||
1 |
-<%= content_tag(:div, class: 'container top-container container-last') do %> |
|
1 |
+<%= render :partial => "mission_details", locals: {mission: @mission} %> |
|
2 |
+<%= render :partial => 'mission_tabs', locals: {mission: @mission} %> |
|
3 |
+ |
|
4 |
+<% # Content -------- %> |
|
5 |
+ |
|
6 |
+<%= content_tag(:div, class: 'container container-last') do %> |
|
2 | 7 |
<%= content_tag(:div, class: 'row') do %> |
3 |
- <%= content_tag(:div, class: 'span12') do %> |
|
8 |
+ |
|
9 |
+ <%= content_tag(:div, class: 'span8') do %> |
|
10 |
+ <%= content_tag(:h4, ((t 'mission_control.agent_steps_validation') + ':') ) %> |
|
11 |
+ |
|
12 |
+ <% @submissions.each do |submission| %> |
|
13 |
+ <%= content_tag(:div, class: 'panel panel-default') do %> |
|
14 |
+ <%= content_tag(:div, class: 'panel-heading') do %> |
|
15 |
+ <%= content_tag(:h3, class: 'panel-title') do %> |
|
16 |
+ <%= content_tag(:span, '<i class="fa fa-comment"></i>'.html_safe, class: 'task-icon mission-control') %> |
|
17 |
+ <%= link_to ('#colapse_submission_'+ submission.id.to_s ), class: 'accordion-toggle', data: {toggle: 'collapse', parent: '#colapse_submissions'} do %> |
|
18 |
+ <%= content_tag(:span, '', class: 'caret')%> |
|
19 |
+ <%= content_tag(:span, submission.agent_step.title, class: 'task-text') %> |
|
20 |
+ <% end %> |
|
21 |
+ <% end %> |
|
22 |
+ <% end %> |
|
23 |
+ <%= content_tag(:div, class: 'panel-body collapse', id: ('colapse_submission_'+ submission.id.to_s )) do %> |
|
24 |
+ <%= content_tag(:div, class: "panel-content") do %> |
|
25 |
+ <%= content_tag(:div, class: "panel-text") do %> |
|
26 |
+ <%= submission.submission_contents.last.submission.content %> |
|
27 |
+ |
|
28 |
+ <% end %> |
|
29 |
+ |
|
30 |
+ |
|
31 |
+ <% end %> |
|
32 |
+ <% end %> |
|
33 |
+ <%= content_tag(:div, class: 'panel-footer') do %> |
|
34 |
+ <%= content_tag(:div, class: 'agent-avatar pull-left') do %> |
|
35 |
+ <% if submission.agent_step.mission_agent.user.avatar.file != nil %> |
|
36 |
+ <%= image_tag submission.agent_step.mission_agent.user.avatar.to_s, size: "32x32", :class => 'img-circle' %> |
|
37 |
+ <% else %> |
|
38 |
+ <%= image_tag "user.png", size: "64x64", :class => 'img-circle' %> |
|
39 |
+ <% end %> |
|
40 |
+ <% end %> |
|
41 |
+ <%= content_tag(:div, class: ' pull-left') do %> |
|
42 |
+ <%= content_tag(:p, (submission.agent_step.mission_agent.user.full_name + ' <b>(' + submission.agent_step.mission_agent.role + ')</b>').html_safe, class: 'description') %> |
|
43 |
+ <%= content_tag(:p, time_ago_in_words(submission.created_at), class: 'sub-text') %><br> |
|
44 |
+ <% end %> |
|
45 |
+ <%= content_tag(:div, class: ' pull-right') do %> |
|
46 |
+ <%= link_to((t 'mission_control.accept'), accept_step_submission_path(step_submission_id: submission.id), class: 'btn btn-success') %> |
|
47 |
+ <%= link_to((t 'mission_control.reject'), reject_step_submission_path(step_submission_id: submission.id), class: 'btn btn-danger') %> |
|
48 |
+ <% end %> |
|
49 |
+ |
|
50 |
+ |
|
51 |
+ <% end %> |
|
52 |
+ <% end %> |
|
53 |
+ <% end %> |
|
54 |
+ |
|
4 | 55 |
|
5 |
- <%= content_tag(:div, class: 'page-header page-header-type') do %> |
|
6 |
- <%= content_tag(:small, (t 'mission.mission_control')+':') %> |
|
7 |
- <%= content_tag(:h1) do %> |
|
8 |
- <%= @mission.title %> |
|
9 |
- <%= link_to (t 'nav.edit'), edit_mission_path(@mission), class: 'btn btn-mini' %> |
|
10 |
- <%= link_to (t 'nav.back'), dashboard_path, class: 'btn btn-mini' %> |
|
11 |
- <%= status(@mission.status) %> |
|
56 |
+ <% end %> |
|
57 |
+ |
|
58 |
+ <%= content_tag(:div, class: 'span4') do %> |
|
59 |
+ <%= content_tag(:h4, ((t 'mission.agents') + ':') ) %> |
|
60 |
+ <%= content_tag(:div, class: 'mission-control-agents-sidebar') do %> |
|
61 |
+ <%= content_tag(:ul) do %> |
|
62 |
+ <% @mission.mission_agents.each do |agent| %> |
|
63 |
+ <%= content_tag(:li) do %> |
|
64 |
+ <% if agent.user %> |
|
65 |
+ <%= content_tag(:div, class: 'agent-avatar pull-left') do %> |
|
66 |
+ <% if agent.user.avatar.file != nil %> |
|
67 |
+ <%= image_tag agent.user.avatar.to_s, size: "32x32", :class => 'img-circle' %> |
|
68 |
+ <% else %> |
|
69 |
+ <%= image_tag "user.png", size: "32x32", :class => 'img-circle' %> |
|
70 |
+ <% end %> |
|
71 |
+ <% end %> |
|
72 |
+ <%= content_tag(:div, class: ' pull-left') do %> |
|
73 |
+ <%= content_tag(:p, (link_to agent.role, mission_agent_details_path(agent: agent)), class: 'description') %> |
|
74 |
+ <%= content_tag(:p, agent.user.full_name, class: 'sub-text') %> |
|
75 |
+ <% end %> |
|
76 |
+ <% else %> |
|
77 |
+ <%= content_tag(:div, class: 'agent-avatar pull-left') do %> |
|
78 |
+ <%= image_tag "user.png", size: "32x32", :class => 'img-circle' %> |
|
79 |
+ <% end %> |
|
80 |
+ <%= content_tag(:div, class: ' pull-left') do %> |
|
81 |
+ <%= content_tag(:p, (link_to agent.role, mission_agent_details_path(agent: agent)), class: 'description') %> |
|
82 |
+ <%= content_tag(:p, (t 'agent.waiting_for_agent'), class: 'sub-text') %> |
|
83 |
+ <% end %> |
|
84 |
+ <% end %> |
|
85 |
+ <%= content_tag(:div, '', class: 'clearfix') %> |
|
86 |
+ <% end %> |
|
87 |
+ <% end %> |
|
12 | 88 |
<% end %> |
13 | 89 |
<% end %> |
14 |
- <%= bootstrap_flash %> |
|
15 | 90 |
<% end %> |
16 |
- <% end %> |
|
17 |
-<% end %> |
|
91 |
+ |
|
92 |
+ <% end %> |
|
93 |
+<% end %> |
@@ -1,20 +1,7 @@ |
||
1 |
-<%= render partial: "mission_details", locals: {mission: @mission} %> |
|
1 |
+<%= render :partial => "mission_details", locals: {mission: @mission} %> |
|
2 |
+<%= render :partial => 'mission_tabs', locals: {mission: @mission} %> |
|
2 | 3 |
|
3 | 4 |
|
4 |
- |
|
5 |
-<%= content_tag(:div, class: 'container container-tabs') do %> |
|
6 |
- <%= content_tag(:div, class: 'row') do %> |
|
7 |
- <%= content_tag(:div, class: 'span12') do %> |
|
8 |
- <%= content_tag(:ul, class: 'nav nav-tabs') do %> |
|
9 |
- <%= content_tag(:li, (link_to (t 'mission.briefing'), mission_path(@mission)), class: 'active') %> |
|
10 |
- <%= content_tag(:li, (link_to (t 'mission.agents'), mission_agents_list_path(@mission))) %> |
|
11 |
- <%= content_tag(:li, (link_to (t 'mission.chat'), '#'), class: 'disabled') %> |
|
12 |
- <%= content_tag(:li, (link_to (t 'mission.log'), '#'), class: 'disabled') %> |
|
13 |
- <% end %> |
|
14 |
- <% end %> |
|
15 |
- <% end %> |
|
16 |
-<% end %> |
|
17 |
- |
|
18 | 5 |
<%= content_tag(:div, class: 'container container-last') do %> |
19 | 6 |
<%= content_tag(:div, class: 'row') do %> |
20 | 7 |
<%= content_tag(:div, class: 'span8 mission-briefing') do %> |
@@ -1,19 +1,6 @@ |
||
1 |
-<%= render partial: "mission_details", locals: {mission: @mission} %> |
|
1 |
+<%= render :partial => "mission_details", locals: {mission: @mission} %> |
|
2 |
+<%= render :partial => 'mission_tabs', locals: {mission: @mission} %> |
|
2 | 3 |
|
3 |
-<% # Tabs ---------- %> |
|
4 |
- |
|
5 |
-<%= content_tag(:div, class: 'container container-tabs') do %> |
|
6 |
- <%= content_tag(:div, class: 'row') do %> |
|
7 |
- <%= content_tag(:div, class: 'span12') do %> |
|
8 |
- <%= content_tag(:ul, class: 'nav nav-tabs') do %> |
|
9 |
- <%= content_tag(:li, (link_to (t 'mission.briefing'), mission_path(@mission))) %> |
|
10 |
- <%= content_tag(:li, (link_to (t 'mission.agents'), mission_agents_list_path(@mission)), class: 'active clickable') %> |
|
11 |
- <%= content_tag(:li, (link_to (t 'mission.chat'), '#'), class: 'disabled') %> |
|
12 |
- <%= content_tag(:li, (link_to (t 'mission.log'), '#'), class: 'disabled') %> |
|
13 |
- <% end %> |
|
14 |
- <% end %> |
|
15 |
- <% end %> |
|
16 |
-<% end %> |
|
17 | 4 |
|
18 | 5 |
<% # Content -------- %> |
19 | 6 |
|
@@ -1,21 +1,7 @@ |
||
1 |
-<%= render partial: "mission_details", locals: {mission: @mission} %> |
|
1 |
+<%= render :partial => "mission_details", locals: {mission: @mission} %> |
|
2 |
+<%= render :partial => 'mission_tabs', locals: {mission: @mission} %> |
|
2 | 3 |
|
3 | 4 |
|
4 |
-<% # Tabs ---------- %> |
|
5 |
- |
|
6 |
-<%= content_tag(:div, class: 'container container-tabs') do %> |
|
7 |
- <%= content_tag(:div, class: 'row') do %> |
|
8 |
- <%= content_tag(:div, class: 'span12') do %> |
|
9 |
- <%= content_tag(:ul, class: 'nav nav-tabs') do %> |
|
10 |
- <%= content_tag(:li, (link_to (t 'mission.briefing'), mission_path(@mission))) %> |
|
11 |
- <%= content_tag(:li, (link_to (t 'mission.agents'), mission_agents_list_path(@mission)), class: 'active') %> |
|
12 |
- <%= content_tag(:li, (link_to (t 'mission.chat'), '#'), class: 'disabled') %> |
|
13 |
- <%= content_tag(:li, (link_to (t 'mission.log'), '#'), class: 'disabled') %> |
|
14 |
- <% end %> |
|
15 |
- <% end %> |
|
16 |
- <% end %> |
|
17 |
-<% end %> |
|
18 |
- |
|
19 | 5 |
<% # Content -------- %> |
20 | 6 |
|
21 | 7 |
<%= content_tag(:div, class: 'container container-last') do %> |
@@ -24,11 +24,15 @@ Avalanche2::Application.routes.draw do |
||
24 | 24 |
|
25 | 25 |
# Missions |
26 | 26 |
resources :missions |
27 |
- get 'mission_control/:id' => 'missions#mission_control', as: :mission_control |
|
28 |
- get '/missions/:id/agents', to: 'missions#show_agents', as: :mission_agents_list |
|
27 |
+ get 'missions/:id/agents', to: 'missions#show_agents', as: :mission_agents_list |
|
29 | 28 |
get 'missions/:id/agents/:agent', to: 'missions#show_agent_details', as: :mission_agent_details |
30 | 29 |
get 'missions/:id/agents/:agent/take_agent_role', to: 'missions#take_agent_role', as: :take_agent_role |
31 | 30 |
|
31 |
+ # Mission Control |
|
32 |
+ get 'missions/:id/mission_control' => 'missions#mission_control', as: :mission_control |
|
33 |
+ get 'missions/:id/mission_control/accept_step_submission/:step_submission_id' => 'missions#accept_step_submission', as: :accept_step_submission |
|
34 |
+ get 'missions/:id/mission_control/reject_step_submission/:step_submission_id' => 'missions#reject_step_submission', as: :reject_step_submission |
|
35 |
+ |
|
32 | 36 |
# Agents |
33 | 37 |
get 'dashboard' => 'agents#dashboard', as: :dashboard |
34 | 38 |
get 'agents' => 'agents#list', as: :agent_list |
@@ -36,6 +40,7 @@ Avalanche2::Application.routes.draw do |
||
36 | 40 |
|
37 | 41 |
# Steps |
38 | 42 |
post 'missions/:id/agents/:agent/steps/:step/step_submission' => 'missions#step_submission', as: :step_submission |
43 |
+ |
|
39 | 44 |
|
40 | 45 |
# Admin Panel |
41 | 46 |
get "admin/dashboard" => "admin_panel#dashboard", :as => :admin_dashboard |