Subversion Repositories Applications.papyrus

Rev

Rev 1422 | 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.Form");
dojo.require("dojo.widget.*");
dojo.require("dojo.widget.HtmlWidget");
dojo.widget.defineWidget("dojo.widget.Form", dojo.widget.HtmlWidget, {isContainer:true, templateString:"<form dojoAttachPoint='containerNode' dojoAttachEvent='onSubmit:onSubmit'></form>", formElements:[], ignoreNullValues:false, postCreate:function (args, frag) {
        for (var key in args) {
                if (key == "dojotype") {
                        continue;
                }
                var attr = document.createAttribute(key);
                attr.nodeValue = args[key];
                this.containerNode.setAttributeNode(attr);
        }
}, _createRepeaters:function (obj, widget) {
        for (var i = 0; i < widget.children.length; ++i) {
                if (widget.children[i].widgetType == "RepeaterContainer") {
                        var rIndex = widget.children[i].index;
                        var rIndexPos = rIndex.indexOf("%{index}");
                        rIndex = rIndex.substr(0, rIndexPos - 1);
                        var myObj = this._getObject(obj, rIndex);
                        if (typeof (myObj) == "object" && myObj.length == 0) {
                                myObj = new Array();
                        }
                        var rowCount = widget.children[i].getRowCount();
                        for (var j = 0, len = rowCount; j < len; ++j) {
                                widget.children[i].deleteRow(0);
                        }
                        for (var j = 0; j < myObj.length; j++) {
                                widget.children[i].addRow(false);
                        }
                }
                if (widget.children[i].isContainer) {
                        this._createRepeaters(obj, widget.children[i]);
                }
        }
}, _createFormElements:function () {
        if (dojo.render.html.safari) {
                this.formElements = [];
                var elems = ["INPUT", "SELECT", "TEXTAREA"];
                for (var k = 0; k < elems.length; k++) {
                        var list = this.containerNode.getElementsByTagName(elems[k]);
                        for (var j = 0, len2 = list.length; j < len2; j++) {
                                this.formElements.push(list[j]);
                        }
                }
        } else {
                this.formElements = this.containerNode.elements;
        }
}, onSubmit:function (e) {
        e.preventDefault();
}, submit:function () {
        this.containerNode.submit();
}, _getFormElement:function (name) {
        if (dojo.render.html.ie) {
                for (var i = 0, len = this.formElements.length; i < len; i++) {
                        var element = this.formElements[i];
                        if (element.name == name) {
                                return element;
                        }
                }
        } else {
                var elem = this.formElements[name];
                if (typeof (elem) != "undefined") {
                        return elem;
                }
        }
        return null;
}, _getObject:function (obj, searchString) {
        var namePath = [];
        namePath = searchString.split(".");
        var myObj = obj;
        var name = namePath[namePath.length - 1];
        for (var j = 0, len = namePath.length; j < len; ++j) {
                var p = namePath[j];
                if (typeof (myObj[p]) == "undefined") {
                        myObj[p] = {};
                }
                myObj = myObj[p];
        }
        return myObj;
}, _setToContainers:function (obj, widget) {
        for (var i = 0, len = widget.children.length; i < len; ++i) {
                var currentWidget = widget.children[i];
                if (currentWidget.widgetType == "Repeater") {
                        for (var j = 0, len = currentWidget.getRowCount(); j < len; ++j) {
                                currentWidget._initRow(j);
                        }
                }
                if (currentWidget.isContainer) {
                        this._setToContainers(obj, currentWidget);
                        continue;
                }
                switch (currentWidget.widgetType) {
                  case "Checkbox":
                        currentWidget.setValue(currentWidget.inputNode.checked);
                        break;
                  case "DropdownDatePicker":
                        currentWidget.setValue(currentWidget.getValue());
                        break;
                  case "Select":
                        continue;
                        break;
                  case "ComboBox":
                        continue;
                        break;
                  default:
                        break;
                }
        }
}, setValues:function (obj) {
        this._createFormElements();
        this._createRepeaters(obj, this);
        for (var i = 0, len = this.formElements.length; i < len; i++) {
                var element = this.formElements[i];
                if (element.name == "") {
                        continue;
                }
                var namePath = new Array();
                namePath = element.name.split(".");
                var myObj = obj;
                var name = namePath[namePath.length - 1];
                for (var j = 1, len2 = namePath.length; j < len2; ++j) {
                        var p = namePath[j - 1];
                        if (typeof (myObj[p]) == "undefined") {
                                myObj = undefined;
                                break;
                        }
                        myObj = myObj[p];
                }
                if (typeof (myObj) == "undefined") {
                        continue;
                }
                if (typeof (myObj[name]) == "undefined" && this.ignoreNullValues) {
                        continue;
                }
                var type = element.type;
                if (type == "hidden" || type == "text" || type == "textarea" || type == "password") {
                        type = "text";
                }
                switch (type) {
                  case "checkbox":
                        element.checked = false;
                        if (typeof (myObj[name]) == "undefined") {
                                continue;
                        }
                        for (var j = 0, len2 = myObj[name].length; j < len2; ++j) {
                                if (element.value == myObj[name][j]) {
                                        element.checked = true;
                                }
                        }
                        break;
                  case "radio":
                        element.checked = false;
                        if (typeof (myObj[name]) == "undefined") {
                                continue;
                        }
                        if (myObj[name] == element.value) {
                                element.checked = true;
                        }
                        break;
                  case "select-multiple":
                        element.selectedIndex = -1;
                        for (var j = 0, len2 = element.options.length; j < len2; ++j) {
                                for (var k = 0, len3 = myObj[name].length; k < len3; ++k) {
                                        if (element.options[j].value == myObj[name][k]) {
                                                element.options[j].selected = true;
                                        }
                                }
                        }
                        break;
                  case "select-one":
                        element.selectedIndex = "0";
                        for (var j = 0, len2 = element.options.length; j < len2; ++j) {
                                if (element.options[j].value == myObj[name]) {
                                        element.options[j].selected = true;
                                } else {
                                }
                        }
                        break;
                  case "text":
                        var value = "";
                        if (typeof (myObj[name]) != "undefined") {
                                value = myObj[name];
                        }
                        element.value = value;
                        break;
                  default:
                        dojo.debug("Not supported type (" + type + ")");
                        break;
                }
        }
        this._setToContainers(obj, this);
}, getValues:function () {
        this._createFormElements();
        var obj = {};
        for (var i = 0, len = this.formElements.length; i < len; i++) {
                var elm = this.formElements[i];
                var namePath = [];
                if (elm.name == "") {
                        continue;
                }
                namePath = elm.name.split(".");
                var myObj = obj;
                var name = namePath[namePath.length - 1];
                for (var j = 1, len2 = namePath.length; j < len2; ++j) {
                        var nameIndex = null;
                        var p = namePath[j - 1];
                        var nameA = p.split("[");
                        if (nameA.length > 1) {
                                if (typeof (myObj[nameA[0]]) == "undefined") {
                                        myObj[nameA[0]] = [];
                                }
                                nameIndex = parseInt(nameA[1]);
                                if (typeof (myObj[nameA[0]][nameIndex]) == "undefined") {
                                        myObj[nameA[0]][nameIndex] = {};
                                }
                        } else {
                                if (typeof (myObj[nameA[0]]) == "undefined") {
                                        myObj[nameA[0]] = {};
                                }
                        }
                        if (nameA.length == 1) {
                                myObj = myObj[nameA[0]];
                        } else {
                                myObj = myObj[nameA[0]][nameIndex];
                        }
                }
                if ((elm.type != "select-multiple" && elm.type != "checkbox" && elm.type != "radio") || (elm.type == "radio" && elm.checked)) {
                        if (name == name.split("[")[0]) {
                                myObj[name] = elm.value;
                        } else {
                        }
                } else {
                        if (elm.type == "checkbox" && elm.checked) {
                                if (typeof (myObj[name]) == "undefined") {
                                        myObj[name] = [];
                                }
                                myObj[name].push(elm.value);
                        } else {
                                if (elm.type == "select-multiple") {
                                        if (typeof (myObj[name]) == "undefined") {
                                                myObj[name] = [];
                                        }
                                        for (var jdx = 0, len3 = elm.options.length; jdx < len3; ++jdx) {
                                                if (elm.options[jdx].selected) {
                                                        myObj[name].push(elm.options[jdx].value);
                                                }
                                        }
                                }
                        }
                }
                name = undefined;
        }
        return obj;
}});