Rev 1422 | Blame | Compare with Previous | Last modification | View Log | RSS feed
/*Copyright (c) 2004-2006, The Dojo FoundationAll Rights Reserved.Licensed under the Academic Free License version 2.1 or above OR themodified 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;}});