Repository: roller Updated Branches: refs/heads/bootstrap-ui 84579b4a9 -> e83e5f811
Server Administration (GlobalConfig) working well and looking good with Bootstrap. Project: http://git-wip-us.apache.org/repos/asf/roller/repo Commit: http://git-wip-us.apache.org/repos/asf/roller/commit/e83e5f81 Tree: http://git-wip-us.apache.org/repos/asf/roller/tree/e83e5f81 Diff: http://git-wip-us.apache.org/repos/asf/roller/diff/e83e5f81 Branch: refs/heads/bootstrap-ui Commit: e83e5f8115b3ebaa44eeb2653e360b21473e4d6e Parents: 84579b4 Author: Dave Johnson <[email protected]> Authored: Sun Jul 29 15:42:39 2018 -0400 Committer: Dave Johnson <[email protected]> Committed: Sun Jul 29 15:42:39 2018 -0400 ---------------------------------------------------------------------- app/pom.xml | 4 +- .../ui/struts2/admin/GlobalConfig.java | 14 ++-- .../resources/ApplicationResources.properties | 8 +- .../webapp/WEB-INF/jsps/admin/GlobalConfig.jsp | 79 +++++++++++++------- 4 files changed, 65 insertions(+), 40 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/roller/blob/e83e5f81/app/pom.xml ---------------------------------------------------------------------- diff --git a/app/pom.xml b/app/pom.xml index bad3b5d..b35fe2f 100644 --- a/app/pom.xml +++ b/app/pom.xml @@ -56,7 +56,7 @@ limitations under the License. <slf4j.version>1.7.25</slf4j.version> <spring.version>4.1.4.RELEASE</spring.version> <spring.security.version>3.2.5.RELEASE</spring.security.version> - <struts.version>2.5.12</struts.version> + <struts.version>2.5.16</struts.version> <velocity.version>1.7</velocity.version> <webjars.version>1.5</webjars.version> <ws-commons-util.version>1.0.2</ws-commons-util.version> @@ -359,7 +359,7 @@ limitations under the License. <dependency> <groupId>com.jgeppert.struts2.bootstrap</groupId> <artifactId>struts2-bootstrap-plugin</artifactId> - <version>2.0.3</version> + <version>2.5.2</version> </dependency> <dependency> http://git-wip-us.apache.org/repos/asf/roller/blob/e83e5f81/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/GlobalConfig.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/GlobalConfig.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/GlobalConfig.java index 010601a..fb2e18f 100644 --- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/GlobalConfig.java +++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/admin/GlobalConfig.java @@ -38,7 +38,7 @@ import org.apache.roller.weblogger.pojos.GlobalPermission; import org.apache.roller.weblogger.pojos.RuntimeConfigProperty; import org.apache.roller.weblogger.pojos.Weblog; import org.apache.roller.weblogger.ui.struts2.util.UIAction; -import org.apache.struts2.convention.annotation.AllowedMethods; +import org.apache.roller.weblogger.util.Utilities; import org.apache.struts2.interceptor.ParameterAware; import org.apache.struts2.interceptor.ServletRequestAware; @@ -161,9 +161,6 @@ public class GlobalConfig extends UIAction implements ParameterAware, ServletReq updProp = getProperties().get(propName); incomingProp = this.getParameter(updProp.getName()); - log.debug("Checking property [" + propName + "]"); - log.debug("Request value is [" + incomingProp + "]"); - PropertyDef propertyDef = globalConfigDef.getPropertyDef( propName ); if ( propertyDef == null) { // we're only processing defined properties, i.e. ones shown in the UI @@ -175,6 +172,7 @@ public class GlobalConfig extends UIAction implements ParameterAware, ServletReq try { Boolean.parseBoolean(incomingProp); updProp.setValue(incomingProp); + log.debug("Set boolean " + propName + " = " + incomingProp); } catch ( Exception nfe ) { String propDesc = bundle.getString( propertyDef.getKey() ); addError("ConfigForm.invalidBooleanProperty", @@ -186,6 +184,7 @@ public class GlobalConfig extends UIAction implements ParameterAware, ServletReq try { Integer.parseInt(incomingProp); updProp.setValue(incomingProp); + log.debug("Set integer " + propName + " = " + incomingProp); } catch ( NumberFormatException nfe ) { String propDesc = bundle.getString( propertyDef.getKey() ); addError("ConfigForm.invalidIntegerProperty", @@ -197,6 +196,7 @@ public class GlobalConfig extends UIAction implements ParameterAware, ServletReq try { Float.parseFloat(incomingProp); updProp.setValue(incomingProp); + log.debug("Set float " + propName + " = " + incomingProp); } catch ( NumberFormatException nfe ) { String propDesc = bundle.getString( propertyDef.getKey() ); addError("ConfigForm.invalidFloatProperty", @@ -205,6 +205,7 @@ public class GlobalConfig extends UIAction implements ParameterAware, ServletReq } else if ( incomingProp != null ){ updProp.setValue( incomingProp.trim() ); + log.debug("Set something " + propName + " = " + incomingProp); } else if ( propertyDef.getName().equals("users.comments.plugins") ) { // not a problem @@ -252,7 +253,7 @@ public class GlobalConfig extends UIAction implements ParameterAware, ServletReq log.debug("Parameter map:"); for (Map.Entry<String, String[]> entry : parameters.entrySet()) { - log.debug(entry.getKey() + " = " + entry.getValue()); + log.debug(entry.getKey() + " = " + Utilities.stringArrayToString(entry.getValue(),",")); } } } @@ -274,6 +275,9 @@ public class GlobalConfig extends UIAction implements ParameterAware, ServletReq public void setProperties(Map<String, RuntimeConfigProperty> properties) { this.properties = properties; + for (Map.Entry<String, RuntimeConfigProperty> entry : properties.entrySet()) { + log.debug("Got " + entry.getKey() + " = " + entry.getValue().getValue()); + } } public ConfigDef getGlobalConfigDef() { http://git-wip-us.apache.org/repos/asf/roller/blob/e83e5f81/app/src/main/resources/ApplicationResources.properties ---------------------------------------------------------------------- diff --git a/app/src/main/resources/ApplicationResources.properties b/app/src/main/resources/ApplicationResources.properties index 82e5ae1..c522cd9 100644 --- a/app/src/main/resources/ApplicationResources.properties +++ b/app/src/main/resources/ApplicationResources.properties @@ -310,10 +310,10 @@ commentServlet.email.thereAreErrorMessages=This comment failed validation for th configForm.title=Roller Configuration configForm.subtitle=Change site-wide configuration settings. -configForm.prompt=Changes you make here apply to the entire site. Note that \ -these are <i>runtime</i> properties only. Please refer to the Roller documentation \ -for information on overriding Roller''s <i>startup</i> properties (in the \ -roller.properties file). +configForm.prompt=<p>Make the changes you wish and then use the <b>Save</b> button below. \ +Changes you make here apply to the entire site.<p> \ +<p>Note that there is also a Roller configuration file that contains additional settings. \ +Talk to your systems administrator or refer to the Roller documentation for more information.</p> configForm.siteSettings=Site Settings configForm.siteName=Site Name (for main page and RSS feed) http://git-wip-us.apache.org/repos/asf/roller/blob/e83e5f81/app/src/main/webapp/WEB-INF/jsps/admin/GlobalConfig.jsp ---------------------------------------------------------------------- diff --git a/app/src/main/webapp/WEB-INF/jsps/admin/GlobalConfig.jsp b/app/src/main/webapp/WEB-INF/jsps/admin/GlobalConfig.jsp index 3f668c4..d9f8f11 100644 --- a/app/src/main/webapp/WEB-INF/jsps/admin/GlobalConfig.jsp +++ b/app/src/main/webapp/WEB-INF/jsps/admin/GlobalConfig.jsp @@ -21,7 +21,7 @@ <p><s:text name="configForm.prompt"/></p> -<s:form action="globalConfig!save" theme="bootstrap" cssClass="form-horizontal"> +<s:form action="globalConfig!save" theme="bootstrap" cssClass="form-vertical"> <s:hidden name="salt"/> @@ -31,64 +31,72 @@ <s:iterator var="pd" value="#dg.propertyDefs"> - <%-- special condition for comment plugins --%> + <%-- special case for comment plugins --%> <s:if test="#pd.name == 'users.comments.plugins'"> <s:checkboxlist label="%{getText(#pd.key)}" name="commentPlugins" - list="pluginsList" listKey="id" listValue="name"/> + list="pluginsList" listKey="id" value="name" listValue="name" /> </s:if> - <%-- special condition for front page blog --%> + <%-- special case for front page blog --%> <s:elseif test="#pd.name == 'site.frontpage.weblog.handle'"> - <s:select name="%{#pd.name}" label="%{getText(#pd.key)}" - list="weblogs" listKey="handle" listValue="name"/> + <s:select name="%{#pd.name}" label="%{getText(#pd.key)}" value="%{properties[#pd.name].value}" + list="weblogs" listKey="handle" listValueKey="name" /> </s:elseif> <%-- "string" type means use a simple textbox --%> <s:elseif test="#pd.type == 'string'"> <s:textfield name="%{#pd.name}" label="%{getText(#pd.key)}" size="35" - value="%{properties[#pd.name].value}"/> + value="%{properties[#pd.name].value} "/> </s:elseif> <%-- "text" type means use a full textarea --%> <s:elseif test="#pd.type == 'text'"> <s:textarea name="%{#pd.name}" label="%{getText(#pd.key)}" rows="#pd.rows" cols="#pd.cols" - value="%{properties[#pd.name].value}"/> + value="%{properties[#pd.name].value} "/> </s:elseif> <%-- "boolean" type means use a checkbox --%> <s:elseif test="#pd.type == 'boolean'"> + <s:if test="properties[#pd.name].value == 'true'"> - <s:checkbox name="%{#pd.name}" label="%{getText(#pd.key)}" checked="checked" /> + <s:checkbox name="%{#pd.name}" label="%{getText(#pd.key)}" cssClass="boolean" + fieldValue="true" checked="true" onchange="formChanged()" /> </s:if> - <s:if test="properties[#pd.name].value == 'false'"> - <s:checkbox name="%{#pd.name}" label="%{getText(#pd.key)}" /> + <s:if test="properties[#pd.name].value != 'true'"> + <s:checkbox name="%{#pd.name}" label="%{getText(#pd.key)}" cssClass="boolean" + fieldValue="false" onchange="formChanged()" /> </s:if> + </s:elseif> + <%-- "integer" use input type number --%> <s:elseif test="#pd.type == 'integer'"> <div class="form-group "> - <label class="col-sm-3 control-label" + <label class="control-label" for='globalConfig_<s:property value="#pd.nameWithUnderbars" />'> <s:text name="%{#pd.key}"/> </label> - <div class="col-sm-9 controls"> - <input type="number" name='<s:property value="#pd.name" />' - size="35" value="30" id='globalConfig_<s:property value="#pd.nameWithUnderbars" />' - class="form-control integer" onkeyup="formChanged()" /> + <div class="controls"> + <input type="number" name='<s:property value="#pd.name" />' size="35" + value='<s:property value="%{properties[#pd.name].value}"/>' + id='globalConfig_<s:property value="#pd.nameWithUnderbars" />' + class="form-control integer" onkeyup="formChanged()" /> </div> </div> </s:elseif> + <%-- "float" use input type number --%> <s:elseif test="#pd.type == 'float'"> <div class="form-group "> - <label class="col-sm-3 control-label" + <label class="control-label" for='globalConfig_<s:property value="#pd.nameWithUnderbars" />'> <s:text name="%{#pd.key}"/> </label> - <div class="col-sm-9 controls"> - <input type="number" name='<s:property value="#pd.name" />' - size="35" value="30" id='globalConfig_<s:property value="#pd.nameWithUnderbars" />' - class="form-control float" onkeyup="formChanged()" /> + <div class="controls"> + <input type="number" name='<s:property value="#pd.name" />' size="5" + value='<s:property value="properties[#pd.name].value"/>' + id='globalConfig_<s:property value="#pd.nameWithUnderbars" />' + class="form-control float" onkeyup="formChanged()" /> </div> </div> </s:elseif> @@ -110,28 +118,41 @@ <script type="text/javascript"> function formChanged() { - var saveBookmarkButton = $('#saveButton:first'); - var error = false; $("input").each( function() { - var isInteger = $(this).hasClass("integer"); + var isFloat = $(this).hasClass("float"); + var isBoolean = $(this).hasClass("boolean"); - if ( $(this).attr("type") == "number") { + if ( isInteger || isFloat ) { - if ( isNaN( this.valueAsNumber )) { - $(this).css("background", "#FBB") - error = true; + if ( isNaN( this.valueAsNumber )) { + $(this).css("background", "#FBB") + error = true; + + } else if ( isInteger && !Number.isInteger( this.valueAsNumber ) ) { + $(this).css("background", "#FBB") + error = true; + + } else { + $(this).css("background", "white") + } - } else if ( isInteger && !Number.isInteger( this.valueAsNumber ) ) { + } else if (isFloat) { + + if ( isNaN( this.valueAsNumber )) { $(this).css("background", "#FBB") error = true; } else { $(this).css("background", "white") } + + } else if (isBoolean) { + // not sure why this is necessary, value does not track checked state? + $(this).prop("value", !(!$(this).prop("checked"))); } });
