Merge branch 'master' of mmka.chem.univ.gda.pl:qcg-portal
[qcg-portal.git] / qcg / templates / qcg / job_submit.html
index ecc3c72..0afb982 100644 (file)
@@ -1,5 +1,5 @@
 {% extends 'qcg/base.html' %}
-{% load staticfiles bootstrap3 qcg_utils %}
+{% load staticfiles bootstrap3 %}
 
 {% block extra_css %}
     <link href="{% static 'qcg/selectize/selectize.bootstrap3.css' %}" rel="stylesheet">
@@ -34,7 +34,7 @@
                 return res;
             }
 
-            $('#id_master_file,#id_executable,#id_input,#id_preprocess_script,#id_postprocess_script').before(function() {
+            $('#id_master_file,#id_pdb_file,#id_executable,#id_input,#id_preprocess_script,#id_postprocess_script').before(function() {
                 var target = this;
                 return gridftpButton.clone().click(function() {
                     $('#select-btn').off().click(function() {
@@ -77,7 +77,7 @@
                 });
             }).wrap('<div style="margin-right: 80px"></div>');
 
-            $('#id_application').selectize();
+            $('#id_application,#id_force_field').selectize();
             $('#id_arguments,#id_properties,#id_native').selectize({
                 plugins: ['remove_button'],
                 create: true,
@@ -95,7 +95,9 @@
                     }
                 }
             });
-            $('#id_modules,#id_hosts,#id_master_file,#id_executable,#id_input,#id_stage_in,#id_preprocess_script,#id_postprocess_script').selectize({
+
+            $('#id_modules,#id_hosts,#id_pdb_file,#id_master_file,#id_executable,#id_input,#id_stage_in,#id_preprocess_script,#id_postprocess_script').selectize({
+
                 plugins: ['remove_button']
             });
 
             $('input[name="notify_type"],input[name="watch_output_type"],input[name="preprocess_type"],input[name="postprocess_type"]').on('change', function () {
                 $(this).tab('show');
             }).each(function() {
-                $(this).parent().toggleClass('active', this.checked);
-
                 if (this.checked)
                     $(this).tab('show');
             });
 
             $('#gridftp').one('show.bs.modal', function() {
                 filex.initialLoad();
+                $(this).find('.modal-body').css('height', window.innerHeight - 200 + 'px');
+            });
+
+            $('#template').on('show.bs.modal', function() {
+                this.reset();
+            }).on('shown.bs.modal', function() {
+                $(this).find('input[type="text"]')[0].focus();
+            }).on('submit', function(e) {
+                e.preventDefault();
+
+                // copy this form's fields to description form and send it
+                $('#description').append($(this).find('input').clone().attr('type', 'hidden')).submit();
             });
         });
     </script>
 {% endblock %}
 
 {% block container %}
-    <h1 class="page-header">{% block title %}Zleć zadanie{% endblock %}</h1>
+    <div class="pull-right">
+        {% if template %}
+            <button class="btn btn-default" data-toggle="modal" data-target="#template">Zapisz</button>
+            <button class="btn btn-default" data-toggle="modal" data-target="#delete-modal">Usuń</button>
+        {% else %}
+            <button class="btn btn-default" data-toggle="modal" data-target="#template">Zapisz jako szablon</button>
+        {% endif %}
+    </div>
+
+    <h1 class="page-header">{% block title %}Zleć zadanie{% endblock %} <small>{{ template.name }}</small></h1>
 
     {% if errors %}
         <div class="alert alert-danger">
             <strong>Uwaga!</strong> Formularz zawiera błędy.
             {{ form.non_field_errors }}
             {{ env_formset.non_field_errors }}
+            {{ template_form.non_field_errors }}
         </div>
     {% endif %}
 
-    <form action="." method="post" class="form-horizontal">
+    <form id="description" action="." method="post" class="form-horizontal">
         {% csrf_token %}
 
-        <!-- Nav tabs -->
-        <ul class="nav nav-tabs" style="margin-bottom: 20px">
-            <li role="presentation" class="active"><a href="#basic" data-toggle="tab">Podstawowe</a></li>
-            <li role="presentation"><a href="#resources" data-toggle="tab">Zasoby</a></li>
-            <li role="presentation"><a href="#files" data-toggle="tab">Pliki</a></li>
-            <li role="presentation"><a href="#environment" data-toggle="tab">Środowisko</a></li>
-            <li role="presentation"><a href="#monitoring" data-toggle="tab">Powiadomienia</a></li>
-            <li role="presentation"><a href="#other" data-toggle="tab">Inne</a></li>
-        </ul>
-
-        <div class="tab-content">
-            <fieldset id="basic" class="tab-pane active" role="tabpanel">
-                {% bootstrap_field form.application layout="horizontal" %}
-                {% bootstrap_field form.master_file layout="horizontal" %}
-                {% bootstrap_field form.executable layout="horizontal" form_group_class="form-group collapse" %}
-                {% bootstrap_field form.script layout="horizontal" form_group_class="form-group collapse" %}
-                {% bootstrap_field form.arguments layout="horizontal" %}
-                {% bootstrap_field form.note layout="horizontal" %}
-                {% bootstrap_field form.grant layout="horizontal" form_group_class="form-group collapse" %}
-            </fieldset>
-
-            <fieldset id="resources" class="tab-pane" role="tabpanel">
-                {% bootstrap_field form.hosts layout="horizontal" %}
-                {% bootstrap_field form.queue layout="horizontal" %}
-                {% bootstrap_field form.properties layout="horizontal" form_group_class="form-group collapse" %}
-                {% bootstrap_field form.modules layout="horizontal" form_group_class="form-group collapse" %}
-                {% bootstrap_field form.procs layout="horizontal" %}
-                {% bootstrap_field form.nodes layout="horizontal" form_group_class="form-group collapse" %}
-                {% bootstrap_field form.wall_time layout="horizontal" form_group_class="form-group timerange" %}
-                {% bootstrap_field form.memory layout="horizontal" form_group_class="form-group collapse" %}
-                {% bootstrap_field form.memory_per_slot layout="horizontal" form_group_class="form-group collapse" %}
-                {% bootstrap_field form.reservation layout="horizontal" form_group_class="form-group collapse" %}
-            </fieldset>
-
-            <fieldset id="files" class="tab-pane" role="tabpanel">
-                {% bootstrap_field form.input layout="horizontal" %}
-                {% bootstrap_field form.stage_in layout="horizontal" %}
-            </fieldset>
-
-            <fieldset id="environment" class="tab-pane" role="tabpanel">
-                {{ env_formset.management_form }}
-
-                <div class="form-group">
-                    <label class="col-sm-3 col-md-4 control-label">Zmienne środowiskowe</label>
-                    <div class="col-sm-9 col-md-6">
-                        <div id="env-controls">
-                            {% for env_form in env_formset %}
-                                <div>{% bootstrap_form env_form layout='inline' %}</div>
-                            {% endfor %}
-                        </div>
-                        <div id="add-env-form"></div>
-                        <div id="env-form-empty" style="display: none">
-                            {% bootstrap_form env_formset.empty_form layout='inline' %}
-                        </div>
-                    </div>
-                </div>
-            </fieldset>
-
-            <fieldset id="monitoring" class="tab-pane" role="tabpanel">
-                {% bootstrap_checkbox form.monitoring %}
-
-                <div class="form-group">
-                    <label class="col-sm-3 col-md-4 control-label">Monitorowanie stanu</label>
-                    <div class="col-sm-9 col-md-6">
-                        <div class="btn-group" data-toggle="buttons">
-                            {% for option in form.notify_type %}
-                                <label class="btn btn-default">
-                                    <input type="radio" autocomplete="off" name="{{ option.name }}" value="{{ option.choice_value }}"
-                                            {% if option.is_checked %}checked{% endif %}
-                                            data-target=".notify-type-{{ forloop.counter0 }}"> {{ option.choice_label }}
-                                </label>
-                            {% endfor %}
-                        </div>
-                    </div>
-                </div>
-
-                <div class="tab-content">
-                    <div class="tab-pane notify-type-0"></div>
-
-                    <div class="tab-pane notify-type-1 notify-type-2" style="margin-top: 15px">
-                        {% bootstrap_field form.notify_address layout="horizontal" %}
-                    </div>
-                </div>
-
-                <div class="collapse">
-                    <div class="form-group">
-                        <label class="col-sm-3 col-md-4 control-label">Monitorowanie wyjścia</label>
-                        <div class="col-sm-9 col-md-6">
-                            <div class="btn-group" data-toggle="buttons">
-                                {% for option in form.watch_output_type %}
-                                    <label class="btn btn-default">
-                                        <input type="radio" autocomplete="off" name="{{ option.name }}" value="{{ option.choice_value }}"
-                                                {% if option.is_checked %}checked{% endif %}
-                                                data-target=".watch-output-type-{{ forloop.counter0 }}"> {{ option.choice_label }}
-                                    </label>
-                                {% endfor %}
-                            </div>
-                        </div>
-                    </div>
-
-                    <div class="tab-content">
-                        <div class="tab-pane watch-output-type-0"></div>
-
-                        <div class="tab-pane watch-output-type-1 watch-output-type-2" style="margin-top: 15px">
-                            {% bootstrap_field form.watch_output_address layout="horizontal" %}
-                            {% bootstrap_field form.watch_output_pattern layout="horizontal" %}
-                        </div>
-                    </div>
-                </div>
-            </fieldset>
-
-            <fieldset id="other" class="tab-pane" role="tabpanel">
-                <div class="form-group">
-                    <label class="col-sm-3 col-md-4 control-label">Preprocessing</label>
-                    <div class="col-sm-9 col-md-6">
-                        <div class="btn-group" data-toggle="buttons">
-                            {% for option in form.preprocess_type %}
-                                <label class="btn btn-default">
-                                    <input type="radio" autocomplete="off" name="{{ option.name }}" value="{{ option.choice_value }}"
-                                            {% if option.is_checked %}checked{% endif %}
-                                            data-target=".preprocess-type-{{ forloop.counter0 }}"> {{ option.choice_label }}
-                                </label>
-                            {% endfor %}
-                        </div>
-                    </div>
-                </div>
-
-                <div class="tab-content">
-                    <div class="tab-pane preprocess-type-0"></div>
-
-                    <div class="tab-pane preprocess-type-1" style="margin-top: 15px">
-                        {% bootstrap_field form.preprocess_cmd layout="horizontal" %}
-                    </div>
-
-                    <div class="tab-pane preprocess-type-2" style="margin-top: 15px">
-                        {% bootstrap_field form.preprocess_script layout="horizontal" %}
-                    </div>
-                </div>
-
-                <div class="form-group">
-                    <label class="col-sm-3 col-md-4 control-label">Postprocessing</label>
-                    <div class="col-sm-9 col-md-6">
-                        <div class="btn-group" data-toggle="buttons">
-                            {% for option in form.postprocess_type %}
-                                <label class="btn btn-default">
-                                    <input type="radio" autocomplete="off" name="{{ option.name }}" value="{{ option.choice_value }}"
-                                            {% if option.is_checked %}checked{% endif %}
-                                            data-target=".postprocess-type-{{ forloop.counter0 }}"> {{ option.choice_label }}
-                                </label>
-                            {% endfor %}
-                        </div>
-                    </div>
-                </div>
-
-                <div class="tab-content">
-                    <div class="tab-pane postprocess-type-0"></div>
-
-                    <div class="tab-pane postprocess-type-1" style="margin-top: 15px">
-                        {% bootstrap_field form.postprocess_cmd layout="horizontal" %}
-                    </div>
-
-                    <div class="tab-pane postprocess-type-2" style="margin-top: 15px">
-                        {% bootstrap_field form.postprocess_script layout="horizontal" %}
-                    </div>
-                </div>
-
-                {% bootstrap_field form.native layout="horizontal" %}
-                {% bootstrap_checkbox form.persistent %}
-            </fieldset>
-        </div>
+        {% include 'qcg/job_submit_form.html' %}
 
         <hr>
 
         </div>
     </form>
 
-    <div id="gridftp" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="modal-label" aria-hidden="true">
+    <div id="gridftp" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="gridftp-modal-label" aria-hidden="true">
         <div class="modal-dialog modal-lg">
             <div class="modal-content">
                 <div class="modal-header">
                     <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
-                    <h4 class="modal-title" id="modal-label">Wybierz plik</h4>
+                    <h4 class="modal-title" id="gridftp-modal-label">Wybierz plik</h4>
                 </div>
                 <div class="modal-body">
                     {% include 'filex/source.html' %}
         </div>
     </div>
 
+    <form id="template" action="." method="post" class="modal fade form-horizontal" tabindex="-1"
+          role="dialog" aria-labelledby="template-modal-label" aria-hidden="true">
+        <div class="modal-dialog">
+            <div class="modal-content">
+                <div class="modal-header">
+                    <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
+                    <h4 class="modal-title" id="template-modal-label">Podaj nazwę szablonu</h4>
+                </div>
+                <div class="modal-body">
+                    {% csrf_token %}
+                    <input type="hidden" name="save-template" value="1">
+                    {% bootstrap_field template_form.name layout="horizontal" %}
+                </div>
+                <div class="modal-footer">
+                    <button type="button" class="btn btn-default" data-dismiss="modal">Anuluj</button>
+                    <button type="submit" class="btn btn-primary" data-loading-text="Zapisywanie...">Zapisz</button>
+                </div>
+            </div>
+        </div>
+    </form>
+
+    {% if template %}
+        <form id="delete-modal" action="{% url 'template_delete' template.id %}" method="post" class="modal fade" tabindex="-1"
+              role="dialog" aria-labelledby="delete-modal-label" aria-hidden="true">
+            <div class="modal-dialog">
+                <div class="modal-content">
+                    <div class="modal-header">
+                        <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
+                        <h4 class="modal-title" id="delete-modal-label">Usuwanie szablonu</h4>
+                    </div>
+                    <div class="modal-body">
+                        {% csrf_token %}
+                        <p>Czy na pewno usunąć szablon <em>{{ template.name }}</em>?</p>
+                    </div>
+                    <div class="modal-footer">
+                        <button type="button" class="btn btn-default" data-dismiss="modal">Anuluj</button>
+                        <button type="submit" class="btn btn-danger">Usuń</button>
+                    </div>
+                </div>
+            </div>
+        </form>
+    {% endif %}
 {% endblock %}