/* * 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. */ package org.apache.wicket.markup.html.form; import java.util.HashSet; import java.util.Set; import org.apache.wicket.util.lang.Args; /** * Utility class for names used by JavaScript DOM API. These names should not be used as form element names, as they would interfere * with JavaScripts that attempt to use DOM API. * * @author Jesse Long */ class JavaScriptReservedNames { /** * Set of names reserved by JavaScript DOM API. */ private static final Set<String> RESERVED_NAMES = new HashSet<String>(100); static { /* * DOM 3 CORE Node interface * http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-1950641247 */ RESERVED_NAMES.add("nodeName"); RESERVED_NAMES.add("nodeValue"); RESERVED_NAMES.add("nodeType"); RESERVED_NAMES.add("parentNode"); RESERVED_NAMES.add("childNodes"); RESERVED_NAMES.add("firstChild"); RESERVED_NAMES.add("lastChild"); RESERVED_NAMES.add("previousSibling"); RESERVED_NAMES.add("nextSibling"); RESERVED_NAMES.add("attributes"); RESERVED_NAMES.add("ownerDocument"); RESERVED_NAMES.add("insertBefore"); RESERVED_NAMES.add("replaceChild"); RESERVED_NAMES.add("removeChild"); RESERVED_NAMES.add("appendChild"); RESERVED_NAMES.add("hasChildNodes"); RESERVED_NAMES.add("cloneNode"); RESERVED_NAMES.add("normalize"); RESERVED_NAMES.add("isSupported"); RESERVED_NAMES.add("namespaceURI"); RESERVED_NAMES.add("prefix"); RESERVED_NAMES.add("localName"); RESERVED_NAMES.add("hasAttributes"); RESERVED_NAMES.add("createDocumentPosition"); RESERVED_NAMES.add("textContent"); RESERVED_NAMES.add("isSameNode"); RESERVED_NAMES.add("lookupPrefix"); RESERVED_NAMES.add("isDefaultNamespace"); RESERVED_NAMES.add("lookupNamespaceURI"); RESERVED_NAMES.add("isEqualNode"); RESERVED_NAMES.add("getFeature"); RESERVED_NAMES.add("setUserData"); RESERVED_NAMES.add("getUserData"); /* * DOM 3 CORE Element interface * http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-745549614 */ RESERVED_NAMES.add("tagName"); RESERVED_NAMES.add("getAttribute"); RESERVED_NAMES.add("setAttribute"); RESERVED_NAMES.add("removeAttribute"); RESERVED_NAMES.add("getAttributeNode"); RESERVED_NAMES.add("setAttributeNode"); RESERVED_NAMES.add("removeAttributeNode"); RESERVED_NAMES.add("getElementsByTagName"); RESERVED_NAMES.add("getAttributeNS"); RESERVED_NAMES.add("setAttributeNS"); RESERVED_NAMES.add("removeAttributeNS"); RESERVED_NAMES.add("getAttributeNodeNS"); RESERVED_NAMES.add("setAttributeNodeNS"); RESERVED_NAMES.add("getElementsByTagNameNS"); RESERVED_NAMES.add("hasAttribute"); RESERVED_NAMES.add("hasAttributeNS"); RESERVED_NAMES.add("schemaTypeInfo"); RESERVED_NAMES.add("setIdAttribute"); RESERVED_NAMES.add("setIdAttributeNS"); RESERVED_NAMES.add("setIdAttributeNode"); /* * DOM 2 HTML HTMLElement interface * http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-58190037 */ RESERVED_NAMES.add("id"); RESERVED_NAMES.add("title"); RESERVED_NAMES.add("lang"); RESERVED_NAMES.add("dir"); RESERVED_NAMES.add("className"); /* * DOM 2 HTML HTMLFormElement interface * http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-40002357 */ RESERVED_NAMES.add("elements"); RESERVED_NAMES.add("length"); RESERVED_NAMES.add("name"); RESERVED_NAMES.add("acceptCharset"); RESERVED_NAMES.add("action"); RESERVED_NAMES.add("enctype"); RESERVED_NAMES.add("method"); RESERVED_NAMES.add("target"); RESERVED_NAMES.add("submit"); RESERVED_NAMES.add("reset"); } /** * Private constructor for utility class. */ private JavaScriptReservedNames() { } /** * Returns {@code true} if the name is used by the JavaScript DOM API. If the name is used in the JavaScript DOM API, we * should not name a form element with this name, as it would interfere with a JavaScript's ability to use the DOM API on * the form element. * * @param name * The name to check. * * @return {@code true} if the name is used by the JavaScript DOM API. */ public static boolean isNameReserved(String name) { Args.notNull(name, "name"); return RESERVED_NAMES.contains(name); } }