Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 
 
 
 

378 rader
22 KiB

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  6. <title>Client Side Cookbook &mdash; Documentation</title>
  7. <link rel="stylesheet" href="_static/sphinxdoc.css" type="text/css" />
  8. <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
  9. <script type="text/javascript">
  10. var DOCUMENTATION_OPTIONS = {
  11. URL_ROOT: '',
  12. VERSION: '',
  13. COLLAPSE_MODINDEX: false,
  14. FILE_SUFFIX: '.html',
  15. HAS_SOURCE: true
  16. };
  17. </script>
  18. <script type="text/javascript" src="_static/jquery.js"></script>
  19. <script type="text/javascript" src="_static/doctools.js"></script>
  20. <link rel="top" title="Documentation" href="index.html" />
  21. <link rel="up" title="Writing Scripts" href="writing_scripts.html" />
  22. <link rel="next" title="Report Cookbook" href="report_cookbook.html" />
  23. <link rel="prev" title="Server Side Cookbook" href="server_side_cookbook.html" />
  24. </head>
  25. <body>
  26. <div style="background-color: #FFF; text-align: left; padding: 8px 0px"><img src="_static/banner300910.gif"></div>
  27. <div class="related">
  28. <h3>Navigation</h3>
  29. <ul>
  30. <li class="right" style="margin-right: 10px">
  31. <a href="genindex.html" title="General Index"
  32. accesskey="I">index</a></li>
  33. <li class="right" >
  34. <a href="modindex.html" title="Global Module Index"
  35. accesskey="M">modules</a> |</li>
  36. <li class="right" >
  37. <a href="report_cookbook.html" title="Report Cookbook"
  38. accesskey="N">next</a> |</li>
  39. <li class="right" >
  40. <a href="server_side_cookbook.html" title="Server Side Cookbook"
  41. accesskey="P">previous</a> |</li>
  42. <li><a href="index.html">Documentation</a> &raquo;</li>
  43. <li><a href="build_app.html" >2. Building an Application</a> &raquo;</li>
  44. <li><a href="writing_scripts.html" accesskey="U">Writing Scripts</a> &raquo;</li>
  45. </ul>
  46. </div>
  47. <div class="sphinxsidebar">
  48. <div class="sphinxsidebarwrapper">
  49. <h3><a href="index.html">Table Of Contents</a></h3>
  50. <ul>
  51. <li><a class="reference external" href="">Client Side Cookbook</a><ul>
  52. <li><a class="reference external" href="#fetch-customer-cell-no-and-email-id-based-on-name">Fetch customer cell no and email id based on name</a></li>
  53. <li><a class="reference external" href="#form-events-triggers">Form Events (Triggers)</a></li>
  54. <li><a class="reference external" href="#accessing-updating-field-objects">Accessing / Updating Field Objects</a></li>
  55. <li><a class="reference external" href="#field-events-triggers">Field Events (Triggers)</a></li>
  56. <li><a class="reference external" href="#overloading-link-field-queries">Overloading Link Field queries</a></li>
  57. <li><a class="reference external" href="#setting-contextutal-help-tips">Setting contextutal help (Tips)</a></li>
  58. <li><a class="reference external" href="#custom-ui-using-the-html-field">Custom UI using the HTML Field</a></li>
  59. <li><a class="reference external" href="#useful-api-methods">Useful API Methods</a></li>
  60. <li><a class="reference external" href="#using-templates">Using Templates</a></li>
  61. </ul>
  62. </li>
  63. </ul>
  64. <h4>Previous topic</h4>
  65. <p class="topless"><a href="server_side_cookbook.html"
  66. title="previous chapter">Server Side Cookbook</a></p>
  67. <h4>Next topic</h4>
  68. <p class="topless"><a href="report_cookbook.html"
  69. title="next chapter">Report Cookbook</a></p>
  70. <h3>This Page</h3>
  71. <ul class="this-page-menu">
  72. <li><a href="_sources/client_side_cookbook.txt"
  73. rel="nofollow">Show Source</a></li>
  74. </ul>
  75. <div id="searchbox" style="display: none">
  76. <h3>Quick search</h3>
  77. <form class="search" action="search.html" method="get">
  78. <input type="text" name="q" size="18" />
  79. <input type="submit" value="Go" />
  80. <input type="hidden" name="check_keywords" value="yes" />
  81. <input type="hidden" name="area" value="default" />
  82. </form>
  83. <p class="searchtip" style="font-size: 90%">
  84. Enter search terms or a module, class or function name.
  85. </p>
  86. </div>
  87. <script type="text/javascript">$('#searchbox').show(0);</script>
  88. </div>
  89. </div>
  90. <div class="document">
  91. <div class="documentwrapper">
  92. <div class="bodywrapper">
  93. <div class="body">
  94. <div class="section" id="client-side-cookbook">
  95. <h1>Client Side Cookbook<a class="headerlink" href="#client-side-cookbook" title="Permalink to this headline">¶</a></h1>
  96. <p>Standard Patterns for Client Side Scripts</p>
  97. <div class="section" id="fetch-customer-cell-no-and-email-id-based-on-name">
  98. <h2>Fetch customer cell no and email id based on name<a class="headerlink" href="#fetch-customer-cell-no-and-email-id-based-on-name" title="Permalink to this headline">¶</a></h2>
  99. <p>This can be implemented using the standard fetch pattern:</p>
  100. <div class="highlight-python"><div class="highlight"><pre><span class="n">cur_frm</span><span class="o">.</span><span class="n">add_fetch</span><span class="p">(</span><span class="s">&#39;customer&#39;</span><span class="p">,</span> <span class="s">&#39;email_id&#39;</span><span class="p">,</span> <span class="s">&#39;customer_email&#39;</span><span class="p">);</span>
  101. <span class="n">cur_frm</span><span class="o">.</span><span class="n">add_fetch</span><span class="p">(</span><span class="s">&#39;customer&#39;</span><span class="p">,</span> <span class="s">&#39;cell_no&#39;</span><span class="p">,</span> <span class="s">&#39;customer_cell_no&#39;</span><span class="p">);</span>
  102. </pre></div>
  103. </div>
  104. </div>
  105. <div class="section" id="form-events-triggers">
  106. <h2>Form Events (Triggers)<a class="headerlink" href="#form-events-triggers" title="Permalink to this headline">¶</a></h2>
  107. <p>Standard Form-level Triggers are</p>
  108. <ul class="simple">
  109. <li>refresh - This is called whenever a new record is loaded, or a record is opened, or when a record is saved</li>
  110. <li>onload - This is called the first time a record is loaded</li>
  111. <li>setup - This is called the first time a Form is loaded</li>
  112. </ul>
  113. <p>Some Examples:</p>
  114. <div class="highlight-python"><pre>cur_frm.cscript.refresh = function(doc, dt, dn) {
  115. // set contextual help
  116. cur_frm.clear_tip();
  117. if(doc.city &amp;&amp; !doc.location) cur_frm.set_tip("Its always a good idea to add location to the city");
  118. }</pre>
  119. </div>
  120. </div>
  121. <div class="section" id="accessing-updating-field-objects">
  122. <h2>Accessing / Updating Field Objects<a class="headerlink" href="#accessing-updating-field-objects" title="Permalink to this headline">¶</a></h2>
  123. <p>Every input / field in the Form is an instance of the <a title="_f.Field" class="reference external" href="form_widget.html#_f.Field"><tt class="xref docutils literal"><span class="pre">_f.Field</span></tt></a>. The reference to the field object
  124. can be got using <cite>cur_frm.fields_dict</cite> property. This is a dictionary that contains reference to all field
  125. objects by name or label (in case there is no name).</p>
  126. <p>Properties of the field can be set by setting the <cite>df</cite> dictionary (which represents the <cite>DocField</cite>). Example:</p>
  127. <div class="highlight-python"><pre>var f = cur_frm.fields_dict['first_name']
  128. f.df.hidden = 1;
  129. f.refresh();</pre>
  130. </div>
  131. </div>
  132. <div class="section" id="field-events-triggers">
  133. <h2>Field Events (Triggers)<a class="headerlink" href="#field-events-triggers" title="Permalink to this headline">¶</a></h2>
  134. <p>Field <cite>onchange</cite> triggers can be set by declaring a function in the <cite>cur_frm.cscript</cite> object (namespace). The
  135. function will be called when the onchange event will be triggered. The function will be passed 3 parameters</p>
  136. <ul class="simple">
  137. <li>doc - reference to the current main record</li>
  138. <li>dt - reference to the DocType (this will be different to <cite>doc.doctype</cite> in case of a child (table) trigger)</li>
  139. <li>dn - reference to the DocType (this will be different to <cite>doc.name</cite> in case of a child (table) trigger)</li>
  140. </ul>
  141. <p>Example:</p>
  142. <div class="highlight-python"><pre>cur_frm.cscript.first_name(doc, dt, dn) {
  143. if(doc.first_name.length &lt; 3) {
  144. msgprint("First Name should atleast be 3 characters long.")
  145. }
  146. }</pre>
  147. </div>
  148. </div>
  149. <div class="section" id="overloading-link-field-queries">
  150. <h2>Overloading Link Field queries<a class="headerlink" href="#overloading-link-field-queries" title="Permalink to this headline">¶</a></h2>
  151. <p>If a filter is to be added to validate values that can be set by <cite>Link</cite> fields, it is necessary to
  152. overload the exiting query method. This can be done by setting the <cite>get_query</cite> method on
  153. the <cite>Field</cite> object. Example:</p>
  154. <div class="highlight-python"><pre>// standard field
  155. cur_frm.fields_dict['test_link'].get_query = function(doc,dt,dn) {
  156. return "SELECT tabDocType.name FROM tabDocType WHERE IFNULL(tabDocType.issingle,0)=0 AND tabDocType.name LIKE '%s'"
  157. }
  158. // field in a grid
  159. cur_frm.fields_dict['test_grid'].grid.get_field('my_link').get_query = function(doc,dt,dn) {
  160. return "SELECT tabDocType.name FROM tabDocType WHERE IFNULL(tabDocType.issingle,0)=0 AND tabDocType.name LIKE '%s'"
  161. }</pre>
  162. </div>
  163. </div>
  164. <div class="section" id="setting-contextutal-help-tips">
  165. <h2>Setting contextutal help (Tips)<a class="headerlink" href="#setting-contextutal-help-tips" title="Permalink to this headline">¶</a></h2>
  166. <p>Contextual help can be set using the <a title="_f.Frm.set_tip" class="reference external" href="form_widget.html#_f.Frm.set_tip"><tt class="xref docutils literal"><span class="pre">_f.Frm.set_tip()</span></tt></a>, <a title="_f.Frm.append_tip" class="reference external" href="form_widget.html#_f.Frm.append_tip"><tt class="xref docutils literal"><span class="pre">_f.Frm.append_tip()</span></tt></a>, <a title="_f.Frm.clear_tip" class="reference external" href="form_widget.html#_f.Frm.clear_tip"><tt class="xref docutils literal"><span class="pre">_f.Frm.clear_tip()</span></tt></a>
  167. methods. See Examples:</p>
  168. <div class="highlight-python"><pre>cur_frm.cscript.refresh = function(doc, doctype, docname) {
  169. cur_frm.clear_tip("")
  170. if(doc.status="Draft") {
  171. cur_frm.set_tip("This is a Draft, to publish, please check on 'Published' before saving")
  172. }
  173. if(doc.is_popular="Yes") {
  174. cur_frm.append_tip("This post is popular!")
  175. }
  176. }</pre>
  177. </div>
  178. </div>
  179. <div class="section" id="custom-ui-using-the-html-field">
  180. <h2>Custom UI using the HTML Field<a class="headerlink" href="#custom-ui-using-the-html-field" title="Permalink to this headline">¶</a></h2>
  181. <p>Custom UI Objects can be added to forms by using the HTML field. The object can be added in the form wrapper
  182. and reset with latest values on the <cite>refresh</cite> event. Example:</p>
  183. <div class="highlight-python"><pre>cur_frm.cscript.refresh = function(doc, dt, dn) {
  184. var cs = cur_frm.cscript;
  185. if(!cs.my_object) {
  186. // lets add a listing
  187. cs.my_object = new Listing();
  188. ..
  189. ..
  190. }
  191. cs.my_object.refresh();
  192. }</pre>
  193. </div>
  194. </div>
  195. <div class="section" id="useful-api-methods">
  196. <h2>Useful API Methods<a class="headerlink" href="#useful-api-methods" title="Permalink to this headline">¶</a></h2>
  197. <dl class="function">
  198. <dt id="get_children">
  199. <tt class="descname">get_children</tt><big>(</big><em>child_dt</em>, <em>parent</em>, <em>parentfield</em>, <em>parenttype</em><big>)</big><a class="headerlink" href="#get_children" title="Permalink to this definition">¶</a></dt>
  200. <dd><p>Get list of child records for the given parent record where:</p>
  201. <ul class="simple">
  202. <li>child_dt is the DocType of the child type</li>
  203. <li>parent is ths name of the parent record</li>
  204. <li>parentfield is the fieldname of the child table in the parent DocType</li>
  205. <li>parenttype is the type of the Parent <cite>DocType</cite></li>
  206. </ul>
  207. </dd></dl>
  208. <dl class="function">
  209. <dt id="get_field">
  210. <tt class="descname">get_field</tt><big>(</big><em>doctype</em>, <em>fieldname</em>, <em>docname</em><big>)</big><a class="headerlink" href="#get_field" title="Permalink to this definition">¶</a></dt>
  211. <dd><p>Get the field metadata (<cite>DocField</cite> format) for the given field and given record.</p>
  212. <p><strong>Note:</strong> Separate metadata is maintained for each field of each record. This is because metadata
  213. can be changed by a script only for one record. For example, a field may be hidden in record A but
  214. visible in record B. Hence same metadata cannot be referenced for the two records. Example:</p>
  215. <div class="highlight-python"><div class="highlight"><pre><span class="n">f</span> <span class="o">=</span> <span class="n">get_field</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">doctype</span><span class="p">,</span> <span class="s">&#39;first_name&#39;</span><span class="p">,</span> <span class="n">doc</span><span class="o">.</span><span class="n">name</span><span class="p">);</span>
  216. <span class="n">f</span><span class="o">.</span><span class="n">hidden</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
  217. <span class="n">refresh_field</span><span class="p">(</span><span class="s">&#39;first_name&#39;</span><span class="p">);</span>
  218. </pre></div>
  219. </div>
  220. </dd></dl>
  221. <dl class="function">
  222. <dt id="get_server_fields">
  223. <tt class="descname">get_server_fields</tt><big>(</big><em>method</em>, <em>arg</em>, <em>table_field</em>, <em>doc</em>, <em>dt</em>, <em>dn</em>, <em>allow_edit</em>, <em>call_back</em><big>)</big><a class="headerlink" href="#get_server_fields" title="Permalink to this definition">¶</a></dt>
  224. <dd><p>Update the values in the current record by calling a remote method. Example Client Side:</p>
  225. <div class="highlight-python"><pre>cur_frm.cscript.contact_person = function(doc, cdt, cdn) {
  226. if(doc.contact_person) {
  227. var arg = {'customer':doc.customer_name,'contact_person':doc.contact_person};
  228. get_server_fields('get_contact_details',docstring(arg),'',doc, cdt, cdn, 1);
  229. }
  230. }</pre>
  231. </div>
  232. <p>Server side version:</p>
  233. <div class="highlight-python"><div class="highlight"><pre><span class="k">def</span> <span class="nf">get_contact_details</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arg</span><span class="p">):</span>
  234. <span class="n">arg</span> <span class="o">=</span> <span class="nb">eval</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
  235. <span class="n">contact</span> <span class="o">=</span> <span class="n">sql</span><span class="p">(</span><span class="s">&quot;select contact_no, email_id from `tabContact` where contact_name = &#39;</span><span class="si">%s</span><span class="s">&#39; and customer_name = &#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span><span class="p">(</span><span class="n">arg</span><span class="p">[</span><span class="s">&#39;contact_person&#39;</span><span class="p">],</span><span class="n">arg</span><span class="p">[</span><span class="s">&#39;customer&#39;</span><span class="p">]),</span> <span class="n">as_dict</span> <span class="o">=</span> <span class="mi">1</span><span class="p">)</span>
  236. <span class="n">ret</span> <span class="o">=</span> <span class="p">{</span>
  237. <span class="s">&#39;contact_no&#39;</span> <span class="p">:</span> <span class="n">contact</span> <span class="ow">and</span> <span class="n">contact</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s">&#39;contact_no&#39;</span><span class="p">]</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span><span class="p">,</span>
  238. <span class="s">&#39;email_id&#39;</span> <span class="p">:</span> <span class="n">contact</span> <span class="ow">and</span> <span class="n">contact</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s">&#39;email_id&#39;</span><span class="p">]</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span>
  239. <span class="p">}</span>
  240. <span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="n">ret</span><span class="p">)</span>
  241. </pre></div>
  242. </div>
  243. </dd></dl>
  244. <dl class="function">
  245. <dt>
  246. <tt class="descname">$c_get_values(args, doc, dt, dn, user_callback)</tt></dt>
  247. <dd><p>Similar to get_server_fields, but no serverside required:</p>
  248. <div class="highlight-python"><pre>cur_frm.cscript.item_code = function(doc, dt, dn) {
  249. var d = locals[dt][dn];
  250. $c_get_values({
  251. fields:'description,uom' // fields to be updated
  252. ,table_field:'sales_bom_items' // [optional] if the fields are in a table
  253. ,select:'description,stock_uom' // values to be returned
  254. ,from:'tabItem'
  255. ,where:'name="'+d.item_code+'"'
  256. }, doc, dt, dn);
  257. }</pre>
  258. </div>
  259. </dd></dl>
  260. <dl class="function">
  261. <dt id="set_multiple">
  262. <tt class="descname">set_multiple</tt><big>(</big><em>dt</em>, <em>dn</em>, <em>dict</em>, <em>table_field</em><big>)</big><a class="headerlink" href="#set_multiple" title="Permalink to this definition">¶</a></dt>
  263. <dd>Set mutliple values from a dictionary to a record. In case of Table, pass <cite>tablefield</cite></dd></dl>
  264. <dl class="function">
  265. <dt id="refresh_many">
  266. <tt class="descname">refresh_many</tt><big>(</big><em>flist</em>, <em>dn</em>, <em>table_field</em><big>)</big><a class="headerlink" href="#refresh_many" title="Permalink to this definition">¶</a></dt>
  267. <dd>Refresh multiple fields. In case of Table, pass <cite>tablefield</cite></dd></dl>
  268. <dl class="function">
  269. <dt id="refresh_field">
  270. <tt class="descname">refresh_field</tt><big>(</big><em>n</em>, <em>docname</em>, <em>table_field</em><big>)</big><a class="headerlink" href="#refresh_field" title="Permalink to this definition">¶</a></dt>
  271. <dd>Refresh a field widget. In case of a table record, mention the <cite>table_field</cite> and row ID <cite>docname</cite></dd></dl>
  272. <dl class="function">
  273. <dt id="set_field_tip">
  274. <tt class="descname">set_field_tip</tt><big>(</big><em>fieldname</em>, <em>txt</em><big>)</big><a class="headerlink" href="#set_field_tip" title="Permalink to this definition">¶</a></dt>
  275. <dd>Set <cite>txt</cite> comment on a field</dd></dl>
  276. <dl class="function">
  277. <dt id="set_field_options">
  278. <tt class="descname">set_field_options</tt><big>(</big><em>n</em>, <em>options</em><big>)</big><a class="headerlink" href="#set_field_options" title="Permalink to this definition">¶</a></dt>
  279. <dd>Set <cite>options</cite> of a field and <cite>refresh</cite></dd></dl>
  280. <dl class="function">
  281. <dt id="set_field_permlevel">
  282. <tt class="descname">set_field_permlevel</tt><big>(</big><em>n</em>, <em>permlevel</em><big>)</big><a class="headerlink" href="#set_field_permlevel" title="Permalink to this definition">¶</a></dt>
  283. <dd>Set <cite>permlevel</cite> of a field and <cite>refresh</cite></dd></dl>
  284. <dl class="function">
  285. <dt id="hide_field">
  286. <tt class="descname">hide_field</tt><big>(</big><em>n</em><big>)</big><a class="headerlink" href="#hide_field" title="Permalink to this definition">¶</a></dt>
  287. <dd>Hide a field of fieldname <cite>n</cite> or a list of fields <cite>n</cite></dd></dl>
  288. <dl class="function">
  289. <dt id="unhide_field">
  290. <tt class="descname">unhide_field</tt><big>(</big><em>n</em><big>)</big><a class="headerlink" href="#unhide_field" title="Permalink to this definition">¶</a></dt>
  291. <dd>Unhide a field of fieldname <cite>n</cite> or a list of fields <cite>n</cite></dd></dl>
  292. </div>
  293. <div class="section" id="using-templates">
  294. <h2>Using Templates<a class="headerlink" href="#using-templates" title="Permalink to this headline">¶</a></h2>
  295. <p>The standard Form UI Engine can be overridden using the templates. The <cite>template</cite> is HTML code and can be
  296. set in the <cite>template</cite> field of the DocType. To render fields in the template, Element IDs must be set in a
  297. specific pattern. The pattern is</p>
  298. <ul class="simple">
  299. <li>frm_[DocType]_[fieldname]</li>
  300. </ul>
  301. <p>See Example:</p>
  302. <div class="highlight-python"><pre>&lt;h1&gt;Contact Form&lt;/h1&gt;
  303. &lt;table&gt;
  304. &lt;tr&gt;
  305. &lt;td&gt;First Name&lt;/td&gt;
  306. &lt;td id="frm_Contact_first_name"&gt;&lt;/td&gt;
  307. &lt;/tr&gt;
  308. &lt;tr&gt;
  309. &lt;td&gt;Last Name&lt;/td&gt;
  310. &lt;td id="frm_Contact_last_name"&gt;&lt;/td&gt;
  311. &lt;/tr&gt;
  312. &lt;tr&gt;
  313. &lt;td&gt;Email ID&lt;/td&gt;
  314. &lt;td id="frm_Contact_email"&gt;&lt;/td&gt;
  315. &lt;/tr&gt;
  316. &lt;tr&gt;
  317. &lt;td&gt;&lt;/td&gt;
  318. &lt;td&gt;&lt;button onclick="cur_frm.save('Save', function() { loadpage('Thank You'); })"&gt;Save&lt;/button&gt;&lt;/td&gt;
  319. &lt;/tr&gt;
  320. &lt;/table&gt;</pre>
  321. </div>
  322. </div>
  323. </div>
  324. </div>
  325. </div>
  326. </div>
  327. <div class="clearer"></div>
  328. </div>
  329. <div class="related">
  330. <h3>Navigation</h3>
  331. <ul>
  332. <li class="right" style="margin-right: 10px">
  333. <a href="genindex.html" title="General Index"
  334. >index</a></li>
  335. <li class="right" >
  336. <a href="modindex.html" title="Global Module Index"
  337. >modules</a> |</li>
  338. <li class="right" >
  339. <a href="report_cookbook.html" title="Report Cookbook"
  340. >next</a> |</li>
  341. <li class="right" >
  342. <a href="server_side_cookbook.html" title="Server Side Cookbook"
  343. >previous</a> |</li>
  344. <li><a href="index.html">Documentation</a> &raquo;</li>
  345. <li><a href="build_app.html" >2. Building an Application</a> &raquo;</li>
  346. <li><a href="writing_scripts.html" >Writing Scripts</a> &raquo;</li>
  347. </ul>
  348. </div>
  349. <div class="footer">
  350. &copy; Copyright 2010, Rushabh Mehta.
  351. Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.3.
  352. </div>
  353. </body>
  354. </html>