fixes for updated api
[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             $('#new-env').click(function(e) {
64                 e.preventDefault();
65                 $('#env-modal').modal('show');
66             });
67
68             $('#env-form').submit(function(e) {
69                 e.preventDefault();
70                 $('#env-modal').modal('hide');
71
72                 $('#id_environment')[0].selectize.createItem($('#id_env_name').val() + '=' + $('#id_env_value').val());
73             });
74         });
75     </script>
76 {% endblock %}
77
78 {% block container %}
79     <h1 class="page-header">{% block title %}Zleć zadanie{% endblock %}</h1>
80
81     {% if errors %}
82         <div class="alert alert-danger">
83             <strong>Uwaga!</strong> Formularz zawiera błędy.
84             {{ form.non_field_errors }}
85             {{ env_formset.non_field_errors }}
86         </div>
87     {% endif %}
88
89     <form action="." method="post" class="form-horizontal">
90         {% csrf_token %}
91
92         <!-- Nav tabs -->
93         <ul class="nav nav-tabs" style="margin-bottom: 20px">
94             <li role="presentation" class="active"><a href="#basic" data-toggle="tab">Podstawowe</a></li>
95             <li role="presentation"><a href="#resources" data-toggle="tab">Zasoby</a></li>
96             <li role="presentation"><a href="#files" data-toggle="tab">Pliki</a></li>
97             <li role="presentation"><a href="#environment" data-toggle="tab">Środowisko</a></li>
98             <li role="presentation"><a href="#monitoring" data-toggle="tab">Powiadomienia</a></li>
99             <li role="presentation"><a href="#other" data-toggle="tab">Inne</a></li>
100         </ul>
101
102         <div class="tab-content">
103             <fieldset id="basic" class="tab-pane active" role="tabpanel">
104                 {% bootstrap_field form.application layout="horizontal" %}
105                 <div class="row" style="margin-top: -15px; margin-bottom: 15px">
106                     <div class="col-sm-offset-3 col-md-offset-4 col-sm-9 col-md-6">
107                         {# TODO grid ftp #}
108                         <a id="add-main-file" href="#">wybierz plik główny &raquo;</a>
109                     </div>
110                 </div>
111
112                 {% bootstrap_field form.executable layout="horizontal" form_group_class="form-group collapse" %}
113                 {% bootstrap_field form.script layout="horizontal" form_group_class="form-group collapse" %}
114                 {% bootstrap_field form.arguments layout="horizontal" %}
115                 {% bootstrap_field form.note layout="horizontal" %}
116                 {% bootstrap_field form.grant layout="horizontal" form_group_class="form-group collapse" %}
117             </fieldset>
118
119             <fieldset id="resources" class="tab-pane" role="tabpanel">
120                 {% bootstrap_field form.hosts layout="horizontal" %}
121                 {% bootstrap_field form.queue layout="horizontal" %}
122                 {% bootstrap_field form.properties layout="horizontal" form_group_class="form-group collapse" %}
123                 {% bootstrap_field form.modules layout="horizontal" form_group_class="form-group collapse" %}
124                 {% bootstrap_field form.procs layout="horizontal" %}
125                 {% bootstrap_field form.nodes layout="horizontal" form_group_class="form-group collapse" %}
126                 {% bootstrap_field form.wall_time layout="horizontal" form_group_class="form-group timerange" %}
127                 {% bootstrap_field form.memory layout="horizontal" form_group_class="form-group collapse" %}
128                 {% bootstrap_field form.memory_per_slot layout="horizontal" form_group_class="form-group collapse" %}
129                 {% bootstrap_field form.reservation layout="horizontal" form_group_class="form-group collapse" %}
130             </fieldset>
131
132             <fieldset id="files" class="tab-pane" role="tabpanel">
133                 {% bootstrap_field form.input layout="horizontal" %}
134                 {% bootstrap_field form.stage_in layout="horizontal" %}
135                 {% bootstrap_field form.stage_out layout="horizontal" form_group_class="form-group collapse" %}
136             </fieldset>
137
138             <fieldset id="environment" class="tab-pane" role="tabpanel">
139                 {{ env_formset.management_form }}
140
141                 <div class="form-group">
142                     <label class="col-sm-3 col-md-4 control-label">Zmienne środowiskowe</label>
143                     <div class="col-sm-9 col-md-6">
144                         <div id="env-controls">
145                             {% for env_form in env_formset %}
146                                 <div>{% bootstrap_form env_form layout='inline' %}</div>
147                             {% endfor %}
148                         </div>
149                         <div id="add-env-form"></div>
150                         <div id="env-form-empty" style="display: none">
151                             {% bootstrap_form env_formset.empty_form layout='inline' %}
152                         </div>
153                     </div>
154                 </div>
155             </fieldset>
156
157             <fieldset id="monitoring" class="tab-pane" role="tabpanel">
158                 {% bootstrap_checkbox form.monitoring %}
159
160                 <div class="form-group">
161                     <label class="col-sm-3 col-md-4 control-label">Monitorowanie stanu</label>
162                     <div class="col-sm-9 col-md-6">
163                         <div class="btn-group" data-toggle="buttons">
164                             {% for option in form.notify_type %}
165                                 <label class="btn btn-default">
166                                     <input type="radio" autocomplete="off" name="{{ option.name }}" value="{{ option.choice_value }}"
167                                             {% if option.is_checked %}checked{% endif %}
168                                             data-target=".notify-type-{{ forloop.counter0 }}"> {{ option.choice_label }}
169                                 </label>
170                             {% endfor %}
171                         </div>
172                     </div>
173                 </div>
174
175                 <div class="tab-content">
176                     <div class="tab-pane notify-type-0"></div>
177
178                     <div class="tab-pane notify-type-1 notify-type-2" style="margin-top: 15px">
179                         {% bootstrap_field form.notify_address layout="horizontal" %}
180                     </div>
181                 </div>
182
183                 <div class="collapse">
184                     <div class="form-group">
185                         <label class="col-sm-3 col-md-4 control-label">Monitorowanie wyjścia</label>
186                         <div class="col-sm-9 col-md-6">
187                             <div class="btn-group" data-toggle="buttons">
188                                 {% for option in form.watch_output_type %}
189                                     <label class="btn btn-default">
190                                         <input type="radio" autocomplete="off" name="{{ option.name }}" value="{{ option.choice_value }}"
191                                                 {% if option.is_checked %}checked{% endif %}
192                                                 data-target=".watch-output-type-{{ forloop.counter0 }}"> {{ option.choice_label }}
193                                     </label>
194                                 {% endfor %}
195                             </div>
196                         </div>
197                     </div>
198
199                     <div class="tab-content">
200                         <div class="tab-pane watch-output-type-0"></div>
201
202                         <div class="tab-pane watch-output-type-1 watch-output-type-2" style="margin-top: 15px">
203                             {% bootstrap_field form.watch_output_address layout="horizontal" %}
204                             {% bootstrap_field form.watch_output_pattern layout="horizontal" %}
205                         </div>
206                     </div>
207                 </div>
208             </fieldset>
209
210             <fieldset id="other" class="tab-pane" role="tabpanel">
211                 <div class="form-group">
212                     <label class="col-sm-3 col-md-4 control-label">Preprocessing</label>
213                     <div class="col-sm-9 col-md-6">
214                         <div class="btn-group" data-toggle="buttons">
215                             {% for option in form.preprocess_type %}
216                                 <label class="btn btn-default">
217                                     <input type="radio" autocomplete="off" name="{{ option.name }}" value="{{ option.choice_value }}"
218                                             {% if option.is_checked %}checked{% endif %}
219                                             data-target=".preprocess-type-{{ forloop.counter0 }}"> {{ option.choice_label }}
220                                 </label>
221                             {% endfor %}
222                         </div>
223                     </div>
224                 </div>
225
226                 <div class="tab-content">
227                     <div class="tab-pane preprocess-type-0"></div>
228
229                     <div class="tab-pane preprocess-type-1" style="margin-top: 15px">
230                         {% bootstrap_field form.preprocess_cmd layout="horizontal" %}
231                     </div>
232
233                     <div class="tab-pane preprocess-type-2" style="margin-top: 15px">
234                         {% bootstrap_field form.preprocess_script layout="horizontal" %}
235                     </div>
236                 </div>
237
238                 <div class="form-group">
239                     <label class="col-sm-3 col-md-4 control-label">Postprocessing</label>
240                     <div class="col-sm-9 col-md-6">
241                         <div class="btn-group" data-toggle="buttons">
242                             {% for option in form.postprocess_type %}
243                                 <label class="btn btn-default">
244                                     <input type="radio" autocomplete="off" name="{{ option.name }}" value="{{ option.choice_value }}"
245                                             {% if option.is_checked %}checked{% endif %}
246                                             data-target=".postprocess-type-{{ forloop.counter0 }}"> {{ option.choice_label }}
247                                 </label>
248                             {% endfor %}
249                         </div>
250                     </div>
251                 </div>
252
253                 <div class="tab-content">
254                     <div class="tab-pane postprocess-type-0"></div>
255
256                     <div class="tab-pane postprocess-type-1" style="margin-top: 15px">
257                         {% bootstrap_field form.postprocess_cmd layout="horizontal" %}
258                     </div>
259
260                     <div class="tab-pane postprocess-type-2" style="margin-top: 15px">
261                         {% bootstrap_field form.postprocess_script layout="horizontal" %}
262                     </div>
263                 </div>
264
265                 {% bootstrap_field form.native layout="horizontal" %}
266                 {% bootstrap_checkbox form.persistent %}
267             </fieldset>
268         </div>
269
270         <hr>
271
272         <div class="row">
273             <div class="col-sm-offset-3 col-md-offset-4 col-sm-9 col-md-6">
274                 <button type="submit" class="btn btn-primary">Zleć zadanie</button>
275                 <button type="reset" class="btn btn-warning">Resetuj</button>
276                 <a id="toggle-advanced" href="#"><span class="text-muted">Pokaż zaawansowane</span></a>
277             </div>
278         </div>
279     </form>
280
281 {% endblock %}