diff --git a/form.js b/form.js new file mode 100644 index 0000000000000000000000000000000000000000..ed93a437965cb503ddd726a9ad7188be88bf830d --- /dev/null +++ b/form.js @@ -0,0 +1,68 @@ +const table = { + "interactive": { "max_cpu": 48, "max_hour": 2, "max_gpu": -1 }, + "express": { "max_cpu": 48, "max_hour": 2, "max_gpu": -1 }, + "short": { "max_cpu": 48, "max_hour": 12, "max_gpu": -1 }, + "pascalnodes": { "max_cpu": 28, "max_hour": 12, "max_gpu": 4 }, + "pascalnodes-medium": { "max_cpu": 28, "max_hour": 48, "max_gpu": 4 }, + "medium": { "max_cpu": 48, "max_hour": 50, "max_gpu": -1 }, + "long": { "max_cpu": 48, "max_hour": 150, "max_gpu": -1 }, + "intel-dcb": { "max_cpu": 24, "max_hour": 150, "max_gpu": -1 }, + "amd-hdr100": { "max_cpu": 128, "max_hour": 150, "max_gpu": -1 }, + "largemem": { "max_cpu": 24, "max_hour": 50, "max_gpu": -1 }, + "largemem-long": { "max_cpu": 24, "max_hour": 150, "max_gpu": -1 }, + "amperenodes": { "max_cpu": 128, "max_hour": 12, "max_gpu": 2 }, + "amperenodes-medium": { "max_cpu": 128, "max_hour": 48, "max_gpu": 2 }, +} + +function set_max_value(form_id, value) { + const form_element = $(form_id); + form_element.attr({'max': value}); +} + +function set_partition_change_handler() { + let partition_select = $("#batch_connect_session_context_bc_partition"); + partition_select.change( function(e) { + toggle_gpu_visibility(e); + }); +} + +function toggle_gpu_visibility(event) { + const partition = event.target.value; + const cpu_selector = '#batch_connect_session_context_bc_num_slots'; + const gpu_selector = '#batch_connect_session_context_bc_num_gpus'; + const hour_selector = '#batch_connect_session_context_bc_num_hours'; + + toggle_visibilty_of_form_group(gpu_selector, table[partition]["max_gpu"] != -1); + set_max_value(cpu_selector, table[partition]["max_cpu"]); + set_max_value(gpu_selector, table[partition]["max_gpu"]); + set_max_value(hour_selector, table[partition]["max_hour"]); +} + +function toggle_visibilty_of_form_group(form_id, show) { + let form_element = $(form_id); + let parent = form_element; + + while ( + (! parent[0].classList.contains('form-group')) && + (! parent.is('html')) // ensure that we don't loop infinitely + ) { + parent = parent.parent(); + } + + // If parent is HTML then something has gone wrong and visibility should not be changed + if ( parent.is('html') ) { + return; + } + + if(show) { + parent.show(); + } else { + parent.hide(); + } +} + +toggle_gpu_visibility( + // Fake the event + { target: document.querySelector('#batch_connect_session_context_bc_partition') } +); +set_partition_change_handler(); diff --git a/form.yml.erb b/form.yml.erb index aff53991f1f49c5afbe874796da2bd73bd1e76d5..24c5b9d186c584571fab2501cbe853b298847088 100644 --- a/form.yml.erb +++ b/form.yml.erb @@ -69,6 +69,7 @@ attributes: value: 1 bc_num_slots: + widget: "number_field" label: Number of CPU value: 1 min: 1 @@ -84,6 +85,7 @@ attributes: step: 1 bc_num_gpus: + widget: "number_field" label: Number of GPUs value: 1 min: 1