Author: wesw Date: Thu Mar 5 21:41:13 2009 New Revision: 750604 URL: http://svn.apache.org/viewvc?rev=750604&view=rev Log: migrating tags to allow new themes and for users to customize themes Changing utils.js and validation.js to be JQuery-ified not yet working
Added: struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/JQueryPluginConstants.java - copied, changed from r750456, struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/JQueryPluginStatics.java struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/org/ struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/org/apache/ struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/org/apache/struts2/ struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/org/apache/struts2/static/ struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/org/apache/struts2/static/jqueryUtils.js struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/template/jquery/validation.js Removed: struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/JQueryPluginStatics.java Modified: struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/components/JQueryForm.java struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/components/JQueryHead.java struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/components/JQueryReset.java struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/components/JQuerySubmit.java struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/components/JQueryTextField.java struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/struts-plugin.xml struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/template/jquery/form-close-validate.ftl struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/template/jquery/form-validate.ftl struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/template/jquery/head.ftl Copied: struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/JQueryPluginConstants.java (from r750456, struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/JQueryPluginStatics.java) URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/JQueryPluginConstants.java?p2=struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/JQueryPluginConstants.java&p1=struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/JQueryPluginStatics.java&r1=750456&r2=750604&rev=750604&view=diff ============================================================================== --- struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/JQueryPluginStatics.java (original) +++ struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/JQueryPluginConstants.java Thu Mar 5 21:41:13 2009 @@ -7,7 +7,7 @@ * Time: 1:22:20 PM * To change this template use File | Settings | File Templates. */ -public class JQueryPluginStatics { - - public static final String THEME_NAME = "jquery"; +public class JQueryPluginConstants { + + public static final String DEFAULT_THEME = "struts.jquery.default.theme"; } Modified: struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/components/JQueryForm.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/components/JQueryForm.java?rev=750604&r1=750603&r2=750604&view=diff ============================================================================== --- struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/components/JQueryForm.java (original) +++ struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/components/JQueryForm.java Thu Mar 5 21:41:13 2009 @@ -3,8 +3,9 @@ import org.apache.struts2.components.Form; import org.apache.struts2.views.annotations.StrutsTagAttribute; import org.apache.struts2.views.annotations.StrutsTag; -import org.apache.struts2.jquery.JQueryPluginStatics; +import org.apache.struts2.jquery.JQueryPluginConstants; import com.opensymphony.xwork2.util.ValueStack; +import com.opensymphony.xwork2.inject.Inject; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -32,6 +33,12 @@ } @Override + @Inject(JQueryPluginConstants.DEFAULT_THEME) + public void setDefaultUITheme(String theme) { + this.defaultUITheme = theme; + } + + @Override public void evaluateParams() { super.evaluateParams(); @@ -43,11 +50,6 @@ } } - @Override - public String getTheme() { - return JQueryPluginStatics.THEME_NAME; - } - @StrutsTagAttribute(description="for specifying whether the result of the action of this form will be processed " + "by javascript, or if the form should be posted like a normal", type="Boolean", defaultValue="true") public void setAjaxResult(String ajaxResult) { Modified: struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/components/JQueryHead.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/components/JQueryHead.java?rev=750604&r1=750603&r2=750604&view=diff ============================================================================== --- struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/components/JQueryHead.java (original) +++ struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/components/JQueryHead.java Thu Mar 5 21:41:13 2009 @@ -2,8 +2,9 @@ import org.apache.struts2.components.Head; import org.apache.struts2.views.annotations.StrutsTag; -import org.apache.struts2.jquery.JQueryPluginStatics; +import org.apache.struts2.jquery.JQueryPluginConstants; import com.opensymphony.xwork2.util.ValueStack; +import com.opensymphony.xwork2.inject.Inject; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletRequest; @@ -27,8 +28,9 @@ } @Override - public String getTheme() { - return JQueryPluginStatics.THEME_NAME; + @Inject(JQueryPluginConstants.DEFAULT_THEME) + public void setDefaultUITheme(String theme) { + this.defaultUITheme = theme; } } Modified: struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/components/JQueryReset.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/components/JQueryReset.java?rev=750604&r1=750603&r2=750604&view=diff ============================================================================== --- struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/components/JQueryReset.java (original) +++ struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/components/JQueryReset.java Thu Mar 5 21:41:13 2009 @@ -1,8 +1,9 @@ package org.apache.struts2.jquery.components; import org.apache.struts2.components.Reset; -import org.apache.struts2.jquery.JQueryPluginStatics; +import org.apache.struts2.jquery.JQueryPluginConstants; import com.opensymphony.xwork2.util.ValueStack; +import com.opensymphony.xwork2.inject.Inject; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -21,7 +22,8 @@ } @Override - public String getTheme() { - return JQueryPluginStatics.THEME_NAME; + @Inject(JQueryPluginConstants.DEFAULT_THEME) + public void setDefaultUITheme(String theme) { + this.defaultUITheme = theme; } } Modified: struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/components/JQuerySubmit.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/components/JQuerySubmit.java?rev=750604&r1=750603&r2=750604&view=diff ============================================================================== --- struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/components/JQuerySubmit.java (original) +++ struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/components/JQuerySubmit.java Thu Mar 5 21:41:13 2009 @@ -2,8 +2,9 @@ import org.apache.struts2.components.Submit; import org.apache.struts2.views.annotations.StrutsTag; -import org.apache.struts2.jquery.JQueryPluginStatics; +import org.apache.struts2.jquery.JQueryPluginConstants; import com.opensymphony.xwork2.util.ValueStack; +import com.opensymphony.xwork2.inject.Inject; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -27,7 +28,8 @@ } @Override - public String getTheme() { - return JQueryPluginStatics.THEME_NAME; + @Inject(JQueryPluginConstants.DEFAULT_THEME) + public void setDefaultUITheme(String theme) { + this.defaultUITheme = theme; } } Modified: struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/components/JQueryTextField.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/components/JQueryTextField.java?rev=750604&r1=750603&r2=750604&view=diff ============================================================================== --- struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/components/JQueryTextField.java (original) +++ struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/components/JQueryTextField.java Thu Mar 5 21:41:13 2009 @@ -2,8 +2,9 @@ import org.apache.struts2.components.TextField; import org.apache.struts2.views.annotations.StrutsTag; -import org.apache.struts2.jquery.JQueryPluginStatics; +import org.apache.struts2.jquery.JQueryPluginConstants; import com.opensymphony.xwork2.util.ValueStack; +import com.opensymphony.xwork2.inject.Inject; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -27,7 +28,8 @@ } @Override - public String getTheme() { - return JQueryPluginStatics.THEME_NAME; + @Inject(JQueryPluginConstants.DEFAULT_THEME) + public void setDefaultUITheme(String theme) { + this.defaultUITheme = theme; } } Added: struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/org/apache/struts2/static/jqueryUtils.js URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/org/apache/struts2/static/jqueryUtils.js?rev=750604&view=auto ============================================================================== --- struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/org/apache/struts2/static/jqueryUtils.js (added) +++ struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/org/apache/struts2/static/jqueryUtils.js Thu Mar 5 21:41:13 2009 @@ -0,0 +1,99 @@ +/* + * $Id: $ + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. 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. + */ + +var StrutsJQueryUtils = {}; + +// gets an object with validation errors from string returned by +// the ajaxValidation interceptor +StrutsJQueryUtils.getValidationErrors = function(data) { + if(data.indexOf("/* {") == 0) { + return eval("( " + data.substring(2, data.length - 2) + " )"); + } else { + return null; + } +}; + +StrutsJQueryUtils.clearValidationErrors = function(formId) { + clearErrorMessages(formId); +}; + +// shows validation errors using functions from xhtml/validation.js +// or css_xhtml/validation.js +StrutsJQueryUtils.showValidationErrors = function(form, errors) { + StrutsJQueryUtils.clearValidationErrors(form, errors); + + if(errors.fieldErrors) { + for(var fieldName in errors.fieldErrors) { + for(var i = 0; i < errors.fieldErrors[fieldName].length; i++) { + addErrorJquery( $("#"+form+" > input[name="+fieldName+"]"), + errors.fieldErrors[fieldName][i]); + } + } + } +}; + +StrutsJQueryUtils.firstElement = function(parentNode, tagName) { + var node = parentNode.firstChild; + while(node && node.nodeType != 1){ + node = node.nextSibling; + } + if(tagName && node && node.tagName && node.tagName.toLowerCase() != tagName.toLowerCase()) { + node = StrutsJQueryUtils.nextElement(node, tagName); + } + return node; +}; + +StrutsJQueryUtils.nextElement = function(node, tagName) { + if(!node) { return null; } + do { + node = node.nextSibling; + } while(node && node.nodeType != 1); + + if(node && tagName && tagName.toLowerCase() != node.tagName.toLowerCase()) { + return StrutsJQueryUtils.nextElement(node, tagName); + } + return node; +}; + +StrutsJQueryUtils.previousElement = function(node, tagName) { + if(!node) { return null; } + if(tagName) { tagName = tagName.toLowerCase(); } + do { + node = node.previousSibling; + } while(node && node.nodeType != 1); + + if(node && tagName && tagName.toLowerCase() != node.tagName.toLowerCase()) { + return StrutsJQueryUtils.previousElement(node, tagName); + } + return node; +}; + +StrutsJQueryUtils.addOnLoad = function(func) { + $().ready(func); +}; + +StrutsJQueryUtils.addEventListener = function(element, name, observer, capture) { + if (element.addEventListener) { + element.addEventListener(name, observer, false); + } else if (element.attachEvent) { + element.attachEvent('on' + name, observer); + } +}; Modified: struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/struts-plugin.xml URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/struts-plugin.xml?rev=750604&r1=750603&r2=750604&view=diff ============================================================================== --- struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/struts-plugin.xml (original) +++ struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/struts-plugin.xml Thu Mar 5 21:41:13 2009 @@ -45,4 +45,6 @@ </result-types> </package> --> + <constant name="struts.jquery.default.theme" value="jquery" /> + </struts> Modified: struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/template/jquery/form-close-validate.ftl URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/template/jquery/form-close-validate.ftl?rev=750604&r1=750603&r2=750604&view=diff ============================================================================== --- struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/template/jquery/form-close-validate.ftl (original) +++ struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/template/jquery/form-close-validate.ftl Thu Mar 5 21:41:13 2009 @@ -48,17 +48,16 @@ } function validateFormCb_${parameters.id}( responseText, textStatus ) { - // var form = $("${parameters.id}").get(0); // need the actual DOM element, not the JQuery obj - var form = document.getElementById("${parameters.id}"); + //clear previous validation errors, if any - StrutsUtils.clearValidationErrors(form); + StrutsJQueryUtils.clearValidationErrors("${parameters.id}"); //get errors from response - var errorsObject = StrutsUtils.getValidationErrors(responseText); + var errorsObject = StrutsJQueryUtils.getValidationErrors(responseText); //show errors, if any if(errorsObject && errorsObject.fieldErrors) { - StrutsUtils.showValidationErrors(form, errorsObject); + StrutsJQueryUtils.showValidationErrors("${parameters.id}", errorsObject); } else { <#if (parameters.ajaxResult?default(false) == true ) && parameters.method?contains("post")> Modified: struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/template/jquery/form-validate.ftl URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/template/jquery/form-validate.ftl?rev=750604&r1=750603&r2=750604&view=diff ============================================================================== --- struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/template/jquery/form-validate.ftl (original) +++ struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/template/jquery/form-validate.ftl Thu Mar 5 21:41:13 2009 @@ -23,7 +23,7 @@ TODO rather than going with traditional onclick handler, it would be nice to move to $().live("click", ... --> <#if parameters.validate?default(true) == true> - <script type="text/javascript" src="${base}/struts/xhtml/validation.js"></script> + <script type="text/javascript" src="${base}/struts/jquery/validation.js"></script> <#if parameters.onsubmit??> ${tag.addParameter('onsubmit', "${parameters.onsubmit}; return validateForm_${parameters.id}();")} <#else> Modified: struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/template/jquery/head.ftl URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/template/jquery/head.ftl?rev=750604&r1=750603&r2=750604&view=diff ============================================================================== --- struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/template/jquery/head.ftl (original) +++ struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/template/jquery/head.ftl Thu Mar 5 21:41:13 2009 @@ -1,6 +1,6 @@ <#-- /* - * $Id: head.ftl 590812 2007-10-31 20:32:54Z apetrelli $ + * $Id: $ * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file @@ -21,6 +21,6 @@ */ --> <link rel="stylesheet" href="<@s.url value='/struts/xhtml/styles.css' includeParams='none' encode='false' />" type="text/css"/> -<#include "/${parameters.templateDir}/simple/head.ftl" /> +<script src="${base}/struts/jqueryUtils.js" type="text/javascript"></script> -<script src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js" type="text/javascript"></script> +<script src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.js" type="text/javascript"></script> Added: struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/template/jquery/validation.js URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/template/jquery/validation.js?rev=750604&view=auto ============================================================================== --- struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/template/jquery/validation.js (added) +++ struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/template/jquery/validation.js Thu Mar 5 21:41:13 2009 @@ -0,0 +1,76 @@ +/* + * $Id: validation.js 692578 2008-09-05 23:30:16Z davenewton $ + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. 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. + */ + +function clearErrorMessages(form) { + clearErrorMessagesJquery(form); +} + +function clearErrorMessagesJquery(form) { + + $("#"+form+" > tr[errorFor!=null]").remove(); +} + +function clearErrorLabels(form) { + clearErrorLabelsJquery(form); +} + +function clearErrorLabelsJquery(form) { + $("#"+form+"> .errorLabel").addClass("label").removeClass("errorLabel"); +} + +function addError(e, errorText) { + addErrorJquery(e, errorText); +} + +function addErrorJquery(e, errorText) { + try { + var row = (e.type ? e : e[0]); + while(row.nodeName.toUpperCase() != "TR") { + row = row.parentNode; + } + var table = row.parentNode; + var error = document.createTextNode(errorText); + var tr = document.createElement("tr"); + var td = document.createElement("td"); + var span = document.createElement("span"); + td.align = "center"; + td.valign = "top"; + td.colSpan = 2; + span.setAttribute("class", "errorMessage"); + span.setAttribute("className", "errorMessage"); //ie hack cause ie does not support setAttribute + span.appendChild(error); + td.appendChild(span); + tr.appendChild(td); + tr.setAttribute("errorFor", e.id); + table.insertBefore(tr, row); + + // update the label too + //if labelposition is 'top' the label is on the row above + var labelRow = row.cells.length > 1 ? row : StrutsUtils.previousElement(tr, "tr"); + var label = labelRow.cells[0].getElementsByTagName("label")[0]; + if (label) { + label.setAttribute("class", "errorLabel"); + label.setAttribute("className", "errorLabel"); //ie hack cause ie does not support setAttribute + } + } catch (e) { + alert(e); + } +}