19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#ifndef __DOM_ELEMENT_IMPL__
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define __DOM_ELEMENT_IMPL__
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "NodeImpl.h"
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "NodeListImpl.h"
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "NodeType.h"
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass ElementImpl : public NodeImpl
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic:
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * The name of the element. For example, in:
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * <pre> &lt;elementExample
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * id="demo"&gt; ... &lt;/elementExample&gt; , </pre>
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         *  <code>tagName</code> has
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * the value <code>"elementExample"</code>. Note that this is
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * case-preserving in XML, as are all of the operations of the DOM. The
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * HTML DOM returns the <code>tagName</code> of an HTML element in the
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * canonical uppercase form, regardless of the case in the source HTML
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * document.
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * @return the element's tag name.
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        virtual const DOMString* getTagName() const;
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Retrieves an attribute value by name.
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * @param name The name of the attribute to retrieve.
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * @return The <code>Attr</code> value as a string, or the empty string
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         *   if that attribute does not have a specified or default value.
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        virtual const DOMString* getAttribute(const DOMString* name) const;
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Adds a new attribute. If an attribute with that name is already present
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * in the element, its value is changed to be that of the value
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * parameter. This value is a simple string; it is not parsed as it is
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * being set. So any markup (such as syntax to be recognized as an
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * entity reference) is treated as literal text, and needs to be
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * appropriately escaped by the implementation when it is written out.
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * In order to assign an attribute value that contains entity
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * references, the user must create an <code>Attr</code> node plus any
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * <code>Text</code> and <code>EntityReference</code> nodes, build the
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * appropriate subtree, and use <code>setAttributeNode</code> to assign
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * it as the value of an attribute.
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * <br>To set an attribute with a qualified name and namespace URI, use
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * the <code>setAttributeNS</code> method.
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * @param name The name of the attribute to create or alter.
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * @param value Value to set in string form.
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * @exception DOMException
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         *   INVALID_CHARACTER_ERR: Raised if the specified name contains an
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         *   illegal character.
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly.
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        virtual void setAttribute(const DOMString* name, const DOMString* value) throw (DOMException);
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Removes an attribute by name. If the removed attribute is known to have
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * a default value, an attribute immediately appears containing the
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * default value as well as the corresponding namespace URI, local name,
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * and prefix when applicable.
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * <br>To remove an attribute by local name and namespace URI, use the
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * <code>removeAttributeNS</code> method.
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * @param name The name of the attribute to remove.
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * @exception DOMException
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         *   NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly.
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        virtual void removeAttribute(const DOMString* name) throw (DOMException);
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Returns a <code>NodeList</code> of all descendant <code>Elements</code>
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * with a given tag name, in the order in which they are encountered in
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * a preorder traversal of this <code>Element</code> tree.
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * @param name The name of the tag to match on. The special value "*"
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         *   matches all tags.
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * @return A list of matching <code>Element</code> nodes.
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        NodeListImpl* getElementsByTagName(const DOMString* name) const;
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /** Override getNodeType() method in NodeImpl.h.*/
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        virtual bool hasAttributes() const;
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /** Override getNodeName() method in NodeImpl.h.*/
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        const DOMString* getNodeName() const;
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /** Override getNodeType() method in NodeImpl.h.*/
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        NodeType getNodeType() const;
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /** Defining "click()" method*/
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        virtual void click(){}
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /** Defining "blur()" method,*/
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        virtual void blur(){}
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /** Defining "focus()" method*/
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        virtual void focus(){}
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /** Defining "change()" method*/
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        virtual void change(){}
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /** Defining "select()" method*/
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        virtual void select(){}
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /** Defining "onClick()" event input,textarea,button, and anchor*/
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        virtual bool onClick(){return true;}
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /** Defining "onBlur()" event,for input,textarea,button,anchor and select */
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        virtual bool onBlur(){return true;}
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /** Defining "onFocus()" event,for input,textarea,button,anchor and select*/
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        virtual bool onFocus(){return true;}
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /** Defining "onChange()" event,for input,textarea and select tag*/
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        virtual bool onChange(){return true;}
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /** Defining "onSelect()" event,for textarea and input*/
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        virtual bool onSelect(){return true;}
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * when the end tag of one element is found,this method would be called.The basic action is call seCompleted().
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        **/
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        virtual void endElement() {}
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprivate:
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Get elements whose name match on <code>name</code>,than keep they into <code>nodeList</code>.
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * @param name   The tag name of the elements to match on.
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * @param nodeList keep all the matched element.
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        void getElementsByTagName(const DOMString* name,NodeListImpl* nodeList) const;
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project};
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif /*__DOM_ELEMENT_IMPL__*/
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
148