00001 var defaultColor = "";
00002 var defaultShadow = "";
00003 var brs = {};
00004 var configNeedsRestart = false;
00005
00006 function getUrlParameter(sParam) {
00007 var sPageUrl = window.location.search.substring(1);
00008 var sUrlVariables = sPageUrl.split("&");
00009 for (var i = 0; i < sUrlVariables.length; i++) {
00010 var sParameterName = sUrlVariables[i].split("=");
00011 if (sParameterName[0].search(sParam) > 0) {
00012 return sParameterName[1];
00013 }
00014 }
00015 }
00016
00017 function checkExpertMode() {
00018 if ($("#expertMode").is(":checked")) {
00019 $(".expert").show();
00020 } else {
00021 $(".expert").hide();
00022 }
00023 }
00024
00025 var addBR = function (id, br) {
00026 brs[id] = br;
00027 $.get("/artdaq-configuration/BoardReader.html", function (data) {
00028 var datatemp = data.replace(/%id%/g, id);
00029 $("#brs").append(datatemp).collapsibleset('refresh').trigger('create');
00030 $("#deletebr" + id).click(function () {
00031 $("#brcfg" + id).remove();
00032 $("#brs").collapsibleset('refresh');
00033 });
00034 $.get("/artdaq-configuration/GeneratorTypes", function (data) {
00035 $("#brcfg" + id + " #type").html(data).trigger('create').selectmenu('refresh');
00036 checkExpertMode();
00037 $("#brcfg" + id + " #type").change(function () {
00038 var selected = $("#brcfg" + id).find(':selected').val();
00039 $.get("/artdaq-configuration/" + selected, function (typedata) {
00040 $("#brcfg" + id + " #typeConfig").html(typedata);
00041 $("#brcfg" + id + " #typeConfig #config").trigger('create').collapsible();
00042
00043 for (var key in brs[id].typeConfig) {
00044 $("#" + key, "#brcfg" + id + " #typeConfig").val(brs[id].typeConfig[key]);
00045 if ($(":radio[name=" + key + "]", "#brcfg" + id + " #typeConfig").is(":radio")) {
00046
00047 $(":radio[value=" + brs[id].typeConfig[key] + "]", "#brcfg" + id + " #typeConfig").prop("checked", true).checkboxradio('refresh');
00048 }
00049 }
00050 checkExpertMode();
00051 });
00052 });
00053
00054 if (brs[id] == null) {
00055 $("#brcfg" + id + " #type").val("Default").trigger('change');
00056 } else {
00057 if ($("#brcfg" + id + " #type option[value='" + brs[id].type + "_simulator.html']").length > 0) {
00058 $("#brcfg" + id + " #type").val(brs[id].type + "_simulator.html").trigger('change');
00059 } else if ($("#brcfg" + id + " #type option[value='" + brs[id].type + "_receiver.html']").length > 0) {
00060 $("#brcfg" + id + " #type").val(brs[id].type + "_receiver.html").trigger('change');
00061 } else if ($("#brcfg" + id + " #type option[value='" + brs[id].type + "_reader.html']").length > 0) {
00062 $("#brcfg" + id + " #type").val(brs[id].type + "_reader.html").trigger('change');
00063 } else {
00064 $("#brcfg" + id + " #type").val("Default").trigger('change');
00065 }
00066 }
00067 });
00068
00069 if (br != null) {
00070 $("#brcfg" + id + " #enabled").prop('checked', br.enabled).checkboxradio('refresh');
00071 $("#brcfg" + id + " #name").val(br.name);
00072 $("#brcfg" + id + " #hostname").val(br.hostname);
00073 }
00074 });
00075 };
00076 var lastbrid = 0;
00077
00078 var saveConfiguration = function () {
00079 var output = {};
00080 output.expertMode = $("#expertMode").is(":checked");
00081 output.configName = $("#configName").val();
00082 output.artdaqDir = $("#artdaqDir").val();
00083 output.dataDir = $("#artdaqDataDir").val();
00084 output.logDir = $("#artdaqLogDir").val();
00085 output.setupScript = $("#artdaqSetupScript").val();
00086 output.needsRestart = configNeedsRestart;
00087 output.dataLogger = {};
00088 output.dataLogger.enabled = $("#dlEnabled").is(":checked");
00089 output.dataLogger.fileMode = $("input:radio[name=fileLimit]:checked").val();
00090 output.dataLogger.fileValue = $("#limitValue").val();
00091 output.dataLogger.runMode = $("input:radio[name=runLimit]:checked").val();
00092 output.dataLogger.runValue = $("#runLimitValue").val();
00093 output.dataLogger.hostname = $("#aggHostname").val();
00094 output.dataLogger.name = $("#dlName").val();
00095 output.onlineMonitor = {};
00096 output.onlineMonitor.hostname = $("#aggHostname").val();
00097 output.onlineMonitor.enabled = $("#omEnabled").is(":checked");
00098 output.onlineMonitor.viewerEnabled = $("#omvEnabled").is(":checked");
00099 output.onlineMonitor.name = $("#omName").val();
00100 output.eventBuilders = {};
00101 output.eventBuilders.basename = $("#evbName").val();
00102 output.eventBuilders.count = $("#evbCount").val();
00103 output.eventBuilders.compress = $("#evbCompress").is(":checked");
00104 output.eventBuilders.hostnames = $("#evbHostnames").val().split(",");
00105 output.boardReaders = [];
00106 $("#brs").children().each(function (index, element) {
00107 var br = {};
00108 var selected = $(this).find(':selected');
00109 br.type = selected.text();
00110 br.hostname = $("#hostname", this).val();
00111 br.name = $("#name", this).val();
00112 br.enabled = $("#enabled", this).is(":checked");
00113 br.typeConfig = {};
00114 $("#typeConfig input:radio", this).each(function (innerIndex, innerElement) {
00115 if ($(innerElement).is(":checked")) {
00116 br.typeConfig[innerElement.name] = $(innerElement).val();
00117 }
00118 });
00119 $("#typeConfig input", this).each(function (innerIndex, innerElement) {
00120 if ($(innerElement).is(":checkbox")) {
00121 br.typeConfig[innerElement.id] = $(innerElement).is(":checked");
00122 } else if (!$(innerElement).is(":radio")) {
00123 br.typeConfig[innerElement.id] = $(innerElement).val();
00124 }
00125 });
00126 output.boardReaders.push(br);
00127 });
00128 return output;
00129 };
00130
00131 var loadConfiguration = function (config) {
00132 lastbrid = 0;
00133 $("#brs").html("");
00134
00135 $("#expertMode").prop('checked', config.expertMode);
00136 $("#configName").val(config.configName);
00137 $("#artdaqDir").val(config.artdaqDir);
00138 $("#artdaqDataDir").val(config.dataDir);
00139 $("#artdaqLogDir").val(config.logDir);
00140 $("#artdaqSetupScript").val(config.setupScript);
00141 $("#dlEnabled").prop('checked', config.dataLogger.enabled);
00142 $("#dlName").val(config.dataLogger.name);
00143 $("#aggHostname").val(config.dataLogger.hostname);
00144 $("input:radio[name=fileLimit]:checked").prop('checked', false);
00145 $("#fileLimit" + config.dataLogger.fileMode).prop('checked', true);
00146 $("#limitValue").val(config.dataLogger.fileValue);
00147 $("input:radio[name=runLimit]:checked").prop('checked', false);
00148 $("#runLimit" + config.dataLogger.runMode).prop('checked', true);
00149 $("#runLimitValue").val(config.dataLogger.runValue);
00150 $("#omEnabled").prop('checked', config.onlineMonitor.enabled);
00151 $("#omvEnabled").prop('checked', config.onlineMonitor.viewerEnabled);
00152 $("#omName").val(config.onlineMonitor.name);
00153 $("#evbName").val(config.eventBuilders.basename);
00154 $("#evbCount").val(config.eventBuilders.count);
00155 $("#evbCompress").prop('checked', config.eventBuilders.compress);
00156 if (typeof (config.eventBuilders.hostnames) == "string") {
00157 $("#evbHostnames").val(config.eventBuilders.hostnames);
00158 } else {
00159 $("#evbHostnames").val(config.eventBuilders.hostnames.join());
00160
00161 }
00162
00163 if (config.boardReaders.name != null) {
00164 ++lastbrid;
00165 addBR(lastbrid, config.boardReaders);
00166 } else {
00167 for (var index in config.boardReaders) {
00168 var br = config.boardReaders[index];
00169 ++lastbrid;
00170 addBR(lastbrid, br);
00171 }
00172 }
00173 $("input:radio").checkboxradio('refresh');
00174 $("input:checkbox").checkboxradio('refresh');
00175 checkExpertMode();
00176 };
00177 var updateHeader = function (error, text) {
00178 if (error) {
00179 $("#header").css("background-color", "red").css("text-shadow", "#E55 0px 1px 0px");
00180 $("#info").text(text);
00181 } else {
00182 $("#header").css("background-color", defaultColor).css("text-shadow", defaultShadow);
00183 $("#info").text(text);
00184 }
00185 };
00186 var loadConfigs = function () {
00187 AjaxGet("/artdaq-configuration/NamedConfigs", function (data) {
00188 $("#configs").html(data.join("")).trigger('create').selectmenu('refresh');
00189 var config = getUrlParameter("configs");
00190 if (config !== undefined) {
00191 $("#configs").val(config);
00192 }
00193 $("#loadConfigButton").trigger('click');
00194 });
00195 };
00196 $(document).ready(function () {
00197 defaultColor = $("#header").css("background-color");
00198 defaultShadow = $("#header").css("text-shadow");
00199 var changedText = "Please define a Configuration Name and click \"Save Configuration\" to save your pending changes. Loading a configuration, navigating away from this page, or closing this page will discard your changes.";
00200
00201 $("#expertMode").click(function () {
00202 checkExpertMode();
00203 });
00204 checkExpertMode();
00205
00206 $(".triggersModified").change(function () {
00207 updateHeader(true, changedText);
00208 });
00209
00210 $(".triggersModified").click(function () {
00211 updateHeader(true, changedText);
00212 });
00213
00214 $(".triggersRestart").click(function () {
00215 configNeedsRestart = true;
00216 updateHeader(true, changedText + "\nYou will have to re-start any ARTDAQ partitions using this configuration to apply these changes.");
00217 });
00218
00219 $("#addbr").click(function () {
00220 ++lastbrid;
00221 addBR(lastbrid);
00222 });
00223
00224 $("#loadConfigButton").click(function () {
00225 configNeedsRestart = false;
00226 updateHeader(false, "");
00227 var selected = $("#configs").find(':selected').val();
00228 AjaxPost("/artdaq-configuration/LoadNamedConfig", { configFile: selected }, function (config) {
00229 loadConfiguration(config);
00230 });
00231 });
00232 loadConfigs();
00233
00234 $("#saveConfig").click(function () {
00235 var config = saveConfiguration();
00236 AjaxPost("/artdaq-configuration/saveConfig", { config: JSON.stringify(config) }, function (res) {
00237 if (res !== null && res.Success) {
00238 updateHeader(false, "Configuration Saved.");
00239 } else {
00240 updateHeader(true, "Failed to save configuration!");
00241 }
00242
00243 loadConfigs();
00244 });
00245 });
00246 });