VIVO-541 First cut at the developer panel.

This commit is contained in:
j2blake 2013-11-17 11:50:06 -05:00
parent 35251e89f4
commit 0fce9f6a7b
21 changed files with 762 additions and 139 deletions

View file

@ -814,6 +814,15 @@
<url-pattern>/searchHelp</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>DeveloperAjax</servlet-name>
<servlet-class>edu.cornell.mannlib.vitro.webapp.utils.developer.DeveloperSettingsServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DeveloperAjax</servlet-name>
<url-pattern>/admin/developerAjax</url-pattern>
</servlet-mapping>
<!-- for now, need to make sure the links on CALS' site doesn't break -->
<servlet-mapping>
<servlet-name>SearchController</servlet-name>

View file

@ -0,0 +1,82 @@
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
function DeveloperPanel(developerAjaxUrl) {
this.setupDeveloperPanel = updateDeveloperPanel;
function updateDeveloperPanel(data) {
$.ajax({
url: developerAjaxUrl,
dataType: "json",
data: data,
complete: function(xhr, status) {
updatePanelContents(xhr.responseText);
if (document.getElementById("developerPanelSaveButton")) {
enablePanelOpener();
addBehaviorToElements();
updateDisabledFields();
}
}
});
}
function updatePanelContents(contents) {
document.getElementById("developerPanel").innerHTML = contents;
}
function enablePanelOpener() {
document.getElementById("developerPanelClickMe").onclick = function() {
document.getElementById("developerPanelClickText").style.display = "none";
document.getElementById("developerPanelBody").style.display = "block";
};
}
function addBehaviorToElements() {
document.getElementById("developerPanelSaveButton").onclick = function() {
updateDeveloperPanel(collectFormData());
}
document.getElementById("developer.enabled").onchange = updateDisabledFields
document.getElementById("developer.loggingRDFService.enable").onchange = updateDisabledFields
}
function updateDisabledFields() {
var developerEnabled = document.getElementById("developer.enabled").checked;
document.getElementById("developer.defeatFreemarkerCache").disabled = !developerEnabled;
document.getElementById("developer.insertFreemarkerDelimiters").disabled = !developerEnabled;
document.getElementById("developer.i18n.defeatCache").disabled = !developerEnabled;
document.getElementById("developer.i18n.logStringRequests").disabled = !developerEnabled;
document.getElementById("developer.loggingRDFService.enable").disabled = !developerEnabled;
var rdfServiceEnabled = developerEnabled && document.getElementById("developer.loggingRDFService.enable").checked;
document.getElementById("developer.loggingRDFService.stackTrace").disabled = !rdfServiceEnabled;
document.getElementById("developer.loggingRDFService.restriction").disabled = !rdfServiceEnabled;
}
function collectFormData() {
var data = new Object();
data["developer.panelOpen"] = false;
getCheckbox("developer.enabled", data);
getCheckbox("developer.defeatFreemarkerCache", data);
getCheckbox("developer.insertFreemarkerDelimiters", data);
getCheckbox("developer.i18n.defeatCache", data);
getCheckbox("developer.i18n.logStringRequests", data);
getCheckbox("developer.loggingRDFService.enable", data);
getCheckbox("developer.loggingRDFService.stackTrace", data);
getText("developer.loggingRDFService.restriction", data);
return data;
}
function getCheckbox(key, dest) {
dest[key] = document.getElementById(key).checked;
}
function getText(key, dest) {
dest[key] = document.getElementById(key).value;
}
}
/*
* Relies on the global variable for the AJAX URL.
*/
$(document).ready(function() {
new DeveloperPanel(developerAjaxUrl).setupDeveloperPanel({});
});

View file

@ -0,0 +1,5 @@
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
<div id="developerPanel" > </div>
<script>developerAjaxUrl = '${urls.developerAjax}'</script>
${scripts.add('<script type="text/javascript" src="${urls.base}/js/developer/developerPanel.js"></script>')}

View file

@ -0,0 +1,91 @@
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
<#macro showCheckbox key>
<input type="checkbox" id="${key}" <#if settings[key]>checked</#if>>
</#macro>
<#macro showTextbox key>
<input type="text" id="${key}" size="40" value="${settings[key]}" >
</#macro>
<style>
div.developer {
background-color: red;
padding: 0px 10px 0px 10px;
font-size: small;
font-variant: small-caps;
}
div.developer #developerPanelBody {
display: none;
}
div.developer .container {
border: thin groove black
}
</style>
<#if !settings["developer.enabled"]>
<#elseif !settings["mayControl"]>
<div class="developer">
<h1>${siteName} is running in developer mode.</h1>
</div>
<#else>
<div class="developer">
<h1 id="developerPanelClickMe">${siteName} is running in developer mode.
<span id="developerPanelClickText">(click for Options)</span>
</h1>
<div id="developerPanelBody">
<form>
<label>
<@showCheckbox "developer.enabled" />
Enable developer mode
</label>
<div class="container">
Freemarker templates
<label>
<@showCheckbox "developer.defeatFreemarkerCache" />
Defeat the template cache
</label>
<label>
<@showCheckbox "developer.insertFreemarkerDelimiters" />
Insert HTML comments at start and end of templates
</label>
</div>
<div class="container">
SPARQL Queries
<label>
<@showCheckbox "developer.loggingRDFService.enable" />
Log each query
</label>
<label>
<@showCheckbox "developer.loggingRDFService.stackTrace" />
Add stack trace
</label>
<label>
Restrict by calling stack
<@showTextbox "developer.loggingRDFService.restriction" />
</label>
</div>
<div class="container">
Language support
<label>
<@showCheckbox "developer.i18n.defeatCache" />
Defeat the cache of language property files
</label>
<label>
<@showCheckbox "developer.i18n.logStringRequests" />
Log the retrieval of language strings
</label>
</div>
<input type="button" id="developerPanelSaveButton" value="Save Settings" name="foo" />
</form>
</div>
</div>
</#if>

View file

@ -1,5 +1,7 @@
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
<#include "developer.ftl">
<nav role="navigation">
<ul id="main-nav" role="list">
<#list menu.items as item>