Subversion Repositories Applications.papyrus

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

/*
        Copyright (c) 2004-2006, The Dojo Foundation
        All Rights Reserved.

        Licensed under the Academic Free License version 2.1 or above OR the
        modified BSD license. For more information on Dojo licensing, see:

                http://dojotoolkit.org/community/licensing.shtml
*/

dojo.provide("dojo.widget.RadioGroup");
dojo.require("dojo.lang.common");
dojo.require("dojo.event.browser");
dojo.require("dojo.html.selection");
dojo.require("dojo.widget.*");
dojo.require("dojo.widget.HtmlWidget");
dojo.widget.defineWidget("dojo.widget.RadioGroup", dojo.widget.HtmlWidget, function () {
        this.selectedItem = null;
        this.items = [];
        this.selected = [];
        this.groupCssClass = "radioGroup";
        this.selectedCssClass = "selected";
        this.itemContentCssClass = "itemContent";
}, {isContainer:false, templatePath:null, templateCssPath:null, postCreate:function () {
        this._parseStructure();
        dojo.html.addClass(this.domNode, this.groupCssClass);
        this._setupChildren();
        dojo.event.browser.addListener(this.domNode, "onclick", dojo.lang.hitch(this, "onSelect"));
        if (this.selectedItem) {
                this._selectItem(this.selectedItem);
        }
}, _parseStructure:function () {
        if (this.domNode.tagName.toLowerCase() != "ul" && this.domNode.tagName.toLowerCase() != "ol") {
                dojo.raise("RadioGroup: Expected ul or ol content.");
                return;
        }
        this.items = [];
        var nl = this.domNode.getElementsByTagName("li");
        for (var i = 0; i < nl.length; i++) {
                if (nl[i].parentNode == this.domNode) {
                        this.items.push(nl[i]);
                }
        }
}, add:function (node) {
        if (node.parentNode != this.domNode) {
                this.domNode.appendChild(node);
        }
        this.items.push(node);
        this._setup(node);
}, remove:function (node) {
        var idx = -1;
        for (var i = 0; i < this.items.length; i++) {
                if (this.items[i] == node) {
                        idx = i;
                        break;
                }
        }
        if (idx < 0) {
                return;
        }
        this.items.splice(idx, 1);
        node.parentNode.removeChild(node);
}, clear:function () {
        for (var i = 0; i < this.items.length; i++) {
                this.domNode.removeChild(this.items[i]);
        }
        this.items = [];
}, clearSelections:function () {
        for (var i = 0; i < this.items.length; i++) {
                dojo.html.removeClass(this.items[i], this.selectedCssClass);
        }
        this.selectedItem = null;
}, _setup:function (node) {
        var span = document.createElement("span");
        dojo.html.disableSelection(span);
        dojo.html.addClass(span, this.itemContentCssClass);
        dojo.dom.moveChildren(node, span);
        node.appendChild(span);
        if (this.selected.length > 0) {
                var uid = dojo.html.getAttribute(node, "id");
                if (uid && uid == this.selected) {
                        this.selectedItem = node;
                }
        }
        dojo.event.browser.addListener(node, "onclick", dojo.lang.hitch(this, "onItemSelect"));
        if (dojo.html.hasAttribute(node, "onitemselect")) {
                var tn = dojo.lang.nameAnonFunc(new Function(dojo.html.getAttribute(node, "onitemselect")), this);
                dojo.event.browser.addListener(node, "onclick", dojo.lang.hitch(this, tn));
        }
}, _setupChildren:function () {
        for (var i = 0; i < this.items.length; i++) {
                this._setup(this.items[i]);
        }
}, _selectItem:function (node, event, nofire) {
        if (this.selectedItem) {
                dojo.html.removeClass(this.selectedItem, this.selectedCssClass);
        }
        this.selectedItem = node;
        dojo.html.addClass(this.selectedItem, this.selectedCssClass);
        if (!dj_undef("currentTarget", event)) {
                return;
        }
        if (!nofire) {
                if (dojo.render.html.ie) {
                        this.selectedItem.fireEvent("onclick");
                } else {
                        var e = document.createEvent("MouseEvents");
                        e.initEvent("click", true, false);
                        this.selectedItem.dispatchEvent(e);
                }
        }
}, getValue:function () {
        return this.selectedItem;
}, onSelect:function (e) {
}, onItemSelect:function (e) {
        if (!dj_undef("currentTarget", e)) {
                this._selectItem(e.currentTarget, e);
        }
}});