| <%-- |
| Licensed to the Apache Software Foundation (ASF) under one or more |
| contributor license agreements. The ASF licenses this file to You |
| under the Apache License, Version 2.0 (the "License"); you may not |
| use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. For additional information regarding |
| copyright in this work, please see the NOTICE file in the top level |
| directory of this distribution. |
| --%> |
| <%@ include file="/WEB-INF/jsps/taglibs-struts2.jsp" %> |
| |
| <p class="subtitle"><s:text name="configForm.subtitle"/></p> |
| <p><s:text name="configForm.prompt"/></p> |
| |
| |
| <s:form action="globalConfig!save" theme="bootstrap" cssClass="form-horizontal"> |
| |
| <s:hidden name="salt"/> |
| |
| <s:iterator var="dg" value="globalConfigDef.displayGroups"> |
| |
| <h3><s:text name="%{#dg.key}"/></h3> |
| |
| <s:iterator var="pd" value="#dg.propertyDefs"> |
| |
| <%-- 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" value="name" listValue="name"/> |
| </s:if> |
| |
| <%-- special case for front page blog --%> |
| <s:elseif test="#pd.name == 'site.frontpage.weblog.handle'"> |
| <s:select name="%{#pd.name}" label="%{getText(#pd.key)}" value="%{properties[#pd.name].value}" |
| list="weblogs" listKey="name" listValueKey="handle"/> |
| </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} "/> |
| </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} "/> |
| </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)}" |
| fieldValue="true" checked="true" onchange="formChanged()"/> |
| </s:if> |
| <s:if test="properties[#pd.name].value != 'true'"> |
| <s:checkbox name="%{#pd.name}" label="%{getText(#pd.key)}" |
| 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" |
| 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='<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" |
| 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="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> |
| |
| <%-- if it's something we don't understand then use textbox --%> |
| <s:else> |
| <s:textfield name="%{#pd.name}" label="%{getText(#pd.key)}" size="35" |
| value="%{properties[#pd.name].value}"/> |
| </s:else> |
| |
| </s:iterator> |
| |
| <img src="<s:url value='/roller-ui/images/spacer.png' />" alt="spacer" style="min-height: 1em"/> |
| |
| </s:iterator> |
| |
| <input id="saveButton" class="btn btn-default" type="submit" value="<s:text name="generic.save"/>"/> |
| |
| </s:form> |
| |
| |
| <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 (isInteger || isFloat) { |
| |
| 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 (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"))); |
| } |
| |
| }); |
| |
| saveBookmarkButton.attr("disabled", error); |
| } |
| |
| </script> |
| |