Subversion Repositories Applications.papyrus

Rev

Rev 1318 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1318 alexandre_ 1
/*
2
	Copyright (c) 2004-2006, The Dojo Foundation
3
	All Rights Reserved.
4
 
5
	Licensed under the Academic Free License version 2.1 or above OR the
6
	modified BSD license. For more information on Dojo licensing, see:
7
 
8
		http://dojotoolkit.org/community/licensing.shtml
9
*/
10
 
11
dojo.provide("dojo.widget.Form");
12
dojo.require("dojo.widget.*");
13
dojo.require("dojo.widget.HtmlWidget");
14
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) {
15
	for (var key in args) {
16
		if (key == "dojotype") {
17
			continue;
18
		}
19
		var attr = document.createAttribute(key);
20
		attr.nodeValue = args[key];
21
		this.containerNode.setAttributeNode(attr);
22
	}
23
}, _createRepeaters:function (obj, widget) {
24
	for (var i = 0; i < widget.children.length; ++i) {
25
		if (widget.children[i].widgetType == "RepeaterContainer") {
26
			var rIndex = widget.children[i].index;
27
			var rIndexPos = rIndex.indexOf("%{index}");
28
			rIndex = rIndex.substr(0, rIndexPos - 1);
29
			var myObj = this._getObject(obj, rIndex);
30
			if (typeof (myObj) == "object" && myObj.length == 0) {
31
				myObj = new Array();
32
			}
33
			var rowCount = widget.children[i].getRowCount();
34
			for (var j = 0, len = rowCount; j < len; ++j) {
35
				widget.children[i].deleteRow(0);
36
			}
37
			for (var j = 0; j < myObj.length; j++) {
38
				widget.children[i].addRow(false);
39
			}
40
		}
41
		if (widget.children[i].isContainer) {
42
			this._createRepeaters(obj, widget.children[i]);
43
		}
44
	}
45
}, _createFormElements:function () {
46
	if (dojo.render.html.safari) {
47
		this.formElements = [];
48
		var elems = ["INPUT", "SELECT", "TEXTAREA"];
49
		for (var k = 0; k < elems.length; k++) {
50
			var list = this.containerNode.getElementsByTagName(elems[k]);
51
			for (var j = 0, len2 = list.length; j < len2; j++) {
52
				this.formElements.push(list[j]);
53
			}
54
		}
55
	} else {
56
		this.formElements = this.containerNode.elements;
57
	}
58
}, onSubmit:function (e) {
59
	e.preventDefault();
60
}, submit:function () {
61
	this.containerNode.submit();
62
}, _getFormElement:function (name) {
63
	if (dojo.render.html.ie) {
64
		for (var i = 0, len = this.formElements.length; i < len; i++) {
65
			var element = this.formElements[i];
66
			if (element.name == name) {
67
				return element;
68
			}
69
		}
70
	} else {
71
		var elem = this.formElements[name];
72
		if (typeof (elem) != "undefined") {
73
			return elem;
74
		}
75
	}
76
	return null;
77
}, _getObject:function (obj, searchString) {
78
	var namePath = [];
79
	namePath = searchString.split(".");
80
	var myObj = obj;
81
	var name = namePath[namePath.length - 1];
82
	for (var j = 0, len = namePath.length; j < len; ++j) {
83
		var p = namePath[j];
84
		if (typeof (myObj[p]) == "undefined") {
85
			myObj[p] = {};
86
		}
87
		myObj = myObj[p];
88
	}
89
	return myObj;
90
}, _setToContainers:function (obj, widget) {
91
	for (var i = 0, len = widget.children.length; i < len; ++i) {
92
		var currentWidget = widget.children[i];
93
		if (currentWidget.widgetType == "Repeater") {
94
			for (var j = 0, len = currentWidget.getRowCount(); j < len; ++j) {
95
				currentWidget._initRow(j);
96
			}
97
		}
98
		if (currentWidget.isContainer) {
99
			this._setToContainers(obj, currentWidget);
100
			continue;
101
		}
102
		switch (currentWidget.widgetType) {
103
		  case "Checkbox":
104
			currentWidget.setValue(currentWidget.inputNode.checked);
105
			break;
106
		  case "DropdownDatePicker":
107
			currentWidget.setValue(currentWidget.getValue());
108
			break;
109
		  case "Select":
110
			continue;
111
			break;
112
		  case "ComboBox":
113
			continue;
114
			break;
115
		  default:
116
			break;
117
		}
118
	}
119
}, setValues:function (obj) {
120
	this._createFormElements();
121
	this._createRepeaters(obj, this);
122
	for (var i = 0, len = this.formElements.length; i < len; i++) {
123
		var element = this.formElements[i];
124
		if (element.name == "") {
125
			continue;
126
		}
127
		var namePath = new Array();
128
		namePath = element.name.split(".");
129
		var myObj = obj;
130
		var name = namePath[namePath.length - 1];
131
		for (var j = 1, len2 = namePath.length; j < len2; ++j) {
132
			var p = namePath[j - 1];
133
			if (typeof (myObj[p]) == "undefined") {
134
				myObj = undefined;
135
				break;
136
			}
137
			myObj = myObj[p];
138
		}
139
		if (typeof (myObj) == "undefined") {
140
			continue;
141
		}
142
		if (typeof (myObj[name]) == "undefined" && this.ignoreNullValues) {
143
			continue;
144
		}
145
		var type = element.type;
146
		if (type == "hidden" || type == "text" || type == "textarea" || type == "password") {
147
			type = "text";
148
		}
149
		switch (type) {
150
		  case "checkbox":
151
			element.checked = false;
152
			if (typeof (myObj[name]) == "undefined") {
153
				continue;
154
			}
155
			for (var j = 0, len2 = myObj[name].length; j < len2; ++j) {
156
				if (element.value == myObj[name][j]) {
157
					element.checked = true;
158
				}
159
			}
160
			break;
161
		  case "radio":
162
			element.checked = false;
163
			if (typeof (myObj[name]) == "undefined") {
164
				continue;
165
			}
166
			if (myObj[name] == element.value) {
167
				element.checked = true;
168
			}
169
			break;
170
		  case "select-multiple":
171
			element.selectedIndex = -1;
172
			for (var j = 0, len2 = element.options.length; j < len2; ++j) {
173
				for (var k = 0, len3 = myObj[name].length; k < len3; ++k) {
174
					if (element.options[j].value == myObj[name][k]) {
175
						element.options[j].selected = true;
176
					}
177
				}
178
			}
179
			break;
180
		  case "select-one":
181
			element.selectedIndex = "0";
182
			for (var j = 0, len2 = element.options.length; j < len2; ++j) {
183
				if (element.options[j].value == myObj[name]) {
184
					element.options[j].selected = true;
185
				} else {
186
				}
187
			}
188
			break;
189
		  case "text":
190
			var value = "";
191
			if (typeof (myObj[name]) != "undefined") {
192
				value = myObj[name];
193
			}
194
			element.value = value;
195
			break;
196
		  default:
197
			dojo.debug("Not supported type (" + type + ")");
198
			break;
199
		}
200
	}
201
	this._setToContainers(obj, this);
202
}, getValues:function () {
203
	this._createFormElements();
204
	var obj = {};
205
	for (var i = 0, len = this.formElements.length; i < len; i++) {
206
		var elm = this.formElements[i];
207
		var namePath = [];
208
		if (elm.name == "") {
209
			continue;
210
		}
211
		namePath = elm.name.split(".");
212
		var myObj = obj;
213
		var name = namePath[namePath.length - 1];
214
		for (var j = 1, len2 = namePath.length; j < len2; ++j) {
215
			var nameIndex = null;
216
			var p = namePath[j - 1];
217
			var nameA = p.split("[");
218
			if (nameA.length > 1) {
219
				if (typeof (myObj[nameA[0]]) == "undefined") {
220
					myObj[nameA[0]] = [];
221
				}
222
				nameIndex = parseInt(nameA[1]);
223
				if (typeof (myObj[nameA[0]][nameIndex]) == "undefined") {
224
					myObj[nameA[0]][nameIndex] = {};
225
				}
226
			} else {
227
				if (typeof (myObj[nameA[0]]) == "undefined") {
228
					myObj[nameA[0]] = {};
229
				}
230
			}
231
			if (nameA.length == 1) {
232
				myObj = myObj[nameA[0]];
233
			} else {
234
				myObj = myObj[nameA[0]][nameIndex];
235
			}
236
		}
237
		if ((elm.type != "select-multiple" && elm.type != "checkbox" && elm.type != "radio") || (elm.type == "radio" && elm.checked)) {
238
			if (name == name.split("[")[0]) {
239
				myObj[name] = elm.value;
240
			} else {
241
			}
242
		} else {
243
			if (elm.type == "checkbox" && elm.checked) {
244
				if (typeof (myObj[name]) == "undefined") {
245
					myObj[name] = [];
246
				}
247
				myObj[name].push(elm.value);
248
			} else {
249
				if (elm.type == "select-multiple") {
250
					if (typeof (myObj[name]) == "undefined") {
251
						myObj[name] = [];
252
					}
253
					for (var jdx = 0, len3 = elm.options.length; jdx < len3; ++jdx) {
254
						if (elm.options[jdx].selected) {
255
							myObj[name].push(elm.options[jdx].value);
256
						}
257
					}
258
				}
259
			}
260
		}
261
		name = undefined;
262
	}
263
	return obj;
264
}});
265