cf00b2024ff5bf8f408bf3864149a6c0ddd35f71
[qcg-portal.git] / qcg / templates / qcg / job_new.html
1 {% extends 'qcg/base.html' %}
2 {% load staticfiles bootstrap3 qcg_utils %}
3
4 {% block extra_css %}
5     <link href="{% static 'qcg/selectize/selectize.bootstrap3.css' %}" rel="stylesheet">
6 {% endblock %}
7
8 {% block extra_js %}
9     <script src="{% static 'qcg/selectize/selectize.min.js' %}"></script>
10     <script src="{% static 'qcg/formset/jquery.formset.js' %}"></script>
11
12     <script>
13         $(function() {
14             $('#id_application').selectize();
15             $('#id_arguments,#id_properties,#id_native').selectize({
16                 plugins: ['remove_button'],
17                 create: true,
18                 render: {
19                     option_create: function(data, escape) {
20                         return '<div class="create">Dodaj <strong>' + escape(data.input) + '</strong>&hellip;</div>';
21                     }
22                 }
23             });
24             $('#id_queue').selectize({
25                 create: true,
26                 render: {
27                     option_create: function(data, escape) {
28                         return '<div class="create">Wybierz <strong>' + escape(data.input) + '</strong>&hellip;</div>';
29                     }
30                 }
31             });
32             $('#id_modules, #id_hosts').selectize({
33                 plugins: ['remove_button']
34             });
35
36             // hide delete checkbox in empty env form
37             $('#env-form-empty').find('div.form-group:last-of-type').hide();
38             $('#env-controls').find('> div').formset({
39                 formTemplate: '#env-form-empty',
40                 parent: '#env-controls',
41                 addLinkParent: '#add-env-form',
42                 addText: 'dodaj »',
43                 addCssClass: 'add-btn',
44                 deleteText: 'Usuń',
45                 deleteCssClass: 'delete-btn btn btn-xs btn-danger'
46             });
47
48             $('input[name="notify_type"],input[name="watch_output_type"],input[name="preprocess_type"],input[name="postprocess_type"]').on('change', function () {
49                 $(this).tab('show');
50             }).each(function() {
51                 $(this).parent().toggleClass('active', this.checked);
52
53                 if (this.checked)
54                     $(this).tab('show');
55             });
56
57             $('#toggle-advanced').click(function(e) {
58                 e.preventDefault();
59                 $('form .collapse').collapse('toggle');
60                 $(this).find('span').text(this.text == "Pokaż zaawansowane" ? "Ukryj zaawansowane" : "Pokaż zaawansowane");
61             });
62         });
63     </script>
64 {% endblock %}
65
66 {% block container %}
67     <h1 class="page-header">{% block title %}Zleć zadanie{% endblock %}</h1>
68
69     {% if errors %}
70         <div class="alert alert-danger">
71             <strong>Uwaga!</strong> Formularz zawiera błędy.
72             {{ form.non_field_errors }}
73             {{ env_formset.non_field_errors }}
74         </div>
75     {% endif %}
76
77     <form action="." method="post" class="form-horizontal">
78         {% csrf_token %}
79
80         <!-- Nav tabs -->
81         <ul class="nav nav-tabs" style="margin-bottom: 20px">
82             <li role="presentation" class="active"><a href="#basic" data-toggle="tab">Podstawowe</a></li>
83             <li role="presentation"><a href="#resources" data-toggle="tab">Zasoby</a></li>
84             <li role="presentation"><a href="#files" data-toggle="tab">Pliki</a></li>
85             <li role="presentation"><a href="#environment" data-toggle="tab">Środowisko</a></li>
86             <li role="presentation"><a href="#monitoring" data-toggle="tab">Powiadomienia</a></li>
87             <li role="presentation"><a href="#other" data-toggle="tab">Inne</a></li>
88         </ul>
89
90         <div class="tab-content">
91             <fieldset id="basic" class="tab-pane active" role="tabpanel">
92                 {% bootstrap_field form.application layout="horizontal" %}
93                 <div class="row" style="margin-top: -15px; margin-bottom: 15px">
94                     <div class="col-sm-offset-3 col-md-offset-4 col-sm-9 col-md-6">
95                         {# TODO grid ftp #}
96                         <a id="add-main-file" href="#">wybierz plik główny &raquo;</a>
97                     </div>
98                 </div>
99
100                 {% bootstrap_field form.executable layout="horizontal" form_group_class="form-group collapse" %}
101                 {% bootstrap_field form.script layout="horizontal" form_group_class="form-group collapse" %}
102                 {% bootstrap_field form.arguments layout="horizontal" %}
103                 {% bootstrap_field form.note layout="horizontal" %}
104                 {% bootstrap_field form.grant layout="horizontal" form_group_class="form-group collapse" %}
105             </fieldset>
106
107             <fieldset id="resources" class="tab-pane" role="tabpanel">
108                 {% bootstrap_field form.hosts layout="horizontal" %}
109                 {% bootstrap_field form.queue layout="horizontal" %}
110                 {% bootstrap_field form.properties layout="horizontal" form_group_class="form-group collapse" %}
111                 {% bootstrap_field form.modules layout="horizontal" form_group_class="form-group collapse" %}
112                 {% bootstrap_field form.procs layout="horizontal" %}
113                 {% bootstrap_field form.nodes layout="horizontal" form_group_class="form-group collapse" %}
114                 {% bootstrap_field form.wall_time layout="horizontal" form_group_class="form-group timerange" %}
115                 {% bootstrap_field form.memory layout="horizontal" form_group_class="form-group collapse" %}
116                 {% bootstrap_field form.memory_per_slot layout="horizontal" form_group_class="form-group collapse" %}
117                 {% bootstrap_field form.reservation layout="horizontal" form_group_class="form-group collapse" %}
118             </fieldset>
119
120             <fieldset id="files" class="tab-pane" role="tabpanel">
121                 {% bootstrap_field form.input layout="horizontal" %}
122                 {% bootstrap_field form.stage_in layout="horizontal" %}
123                 {% bootstrap_field form.stage_out layout="horizontal" form_group_class="form-group collapse" %}
124             </fieldset>
125
126             <fieldset id="environment" class="tab-pane" role="tabpanel">
127                 {{ env_formset.management_form }}
128
129                 <div class="form-group">
130                     <label class="col-sm-3 col-md-4 control-label">Zmienne środowiskowe</label>
131                     <div class="col-sm-9 col-md-6">
132                         <div id="env-controls">
133                             {% for env_form in env_formset %}
134                                 <div>{% bootstrap_form env_form layout='inline' %}</div>
135                             {% endfor %}
136                         </div>
137                         <div id="add-env-form"></div>
138                         <div id="env-form-empty" style="display: none">
139                             {% bootstrap_form env_formset.empty_form layout='inline' %}
140                         </div>
141                     </div>
142                 </div>
143             </fieldset>
144
145             <fieldset id="monitoring" class="tab-pane" role="tabpanel">
146                 {% bootstrap_checkbox form.monitoring %}
147
148                 <div class="form-group">
149                     <label class="col-sm-3 col-md-4 control-label">Monitorowanie stanu</label>
150                     <div class="col-sm-9 col-md-6">
151                         <div class="btn-group" data-toggle="buttons">
152                             {% for option in form.notify_type %}
153                                 <label class="btn btn-default">
154                                     <input type="radio" autocomplete="off" name="{{ option.name }}" value="{{ option.choice_value }}"
155                                             {% if option.is_checked %}checked{% endif %}
156                                             data-target=".notify-type-{{ forloop.counter0 }}"> {{ option.choice_label }}
157                                 </label>
158                             {% endfor %}
159                         </div>
160                     </div>
161                 </div>
162
163                 <div class="tab-content">
164                     <div class="tab-pane notify-type-0"></div>
165
166                     <div class="tab-pane notify-type-1 notify-type-2" style="margin-top: 15px">
167                         {% bootstrap_field form.notify_address layout="horizontal" %}
168                     </div>
169                 </div>
170
171                 <div class="collapse">
172                     <div class="form-group">
173                         <label class="col-sm-3 col-md-4 control-label">Monitorowanie wyjścia</label>
174                         <div class="col-sm-9 col-md-6">
175                             <div class="btn-group" data-toggle="buttons">
176                                 {% for option in form.watch_output_type %}
177                                     <label class="btn btn-default">
178                                         <input type="radio" autocomplete="off" name="{{ option.name }}" value="{{ option.choice_value }}"
179                                                 {% if option.is_checked %}checked{% endif %}
180                                                 data-target=".watch-output-type-{{ forloop.counter0 }}"> {{ option.choice_label }}
181                                     </label>
182                                 {% endfor %}
183                             </div>
184                         </div>
185                     </div>
186
187                     <div class="tab-content">
188                         <div class="tab-pane watch-output-type-0"></div>
189
190                         <div class="tab-pane watch-output-type-1 watch-output-type-2" style="margin-top: 15px">
191                             {% bootstrap_field form.watch_output_address layout="horizontal" %}
192                             {% bootstrap_field form.watch_output_pattern layout="horizontal" %}
193                         </div>
194                     </div>
195                 </div>
196             </fieldset>
197
198             <fieldset id="other" class="tab-pane" role="tabpanel">
199                 <div class="form-group">
200                     <label class="col-sm-3 col-md-4 control-label">Preprocessing</label>
201                     <div class="col-sm-9 col-md-6">
202                         <div class="btn-group" data-toggle="buttons">
203                             {% for option in form.preprocess_type %}
204                                 <label class="btn btn-default">
205                                     <input type="radio" autocomplete="off" name="{{ option.name }}" value="{{ option.choice_value }}"
206                                             {% if option.is_checked %}checked{% endif %}
207                                             data-target=".preprocess-type-{{ forloop.counter0 }}"> {{ option.choice_label }}
208                                 </label>
209                             {% endfor %}
210                         </div>
211                     </div>
212                 </div>
213
214                 <div class="tab-content">
215                     <div class="tab-pane preprocess-type-0"></div>
216
217                     <div class="tab-pane preprocess-type-1" style="margin-top: 15px">
218                         {% bootstrap_field form.preprocess_cmd layout="horizontal" %}
219                     </div>
220
221                     <div class="tab-pane preprocess-type-2" style="margin-top: 15px">
222                         {% bootstrap_field form.preprocess_script layout="horizontal" %}
223                     </div>
224                 </div>
225
226                 <div class="form-group">
227                     <label class="col-sm-3 col-md-4 control-label">Postprocessing</label>
228                     <div class="col-sm-9 col-md-6">
229                         <div class="btn-group" data-toggle="buttons">
230                             {% for option in form.postprocess_type %}
231                                 <label class="btn btn-default">
232                                     <input type="radio" autocomplete="off" name="{{ option.name }}" value="{{ option.choice_value }}"
233                                             {% if option.is_checked %}checked{% endif %}
234                                             data-target=".postprocess-type-{{ forloop.counter0 }}"> {{ option.choice_label }}
235                                 </label>
236                             {% endfor %}
237                         </div>
238                     </div>
239                 </div>
240
241                 <div class="tab-content">
242                     <div class="tab-pane postprocess-type-0"></div>
243
244                     <div class="tab-pane postprocess-type-1" style="margin-top: 15px">
245                         {% bootstrap_field form.postprocess_cmd layout="horizontal" %}
246                     </div>
247
248                     <div class="tab-pane postprocess-type-2" style="margin-top: 15px">
249                         {% bootstrap_field form.postprocess_script layout="horizontal" %}
250                     </div>
251                 </div>
252
253                 {% bootstrap_field form.native layout="horizontal" %}
254                 {% bootstrap_checkbox form.persistent %}
255             </fieldset>
256         </div>
257
258         <hr>
259
260         <div class="row">
261             <div class="col-sm-offset-3 col-md-offset-4 col-sm-9 col-md-6">
262                 <button type="submit" class="btn btn-primary">Zleć zadanie</button>
263                 <button type="reset" class="btn btn-warning">Resetuj</button>
264                 <a id="toggle-advanced" href="#"><span class="text-muted">Pokaż zaawansowane</span></a>
265             </div>
266         </div>
267     </form>
268
269 {% endblock %}