
  
  

  


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="chrome=1">
        <title>src/domcached-0.1-prototype.js at master from andris9's DOMCached - GitHub</title>
    <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub" />
    <link rel="fluid-icon" href="http://github.com/fluidicon.png" title="GitHub" />

    <link href="http://assets3.github.com/stylesheets/bundle_common.css?f9c50ccd49855b8314bb5e64f172c40d0123688e" media="screen" rel="stylesheet" type="text/css" />
<link href="http://assets2.github.com/stylesheets/bundle_github.css?f9c50ccd49855b8314bb5e64f172c40d0123688e" media="screen" rel="stylesheet" type="text/css" />

    <script type="text/javascript" charset="utf-8">
      var GitHub = {}
      var github_user = null
      
    </script>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script>
    <script src="http://assets1.github.com/javascripts/bundle_common.js?f9c50ccd49855b8314bb5e64f172c40d0123688e" type="text/javascript"></script>
<script src="http://assets2.github.com/javascripts/bundle_github.js?f9c50ccd49855b8314bb5e64f172c40d0123688e" type="text/javascript"></script>

        <script type="text/javascript" charset="utf-8">
      GitHub.spy({
        repo: "andris9/DOMCached"
      })
    </script>

    
  
    
  

  <link href="http://github.com/andris9/DOMCached/commits/master.atom" rel="alternate" title="Recent Commits to DOMCached:master" type="application/atom+xml" />

    <meta name="description" content="DOMCached is a memcached like JavaScript caching system for browser side data caching" />
    <script type="text/javascript">
      GitHub.nameWithOwner = GitHub.nameWithOwner || "andris9/DOMCached";
      GitHub.currentRef = "master";
    </script>
  

            <script type="text/javascript">
      var _gaq = _gaq || [];
      _gaq.push(['_setAccount', 'UA-3769691-2']);
      _gaq.push(['_trackPageview']);
      (function() {
        var ga = document.createElement('script');
        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
        ga.setAttribute('async', 'true');
        document.documentElement.firstChild.appendChild(ga);
      })();
    </script>

  </head>

  

  <body>
    

    

    <div class="subnavd" id="main">
      <div id="header" class="pageheaded">
        <div class="site">
          <div class="logo">
            <a href="http://github.com"><img src="/images/modules/header/logov3.png" alt="github" /></a>
          </div>
          
          <div class="topsearch">
  
    <form action="/search" id="top_search_form" method="get">
      <a href="/search" class="advanced-search tooltipped downwards" title="Advanced Search">Advanced Search</a>
      <input type="search" class="search my_repos_autocompleter" name="q" results="5" placeholder="Search&hellip;" /> <input type="submit" value="Search" class="button" />
      <input type="hidden" name="type" value="Everything" />
      <input type="hidden" name="repo" value="" />
      <input type="hidden" name="langOverride" value="" />
      <input type="hidden" name="start_value" value="1" />
    </form>
  
  
    <ul class="nav logged_out">
      
        <li><a href="http://github.com">Home</a></li>
        <li class="pricing"><a href="/plans">Pricing and Signup</a></li>
        <li><a href="http://github.com/explore">Explore GitHub</a></li>
        
        <li><a href="/blog">Blog</a></li>
      
      <li><a href="https://github.com/login">Login</a></li>
    </ul>
  
</div>

        </div>
      </div>

      
      
        
    <div class="site">
      <div class="pagehead repohead vis-public   ">
        <h1>
          <a href="/andris9">andris9</a> / <strong><a href="http://github.com/andris9/DOMCached">DOMCached</a></strong>
          
          
        </h1>

        
    <ul class="actions">
      
      
        <li class="for-owner" style="display:none"><a href="https://github.com/andris9/DOMCached/edit" class="minibutton btn-admin "><span><span class="icon"></span>Admin</span></a></li>
        <li>
          <a href="/andris9/DOMCached/toggle_watch" class="minibutton btn-watch " id="watch_button" style="display:none"><span><span class="icon"></span>Watch</span></a>
          <a href="/andris9/DOMCached/toggle_watch" class="minibutton btn-watch " id="unwatch_button" style="display:none"><span><span class="icon"></span>Unwatch</span></a>
        </li>
        
          <li class="for-notforked" style="display:none"><a href="/andris9/DOMCached/fork" class="minibutton btn-fork " id="fork_button" onclick="var f = document.createElement('form'); f.style.display = 'none'; this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href;var s = document.createElement('input'); s.setAttribute('type', 'hidden'); s.setAttribute('name', 'authenticity_token'); s.setAttribute('value', 'cf8ed03a5e838e230b73d73ce25a2811a9cf1e60'); f.appendChild(s);f.submit();return false;"><span><span class="icon"></span>Fork</span></a></li>
          <li class="for-hasfork" style="display:none"><a href="#" class="minibutton btn-fork " id="your_fork_button"><span><span class="icon"></span>Your Fork</span></a></li>
          <li id="pull_request_item" style="display:none"><a href="/andris9/DOMCached/pull_request/" class="minibutton btn-pull-request "><span><span class="icon"></span>Pull Request</span></a></li>
          <li><a href="#" class="minibutton btn-download " id="download_button"><span><span class="icon"></span>Download Source</span></a></li>
        
      
      <li class="repostats">
        <ul class="repo-stats">
          <li class="watchers"><a href="/andris9/DOMCached/watchers" title="Watchers" class="tooltipped downwards">14</a></li>
          <li class="forks"><a href="/andris9/DOMCached/network" title="Forks" class="tooltipped downwards">2</a></li>
        </ul>
      </li>
    </ul>


        <ul class="tabs">
  <li><a href="http://github.com/andris9/DOMCached/tree/master" class="selected" highlight="repo_source">Source</a></li>
  <li><a href="http://github.com/andris9/DOMCached/commits/master" highlight="repo_commits">Commits</a></li>

  
  <li><a href="/andris9/DOMCached/network" highlight="repo_network">Network (2)</a></li>

  

  
    
    <li><a href="/andris9/DOMCached/issues" highlight="issues">Issues (0)</a></li>
  

  
    
    <li><a href="/andris9/DOMCached/downloads">Downloads (0)</a></li>
  

  
    
    <li><a href="http://wiki.github.com/andris9/DOMCached/">Wiki (1)</a></li>
  

  <li><a href="/andris9/DOMCached/graphs" highlight="repo_graphs">Graphs</a></li>

  <li class="contextswitch nochoices">
    <span class="toggle leftwards" >
      <em>Branch:</em>
      <code>master</code>
    </span>
  </li>
</ul>

<div style="display:none" id="pl-description"><p><em class="placeholder">click here to add a description</em></p></div>
<div style="display:none" id="pl-homepage"><p><em class="placeholder">click here to add a homepage</em></p></div>

<div class="subnav-bar">
  
  <ul>
    <li>
      <a href="#" class="dropdown">Switch Branches (1)</a>
      <ul>
        
          
            <li><strong>master &#x2713;</strong></li>
            
      </ul>
    </li>
    <li>
      <a href="#" class="dropdown defunct">Switch Tags (0)</a>
      
    </li>
    <li>
    
    <a href="/andris9/DOMCached/branches" class="manage">Branch List</a>
    
    </li>
  </ul>
</div>









        
    <div id="repo_details" class="metabox clearfix ">
      <div id="repo_details_loader" class="metabox-loader" style="display:none">Sending Request&hellip;</div>

      
        <a href="#pledgie_box" rel="facebox" title="Brought to you by pledgie.com" class="pledgie pledgie-button for-owner tooltipped" id="activate_pledgie_button" style="display:none"><span>Enable Donations</span></a>
      
      

      <div id="pledgie_box" style="display:none">
        <h2>Pledgie Donations</h2>
        <form action="/andris9/DOMCached/edit/donate" method="post"><div style="margin:0;padding:0"><input name="authenticity_token" type="hidden" value="cf8ed03a5e838e230b73d73ce25a2811a9cf1e60" /></div>
          <dl class="form miniform">
            <dt><label>Paypal Email</label></dt>
            <dd><input type="text" id="paypal" name="paypal" /></dd>
          </dl>
          <div class="form-actions">
            
            <button type="submit" class="minibutton"><span>Activate Donations</span></button>
          </div>
        </form>
        <div class="rule"></div>
        Once activated, we'll place the following badge in your repository's detail box:
        <div style="text-align:center">
          <img alt="Pledgie_example" src="http://assets2.github.com/images/modules/pagehead/pledgie_example.jpg?f9c50ccd49855b8314bb5e64f172c40d0123688e" />
        </div>
        This service is courtesy of <a href="http://pledgie.com">Pledgie</a>.
      </div>

      <div id="repository_description" rel="repository_description_edit">
        
          <p>DOMCached is a memcached like JavaScript caching system for browser side data caching
            <span id="read_more" style="display:none">&mdash; <a href="#readme">Read more</a></span>
          </p>
        
      </div>
      <div id="repository_description_edit" style="display:none;" class="inline-edit">
        <form action="/andris9/DOMCached/edit/update" method="post"><div style="margin:0;padding:0"><input name="authenticity_token" type="hidden" value="cf8ed03a5e838e230b73d73ce25a2811a9cf1e60" /></div>
          <input type="hidden" name="field" value="repository_description">
          <input type="text" class="textfield" name="value" value="DOMCached is a memcached like JavaScript caching system for browser side data caching">
          <div class="form-actions">
            <button class="minibutton"><span>Save</span></button> &nbsp; <a href="#" class="cancel">Cancel</a>
          </div>
        </form>
      </div>

      
      <div class="repository-homepage" id="repository_homepage" rel="repository_homepage_edit">
        <p><a href="http://www.domcached.com" rel="nofollow">http://www.domcached.com</a></p>
      </div>
      <div id="repository_homepage_edit" style="display:none;" class="inline-edit">
        <form action="/andris9/DOMCached/edit/update" method="post"><div style="margin:0;padding:0"><input name="authenticity_token" type="hidden" value="cf8ed03a5e838e230b73d73ce25a2811a9cf1e60" /></div>
          <input type="hidden" name="field" value="repository_homepage">
          <input type="text" class="textfield" name="value" value="http://www.domcached.com">
          <div class="form-actions">
            <button class="minibutton"><span>Save</span></button> &nbsp; <a href="#" class="cancel">Cancel</a>
          </div>
        </form>
      </div>

      <div class="rule "></div>

      <div id="url_box" class="url-box">
        <ul class="clone-urls">
          <li id="private_clone_url" style="display:none"><a href="git@github.com:andris9/DOMCached.git" data-permissions="Read+Write">Private</a></li>
          
            <li id="public_clone_url"><a href="git://github.com/andris9/DOMCached.git" data-permissions="Read-Only">Read-Only</a></li>
            <li id="http_clone_url"><a href="http://github.com/andris9/DOMCached.git" data-permissions="Read-Only">HTTP Read-Only</a></li>
          
        </ul>
        <input type="text" spellcheck="false" id="url_field" class="url-field" />
              <span style="display:none" id="url_box_clippy"></span>
      <span id="clippy_tooltip_url_box_clippy" class="clippy-tooltip tooltipped" title="copy to clipboard">
      <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
              width="14"
              height="14"
              class="clippy"
              id="clippy" >
      <param name="movie" value="/flash/clippy.swf?v5"/>
      <param name="allowScriptAccess" value="always" />
      <param name="quality" value="high" />
      <param name="scale" value="noscale" />
      <param NAME="FlashVars" value="id=url_box_clippy&amp;copied=&amp;copyto=">
      <param name="bgcolor" value="#FFFFFF">
      <param name="wmode" value="opaque">
      <embed src="/flash/clippy.swf?v5"
             width="14"
             height="14"
             name="clippy"
             quality="high"
             allowScriptAccess="always"
             type="application/x-shockwave-flash"
             pluginspage="http://www.macromedia.com/go/getflashplayer"
             FlashVars="id=url_box_clippy&amp;copied=&amp;copyto="
             bgcolor="#FFFFFF"
             wmode="opaque"
      />
      </object>
      </span>

        <p id="url_description">This URL has <strong>Read+Write</strong> access</p>
      </div>
    </div>


      </div><!-- /.pagehead -->

      









<script type="text/javascript">
  GitHub.currentCommitRef = "master"
  GitHub.currentRepoOwner = "andris9"
  GitHub.currentRepo = "DOMCached"
  GitHub.downloadRepo = '/andris9/DOMCached/archives/master'
  

  
</script>










  <div id="commit">
    <div class="group">
        
  <div class="envelope commit">
    <div class="human">
      
        <div class="message"><pre><a href="/andris9/DOMCached/commit/2db3a9f7aa2147cc6b8bbe85963367ec7b750769">fixed a bug with IE6</a> </pre></div>
      

      <div class="actor">
        <div class="gravatar">
          
          <img alt="" height="30" src="http://www.gravatar.com/avatar/be4ab931ec593eb8fd598f471456e13c?s=30&amp;d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-30.png" width="30" />
        </div>
        <div class="name"><a href="/andris9">andris9</a> <span>(author)</span></div>
        <div class="date">
          <abbr class="relatize" title="2009-10-29 06:52:37">Thu Oct 29 06:52:37 -0700 2009</abbr>
        </div>
      </div>

      

    </div>
    <div class="machine">
      <span>c</span>ommit&nbsp;&nbsp;<a href="/andris9/DOMCached/commit/2db3a9f7aa2147cc6b8bbe85963367ec7b750769" hotkey="c">2db3a9f7aa2147cc6b8bbe85963367ec7b750769</a><br />
      <span>t</span>ree&nbsp;&nbsp;&nbsp;&nbsp;<a href="/andris9/DOMCached/tree/2db3a9f7aa2147cc6b8bbe85963367ec7b750769" hotkey="t">9625e3ea3ad85d4a1302a5a7da06b5a84609d774</a><br />
      
        <span>p</span>arent&nbsp;
        
        <a href="/andris9/DOMCached/tree/396a09142ed2bfc2277b89f67f89c959d9d96d6e" hotkey="p">396a09142ed2bfc2277b89f67f89c959d9d96d6e</a>
      

    </div>
  </div>

    </div>
  </div>



  
    <div id="path">
      <b><a href="/andris9/DOMCached/tree/master">DOMCached</a></b> / <a href="/andris9/DOMCached/tree/master/src">src</a> / domcached-0.1-prototype.js       <span style="display:none" id="clippy_1337">src/domcached-0.1-prototype.js</span>
      
      <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
              width="110"
              height="14"
              class="clippy"
              id="clippy" >
      <param name="movie" value="/flash/clippy.swf?v5"/>
      <param name="allowScriptAccess" value="always" />
      <param name="quality" value="high" />
      <param name="scale" value="noscale" />
      <param NAME="FlashVars" value="id=clippy_1337&amp;copied=copied!&amp;copyto=copy to clipboard">
      <param name="bgcolor" value="#FFFFFF">
      <param name="wmode" value="opaque">
      <embed src="/flash/clippy.swf?v5"
             width="110"
             height="14"
             name="clippy"
             quality="high"
             allowScriptAccess="always"
             type="application/x-shockwave-flash"
             pluginspage="http://www.macromedia.com/go/getflashplayer"
             FlashVars="id=clippy_1337&amp;copied=copied!&amp;copyto=copy to clipboard"
             bgcolor="#FFFFFF"
             wmode="opaque"
      />
      </object>
      

    </div>

    <div id="files">
      <div class="file">
        <div class="meta">
          <div class="info">
            <span>100644</span>
            <span>322 lines (307 sloc)</span>
            <span>12.137 kb</span>
          </div>
          <div class="actions">
            
              <a style="display:none;" id="file-edit-link" href="#" rel="/andris9/DOMCached/file-edit/__ref__/src/domcached-0.1-prototype.js">edit</a>
            
            <a href="/andris9/DOMCached/raw/master/src/domcached-0.1-prototype.js" id="raw-url">raw</a>
            
              <a href="/andris9/DOMCached/blame/master/src/domcached-0.1-prototype.js">blame</a>
            
            <a href="/andris9/DOMCached/commits/master/src/domcached-0.1-prototype.js">history</a>
          </div>
        </div>
        
  <div class="data syntax type-js">
    
      <table cellpadding="0" cellspacing="0">
        <tr>
          <td>
            
            <pre class="line_numbers">
<span id="LID1" rel="#L1">1</span>
<span id="LID2" rel="#L2">2</span>
<span id="LID3" rel="#L3">3</span>
<span id="LID4" rel="#L4">4</span>
<span id="LID5" rel="#L5">5</span>
<span id="LID6" rel="#L6">6</span>
<span id="LID7" rel="#L7">7</span>
<span id="LID8" rel="#L8">8</span>
<span id="LID9" rel="#L9">9</span>
<span id="LID10" rel="#L10">10</span>
<span id="LID11" rel="#L11">11</span>
<span id="LID12" rel="#L12">12</span>
<span id="LID13" rel="#L13">13</span>
<span id="LID14" rel="#L14">14</span>
<span id="LID15" rel="#L15">15</span>
<span id="LID16" rel="#L16">16</span>
<span id="LID17" rel="#L17">17</span>
<span id="LID18" rel="#L18">18</span>
<span id="LID19" rel="#L19">19</span>
<span id="LID20" rel="#L20">20</span>
<span id="LID21" rel="#L21">21</span>
<span id="LID22" rel="#L22">22</span>
<span id="LID23" rel="#L23">23</span>
<span id="LID24" rel="#L24">24</span>
<span id="LID25" rel="#L25">25</span>
<span id="LID26" rel="#L26">26</span>
<span id="LID27" rel="#L27">27</span>
<span id="LID28" rel="#L28">28</span>
<span id="LID29" rel="#L29">29</span>
<span id="LID30" rel="#L30">30</span>
<span id="LID31" rel="#L31">31</span>
<span id="LID32" rel="#L32">32</span>
<span id="LID33" rel="#L33">33</span>
<span id="LID34" rel="#L34">34</span>
<span id="LID35" rel="#L35">35</span>
<span id="LID36" rel="#L36">36</span>
<span id="LID37" rel="#L37">37</span>
<span id="LID38" rel="#L38">38</span>
<span id="LID39" rel="#L39">39</span>
<span id="LID40" rel="#L40">40</span>
<span id="LID41" rel="#L41">41</span>
<span id="LID42" rel="#L42">42</span>
<span id="LID43" rel="#L43">43</span>
<span id="LID44" rel="#L44">44</span>
<span id="LID45" rel="#L45">45</span>
<span id="LID46" rel="#L46">46</span>
<span id="LID47" rel="#L47">47</span>
<span id="LID48" rel="#L48">48</span>
<span id="LID49" rel="#L49">49</span>
<span id="LID50" rel="#L50">50</span>
<span id="LID51" rel="#L51">51</span>
<span id="LID52" rel="#L52">52</span>
<span id="LID53" rel="#L53">53</span>
<span id="LID54" rel="#L54">54</span>
<span id="LID55" rel="#L55">55</span>
<span id="LID56" rel="#L56">56</span>
<span id="LID57" rel="#L57">57</span>
<span id="LID58" rel="#L58">58</span>
<span id="LID59" rel="#L59">59</span>
<span id="LID60" rel="#L60">60</span>
<span id="LID61" rel="#L61">61</span>
<span id="LID62" rel="#L62">62</span>
<span id="LID63" rel="#L63">63</span>
<span id="LID64" rel="#L64">64</span>
<span id="LID65" rel="#L65">65</span>
<span id="LID66" rel="#L66">66</span>
<span id="LID67" rel="#L67">67</span>
<span id="LID68" rel="#L68">68</span>
<span id="LID69" rel="#L69">69</span>
<span id="LID70" rel="#L70">70</span>
<span id="LID71" rel="#L71">71</span>
<span id="LID72" rel="#L72">72</span>
<span id="LID73" rel="#L73">73</span>
<span id="LID74" rel="#L74">74</span>
<span id="LID75" rel="#L75">75</span>
<span id="LID76" rel="#L76">76</span>
<span id="LID77" rel="#L77">77</span>
<span id="LID78" rel="#L78">78</span>
<span id="LID79" rel="#L79">79</span>
<span id="LID80" rel="#L80">80</span>
<span id="LID81" rel="#L81">81</span>
<span id="LID82" rel="#L82">82</span>
<span id="LID83" rel="#L83">83</span>
<span id="LID84" rel="#L84">84</span>
<span id="LID85" rel="#L85">85</span>
<span id="LID86" rel="#L86">86</span>
<span id="LID87" rel="#L87">87</span>
<span id="LID88" rel="#L88">88</span>
<span id="LID89" rel="#L89">89</span>
<span id="LID90" rel="#L90">90</span>
<span id="LID91" rel="#L91">91</span>
<span id="LID92" rel="#L92">92</span>
<span id="LID93" rel="#L93">93</span>
<span id="LID94" rel="#L94">94</span>
<span id="LID95" rel="#L95">95</span>
<span id="LID96" rel="#L96">96</span>
<span id="LID97" rel="#L97">97</span>
<span id="LID98" rel="#L98">98</span>
<span id="LID99" rel="#L99">99</span>
<span id="LID100" rel="#L100">100</span>
<span id="LID101" rel="#L101">101</span>
<span id="LID102" rel="#L102">102</span>
<span id="LID103" rel="#L103">103</span>
<span id="LID104" rel="#L104">104</span>
<span id="LID105" rel="#L105">105</span>
<span id="LID106" rel="#L106">106</span>
<span id="LID107" rel="#L107">107</span>
<span id="LID108" rel="#L108">108</span>
<span id="LID109" rel="#L109">109</span>
<span id="LID110" rel="#L110">110</span>
<span id="LID111" rel="#L111">111</span>
<span id="LID112" rel="#L112">112</span>
<span id="LID113" rel="#L113">113</span>
<span id="LID114" rel="#L114">114</span>
<span id="LID115" rel="#L115">115</span>
<span id="LID116" rel="#L116">116</span>
<span id="LID117" rel="#L117">117</span>
<span id="LID118" rel="#L118">118</span>
<span id="LID119" rel="#L119">119</span>
<span id="LID120" rel="#L120">120</span>
<span id="LID121" rel="#L121">121</span>
<span id="LID122" rel="#L122">122</span>
<span id="LID123" rel="#L123">123</span>
<span id="LID124" rel="#L124">124</span>
<span id="LID125" rel="#L125">125</span>
<span id="LID126" rel="#L126">126</span>
<span id="LID127" rel="#L127">127</span>
<span id="LID128" rel="#L128">128</span>
<span id="LID129" rel="#L129">129</span>
<span id="LID130" rel="#L130">130</span>
<span id="LID131" rel="#L131">131</span>
<span id="LID132" rel="#L132">132</span>
<span id="LID133" rel="#L133">133</span>
<span id="LID134" rel="#L134">134</span>
<span id="LID135" rel="#L135">135</span>
<span id="LID136" rel="#L136">136</span>
<span id="LID137" rel="#L137">137</span>
<span id="LID138" rel="#L138">138</span>
<span id="LID139" rel="#L139">139</span>
<span id="LID140" rel="#L140">140</span>
<span id="LID141" rel="#L141">141</span>
<span id="LID142" rel="#L142">142</span>
<span id="LID143" rel="#L143">143</span>
<span id="LID144" rel="#L144">144</span>
<span id="LID145" rel="#L145">145</span>
<span id="LID146" rel="#L146">146</span>
<span id="LID147" rel="#L147">147</span>
<span id="LID148" rel="#L148">148</span>
<span id="LID149" rel="#L149">149</span>
<span id="LID150" rel="#L150">150</span>
<span id="LID151" rel="#L151">151</span>
<span id="LID152" rel="#L152">152</span>
<span id="LID153" rel="#L153">153</span>
<span id="LID154" rel="#L154">154</span>
<span id="LID155" rel="#L155">155</span>
<span id="LID156" rel="#L156">156</span>
<span id="LID157" rel="#L157">157</span>
<span id="LID158" rel="#L158">158</span>
<span id="LID159" rel="#L159">159</span>
<span id="LID160" rel="#L160">160</span>
<span id="LID161" rel="#L161">161</span>
<span id="LID162" rel="#L162">162</span>
<span id="LID163" rel="#L163">163</span>
<span id="LID164" rel="#L164">164</span>
<span id="LID165" rel="#L165">165</span>
<span id="LID166" rel="#L166">166</span>
<span id="LID167" rel="#L167">167</span>
<span id="LID168" rel="#L168">168</span>
<span id="LID169" rel="#L169">169</span>
<span id="LID170" rel="#L170">170</span>
<span id="LID171" rel="#L171">171</span>
<span id="LID172" rel="#L172">172</span>
<span id="LID173" rel="#L173">173</span>
<span id="LID174" rel="#L174">174</span>
<span id="LID175" rel="#L175">175</span>
<span id="LID176" rel="#L176">176</span>
<span id="LID177" rel="#L177">177</span>
<span id="LID178" rel="#L178">178</span>
<span id="LID179" rel="#L179">179</span>
<span id="LID180" rel="#L180">180</span>
<span id="LID181" rel="#L181">181</span>
<span id="LID182" rel="#L182">182</span>
<span id="LID183" rel="#L183">183</span>
<span id="LID184" rel="#L184">184</span>
<span id="LID185" rel="#L185">185</span>
<span id="LID186" rel="#L186">186</span>
<span id="LID187" rel="#L187">187</span>
<span id="LID188" rel="#L188">188</span>
<span id="LID189" rel="#L189">189</span>
<span id="LID190" rel="#L190">190</span>
<span id="LID191" rel="#L191">191</span>
<span id="LID192" rel="#L192">192</span>
<span id="LID193" rel="#L193">193</span>
<span id="LID194" rel="#L194">194</span>
<span id="LID195" rel="#L195">195</span>
<span id="LID196" rel="#L196">196</span>
<span id="LID197" rel="#L197">197</span>
<span id="LID198" rel="#L198">198</span>
<span id="LID199" rel="#L199">199</span>
<span id="LID200" rel="#L200">200</span>
<span id="LID201" rel="#L201">201</span>
<span id="LID202" rel="#L202">202</span>
<span id="LID203" rel="#L203">203</span>
<span id="LID204" rel="#L204">204</span>
<span id="LID205" rel="#L205">205</span>
<span id="LID206" rel="#L206">206</span>
<span id="LID207" rel="#L207">207</span>
<span id="LID208" rel="#L208">208</span>
<span id="LID209" rel="#L209">209</span>
<span id="LID210" rel="#L210">210</span>
<span id="LID211" rel="#L211">211</span>
<span id="LID212" rel="#L212">212</span>
<span id="LID213" rel="#L213">213</span>
<span id="LID214" rel="#L214">214</span>
<span id="LID215" rel="#L215">215</span>
<span id="LID216" rel="#L216">216</span>
<span id="LID217" rel="#L217">217</span>
<span id="LID218" rel="#L218">218</span>
<span id="LID219" rel="#L219">219</span>
<span id="LID220" rel="#L220">220</span>
<span id="LID221" rel="#L221">221</span>
<span id="LID222" rel="#L222">222</span>
<span id="LID223" rel="#L223">223</span>
<span id="LID224" rel="#L224">224</span>
<span id="LID225" rel="#L225">225</span>
<span id="LID226" rel="#L226">226</span>
<span id="LID227" rel="#L227">227</span>
<span id="LID228" rel="#L228">228</span>
<span id="LID229" rel="#L229">229</span>
<span id="LID230" rel="#L230">230</span>
<span id="LID231" rel="#L231">231</span>
<span id="LID232" rel="#L232">232</span>
<span id="LID233" rel="#L233">233</span>
<span id="LID234" rel="#L234">234</span>
<span id="LID235" rel="#L235">235</span>
<span id="LID236" rel="#L236">236</span>
<span id="LID237" rel="#L237">237</span>
<span id="LID238" rel="#L238">238</span>
<span id="LID239" rel="#L239">239</span>
<span id="LID240" rel="#L240">240</span>
<span id="LID241" rel="#L241">241</span>
<span id="LID242" rel="#L242">242</span>
<span id="LID243" rel="#L243">243</span>
<span id="LID244" rel="#L244">244</span>
<span id="LID245" rel="#L245">245</span>
<span id="LID246" rel="#L246">246</span>
<span id="LID247" rel="#L247">247</span>
<span id="LID248" rel="#L248">248</span>
<span id="LID249" rel="#L249">249</span>
<span id="LID250" rel="#L250">250</span>
<span id="LID251" rel="#L251">251</span>
<span id="LID252" rel="#L252">252</span>
<span id="LID253" rel="#L253">253</span>
<span id="LID254" rel="#L254">254</span>
<span id="LID255" rel="#L255">255</span>
<span id="LID256" rel="#L256">256</span>
<span id="LID257" rel="#L257">257</span>
<span id="LID258" rel="#L258">258</span>
<span id="LID259" rel="#L259">259</span>
<span id="LID260" rel="#L260">260</span>
<span id="LID261" rel="#L261">261</span>
<span id="LID262" rel="#L262">262</span>
<span id="LID263" rel="#L263">263</span>
<span id="LID264" rel="#L264">264</span>
<span id="LID265" rel="#L265">265</span>
<span id="LID266" rel="#L266">266</span>
<span id="LID267" rel="#L267">267</span>
<span id="LID268" rel="#L268">268</span>
<span id="LID269" rel="#L269">269</span>
<span id="LID270" rel="#L270">270</span>
<span id="LID271" rel="#L271">271</span>
<span id="LID272" rel="#L272">272</span>
<span id="LID273" rel="#L273">273</span>
<span id="LID274" rel="#L274">274</span>
<span id="LID275" rel="#L275">275</span>
<span id="LID276" rel="#L276">276</span>
<span id="LID277" rel="#L277">277</span>
<span id="LID278" rel="#L278">278</span>
<span id="LID279" rel="#L279">279</span>
<span id="LID280" rel="#L280">280</span>
<span id="LID281" rel="#L281">281</span>
<span id="LID282" rel="#L282">282</span>
<span id="LID283" rel="#L283">283</span>
<span id="LID284" rel="#L284">284</span>
<span id="LID285" rel="#L285">285</span>
<span id="LID286" rel="#L286">286</span>
<span id="LID287" rel="#L287">287</span>
<span id="LID288" rel="#L288">288</span>
<span id="LID289" rel="#L289">289</span>
<span id="LID290" rel="#L290">290</span>
<span id="LID291" rel="#L291">291</span>
<span id="LID292" rel="#L292">292</span>
<span id="LID293" rel="#L293">293</span>
<span id="LID294" rel="#L294">294</span>
<span id="LID295" rel="#L295">295</span>
<span id="LID296" rel="#L296">296</span>
<span id="LID297" rel="#L297">297</span>
<span id="LID298" rel="#L298">298</span>
<span id="LID299" rel="#L299">299</span>
<span id="LID300" rel="#L300">300</span>
<span id="LID301" rel="#L301">301</span>
<span id="LID302" rel="#L302">302</span>
<span id="LID303" rel="#L303">303</span>
<span id="LID304" rel="#L304">304</span>
<span id="LID305" rel="#L305">305</span>
<span id="LID306" rel="#L306">306</span>
<span id="LID307" rel="#L307">307</span>
<span id="LID308" rel="#L308">308</span>
<span id="LID309" rel="#L309">309</span>
<span id="LID310" rel="#L310">310</span>
<span id="LID311" rel="#L311">311</span>
<span id="LID312" rel="#L312">312</span>
<span id="LID313" rel="#L313">313</span>
<span id="LID314" rel="#L314">314</span>
<span id="LID315" rel="#L315">315</span>
<span id="LID316" rel="#L316">316</span>
<span id="LID317" rel="#L317">317</span>
<span id="LID318" rel="#L318">318</span>
<span id="LID319" rel="#L319">319</span>
<span id="LID320" rel="#L320">320</span>
<span id="LID321" rel="#L321">321</span>
<span id="LID322" rel="#L322">322</span>
</pre>
          </td>
          <td width="100%">
            
              <div class="highlight"><pre><div class="line" id="LC1"><span class="cm">/**</span></div><div class="line" id="LC2"><span class="cm"> * ==DOMCached local storage library, version 0.1c==</span></div><div class="line" id="LC3"><span class="cm"> * DOMCached is a simple wrapper library for the use of DOM Storage provided by the modern browsers.</span></div><div class="line" id="LC4"><span class="cm"> * This library is designed after the hugely popular &quot;memcached&quot; caching system, providing similar</span></div><div class="line" id="LC5"><span class="cm"> * &quot;caching&quot; options in JavaScript in the form of local storage.</span></div><div class="line" id="LC6"><span class="cm"> *</span></div><div class="line" id="LC7"><span class="cm"> * While the original DOM Storage provides only methods to save and read string values, DOMCached</span></div><div class="line" id="LC8"><span class="cm"> * can input and output any JSON compatible objects. DOMCached includes also support for namespaces </span></div><div class="line" id="LC9"><span class="cm"> * and data expiring.</span></div><div class="line" id="LC10"><span class="cm"> *</span></div><div class="line" id="LC11"><span class="cm"> * (c) 2009 Andris Reinman, FlyCom</span></div><div class="line" id="LC12"><span class="cm"> *         www.andrisreinman.com</span></div><div class="line" id="LC13"><span class="cm"> *</span></div><div class="line" id="LC14"><span class="cm"> *  DOMCached is freely distributable under the terms of a MIT-style license.</span></div><div class="line" id="LC15"><span class="cm"> *  For details, see the DOMCached web site: http://www.domcached.com/</span></div><div class="line" id="LC16"><span class="cm"> * </span></div><div class="line" id="LC17"><span class="cm"> * NB! DOMCached requires Prototype (prototypejs.org) to convert from/to JSON strings and also for &lt;IE8 userData.</span></div><div class="line" id="LC18"><span class="cm"> * This functionality can also be achieved using other libraries (jQuery, etc.), minor editing might be needed.</span></div><div class="line" id="LC19"><span class="cm"> * </span></div><div class="line" id="LC20"><span class="cm">**/</span></div><div class="line" id="LC21">&nbsp;</div><div class="line" id="LC22"><span class="cm">/**</span></div><div class="line" id="LC23"><span class="cm"> * Usage:</span></div><div class="line" id="LC24"><span class="cm"> * if(!(key = DOMCached.get(&quot;key&quot;, &quot;my_ns&quot;))){</span></div><div class="line" id="LC25"><span class="cm"> *     key = load_data_from_server()</span></div><div class="line" id="LC26"><span class="cm"> *     DOMCached.set(&quot;key&quot;,&quot;value&quot;, false, &quot;my_ns&quot;);</span></div><div class="line" id="LC27"><span class="cm"> * }</span></div><div class="line" id="LC28"><span class="cm"> */</span></div><div class="line" id="LC29">&nbsp;</div><div class="line" id="LC30">&nbsp;</div><div class="line" id="LC31"><span class="nx">DOMCached</span> <span class="o">=</span> <span class="p">{</span></div><div class="line" id="LC32">	<span class="cm">/* Version number */</span></div><div class="line" id="LC33">	<span class="nx">version</span><span class="o">:</span> <span class="s2">&quot;0.1c&quot;</span><span class="p">,</span></div><div class="line" id="LC34">&nbsp;</div><div class="line" id="LC35">	<span class="cm">/*</span></div><div class="line" id="LC36"><span class="cm">	 * This is the object, that holds the cached values</span></div><div class="line" id="LC37"><span class="cm">	 * @param {Object} storage </span></div><div class="line" id="LC38"><span class="cm">	 */</span></div><div class="line" id="LC39">	<span class="nx">storage</span><span class="o">:</span> <span class="p">{},</span></div><div class="line" id="LC40">&nbsp;</div><div class="line" id="LC41">	<span class="cm">/*</span></div><div class="line" id="LC42"><span class="cm">	 * This is the object, that holds the actual storage object (localStorage or globalStorage[&#39;domain&#39;])</span></div><div class="line" id="LC43"><span class="cm">	 * @param {Object} storage </span></div><div class="line" id="LC44"><span class="cm">	 */</span></div><div class="line" id="LC45">	<span class="nx">storage_service</span><span class="o">:</span> <span class="kc">false</span><span class="p">,</span></div><div class="line" id="LC46">&nbsp;</div><div class="line" id="LC47">&nbsp;	<span class="cm">/**</span></div><div class="line" id="LC48"><span class="cm"> 	 * Initialization function. Detects if the browser supports DOM Storage and behaves accordingly</span></div><div class="line" id="LC49"><span class="cm"> 	 * @returns undefined</span></div><div class="line" id="LC50"><span class="cm"> 	 */</span></div><div class="line" id="LC51">	<span class="nx">init</span><span class="o">:</span> <span class="kd">function</span><span class="p">(){</span></div><div class="line" id="LC52">		<span class="k">if</span><span class="p">(</span><span class="s2">&quot;localStorage&quot;</span> <span class="k">in</span> <span class="nb">window</span><span class="p">){</span></div><div class="line" id="LC53">			<span class="k">this</span><span class="p">.</span><span class="nx">storage_service</span> <span class="o">=</span> <span class="nx">localStorage</span><span class="p">;</span></div><div class="line" id="LC54">		<span class="p">}</span><span class="k">else</span> <span class="k">if</span><span class="p">(</span><span class="s2">&quot;globalStorage&quot;</span> <span class="k">in</span> <span class="nb">window</span><span class="p">){</span></div><div class="line" id="LC55">			<span class="k">this</span><span class="p">.</span><span class="nx">storage_service</span> <span class="o">=</span> <span class="nx">globalStorage</span><span class="p">[</span><span class="nb">document</span><span class="p">.</span><span class="nx">domain</span><span class="p">]</span></div><div class="line" id="LC56">		<span class="p">}</span><span class="k">else</span><span class="p">{</span></div><div class="line" id="LC57">			<span class="cm">/* If the browser is IE7 or older, use userData behavior as a storage instead */</span></div><div class="line" id="LC58">			<span class="k">if</span><span class="p">(</span><span class="s2">&quot;addBehavior&quot;</span> <span class="k">in</span> <span class="p">(</span><span class="k">new</span> <span class="nx">Element</span><span class="p">(</span><span class="s1">&#39;div&#39;</span><span class="p">))){</span></div><div class="line" id="LC59">				<span class="c1">// add a link element to the header, this will be the storage element</span></div><div class="line" id="LC60">				<span class="nb">document</span><span class="p">.</span><span class="nx">write</span><span class="p">(</span><span class="s1">&#39;&lt;link id=&quot;elm_domcached&quot; style=&quot;behavior:url(#default#userData)&quot;/&gt;&#39;</span><span class="p">)</span></div><div class="line" id="LC61">				<span class="nx">$</span><span class="p">(</span><span class="s1">&#39;elm_domcached&#39;</span><span class="p">).</span><span class="nx">load</span><span class="p">(</span><span class="s2">&quot;domcached&quot;</span><span class="p">);</span></div><div class="line" id="LC62">				<span class="k">try</span><span class="p">{</span></div><div class="line" id="LC63">					<span class="kd">var</span> <span class="nx">data</span> <span class="o">=</span> <span class="nx">$</span><span class="p">(</span><span class="s1">&#39;elm_domcached&#39;</span><span class="p">).</span><span class="nx">getAttribute</span><span class="p">(</span><span class="s2">&quot;domcached&quot;</span><span class="p">)</span></div><div class="line" id="LC64">				<span class="p">}</span><span class="k">catch</span><span class="p">(</span><span class="nx">E</span><span class="p">){</span><span class="kd">var</span> <span class="nx">data</span> <span class="o">=</span> <span class="s2">&quot;{}&quot;</span><span class="p">}</span></div><div class="line" id="LC65">				<span class="k">this</span><span class="p">.</span><span class="nx">storage_service</span> <span class="o">=</span> <span class="p">{</span><span class="nx">dom_storage</span><span class="o">:</span><span class="p">{}}</span></div><div class="line" id="LC66">				<span class="k">if</span><span class="p">(</span><span class="nx">data</span> <span class="o">&amp;&amp;</span> <span class="nx">data</span><span class="p">.</span><span class="nx">length</span><span class="p">){</span></div><div class="line" id="LC67">					<span class="k">this</span><span class="p">.</span><span class="nx">storage_service</span><span class="p">.</span><span class="nx">dom_storage</span> <span class="o">=</span> <span class="nx">data</span><span class="p">;</span></div><div class="line" id="LC68">				<span class="p">}</span></div><div class="line" id="LC69">			<span class="p">}</span><span class="k">else</span></div><div class="line" id="LC70">				<span class="k">return</span><span class="p">;</span></div><div class="line" id="LC71">		<span class="p">}</span></div><div class="line" id="LC72">		<span class="k">if</span><span class="p">(</span><span class="s2">&quot;dom_storage&quot;</span> <span class="k">in</span> <span class="k">this</span><span class="p">.</span><span class="nx">storage_service</span> <span class="o">&amp;&amp;</span> <span class="k">this</span><span class="p">.</span><span class="nx">storage_service</span><span class="p">.</span><span class="nx">dom_storage</span><span class="p">){</span></div><div class="line" id="LC73">			<span class="k">try</span><span class="p">{</span></div><div class="line" id="LC74">				<span class="k">this</span><span class="p">.</span><span class="nx">storage</span> <span class="o">=</span> <span class="nb">String</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">storage_service</span><span class="p">.</span><span class="nx">dom_storage</span><span class="p">).</span><span class="nx">evalJSON</span><span class="p">();</span></div><div class="line" id="LC75">			<span class="p">}</span><span class="k">catch</span><span class="p">(</span><span class="nx">E</span><span class="p">){</span><span class="k">this</span><span class="p">.</span><span class="nx">storage_service</span><span class="p">.</span><span class="nx">dom_storage</span> <span class="o">=</span> <span class="s2">&quot;{}&quot;</span><span class="p">;}</span></div><div class="line" id="LC76">		<span class="p">}</span><span class="k">else</span><span class="p">{</span></div><div class="line" id="LC77">			<span class="k">this</span><span class="p">.</span><span class="nx">storage_service</span><span class="p">.</span><span class="nx">dom_storage</span> <span class="o">=</span> <span class="s2">&quot;{}&quot;</span><span class="p">;</span></div><div class="line" id="LC78">		<span class="p">}</span></div><div class="line" id="LC79">	<span class="p">},</span></div><div class="line" id="LC80">&nbsp;</div><div class="line" id="LC81">&nbsp;	<span class="cm">/**</span></div><div class="line" id="LC82"><span class="cm"> 	 * This functions provides the &quot;save&quot; mechanism to store the DOMCached.storage object to the DOM Storage</span></div><div class="line" id="LC83"><span class="cm"> 	 * @returns undefined</span></div><div class="line" id="LC84"><span class="cm"> 	 */</span></div><div class="line" id="LC85">	<span class="nx">save</span><span class="o">:</span><span class="kd">function</span><span class="p">(){</span></div><div class="line" id="LC86">		<span class="k">if</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">storage_service</span><span class="p">){</span></div><div class="line" id="LC87">			<span class="k">try</span><span class="p">{</span></div><div class="line" id="LC88">				<span class="k">this</span><span class="p">.</span><span class="nx">storage_service</span><span class="p">.</span><span class="nx">dom_storage</span> <span class="o">=</span> <span class="nb">Object</span><span class="p">.</span><span class="nx">toJSON</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">storage</span><span class="p">);</span></div><div class="line" id="LC89">			<span class="p">}</span><span class="k">catch</span><span class="p">(</span><span class="nx">E</span><span class="p">){</span><span class="cm">/* probably cache is full, nothing is saved this way*/</span><span class="p">}</span></div><div class="line" id="LC90">			<span class="c1">// If userData is used as the storage engine, additional </span></div><div class="line" id="LC91">			<span class="k">if</span><span class="p">(</span><span class="nx">$</span><span class="p">(</span><span class="s1">&#39;elm_domcached&#39;</span><span class="p">)){</span></div><div class="line" id="LC92">				<span class="k">try</span><span class="p">{</span></div><div class="line" id="LC93">					<span class="nx">$</span><span class="p">(</span><span class="s1">&#39;elm_domcached&#39;</span><span class="p">).</span><span class="nx">setAttribute</span><span class="p">(</span><span class="s2">&quot;domcached&quot;</span><span class="p">,</span><span class="k">this</span><span class="p">.</span><span class="nx">storage_service</span><span class="p">.</span><span class="nx">dom_storage</span><span class="p">)</span></div><div class="line" id="LC94">					<span class="nx">$</span><span class="p">(</span><span class="s1">&#39;elm_domcached&#39;</span><span class="p">).</span><span class="nx">save</span><span class="p">(</span><span class="s2">&quot;domcached&quot;</span><span class="p">)</span></div><div class="line" id="LC95">				<span class="p">}</span><span class="k">catch</span><span class="p">(</span><span class="nx">E</span><span class="p">){</span><span class="cm">/* probably cache is full, nothing is saved this way*/</span><span class="p">}</span></div><div class="line" id="LC96">			<span class="p">}</span></div><div class="line" id="LC97">		<span class="p">}</span></div><div class="line" id="LC98">	<span class="p">},</span></div><div class="line" id="LC99">&nbsp;</div><div class="line" id="LC100">&nbsp;	<span class="cm">/**</span></div><div class="line" id="LC101"><span class="cm"> 	 * Sets a key&#39;s value, regardless of previous contents in cache.</span></div><div class="line" id="LC102"><span class="cm"> 	 * @param {String} key - Key to set. If this value is not set or not a string an exception is raised.</span></div><div class="line" id="LC103"><span class="cm"> 	 * @param value - Value to set. This can be any value that is JSON compatible (Numbers, Strings, Objects etc.).</span></div><div class="line" id="LC104"><span class="cm"> 	 * @param {number} time - Optional expiration time, either relative number of seconds from current time, or an absolute Unix epoch time in milliseconds.</span></div><div class="line" id="LC105"><span class="cm"> 	 * @param {String} namespace - An optional namespace for the key. This must be string, otherwise an exception is raised.</span></div><div class="line" id="LC106"><span class="cm"> 	 * @returns the used value</span></div><div class="line" id="LC107"><span class="cm"> 	 */</span></div><div class="line" id="LC108">	<span class="nx">set</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">key</span><span class="p">,</span> <span class="nx">value</span><span class="p">,</span> <span class="nx">time</span><span class="p">,</span> <span class="nx">namespace</span><span class="p">){</span></div><div class="line" id="LC109">		<span class="nx">namespace</span> <span class="o">=</span> <span class="nx">namespace</span> <span class="o">||</span> <span class="s1">&#39;default&#39;</span><span class="p">;</span></div><div class="line" id="LC110">		<span class="nx">time</span> <span class="o">=</span> <span class="nx">time</span> <span class="o">||</span> <span class="kc">false</span><span class="p">;</span></div><div class="line" id="LC111">		<span class="k">if</span><span class="p">(</span><span class="nx">time</span> <span class="o">&amp;&amp;</span> <span class="nx">time</span><span class="o">&lt;</span><span class="p">(</span><span class="k">new</span> <span class="nb">Date</span><span class="p">()).</span><span class="nx">getTime</span><span class="p">()){</span></div><div class="line" id="LC112">			<span class="nx">time</span> <span class="o">=</span> <span class="p">(</span><span class="k">new</span> <span class="nb">Date</span><span class="p">()).</span><span class="nx">getTime</span><span class="p">()</span><span class="o">+</span><span class="nb">Math</span><span class="p">.</span><span class="nx">ceil</span><span class="p">(</span><span class="nx">time</span><span class="p">)</span></div><div class="line" id="LC113">		<span class="p">}</span></div><div class="line" id="LC114">		<span class="k">if</span><span class="p">(</span><span class="o">!</span><span class="nx">key</span> <span class="o">||</span> <span class="p">(</span><span class="k">typeof</span> <span class="nx">key</span> <span class="o">!=</span> <span class="s2">&quot;string&quot;</span> <span class="o">&amp;&amp;</span> <span class="k">typeof</span> <span class="nx">key</span> <span class="o">!=</span> <span class="s2">&quot;number&quot;</span><span class="p">)){</span></div><div class="line" id="LC115">			<span class="k">throw</span> <span class="k">new</span> <span class="nx">TypeError</span><span class="p">(</span><span class="s1">&#39;Key name must be string or numeric&#39;</span><span class="p">);</span></div><div class="line" id="LC116">		<span class="p">}</span></div><div class="line" id="LC117">		<span class="k">if</span><span class="p">(</span><span class="k">typeof</span> <span class="nx">namespace</span> <span class="o">!=</span> <span class="s2">&quot;string&quot;</span> <span class="o">&amp;&amp;</span> <span class="k">typeof</span> <span class="nx">namespace</span> <span class="o">!=</span> <span class="s2">&quot;number&quot;</span><span class="p">){</span></div><div class="line" id="LC118">			<span class="k">throw</span> <span class="k">new</span> <span class="nx">TypeError</span><span class="p">(</span><span class="s1">&#39;Namespace name must be string or numeric&#39;</span><span class="p">);</span></div><div class="line" id="LC119">		<span class="p">}</span></div><div class="line" id="LC120">		<span class="k">if</span><span class="p">(</span><span class="o">!</span><span class="k">this</span><span class="p">.</span><span class="nx">storage</span><span class="p">[</span><span class="nx">namespace</span><span class="p">]){</span></div><div class="line" id="LC121">			<span class="k">this</span><span class="p">.</span><span class="nx">storage</span><span class="p">[</span><span class="nx">namespace</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span></div><div class="line" id="LC122">		<span class="p">}</span></div><div class="line" id="LC123">		<span class="k">this</span><span class="p">.</span><span class="nx">storage</span><span class="p">[</span><span class="nx">namespace</span><span class="p">][</span><span class="nx">key</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="nx">value</span><span class="o">:</span> <span class="nx">value</span><span class="p">,</span> <span class="nx">time</span><span class="o">:</span> <span class="nx">time</span><span class="p">};</span></div><div class="line" id="LC124">		<span class="k">this</span><span class="p">.</span><span class="nx">save</span><span class="p">();</span></div><div class="line" id="LC125">		<span class="k">return</span> <span class="nx">value</span> <span class="o">||</span> <span class="kc">true</span><span class="p">;</span></div><div class="line" id="LC126">	<span class="p">},</span></div><div class="line" id="LC127">	<span class="cm">/**</span></div><div class="line" id="LC128"><span class="cm"> 	 * Looks up a key in cache</span></div><div class="line" id="LC129"><span class="cm"> 	 * @param {String} key - Key to look up. If this value is not string an exception is raised.</span></div><div class="line" id="LC130"><span class="cm"> 	 * @param {String} namespace - An optional namespace for the key. This must be string, otherwise an exception is raised.</span></div><div class="line" id="LC131"><span class="cm"> 	 * @returns the key value or &lt;null&gt; if not found</span></div><div class="line" id="LC132"><span class="cm"> 	 */</span></div><div class="line" id="LC133">	<span class="nx">get</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">key</span><span class="p">,</span> <span class="nx">namespace</span><span class="p">){</span></div><div class="line" id="LC134">		<span class="nx">namespace</span> <span class="o">=</span> <span class="nx">namespace</span> <span class="o">||</span> <span class="s1">&#39;default&#39;</span><span class="p">;</span></div><div class="line" id="LC135">		<span class="k">if</span><span class="p">(</span><span class="k">typeof</span> <span class="nx">namespace</span> <span class="o">!=</span> <span class="s2">&quot;string&quot;</span> <span class="o">&amp;&amp;</span> <span class="k">typeof</span> <span class="nx">namespace</span> <span class="o">!=</span> <span class="s2">&quot;number&quot;</span><span class="p">){</span></div><div class="line" id="LC136">			<span class="k">throw</span> <span class="k">new</span> <span class="nx">TypeError</span><span class="p">(</span><span class="s1">&#39;Namespace name must be string or numeric&#39;</span><span class="p">);</span></div><div class="line" id="LC137">		<span class="p">}</span></div><div class="line" id="LC138">		<span class="k">if</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">storage</span><span class="p">[</span><span class="nx">namespace</span><span class="p">]</span> <span class="o">&amp;&amp;</span> </div><div class="line" id="LC139">		  <span class="k">this</span><span class="p">.</span><span class="nx">storage</span><span class="p">[</span><span class="nx">namespace</span><span class="p">][</span><span class="nx">key</span><span class="p">]</span> <span class="o">&amp;&amp;</span> </div><div class="line" id="LC140">		  <span class="p">(</span><span class="o">!</span><span class="k">this</span><span class="p">.</span><span class="nx">storage</span><span class="p">[</span><span class="nx">namespace</span><span class="p">][</span><span class="nx">key</span><span class="p">].</span><span class="nx">time</span> <span class="o">||</span> </div><div class="line" id="LC141">		    <span class="k">this</span><span class="p">.</span><span class="nx">storage</span><span class="p">[</span><span class="nx">namespace</span><span class="p">][</span><span class="nx">key</span><span class="p">].</span><span class="nx">time</span><span class="o">&lt;</span><span class="p">(</span><span class="k">new</span> <span class="nb">Date</span><span class="p">()).</span><span class="nx">getTime</span><span class="p">())){</span></div><div class="line" id="LC142">			<span class="k">return</span> <span class="k">this</span><span class="p">.</span><span class="nx">storage</span><span class="p">[</span><span class="nx">namespace</span><span class="p">][</span><span class="nx">key</span><span class="p">].</span><span class="nx">value</span><span class="p">;</span></div><div class="line" id="LC143">		<span class="p">}</span></div><div class="line" id="LC144">		<span class="k">return</span> <span class="kc">null</span><span class="p">;</span></div><div class="line" id="LC145">	<span class="p">},</span></div><div class="line" id="LC146">	<span class="cm">/**</span></div><div class="line" id="LC147"><span class="cm"> 	 * Deletes a key from cache.</span></div><div class="line" id="LC148"><span class="cm"> 	 * @param {String} key - Key to delete. If this value is not string an exception is raised.</span></div><div class="line" id="LC149"><span class="cm"> 	 * @param {String} namespace - An optional namespace for the key. This must be string, otherwise an exception is raised.</span></div><div class="line" id="LC150"><span class="cm"> 	 * @returns true</span></div><div class="line" id="LC151"><span class="cm"> 	 */</span></div><div class="line" id="LC152">	<span class="s1">&#39;delete&#39;</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">key</span><span class="p">,</span> <span class="nx">namespace</span><span class="p">){</span></div><div class="line" id="LC153">		<span class="nx">namespace</span> <span class="o">=</span> <span class="nx">namespace</span> <span class="o">||</span> <span class="s1">&#39;default&#39;</span><span class="p">;</span></div><div class="line" id="LC154">		<span class="k">if</span><span class="p">(</span><span class="k">typeof</span> <span class="nx">namespace</span> <span class="o">!=</span> <span class="s2">&quot;string&quot;</span> <span class="o">&amp;&amp;</span> <span class="k">typeof</span> <span class="nx">namespace</span> <span class="o">!=</span> <span class="s2">&quot;number&quot;</span><span class="p">){</span></div><div class="line" id="LC155">			<span class="k">throw</span> <span class="k">new</span> <span class="nx">TypeError</span><span class="p">(</span><span class="s1">&#39;Namespace name must be string or numeric&#39;</span><span class="p">);</span></div><div class="line" id="LC156">		<span class="p">}</span></div><div class="line" id="LC157">		<span class="k">if</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">storage</span><span class="p">[</span><span class="nx">namespace</span><span class="p">]</span> <span class="o">&amp;&amp;</span> <span class="k">this</span><span class="p">.</span><span class="nx">storage</span><span class="p">[</span><span class="nx">namespace</span><span class="p">][</span><span class="nx">key</span><span class="p">]){</span></div><div class="line" id="LC158">			<span class="k">delete</span> <span class="k">this</span><span class="p">.</span><span class="nx">storage</span><span class="p">[</span><span class="nx">namespace</span><span class="p">][</span><span class="nx">key</span><span class="p">];</span></div><div class="line" id="LC159">			<span class="k">for</span><span class="p">(</span><span class="kd">var</span> <span class="nx">i</span> <span class="k">in</span> <span class="k">delete</span> <span class="k">this</span><span class="p">.</span><span class="nx">storage</span><span class="p">[</span><span class="nx">namespace</span><span class="p">]){</span></div><div class="line" id="LC160">				<span class="k">if</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">storage</span><span class="p">[</span><span class="nx">namespace</span><span class="p">].</span><span class="nx">hasOwnProperty</span><span class="p">(</span><span class="nx">i</span><span class="p">)){</span></div><div class="line" id="LC161">					<span class="k">this</span><span class="p">.</span><span class="nx">save</span><span class="p">();</span></div><div class="line" id="LC162">					<span class="k">return</span> <span class="kc">true</span><span class="p">;</span></div><div class="line" id="LC163">				<span class="p">}</span></div><div class="line" id="LC164">			<span class="p">}</span></div><div class="line" id="LC165">			<span class="k">delete</span> <span class="k">this</span><span class="p">.</span><span class="nx">storage</span><span class="p">[</span><span class="nx">namespace</span><span class="p">];</span></div><div class="line" id="LC166">			<span class="k">this</span><span class="p">.</span><span class="nx">save</span><span class="p">();</span></div><div class="line" id="LC167">			<span class="k">return</span> <span class="kc">true</span><span class="p">;</span></div><div class="line" id="LC168">		<span class="p">}</span></div><div class="line" id="LC169">	<span class="p">},</span></div><div class="line" id="LC170">&nbsp;</div><div class="line" id="LC171">&nbsp;	<span class="cm">/**</span></div><div class="line" id="LC172"><span class="cm"> 	 * Sets a key&#39;s value, if and only if the item is not already in cache.</span></div><div class="line" id="LC173"><span class="cm"> 	 * @param {String} key - Key to set. If this value is not set or not a string an exception is raised.</span></div><div class="line" id="LC174"><span class="cm"> 	 * @param value - Value to set. This can be any value that is JSON compatible (Numbers, Strings, Objects etc.).</span></div><div class="line" id="LC175"><span class="cm"> 	 * @param {number} time - Optional expiration time, either relative number of seconds from current time, or an absolute Unix epoch time in milliseconds.</span></div><div class="line" id="LC176"><span class="cm"> 	 * @param {String} namespace - An optional namespace for the key. This must be string, otherwise an exception is raised.</span></div><div class="line" id="LC177"><span class="cm"> 	 * @returns the used value or false if the key was already used</span></div><div class="line" id="LC178"><span class="cm"> 	 */</span></div><div class="line" id="LC179">	<span class="nx">add</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">key</span><span class="p">,</span> <span class="nx">value</span><span class="p">,</span> <span class="nx">time</span><span class="p">,</span> <span class="nx">namespace</span><span class="p">){</span></div><div class="line" id="LC180">		<span class="nx">namespace</span> <span class="o">=</span> <span class="nx">namespace</span> <span class="o">||</span> <span class="s1">&#39;default&#39;</span><span class="p">;</span></div><div class="line" id="LC181">		<span class="nx">time</span> <span class="o">=</span> <span class="nx">time</span> <span class="o">||</span> <span class="kc">false</span><span class="p">;</span></div><div class="line" id="LC182">		<span class="k">if</span><span class="p">(</span><span class="nx">time</span> <span class="o">&amp;&amp;</span> <span class="nx">time</span><span class="o">&lt;</span><span class="p">(</span><span class="k">new</span> <span class="nb">Date</span><span class="p">()).</span><span class="nx">getTime</span><span class="p">()){</span></div><div class="line" id="LC183">			<span class="nx">time</span> <span class="o">=</span> <span class="p">(</span><span class="k">new</span> <span class="nb">Date</span><span class="p">()).</span><span class="nx">getTime</span><span class="p">()</span><span class="o">+</span><span class="nb">Math</span><span class="p">.</span><span class="nx">ceil</span><span class="p">(</span><span class="nx">time</span><span class="p">)</span></div><div class="line" id="LC184">		<span class="p">}</span></div><div class="line" id="LC185">		<span class="k">if</span><span class="p">(</span><span class="o">!</span><span class="nx">key</span> <span class="o">||</span> <span class="p">(</span><span class="k">typeof</span> <span class="nx">key</span> <span class="o">!=</span> <span class="s2">&quot;string&quot;</span> <span class="o">&amp;&amp;</span> <span class="k">typeof</span> <span class="nx">key</span> <span class="o">!=</span> <span class="s2">&quot;number&quot;</span><span class="p">)){</span></div><div class="line" id="LC186">			<span class="k">throw</span> <span class="k">new</span> <span class="nx">TypeError</span><span class="p">(</span><span class="s1">&#39;Key name must be string or numeric&#39;</span><span class="p">);</span></div><div class="line" id="LC187">		<span class="p">}</span></div><div class="line" id="LC188">		<span class="k">if</span><span class="p">(</span><span class="k">typeof</span> <span class="nx">namespace</span> <span class="o">!=</span> <span class="s2">&quot;string&quot;</span> <span class="o">&amp;&amp;</span> <span class="k">typeof</span> <span class="nx">namespace</span> <span class="o">!=</span> <span class="s2">&quot;number&quot;</span><span class="p">){</span></div><div class="line" id="LC189">			<span class="k">throw</span> <span class="k">new</span> <span class="nx">TypeError</span><span class="p">(</span><span class="s1">&#39;Namespace name must be string or numeric&#39;</span><span class="p">);</span></div><div class="line" id="LC190">		<span class="p">}</span></div><div class="line" id="LC191">		<span class="k">if</span><span class="p">(</span><span class="o">!</span><span class="k">this</span><span class="p">.</span><span class="nx">storage</span><span class="p">[</span><span class="nx">namespace</span><span class="p">]){</span></div><div class="line" id="LC192">			<span class="k">this</span><span class="p">.</span><span class="nx">storage</span><span class="p">[</span><span class="nx">namespace</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span></div><div class="line" id="LC193">		<span class="p">}</span></div><div class="line" id="LC194">		<span class="k">if</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">storage</span><span class="p">[</span><span class="nx">namespace</span><span class="p">].</span><span class="nx">hasOwnProperty</span><span class="p">(</span><span class="nx">key</span><span class="p">)){</span></div><div class="line" id="LC195">			<span class="k">return</span> <span class="kc">false</span><span class="p">;</span></div><div class="line" id="LC196">		<span class="p">}</span></div><div class="line" id="LC197">		<span class="k">this</span><span class="p">.</span><span class="nx">storage</span><span class="p">[</span><span class="nx">namespace</span><span class="p">][</span><span class="nx">key</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="nx">value</span><span class="o">:</span> <span class="nx">value</span><span class="p">,</span> <span class="nx">time</span><span class="o">:</span> <span class="nx">time</span><span class="p">};</span></div><div class="line" id="LC198">		<span class="k">this</span><span class="p">.</span><span class="nx">save</span><span class="p">();</span></div><div class="line" id="LC199">		<span class="k">return</span> <span class="nx">value</span> <span class="o">||</span> <span class="kc">true</span><span class="p">;</span></div><div class="line" id="LC200">	<span class="p">},</span></div><div class="line" id="LC201">&nbsp;</div><div class="line" id="LC202">&nbsp;	<span class="cm">/**</span></div><div class="line" id="LC203"><span class="cm"> 	 * Replaces a key&#39;s value, failing if item isn&#39;t already in cache.</span></div><div class="line" id="LC204"><span class="cm"> 	 * @param {String} key - Key to set. If this value is not set or not a string an exception is raised.</span></div><div class="line" id="LC205"><span class="cm"> 	 * @param value - Value to set. This can be any value that is JSON compatible (Numbers, Strings, Objects etc.).</span></div><div class="line" id="LC206"><span class="cm"> 	 * @param {number} time - Optional expiration time, either relative number of seconds from current time, or an absolute Unix epoch time in milliseconds.</span></div><div class="line" id="LC207"><span class="cm"> 	 * @param {String} namespace - An optional namespace for the key. This must be string, otherwise an exception is raised.</span></div><div class="line" id="LC208"><span class="cm"> 	 * @returns the used value or false if the key was already used</span></div><div class="line" id="LC209"><span class="cm"> 	 */</span></div><div class="line" id="LC210">	<span class="nx">replace</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">key</span><span class="p">,</span> <span class="nx">value</span><span class="p">,</span> <span class="nx">time</span><span class="p">,</span> <span class="nx">namespace</span><span class="p">){</span></div><div class="line" id="LC211">		<span class="nx">namespace</span> <span class="o">=</span> <span class="nx">namespace</span> <span class="o">||</span> <span class="s1">&#39;default&#39;</span><span class="p">;</span></div><div class="line" id="LC212">		<span class="nx">time</span> <span class="o">=</span> <span class="nx">time</span> <span class="o">||</span> <span class="kc">false</span><span class="p">;</span></div><div class="line" id="LC213">		<span class="k">if</span><span class="p">(</span><span class="nx">time</span> <span class="o">&amp;&amp;</span> <span class="nx">time</span><span class="o">&lt;</span><span class="p">(</span><span class="k">new</span> <span class="nb">Date</span><span class="p">()).</span><span class="nx">getTime</span><span class="p">()){</span></div><div class="line" id="LC214">			<span class="nx">time</span> <span class="o">=</span> <span class="p">(</span><span class="k">new</span> <span class="nb">Date</span><span class="p">()).</span><span class="nx">getTime</span><span class="p">()</span><span class="o">+</span><span class="nx">time</span></div><div class="line" id="LC215">		<span class="p">}</span></div><div class="line" id="LC216">		<span class="k">if</span><span class="p">(</span><span class="o">!</span><span class="nx">key</span> <span class="o">||</span> <span class="p">(</span><span class="k">typeof</span> <span class="nx">key</span> <span class="o">!=</span> <span class="s2">&quot;string&quot;</span> <span class="o">&amp;&amp;</span> <span class="k">typeof</span> <span class="nx">key</span> <span class="o">!=</span> <span class="s2">&quot;number&quot;</span><span class="p">)){</span></div><div class="line" id="LC217">			<span class="k">throw</span> <span class="k">new</span> <span class="nx">TypeError</span><span class="p">(</span><span class="s1">&#39;Key name must be string or numeric&#39;</span><span class="p">);</span></div><div class="line" id="LC218">		<span class="p">}</span></div><div class="line" id="LC219">		<span class="k">if</span><span class="p">(</span><span class="k">typeof</span> <span class="nx">namespace</span> <span class="o">!=</span> <span class="s2">&quot;string&quot;</span> <span class="o">&amp;&amp;</span> <span class="k">typeof</span> <span class="nx">namespace</span> <span class="o">!=</span> <span class="s2">&quot;number&quot;</span><span class="p">){</span></div><div class="line" id="LC220">			<span class="k">throw</span> <span class="k">new</span> <span class="nx">TypeError</span><span class="p">(</span><span class="s1">&#39;Namespace name must be string or numeric&#39;</span><span class="p">);</span></div><div class="line" id="LC221">		<span class="p">}</span></div><div class="line" id="LC222">		<span class="k">if</span><span class="p">(</span><span class="o">!</span><span class="k">this</span><span class="p">.</span><span class="nx">storage</span><span class="p">[</span><span class="nx">namespace</span><span class="p">]){</span></div><div class="line" id="LC223">			<span class="k">this</span><span class="p">.</span><span class="nx">storage</span><span class="p">[</span><span class="nx">namespace</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span></div><div class="line" id="LC224">		<span class="p">}</span></div><div class="line" id="LC225">		<span class="k">if</span><span class="p">(</span><span class="o">!</span><span class="k">this</span><span class="p">.</span><span class="nx">storage</span><span class="p">[</span><span class="nx">namespace</span><span class="p">].</span><span class="nx">hasOwnProperty</span><span class="p">(</span><span class="nx">key</span><span class="p">)){</span></div><div class="line" id="LC226">			<span class="k">return</span> <span class="kc">false</span><span class="p">;</span></div><div class="line" id="LC227">		<span class="p">}</span></div><div class="line" id="LC228">		<span class="k">this</span><span class="p">.</span><span class="nx">storage</span><span class="p">[</span><span class="nx">namespace</span><span class="p">][</span><span class="nx">key</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="nx">value</span><span class="o">:</span> <span class="nx">value</span><span class="p">,</span> <span class="nx">time</span><span class="o">:</span> <span class="nx">time</span><span class="p">};</span></div><div class="line" id="LC229">		<span class="k">this</span><span class="p">.</span><span class="nx">save</span><span class="p">();</span></div><div class="line" id="LC230">		<span class="k">return</span> <span class="nx">value</span> <span class="o">||</span> <span class="kc">true</span><span class="p">;</span></div><div class="line" id="LC231">	<span class="p">},</span></div><div class="line" id="LC232">&nbsp;</div><div class="line" id="LC233">&nbsp;	<span class="cm">/**</span></div><div class="line" id="LC234"><span class="cm"> 	 * Automically increments a key&#39;s value.</span></div><div class="line" id="LC235"><span class="cm"> 	 * @param {String} key - Key to increment. If this value is not set or not a string an exception is raised.</span></div><div class="line" id="LC236"><span class="cm"> 	 * @param {Number} delta - Numric value to increment key by, defaulting to 1.</span></div><div class="line" id="LC237"><span class="cm"> 	 * @param {String} namespace - An optional namespace for the key. This must be string, otherwise an exception is raised.</span></div><div class="line" id="LC238"><span class="cm"> 	 * @param {Number} initial_value - An initial value to be used if the key does not yet exist in the cache. Ignored if the key already exists.</span></div><div class="line" id="LC239"><span class="cm"> 	 * @returns the new value</span></div><div class="line" id="LC240"><span class="cm"> 	 */</span></div><div class="line" id="LC241">	<span class="nx">incr</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">key</span><span class="p">,</span> <span class="nx">delta</span><span class="p">,</span> <span class="nx">namespace</span><span class="p">,</span> <span class="nx">initial_value</span><span class="p">){</span></div><div class="line" id="LC242">		<span class="nx">namespace</span> <span class="o">=</span> <span class="nx">namespace</span> <span class="o">||</span> <span class="s1">&#39;default&#39;</span><span class="p">;</span></div><div class="line" id="LC243">		<span class="nx">delta</span> <span class="o">=</span> <span class="nx">delta</span> <span class="o">||</span> <span class="mi">1</span><span class="p">;</span></div><div class="line" id="LC244">		<span class="nx">initial_value</span> <span class="o">=</span> <span class="nx">initial_value</span> <span class="o">||</span> <span class="mi">0</span><span class="p">;</span></div><div class="line" id="LC245">		<span class="nx">time</span> <span class="o">=</span> <span class="nx">time</span> <span class="o">||</span> <span class="kc">false</span><span class="p">;</span></div><div class="line" id="LC246">		<span class="k">if</span><span class="p">(</span><span class="nx">time</span> <span class="o">&amp;&amp;</span> <span class="nx">time</span><span class="o">&lt;</span><span class="p">(</span><span class="k">new</span> <span class="nb">Date</span><span class="p">()).</span><span class="nx">getTime</span><span class="p">()){</span></div><div class="line" id="LC247">			<span class="nx">time</span> <span class="o">=</span> <span class="p">(</span><span class="k">new</span> <span class="nb">Date</span><span class="p">()).</span><span class="nx">getTime</span><span class="p">()</span><span class="o">+</span><span class="nx">time</span></div><div class="line" id="LC248">		<span class="p">}</span></div><div class="line" id="LC249">		<span class="k">if</span><span class="p">(</span><span class="o">!</span><span class="nx">key</span> <span class="o">||</span> <span class="p">(</span><span class="k">typeof</span> <span class="nx">key</span> <span class="o">!=</span> <span class="s2">&quot;string&quot;</span> <span class="o">&amp;&amp;</span> <span class="k">typeof</span> <span class="nx">key</span> <span class="o">!=</span> <span class="s2">&quot;number&quot;</span><span class="p">)){</span></div><div class="line" id="LC250">			<span class="k">throw</span> <span class="k">new</span> <span class="nx">TypeError</span><span class="p">(</span><span class="s1">&#39;Key name must be string or numeric&#39;</span><span class="p">);</span></div><div class="line" id="LC251">		<span class="p">}</span></div><div class="line" id="LC252">		<span class="k">if</span><span class="p">(</span><span class="k">typeof</span> <span class="nx">namespace</span> <span class="o">!=</span> <span class="s2">&quot;string&quot;</span> <span class="o">&amp;&amp;</span> <span class="k">typeof</span> <span class="nx">namespace</span> <span class="o">!=</span> <span class="s2">&quot;number&quot;</span><span class="p">){</span></div><div class="line" id="LC253">			<span class="k">throw</span> <span class="k">new</span> <span class="nx">TypeError</span><span class="p">(</span><span class="s1">&#39;Namespace name must be string or numeric&#39;</span><span class="p">);</span></div><div class="line" id="LC254">		<span class="p">}</span></div><div class="line" id="LC255">		<span class="k">if</span><span class="p">(</span><span class="k">typeof</span> <span class="nx">delta</span> <span class="o">!=</span> <span class="s2">&quot;number&quot;</span><span class="p">){</span></div><div class="line" id="LC256">			<span class="k">throw</span> <span class="k">new</span> <span class="nx">TypeError</span><span class="p">(</span><span class="s1">&#39;Delta value must be number&#39;</span><span class="p">);</span></div><div class="line" id="LC257">		<span class="p">}</span></div><div class="line" id="LC258">		<span class="k">if</span><span class="p">(</span><span class="o">!</span><span class="k">this</span><span class="p">.</span><span class="nx">storage</span><span class="p">[</span><span class="nx">namespace</span><span class="p">]){</span></div><div class="line" id="LC259">			<span class="k">this</span><span class="p">.</span><span class="nx">storage</span><span class="p">[</span><span class="nx">namespace</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span></div><div class="line" id="LC260">		<span class="p">}</span></div><div class="line" id="LC261">		<span class="k">if</span><span class="p">(</span><span class="o">!</span><span class="k">this</span><span class="p">.</span><span class="nx">storage</span><span class="p">[</span><span class="nx">namespace</span><span class="p">].</span><span class="nx">hasOwnProperty</span><span class="p">(</span><span class="nx">key</span><span class="p">)</span> <span class="o">||</span> <span class="k">typeof</span> <span class="k">this</span><span class="p">.</span><span class="nx">storage</span><span class="p">[</span><span class="nx">namespace</span><span class="p">][</span><span class="nx">key</span><span class="p">]</span> <span class="o">!=</span> <span class="s2">&quot;number&quot;</span><span class="p">){</span></div><div class="line" id="LC262">			<span class="k">this</span><span class="p">.</span><span class="nx">storage</span><span class="p">[</span><span class="nx">namespace</span><span class="p">][</span><span class="nx">key</span><span class="p">].</span><span class="nx">value</span> <span class="o">=</span> <span class="nx">initial_value</span><span class="p">;</span></div><div class="line" id="LC263">			<span class="k">this</span><span class="p">.</span><span class="nx">save</span><span class="p">();</span></div><div class="line" id="LC264">			<span class="k">return</span> <span class="nx">initial_value</span><span class="p">;</span></div><div class="line" id="LC265">		<span class="p">}</span></div><div class="line" id="LC266">		<span class="k">this</span><span class="p">.</span><span class="nx">storage</span><span class="p">[</span><span class="nx">namespace</span><span class="p">][</span><span class="nx">key</span><span class="p">].</span><span class="nx">value</span> <span class="o">+=</span> <span class="nx">delta</span></div><div class="line" id="LC267">		<span class="k">this</span><span class="p">.</span><span class="nx">save</span><span class="p">();</span></div><div class="line" id="LC268">		<span class="k">return</span> <span class="nx">value</span> <span class="o">||</span> <span class="kc">true</span><span class="p">;</span></div><div class="line" id="LC269">	<span class="p">},</span></div><div class="line" id="LC270">&nbsp;</div><div class="line" id="LC271">&nbsp;	<span class="cm">/**</span></div><div class="line" id="LC272"><span class="cm"> 	 * Automically decrements a key&#39;s value.</span></div><div class="line" id="LC273"><span class="cm"> 	 * @param {String} key - Key to decrement. If this value is not set or not a string an exception is raised.</span></div><div class="line" id="LC274"><span class="cm"> 	 * @param {Number} delta - Numric value to decrement key by, defaulting to 1.</span></div><div class="line" id="LC275"><span class="cm"> 	 * @param {String} namespace - An optional namespace for the key. This must be string, otherwise an exception is raised.</span></div><div class="line" id="LC276"><span class="cm"> 	 * @param {Number} initial_value - An initial value to be used if the key does not yet exist in the cache. Ignored if the key already exists.</span></div><div class="line" id="LC277"><span class="cm"> 	 * @returns the new value</span></div><div class="line" id="LC278"><span class="cm"> 	 */</span></div><div class="line" id="LC279">	<span class="nx">decr</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">key</span><span class="p">,</span> <span class="nx">delta</span><span class="p">,</span> <span class="nx">namespace</span><span class="p">,</span> <span class="nx">initial_value</span><span class="p">){</span></div><div class="line" id="LC280">		<span class="nx">namespace</span> <span class="o">=</span> <span class="nx">namespace</span> <span class="o">||</span> <span class="s1">&#39;default&#39;</span><span class="p">;</span></div><div class="line" id="LC281">		<span class="nx">delta</span> <span class="o">=</span> <span class="nx">delta</span> <span class="o">||</span> <span class="mi">1</span><span class="p">;</span></div><div class="line" id="LC282">		<span class="nx">initial_value</span> <span class="o">=</span> <span class="nx">initial_value</span> <span class="o">||</span> <span class="mi">0</span><span class="p">;</span></div><div class="line" id="LC283">		<span class="nx">time</span> <span class="o">=</span> <span class="nx">time</span> <span class="o">||</span> <span class="kc">false</span><span class="p">;</span></div><div class="line" id="LC284">		<span class="k">if</span><span class="p">(</span><span class="nx">time</span> <span class="o">&amp;&amp;</span> <span class="nx">time</span><span class="o">&lt;</span><span class="p">(</span><span class="k">new</span> <span class="nb">Date</span><span class="p">()).</span><span class="nx">getTime</span><span class="p">()){</span></div><div class="line" id="LC285">			<span class="nx">time</span> <span class="o">=</span> <span class="p">(</span><span class="k">new</span> <span class="nb">Date</span><span class="p">()).</span><span class="nx">getTime</span><span class="p">()</span><span class="o">+</span><span class="nx">time</span></div><div class="line" id="LC286">		<span class="p">}</span></div><div class="line" id="LC287">		<span class="k">if</span><span class="p">(</span><span class="o">!</span><span class="nx">key</span> <span class="o">||</span> <span class="p">(</span><span class="k">typeof</span> <span class="nx">key</span> <span class="o">!=</span> <span class="s2">&quot;string&quot;</span> <span class="o">&amp;&amp;</span> <span class="k">typeof</span> <span class="nx">key</span> <span class="o">!=</span> <span class="s2">&quot;number&quot;</span><span class="p">)){</span></div><div class="line" id="LC288">			<span class="k">throw</span> <span class="k">new</span> <span class="nx">TypeError</span><span class="p">(</span><span class="s1">&#39;Key name must be string or numeric&#39;</span><span class="p">);</span></div><div class="line" id="LC289">		<span class="p">}</span></div><div class="line" id="LC290">		<span class="k">if</span><span class="p">(</span><span class="k">typeof</span> <span class="nx">namespace</span> <span class="o">!=</span> <span class="s2">&quot;string&quot;</span> <span class="o">&amp;&amp;</span> <span class="k">typeof</span> <span class="nx">namespace</span> <span class="o">!=</span> <span class="s2">&quot;number&quot;</span><span class="p">){</span></div><div class="line" id="LC291">			<span class="k">throw</span> <span class="k">new</span> <span class="nx">TypeError</span><span class="p">(</span><span class="s1">&#39;Namespace name must be string or numeric&#39;</span><span class="p">);</span></div><div class="line" id="LC292">		<span class="p">}</span></div><div class="line" id="LC293">		<span class="k">if</span><span class="p">(</span><span class="k">typeof</span> <span class="nx">delta</span> <span class="o">!=</span> <span class="s2">&quot;number&quot;</span><span class="p">){</span></div><div class="line" id="LC294">			<span class="k">throw</span> <span class="k">new</span> <span class="nx">TypeError</span><span class="p">(</span><span class="s1">&#39;Delta value must be number&#39;</span><span class="p">);</span></div><div class="line" id="LC295">		<span class="p">}</span></div><div class="line" id="LC296">		<span class="k">if</span><span class="p">(</span><span class="o">!</span><span class="k">this</span><span class="p">.</span><span class="nx">storage</span><span class="p">[</span><span class="nx">namespace</span><span class="p">]){</span></div><div class="line" id="LC297">			<span class="k">this</span><span class="p">.</span><span class="nx">storage</span><span class="p">[</span><span class="nx">namespace</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span></div><div class="line" id="LC298">		<span class="p">}</span></div><div class="line" id="LC299">		<span class="k">if</span><span class="p">(</span><span class="o">!</span><span class="k">this</span><span class="p">.</span><span class="nx">storage</span><span class="p">[</span><span class="nx">namespace</span><span class="p">].</span><span class="nx">hasOwnProperty</span><span class="p">(</span><span class="nx">key</span><span class="p">)</span> <span class="o">||</span> <span class="k">typeof</span> <span class="k">this</span><span class="p">.</span><span class="nx">storage</span><span class="p">[</span><span class="nx">namespace</span><span class="p">][</span><span class="nx">key</span><span class="p">]</span> <span class="o">!=</span> <span class="s2">&quot;number&quot;</span><span class="p">){</span></div><div class="line" id="LC300">			<span class="k">this</span><span class="p">.</span><span class="nx">storage</span><span class="p">[</span><span class="nx">namespace</span><span class="p">][</span><span class="nx">key</span><span class="p">].</span><span class="nx">value</span> <span class="o">=</span> <span class="nx">initial_value</span><span class="p">;</span></div><div class="line" id="LC301">			<span class="k">this</span><span class="p">.</span><span class="nx">save</span><span class="p">();</span></div><div class="line" id="LC302">			<span class="k">return</span> <span class="nx">initial_value</span><span class="p">;</span></div><div class="line" id="LC303">		<span class="p">}</span></div><div class="line" id="LC304">		<span class="k">this</span><span class="p">.</span><span class="nx">storage</span><span class="p">[</span><span class="nx">namespace</span><span class="p">][</span><span class="nx">key</span><span class="p">].</span><span class="nx">value</span> <span class="o">-=</span> <span class="nx">delta</span></div><div class="line" id="LC305">		<span class="k">this</span><span class="p">.</span><span class="nx">save</span><span class="p">();</span></div><div class="line" id="LC306">		<span class="k">return</span> <span class="nx">value</span> <span class="o">||</span> <span class="kc">true</span><span class="p">;</span></div><div class="line" id="LC307">	<span class="p">},</span></div><div class="line" id="LC308">&nbsp;</div><div class="line" id="LC309">	<span class="cm">/**</span></div><div class="line" id="LC310"><span class="cm"> 	 * Deletes everything in cache.</span></div><div class="line" id="LC311"><span class="cm"> 	 * @returns true</span></div><div class="line" id="LC312"><span class="cm"> 	 */</span></div><div class="line" id="LC313">	<span class="nx">flush_all</span><span class="o">:</span> <span class="kd">function</span><span class="p">(){</span></div><div class="line" id="LC314">		<span class="k">this</span><span class="p">.</span><span class="nx">storage</span> <span class="o">=</span> <span class="p">{}</span></div><div class="line" id="LC315">		<span class="k">this</span><span class="p">.</span><span class="nx">save</span><span class="p">()</span></div><div class="line" id="LC316">		<span class="k">return</span> <span class="kc">true</span><span class="p">;</span></div><div class="line" id="LC317">	<span class="p">}</span></div><div class="line" id="LC318"><span class="p">}</span></div><div class="line" id="LC319">&nbsp;</div><div class="line" id="LC320"><span class="cm">/* Initialization */</span></div><div class="line" id="LC321"><span class="nx">DOMCached</span><span class="p">.</span><span class="nx">init</span><span class="p">();</span></div><div class="line" id="LC322">&nbsp;</div></pre></div>
            
          </td>
        </tr>
      </table>
    
  </div>


      </div>
    </div>

  


    </div>
  
      

      <div class="push"></div>
    </div>

    <div id="footer">
      <div class="site">
        <div class="info">
          <div class="links">
            <a href="http://github.com/blog"><b>Blog</b></a> |
            <a href="http://support.github.com/">Support</a> |
            <a href="http://github.com/training">Training</a> |
            <a href="http://github.com/contact">Contact</a> |
            <a href="http://develop.github.com">API</a> |
            <a href="http://status.github.com">Status</a> |
            <a href="http://twitter.com/github">Twitter</a> |
            <a href="http://help.github.com">Help</a> |
            <a href="http://github.com/security">Security</a>
          </div>
          <div class="company">
            &copy;
            2010
            <span id="_rrt" title="0.09919s from fe4.rs.github.com">GitHub</span> Inc.
            All rights reserved. |
            <a href="/site/terms">Terms of Service</a> |
            <a href="/site/privacy">Privacy Policy</a>
          </div>
        </div>
        <div class="sponsor">
          <div>
            Powered by the <a href="http://www.rackspace.com ">Dedicated
            Servers</a> and<br/> <a href="http://www.rackspacecloud.com">Cloud
            Computing</a> of Rackspace Hosting<span>&reg;</span>
          </div>
          <a href="http://www.rackspace.com">
            <img alt="Dedicated Server" src="http://assets1.github.com/images/modules/footer/rackspace_logo.png?f9c50ccd49855b8314bb5e64f172c40d0123688e" />
          </a>
        </div>
      </div>
    </div>

    <script>window._auth_token = "cf8ed03a5e838e230b73d73ce25a2811a9cf1e60"</script>
    
    
  </body>
</html>

