javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/api/Element.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Sat, 26 Jan 2013 08:47:05 +0100
changeset 592 5e13b1ac2886
parent 530 3ce069ec3312
child 813 2fa85847ccf7
permissions -rw-r--r--
In order to support fields of the same name in subclasses we are now prefixing them with name of the class that defines them. To provide convenient way to access them from generated bytecode and also directly from JavaScript, there is a getter/setter function for each field. It starts with _ followed by the field name. If called with a parameter, it sets the field, with a parameter it just returns it.
jaroslav@26
     1
/**
jaroslav@106
     2
 * Back 2 Browser Bytecode Translator
jaroslav@106
     3
 * Copyright (C) 2012 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
jaroslav@26
     4
 *
jaroslav@26
     5
 * This program is free software: you can redistribute it and/or modify
jaroslav@26
     6
 * it under the terms of the GNU General Public License as published by
jaroslav@26
     7
 * the Free Software Foundation, version 2 of the License.
jaroslav@26
     8
 *
jaroslav@26
     9
 * This program is distributed in the hope that it will be useful,
jaroslav@26
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
jaroslav@26
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
jaroslav@26
    12
 * GNU General Public License for more details.
jaroslav@26
    13
 *
jaroslav@26
    14
 * You should have received a copy of the GNU General Public License
jaroslav@26
    15
 * along with this program. Look for COPYING file in the top folder.
jaroslav@26
    16
 * If not, see http://opensource.org/licenses/GPL-2.0.
jaroslav@26
    17
 */
jaroslav@26
    18
package org.apidesign.bck2brwsr.htmlpage.api;
jaroslav@26
    19
jaroslav@100
    20
import org.apidesign.bck2brwsr.core.JavaScriptBody;
jaroslav@100
    21
jaroslav@26
    22
/** Represents a generic HTML element.
jaroslav@26
    23
 *
jaroslav@26
    24
 * @author Jaroslav Tulach <jtulach@netbeans.org>
jaroslav@26
    25
 */
jaroslav@26
    26
public abstract class Element {
jaroslav@26
    27
    private final String id;
jaroslav@26
    28
    
jaroslav@26
    29
    public Element(String id) {
jaroslav@26
    30
        this.id = id;
jaroslav@26
    31
    }
jaroslav@26
    32
    
jaroslav@530
    33
    /** Id of the element in the document.
jaroslav@530
    34
     * @return the id for this element
jaroslav@530
    35
     */
jaroslav@530
    36
    public String getId() {
jaroslav@530
    37
        return id;
jaroslav@530
    38
    }
jaroslav@530
    39
    
jaroslav@26
    40
    abstract void dontSubclass();
jaroslav@27
    41
    
jaroslav@100
    42
    @JavaScriptBody(
jaroslav@100
    43
        args={"el", "property", "value"},
jaroslav@592
    44
        body="var e = window.document.getElementById(el._id());\n"
jaroslav@100
    45
           + "e[property] = value;\n"
jaroslav@100
    46
    )
jaroslav@428
    47
    static native void setAttribute(Element el, String property, Object value);
jaroslav@100
    48
jaroslav@100
    49
    @JavaScriptBody(
jaroslav@100
    50
        args={"el", "property"},
jaroslav@592
    51
        body="var e = window.document.getElementById(el._id());\n"
jaroslav@100
    52
           + "return e[property];\n"
jaroslav@100
    53
    )
jaroslav@428
    54
    static native Object getAttribute(Element el, String property);
jaroslav@28
    55
    
toni@521
    56
    @JavaScriptBody(
toni@521
    57
        args={"el"},
jaroslav@592
    58
        body="return window.document.getElementById(el._id());"
toni@521
    59
    )
toni@521
    60
    static native Object getElementById(Element el);
toni@521
    61
    
jaroslav@28
    62
    /** Executes given runnable when user performs a "click" on the given
jaroslav@28
    63
     * element.
jaroslav@28
    64
     * @param r the runnable to execute, never null
jaroslav@28
    65
     */
jaroslav@100
    66
    @JavaScriptBody(
jaroslav@443
    67
        args={ "ev", "r" },
jaroslav@592
    68
        body="var e = window.document.getElementById(this._id());\n"
jaroslav@592
    69
           + "e[ev._id()] = function() { r.run__V(); };\n"
jaroslav@100
    70
    )
jaroslav@514
    71
    final void on(OnEvent ev, Runnable r) {
jaroslav@514
    72
    }
jaroslav@428
    73
jaroslav@428
    74
    /** Shows alert message dialog in a browser.
jaroslav@428
    75
     * @param msg the message to show
jaroslav@428
    76
     */
jaroslav@428
    77
    @JavaScriptBody(args = "msg", body = "alert(msg);")
jaroslav@428
    78
    public static native void alert(String msg);
jaroslav@436
    79
jaroslav@436
    80
    /** Generic way to query any attribute of this element.
jaroslav@436
    81
     * @param property name of the attribute
jaroslav@436
    82
     */
jaroslav@436
    83
    public final Object getAttribute(String property) {
jaroslav@436
    84
        return getAttribute(this, property);
jaroslav@436
    85
    }
jaroslav@428
    86
    
jaroslav@436
    87
    /** Generic way to change an attribute of this element.
jaroslav@436
    88
     * 
jaroslav@436
    89
     * @param property name of the attribute
jaroslav@436
    90
     * @param value value to associate with the attribute
jaroslav@436
    91
     */
jaroslav@436
    92
    public final void setAttribute(String property, Object value) {
jaroslav@436
    93
        setAttribute(this, property, value);
jaroslav@436
    94
    }
jaroslav@26
    95
}