diff --git a/src/main/java/org/nrg/xnat/helpers/prearchive/PrearcDatabase.java b/src/main/java/org/nrg/xnat/helpers/prearchive/PrearcDatabase.java index e3e923dafbda1c026a77fb099b621a277ff5b6e7..1b359a7e4d9685ac79fe96a72975e15a96c33962 100644 --- a/src/main/java/org/nrg/xnat/helpers/prearchive/PrearcDatabase.java +++ b/src/main/java/org/nrg/xnat/helpers/prearchive/PrearcDatabase.java @@ -33,7 +33,6 @@ import org.nrg.xdat.bean.XnatPetsessiondataBean; import org.nrg.xdat.model.XnatImagescandataI; import org.nrg.xdat.model.XnatPetscandataI; import org.nrg.xdat.om.XnatExperimentdata; -import org.nrg.xdat.preferences.InitializerSiteConfiguration; import org.nrg.xdat.preferences.SiteConfigPreferences; import org.nrg.xft.db.PoolDBUtils; import org.nrg.xft.exception.DBPoolException; @@ -44,8 +43,6 @@ import org.nrg.xnat.helpers.prearchive.PrearcUtils.PrearcStatus; import org.nrg.xnat.restlet.XNATApplication; import org.nrg.xnat.restlet.actions.PrearcImporterA.PrearcSession; import org.nrg.xnat.restlet.services.Archiver; -import org.nrg.xnat.turbine.utils.ArcSpecManager; - import org.nrg.xnat.utils.XnatUserProvider; import org.restlet.data.Status; import org.slf4j.Logger; @@ -540,7 +537,7 @@ public final class PrearcDatabase { PrearcDatabase.addSession(sessionData); - PrearcUtils.log(sessionData, new Exception(String.format("Moved from %1s to %2s", proj, destination))); + PrearcUtils.log(sessionData, new Exception(String.format("Moved from %1$s to %2$s", proj, destination))); } catch (SyncFailedException e) { logger.error("Session sync operation failed", e); throw new IllegalStateException(e.getMessage()); diff --git a/src/main/java/org/nrg/xnat/restlet/projectResource/extensions/ProjectPermissionsFilter.java b/src/main/java/org/nrg/xnat/restlet/projectResource/extensions/ProjectPermissionsFilter.java index ed2d4db211b261795a96f6de55db2d39931ba171..65e1d84886ed0cffe5b890971d39c914cb7f3476 100644 --- a/src/main/java/org/nrg/xnat/restlet/projectResource/extensions/ProjectPermissionsFilter.java +++ b/src/main/java/org/nrg/xnat/restlet/projectResource/extensions/ProjectPermissionsFilter.java @@ -1,7 +1,5 @@ package org.nrg.xnat.restlet.projectResource.extensions; -import java.util.Hashtable; - import org.nrg.xdat.security.helpers.Groups; import org.nrg.xft.XFTTable; import org.nrg.xnat.restlet.resources.ProjectResource; @@ -10,6 +8,8 @@ import org.nrg.xnat.restlet.resources.SecureResource.FilteredResourceHandlerI; import org.restlet.resource.Representation; import org.restlet.resource.Variant; +import java.util.Hashtable; + @SuppressWarnings("unused") public class ProjectPermissionsFilter implements FilteredResourceHandlerI{ @@ -23,9 +23,9 @@ public class ProjectPermissionsFilter implements FilteredResourceHandlerI{ ProjectResource projResource=(ProjectResource)resource; StringBuilder builder=new StringBuilder(); if(Groups.isMember(resource.user,"ALL_DATA_ADMIN")){ - builder.append(String.format("SELECT DISTINCT element_name FROM xdat_element_access xea JOIN xdat_field_mapping_set xfms ON xea.xdat_element_access_id=xfms.permissions_allow_set_xdat_elem_xdat_element_access_id JOIN xdat_field_mapping xfm ON xfms.xdat_field_mapping_set_id=xfm.xdat_field_mapping_set_xdat_field_mapping_set_id WHERE create_element=1 AND field_value='%1s' and field !=''", projResource.getProjectId())); + builder.append(String.format("SELECT DISTINCT element_name FROM xdat_element_access xea JOIN xdat_field_mapping_set xfms ON xea.xdat_element_access_id=xfms.permissions_allow_set_xdat_elem_xdat_element_access_id JOIN xdat_field_mapping xfm ON xfms.xdat_field_mapping_set_id=xfm.xdat_field_mapping_set_xdat_field_mapping_set_id WHERE create_element=1 AND field_value='%1$s' and field !=''", projResource.getProjectId())); }else{ - builder.append(String.format("SELECT DISTINCT element_name FROM xdat_user_groupID map JOIN xdat_userGroup gp ON map.groupid=gp.id JOIN xdat_element_access xea ON gp.xdat_usergroup_id=xea.xdat_usergroup_xdat_usergroup_id JOIN xdat_field_mapping_set xfms ON xea.xdat_element_access_id=xfms.permissions_allow_set_xdat_elem_xdat_element_access_id JOIN xdat_field_mapping xfm ON xfms.xdat_field_mapping_set_id=xfm.xdat_field_mapping_set_xdat_field_mapping_set_id WHERE map.groups_groupid_xdat_user_xdat_user_id=%1s AND create_element=1 AND field_value='%2s' and field !=''",resource.user.getID(),projResource.getProjectId())); + builder.append(String.format("SELECT DISTINCT element_name FROM xdat_user_groupID map JOIN xdat_userGroup gp ON map.groupid=gp.id JOIN xdat_element_access xea ON gp.xdat_usergroup_id=xea.xdat_usergroup_xdat_usergroup_id JOIN xdat_field_mapping_set xfms ON xea.xdat_element_access_id=xfms.permissions_allow_set_xdat_elem_xdat_element_access_id JOIN xdat_field_mapping xfm ON xfms.xdat_field_mapping_set_id=xfm.xdat_field_mapping_set_xdat_field_mapping_set_id WHERE map.groups_groupid_xdat_user_xdat_user_id=%1$s AND create_element=1 AND field_value='%2$s' and field !=''",resource.user.getID(),projResource.getProjectId())); } return resource.representTable(XFTTable.Execute(builder.toString(), resource.user.getDBName(), resource.userName), resource.overrideVariant(variant), new Hashtable<String,Object>()) ; diff --git a/src/main/java/org/nrg/xnat/restlet/resources/files/DIRResource.java b/src/main/java/org/nrg/xnat/restlet/resources/files/DIRResource.java index a3608199b6515df661eab82c8db0f0c6bc20b365..f93495f5bdbb77bf7e93b296c516f946cf598486 100644 --- a/src/main/java/org/nrg/xnat/restlet/resources/files/DIRResource.java +++ b/src/main/java/org/nrg/xnat/restlet/resources/files/DIRResource.java @@ -210,7 +210,7 @@ public class DIRResource extends SecureResource { final String rel=(session_dir.toURI().relativize(f.toURI())).getPath(); final String qs=(f.isDirectory())?qsParams:""; - row[3]=String.format("/data/experiments/%1s/DIR/%2s%3s", new Object[]{expt.getId(),rel,qs}); + row[3]=String.format("/data/experiments/%1$s/DIR/%2$s%3$s",expt.getId(),rel,qs); table.rows().add(row); } diff --git a/src/main/webapp/WEB-INF/tags/page/xnat.tag b/src/main/webapp/WEB-INF/tags/page/xnat.tag index 2fd10120f7a36314bf70c9b2eae45122f7d1a207..58f74b34576d1024129e916945911a2376108685 100644 --- a/src/main/webapp/WEB-INF/tags/page/xnat.tag +++ b/src/main/webapp/WEB-INF/tags/page/xnat.tag @@ -679,23 +679,27 @@ ${bodyTop} loadjs(scriptUrl('xnat/event.js'), function(){ + var clicker = XNAT.event.click('#header_logo, #xnat_power > a'); + // shift-click the header or footer XNAT logo to TOGGLE debug mode on/off + clicker.shiftKey(function(e){ + e.preventDefault(); + if (Cookies.get('debug') === 'on'){ + Cookies.set('debug', 'off'); + window.location.hash = 'debug=off'; + } + else { + Cookies.set('debug', 'on'); + window.location.hash = 'debug=on'; + } + window.location.reload(); + }); + // alt-shift-click to open the Swagger page in a new window - XNAT.event.click('#header_logo, #xnat_power > a') - .shiftKey(function(e){ - e.preventDefault(); - if (Cookies.get('debug') === 'on'){ - window.location.hash = 'debug=off'; - } - else { - window.location.hash = 'debug=on'; - } - window.location.reload(); - }) - .altShift(function(e){ - e.preventDefault(); - XNAT.ui.popup(XNAT.url.rootUrl('/xapi/swagger-ui.html')); - }); + clicker.altShift(function(e){ + e.preventDefault(); + XNAT.ui.popup(XNAT.url.rootUrl('/xapi/swagger-ui.html')); + }); }) diff --git a/src/main/webapp/page/admin/content.jsp b/src/main/webapp/page/admin/content.jsp index ec8aeace85c4ad74be93ae8f903027166a2da393..7f9c30cf28e45fd5dc13c285525acb7a23c8571a 100755 --- a/src/main/webapp/page/admin/content.jsp +++ b/src/main/webapp/page/admin/content.jsp @@ -44,8 +44,9 @@ delete XNAT.data.siteConfig.targetSource; - // var jsonUrl = XNAT.url.rootUrl('/page/admin/data/config/site-admin-sample-new.yaml'); +// var jsonUrl = XNAT.url.rootUrl('/page/admin/data/config/site-admin-sample-new.yaml'); var jsonUrl = XNAT.url.rootUrl('/xapi/spawner/resolve/siteAdmin/adminPage'); +// var jsonUrl = XNAT.url.rootUrl('/page/admin/data/site-admin-page.json'); $.get({ url: jsonUrl, diff --git a/src/main/webapp/page/admin/data/config/site-setup.yaml b/src/main/webapp/page/admin/data/config/site-setup.yaml index ce68547d6de48c3b63770f1157503d9c1fbd9b11..148468ea220d59ffd833bceec88e74ddfe9016ae 100644 --- a/src/main/webapp/page/admin/data/config/site-setup.yaml +++ b/src/main/webapp/page/admin/data/config/site-setup.yaml @@ -33,9 +33,8 @@ siteSetup: method: POST action: /xapi/siteConfig/batch contentType: json - load: - lookup: XNAT.data.siteConfig - refresh: /xapi/siteConfig + load: ?? XNAT.data.siteConfig + refresh: /xapi/siteConfig contents: siteId: @@ -82,9 +81,8 @@ siteSetup: method: POST action: /xapi/siteConfig/batch contentType: json - load: - lookup: XNAT.data.siteConfig - refresh: /xapi/siteConfig + load: ?? XNAT.data.siteConfig + refresh: /xapi/siteConfig contents: archivePath: @@ -145,16 +143,16 @@ siteSetup: method: POST action: /xapi/siteConfig/smtpServer contentType: json - load: - #lookup: XNAT.data.siteConfig.smtpServer - refresh: /xapi/siteConfig/smtpServer + load: ?? XNAT.data.siteConfig.smtpServer + refresh: /xapi/siteConfig/smtpServer contents: host: kind: panel.input.text name: host label: Host - value: ?? XNAT.data.siteConfig.smtpServer.host +# value: ?? XNAT.data.siteConfig.smtpServer.host + value: "" placeholder: localhost validation: required @@ -162,7 +160,8 @@ siteSetup: kind: panel.input.number name: port label: Port - value: ?? XNAT.data.siteConfig.smtpServer.port +# value: ?? XNAT.data.siteConfig.smtpServer.port + value: "" placeholder: 25 validation: required number @@ -170,19 +169,22 @@ siteSetup: kind: panel.input.text name: username label: Username - value: ?? XNAT.data.siteConfig.smtpServer.username +# value: ?? XNAT.data.siteConfig.smtpServer.username + value: "" password: kind: panel.input.password name: password label: Password - value: ?? XNAT.data.siteConfig.smtpServer.password +# value: ?? XNAT.data.siteConfig.smtpServer.password + value: "" protocol: kind: panel.input.text name: protocol label: Protocol - value: ?? XNAT.data.siteConfig.smtpServer.protocol +# value: ?? XNAT.data.siteConfig.smtpServer.protocol + value: "" mailServerProperties: kind: panel.subhead @@ -192,16 +194,19 @@ siteSetup: kind: panel.input.checkbox name: mail.smtp.auth label: SMTP Auth? - value: ?? XNAT.data.siteConfig.smtpServer['mail.smtp.auth'] +# value: ?? XNAT:data:siteConfig:smtpServer:mail.smtp.auth + value: "" smtpStartTls: kind: panel.input.checkbox name: mail.smtp.starttls.enable label: Smart TLS? - value: ?? XNAT.data.siteConfig.smtpServer['mail.smtp.starttls.enable'] +# value: ?? XNAT:data:siteConfig:smtpServer:mail.smtp.starttls.enable + value: "" smtpSSLTrust: kind: panel.input.text name: mail.smtp.ssl.trust label: SSL Trust - value: ?? XNAT.data.siteConfig.smtpServer['mail.smtp.ssl.trust'] +# value: ?? XNAT:data:siteConfig:smtpServer:mail.smtp.ssl.trust + value: "" diff --git a/src/main/webapp/page/admin/spawner/spawner-admin.js b/src/main/webapp/page/admin/spawner/spawner-admin.js index 30464ee17213dbfef1eaf7cedf1b45164551ca32..7645623f608631cbedceec1a0a4d0e504f936c3c 100644 --- a/src/main/webapp/page/admin/spawner/spawner-admin.js +++ b/src/main/webapp/page/admin/spawner/spawner-admin.js @@ -123,6 +123,7 @@ XNAT.xhr.getJSON({ console.log(obj) }, okLabel: 'Save Changes', + okClose: false, okAction: function(obj){ XNAT.xhr.put({ url: elementUrl, diff --git a/src/main/webapp/scripts/xmodal-v1/xmodal.js b/src/main/webapp/scripts/xmodal-v1/xmodal.js index 117922845f2ab21c7a3661d9cadf3b48e471e166..d81ab12c7d335b17c28af83fd4e8d74a40012c66 100644 --- a/src/main/webapp/scripts/xmodal-v1/xmodal.js +++ b/src/main/webapp/scripts/xmodal-v1/xmodal.js @@ -1352,6 +1352,11 @@ if (typeof jQuery == 'undefined') { opts.id = arg3.id || arg2; } + // don't open a second loader with the same id + if (xmodal.modals._ids.indexOf(opts.id) > 0) { + return false; + } + return xmodal.open(opts); }; diff --git a/src/main/webapp/scripts/xnat/spawner.js b/src/main/webapp/scripts/xnat/spawner.js index 98a068fd5da4f6840ad2236538c2992af0296dfd..4e1968c4498acc05f0d0d05c68edcdf9f67450fc 100644 --- a/src/main/webapp/scripts/xnat/spawner.js +++ b/src/main/webapp/scripts/xnat/spawner.js @@ -33,6 +33,10 @@ var XNAT = getObject(XNAT); // keep track of items that didn't spawn spawner.notSpawned = []; + function setRoot(url){ + url = url.replace(/^(\.\/+)/, '/'); + return XNAT.url.rootUrl(url) + } // ================================================== // MAIN FUNCTION @@ -60,6 +64,18 @@ var XNAT = getObject(XNAT); // with a fallback to a generic div kind = prop.kind || prop.type || 'div.spawned'; + // make 'href' 'src' and 'action' properties + // start at the site root if starting with './' + if (prop.config.href) { + prop.config.href = setRoot(prop.config.href) + } + if (prop.config.src) { + prop.config.src = setRoot(prop.config.src) + } + if (prop.config.action) { + prop.config.action = setRoot(prop.config.action) + } + // do a raw spawn() if 'kind' is 'element' // or if there's a tag property if (kind === 'element' || prop.tag) { diff --git a/src/main/webapp/scripts/xnat/ui/panel.js b/src/main/webapp/scripts/xnat/ui/panel.js index 78eb3742b3802654be254fe1e5757cada5f91259..723ffdb9c5cab45944ed5b53c806dc5da3b6d829 100644 --- a/src/main/webapp/scripts/xnat/ui/panel.js +++ b/src/main/webapp/scripts/xnat/ui/panel.js @@ -41,8 +41,9 @@ var XNAT = getObject(XNAT || {}); function doLookup(input){ if (!input) return ''; - if (input.toString().trim().indexOf(doLookupString) === 0){ - return lookupObjectValue(window, input.split(doLookupString)[1]); + if (input.toString().indexOf(doLookupString) === 0){ + input = input.split(doLookupString)[1].trim(); + return lookupObjectValue(window, input); } return input; } @@ -116,9 +117,11 @@ var XNAT = getObject(XNAT || {}); ['h3.panel-title', opts.title || opts.label] ]], - // target is where the next spawned item will render + + // target is where this form's "contents" will be inserted _target, + (hideFooter ? ['div.hidden'] : ['div.panel-footer', opts.footer || _footer]) ]); @@ -128,96 +131,112 @@ var XNAT = getObject(XNAT || {}); _formPanel.id = (opts.id || opts.element.id) + '-panel'; } + // cache a jQuery-wrapped element + var $formPanel = $(_formPanel); + // set form element values from an object map function setValues(form, dataObj){ - // pass a single argument to work with this form - if (!dataObj) { - dataObj = form; - form = _formPanel; - } // find all form inputs with a name attribute $$(form).find(':input[name]').each(function(){ - var val = ''; - if (Array.isArray(dataObj)) { - val = dataObj.join(', '); + var val = dataObj[this.name]; + if (!val) return; + if (Array.isArray(val)) { + val = val.join(', '); } else { - val = /string|number/i.test(typeof dataObj) ? dataObj : dataObj[this.name] || ''; + val = stringable(val) ? val : JSON.stringify(val); } $(this).changeVal(val); }); - if (xmodal && xmodal.loading && xmodal.loading.close){ - xmodal.loading.close(); + if (xmodal && xmodal.loading && xmodal.loading.closeAll){ + xmodal.loading.closeAll(); } } // populate the data fields if this panel is in the 'active' tab // (only getting values for the active tab should cut down on requests) - function loadData(obj){ + function loadData(form, obj){ - if (!obj) { - obj = opts.load || {}; + obj = cloneObject(obj); + + xmodal.loading.open('#load-data'); + + // need a form to put the data into! + if (!form) { + xmodal.loading.close('#load-data'); + return; } - obj = cloneObject(obj); + // if 'load' starts with ??, do lookup + var doLookup = '??'; - obj.form = obj.form || obj.target || obj.element || _formPanel; + if (obj.load && obj.load.toString().indexOf(doLookup) === 0) { + obj.load = (obj.load.split(doLookup)[1]||'').trim().split('|')[0]; + obj.prop = obj.prop || obj.load.split('|')[1] || ''; + setValues(form, lookupObjectValue(window, obj.load, obj.prop)); + xmodal.loading.close('#load-data'); + return form; - // need a form to put the data into - if (!obj.form) return; + } + + // if 'load' starts with '!?' do an eval() + var doEval = '!?'; + if (obj.load && obj.load.toString().indexOf(doEval) === 0) { + obj.load = (obj.load.split(doEval)[1]||'').trim(); + setValues(form, eval(obj.load)); + xmodal.loading.close('#load-data'); + return form; - // // if there's a 'refresh' url, make that obj.url - // if (obj.refresh) obj.url = obj.refresh; + } + + ////////// + // REST + ////////// - // if we pass data in a 'lookup' property, just use that - // to avoid doing a server request + // if 'load' starts with $?, do ajax request + var ajaxPrefix = '$?'; + var ajaxUrl = ''; + var ajaxProp = ''; - if (obj.lookup && !obj.url) { - if (Array.isArray(obj.lookup)) { - obj.lookup = obj.lookup[0]; - } - else { - try { - obj.lookup = eval(obj.lookup); - } - catch (e) { - if (console && console.log) console.log(e); - obj.lookup = '' - } - } - setValues(obj.form, obj.lookup); - return obj.form; + + if (obj.refresh) { + ajaxUrl = obj.refresh; + } + // value: $? /path/to/data | obj:prop:name + else if (obj.load && obj.load.toString().indexOf(ajaxPrefix) === 0) { + ajaxUrl = obj.load; } - // otherwise try to get the data values via ajax + ajaxUrl = (ajaxUrl.split(ajaxPrefix)[1]||'').trim().split('|')[0]; + ajaxProp = ajaxUrl.split('|')[1] || ''; // need a url to get the data - if (!obj.url) return obj.form; + if (!ajaxUrl || !stringable(ajaxUrl)) { + xmodal.loading.close('#load-data'); + return form; + } - obj.method = obj.method || 'GET'; + // force GET method + obj.method = 'GET'; // setup the ajax request // override values with an // 'ajax' or 'xhr' property obj.ajax = extend(true, { method: obj.method, - url: XNAT.url.restUrl(obj.url) + url: XNAT.url.rootUrl(ajaxUrl) }, obj.ajax || obj.xhr); - // allow use of 'prop' or 'root' for the root property name - obj.prop = obj.prop || obj.root; - obj.ajax.success = function(data){ - var prop = data; - // if there's a property to target, - // specify the 'prop' property - if (obj.prop){ - obj.prop.split('.').forEach(function(part){ - prop = prop[part]; - }); + if (ajaxProp){ + data = data[ajaxProp]; } - $(obj.form).dataAttr('status', 'clean'); - setValues(prop); + $(form).dataAttr('status', 'clean'); + setValues(form, data); + }; + + obj.ajax.complete = function(){ + xmodal.loading.closeAll(); }; // return the ajax thing for method chaining @@ -225,11 +244,9 @@ var XNAT = getObject(XNAT || {}); } - //if (opts.load){ - // loadData(opts.load); - //} - - var $formPanel = $(_formPanel); + // if (opts.load) { + // loadData(_formPanel, opts) + // } // keep an eye on the inputs $formPanel.find(':input').on('change', function(){ @@ -239,14 +256,16 @@ var XNAT = getObject(XNAT || {}); opts.onload = opts.onload || callback; $formPanel.on('reload-data', function(){ - xmodal.loading.open(); - opts.load.url = opts.load.url || opts.load.refresh; - loadData(opts.load); + loadData(this, { + refresh: opts.refresh || opts.load || opts.url + }); }); // click 'Discard Changes' button to reload data _resetBtn.onclick = function(){ - $formPanel.triggerHandler('reload-data'); + if (!/^#/.test($formPanel.attr('action')||'#')){ + $formPanel.triggerHandler('reload-data'); + } }; opts.callback = opts.callback || callback || diddly; @@ -271,6 +290,11 @@ var XNAT = getObject(XNAT || {}); silent = $form.hasClass('silent'), multiform = {}; + // don't submit forms with 'action' starting with '#' + if (/^#/.test($form.attr('action')||'#')) { + return false; + } + $form.dataAttr('errors', 0); // validate inputs before moving on @@ -290,13 +314,12 @@ var XNAT = getObject(XNAT || {}); if (!silent) { xmodal.message('Error','Please enter values for the required items and re-submit the form.'); } - multiform.errors++; // keep track of errors for multi-form submission return false; } - // don't open loading dialog for multiform submit + // only open loading dialog for standard (non-multi) submit if (!multiform.count){ - xmodal.loading.open('#form-save'); + var saveLoader = xmodal.loading.open('#form-save'); } // var ajaxSubmitOpts = { @@ -333,29 +356,16 @@ var XNAT = getObject(XNAT || {}); var ajaxConfig = { method: opts.method, url: this.action, - success: function(data){ + success: function(){ var obj = {}; - // if a data object is returned, - // just use that - if (data) { - // HACK! - // wrap the returned data in an array so the - // loadData() function handles it properly - obj.lookup = [data]; - } - else { - obj.url = opts.refresh; - } - - // don't mess with modals for multiforms + // actually, NEVER use returned data... + // ALWAYS reload from the server + obj.refresh = opts.refresh || opts.reload || opts.url || opts.load; if (!silent){ - xmodal.loading.close('#form-save'); + xmodal.loading.close(saveLoader.$modal); xmodal.message('Data saved successfully.', { action: function(){ - loadData(obj); - if (callback && isFunction(callback)) { - - } + loadData($form, obj); } }); } @@ -378,8 +388,10 @@ var XNAT = getObject(XNAT || {}); // this object is returned to the XNAT.spawner() method return { - load: loadData, - setValues: setValues, + load: function(){ + loadData(_formPanel, opts) + }, + // setValues: setValues, target: _target, element: _formPanel, spawned: _formPanel, @@ -685,7 +697,7 @@ var XNAT = getObject(XNAT || {}); var textarea = spawn('textarea', opts.element); return XNAT.ui.template.panelDisplay(opts, textarea).spawned; }; - panel.input.textares = panel.textarea; + panel.input.textarea = panel.textarea; ////////////////////////////////////////////////// // SELECT MENU PANEL ELEMENTS diff --git a/src/main/webapp/setup/index.jsp b/src/main/webapp/setup/index.jsp index 0f62760fb6705b92b1f34262d4c24922b65a10d9..daff6dd0a0bbc7bf6fdbc1191916f43e8e0c6cf5 100644 --- a/src/main/webapp/setup/index.jsp +++ b/src/main/webapp/setup/index.jsp @@ -2,11 +2,7 @@ <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="pg" tagdir="/WEB-INF/tags/page" %> -<c:set var="HEADBOTTOM"> - <script src="<c:url value="/scripts/xnat/app/siteSetup.js"/>"></script> -</c:set> - -<pg:xnat page="setup" title="XNAT Setup" headBottom="${HEADBOTTOM}"> +<pg:xnat page="setup" title="XNAT Setup"> <div id="page-body"> <div class="pad"> diff --git a/src/main/webapp/xdat-templates/navigations/powered_by.vm b/src/main/webapp/xdat-templates/navigations/powered_by.vm index 6c7489f99b64283d0137cbb9776221d28da0629a..8a86d612708f1ba1d4fd5133868a5198857e62aa 100644 --- a/src/main/webapp/xdat-templates/navigations/powered_by.vm +++ b/src/main/webapp/xdat-templates/navigations/powered_by.vm @@ -7,24 +7,25 @@ loadjs(scriptUrl('xnat/event.js'), function(){ - // shift-click the header or footer XNAT logo to ENABLE debug mode - // alt-shift-click to DISABLE debug mode - // ctrl-alt-click to open the Swagger page in a new window - XNAT.event.click('#header_logo, #xnat_power > a') - .shiftKey(function(e){ - e.preventDefault(); - window.location.hash = 'debug=on' - window.location.reload(); - }) - .altShift(function(e){ - e.preventDefault(); - window.location.hash = 'debug=off' - window.location.reload(); - }) - .ctrlAlt(function(e){ - e.preventDefault(); - XNAT.ui.popup('/xapi/swagger-ui.html'); - }); + var clicker = XNAT.event.click('#header_logo, #xnat_power > a'); + + // shift-click the header or footer XNAT logo to TOGGLE debug mode on/off + clicker.shiftKey(function(e){ + e.preventDefault(); + if (Cookies.get('debug') === 'on'){ + window.location.hash = 'debug=off'; + } + else { + window.location.hash = 'debug=on'; + } + window.location.reload(); + }); + + // alt-shift-click to open the Swagger page in a new window + clicker.altShift(function(e){ + e.preventDefault(); + XNAT.ui.popup(XNAT.url.rootUrl('/xapi/swagger-ui.html')); + }); })