<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://oer.teacher-network.in/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AFormRestorer.js</id>
	<title>MediaWiki:FormRestorer.js - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://oer.teacher-network.in/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AFormRestorer.js"/>
	<link rel="alternate" type="text/html" href="https://oer.teacher-network.in/index.php?title=MediaWiki:FormRestorer.js&amp;action=history"/>
	<updated>2026-06-11T06:53:04Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.7</generator>
	<entry>
		<id>https://oer.teacher-network.in/index.php?title=MediaWiki:FormRestorer.js&amp;diff=3506&amp;oldid=prev</id>
		<title>Yogi: Created page with &quot;// &lt;source lang=&quot;javascript&quot;&gt; /*   Save form contents in a cookie, and read them from there again.     Author: User:Lupo, January 2008   License: Quadruple licensed GFDL,...&quot;</title>
		<link rel="alternate" type="text/html" href="https://oer.teacher-network.in/index.php?title=MediaWiki:FormRestorer.js&amp;diff=3506&amp;oldid=prev"/>
		<updated>2016-11-21T18:45:48Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;// &amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt; /*   Save form contents in a cookie, and read them from there again.     Author: &lt;a href=&quot;/index.php?title=User:Lupo&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;User:Lupo (page does not exist)&quot;&gt;User:Lupo&lt;/a&gt;, January 2008   License: Quadruple licensed GFDL,...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;// &amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
  Save form contents in a cookie, and read them from there again.&lt;br /&gt;
 &lt;br /&gt;
  Author: [[User:Lupo]], January 2008&lt;br /&gt;
  License: Quadruple licensed GFDL, GPL, LGPL and Creative Commons Attribution 3.0 (CC-BY-3.0)&lt;br /&gt;
 &lt;br /&gt;
  Choose whichever license of these you like best :-)&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
var FormRestorer =&lt;br /&gt;
{&lt;br /&gt;
  getCookie : function (cookie_name)&lt;br /&gt;
  {&lt;br /&gt;
    if (   document.cookie == null || document.cookie.length == 0&lt;br /&gt;
        || cookie_name == null || cookie_name.length == 0)&lt;br /&gt;
      return &amp;quot;&amp;quot;;&lt;br /&gt;
    var start = document.cookie.indexOf (cookie_name + &amp;#039;=&amp;#039;);&lt;br /&gt;
    if (start &amp;lt; 0) return &amp;quot;&amp;quot;;&lt;br /&gt;
    start = start + cookie_name.length + 1;&lt;br /&gt;
    var end = document.cookie.indexOf (&amp;#039;;&amp;#039;, start);&lt;br /&gt;
    if (end &amp;lt; 0)&lt;br /&gt;
      return document.cookie.substring (start);&lt;br /&gt;
    else&lt;br /&gt;
      return document.cookie.substring (start, end);&lt;br /&gt;
  },&lt;br /&gt;
  &lt;br /&gt;
  saveForm : function (cookie_name, form_id, additional_data, cookie_attributes)&lt;br /&gt;
  {&lt;br /&gt;
    var form = document.getElementById (form_id);&lt;br /&gt;
    if (form == null || form.elements == null || form.elements.length == 0) return;&lt;br /&gt;
    var cookie_val = null;&lt;br /&gt;
    var form_val = form_id;&lt;br /&gt;
    if (additional_data) {&lt;br /&gt;
      form_val = form_val + &amp;#039;/=&amp;#039; + additional_data;&lt;br /&gt;
      cookie_val = &amp;quot;&amp;quot;;&lt;br /&gt;
    }    &lt;br /&gt;
    for (var i = 0; i &amp;lt; form.elements.length; i++) {&lt;br /&gt;
      var element = form.elements[i];&lt;br /&gt;
      if (element.nodeName.toLowerCase () == &amp;#039;form&amp;#039;) continue; // Don&amp;#039;t do nested forms.&lt;br /&gt;
      var element_value = null;&lt;br /&gt;
      var single_select = false;&lt;br /&gt;
      switch (element.type) {&lt;br /&gt;
        case &amp;#039;checkbox&amp;#039;:&lt;br /&gt;
        case &amp;#039;radio&amp;#039;:&lt;br /&gt;
          element_value = (element.checked ? &amp;#039;T&amp;#039; : &amp;#039;F&amp;#039;);&lt;br /&gt;
          break;&lt;br /&gt;
        case &amp;#039;select-one&amp;#039;:&lt;br /&gt;
          single_select = true;&lt;br /&gt;
          // Fall-through&lt;br /&gt;
        case &amp;#039;select-multiple&amp;#039;:&lt;br /&gt;
          for (var j = 0; j &amp;lt; element.length; j++) {&lt;br /&gt;
            if (element[j].selected) {&lt;br /&gt;
              if (element_value == null) {&lt;br /&gt;
                element_value = &amp;quot;&amp;quot; + j;&lt;br /&gt;
                if (single_select) break;&lt;br /&gt;
              } else&lt;br /&gt;
                element_value = element_value + &amp;#039;/&amp;#039; + j;              &lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
          break;&lt;br /&gt;
        case &amp;#039;text&amp;#039;:&lt;br /&gt;
        // case &amp;#039;file&amp;#039;: // Is read-only anyway, we cannot set it (security policies)&lt;br /&gt;
        case &amp;#039;password&amp;#039;:&lt;br /&gt;
        case &amp;#039;textarea&amp;#039;:&lt;br /&gt;
          element_value = element.value;&lt;br /&gt;
          if (element_value == null) element_value = &amp;quot;&amp;quot;;&lt;br /&gt;
          break;&lt;br /&gt;
        default:&lt;br /&gt;
          // We don&amp;#039;t do &amp;#039;hidden&amp;#039; inputs. We also don&amp;#039;t do buttons yet. Would we need to?&lt;br /&gt;
          break;&lt;br /&gt;
      } // end switch&lt;br /&gt;
      if (element_value != null) {&lt;br /&gt;
        var this_item = element.id;&lt;br /&gt;
        if (this_item == null || this_item.length == 0) this_item = element.name;&lt;br /&gt;
        this_item = this_item + &amp;#039;/&amp;#039; + element.type + &amp;#039;=&amp;#039; + element_value;&lt;br /&gt;
        if (cookie_val == null || cookie_val.length == 0) &lt;br /&gt;
          cookie_val = this_item;&lt;br /&gt;
        else&lt;br /&gt;
          cookie_val = cookie_val + &amp;#039;\f&amp;#039; + this_item;&lt;br /&gt;
      }&lt;br /&gt;
    } // end for&lt;br /&gt;
    if (cookie_val != null) {&lt;br /&gt;
      document.cookie = cookie_name + &amp;#039;=&amp;#039; + encodeURIComponent (form_val + &amp;#039;\f&amp;#039; + cookie_val)&lt;br /&gt;
                      + (cookie_attributes != null ? cookie_attributes : &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
  &lt;br /&gt;
  readForm : function (cookie_name)&lt;br /&gt;
  {&lt;br /&gt;
    try {&lt;br /&gt;
      var cookie = FormRestorer.getCookie (cookie_name);&lt;br /&gt;
      if (cookie.length &amp;lt; 3) return null;&lt;br /&gt;
      var pairs = decodeURIComponent (cookie).split (&amp;#039;\f&amp;#039;);&lt;br /&gt;
      if (pairs.length &amp;lt; 2) return null;&lt;br /&gt;
      var values = new Array (pairs.length);&lt;br /&gt;
      // First one is the form id&lt;br /&gt;
      for (var i = 0; i &amp;lt; pairs.length; i++) {&lt;br /&gt;
        var j = pairs[i].indexOf (&amp;#039;=&amp;#039;);&lt;br /&gt;
        var k = pairs[i].lastIndexOf (&amp;#039;/&amp;#039;, j);&lt;br /&gt;
        if (j &amp;lt; 0 || k &amp;lt; 0) {&lt;br /&gt;
          values[i] = null; continue;&lt;br /&gt;
        }&lt;br /&gt;
        var element_name  = pairs[i].substring (0, k);&lt;br /&gt;
        var element_type  = pairs[i].substring (k+1, j);&lt;br /&gt;
        var val   = pairs[i].substring (j+1);&lt;br /&gt;
        var value = null;&lt;br /&gt;
        switch (element_type) {&lt;br /&gt;
          case &amp;#039;checkbox&amp;#039;:&lt;br /&gt;
          case &amp;#039;radio&amp;#039;:&lt;br /&gt;
            value = (val == &amp;#039;T&amp;#039;);&lt;br /&gt;
            break;&lt;br /&gt;
          case &amp;#039;select-one&amp;#039;:&lt;br /&gt;
            value = new Number (val);&lt;br /&gt;
            break;&lt;br /&gt;
          case &amp;#039;select-multiple&amp;#039;:&lt;br /&gt;
            {&lt;br /&gt;
              var numbers = val.split (&amp;#039;/&amp;#039;);&lt;br /&gt;
              value = new Array (numbers.length);&lt;br /&gt;
              for (var j = 0; j &amp;lt; numbers.length; j++)&lt;br /&gt;
                value[j] = new Number (numbers[j]);&lt;br /&gt;
            }&lt;br /&gt;
            break;&lt;br /&gt;
          default:&lt;br /&gt;
            value = val;&lt;br /&gt;
            break;&lt;br /&gt;
        } // end switch&lt;br /&gt;
        values[i] = {id : element_name, type : element_type, val : value};&lt;br /&gt;
      } // end for&lt;br /&gt;
      return values;&lt;br /&gt;
    } catch (some_error) {&lt;br /&gt;
      return null;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
} // end FormRestorer&lt;/div&gt;</summary>
		<author><name>Yogi</name></author>
	</entry>
</feed>