]> git.wh0rd.org Git - tt-rss.git/blob - lib/dojo/dom-form.js.uncompressed.js
upgrade dojo to 1.8.3 (refs #570)
[tt-rss.git] / lib / dojo / dom-form.js.uncompressed.js
1 define("dojo/dom-form", ["./_base/lang", "./dom", "./io-query", "./json"], function(lang, dom, ioq, json){
2         // module:
3         //              dojo/dom-form
4
5     function setValue(/*Object*/ obj, /*String*/ name, /*String*/ value){
6         // summary:
7         //              For the named property in object, set the value. If a value
8         //              already exists and it is a string, convert the value to be an
9         //              array of values.
10
11         // Skip it if there is no value
12         if(value === null){
13             return;
14         }
15
16         var val = obj[name];
17         if(typeof val == "string"){ // inline'd type check
18             obj[name] = [val, value];
19         }else if(lang.isArray(val)){
20             val.push(value);
21         }else{
22             obj[name] = value;
23         }
24     }
25
26         var exclude = "file|submit|image|reset|button";
27
28         var form = {
29                 // summary:
30                 //              This module defines form-processing functions.
31
32                 fieldToObject: function fieldToObject(/*DOMNode|String*/ inputNode){
33                         // summary:
34                         //              Serialize a form field to a JavaScript object.
35                         // description:
36                         //              Returns the value encoded in a form field as
37                         //              as a string or an array of strings. Disabled form elements
38                         //              and unchecked radio and checkboxes are skipped. Multi-select
39                         //              elements are returned as an array of string values.
40                         // inputNode: DOMNode|String
41                         // returns: Object
42
43                         var ret = null;
44                         inputNode = dom.byId(inputNode);
45                         if(inputNode){
46                                 var _in = inputNode.name, type = (inputNode.type || "").toLowerCase();
47                                 if(_in && type && !inputNode.disabled){
48                                         if(type == "radio" || type == "checkbox"){
49                                                 if(inputNode.checked){
50                                                         ret = inputNode.value;
51                                                 }
52                                         }else if(inputNode.multiple){
53                                                 ret = [];
54                                                 var nodes = [inputNode.firstChild];
55                                                 while(nodes.length){
56                                                         for(var node = nodes.pop(); node; node = node.nextSibling){
57                                                                 if(node.nodeType == 1 && node.tagName.toLowerCase() == "option"){
58                                                                         if(node.selected){
59                                                                                 ret.push(node.value);
60                                                                         }
61                                                                 }else{
62                                                                         if(node.nextSibling){
63                                                                                 nodes.push(node.nextSibling);
64                                                                         }
65                                                                         if(node.firstChild){
66                                                                                 nodes.push(node.firstChild);
67                                                                         }
68                                                                         break;
69                                                                 }
70                                                         }
71                                                 }
72                                         }else{
73                                                 ret = inputNode.value;
74                                         }
75                                 }
76                         }
77                         return ret; // Object
78                 },
79
80                 toObject: function formToObject(/*DOMNode|String*/ formNode){
81                         // summary:
82                         //              Serialize a form node to a JavaScript object.
83                         // description:
84                         //              Returns the values encoded in an HTML form as
85                         //              string properties in an object which it then returns. Disabled form
86                         //              elements, buttons, and other non-value form elements are skipped.
87                         //              Multi-select elements are returned as an array of string values.
88                         // formNode: DOMNode|String
89                         // example:
90                         //              This form:
91                         //              |       <form id="test_form">
92                         //              |               <input type="text" name="blah" value="blah">
93                         //              |               <input type="text" name="no_value" value="blah" disabled>
94                         //              |               <input type="button" name="no_value2" value="blah">
95                         //              |               <select type="select" multiple name="multi" size="5">
96                         //              |                       <option value="blah">blah</option>
97                         //              |                       <option value="thud" selected>thud</option>
98                         //              |                       <option value="thonk" selected>thonk</option>
99                         //              |               </select>
100                         //              |       </form>
101                         //
102                         //              yields this object structure as the result of a call to
103                         //              formToObject():
104                         //
105                         //              |       {
106                         //              |               blah: "blah",
107                         //              |               multi: [
108                         //              |                       "thud",
109                         //              |                       "thonk"
110                         //              |               ]
111                         //              |       };
112
113                         var ret = {}, elems = dom.byId(formNode).elements;
114                         for(var i = 0, l = elems.length; i < l; ++i){
115                                 var item = elems[i], _in = item.name, type = (item.type || "").toLowerCase();
116                                 if(_in && type && exclude.indexOf(type) < 0 && !item.disabled){
117                                         setValue(ret, _in, form.fieldToObject(item));
118                                         if(type == "image"){
119                                                 ret[_in + ".x"] = ret[_in + ".y"] = ret[_in].x = ret[_in].y = 0;
120                                         }
121                                 }
122                         }
123                         return ret; // Object
124                 },
125
126                 toQuery: function formToQuery(/*DOMNode|String*/ formNode){
127                         // summary:
128                         //              Returns a URL-encoded string representing the form passed as either a
129                         //              node or string ID identifying the form to serialize
130                         // formNode: DOMNode|String
131                         // returns: String
132
133                         return ioq.objectToQuery(form.toObject(formNode)); // String
134                 },
135
136                 toJson: function formToJson(/*DOMNode|String*/ formNode, /*Boolean?*/ prettyPrint){
137                         // summary:
138                         //              Create a serialized JSON string from a form node or string
139                         //              ID identifying the form to serialize
140                         // formNode: DOMNode|String
141                         // prettyPrint: Boolean?
142                         // returns: String
143
144                         return json.stringify(form.toObject(formNode), null, prettyPrint ? 4 : 0); // String
145                 }
146         };
147
148     return form;
149 });