Subversion Repositories Applications.papyrus

Rev

Rev 1372 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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