Built motion from commit 67e5df37.|2.0.65
[motion2.git] / apidoc / utils / send_sample_request.js
1 define([\r
2   'jquery',\r
3   'lodash'\r
4 ], function($, _) {\r
5 \r
6   var initDynamic = function() {\r
7       // Button send\r
8       $(".sample-request-send").off("click");\r
9       $(".sample-request-send").on("click", function(e) {\r
10           e.preventDefault();\r
11           var $root = $(this).parents("article");\r
12           var group = $root.data("group");\r
13           var name = $root.data("name");\r
14           var version = $root.data("version");\r
15           sendSampleRequest(group, name, version, $(this).data("sample-request-type"));\r
16       });\r
17 \r
18       // Button clear\r
19       $(".sample-request-clear").off("click");\r
20       $(".sample-request-clear").on("click", function(e) {\r
21           e.preventDefault();\r
22           var $root = $(this).parents("article");\r
23           var group = $root.data("group");\r
24           var name = $root.data("name");\r
25           var version = $root.data("version");\r
26           clearSampleRequest(group, name, version);\r
27       });\r
28   }; // initDynamic\r
29 \r
30   function sendSampleRequest(group, name, version, type)\r
31   {\r
32       var $root = $('article[data-group="' + group + '"][data-name="' + name + '"][data-version="' + version + '"]');\r
33 \r
34       // Optional header\r
35       var header = {};\r
36       $root.find(".sample-request-header:checked").each(function(i, element) {\r
37           var group = $(element).data("sample-request-header-group-id");\r
38           $root.find("[data-sample-request-header-group=\"" + group + "\"]").each(function(i, element) {\r
39             var key = $(element).data("sample-request-header-name");\r
40             var value = element.value;\r
41             if ( ! element.optional && element.defaultValue !== '') {\r
42                 value = element.defaultValue;\r
43             }\r
44             header[key] = value;\r
45           });\r
46       });\r
47 \r
48       // create JSON dictionary of parameters\r
49       var param = {};\r
50       var paramType = {};\r
51       $root.find(".sample-request-param:checked").each(function(i, element) {\r
52           var group = $(element).data("sample-request-param-group-id");\r
53           $root.find("[data-sample-request-param-group=\"" + group + "\"]").not(function(){\r
54             return $(this).val() == "" && $(this).is("[data-sample-request-param-optional='true']");\r
55           }).each(function(i, element) {\r
56             var key = $(element).data("sample-request-param-name");\r
57             var value = element.value;\r
58             if ( ! element.optional && element.defaultValue !== '') {\r
59                 value = element.defaultValue;\r
60             }\r
61             param[key] = value;\r
62             paramType[key] = $(element).next().text();\r
63           });\r
64       });\r
65 \r
66       // grab user-inputted URL\r
67       var url = $root.find(".sample-request-url").val();\r
68 \r
69       // Insert url parameter\r
70       var pattern = pathToRegexp(url, null);\r
71       var matches = pattern.exec(url);\r
72       for (var i = 1; i < matches.length; i++) {\r
73           var key = matches[i].substr(1);\r
74           if (param[key] !== undefined) {\r
75               url = url.replace(matches[i], encodeURIComponent(param[key]));\r
76 \r
77               // remove URL parameters from list\r
78               delete param[key];\r
79           }\r
80       } // for\r
81 \r
82       $root.find(".sample-request-response").fadeTo(250, 1);\r
83       $root.find(".sample-request-response-json").html("Loading...");\r
84       refreshScrollSpy();\r
85 \r
86       _.each( param, function( val, key ) {\r
87           var t = paramType[ key ].toLowerCase();\r
88           if ( t === 'object' || t === 'array' ) {\r
89               try {\r
90                   param[ key ] = JSON.parse( val );\r
91               } catch (e) {\r
92               }\r
93           }\r
94       });\r
95 \r
96       // send AJAX request, catch success or error callback\r
97       var ajaxRequest = {\r
98           url        : url,\r
99           headers    : header,\r
100           data       : param,\r
101           type       : type.toUpperCase(),\r
102           success    : displaySuccess,\r
103           error      : displayError\r
104       };\r
105 \r
106       $.ajax(ajaxRequest);\r
107 \r
108 \r
109       function displaySuccess(data, status, jqXHR) {\r
110           var jsonResponse;\r
111           try {\r
112               jsonResponse = JSON.parse(jqXHR.responseText);\r
113               jsonResponse = JSON.stringify(jsonResponse, null, 4);\r
114           } catch (e) {\r
115               jsonResponse = data;\r
116           }\r
117           $root.find(".sample-request-response-json").html(jsonResponse);\r
118           refreshScrollSpy();\r
119       };\r
120 \r
121       function displayError(jqXHR, textStatus, error) {\r
122           var message = "Error " + jqXHR.status + ": " + error;\r
123           var jsonResponse;\r
124           try {\r
125               jsonResponse = JSON.parse(jqXHR.responseText);\r
126               jsonResponse = JSON.stringify(jsonResponse, null, 4);\r
127           } catch (e) {\r
128               jsonResponse = escape(jqXHR.responseText);\r
129           }\r
130 \r
131           if (jsonResponse)\r
132               message += "<br>" + jsonResponse;\r
133 \r
134           // flicker on previous error to make clear that there is a new response\r
135           if($root.find(".sample-request-response").is(":visible"))\r
136               $root.find(".sample-request-response").fadeTo(1, 0.1);\r
137 \r
138           $root.find(".sample-request-response").fadeTo(250, 1);\r
139           $root.find(".sample-request-response-json").html(message);\r
140           refreshScrollSpy();\r
141       };\r
142   }\r
143 \r
144   function clearSampleRequest(group, name, version)\r
145   {\r
146       var $root = $('article[data-group="' + group + '"][data-name="' + name + '"][data-version="' + version + '"]');\r
147 \r
148       // hide sample response\r
149       $root.find(".sample-request-response-json").html("");\r
150       $root.find(".sample-request-response").hide();\r
151 \r
152       // reset value of parameters\r
153       $root.find(".sample-request-param").each(function(i, element) {\r
154           element.value = "";\r
155       });\r
156 \r
157       // restore default URL\r
158       var $urlElement = $root.find(".sample-request-url");\r
159       $urlElement.val($urlElement.prop("defaultValue"));\r
160 \r
161       refreshScrollSpy();\r
162   }\r
163 \r
164   function refreshScrollSpy()\r
165   {\r
166       $('[data-spy="scroll"]').each(function () {\r
167           $(this).scrollspy("refresh");\r
168       });\r
169   }\r
170 \r
171   function escapeHtml(str) {\r
172       var div = document.createElement("div");\r
173       div.appendChild(document.createTextNode(str));\r
174       return div.innerHTML;\r
175   }\r
176 \r
177   /**\r
178    * Exports.\r
179    */\r
180   return {\r
181       initDynamic: initDynamic\r
182   };\r
183 \r
184 });\r