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