cockpit/js/instance.js in cpee-1.4.25 vs cockpit/js/instance.js in cpee-1.4.26

- old
+ new

@@ -61,12 +61,12 @@ 'events' + '=' + 'error,change' + '&' + 'topic' + '=' + 'handlers' + '&' + 'events' + '=' + 'change';// }}} function cockpit() { //{{{ - $("button[name=base]").click(function(){ create_instance(null,false); }); - $("button[name=instance]").click(function(){ ui_activate_tab("#tabinstance"); monitor_instance(false,false); }); + $("button[name=base]").click(function(){ create_instance($("input[name=base-url]").val(),null,false,false); }); + $("button[name=instance]").click(function(){ ui_activate_tab("#tabinstance"); monitor_instance($("input[name=instance-url]").val(),$("input[name=repo-url]").val(),false,false); }); $("button[name=loadtestset]").click(function(e){new CustomMenu(e).menu($('#predefinedtestsets'),function(){ load_testset(false) } ); }); $("button[name=loadtestsetfile]").click(load_testsetfile); $("button[name=loadmodelfile]").click(load_modelfile); $("button[name=loadmodeltype]").click(function(e){new CustomMenu(e).menu($('#modeltypes'),load_modeltype, $("button[name=loadmodeltype]")); }); $("button[name=savetestset]").click(function(){ save_testset(); }); @@ -87,47 +87,45 @@ if (q.min || q.min == "") { ui_toggle_vis_tab($('#instance')); ui_toggle_vis_tab($('#parameters')); } if (q.monitor && q.load) { - $("input[name=instance-url]").val(q.monitor); if (q.load.match(/https?:\/\//)) { $("#predefinedtestsets").attr('data-other',q.load); } else { $("#predefinedtestsets div.menuitem").each(function(k,v){ if ($(v).text() == q.load) { $(v).attr('data-selected','selected'); } }); } ui_activate_tab("#tabexecution"); - monitor_instance(true,false); + monitor_instance(q.monitor,$("body").attr('current-repo'),true,false); } else if (q.load) { if (q.load.match(/https?:\/\//)) { $("#predefinedtestsets").attr('data-other',q.load); } else { $("#predefinedtestsets div.menuitem").each(function(k,v){ if ($(v).text() == q.load) { $(v).attr('data-selected','selected'); } }); } ui_activate_tab("#tabexecution"); - create_instance(q.load,false); - } else if (q.new || q.new == "" || q.load == "") { + create_instance($("body").attr('current-base'),q.load,true,false); + } else if (q.new || q.new == "") { ui_activate_tab("#tabinstance"); - create_instance("Plain Instance",false); + create_instance($("body").attr('current-base'),"Plain Instance",false,false); } else if (q.monitor) { - $("input[name=instance-url]").val(q.monitor); ui_activate_tab("#tabexecution"); - monitor_instance(false,false); + monitor_instance(q.monitor,$("body").attr('current-repo'),false,false); } else if (q.exec) { if (q.exec.match(/https?:\/\//)) { $("#predefinedtestsets").attr('data-other',q.load); } else { $("#predefinedtestsets div.menuitem").each(function(k,v){ if ($(v).text() == q.exec) { $(v).attr('data-selected','selected'); } }); } ui_activate_tab("#tabexecution"); - create_instance(q.exec,true); + create_instance($("body").attr('current-base'),q.exec,true,true); } } }); $.ajax({ url: $('body').attr('current-testsets') + "transformations.xml", @@ -139,17 +137,16 @@ }); } }); } //}}} -function sanitize_url(it) { //{{{ - var url = it.val(); +function sanitize_url(url) { //{{{ var lastChar = url.substr(url.length - 1) if (lastChar != '/') { - it.val(url + '/'); + url = (url + '/'); } - return it.val(); + return url; } //}}} function check_subscription() { // {{{ var url = $('body').attr('current-instance'); var num = 0; @@ -179,23 +176,27 @@ subscription_state = 'less'; format_visual_vote_clear(); } }// }}} -function create_instance(ask,exec) {// {{{ - var info = ask ? ask: prompt("Instance info?", "Enter info here"); +function create_instance(base,name,load,exec) {// {{{ + var info = name ? name : prompt("Instance info?", "Enter info here"); if (info != null) { if (info.match(/\S/)) { - var base = $("input[name=base-url]").val(); $.ajax({ type: "POST", url: base, dataType: "text", data: "info=" + info, success: function(res){ - $("input[name=instance-url]").val((base + "//" + res + "/").replace(/\/+/g,"/").replace(/:\//,"://")); - if (ask) monitor_instance(true,exec); + var iu = (base + "//" + res + "/").replace(/\/+/g,"/").replace(/:\//,"://"); + if (name) { + monitor_instance(iu,$("body").attr('current-repo'),load,exec); + } else { + $("body").attr('current-instance', sanitize_url(iu)); + $("input[name=instance-url]").val(iu); + } }, error: function(a,b,c) { alert("No CPEE running."); } }); @@ -227,13 +228,11 @@ monitor_instance_values("endpoints"); break; case 'attributes': monitor_instance_values("attributes"); monitor_instance_transformation(); - if (suspended_monitoring) { - suspended_monitoring = false; - } else { + if (!suspended_monitoring) { // or else it would load twice, because dsl changes also monitor_graph_change(true); } break; case 'state': monitor_instance_state_change(JSON.parse($('event > notification',data).text()).state); @@ -266,30 +265,30 @@ monitor_instance_transformation(); monitor_instance_dsl(); monitor_instance_state(); } //}}} -function monitor_instance(load,exec) {// {{{ - var url = sanitize_url($("input[name=instance-url]")); - sanitize_url($("input[name=base-url]")); - var rep = sanitize_url($("input[name=repo-url]")); +function monitor_instance(cin,rep,load,exec) {// {{{ + $("body").attr('current-instance',sanitize_url(cin)); + $("body").attr('current-repo', sanitize_url(rep)); + $("input[name=instance-url]").val($("body").attr('current-instance')); + $("input[name=repo-url]").val($("body").attr('current-repo')); $('.tabbehind button').hide(); $('#dat_details').empty(); + url = $("body").attr('current-instance'); + $.ajax({ type: "GET", url: url + "/properties/schema/", success: function(res){ $("ui-tabbed.hidden, ui-rest.hidden").removeClass("hidden"); $("ui-resizehandle.hidden").removeClass("hidden"); $("ui-tabbed ui-tab.hidden, ui-rest ui-tab.hidden").removeClass("hidden"); - $("body").attr('current-instance',url); - $("body").attr('current-repo',rep); - // Change url to return to current instance when reloading $("#current-instance").text(url); $("#current-instance").attr('href',url); $("#current-instance-properties").attr('href',url + 'properties/'); $("#current-instance-properties").text('P'); @@ -330,10 +329,12 @@ }// }}} function monitor_instance_values(val) {// {{{ var url = $('body').attr('current-instance'); var rep = $('body').attr('current-repo'); + var bas = $('body').attr('current-base'); + $.ajax({ type: "GET", url: url + "/properties/values/" + val + "/", success: function(res){ save[val].content(res); @@ -515,10 +516,14 @@ } // }}} function monitor_instance_state_change(notification) { //{{{ if (notification == "ready" || notification == "stopped" || notification == "running") { $("#state button").removeAttr('disabled'); } + // sometimes, out of sheer network routingness, stopping comes after stopped, which fucks the UI hard + // thus, we are having none of it + if (notification == 'stopping' && save['state'] == 'stopped') + return; if (notification != save['state']) { save['state'] = notification; var ctv = $("#state"); ctv.empty(); @@ -724,54 +729,60 @@ error: report_failure }); } }); }// }}} -function set_testset(testset,exec) {// {{{ +async function set_testset(testset,exec) {// {{{ var url = $('body').attr('current-instance'); suspended_monitoring = true; - $.ajax({ - type: "GET", - url: url + "/notifications/subscriptions/", - success: function(res){ + var promises = []; + + promises.push( + $.ajax({ + type: "GET", + url: url + "/notifications/subscriptions/", + error: report_failure + }).then(async function(res) { var rcount = 0; var values = $("subscriptions > subscription[url]",res); var vals = []; values.each(function(){ vals.push($(this).attr('url')); }); - load_testset_handlers(url,testset,vals); - }, - error: report_failure - }); + await load_testset_handlers(url,testset,vals); + }) + ) + promises.push(load_testset_dataelements(url,testset)); + promises.push(load_testset_attributes(url,testset)); + promises.push(load_testset_endpoints(url,testset)); + promises.push(load_testset_pos(url,testset)); - load_testset_dataelements(url,testset); - load_testset_attributes(url,testset); - load_testset_endpoints(url,testset); - load_testset_pos(url,testset); - if ($("testset > transformation",testset).length > 0) { var ser = ''; $("testset > transformation > *",testset).each(function(){ ser += $(this).serializeXML() + "\n"; }); var val = "<content>" + ser + "</content>"; - $.ajax({ - type: "PUT", - url: url + "/properties/values/transformation", - data: ({content: val}), - success: function() { - load_testset_des(url,testset); - }, - error: report_failure - }); + promises.push( + $.ajax({ + type: "PUT", + url: url + "/properties/values/transformation", + data: ({content: val}), + error: report_failure + }).then(async function(){ + await load_testset_des(url,testset); + }) + ); } else { - load_testset_des(url,testset); + promises.push(load_testset_des(url,testset)); } - load_testset_hw(url,testset); + promises.push(load_testset_hw(url,testset)); + await Promise.all(promises); + suspended_monitoring = false; + $.ajax({ type: "GET", url: url + "/properties/values/state/", dataType: "text", success: function(res){ @@ -779,12 +790,11 @@ type: "PUT", url: url + "/properties/values/state", data: ({value: res}), error: report_failure, success: function(res){ - // use promises you filthy animal - if (exec) setTimeout(start_instance,2000); + if (exec) start_instance(); } }); } }); }// }}} @@ -890,55 +900,60 @@ loading = false; } }); }// }}} -function load_des(url,model) { //{{{ +async function load_des(url,model) { //{{{ model = model.replace(/<\?[^\?]+\?>/,''); var val = "<content>" + model + "</content>"; - $.ajax({ + return $.ajax({ type: "PUT", url: url + "/properties/values/description", data: ({content: val}), error: report_failure }); -} //}}} +} //}}} -function load_testset_des(url,testset) {// {{{ +async function load_testset_des(url,testset) {// {{{ if ($("testset > description",testset).length == 0) { return; } var ser = ''; $("testset > description > *",testset).each(function(){ ser += $(this).serializeXML() + "\n"; }); - load_des(url,ser); + return load_des(url,ser); } // }}} -function load_testset_hw(url,testset) {// {{{ +async function load_testset_hw(url,testset) {// {{{ + var promises = []; $("testset > handlerwrapper",testset).each(function(){ var val = $(this).text(); - $.ajax({ - type: "PUT", - url: url + "/properties/values/handlerwrapper", - data: ({value: val}), - error: report_failure - }); + promises.push( + $.ajax({ + type: "PUT", + url: url + "/properties/values/handlerwrapper", + data: ({value: val}), + error: report_failure + }) + ); }); + return Promise.all(promises); } // }}} -function load_testset_dataelements(url,testset) {// {{{ +async function load_testset_dataelements(url,testset) {// {{{ if ($("testset > dataelements",testset).length == 0) { return; } var ser = ''; $("testset > dataelements > *",testset).each(function(){ ser += $(this).serializeXML() + "\n"; }); var val = "<content>" + ser + "</content>"; - $.ajax({ + return $.ajax({ type: "PUT", url: url + "/properties/values/dataelements", data: ({content: val}), error: report_failure }); }// }}} -function load_testset_attributes(url,testset) {// {{{ +async function load_testset_attributes(url,testset) {// {{{ + var promises = []; if ($("testset > attributes",testset).length == 0) { return; } var ser = ''; $.ajax({ type: "GET", url: url + "/properties/values/attributes/uuid", @@ -948,65 +963,72 @@ $("testset > attributes",testset).prepend(uuid); $("testset > attributes > *",testset).each(function(){ ser += $(this).serializeXML() + "\n"; }); var val = "<content>" + ser + "</content>"; - $.ajax({ - type: "PUT", - url: url + "/properties/values/attributes", - data: ({content: val}), - error: report_failure - }); + promises.push( + $.ajax({ + type: "PUT", + url: url + "/properties/values/attributes", + data: ({content: val}), + error: report_failure + }) + ); } }); + return Promise.all(promises); }// }}} -function load_testset_endpoints(url,testset) {// {{{ +async function load_testset_endpoints(url,testset) {// {{{ if ($("testset > endpoints",testset).length == 0) { return; } var ser = ''; $("testset > endpoints > *",testset).each(function(){ ser += $(this).serializeXML() + "\n"; }); var val = "<content>" + ser + "</content>"; - $.ajax({ + return $.ajax({ type: "PUT", url: url + "/properties/values/endpoints/", data: ({content: val}), error: report_failure }); }// }}} -function load_testset_pos(url,testset) {// {{{ +async function load_testset_pos(url,testset) {// {{{ if ($("testset > positions",testset).length == 0) { return; } var ser = ''; $("testset > positions > *",testset).each(function(){ ser += $(this).serializeXML() + "\n"; }); var val = "<content>" + ser + "</content>"; - $.ajax({ + return $.ajax({ type: "PUT", url: url + "/properties/values/positions/", data: ({content: val}), success: monitor_instance_pos, error: report_failure }); }// }}} -function load_testset_handlers(url,testset,vals) {// {{{ - $("testset > handlers > *",testset).each(function(){ +async function load_testset_handlers(url,testset,vals) {// {{{ + var promises = []; + $("testset > handlers > *",testset).each(async function(){ var han = this; var suburl = $(han).attr('url'); if ($.inArray(suburl,vals) == -1) { var inp = "url="+encodeURIComponent(suburl); $("*",han).each(function(){ inp += "&topic=" + $(this).attr('topic'); inp += "&" + this.nodeName + "=" + $(this).text(); }); - $.ajax({ - type: "POST", - url: url + "/notifications/subscriptions/", - data: inp - }); + promises.push( + $.ajax({ + type: "POST", + url: url + "/notifications/subscriptions/", + data: inp + }) + ) } }); + return Promise.all(promises); }// }}} function format_visual_add(what,cls) {//{{{ if (node_state[what] == undefined) node_state[what] = {}; @@ -1023,10 +1045,10 @@ node_state[what][cls] -= 1; format_visual_set(what); }//}}} function scroll_into_view(what) { //{{{ - var tcontainer = $('#graphcolumn')[0]; + var tcontainer = $('#graphcanvas').parent()[0]; if ($('g[element-id="' + what + '"]').length > 0) { var telement = $('g[element-id="' + what + '"]')[0].getBBox().y; if (tcontainer.scrollTop > telement) { tcontainer.scroll( { top: telement - 5, behavior: 'smooth' } ); }