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