<!DOCTYPE html><htmllang="en"><head><title>lib/helpers</title></head><metahttp-equiv="Content-Type"content="text/html; charset=utf-8"><metaname="viewport"content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0"><metaname="groc-relative-root"content="../"><metaname="groc-document-path"content="lib/helpers"><metaname="groc-project-path"content="lib/helpers.js"><linkrel="stylesheet"type="text/css"media="all"href="../assets/style.css"><scripttype="text/javascript"src="../assets/behavior.js"></script><body><divid="meta"><divclass="file-path">lib/helpers.js</div></div><divid="document"><divclass="segment"><divclass="comments"><divclass="wrapper"><h2id="helpers">Helpers</h2></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Just some common functions needed in multiple places within the library.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="kd">var</span><spanclass="nx">_</span><spanclass="o">=</span><spanclass="nx">require</span><spanclass="p">(</span><spanclass="s1">'lodash'</span><spanclass="p">);</span>
<spanclass="kd">var</span><spanclass="nx">Helpers</span><spanclass="o">=</span><spanclass="nx">exports</span><spanclass="p">.</span><spanclass="nx">Helpers</span><spanclass="o">=</span><spanclass="p">{</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Simple deep clone for arrays & objects.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">deepClone</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">obj</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Pick off the attributes from only the current layer of the object.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">skim</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">data</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>The function name says it all.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">capitalize</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">word</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Sorts an object based on the names.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">sortObject</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">obj</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>The standard Backbone.js <code>extend</code> method, for some nice
"sugar" on proper prototypal inheritance.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">extend</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">protoProps</span><spanclass="p">,</span><spanclass="nx">staticProps</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="kd">var</span><spanclass="nx">child</span><spanclass="p">;</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>The constructor function for the new subclass is either defined by you
by us to simply call the parent's constructor.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="k">if</span><spanclass="p">(</span><spanclass="nx">protoProps</span><spanclass="o">&&</span><spanclass="nx">_</span><spanclass="p">.</span><spanclass="nx">has</span><spanclass="p">(</span><spanclass="nx">protoProps</span><spanclass="p">,</span><spanclass="s1">'constructor'</span><spanclass="p">))</span><spanclass="p">{</span>
<spanclass="p">}</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Add static properties to the constructor function, if supplied.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">_</span><spanclass="p">.</span><spanclass="nx">extend</span><spanclass="p">(</span><spanclass="nx">child</span><spanclass="p">,</span><spanclass="nx">parent</span><spanclass="p">,</span><spanclass="nx">staticProps</span><spanclass="p">);</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Set the prototype chain to inherit from <code>parent</code>, without calling
<spanclass="nx">child</span><spanclass="p">.</span><spanclass="nx">prototype</span><spanclass="o">=</span><spanclass="k">new</span><spanclass="nx">Surrogate</span><spanclass="p">;</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Add prototype properties (instance properties) to the subclass,
if supplied.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="k">if</span><spanclass="p">(</span><spanclass="nx">protoProps</span><spanclass="p">)</span><spanclass="nx">_</span><spanclass="p">.</span><spanclass="nx">extend</span><spanclass="p">(</span><spanclass="nx">child</span><spanclass="p">.</span><spanclass="nx">prototype</span><spanclass="p">,</span><spanclass="nx">protoProps</span><spanclass="p">);</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Set a convenience property in case the parent's prototype is needed
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>The <code>format</code> function is borrowed from the Node.js <code>utils</code> module,
frontend as well.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">format</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">f</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">};</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Regex used in the <code>Helpers.format</code> function.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="kd">var</span><spanclass="nx">formatRegExp</span><spanclass="o">=</span><spanclass="sr">/%[sdj%]/g</span><spanclass="p">;</span></div></div></div></div></body></html>