1 {% extends "base.html" %}
7 /* hides images not in use. Not applied globally since doesn't make sense in all cases */
8 select option:disabled {
13 {% bootstrap_form_errors form type='non_fields' %}
14 <form id="quick_booking_form" action="/booking/quick/" method="POST" class="form class="Anuket-Text"">
16 <div class="row mx-0 px-0">
17 <div class="col-12 mx-0 px-0 mt-2">
20 Please select a host type you wish to book. Only available types are shown.
21 If something isn't working right, let us know <a href="mailto:{{contact_email}}"> here! </a>
23 {% endblock form-text %}
24 {% bootstrap_field form.filter_field show_label=False %}
27 <div class="row justify-content-center">
28 <div class="col-12 col-lg-6 my-2">
29 <div class="col border rounded py-2 h-100">
30 {% bootstrap_field form.purpose %}
31 {% bootstrap_field form.project %}
32 {% bootstrap_field form.length %}
33 <span>Days: </span><output id="daysout">0</output>
35 document.getElementById("id_length").setAttribute("oninput", "daysout.value=this.value");
36 document.getElementById("daysout").value = document.getElementById("id_length").value;
41 <div class="col-12 col-lg-6 my-2">
42 <div class="col border rounded py-2 h-100">
43 <label>Collaborators</label>
49 <div class="row justify-content-center">
50 <div class="col-12 col-lg-6 my-2">
51 <div class="col border rounded py-2 h-100">
52 {% bootstrap_field form.hostname %}
53 {% bootstrap_field form.image %}
56 <div class="col-12 col-lg-6 my-2">
57 <div class="col border rounded py-2 h-100">
58 {% bootstrap_field form.global_cloud_config %}
61 <div class="col-12 d-flex mt-2 justify-content-end">
62 <button id="quick_booking_confirm" onclick="submit_form();" type="button" class="btn btn-success">Confirm</button>
66 {% block image_script %}
67 {% endblock image_script %}
69 <script type="text/javascript">
70 function submit_form()
73 document.getElementById("quick_booking_form").submit();
76 function hide_dropdown(drop_id) {
77 var drop = document.getElementById(drop_id);
78 //select 'blank' option
79 for( var i=0; i < drop.length; i++ )
81 if ( drop.options[i].text == '---------' )
82 drop.selectedIndex = i;
86 function get_selected_value(key){
87 for( var attr in multi_filter_widget.result[key] ){
93 $(document).ready(function() {
94 $('.has-popover').popover({'trigger':'hover'});
97 var sup_image_dict = {{image_filter | safe}};
98 var sup_installer_dict = {{installer_filter | safe}};
99 var sup_scenario_dict = {{scenario_filter | safe}};
100 var resource_profile_map = {{resource_profile_map | safe}};
102 function imageFilter() {
103 var drop = document.getElementById("id_image");
104 var lab_pk = get_selected_value("lab");
105 var profile_pk = get_selected_value("resource");
107 for (const childNode of drop.childNodes) {
108 var image_object = sup_image_dict[childNode.value];
109 if (image_object) //weed out empty option
111 console.log("image object:");
112 console.log(image_object);
113 const img_at_lab = image_object.lab == lab_pk;
114 const profiles = resource_profile_map[profile_pk];
115 console.log("profiles are:");
116 console.log(profiles);
117 console.log("profile map is:");
118 console.log(resource_profile_map);
119 console.log("host profile is" + image_object.architecture);
120 const img_in_template = profiles && profiles.indexOf(image_object.architecture) > -1
121 childNode.disabled = !img_at_lab || !img_in_template;
128 Array.from(document.getElementsByClassName("grid-item-select-btn")).forEach(function (element) {
129 element.addEventListener('click', imageFilter);
132 function dropFilter(target, target_filter, master) {
133 var dropdown = document.getElementById(target);
135 hide_dropdown(target);
137 var drop = document.getElementById(master);
138 var opts = target_filter[drop.options[drop.selectedIndex].value];
143 var map = Object.create(null);
144 for (var i = 0; i < opts.length; i++) {
149 for (var i = 0; i < dropdown.childNodes.length; i++) {
150 if (dropdown.childNodes[i].value in opts && !(dropdown.childNodes[i].value in {})) {
151 dropdown.childNodes[i].style.display = "inherit";
152 dropdown.childNodes[i].disabled = false;