1 {% extends 'qcg/base.html' %}
2 {% load staticfiles bootstrap3 qcg_utils %}
5 <link href="{% static 'qcg/selectize/selectize.bootstrap3.css' %}" rel="stylesheet">
9 <script src="{% static 'qcg/selectize/selectize.min.js' %}"></script>
10 <script src="{% static 'qcg/formset/jquery.formset.js' %}"></script>
12 {% include 'filex/source.js.html' %}
16 var gridftpButton = $('<button/>', {
18 'class': 'btn btn-default pull-right',
20 'data-toggle': 'modal',
21 'data-target': '#gridftp'
24 function fullPath(path, file) {
25 var res = path + file.get('name');
33 $('#id_master_file,#id_executable,#id_input,#id_preprocess_script,#id_postprocess_script').before(function() {
35 return gridftpButton.clone().click(function() {
36 $('#select-btn').off().click(function() {
37 var selected = filex.selectedFiles();
39 if (selected.length != 1 || !selected[0].isFile()) {
40 alert('Wybierz dokładnie jeden plik.');
44 var file = fullPath(filex.host + '/' + filex.path.full() + '/', selected[0]);
46 target.selectize.clear();
47 target.selectize.addOption({value: file, text: file});
48 target.selectize.addItem(file);
49 target.selectize.refreshItems();
51 $('#gridftp').modal('hide');
52 filex.clearSelection();
55 }).wrap('<div style="margin-right: 80px"></div>');
57 $('#id_stage_in').before(function() {
59 return gridftpButton.clone().click(function() {
60 $('#select-btn').off().click(function() {
61 var path = filex.host + '/' + filex.path.full() + '/';
63 _.each(filex.selectedFiles(), function(item) {
64 var file = fullPath(path, item);
65 target.selectize.addOption({value: file, text: file});
66 target.selectize.addItem(file);
68 target.selectize.refreshItems();
70 $('#gridftp').modal('hide');
71 filex.clearSelection();
74 }).wrap('<div style="margin-right: 80px"></div>');
76 $('#id_application').selectize();
77 $('#id_arguments,#id_properties,#id_native').selectize({
78 plugins: ['remove_button'],
81 option_create: function(data, escape) {
82 return '<div class="create">Dodaj <strong>' + escape(data.input) + '</strong>…</div>';
86 $('#id_queue').selectize({
89 option_create: function(data, escape) {
90 return '<div class="create">Wybierz <strong>' + escape(data.input) + '</strong>…</div>';
94 $('#id_modules,#id_hosts,#id_master_file,#id_executable,#id_input,#id_stage_in,#id_preprocess_script,#id_postprocess_script').selectize({
95 plugins: ['remove_button']
98 // hide delete checkbox in empty env form
99 $('#env-form-empty').find('div.form-group:last-of-type').hide();
100 $('#env-controls').find('> div').formset({
101 formTemplate: '#env-form-empty',
102 parent: '#env-controls',
103 addLinkParent: '#add-env-form',
105 addCssClass: 'add-btn',
107 deleteCssClass: 'delete-btn btn btn-xs btn-danger'
110 $('input[name="notify_type"],input[name="watch_output_type"],input[name="preprocess_type"],input[name="postprocess_type"]').on('change', function () {
113 $(this).parent().toggleClass('active', this.checked);
119 $('#toggle-advanced').click(function(e) {
121 $('form .collapse').collapse('toggle');
122 $(this).find('span').text(this.text == "Pokaż zaawansowane" ? "Ukryj zaawansowane" : "Pokaż zaawansowane");
128 {% block container %}
129 <h1 class="page-header">{% block title %}Zleć zadanie{% endblock %}</h1>
132 <div class="alert alert-danger">
133 <strong>Uwaga!</strong> Formularz zawiera błędy.
134 {{ form.non_field_errors }}
135 {{ env_formset.non_field_errors }}
139 <form action="." method="post" class="form-horizontal">
143 <ul class="nav nav-tabs" style="margin-bottom: 20px">
144 <li role="presentation" class="active"><a href="#basic" data-toggle="tab">Podstawowe</a></li>
145 <li role="presentation"><a href="#resources" data-toggle="tab">Zasoby</a></li>
146 <li role="presentation"><a href="#files" data-toggle="tab">Pliki</a></li>
147 <li role="presentation"><a href="#environment" data-toggle="tab">Środowisko</a></li>
148 <li role="presentation"><a href="#monitoring" data-toggle="tab">Powiadomienia</a></li>
149 <li role="presentation"><a href="#other" data-toggle="tab">Inne</a></li>
152 <div class="tab-content">
153 <fieldset id="basic" class="tab-pane active" role="tabpanel">
154 {% bootstrap_field form.application layout="horizontal" %}
155 {% bootstrap_field form.master_file layout="horizontal" %}
156 {% bootstrap_field form.executable layout="horizontal" form_group_class="form-group collapse" %}
157 {% bootstrap_field form.script layout="horizontal" form_group_class="form-group collapse" %}
158 {% bootstrap_field form.arguments layout="horizontal" %}
159 {% bootstrap_field form.note layout="horizontal" %}
160 {% bootstrap_field form.grant layout="horizontal" form_group_class="form-group collapse" %}
163 <fieldset id="resources" class="tab-pane" role="tabpanel">
164 {% bootstrap_field form.hosts layout="horizontal" %}
165 {% bootstrap_field form.queue layout="horizontal" %}
166 {% bootstrap_field form.properties layout="horizontal" form_group_class="form-group collapse" %}
167 {% bootstrap_field form.modules layout="horizontal" form_group_class="form-group collapse" %}
168 {% bootstrap_field form.procs layout="horizontal" %}
169 {% bootstrap_field form.nodes layout="horizontal" form_group_class="form-group collapse" %}
170 {% bootstrap_field form.wall_time layout="horizontal" form_group_class="form-group timerange" %}
171 {% bootstrap_field form.memory layout="horizontal" form_group_class="form-group collapse" %}
172 {% bootstrap_field form.memory_per_slot layout="horizontal" form_group_class="form-group collapse" %}
173 {% bootstrap_field form.reservation layout="horizontal" form_group_class="form-group collapse" %}
176 <fieldset id="files" class="tab-pane" role="tabpanel">
177 {% bootstrap_field form.input layout="horizontal" %}
178 {% bootstrap_field form.stage_in layout="horizontal" %}
179 {# {% bootstrap_field form.stage_out layout="horizontal" form_group_class="form-group collapse" %}#}
182 <fieldset id="environment" class="tab-pane" role="tabpanel">
183 {{ env_formset.management_form }}
185 <div class="form-group">
186 <label class="col-sm-3 col-md-4 control-label">Zmienne środowiskowe</label>
187 <div class="col-sm-9 col-md-6">
188 <div id="env-controls">
189 {% for env_form in env_formset %}
190 <div>{% bootstrap_form env_form layout='inline' %}</div>
193 <div id="add-env-form"></div>
194 <div id="env-form-empty" style="display: none">
195 {% bootstrap_form env_formset.empty_form layout='inline' %}
201 <fieldset id="monitoring" class="tab-pane" role="tabpanel">
202 {% bootstrap_checkbox form.monitoring %}
204 <div class="form-group">
205 <label class="col-sm-3 col-md-4 control-label">Monitorowanie stanu</label>
206 <div class="col-sm-9 col-md-6">
207 <div class="btn-group" data-toggle="buttons">
208 {% for option in form.notify_type %}
209 <label class="btn btn-default">
210 <input type="radio" autocomplete="off" name="{{ option.name }}" value="{{ option.choice_value }}"
211 {% if option.is_checked %}checked{% endif %}
212 data-target=".notify-type-{{ forloop.counter0 }}"> {{ option.choice_label }}
219 <div class="tab-content">
220 <div class="tab-pane notify-type-0"></div>
222 <div class="tab-pane notify-type-1 notify-type-2" style="margin-top: 15px">
223 {% bootstrap_field form.notify_address layout="horizontal" %}
227 <div class="collapse">
228 <div class="form-group">
229 <label class="col-sm-3 col-md-4 control-label">Monitorowanie wyjścia</label>
230 <div class="col-sm-9 col-md-6">
231 <div class="btn-group" data-toggle="buttons">
232 {% for option in form.watch_output_type %}
233 <label class="btn btn-default">
234 <input type="radio" autocomplete="off" name="{{ option.name }}" value="{{ option.choice_value }}"
235 {% if option.is_checked %}checked{% endif %}
236 data-target=".watch-output-type-{{ forloop.counter0 }}"> {{ option.choice_label }}
243 <div class="tab-content">
244 <div class="tab-pane watch-output-type-0"></div>
246 <div class="tab-pane watch-output-type-1 watch-output-type-2" style="margin-top: 15px">
247 {% bootstrap_field form.watch_output_address layout="horizontal" %}
248 {% bootstrap_field form.watch_output_pattern layout="horizontal" %}
254 <fieldset id="other" class="tab-pane" role="tabpanel">
255 <div class="form-group">
256 <label class="col-sm-3 col-md-4 control-label">Preprocessing</label>
257 <div class="col-sm-9 col-md-6">
258 <div class="btn-group" data-toggle="buttons">
259 {% for option in form.preprocess_type %}
260 <label class="btn btn-default">
261 <input type="radio" autocomplete="off" name="{{ option.name }}" value="{{ option.choice_value }}"
262 {% if option.is_checked %}checked{% endif %}
263 data-target=".preprocess-type-{{ forloop.counter0 }}"> {{ option.choice_label }}
270 <div class="tab-content">
271 <div class="tab-pane preprocess-type-0"></div>
273 <div class="tab-pane preprocess-type-1" style="margin-top: 15px">
274 {% bootstrap_field form.preprocess_cmd layout="horizontal" %}
277 <div class="tab-pane preprocess-type-2" style="margin-top: 15px">
278 {% bootstrap_field form.preprocess_script layout="horizontal" %}
282 <div class="form-group">
283 <label class="col-sm-3 col-md-4 control-label">Postprocessing</label>
284 <div class="col-sm-9 col-md-6">
285 <div class="btn-group" data-toggle="buttons">
286 {% for option in form.postprocess_type %}
287 <label class="btn btn-default">
288 <input type="radio" autocomplete="off" name="{{ option.name }}" value="{{ option.choice_value }}"
289 {% if option.is_checked %}checked{% endif %}
290 data-target=".postprocess-type-{{ forloop.counter0 }}"> {{ option.choice_label }}
297 <div class="tab-content">
298 <div class="tab-pane postprocess-type-0"></div>
300 <div class="tab-pane postprocess-type-1" style="margin-top: 15px">
301 {% bootstrap_field form.postprocess_cmd layout="horizontal" %}
304 <div class="tab-pane postprocess-type-2" style="margin-top: 15px">
305 {% bootstrap_field form.postprocess_script layout="horizontal" %}
309 {% bootstrap_field form.native layout="horizontal" %}
310 {% bootstrap_checkbox form.persistent %}
317 <div class="col-sm-offset-3 col-md-offset-4 col-sm-9 col-md-6">
318 <button type="submit" class="btn btn-primary">Zleć zadanie</button>
319 <button type="reset" class="btn btn-warning">Resetuj</button>
320 <a id="toggle-advanced" href="#"><span class="text-muted">Pokaż zaawansowane</span></a>
325 <div id="gridftp" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="modal-label" aria-hidden="true">
326 <div class="modal-dialog modal-lg">
327 <div class="modal-content">
328 <div class="modal-header">
329 <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
330 <h4 class="modal-title" id="modal-label">Wybierz plik</h4>
332 <div class="modal-body">
333 {% include 'filex/source.html' %}
335 <div class="modal-footer">
336 <button type="button" class="btn btn-default" data-dismiss="modal">Anuluj</button>
337 <button id="select-btn" type="button" class="btn btn-primary">Wybierz</button>