uwsgi configuration + fabfile
[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="#reservation" data-toggle="tab">Rezerwacja</a></li>
100             <li role="presentation"><a href="#monitoring" data-toggle="tab">Powiadomienia</a></li>
101             <li role="presentation"><a href="#other" data-toggle="tab">Inne</a></li>
102         </ul>
103
104         <div class="tab-content">
105             <fieldset id="basic" class="tab-pane active" role="tabpanel">
106                 {% bootstrap_field form.application layout="horizontal" %}
107                 <div class="row" style="margin-top: -15px; margin-bottom: 15px">
108                     <div class="col-sm-offset-3 col-md-offset-4 col-sm-9 col-md-6">
109                         {# TODO grid ftp #}
110                         <a id="add-main-file" href="#">wybierz plik główny &raquo;</a>
111                     </div>
112                 </div>
113
114                 {% bootstrap_field form.executable layout="horizontal" form_group_class="form-group collapse"  %}
115                 {% bootstrap_field form.arguments layout="horizontal" %}
116                 {% bootstrap_field form.name layout="horizontal" %}
117                 {% bootstrap_field form.note layout="horizontal" %}
118                 {% bootstrap_field form.grant layout="horizontal" %}
119             </fieldset>
120
121             <fieldset id="resources" class="tab-pane" role="tabpanel">
122                 {% bootstrap_field form.host layout="horizontal" %}
123                 {% bootstrap_field form.queue layout="horizontal" %}
124                 {% bootstrap_field form.procs layout="horizontal" %}
125                 {% bootstrap_field form.nodes layout="horizontal" form_group_class="form-group collapse" %}
126                 {% include 'qcg/time_range_field.html' with field_name='wall_time' field=form.wall_time %}
127                 {% bootstrap_field form.memory layout="horizontal" %}
128                 {% bootstrap_field form.memory_per_slot layout="horizontal" %}
129             </fieldset>
130
131             <fieldset id="files" class="tab-pane" role="tabpanel">
132                 {% bootstrap_field form.input layout="horizontal" %}
133                 {% bootstrap_field form.output layout="horizontal" %}
134                 {% bootstrap_field form.error layout="horizontal" %}
135                 {% bootstrap_field form.stage_in layout="horizontal" %}
136                 {% bootstrap_field form.stage_out layout="horizontal" %}
137             </fieldset>
138
139             <fieldset id="environment" class="tab-pane" role="tabpanel">
140                 {% bootstrap_field form.properties layout="horizontal" %}
141                 {{ env_formset.management_form }}
142
143                 <div class="form-group">
144                     <label class="col-sm-3 col-md-4 control-label">Zmienne środowiskowe</label>
145                     <div class="col-sm-9 col-md-6">
146                         <div id="env-controls">
147                             {% for env_form in env_formset %}
148                                 <div>{% bootstrap_form env_form layout='inline' %}</div>
149                             {% endfor %}
150                         </div>
151                         <div id="add-env-form"></div>
152                         <div id="env-form-empty" style="display: none">
153                             {% bootstrap_form env_formset.empty_form layout='inline' %}
154                         </div>
155                     </div>
156                 </div>
157
158                 {% bootstrap_field form.modules layout="horizontal" %}
159             </fieldset>
160
161             <fieldset id="reservation" class="tab-pane" role="tabpanel">
162                 {% bootstrap_field form.not_before layout="horizontal" %}
163                 {% bootstrap_field form.not_after layout="horizontal" %}
164                 {% include 'qcg/time_range_field.html' with field_name='deadline' field=form.deadline %}
165                 {% bootstrap_field form.reservation layout="horizontal" form_group_class="form-group collapse" %}
166             </fieldset>
167
168             <fieldset id="monitoring" class="tab-pane" role="tabpanel">
169                 {% bootstrap_checkbox form.monitoring %}
170
171                 <div class="form-group">
172                     <label class="col-sm-3 col-md-4 control-label">Monitorowanie stanu</label>
173                     <div class="col-sm-9 col-md-6">
174                         <div class="btn-group" data-toggle="buttons">
175                             {% for option in form.notify_type %}
176                                 <label class="btn btn-default">
177                                     <input type="radio" autocomplete="off" name="{{ option.name }}" value="{{ option.choice_value }}"
178                                             {% if option.is_checked %}checked{% endif %}
179                                             data-target=".notify-type-{{ option.choice_value }}"> {{ option.choice_label }}
180                                 </label>
181                             {% endfor %}
182                         </div>
183                     </div>
184                 </div>
185
186                 <div class="tab-content">
187                     <div class="tab-pane notify-type-0"></div>
188
189                     <div class="tab-pane notify-type-1 notify-type-2" style="margin-top: 15px">
190                         {% bootstrap_field form.notify_address layout="horizontal" %}
191                     </div>
192                 </div>
193
194                 <div class="form-group">
195                     <label class="col-sm-3 col-md-4 control-label">Monitorowanie wyjścia</label>
196                     <div class="col-sm-9 col-md-6">
197                         <div class="btn-group" data-toggle="buttons">
198                             {% for option in form.watch_output_type %}
199                                 <label class="btn btn-default">
200                                     <input type="radio" autocomplete="off" name="{{ option.name }}" value="{{ option.choice_value }}"
201                                             {% if option.is_checked %}checked{% endif %}
202                                             data-target=".watch-output-type-{{ option.choice_value }}"> {{ option.choice_label }}
203                                 </label>
204                             {% endfor %}
205                         </div>
206                     </div>
207                 </div>
208
209                 <div class="tab-content">
210                     <div class="tab-pane watch-output-type-0"></div>
211
212                     <div class="tab-pane watch-output-type-1 watch-output-type-2" style="margin-top: 15px">
213                         {% bootstrap_field form.watch_output_address layout="horizontal" %}
214                         {% bootstrap_field form.watch_output_pattern layout="horizontal" %}
215                     </div>
216                 </div>
217             </fieldset>
218
219             <fieldset id="other" class="tab-pane" role="tabpanel">
220                 <div class="form-group">
221                     <label class="col-sm-3 col-md-4 control-label">Preprocessing</label>
222                     <div class="col-sm-9 col-md-6">
223                         <div class="btn-group" data-toggle="buttons">
224                             {% for option in form.preprocess_type %}
225                                 <label class="btn btn-default">
226                                     <input type="radio" autocomplete="off" name="{{ option.name }}" value="{{ option.choice_value }}"
227                                             {% if option.is_checked %}checked{% endif %}
228                                             data-target=".preprocess-type-{{ option.choice_value }}"> {{ option.choice_label }}
229                                 </label>
230                             {% endfor %}
231                         </div>
232                     </div>
233                 </div>
234
235                 <div class="tab-content">
236                     <div class="tab-pane preprocess-type-0"></div>
237
238                     <div class="tab-pane preprocess-type-1" style="margin-top: 15px">
239                         {% bootstrap_field form.preprocess_cmd layout="horizontal" %}
240                     </div>
241
242                     <div class="tab-pane preprocess-type-2" style="margin-top: 15px">
243                         {% bootstrap_field form.preprocess_script layout="horizontal" %}
244                     </div>
245                 </div>
246
247                 <div class="form-group">
248                     <label class="col-sm-3 col-md-4 control-label">Postprocessing</label>
249                     <div class="col-sm-9 col-md-6">
250                         <div class="btn-group" data-toggle="buttons">
251                             {% for option in form.postprocess_type %}
252                                 <label class="btn btn-default">
253                                     <input type="radio" autocomplete="off" name="{{ option.name }}" value="{{ option.choice_value }}"
254                                             {% if option.is_checked %}checked{% endif %}
255                                             data-target=".postprocess-type-{{ option.choice_value }}"> {{ option.choice_label }}
256                                 </label>
257                             {% endfor %}
258                         </div>
259                     </div>
260                 </div>
261
262                 <div class="tab-content">
263                     <div class="tab-pane postprocess-type-0"></div>
264
265                     <div class="tab-pane postprocess-type-1" style="margin-top: 15px">
266                         {% bootstrap_field form.postprocess_cmd layout="horizontal" %}
267                     </div>
268
269                     <div class="tab-pane postprocess-type-2" style="margin-top: 15px">
270                         {% bootstrap_field form.postprocess_script layout="horizontal" %}
271                     </div>
272                 </div>
273
274                 {% bootstrap_field form.native layout="horizontal" %}
275                 {% bootstrap_checkbox form.persistent %}
276                 {% bootstrap_checkbox form.use_scratch %}
277             </fieldset>
278         </div>
279
280         <hr>
281
282         <div class="row">
283             <div class="col-sm-offset-3 col-md-offset-4 col-sm-9 col-md-6">
284                 <button type="submit" class="btn btn-primary">Zleć zadanie</button>
285                 <button type="reset" class="btn btn-warning">Resetuj</button>
286                 <a id="toggle-advanced" href="#"><span class="text-muted">Pokaż zaawansowane</span></a>
287             </div>
288         </div>
289     </form>
290
291 {% endblock %}