2 var defaultShadow =
"";
4 var configNeedsRestart =
false;
6 function getUrlParameter(sParam) {
7 var sPageUrl = window.location.search.substring(1);
8 var sUrlVariables = sPageUrl.split(
"&");
9 for (var i = 0; i < sUrlVariables.length; i++) {
10 var sParameterName = sUrlVariables[i].split(
"=");
11 if (sParameterName[0].search(sParam) > 0) {
12 return sParameterName[1];
17 function checkExpertMode() {
18 if ($(
"#expertMode").is(
":checked")) {
25 var addBR =
function (id, br) {
27 $.get(
"/artdaq-configuration/BoardReader.html",
function (data) {
28 var datatemp = data.replace(/%
id%/g,
id);
29 $(
"#brs").append(datatemp).collapsibleset(
'refresh').trigger(
'create');
30 $(
"#deletebr" + id).click(
function () {
31 $(
"#brcfg" + id).
remove();
32 $(
"#brs").collapsibleset(
'refresh');
34 $.get(
"/artdaq-configuration/GeneratorTypes",
function (data) {
35 $(
"#brcfg" +
id +
" #type").html(data).trigger(
'create').selectmenu(
'refresh');
37 $(
"#brcfg" +
id +
" #type").change(
function () {
38 var selected = $(
"#brcfg" + id).find(
':selected').val();
39 $.get(
"/artdaq-configuration/" + selected,
function (typedata) {
40 $(
"#brcfg" +
id +
" #typeConfig").html(typedata);
41 $(
"#brcfg" +
id +
" #typeConfig #config").trigger(
'create').collapsible();
43 for (var key in brs[
id].typeConfig) {
44 $(
"#" + key,
"#brcfg" +
id +
" #typeConfig").val(brs[
id].typeConfig[key]);
45 if ($(
":radio[name=" + key +
"]",
"#brcfg" +
id +
" #typeConfig").is(
":radio")) {
47 $(
":radio[value=" + brs[id].typeConfig[key] +
"]",
"#brcfg" +
id +
" #typeConfig").prop(
"checked",
true).checkboxradio(
'refresh');
54 if (brs[
id] == null) {
55 $(
"#brcfg" +
id +
" #type").val(
"Default").trigger(
'change');
57 if ($(
"#brcfg" +
id +
" #type option[value='" + brs[
id].type +
"_simulator.html']").length > 0) {
58 $(
"#brcfg" +
id +
" #type").val(brs[
id].type +
"_simulator.html").trigger(
'change');
59 }
else if ($(
"#brcfg" +
id +
" #type option[value='" + brs[
id].type +
"_receiver.html']").length > 0) {
60 $(
"#brcfg" +
id +
" #type").val(brs[
id].type +
"_receiver.html").trigger(
'change');
61 }
else if ($(
"#brcfg" +
id +
" #type option[value='" + brs[
id].type +
"_reader.html']").length > 0) {
62 $(
"#brcfg" +
id +
" #type").val(brs[
id].type +
"_reader.html").trigger(
'change');
64 $(
"#brcfg" +
id +
" #type").val(
"Default").trigger(
'change');
70 $(
"#brcfg" +
id +
" #enabled").prop(
'checked', br.enabled).checkboxradio(
'refresh');
71 $(
"#brcfg" +
id +
" #name").val(br.name);
72 $(
"#brcfg" +
id +
" #hostname").val(br.hostname);
78 var saveConfiguration =
function () {
80 output.expertMode = $(
"#expertMode").is(
":checked");
81 output.configName = $(
"#configName").val();
82 output.artdaqDir = $(
"#artdaqDir").val();
83 output.dataDir = $(
"#artdaqDataDir").val();
84 output.logDir = $(
"#artdaqLogDir").val();
85 output.setupScript = $(
"#artdaqSetupScript").val();
86 output.needsRestart = configNeedsRestart;
87 output.dataLogger = {};
88 output.dataLogger.enabled = $(
"#dlEnabled").is(
":checked");
89 output.dataLogger.fileMode = $(
"input:radio[name=fileLimit]:checked").val();
90 output.dataLogger.fileValue = $(
"#limitValue").val();
91 output.dataLogger.runMode = $(
"input:radio[name=runLimit]:checked").val();
92 output.dataLogger.runValue = $(
"#runLimitValue").val();
93 output.dataLogger.hostname = $(
"#aggHostname").val();
94 output.dataLogger.name = $(
"#dlName").val();
95 output.onlineMonitor = {};
96 output.onlineMonitor.hostname = $(
"#aggHostname").val();
97 output.onlineMonitor.enabled = $(
"#omEnabled").is(
":checked");
98 output.onlineMonitor.viewerEnabled = $(
"#omvEnabled").is(
":checked");
99 output.onlineMonitor.name = $(
"#omName").val();
100 output.eventBuilders = {};
101 output.eventBuilders.basename = $(
"#evbName").val();
102 output.eventBuilders.count = $(
"#evbCount").val();
103 output.eventBuilders.compress = $(
"#evbCompress").is(
":checked");
104 output.eventBuilders.hostnames = $(
"#evbHostnames").val().split(
",");
105 output.boardReaders = [];
106 $(
"#brs").children().each(
function (index, element) {
108 var selected = $(
this).find(
':selected');
109 br.type = selected.text();
110 br.hostname = $(
"#hostname",
this).val();
111 br.name = $(
"#name",
this).val();
112 br.enabled = $(
"#enabled",
this).is(
":checked");
114 $(
"#typeConfig input:radio",
this).each(
function (innerIndex, innerElement) {
115 if ($(innerElement).is(
":checked")) {
116 br.typeConfig[innerElement.name] = $(innerElement).val();
119 $(
"#typeConfig input",
this).each(
function (innerIndex, innerElement) {
120 if ($(innerElement).is(
":checkbox")) {
121 br.typeConfig[innerElement.id] = $(innerElement).is(
":checked");
122 }
else if (!$(innerElement).is(
":radio")) {
123 br.typeConfig[innerElement.id] = $(innerElement).val();
126 output.boardReaders.push(br);
131 var loadConfiguration =
function (config) {
135 $(
"#expertMode").prop(
'checked', config.expertMode);
136 $(
"#configName").val(config.configName);
137 $(
"#artdaqDir").val(config.artdaqDir);
138 $(
"#artdaqDataDir").val(config.dataDir);
139 $(
"#artdaqLogDir").val(config.logDir);
140 $(
"#artdaqSetupScript").val(config.setupScript);
141 $(
"#dlEnabled").prop(
'checked', config.dataLogger.enabled);
142 $(
"#dlName").val(config.dataLogger.name);
143 $(
"#aggHostname").val(config.dataLogger.hostname);
144 $(
"input:radio[name=fileLimit]:checked").prop(
'checked',
false);
145 $(
"#fileLimit" + config.dataLogger.fileMode).prop(
'checked',
true);
146 $(
"#limitValue").val(config.dataLogger.fileValue);
147 $(
"input:radio[name=runLimit]:checked").prop(
'checked',
false);
148 $(
"#runLimit" + config.dataLogger.runMode).prop(
'checked',
true);
149 $(
"#runLimitValue").val(config.dataLogger.runValue);
150 $(
"#omEnabled").prop(
'checked', config.onlineMonitor.enabled);
151 $(
"#omvEnabled").prop(
'checked', config.onlineMonitor.viewerEnabled);
152 $(
"#omName").val(config.onlineMonitor.name);
153 $(
"#evbName").val(config.eventBuilders.basename);
154 $(
"#evbCount").val(config.eventBuilders.count);
155 $(
"#evbCompress").prop(
'checked', config.eventBuilders.compress);
156 if (typeof (config.eventBuilders.hostnames) ==
"string") {
157 $(
"#evbHostnames").val(config.eventBuilders.hostnames);
159 $(
"#evbHostnames").val(config.eventBuilders.hostnames.join());
163 if (config.boardReaders.name != null) {
165 addBR(lastbrid, config.boardReaders);
167 for (var index in config.boardReaders) {
168 var br = config.boardReaders[index];
173 $(
"input:radio").checkboxradio(
'refresh');
174 $(
"input:checkbox").checkboxradio(
'refresh');
177 var updateHeader =
function (error, text) {
179 $(
"#header").css(
"background-color",
"red").css(
"text-shadow",
"#E55 0px 1px 0px");
180 $(
"#info").text(text);
182 $(
"#header").css(
"background-color", defaultColor).css(
"text-shadow", defaultShadow);
183 $(
"#info").text(text);
186 var loadConfigs =
function () {
187 AjaxGet(
"/artdaq-configuration/NamedConfigs",
function (data) {
188 $(
"#configs").html(data.join(
"")).trigger(
'create').selectmenu(
'refresh');
189 var config = getUrlParameter(
"configs");
190 if (config !== undefined) {
191 $(
"#configs").val(config);
193 $(
"#loadConfigButton").trigger(
'click');
196 $(document).ready(
function () {
197 defaultColor = $(
"#header").css(
"background-color");
198 defaultShadow = $(
"#header").css(
"text-shadow");
199 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.";
201 $(
"#expertMode").click(
function () {
206 $(
".triggersModified").change(
function () {
207 updateHeader(
true, changedText);
210 $(
".triggersModified").click(
function () {
211 updateHeader(
true, changedText);
214 $(
".triggersRestart").click(
function () {
215 configNeedsRestart =
true;
216 updateHeader(
true, changedText +
"\nYou will have to re-start any ARTDAQ partitions using this configuration to apply these changes.");
219 $(
"#addbr").click(
function () {
224 $(
"#loadConfigButton").click(
function () {
225 configNeedsRestart =
false;
226 updateHeader(
false,
"");
227 var selected = $(
"#configs").find(
':selected').val();
228 AjaxPost(
"/artdaq-configuration/LoadNamedConfig", { configFile: selected },
function (config) {
229 loadConfiguration(config);
234 $(
"#saveConfig").click(
function () {
235 var config = saveConfiguration();
236 AjaxPost(
"/artdaq-configuration/saveConfig", { config: JSON.stringify(config) },
function (res) {
237 if (res !== null && res.Success) {
238 updateHeader(
false,
"Configuration Saved.");
240 updateHeader(
true,
"Failed to save configuration!");