You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lo...@apache.org on 2009/12/04 17:07:07 UTC

svn commit: r887245 - in /myfaces/tobago/trunk/theme/standard/src: main/java/org/apache/myfaces/tobago/renderkit/util/JQueryUtils.java test/java/org/apache/myfaces/tobago/renderkit/util/JQueryUtilsUnitTest.java

Author: lofwyr
Date: Fri Dec  4 16:07:06 2009
New Revision: 887245

URL: http://svn.apache.org/viewvc?rev=887245&view=rev
Log:
TOBAGO-833: jQuery

Added:
    myfaces/tobago/trunk/theme/standard/src/main/java/org/apache/myfaces/tobago/renderkit/util/JQueryUtils.java
    myfaces/tobago/trunk/theme/standard/src/test/java/org/apache/myfaces/tobago/renderkit/util/JQueryUtilsUnitTest.java

Added: myfaces/tobago/trunk/theme/standard/src/main/java/org/apache/myfaces/tobago/renderkit/util/JQueryUtils.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/theme/standard/src/main/java/org/apache/myfaces/tobago/renderkit/util/JQueryUtils.java?rev=887245&view=auto
==============================================================================
--- myfaces/tobago/trunk/theme/standard/src/main/java/org/apache/myfaces/tobago/renderkit/util/JQueryUtils.java (added)
+++ myfaces/tobago/trunk/theme/standard/src/main/java/org/apache/myfaces/tobago/renderkit/util/JQueryUtils.java Fri Dec  4 16:07:06 2009
@@ -0,0 +1,96 @@
+package org.apache.myfaces.tobago.renderkit.util;
+
+/*
+ * 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.
+ */
+
+public class JQueryUtils {
+
+  private JQueryUtils() {
+    // to prevent instantiation
+  }
+
+  /**
+   * Puts two backslashes before : and . to escape them.
+   * Two are needed, because of JavaScript string literals. 
+   */
+  public static String escapeId(String id) {
+    return id.replaceAll("([\\:\\.])", "\\\\\\\\$1");
+  }
+
+  /**
+   * Puts one backslashes before \ to escape it.
+   * It is needed, because of JavaScript string literals. 
+   */
+  public static String escapeValue(String value) {
+    return value.replaceAll("\\\\", "\\\\\\\\");
+  }
+
+  /**
+   * Puts two backslashes before #;&,.+*~':"!^$[]()=>|/ to escape them.
+   * Two are needed, because of JavaScript string literals.
+   * Puts three backslashes before a \ itself, to escape it. 
+   */
+  public static String escapeSelector(String value) {
+    StringBuilder builder = new StringBuilder();
+    for (char c : value.toCharArray()) {
+      switch (c) {
+        case '\\':
+          builder.append("\\\\\\\\");
+          break;
+        case '#':
+        case ';':
+        case '&':
+        case ',':
+        case '.':
+        case '+':
+        case '*':
+        case '~':
+        case '\'':
+        case ':':
+        case '"':
+        case '!':
+        case '^':
+        case '$':
+        case '[':
+        case ']':
+        case '(':
+        case ')':
+        case '=':
+        case '>':
+        case '|':
+        case '/':
+          builder.append("\\\\");
+        default:
+          builder.append(c);
+          break;
+      }
+    }
+    return builder.toString();
+  }
+
+  /**
+   * Creates a selector for an id like $('#id').
+   * The id will be escaped if necessary.
+   */
+  public static String selectId(String id) {
+    StringBuilder builder = new StringBuilder();
+    builder.append("$('#");
+    builder.append(escapeId(id));
+    builder.append("')");
+    return builder.toString();
+  }
+}

Added: myfaces/tobago/trunk/theme/standard/src/test/java/org/apache/myfaces/tobago/renderkit/util/JQueryUtilsUnitTest.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/theme/standard/src/test/java/org/apache/myfaces/tobago/renderkit/util/JQueryUtilsUnitTest.java?rev=887245&view=auto
==============================================================================
--- myfaces/tobago/trunk/theme/standard/src/test/java/org/apache/myfaces/tobago/renderkit/util/JQueryUtilsUnitTest.java (added)
+++ myfaces/tobago/trunk/theme/standard/src/test/java/org/apache/myfaces/tobago/renderkit/util/JQueryUtilsUnitTest.java Fri Dec  4 16:07:06 2009
@@ -0,0 +1,69 @@
+package org.apache.myfaces.tobago.renderkit.util;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+/*
+ * 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.
+ */
+
+public class JQueryUtilsUnitTest {
+
+  @Test
+  public void testEscapeId() {
+    Assert.assertEquals("test", JQueryUtils.escapeId("test"));
+    Assert.assertEquals("\\\\:t\\\\.e-s\\\\.t\\\\:", JQueryUtils.escapeId(":t.e-s.t:"));
+  }
+
+  @Test
+  public void testEscapeValue() {
+    Assert.assertEquals("te\\\\st", JQueryUtils.escapeValue("te\\st"));
+  }
+  
+  @Test
+  public void testEscapeSelector() {
+    Assert.assertEquals("test", JQueryUtils.escapeSelector("test"));
+    Assert.assertEquals("\\\\:t\\\\.e-s\\\\.t\\\\:", JQueryUtils.escapeSelector(":t.e-s.t:"));
+    Assert.assertEquals("\\\\#", JQueryUtils.escapeSelector("#"));
+    Assert.assertEquals("\\\\;", JQueryUtils.escapeSelector(";"));
+    Assert.assertEquals("\\\\&", JQueryUtils.escapeSelector("&"));
+    Assert.assertEquals("\\\\,", JQueryUtils.escapeSelector(","));
+    Assert.assertEquals("\\\\.", JQueryUtils.escapeSelector("."));
+    Assert.assertEquals("\\\\+", JQueryUtils.escapeSelector("+"));
+    Assert.assertEquals("\\\\*", JQueryUtils.escapeSelector("*"));
+    Assert.assertEquals("\\\\~", JQueryUtils.escapeSelector("~"));
+    Assert.assertEquals("\\\\'", JQueryUtils.escapeSelector("'"));
+    Assert.assertEquals("\\\\:", JQueryUtils.escapeSelector(":"));
+    Assert.assertEquals("\\\\\\\\", JQueryUtils.escapeSelector("\\"));
+    Assert.assertEquals("\\\\\"", JQueryUtils.escapeSelector("\""));
+    Assert.assertEquals("\\\\!", JQueryUtils.escapeSelector("!"));
+    Assert.assertEquals("\\\\^", JQueryUtils.escapeSelector("^"));
+    Assert.assertEquals("\\\\$", JQueryUtils.escapeSelector("$"));
+    Assert.assertEquals("\\\\[", JQueryUtils.escapeSelector("["));
+    Assert.assertEquals("\\\\]", JQueryUtils.escapeSelector("]"));
+    Assert.assertEquals("\\\\(", JQueryUtils.escapeSelector("("));
+    Assert.assertEquals("\\\\)", JQueryUtils.escapeSelector(")"));
+    Assert.assertEquals("\\\\=", JQueryUtils.escapeSelector("="));
+    Assert.assertEquals("\\\\>", JQueryUtils.escapeSelector(">"));
+    Assert.assertEquals("\\\\|", JQueryUtils.escapeSelector("|"));
+    Assert.assertEquals("\\\\/", JQueryUtils.escapeSelector("/"));
+  }
+
+  @Test
+  public void selectId() {
+    Assert.assertEquals("$('#test\\\\:test')", JQueryUtils.selectId("test:test"));
+  }
+}