From c83fcdd487796e6cdcf32c2cec0c00760085fcf1 Mon Sep 17 00:00:00 2001 From: Damien Cassou <damien@cassou.me> Date: Fri, 8 Dec 2023 11:34:49 +0100 Subject: [PATCH] Delete unmaintained docs/ folder --- docs/docco/abstractSegment.html | 78 ---- docs/docco/core.html | 21 - docs/docco/docco.css | 192 -------- docs/docco/events.html | 317 ------------- docs/docco/hashLocation.html | 173 ------- docs/docco/htmlCanvas.html | 507 --------------------- docs/docco/optionalParameterSegment.html | 60 --- docs/docco/parameterSegment.html | 118 ----- docs/docco/route.html | 270 ----------- docs/docco/routeFactory.html | 71 --- docs/docco/routeMatchResult.html | 134 ------ docs/docco/router.html | 552 ----------------------- docs/docco/staticSegment.html | 44 -- docs/docco/url.html | 156 ------- docs/docco/widget-extensions.html | 16 - docs/docco/widget.html | 455 ------------------- 16 files changed, 3164 deletions(-) delete mode 100644 docs/docco/abstractSegment.html delete mode 100644 docs/docco/core.html delete mode 100644 docs/docco/docco.css delete mode 100644 docs/docco/events.html delete mode 100644 docs/docco/hashLocation.html delete mode 100644 docs/docco/htmlCanvas.html delete mode 100644 docs/docco/optionalParameterSegment.html delete mode 100644 docs/docco/parameterSegment.html delete mode 100644 docs/docco/route.html delete mode 100644 docs/docco/routeFactory.html delete mode 100644 docs/docco/routeMatchResult.html delete mode 100644 docs/docco/router.html delete mode 100644 docs/docco/staticSegment.html delete mode 100644 docs/docco/url.html delete mode 100644 docs/docco/widget-extensions.html delete mode 100644 docs/docco/widget.html diff --git a/docs/docco/abstractSegment.html b/docs/docco/abstractSegment.html deleted file mode 100644 index 57027ca9..00000000 --- a/docs/docco/abstractSegment.html +++ /dev/null @@ -1,78 +0,0 @@ -<!DOCTYPE html> <html> <head> <title>abstractSegment.js</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <link rel="stylesheet" media="all" href="docco.css" /> </head> <body> <div id="container"> <div id="background"></div> <div id="jump_to"> Jump To … <div id="jump_wrapper"> <div id="jump_page"> <a class="source" href="core.html"> core.js </a> <a class="source" href="events.html"> events.js </a> <a class="source" href="htmlCanvas.html"> htmlCanvas.js </a> <a class="source" href="router.html"> router.js </a> <a class="source" href="abstractSegment.html"> abstractSegment.js </a> <a class="source" href="hashLocation.html"> hashLocation.js </a> <a class="source" href="optionalParameterSegment.html"> optionalParameterSegment.js </a> <a class="source" href="parameterSegment.html"> parameterSegment.js </a> <a class="source" href="route.html"> route.js </a> <a class="source" href="routeFactory.html"> routeFactory.js </a> <a class="source" href="routeMatchResult.html"> routeMatchResult.js </a> <a class="source" href="router.html"> router.js </a> <a class="source" href="staticSegment.html"> staticSegment.js </a> <a class="source" href="url.html"> url.js </a> <a class="source" href="widget-extensions.html"> widget-extensions.js </a> <a class="source" href="widget.html"> widget.js </a> </div> </div> </div> <table cellpadding="0" cellspacing="0"> <thead> <tr> <th class="docs"> <h1> abstractSegment.js </h1> </th> <th class="code"> </th> </tr> </thead> <tbody> <tr id="section-1"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-1">¶</a> </div> </td> <td class="code"> <div class="highlight"><pre><span></span><span class="nx">define</span><span class="p">([</span> - <span class="s1">'klassified'</span> -<span class="p">],</span> <span class="kd">function</span><span class="p">(</span><span class="nx">object</span><span class="p">)</span> <span class="p">{</span> - <span class="cm">/**</span> -<span class="cm"> * A segment represents a single part of a route that can be matched</span> -<span class="cm"> * against a URL segment using `match()`.</span> -<span class="cm"> *</span> -<span class="cm"> * @param {{}} spec</span> -<span class="cm"> * @param {string} segmentString</span> -<span class="cm"> * @param {{}} spec.options all route options</span> -<span class="cm"> * @param my</span> -<span class="cm"> * @returns {abstractSegment}</span> -<span class="cm"> */</span> - <span class="kd">var</span> <span class="nx">abstractSegment</span> <span class="o">=</span> <span class="nx">object</span><span class="p">.</span><span class="nx">subclass</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">that</span><span class="p">,</span> <span class="nx">my</span><span class="p">)</span> <span class="p">{</span> - - <span class="nx">my</span><span class="p">.</span><span class="nx">initialize</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">spec</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">my</span><span class="p">.</span><span class="kr">super</span><span class="p">(</span><span class="nx">spec</span><span class="p">);</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">segmentString</span> <span class="o">=</span> <span class="nx">spec</span><span class="p">.</span><span class="nx">segmentString</span><span class="p">;</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">options</span> <span class="o">=</span> <span class="nx">spec</span><span class="p">.</span><span class="nx">options</span> <span class="o">||</span> <span class="p">{};</span> - <span class="p">};</span></pre></div> </td> </tr> <tr id="section-2"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-2">¶</a> </div> <p>Public</p> </td> <td class="code"> <div class="highlight"><pre> <span class="cm">/**</span> -<span class="cm"> * Answers true if route segment match URL segment</span> -<span class="cm"> *</span> -<span class="cm"> * @param {string} urlSegment</span> -<span class="cm"> * @returns {boolean}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">match</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">urlSegment</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="kc">false</span><span class="p">;</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Value captured for urlSegment</span> -<span class="cm"> *</span> -<span class="cm"> * @param {string} urlSegment</span> -<span class="cm"> * @returns {*}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">getValue</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">urlSegment</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">my</span><span class="p">.</span><span class="nx">segmentString</span><span class="p">;</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Variable part of the route.</span> -<span class="cm"> *</span> -<span class="cm"> * @returns {boolean}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">isParameter</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span> - <span class="k">return</span> <span class="kc">false</span><span class="p">;</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Optional segments can be omitted in URLs and the</span> -<span class="cm"> * URL will still match the route if all other non</span> -<span class="cm"> * optional segments match.</span> -<span class="cm"> *</span> -<span class="cm"> * @returns {boolean}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">isOptional</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span> - <span class="k">return</span> <span class="kc">false</span><span class="p">;</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * String representation for segment that can be used eg. when debugging.</span> -<span class="cm"> * @returns {*}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">toString</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">my</span><span class="p">.</span><span class="nx">segmentString</span><span class="p">;</span> - <span class="p">};</span> - <span class="p">});</span> - - <span class="nx">abstractSegment</span><span class="p">.</span><span class="kr">class</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">that</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">match</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">segmentString</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="kc">false</span><span class="p">;</span> - <span class="p">};</span> - <span class="p">});</span> - - <span class="k">return</span> <span class="nx">abstractSegment</span><span class="p">;</span> -<span class="p">});</span> - -</pre></div> </td> </tr> </tbody> </table> </div> </body> </html> \ No newline at end of file diff --git a/docs/docco/core.html b/docs/docco/core.html deleted file mode 100644 index 4e3eea16..00000000 --- a/docs/docco/core.html +++ /dev/null @@ -1,21 +0,0 @@ -<!DOCTYPE html> <html> <head> <title>core.js</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <link rel="stylesheet" media="all" href="docco.css" /> </head> <body> <div id="container"> <div id="background"></div> <div id="jump_to"> Jump To … <div id="jump_wrapper"> <div id="jump_page"> <a class="source" href="core.html"> core.js </a> <a class="source" href="events.html"> events.js </a> <a class="source" href="htmlCanvas.html"> htmlCanvas.js </a> <a class="source" href="router.html"> router.js </a> <a class="source" href="abstractSegment.html"> abstractSegment.js </a> <a class="source" href="hashLocation.html"> hashLocation.js </a> <a class="source" href="optionalParameterSegment.html"> optionalParameterSegment.js </a> <a class="source" href="parameterSegment.html"> parameterSegment.js </a> <a class="source" href="route.html"> route.js </a> <a class="source" href="routeFactory.html"> routeFactory.js </a> <a class="source" href="routeMatchResult.html"> routeMatchResult.js </a> <a class="source" href="router.html"> router.js </a> <a class="source" href="staticSegment.html"> staticSegment.js </a> <a class="source" href="url.html"> url.js </a> <a class="source" href="widget-extensions.html"> widget-extensions.js </a> <a class="source" href="widget.html"> widget.js </a> </div> </div> </div> <table cellpadding="0" cellspacing="0"> <thead> <tr> <th class="docs"> <h1> core.js </h1> </th> <th class="code"> </th> </tr> </thead> <tbody> <tr id="section-1"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-1">¶</a> </div> </td> <td class="code"> <div class="highlight"><pre><span></span><span class="nx">define</span><span class="p">(</span> - <span class="p">[</span> - <span class="s1">'./htmlCanvas'</span><span class="p">,</span> - <span class="s1">'./widget'</span><span class="p">,</span> - <span class="s1">'./widget-extensions'</span><span class="p">,</span> - <span class="s1">'./router'</span><span class="p">,</span> - <span class="s1">'./events'</span> - <span class="p">],</span> - - <span class="kd">function</span> <span class="p">(</span><span class="nx">htmlCanvas</span><span class="p">,</span> <span class="nx">widget</span><span class="p">,</span> <span class="nx">ext</span><span class="p">,</span> <span class="nx">router</span><span class="p">,</span> <span class="nx">events</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="p">{</span> - <span class="nx">htmlCanvas</span> <span class="o">:</span> <span class="nx">htmlCanvas</span><span class="p">,</span> - <span class="nx">widget</span> <span class="o">:</span> <span class="nx">widget</span><span class="p">,</span> - <span class="nx">ext</span> <span class="o">:</span> <span class="nx">ext</span><span class="p">,</span> - <span class="nx">router</span> <span class="o">:</span> <span class="nx">router</span><span class="p">,</span> - <span class="nx">events</span> <span class="o">:</span> <span class="nx">events</span> - <span class="p">};</span> - <span class="p">}</span> -<span class="p">);</span> - -</pre></div> </td> </tr> </tbody> </table> </div> </body> </html> \ No newline at end of file diff --git a/docs/docco/docco.css b/docs/docco/docco.css deleted file mode 100644 index 04cc7ecb..00000000 --- a/docs/docco/docco.css +++ /dev/null @@ -1,192 +0,0 @@ -/*--------------------- Layout and Typography ----------------------------*/ -body { - font-family: 'Palatino Linotype', 'Book Antiqua', Palatino, FreeSerif, serif; - font-size: 15px; - line-height: 22px; - color: #252519; - margin: 0; padding: 0; -} -a { - color: #261a3b; -} - a:visited { - color: #261a3b; - } -p { - margin: 0 0 15px 0; -} -h1, h2, h3, h4, h5, h6 { - margin: 0px 0 15px 0; -} - h1 { - margin-top: 40px; - } -hr { - border: 0 none; - border-top: 1px solid #e5e5ee; - height: 1px; - margin: 20px 0; -} -#container { - position: relative; -} -#background { - position: fixed; - top: 0; left: 525px; right: 0; bottom: 0; - background: #f5f5ff; - border-left: 1px solid #e5e5ee; - z-index: -1; -} -#jump_to, #jump_page { - background: white; - -webkit-box-shadow: 0 0 25px #777; -moz-box-shadow: 0 0 25px #777; - -webkit-border-bottom-left-radius: 5px; -moz-border-radius-bottomleft: 5px; - font: 10px Arial; - text-transform: uppercase; - cursor: pointer; - text-align: right; -} -#jump_to, #jump_wrapper { - position: fixed; - right: 0; top: 0; - padding: 5px 10px; -} - #jump_wrapper { - padding: 0; - display: none; - } - #jump_to:hover #jump_wrapper { - display: block; - } - #jump_page { - padding: 5px 0 3px; - margin: 0 0 25px 25px; - } - #jump_page .source { - display: block; - padding: 5px 10px; - text-decoration: none; - border-top: 1px solid #eee; - } - #jump_page .source:hover { - background: #f5f5ff; - } - #jump_page .source:first-child { - } -table td { - border: 0; - outline: 0; -} - td.docs, th.docs { - max-width: 450px; - min-width: 450px; - min-height: 5px; - padding: 10px 25px 1px 50px; - overflow-x: hidden; - vertical-align: top; - text-align: left; - } - .docs pre { - margin: 15px 0 15px; - padding-left: 15px; - } - .docs p tt, .docs p code { - background: #f8f8ff; - border: 1px solid #dedede; - font-size: 12px; - padding: 0 0.2em; - } - .pilwrap { - position: relative; - } - .pilcrow { - font: 12px Arial; - text-decoration: none; - color: #454545; - position: absolute; - top: 3px; left: -20px; - padding: 1px 2px; - opacity: 0; - -webkit-transition: opacity 0.2s linear; - } - td.docs:hover .pilcrow { - opacity: 1; - } - td.code, th.code { - padding: 14px 15px 16px 25px; - width: 100%; - vertical-align: top; - background: #f5f5ff; - border-left: 1px solid #e5e5ee; - } - pre, tt, code { - font-size: 12px; line-height: 18px; - font-family: Menlo, Monaco, Consolas, "Lucida Console", monospace; - margin: 0; padding: 0; - } - - -/*---------------------- Syntax Highlighting -----------------------------*/ -td.linenos { background-color: #f0f0f0; padding-right: 10px; } -span.lineno { background-color: #f0f0f0; padding: 0 5px 0 5px; } -body .hll { background-color: #ffffcc } -body .c { color: #408080; font-style: italic } /* Comment */ -body .err { border: 1px solid #FF0000 } /* Error */ -body .k { color: #954121 } /* Keyword */ -body .o { color: #666666 } /* Operator */ -body .cm { color: #408080; font-style: italic } /* Comment.Multiline */ -body .cp { color: #BC7A00 } /* Comment.Preproc */ -body .c1 { color: #408080; font-style: italic } /* Comment.Single */ -body .cs { color: #408080; font-style: italic } /* Comment.Special */ -body .gd { color: #A00000 } /* Generic.Deleted */ -body .ge { font-style: italic } /* Generic.Emph */ -body .gr { color: #FF0000 } /* Generic.Error */ -body .gh { color: #000080; font-weight: bold } /* Generic.Heading */ -body .gi { color: #00A000 } /* Generic.Inserted */ -body .go { color: #808080 } /* Generic.Output */ -body .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ -body .gs { font-weight: bold } /* Generic.Strong */ -body .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ -body .gt { color: #0040D0 } /* Generic.Traceback */ -body .kc { color: #954121 } /* Keyword.Constant */ -body .kd { color: #954121; font-weight: bold } /* Keyword.Declaration */ -body .kn { color: #954121; font-weight: bold } /* Keyword.Namespace */ -body .kp { color: #954121 } /* Keyword.Pseudo */ -body .kr { color: #954121; font-weight: bold } /* Keyword.Reserved */ -body .kt { color: #B00040 } /* Keyword.Type */ -body .m { color: #666666 } /* Literal.Number */ -body .s { color: #219161 } /* Literal.String */ -body .na { color: #7D9029 } /* Name.Attribute */ -body .nb { color: #954121 } /* Name.Builtin */ -body .nc { color: #0000FF; font-weight: bold } /* Name.Class */ -body .no { color: #880000 } /* Name.Constant */ -body .nd { color: #AA22FF } /* Name.Decorator */ -body .ni { color: #999999; font-weight: bold } /* Name.Entity */ -body .ne { color: #D2413A; font-weight: bold } /* Name.Exception */ -body .nf { color: #0000FF } /* Name.Function */ -body .nl { color: #A0A000 } /* Name.Label */ -body .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ -body .nt { color: #954121; font-weight: bold } /* Name.Tag */ -body .nv { color: #19469D } /* Name.Variable */ -body .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ -body .w { color: #bbbbbb } /* Text.Whitespace */ -body .mf { color: #666666 } /* Literal.Number.Float */ -body .mh { color: #666666 } /* Literal.Number.Hex */ -body .mi { color: #666666 } /* Literal.Number.Integer */ -body .mo { color: #666666 } /* Literal.Number.Oct */ -body .sb { color: #219161 } /* Literal.String.Backtick */ -body .sc { color: #219161 } /* Literal.String.Char */ -body .sd { color: #219161; font-style: italic } /* Literal.String.Doc */ -body .s2 { color: #219161 } /* Literal.String.Double */ -body .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */ -body .sh { color: #219161 } /* Literal.String.Heredoc */ -body .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */ -body .sx { color: #954121 } /* Literal.String.Other */ -body .sr { color: #BB6688 } /* Literal.String.Regex */ -body .s1 { color: #219161 } /* Literal.String.Single */ -body .ss { color: #19469D } /* Literal.String.Symbol */ -body .bp { color: #954121 } /* Name.Builtin.Pseudo */ -body .vc { color: #19469D } /* Name.Variable.Class */ -body .vg { color: #19469D } /* Name.Variable.Global */ -body .vi { color: #19469D } /* Name.Variable.Instance */ -body .il { color: #666666 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/docs/docco/events.html b/docs/docco/events.html deleted file mode 100644 index 8c35ea78..00000000 --- a/docs/docco/events.html +++ /dev/null @@ -1,317 +0,0 @@ -<!DOCTYPE html> <html> <head> <title>events.js</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <link rel="stylesheet" media="all" href="docco.css" /> </head> <body> <div id="container"> <div id="background"></div> <div id="jump_to"> Jump To … <div id="jump_wrapper"> <div id="jump_page"> <a class="source" href="core.html"> core.js </a> <a class="source" href="events.html"> events.js </a> <a class="source" href="htmlCanvas.html"> htmlCanvas.js </a> <a class="source" href="router.html"> router.js </a> <a class="source" href="abstractSegment.html"> abstractSegment.js </a> <a class="source" href="hashLocation.html"> hashLocation.js </a> <a class="source" href="optionalParameterSegment.html"> optionalParameterSegment.js </a> <a class="source" href="parameterSegment.html"> parameterSegment.js </a> <a class="source" href="route.html"> route.js </a> <a class="source" href="routeFactory.html"> routeFactory.js </a> <a class="source" href="routeMatchResult.html"> routeMatchResult.js </a> <a class="source" href="router.html"> router.js </a> <a class="source" href="staticSegment.html"> staticSegment.js </a> <a class="source" href="url.html"> url.js </a> <a class="source" href="widget-extensions.html"> widget-extensions.js </a> <a class="source" href="widget.html"> widget.js </a> </div> </div> </div> <table cellpadding="0" cellspacing="0"> <thead> <tr> <th class="docs"> <h1> events.js </h1> </th> <th class="code"> </th> </tr> </thead> <tbody> <tr id="section-1"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-1">¶</a> </div> </td> <td class="code"> <div class="highlight"><pre><span></span><span class="nx">define</span><span class="p">([],</span> - <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span> - - <span class="cm">/**</span> -<span class="cm"> * Keeps a list of bindings/callbacks that can be added using **push()** and</span> -<span class="cm"> * removed using **remove()**. *trigger()* executes all callbacks one by one in registration order.</span> -<span class="cm"> *</span> -<span class="cm"> * @param [spec] {Object}</span> -<span class="cm"> * @param [my] {Object}</span> -<span class="cm"> * @returns {event}</span> -<span class="cm"> */</span> - <span class="kd">var</span> <span class="nx">event</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">spec</span><span class="p">,</span> <span class="nx">my</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">my</span> <span class="o">=</span> <span class="nx">my</span> <span class="o">||</span> <span class="p">{};</span> - - <span class="kd">var</span> <span class="nx">that</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">callback</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">bindCallback</span><span class="p">(</span><span class="nx">callback</span><span class="p">);</span> - <span class="p">};</span> - - <span class="kd">var</span> <span class="nx">bindings</span> <span class="o">=</span> <span class="p">[];</span></pre></div> </td> </tr> <tr id="section-2"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-2">¶</a> </div> <h4>Public API</h4> </td> <td class="code"> <div class="highlight"><pre> <span class="cm">/**</span> -<span class="cm"> * Binds callback to event. The callback will be invoked whenever the event is fired.</span> -<span class="cm"> *</span> -<span class="cm"> * @param callback {function}</span> -<span class="cm"> * @returns {eventBinding}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">on</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">callback</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">bindCallback</span><span class="p">(</span><span class="nx">callback</span><span class="p">);</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Like on() except callback will only be fired once</span> -<span class="cm"> *</span> -<span class="cm"> * @param callback {function}</span> -<span class="cm"> * @returns {eventBinding}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">onceOn</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">callback</span><span class="p">)</span> <span class="p">{</span> - <span class="kd">var</span> <span class="nx">onceBinding</span> <span class="o">=</span> <span class="nx">eventBinding</span><span class="p">({</span> - <span class="nx">callback</span><span class="o">:</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">remove</span><span class="p">(</span><span class="nx">onceBinding</span><span class="p">);</span> - <span class="nx">callback</span><span class="p">.</span><span class="nx">apply</span><span class="p">(</span><span class="nx">that</span><span class="p">,</span> <span class="nx">arguments</span><span class="p">);</span> - <span class="p">}</span> - <span class="p">});</span> - - <span class="nx">bindings</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">onceBinding</span><span class="p">);</span> - <span class="k">return</span> <span class="nx">onceBinding</span><span class="p">;</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Removed 'binding' attached to event.</span> -<span class="cm"> * @param name {String} Name of event</span> -<span class="cm"> * @param binding {eventBinding} Binding</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">off</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">binding</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">remove</span><span class="p">(</span><span class="nx">binding</span><span class="p">);</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Trigger event by executing all callbacks one by one in registration order.</span> -<span class="cm"> *</span> -<span class="cm"> * @param arguments {Object|Object[]} Arguments passed to callback of each binding</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">trigger</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span> - <span class="kd">var</span> <span class="nx">params</span> <span class="o">=</span> <span class="nb">Array</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">slice</span><span class="p">.</span><span class="nx">call</span><span class="p">(</span><span class="nx">arguments</span><span class="p">);</span> - <span class="nx">bindings</span><span class="p">.</span><span class="nx">forEach</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">binding</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">binding</span><span class="p">.</span><span class="nx">execute</span><span class="p">(</span><span class="nx">params</span><span class="p">);</span> - <span class="p">});</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Unbind all callbacks bound to this event.</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">dispose</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span> - <span class="nx">bindings</span><span class="p">.</span><span class="nx">slice</span><span class="p">().</span><span class="nx">forEach</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">binding</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">binding</span><span class="p">.</span><span class="nx">unbind</span><span class="p">();</span> - <span class="p">});</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * @param binding {eventBinding}</span> -<span class="cm"> */</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">push</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">binding</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">bindings</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">binding</span><span class="p">);</span> - <span class="nx">binding</span><span class="p">.</span><span class="nx">bind</span><span class="p">(</span><span class="nx">that</span><span class="p">);</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * @param binding {eventBinding}</span> -<span class="cm"> */</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">remove</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">binding</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">bindings</span><span class="p">.</span><span class="nx">splice</span><span class="p">(</span><span class="nx">bindings</span><span class="p">.</span><span class="nx">indexOf</span><span class="p">(</span><span class="nx">binding</span><span class="p">),</span> <span class="mi">1</span><span class="p">);</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Create and add callback binding to event</span> -<span class="cm"> *</span> -<span class="cm"> * @param callback</span> -<span class="cm"> * @returns {eventBinding}</span> -<span class="cm"> */</span> - <span class="kd">function</span> <span class="nx">bindCallback</span><span class="p">(</span><span class="nx">callback</span><span class="p">)</span> <span class="p">{</span> - <span class="kd">var</span> <span class="nx">binding</span> <span class="o">=</span> <span class="nx">eventBinding</span><span class="p">({</span> <span class="nx">callback</span><span class="o">:</span> <span class="nx">callback</span><span class="p">,</span> <span class="nx">event</span><span class="o">:</span> <span class="nx">that</span> <span class="p">});</span> - <span class="nx">bindings</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">binding</span><span class="p">);</span> - <span class="k">return</span> <span class="nx">binding</span><span class="p">;</span> - <span class="p">}</span> - - <span class="k">return</span> <span class="nx">that</span><span class="p">;</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Keeps a list of events.</span> -<span class="cm"> *</span> -<span class="cm"> * @returns {{}}</span> -<span class="cm"> */</span> - <span class="kd">var</span> <span class="nx">eventCategory</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span> - <span class="kd">var</span> <span class="nx">that</span> <span class="o">=</span> <span class="p">{};</span></pre></div> </td> </tr> <tr id="section-3"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-3">¶</a> </div> <p>Map of events with name as key</p> </td> <td class="code"> <div class="highlight"><pre> <span class="kd">var</span> <span class="nx">namedEvents</span> <span class="o">=</span> <span class="p">{};</span> - <span class="kd">var</span> <span class="nx">events</span> <span class="o">=</span> <span class="p">[];</span> - - <span class="cm">/**</span> -<span class="cm"> * Lazily makes sure that an event exists for 'name'.</span> -<span class="cm"> *</span> -<span class="cm"> * @param name {String}</span> -<span class="cm"> * @returns {event} Also return the event</span> -<span class="cm"> */</span> - <span class="kd">function</span> <span class="nx">ensureEventHolderFor</span><span class="p">(</span><span class="nx">name</span><span class="p">)</span> <span class="p">{</span> - <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">hasEventNamed</span><span class="p">(</span><span class="nx">name</span><span class="p">))</span> <span class="p">{</span> - <span class="nx">addEvent</span><span class="p">(</span><span class="nx">event</span><span class="p">(),</span> <span class="nx">name</span><span class="p">);</span> - <span class="p">}</span> - <span class="k">return</span> <span class="nx">namedEvents</span><span class="p">[</span><span class="nx">name</span><span class="p">];</span> - <span class="p">}</span> - - <span class="cm">/**</span> -<span class="cm"> * Create a new event and if name i supplied adds it to event manager</span> -<span class="cm"> *</span> -<span class="cm"> * @param [name] {string} Name of event in eventHandler</span> -<span class="cm"> * @returns {event}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">createEvent</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">name</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">addEvent</span><span class="p">(</span><span class="nx">event</span><span class="p">(),</span> <span class="nx">name</span><span class="p">);</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Binds callback to a named event. The callback will be invoked whenever the event is fired.</span> -<span class="cm"> *</span> -<span class="cm"> * @param name {String}</span> -<span class="cm"> * @param callback {function}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">on</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">name</span><span class="p">,</span> <span class="nx">callback</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">ensureEventHolderFor</span><span class="p">(</span><span class="nx">name</span><span class="p">).</span><span class="nx">on</span><span class="p">(</span><span class="nx">callback</span><span class="p">);</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Removed 'binding' attached to event.</span> -<span class="cm"> * @param name {String} Name of event</span> -<span class="cm"> * @param binding {eventBinding} Binding</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">off</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">name</span><span class="p">,</span> <span class="nx">binding</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">ensureEventHolderFor</span><span class="p">(</span><span class="nx">name</span><span class="p">).</span><span class="nx">off</span><span class="p">(</span><span class="nx">binding</span><span class="p">);</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Like on() except callback will only be fired once</span> -<span class="cm"> *</span> -<span class="cm"> * @param name</span> -<span class="cm"> * @param callback</span> -<span class="cm"> * @returns {*}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">onceOn</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">name</span><span class="p">,</span> <span class="nx">callback</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">ensureEventHolderFor</span><span class="p">(</span><span class="nx">name</span><span class="p">).</span><span class="nx">onceOn</span><span class="p">(</span><span class="nx">callback</span><span class="p">);</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Trigger all callbacks attached to event</span> -<span class="cm"> * @param name</span> -<span class="cm"> * @param arguments Any arguments to trigger is sent as arguments to callback.</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">trigger</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">name</span><span class="p">)</span> <span class="p">{</span> - <span class="kd">var</span> <span class="nx">params</span> <span class="o">=</span> <span class="nb">Array</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">slice</span><span class="p">.</span><span class="nx">call</span><span class="p">(</span><span class="nx">arguments</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> - <span class="kd">var</span> <span class="nx">event</span> <span class="o">=</span> <span class="nx">ensureEventHolderFor</span><span class="p">(</span><span class="nx">name</span><span class="p">);</span> - <span class="nx">event</span><span class="p">.</span><span class="nx">trigger</span><span class="p">.</span><span class="nx">apply</span><span class="p">(</span><span class="nx">that</span><span class="p">,</span> <span class="nx">params</span><span class="p">);</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Dispose all events.</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">dispose</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span> - <span class="nx">events</span><span class="p">.</span><span class="nx">forEach</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">event</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">event</span><span class="p">.</span><span class="nx">dispose</span><span class="p">();</span> - <span class="p">});</span> - - <span class="nx">namedEvents</span> <span class="o">=</span> <span class="p">{};</span> - <span class="nx">events</span> <span class="o">=</span> <span class="p">[];</span> - <span class="p">};</span> - - - <span class="cm">/**</span> -<span class="cm"> * Answers true if an event with name exists</span> -<span class="cm"> *</span> -<span class="cm"> * @param name {String}</span> -<span class="cm"> * @returns {boolean}</span> -<span class="cm"> */</span> - <span class="kd">function</span> <span class="nx">hasEventNamed</span><span class="p">(</span><span class="nx">name</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">namedEvents</span><span class="p">[</span><span class="nx">name</span><span class="p">]</span> <span class="o">!==</span> <span class="kc">undefined</span><span class="p">;</span> - <span class="p">}</span> - - <span class="cm">/**</span> -<span class="cm"> * @param event {event}</span> -<span class="cm"> * @param [name] {string}</span> -<span class="cm"> * @returns {event}</span> -<span class="cm"> */</span> - <span class="kd">function</span> <span class="nx">addEvent</span><span class="p">(</span><span class="nx">event</span><span class="p">,</span> <span class="nx">name</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">events</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">event</span><span class="p">);</span> - <span class="k">if</span><span class="p">(</span><span class="nx">name</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">namedEvents</span><span class="p">[</span><span class="nx">name</span><span class="p">]</span> <span class="o">=</span> <span class="nx">event</span><span class="p">;</span> - <span class="p">}</span> - <span class="k">return</span> <span class="nx">event</span><span class="p">;</span> - <span class="p">}</span> - - <span class="k">return</span> <span class="nx">that</span><span class="p">;</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Binds a callback to an event</span> -<span class="cm"> *</span> -<span class="cm"> * @param spec.callback {function} Callback to execute on event</span> -<span class="cm"> * @param spec.event {event} Event to bind callback to</span> - -<span class="cm"> * @returns {eventBinding}</span> -<span class="cm"> */</span> - <span class="kd">var</span> <span class="nx">eventBinding</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">spec</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">spec</span> <span class="o">=</span> <span class="nx">spec</span> <span class="o">||</span> <span class="p">{};</span> - <span class="kd">var</span> <span class="nx">that</span> <span class="o">=</span> <span class="p">{};</span> - - <span class="kd">var</span> <span class="nx">callback</span> <span class="o">=</span> <span class="nx">spec</span><span class="p">.</span><span class="nx">callback</span><span class="p">;</span> - <span class="kd">var</span> <span class="nx">event</span> <span class="o">=</span> <span class="nx">spec</span><span class="p">.</span><span class="nx">event</span><span class="p">;</span> - - <span class="cm">/**</span> -<span class="cm"> * Is bound to an event</span> -<span class="cm"> * @returns {boolean}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">isBound</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">event</span> <span class="o">!==</span> <span class="kc">undefined</span><span class="p">;</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Remove itself from event, if bound.</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">unbind</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span> - <span class="k">if</span> <span class="p">(</span><span class="nx">that</span><span class="p">.</span><span class="nx">isBound</span><span class="p">())</span> <span class="p">{</span> - <span class="nx">event</span><span class="p">.</span><span class="nx">off</span><span class="p">(</span><span class="nx">that</span><span class="p">);</span> - <span class="nx">event</span> <span class="o">=</span> <span class="kc">undefined</span><span class="p">;</span> - <span class="p">}</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * @param anEvent</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">bind</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">anEvent</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">unbind</span><span class="p">();</span> - <span class="k">if</span> <span class="p">(</span><span class="nx">anEvent</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">event</span> <span class="o">=</span> <span class="nx">anEvent</span><span class="p">;</span> - <span class="p">}</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Executes connected callback</span> -<span class="cm"> * @param params</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">execute</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">params</span><span class="p">)</span> <span class="p">{</span> - <span class="k">if</span> <span class="p">(</span><span class="nx">callback</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">callback</span><span class="p">.</span><span class="nx">apply</span><span class="p">(</span><span class="nx">that</span><span class="p">,</span> <span class="nx">params</span><span class="p">);</span> - <span class="p">}</span> - <span class="p">};</span> - - <span class="k">return</span> <span class="nx">that</span><span class="p">;</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Singleton object that keeps a list of named event categories.</span> -<span class="cm"> */</span> - <span class="kd">var</span> <span class="nx">eventManager</span> <span class="o">=</span> <span class="p">(</span><span class="kd">function</span> <span class="p">()</span> <span class="p">{</span> - <span class="kd">var</span> <span class="nx">that</span> <span class="o">=</span> <span class="p">{};</span></pre></div> </td> </tr> <tr id="section-4"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-4">¶</a> </div> <p>Map of event categories with (category) name as key</p> </td> <td class="code"> <div class="highlight"><pre> <span class="kd">var</span> <span class="nx">categories</span> <span class="o">=</span> <span class="p">{};</span> - - <span class="cm">/**</span> -<span class="cm"> * Register a new event category with 'name'.</span> -<span class="cm"> * @param name</span> -<span class="cm"> * @returns {eventCategory}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">register</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">name</span><span class="p">)</span> <span class="p">{</span> - <span class="k">if</span> <span class="p">(</span><span class="nx">categories</span><span class="p">[</span><span class="nx">name</span><span class="p">])</span> <span class="p">{</span> - <span class="k">throw</span> <span class="p">(</span><span class="s1">'A event category is already registered for '</span> <span class="o">+</span> <span class="nx">name</span><span class="p">);</span> - <span class="p">}</span> - <span class="nx">categories</span><span class="p">[</span><span class="nx">name</span><span class="p">]</span> <span class="o">=</span> <span class="nx">eventCategory</span><span class="p">();</span> - - <span class="k">return</span> <span class="nx">categories</span><span class="p">[</span><span class="nx">name</span><span class="p">];</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Returns event category by name. Creates a new category if not already</span> -<span class="cm"> * registered.</span> -<span class="cm"> * @param name</span> -<span class="cm"> * @returns {*}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">at</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">name</span><span class="p">)</span> <span class="p">{</span> - <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">categories</span><span class="p">[</span><span class="nx">name</span><span class="p">])</span> <span class="p">{</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">register</span><span class="p">(</span><span class="nx">name</span><span class="p">);</span> - <span class="p">}</span> - - <span class="k">return</span> <span class="nx">categories</span><span class="p">[</span><span class="nx">name</span><span class="p">];</span> - <span class="p">};</span> - - <span class="k">return</span> <span class="nx">that</span><span class="p">;</span> - <span class="p">})();</span></pre></div> </td> </tr> <tr id="section-5"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-5">¶</a> </div> <p>Exports Singleton event manager -but also expose event and event category</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">eventManager</span><span class="p">.</span><span class="nx">eventCategory</span> <span class="o">=</span> <span class="nx">eventCategory</span><span class="p">;</span></pre></div> </td> </tr> <tr id="section-6"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-6">¶</a> </div> <p>@deprecated Spelling mistake</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">eventManager</span><span class="p">.</span><span class="nx">eventhandler</span> <span class="o">=</span> <span class="nx">eventCategory</span><span class="p">;</span> - <span class="nx">eventManager</span><span class="p">.</span><span class="nx">event</span> <span class="o">=</span> <span class="nx">event</span><span class="p">;</span> - - <span class="k">return</span> <span class="nx">eventManager</span><span class="p">;</span> - <span class="p">});</span> - -</pre></div> </td> </tr> </tbody> </table> </div> </body> </html> \ No newline at end of file diff --git a/docs/docco/hashLocation.html b/docs/docco/hashLocation.html deleted file mode 100644 index 9b5528ca..00000000 --- a/docs/docco/hashLocation.html +++ /dev/null @@ -1,173 +0,0 @@ -<!DOCTYPE html> <html> <head> <title>hashLocation.js</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <link rel="stylesheet" media="all" href="docco.css" /> </head> <body> <div id="container"> <div id="background"></div> <div id="jump_to"> Jump To … <div id="jump_wrapper"> <div id="jump_page"> <a class="source" href="core.html"> core.js </a> <a class="source" href="events.html"> events.js </a> <a class="source" href="htmlCanvas.html"> htmlCanvas.js </a> <a class="source" href="router.html"> router.js </a> <a class="source" href="abstractSegment.html"> abstractSegment.js </a> <a class="source" href="hashLocation.html"> hashLocation.js </a> <a class="source" href="optionalParameterSegment.html"> optionalParameterSegment.js </a> <a class="source" href="parameterSegment.html"> parameterSegment.js </a> <a class="source" href="route.html"> route.js </a> <a class="source" href="routeFactory.html"> routeFactory.js </a> <a class="source" href="routeMatchResult.html"> routeMatchResult.js </a> <a class="source" href="router.html"> router.js </a> <a class="source" href="staticSegment.html"> staticSegment.js </a> <a class="source" href="url.html"> url.js </a> <a class="source" href="widget-extensions.html"> widget-extensions.js </a> <a class="source" href="widget.html"> widget.js </a> </div> </div> </div> <table cellpadding="0" cellspacing="0"> <thead> <tr> <th class="docs"> <h1> hashLocation.js </h1> </th> <th class="code"> </th> </tr> </thead> <tbody> <tr id="section-1"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-1">¶</a> </div> </td> <td class="code"> <div class="highlight"><pre><span></span><span class="nx">define</span><span class="p">([</span> - <span class="s1">'jquery'</span><span class="p">,</span> - <span class="s1">'../events'</span><span class="p">,</span> - <span class="s1">'./url'</span><span class="p">,</span> - <span class="s1">'klassified'</span> -<span class="p">],</span> <span class="kd">function</span><span class="p">(</span><span class="nx">jQuery</span><span class="p">,</span> <span class="nx">events</span><span class="p">,</span> <span class="nx">url</span><span class="p">,</span> <span class="nx">object</span><span class="p">)</span> <span class="p">{</span> - - <span class="cm">/**</span> -<span class="cm"> * In modern browsers we use the 'hashchange' event to listen for location changes. If not supported</span> -<span class="cm"> * we poll for changes using a timer.</span> -<span class="cm"> */</span> - <span class="kd">var</span> <span class="nx">noHashChangeSupport</span> <span class="o">=</span> <span class="o">!</span><span class="p">(</span><span class="s1">'onhashchange'</span> <span class="k">in</span> <span class="nb">window</span><span class="p">);</span> - - <span class="cm">/**</span> -<span class="cm"> * Num ms between each location change poll on browsers without 'hashchange'</span> -<span class="cm"> */</span> - <span class="kd">var</span> <span class="nx">pollInterval</span> <span class="o">=</span> <span class="mi">25</span><span class="p">;</span> - - <span class="cm">/**</span> -<span class="cm"> * Manages and listens for changes in the hash fragment of the URL.</span> -<span class="cm"> *</span> -<span class="cm"> * @example</span> -<span class="cm"> * var location = hash();</span> -<span class="cm"> * hash.on('changed', function(newUrl) { window.alert(newUrl); });</span> -<span class="cm"> * location.start();</span> -<span class="cm"> * location.setUrl('newUrl');</span> -<span class="cm"> * location.setUrl('anotherUrl');</span> -<span class="cm"> * location.back();</span> -<span class="cm"> *</span> -<span class="cm"> * @param {{}} [spec]</span> -<span class="cm"> *</span> -<span class="cm"> * @param [my]</span> -<span class="cm"> * @returns {hashLocation}</span> -<span class="cm"> */</span> - <span class="kd">var</span> <span class="nx">hashLocation</span> <span class="o">=</span> <span class="nx">object</span><span class="p">.</span><span class="nx">subclass</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">that</span><span class="p">,</span> <span class="nx">my</span><span class="p">)</span> <span class="p">{</span> - - <span class="kd">var</span> <span class="nx">pollTimerId</span> <span class="o">=</span> <span class="kc">null</span><span class="p">;</span> - - <span class="nx">my</span><span class="p">.</span><span class="nx">currentHash</span> <span class="o">=</span> <span class="kc">undefined</span><span class="p">;</span> <span class="c1">// last hash fragment</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">history</span> <span class="o">=</span> <span class="p">[];</span> <span class="c1">// history of visited hash fragments</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">events</span> <span class="o">=</span> <span class="nx">events</span><span class="p">.</span><span class="nx">eventCategory</span><span class="p">();</span></pre></div> </td> </tr> <tr id="section-2"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-2">¶</a> </div> <p>Public</p> </td> <td class="code"> <div class="highlight"><pre> <span class="cm">/**</span> -<span class="cm"> * Triggered when location change with new URL as</span> -<span class="cm"> * argument.</span> -<span class="cm"> *</span> -<span class="cm"> * @type {event}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">onChanged</span> <span class="o">=</span> <span class="nx">my</span><span class="p">.</span><span class="nx">events</span><span class="p">.</span><span class="nx">createEvent</span><span class="p">(</span><span class="s1">'changed'</span><span class="p">);</span> - - <span class="cm">/**</span> -<span class="cm"> * Set hash fragment to URL</span> -<span class="cm"> *</span> -<span class="cm"> * @param {url|string} aUrl</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">setUrl</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">aUrl</span><span class="p">)</span> <span class="p">{</span> - <span class="kd">var</span> <span class="nx">aHash</span> <span class="o">=</span> <span class="nx">urlToHash</span><span class="p">(</span><span class="nx">aUrl</span><span class="p">);</span> - <span class="nx">setWindowHash</span><span class="p">(</span><span class="nx">aHash</span><span class="p">);</span> - <span class="nx">setCurrentHash</span><span class="p">(</span><span class="nx">aHash</span><span class="p">);</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Creates a URL from current hash fragment</span> -<span class="cm"> *</span> -<span class="cm"> * @returns {url}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">getUrl</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">urlFromHash</span><span class="p">(</span><span class="nx">getWindowHash</span><span class="p">());</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Creates a raw URL string from a URL that can be used eg. in a href.</span> -<span class="cm"> *</span> -<span class="cm"> * @param {string|url} aUrl</span> -<span class="cm"> * @returns {string}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">linkToUrl</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">aUrl</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">urlToHash</span><span class="p">(</span><span class="nx">aUrl</span><span class="p">);</span> - <span class="p">};</span> - - - <span class="cm">/**</span> -<span class="cm"> * Navigate back to previous location in history. If history is empty</span> -<span class="cm"> * the location will be changed to fallback URL.</span> -<span class="cm"> *</span> -<span class="cm"> * @param {string|url} fallbackUrl</span> -<span class="cm"> * @returns {string} URL</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">back</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">fallbackUrl</span><span class="p">)</span> <span class="p">{</span> - <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">that</span><span class="p">.</span><span class="nx">isHistoryEmpty</span><span class="p">())</span> <span class="p">{</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">history</span><span class="p">.</span><span class="nx">pop</span><span class="p">();</span> - <span class="nx">setWindowHash</span><span class="p">(</span><span class="nx">my</span><span class="p">.</span><span class="nx">history</span><span class="p">.</span><span class="nx">pop</span><span class="p">());</span> - <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="nx">fallbackUrl</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">setWindowHash</span><span class="p">(</span><span class="nx">urlToHash</span><span class="p">(</span><span class="nx">fallbackUrl</span><span class="p">));</span> - <span class="p">}</span> - - <span class="nx">setCurrentHash</span><span class="p">();</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Return `true` if the history is empty.</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">isHistoryEmpty</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">my</span><span class="p">.</span><span class="nx">history</span><span class="p">.</span><span class="nx">length</span> <span class="o"><=</span> <span class="mi">1</span><span class="p">;</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Start listening for URL changes. If `hashchange` is supported by the browser</span> -<span class="cm"> * it will be used, otherwise a timer will poll for changes.</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">start</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">stop</span><span class="p">();</span> - - <span class="nx">my</span><span class="p">.</span><span class="nx">currentHash</span> <span class="o">=</span> <span class="nx">getWindowHash</span><span class="p">();</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">history</span> <span class="o">=</span> <span class="p">[</span><span class="nx">my</span><span class="p">.</span><span class="nx">currentHash</span><span class="p">];</span> - - <span class="k">if</span> <span class="p">(</span><span class="nx">noHashChangeSupport</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">pollTimerId</span> <span class="o">=</span> <span class="nx">setInterval</span><span class="p">(</span><span class="nx">check</span><span class="p">,</span> <span class="nx">pollInterval</span><span class="p">);</span> - <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> - <span class="nx">jQuery</span><span class="p">(</span><span class="nb">window</span><span class="p">).</span><span class="nx">bind</span><span class="p">(</span><span class="s1">'hashchange'</span><span class="p">,</span> <span class="nx">check</span><span class="p">);</span> - <span class="p">}</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Stop listening for location changes and unregister all bindings.</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">stop</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span> - <span class="k">if</span> <span class="p">(</span><span class="nx">pollTimerId</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">clearInterval</span><span class="p">(</span><span class="nx">pollTimerId</span><span class="p">);</span> - <span class="nx">pollTimerId</span> <span class="o">=</span> <span class="kc">null</span><span class="p">;</span> - <span class="p">}</span> - <span class="nx">jQuery</span><span class="p">(</span><span class="nb">window</span><span class="p">).</span><span class="nx">unbind</span><span class="p">(</span><span class="s1">'hashchange'</span><span class="p">,</span> <span class="nx">check</span><span class="p">);</span> - <span class="p">};</span></pre></div> </td> </tr> <tr id="section-3"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-3">¶</a> </div> <p>Private</p> </td> <td class="code"> <div class="highlight"><pre> <span class="kd">function</span> <span class="nx">getWindowHash</span><span class="p">()</span> <span class="p">{</span> - <span class="k">return</span> <span class="nb">window</span><span class="p">.</span><span class="nx">location</span><span class="p">.</span><span class="nx">hash</span><span class="p">;</span> - <span class="p">}</span> - - <span class="kd">function</span> <span class="nx">setWindowHash</span><span class="p">(</span><span class="nx">aHash</span><span class="p">)</span> <span class="p">{</span> - <span class="nb">window</span><span class="p">.</span><span class="nx">location</span><span class="p">.</span><span class="nx">hash</span> <span class="o">=</span> <span class="nx">aHash</span><span class="p">;</span> - <span class="p">}</span> - - <span class="kd">function</span> <span class="nx">urlToHash</span><span class="p">(</span><span class="nx">aUrl</span><span class="p">)</span> <span class="p">{</span> - <span class="k">if</span><span class="p">(</span><span class="k">typeof</span> <span class="nx">aUrl</span> <span class="o">===</span> <span class="s1">'string'</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">aUrl</span> <span class="o">=</span> <span class="nx">url</span><span class="p">({</span><span class="nx">rawUrl</span><span class="o">:</span> <span class="nx">aUrl</span><span class="p">});</span> - <span class="p">}</span> - <span class="k">return</span> <span class="s1">'#!/'</span> <span class="o">+</span> <span class="nx">aUrl</span><span class="p">.</span><span class="nx">toString</span><span class="p">();</span> - <span class="p">}</span> - - <span class="kd">function</span> <span class="nx">urlFromHash</span><span class="p">(</span><span class="nx">aHash</span><span class="p">)</span> <span class="p">{</span></pre></div> </td> </tr> <tr id="section-4"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-4">¶</a> </div> <p>Remove hash/hash-bang and any leading /</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">return</span> <span class="nx">url</span><span class="p">({</span><span class="nx">rawUrl</span><span class="o">:</span> <span class="nx">aHash</span><span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="sr">/^#!?[\/]?/</span><span class="p">,</span> <span class="s1">''</span><span class="p">)});</span> - <span class="p">}</span> - - <span class="kd">function</span> <span class="nx">setCurrentHash</span><span class="p">(</span><span class="nx">newHash</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">newHash</span> <span class="o">=</span> <span class="nx">newHash</span> <span class="o">||</span> <span class="nx">getWindowHash</span><span class="p">();</span> - - <span class="k">if</span><span class="p">(</span><span class="nx">my</span><span class="p">.</span><span class="nx">currentHash</span> <span class="o">!==</span> <span class="nx">newHash</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">currentHash</span> <span class="o">=</span> <span class="nx">newHash</span><span class="p">;</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">history</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">my</span><span class="p">.</span><span class="nx">currentHash</span><span class="p">);</span> - <span class="p">}</span> - - <span class="nx">that</span><span class="p">.</span><span class="nx">onChanged</span><span class="p">.</span><span class="nx">trigger</span><span class="p">(</span><span class="nx">urlFromHash</span><span class="p">(</span><span class="nx">my</span><span class="p">.</span><span class="nx">currentHash</span><span class="p">));</span> - <span class="p">}</span> - - <span class="kd">function</span> <span class="nx">check</span><span class="p">()</span> <span class="p">{</span> - <span class="kd">var</span> <span class="nx">windowHash</span> <span class="o">=</span> <span class="nx">getWindowHash</span><span class="p">();</span> - - <span class="kd">var</span> <span class="nx">urlChanged</span> <span class="o">=</span> <span class="nx">my</span><span class="p">.</span><span class="nx">currentHash</span> <span class="o">!==</span> <span class="nx">windowHash</span><span class="p">;</span> - <span class="k">if</span> <span class="p">(</span><span class="nx">urlChanged</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">setCurrentHash</span><span class="p">(</span><span class="nx">windowHash</span><span class="p">);</span> - <span class="p">}</span> - <span class="p">}</span> - <span class="p">});</span> - - <span class="k">return</span> <span class="nx">hashLocation</span><span class="p">;</span> -<span class="p">});</span> - -</pre></div> </td> </tr> </tbody> </table> </div> </body> </html> \ No newline at end of file diff --git a/docs/docco/htmlCanvas.html b/docs/docco/htmlCanvas.html deleted file mode 100644 index d761a0bc..00000000 --- a/docs/docco/htmlCanvas.html +++ /dev/null @@ -1,507 +0,0 @@ -<!DOCTYPE html> <html> <head> <title>htmlCanvas.js</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <link rel="stylesheet" media="all" href="docco.css" /> </head> <body> <div id="container"> <div id="background"></div> <div id="jump_to"> Jump To … <div id="jump_wrapper"> <div id="jump_page"> <a class="source" href="core.html"> core.js </a> <a class="source" href="events.html"> events.js </a> <a class="source" href="htmlCanvas.html"> htmlCanvas.js </a> <a class="source" href="router.html"> router.js </a> <a class="source" href="abstractSegment.html"> abstractSegment.js </a> <a class="source" href="hashLocation.html"> hashLocation.js </a> <a class="source" href="optionalParameterSegment.html"> optionalParameterSegment.js </a> <a class="source" href="parameterSegment.html"> parameterSegment.js </a> <a class="source" href="route.html"> route.js </a> <a class="source" href="routeFactory.html"> routeFactory.js </a> <a class="source" href="routeMatchResult.html"> routeMatchResult.js </a> <a class="source" href="router.html"> router.js </a> <a class="source" href="staticSegment.html"> staticSegment.js </a> <a class="source" href="url.html"> url.js </a> <a class="source" href="widget-extensions.html"> widget-extensions.js </a> <a class="source" href="widget.html"> widget.js </a> </div> </div> </div> <table cellpadding="0" cellspacing="0"> <thead> <tr> <th class="docs"> <h1> htmlCanvas.js </h1> </th> <th class="code"> </th> </tr> </thead> <tbody> <tr id="section-1"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-1">¶</a> </div> </td> <td class="code"> <div class="highlight"><pre><span></span><span class="nx">define</span><span class="p">(</span> - <span class="p">[</span> - <span class="s1">'jquery'</span> - <span class="p">],</span> - - <span class="kd">function</span> <span class="p">(</span><span class="nx">jQuery</span><span class="p">)</span> <span class="p">{</span> - - <span class="cm">/**</span> -<span class="cm"> * @typedef {function} renderer</span> -<span class="cm"> * @param {htmlCanvas} html</span> -<span class="cm"> */</span> - - <span class="cm">/** @typedef {({}|string|renderer|widget|htmlTagBrush|*)} renderable */</span></pre></div> </td> </tr> <tr id="section-2"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-2">¶</a> </div> <p>Supported HTML 'tags'</p> </td> <td class="code"> <div class="highlight"><pre> <span class="kd">var</span> <span class="nx">tags</span> <span class="o">=</span> <span class="p">(</span><span class="s1">'a abbr acronym address area article aside audio b bdi bdo big '</span> <span class="o">+</span> - <span class="s1">'blockquote body br button canvas caption cite code col colgroup command '</span> <span class="o">+</span> - <span class="s1">'datalist dd del details dfn div dl dt em embed fieldset figcaption figure '</span> <span class="o">+</span> - <span class="s1">'footer form frame frameset h1 h2 h3 h4 h5 h6 hr head header hgroup html i '</span> <span class="o">+</span> - <span class="s1">'iframe img input ins kbd keygen label legend li link map mark meta meter '</span> <span class="o">+</span> - <span class="s1">'nav noscript object ol optgroup option output p param pre progress q rp rt'</span> <span class="o">+</span> - <span class="s1">'ruby samp script section select small source span strong style sub summary'</span> <span class="o">+</span> - <span class="s1">'sup table tbody td textarea tfoot th thead time title tr track tt ul var'</span> <span class="o">+</span> - <span class="s1">'video wbr'</span><span class="p">).</span><span class="nx">split</span><span class="p">(</span><span class="s1">' '</span><span class="p">);</span></pre></div> </td> </tr> <tr id="section-3"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-3">¶</a> </div> <p>Supported HTML events</p> </td> <td class="code"> <div class="highlight"><pre> <span class="kd">var</span> <span class="nx">attributes</span> <span class="o">=</span> <span class="s1">'href for id media rel src style title type'</span><span class="p">.</span><span class="nx">split</span><span class="p">(</span><span class="s1">' '</span><span class="p">);</span> - - <span class="kd">var</span> <span class="nx">omitSymbol</span> <span class="o">=</span> <span class="p">{};</span></pre></div> </td> </tr> <tr id="section-4"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-4">¶</a> </div> <p>Supported HTML attributes</p> </td> <td class="code"> <div class="highlight"><pre> <span class="kd">var</span> <span class="nx">events</span> <span class="o">=</span> <span class="p">(</span><span class="s1">'blur focus focusin focusout load resize scroll unload '</span> <span class="o">+</span> - <span class="s1">'click dblclick mousedown mouseup mousemove mouseover '</span> <span class="o">+</span> - <span class="s1">'mouseout mouseenter mouseleave change select submit '</span> <span class="o">+</span> - <span class="s1">'keydown keypress keyup error dragstart dragenter dragover dragleave drop dragend'</span><span class="p">).</span><span class="nx">split</span><span class="p">(</span><span class="s1">' '</span><span class="p">);</span> - - <span class="cm">/**</span> -<span class="cm"> * htmlCanvas provides a DSL that we use to add elements to the DOM using a HTML looking syntax.</span> -<span class="cm"> *</span> -<span class="cm"> * The basic metaphor used is one of painting on a canvas using brushes. The canvas is the</span> -<span class="cm"> * DOM and the brushes HTML 'tags'. Note that it have nothing to do with the HTML5 canvas tag</span> -<span class="cm"> *</span> -<span class="cm"> * @example</span> -<span class="cm"> * // A htmlCanvas is created on a jQuery object:</span> -<span class="cm"> * var html = htmlCanvas($('BODY'));</span> -<span class="cm"> *</span> -<span class="cm"> * // We write HTML using standard tags:</span> -<span class="cm"> * html.h1('Hello World!');</span> -<span class="cm"> *</span> -<span class="cm"> * // and standard attributes:</span> -<span class="cm"> * html.a({ id: 'id', href: 'http://www.google.se'}, 'Google');</span> -<span class="cm"> *</span> -<span class="cm"> * // Callbacks can be attached to events:</span> -<span class="cm"> * html.a({click: function() { alert('Hello World!')} 'Click me!');</span> -<span class="cm"> *</span> -<span class="cm"> * // Tags can be nested:</span> -<span class="cm"> * html.div({'class' : 'outer_div'},</span> -<span class="cm"> * html.div({'class' : 'inner_div'},</span> -<span class="cm"> * html.span('Some text')</span> -<span class="cm"> * )</span> -<span class="cm"> * );</span> -<span class="cm"> *</span> -<span class="cm"> * // Parts can be assigned to variables:</span> -<span class="cm"> * var homeButton = html.a('Home').href('/');</span> -<span class="cm"> * if(showAlert) {</span> -<span class="cm"> * homeButton.click(function() { alert('Hello'); });</span> -<span class="cm"> * }</span> -<span class="cm"> *</span> -<span class="cm"> *</span> -<span class="cm"> * @param {string|jQuery|htmlTagBrush} [rootElement] Element to "paint" on. If not supplied a document fragment will be created</span> -<span class="cm"> *</span> -<span class="cm"> * @returns {htmlCanvas}</span> -<span class="cm"> */</span> - <span class="kd">function</span> <span class="nx">htmlCanvas</span><span class="p">(</span><span class="nx">rootElement</span><span class="p">)</span> <span class="p">{</span> - - <span class="kd">var</span> <span class="nx">root</span> <span class="o">=</span> <span class="nx">htmlTagBrush</span><span class="p">({</span> <span class="nx">element</span><span class="o">:</span> <span class="nx">rootElement</span> <span class="p">});</span> - - <span class="cm">/** @typedef {{}} htmlCanvas */</span> - <span class="kd">var</span> <span class="nx">that</span> <span class="o">=</span> <span class="p">{};</span></pre></div> </td> </tr> <tr id="section-5"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-5">¶</a> </div> <p>Public</p> </td> <td class="code"> <div class="highlight"><pre> <span class="cm">/**</span> -<span class="cm"> * The root object that brushes will append elements to.</span> -<span class="cm"> *</span> -<span class="cm"> * @type {htmlTagBrush}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">root</span> <span class="o">=</span> <span class="nx">root</span><span class="p">;</span> - - <span class="cm">/**</span> -<span class="cm"> * Creates a brush that "paints" a tag of type tagName. Any children supplied</span> -<span class="cm"> * will be appended as children to brush.</span> -<span class="cm"> *</span> -<span class="cm"> * @param {string} tagName Type of element (supported by document.createElement)</span> -<span class="cm"> * @param {renderable[]} [children] Renderable objects to append as children of brush.</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">tag</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">tagName</span><span class="p">,</span> <span class="nx">children</span><span class="p">)</span> <span class="p">{</span> - <span class="kd">var</span> <span class="nx">tagBrush</span> <span class="o">=</span> <span class="nx">htmlTagBrush</span><span class="p">({</span> <span class="nx">tag</span><span class="o">:</span> <span class="nx">tagName</span><span class="p">,</span> <span class="nx">children</span><span class="o">:</span> <span class="nx">children</span> <span class="p">});</span> - <span class="nx">root</span><span class="p">.</span><span class="nx">appendBrush</span><span class="p">(</span><span class="nx">tagBrush</span><span class="p">);</span> - <span class="k">return</span> <span class="nx">tagBrush</span><span class="p">;</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Tags builders for each supported tag type.</span> -<span class="cm"> *</span> -<span class="cm"> * @example</span> -<span class="cm"> * html.h1('Title');</span> -<span class="cm"> * html.strong('Important stuff');</span> -<span class="cm"> * html.span(html.strong(userName), ' signed in.')</span> -<span class="cm"> */</span> - <span class="nx">tags</span><span class="p">.</span><span class="nx">forEach</span><span class="p">(</span><span class="kd">function</span> <span class="p">(</span><span class="nx">tagName</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">that</span><span class="p">[</span><span class="nx">tagName</span><span class="p">]</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span> - <span class="kd">var</span> <span class="nx">args</span> <span class="o">=</span> <span class="nb">Array</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">slice</span><span class="p">.</span><span class="nx">call</span><span class="p">(</span><span class="nx">arguments</span><span class="p">);</span> - <span class="k">return</span> <span class="nx">that</span><span class="p">.</span><span class="nx">tag</span><span class="p">(</span><span class="nx">tagName</span><span class="p">,</span> <span class="nx">args</span><span class="p">);</span> - <span class="p">};</span> - <span class="p">});</span> - - <span class="cm">/**</span> -<span class="cm"> * Returns omit symbol that is used to omit a attribute pair</span> -<span class="cm"> * and omit the object appended to brush.</span> -<span class="cm"> *</span> -<span class="cm"> * @returns {{}}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">omit</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">omitSymbol</span><span class="p">;</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Append an object to the root brush</span> -<span class="cm"> *</span> -<span class="cm"> * @param anObject</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">render</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span> - <span class="kd">var</span> <span class="nx">args</span> <span class="o">=</span> <span class="nb">Array</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">slice</span><span class="p">.</span><span class="nx">call</span><span class="p">(</span><span class="nx">arguments</span><span class="p">);</span> - <span class="nx">root</span><span class="p">.</span><span class="nx">render</span><span class="p">(</span><span class="nx">args</span><span class="p">);</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Append an unescaped HTML string to the root brush</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">raw</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">htmlString</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">root</span><span class="p">.</span><span class="nx">raw</span><span class="p">(</span><span class="nx">htmlString</span><span class="p">);</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Append an unescaped string replacing all spaces by</span> -<span class="cm"> * non-breaking spaces</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">renderNonBreaking</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">htmlString</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">raw</span><span class="p">(</span><span class="nx">htmlString</span><span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="sr">/\s/g</span><span class="p">,</span> <span class="s2">"&nbsp;"</span><span class="p">));</span> - <span class="p">};</span> - - <span class="k">return</span> <span class="nx">that</span><span class="p">;</span> - <span class="p">}</span> - - <span class="cm">/**</span> -<span class="cm"> * A tag brush object represents a DOM element, built on a canvas. The element can</span> -<span class="cm"> * be created from a 'tag' or an element matched using 'jQuery'.</span> -<span class="cm"> *</span> -<span class="cm"> * Note: A brush is usually only created from `htmlCanvas` and it should only</span> -<span class="cm"> * be used once.</span> -<span class="cm"> *</span> -<span class="cm"> * @param {{}} spec</span> -<span class="cm"> * @param {string} [spec.tag] Name of tag to create (using document.createElement)</span> -<span class="cm"> * @param {string|jQuery|widget|htmlTagBrush|*} [spec.element]</span> -<span class="cm"> * @param {renderable[]} [spec.children]</span> -<span class="cm"> *</span> -<span class="cm"> * @returns {htmlTagBrush}</span> -<span class="cm"> */</span> - <span class="kd">function</span> <span class="nx">htmlTagBrush</span><span class="p">(</span><span class="nx">spec</span><span class="p">)</span> <span class="p">{</span> - - <span class="cm">/** @typedef {{}} htmlTagBrush */</span> - <span class="kd">var</span> <span class="nx">that</span> <span class="o">=</span> <span class="p">{};</span> - - <span class="cm">/**</span> -<span class="cm"> * Create a new element from tagName or get it from elements.</span> -<span class="cm"> *</span> -<span class="cm"> * @type {HTMLElement}</span> -<span class="cm"> */</span> - <span class="kd">var</span> <span class="nx">element</span> <span class="o">=</span> <span class="nx">spec</span><span class="p">.</span><span class="nx">tag</span> <span class="o">?</span> <span class="nx">createElement</span><span class="p">(</span><span class="nx">spec</span><span class="p">.</span><span class="nx">tag</span><span class="p">)</span> <span class="o">:</span> <span class="nx">getElement</span><span class="p">(</span><span class="nx">spec</span><span class="p">.</span><span class="nx">element</span><span class="p">);</span> - <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">element</span><span class="p">)</span> <span class="p">{</span> - <span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span><span class="p">(</span><span class="s1">'htmlTagBrush requires an element'</span><span class="p">);</span> - <span class="p">}</span></pre></div> </td> </tr> <tr id="section-6"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-6">¶</a> </div> <p>Public</p> </td> <td class="code"> <div class="highlight"><pre> <span class="cm">/**</span> -<span class="cm"> * DOM element created by brush</span> -<span class="cm"> *</span> -<span class="cm"> * @returns {HTMLElement}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">element</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">element</span><span class="p">;</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Appends child objects to brush. Can take a single or several arguments.</span> -<span class="cm"> *</span> -<span class="cm"> * @example</span> -<span class="cm"> * html.h1().render(</span> -<span class="cm"> * 'hello',</span> -<span class="cm"> * html.span('world',</span> -<span class="cm"> * function(html) {</span> -<span class="cm"> * html.img().src('foo.img');</span> -<span class="cm"> * }</span> -<span class="cm"> * )</span> -<span class="cm"> * );</span> -<span class="cm"> *</span> -<span class="cm"> * @param {renderable[]} arguments Any renderable objects</span> -<span class="cm"> * @returns {htmlTagBrush}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">render</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span> - <span class="kd">var</span> <span class="nx">args</span> <span class="o">=</span> <span class="nb">Array</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">slice</span><span class="p">.</span><span class="nx">call</span><span class="p">(</span><span class="nx">arguments</span><span class="p">);</span> - <span class="k">for</span> <span class="p">(</span><span class="kd">var</span> <span class="nx">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">i</span> <span class="o"><</span> <span class="nx">args</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span> <span class="nx">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">append</span><span class="p">(</span><span class="nx">args</span><span class="p">[</span><span class="nx">i</span><span class="p">]);</span> - <span class="p">}</span> - <span class="k">return</span> <span class="nx">that</span><span class="p">;</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Implementation for `appendToBrush()` to allow a brush to be</span> -<span class="cm"> * appended to another brush.</span> -<span class="cm"> *</span> -<span class="cm"> * @param {htmlTagBrush} aTagBrush</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">appendToBrush</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">aTagBrush</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">aTagBrush</span><span class="p">.</span><span class="nx">appendBrush</span><span class="p">(</span><span class="nx">that</span><span class="p">);</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Append brush as child.</span> -<span class="cm"> *</span> -<span class="cm"> * @param {htmlTagBrush} aTagBrush</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">appendBrush</span> <span class="o">=</span> <span class="nx">appendBrush</span><span class="p">;</span> - - <span class="cm">/**</span> -<span class="cm"> * Set unescaped html contents.</span> -<span class="cm"> *</span> -<span class="cm"> * @param {string} htmlContents</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">html</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">htmlContents</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">asJQuery</span><span class="p">().</span><span class="nx">html</span><span class="p">(</span><span class="nx">htmlContents</span><span class="p">);</span> - <span class="k">return</span> <span class="nx">that</span><span class="p">;</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Append an unescaped html contents.</span> -<span class="cm"> *</span> -<span class="cm"> * @param {string} htmlContents</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">raw</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">htmlContents</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">asJQuery</span><span class="p">().</span><span class="nx">append</span><span class="p">(</span><span class="nx">htmlContents</span><span class="p">);</span> - <span class="k">return</span> <span class="nx">that</span><span class="p">;</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Append an unescaped string replacing all spaces by</span> -<span class="cm"> * non-breaking spaces</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">renderNonBreaking</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">htmlString</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">raw</span><span class="p">(</span><span class="nx">htmlString</span><span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="sr">/\s/g</span><span class="p">,</span> <span class="s2">"&nbsp;"</span><span class="p">));</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Bind callback to DOM event</span> -<span class="cm"> *</span> -<span class="cm"> * @usage</span> -<span class="cm"> * html.a('click me').on('click', function() {</span> -<span class="cm"> * alert('click');</span> -<span class="cm"> * });</span> -<span class="cm"> *</span> -<span class="cm"> * @param {string} eventType One or more DOM event types, such as "click" or "submit," or custom event names.</span> -<span class="cm"> * @param {function} callback A function to execute each time the event is triggered.</span> -<span class="cm"> * @returns {{}}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">on</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">eventType</span><span class="p">,</span> <span class="nx">callback</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">asJQuery</span><span class="p">().</span><span class="nx">bind</span><span class="p">(</span><span class="nx">eventType</span><span class="p">,</span> <span class="nx">callback</span><span class="p">);</span> - <span class="k">return</span> <span class="nx">that</span><span class="p">;</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Event functions for each supported event type.</span> -<span class="cm"> *</span> -<span class="cm"> * @example</span> -<span class="cm"> * aBrush.click(function() { .. });</span> -<span class="cm"> * aBrush.blur(function() { .. });</span> -<span class="cm"> */</span> - <span class="nx">events</span><span class="p">.</span><span class="nx">forEach</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">eventType</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">that</span><span class="p">[</span><span class="nx">eventType</span><span class="p">]</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">callback</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">that</span><span class="p">.</span><span class="nx">on</span><span class="p">(</span><span class="nx">eventType</span><span class="p">,</span> <span class="nx">callback</span><span class="p">);</span> - <span class="p">};</span> - <span class="p">});</span> - - <span class="cm">/**</span> -<span class="cm"> * Adds a new attribute or changes the value of an existing attribute on the specified element.</span> -<span class="cm"> * @param key</span> -<span class="cm"> * @param value</span> -<span class="cm"> * @returns {{}}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">setAttribute</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="p">{</span></pre></div> </td> </tr> <tr id="section-7"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-7">¶</a> </div> <p>Omit attribute if value is omit</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">if</span><span class="p">(</span><span class="nx">value</span> <span class="o">===</span> <span class="nx">omitSymbol</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">that</span><span class="p">;</span> - <span class="p">}</span> - - <span class="nx">element</span><span class="p">.</span><span class="nx">setAttribute</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="k">return</span> <span class="nx">that</span><span class="p">;</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Accessors for each supported attribute.</span> -<span class="cm"> *</span> -<span class="cm"> * @example</span> -<span class="cm"> * aBrush.id('id');</span> -<span class="cm"> * aBrush.src('javascript:0');</span> -<span class="cm"> * aBrush.href('#');</span> -<span class="cm"> */</span> - <span class="nx">attributes</span><span class="p">.</span><span class="nx">forEach</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">attributeName</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">that</span><span class="p">[</span><span class="nx">attributeName</span><span class="p">]</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">value</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">that</span><span class="p">.</span><span class="nx">setAttribute</span><span class="p">(</span><span class="nx">attributeName</span><span class="p">,</span> <span class="nx">value</span><span class="p">);</span> - <span class="p">};</span> - <span class="p">});</span> - - <span class="cm">/**</span> -<span class="cm"> * Set element style with key/value or object literal.</span> -<span class="cm"> *</span> -<span class="cm"> * @example</span> -<span class="cm"> * html.h1().css('display', 'block');</span> -<span class="cm"> * html.h1().css({'display' : 'block', 'color' : 'red'});</span> -<span class="cm"> *</span> -<span class="cm"> * @param {string|{}} key</span> -<span class="cm"> * @param {string} value</span> -<span class="cm"> * @returns {{}}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">css</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="p">{</span> - <span class="k">if</span> <span class="p">(</span><span class="k">typeof</span> <span class="nx">key</span> <span class="o">===</span> <span class="s2">"string"</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">asJQuery</span><span class="p">().</span><span class="nx">css</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="p">}</span> - <span class="k">else</span> <span class="p">{</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">asJQuery</span><span class="p">().</span><span class="nx">css</span><span class="p">(</span><span class="nx">key</span><span class="p">);</span> <span class="c1">// otherwise assume key is a map (object literal)</span> - <span class="p">}</span> - - <span class="k">return</span> <span class="nx">that</span><span class="p">;</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Set attributes using object literal.</span> -<span class="cm"> *</span> -<span class="cm"> * @example</span> -<span class="cm"> * html.h1().attr({id : 'myid', 'class' : 'myclass'});</span> -<span class="cm"> *</span> -<span class="cm"> * @note</span> -<span class="cm"> * Use klass or 'class' with quotation marks as key instead of class since its a reserved word.</span> -<span class="cm"> *</span> -<span class="cm"> * @param object</span> -<span class="cm"> * @returns {{}}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">attr</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">object</span><span class="p">)</span> <span class="p">{</span> - <span class="k">for</span> <span class="p">(</span><span class="kd">var</span> <span class="nx">key</span> <span class="k">in</span> <span class="nx">object</span><span class="p">)</span> <span class="p">{</span> - <span class="k">if</span> <span class="p">(</span><span class="nx">object</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="p">{</span></pre></div> </td> </tr> <tr id="section-8"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-8">¶</a> </div> <p>Attach functions</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">if</span><span class="p">(</span><span class="k">typeof</span> <span class="nx">object</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span> <span class="o">===</span> <span class="s2">"function"</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">on</span><span class="p">(</span><span class="nx">key</span><span class="p">,</span> <span class="nx">object</span><span class="p">[</span><span class="nx">key</span><span class="p">]);</span> - <span class="p">}</span> - - <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="nx">key</span> <span class="o">===</span> <span class="s1">'klass'</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">addClass</span><span class="p">(</span><span class="nx">object</span><span class="p">[</span><span class="nx">key</span><span class="p">]);</span> - <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">setAttribute</span><span class="p">(</span><span class="nx">key</span><span class="p">,</span> <span class="nx">object</span><span class="p">[</span><span class="nx">key</span><span class="p">]);</span> - <span class="p">}</span> - <span class="p">}</span> - <span class="p">}</span> - <span class="k">return</span> <span class="nx">that</span><span class="p">;</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Appends className to class attribute</span> -<span class="cm"> * @param className</span> -<span class="cm"> * @returns {htmlTagBrush}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">addClass</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">className</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">asJQuery</span><span class="p">().</span><span class="nx">addClass</span><span class="p">(</span><span class="nx">className</span><span class="p">);</span> - <span class="k">return</span> <span class="nx">that</span><span class="p">;</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Removes className from class attribute</span> -<span class="cm"> *</span> -<span class="cm"> * @param {string} className</span> -<span class="cm"> * @returns {htmlTagBrush}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">removeClass</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">className</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">asJQuery</span><span class="p">().</span><span class="nx">removeClass</span><span class="p">(</span><span class="nx">className</span><span class="p">);</span> - <span class="k">return</span> <span class="nx">that</span><span class="p">;</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Returns jQuery that match element.</span> -<span class="cm"> * @returns {jQuery}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">asJQuery</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">jQuery</span><span class="p">(</span><span class="nx">that</span><span class="p">.</span><span class="nx">element</span><span class="p">());</span> - <span class="p">};</span></pre></div> </td> </tr> <tr id="section-9"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-9">¶</a> </div> <p>Private</p> </td> <td class="code"> <div class="highlight"><pre> <span class="cm">/**</span> -<span class="cm"> * Creates a new element from tagName</span> -<span class="cm"> *</span> -<span class="cm"> * @param {string} tagName</span> -<span class="cm"> * @returns {Element}</span> -<span class="cm"> */</span> - <span class="kd">function</span> <span class="nx">createElement</span><span class="p">(</span><span class="nx">tagName</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="nb">document</span><span class="p">.</span><span class="nx">createElement</span><span class="p">(</span><span class="nx">tagName</span><span class="p">);</span> - <span class="p">}</span> - - <span class="cm">/**</span> -<span class="cm"> * Appends object as child to brush. A tag brush knows how to append:</span> -<span class="cm"> *</span> -<span class="cm"> * - strings</span> -<span class="cm"> * - functions (that take a htmlCanvas as argument)</span> -<span class="cm"> * - other brushes and widgets (that implements `appendToBrush()`)</span> -<span class="cm"> * - map / object literal with attributes (eg. {id: 'aId', 'class' : 'aClass'})</span> -<span class="cm"> * - array of valid objects (see above)</span> -<span class="cm"> *</span> -<span class="cm"> * all other objects are appended using:</span> -<span class="cm"> * `jQuery(element).append(object);`</span> -<span class="cm"> *</span> -<span class="cm"> * @param {renderable|renderable[]|{}} object</span> -<span class="cm"> */</span> - <span class="kd">function</span> <span class="nx">append</span><span class="p">(</span><span class="nx">object</span><span class="p">)</span> <span class="p">{</span> - <span class="k">if</span> <span class="p">(</span><span class="k">typeof</span><span class="p">(</span><span class="nx">object</span><span class="p">)</span> <span class="o">===</span> <span class="s1">'undefined'</span> <span class="o">||</span> <span class="nx">object</span> <span class="o">===</span> <span class="kc">null</span><span class="p">)</span> <span class="p">{</span> - <span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span><span class="p">(</span><span class="s1">'cannot append null or undefined to brush'</span><span class="p">);</span> - <span class="p">}</span></pre></div> </td> </tr> <tr id="section-10"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-10">¶</a> </div> <p>Ignore object if it's a omit symbol</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">if</span><span class="p">(</span><span class="nx">object</span> <span class="o">===</span> <span class="nx">omitSymbol</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span><span class="p">;</span> - <span class="p">}</span> - - <span class="k">if</span> <span class="p">(</span><span class="k">typeof</span> <span class="nx">object</span> <span class="o">===</span> <span class="s2">"object"</span> <span class="o">&&</span> <span class="nx">object</span><span class="p">.</span><span class="nx">constructor</span> <span class="o">===</span> <span class="nb">Array</span><span class="p">)</span> <span class="p">{</span> - <span class="k">for</span> <span class="p">(</span><span class="kd">var</span> <span class="nx">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">i</span> <span class="o"><</span> <span class="nx">object</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span> <span class="nx">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">append</span><span class="p">(</span><span class="nx">object</span><span class="p">[</span><span class="nx">i</span><span class="p">]);</span> - <span class="p">}</span> - <span class="p">}</span> - <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="k">typeof</span> <span class="nx">object</span> <span class="o">===</span> <span class="s2">"string"</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">appendString</span><span class="p">(</span><span class="nx">object</span><span class="p">);</span> - <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="k">typeof</span> <span class="nx">object</span> <span class="o">===</span> <span class="s2">"function"</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">appendFunction</span><span class="p">(</span><span class="nx">object</span><span class="p">);</span> - <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="k">typeof</span> <span class="nx">object</span> <span class="o">===</span> <span class="s2">"object"</span> <span class="o">&&</span> - <span class="nx">object</span><span class="p">.</span><span class="nx">appendToBrush</span> <span class="cm">/* eg. widget and tagBrush implement appendToBrush */</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">object</span><span class="p">.</span><span class="nx">appendToBrush</span><span class="p">(</span><span class="nx">that</span><span class="p">);</span> <span class="c1">// double dispatch</span> - <span class="p">}</span> - <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="k">typeof</span> <span class="nx">object</span> <span class="o">===</span> <span class="s2">"object"</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">attr</span><span class="p">(</span><span class="nx">object</span><span class="p">);</span> <span class="c1">// assume attributes if none of above</span> - <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> - <span class="nx">jQuery</span><span class="p">(</span><span class="nx">element</span><span class="p">).</span><span class="nx">append</span><span class="p">(</span><span class="nx">object</span><span class="p">);</span> <span class="c1">// default to jquery</span> - <span class="p">}</span> - <span class="p">}</span> - - <span class="cm">/**</span> -<span class="cm"> * Appends DOM node as last child of element or concatenate with</span> -<span class="cm"> * text if element can't have children.</span> -<span class="cm"> *</span> -<span class="cm"> * @param {string|HTMLElement} child</span> -<span class="cm"> */</span> - <span class="kd">function</span> <span class="nx">appendChild</span><span class="p">(</span><span class="nx">child</span><span class="p">)</span> <span class="p">{</span> - <span class="k">if</span> <span class="p">(</span><span class="nx">element</span><span class="p">.</span><span class="nx">canHaveChildren</span> <span class="o">!==</span> <span class="kc">false</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">element</span><span class="p">.</span><span class="nx">appendChild</span><span class="p">(</span><span class="nx">child</span><span class="p">);</span> - <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> - <span class="nx">element</span><span class="p">.</span><span class="nx">text</span> <span class="o">=</span> <span class="nx">element</span><span class="p">.</span><span class="nx">text</span> <span class="o">+</span> <span class="nx">child</span><span class="p">.</span><span class="nx">innerHTML</span><span class="p">;</span> - <span class="p">}</span> - <span class="p">}</span> - - <span class="cm">/**</span> -<span class="cm"> * Appends element of brush</span> -<span class="cm"> *</span> -<span class="cm"> * @param {htmlTagBrush} aTagBrush</span> -<span class="cm"> */</span> - <span class="kd">function</span> <span class="nx">appendBrush</span><span class="p">(</span><span class="nx">aTagBrush</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">appendChild</span><span class="p">(</span><span class="nx">aTagBrush</span><span class="p">.</span><span class="nx">element</span><span class="p">());</span> - <span class="p">}</span> - - <span class="cm">/**</span> -<span class="cm"> * Append text as child. `string` is escaped</span> -<span class="cm"> *</span> -<span class="cm"> * @param {string} string</span> -<span class="cm"> */</span> - <span class="kd">function</span> <span class="nx">appendString</span><span class="p">(</span><span class="nx">string</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">jQuery</span><span class="p">(</span><span class="nx">element</span><span class="p">).</span><span class="nx">append</span><span class="p">(</span><span class="nb">document</span><span class="p">.</span><span class="nx">createTextNode</span><span class="p">(</span><span class="nx">string</span><span class="p">));</span> - <span class="p">}</span> - - <span class="cm">/**</span> -<span class="cm"> * Append function by executing function with this element as canvas.</span> -<span class="cm"> *</span> -<span class="cm"> * @param {renderer} fn</span> -<span class="cm"> */</span> - <span class="kd">function</span> <span class="nx">appendFunction</span><span class="p">(</span><span class="nx">fn</span><span class="p">)</span> <span class="p">{</span> - <span class="kd">var</span> <span class="nx">brushCanvas</span> <span class="o">=</span> <span class="nx">htmlCanvas</span><span class="p">(</span><span class="nx">that</span><span class="p">);</span> - <span class="nx">fn</span><span class="p">(</span><span class="nx">brushCanvas</span><span class="p">);</span> - <span class="p">}</span> - - <span class="cm">/**</span> -<span class="cm"> * Element is set to first match if a jQuery was given.</span> -<span class="cm"> *</span> -<span class="cm"> * @param {string|jQuery|HTMLElement|widget|htmlTagBrush} [object]</span> -<span class="cm"> * @returns {HTMLElement}</span> -<span class="cm"> */</span> - <span class="kd">function</span> <span class="nx">getElement</span><span class="p">(</span><span class="nx">object</span><span class="p">)</span> <span class="p">{</span></pre></div> </td> </tr> <tr id="section-11"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-11">¶</a> </div> <p>Create a fragment if no object</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">if</span> <span class="p">(</span><span class="k">typeof</span><span class="p">(</span><span class="nx">object</span><span class="p">)</span> <span class="o">===</span> <span class="s1">'undefined'</span> <span class="o">||</span> <span class="nx">object</span> <span class="o">===</span> <span class="kc">null</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">jQuery</span><span class="p">(</span><span class="nb">document</span><span class="p">.</span><span class="nx">createDocumentFragment</span><span class="p">()).</span><span class="nx">get</span><span class="p">(</span><span class="mi">0</span><span class="p">);</span> - <span class="p">}</span></pre></div> </td> </tr> <tr id="section-12"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-12">¶</a> </div> <p>Any object that implements asJQuery eg. widget and tagBrush</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">if</span><span class="p">(</span><span class="k">typeof</span> <span class="nx">object</span> <span class="o">===</span> <span class="s2">"object"</span> <span class="o">&&</span> <span class="nx">object</span><span class="p">.</span><span class="nx">asJQuery</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">object</span><span class="p">.</span><span class="nx">asJQuery</span><span class="p">().</span><span class="nx">get</span><span class="p">(</span><span class="mi">0</span><span class="p">);</span> - <span class="p">}</span></pre></div> </td> </tr> <tr id="section-13"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-13">¶</a> </div> <p>Fall back on jQuery if a string containing a selector expression, -a DOM Element, an existing jQuery object or any other argument that -jQuery accept (http://api.jquery.com/jQuery/)</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">return</span> <span class="nx">jQuery</span><span class="p">(</span><span class="nx">object</span><span class="p">).</span><span class="nx">get</span><span class="p">(</span><span class="mi">0</span><span class="p">);</span> - <span class="p">}</span></pre></div> </td> </tr> <tr id="section-14"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-14">¶</a> </div> <p>Init</p> </td> <td class="code"> <div class="highlight"><pre> <span class="cm">/**</span> -<span class="cm"> * Append children to support nesting</span> -<span class="cm"> *</span> -<span class="cm"> * @example</span> -<span class="cm"> * html.ul(html.li(html.a({href: '#'}, 'home'));</span> -<span class="cm"> */</span> - <span class="k">if</span><span class="p">(</span><span class="nx">spec</span><span class="p">.</span><span class="nx">children</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">append</span><span class="p">(</span><span class="nx">spec</span><span class="p">.</span><span class="nx">children</span><span class="p">);</span> - <span class="p">}</span> - - <span class="k">return</span> <span class="nx">that</span><span class="p">;</span> - <span class="p">}</span> - - - <span class="k">return</span> <span class="nx">htmlCanvas</span><span class="p">;</span> - <span class="p">}</span> -<span class="p">);</span> - -</pre></div> </td> </tr> </tbody> </table> </div> </body> </html> \ No newline at end of file diff --git a/docs/docco/optionalParameterSegment.html b/docs/docco/optionalParameterSegment.html deleted file mode 100644 index 44f1a93e..00000000 --- a/docs/docco/optionalParameterSegment.html +++ /dev/null @@ -1,60 +0,0 @@ -<!DOCTYPE html> <html> <head> <title>optionalParameterSegment.js</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <link rel="stylesheet" media="all" href="docco.css" /> </head> <body> <div id="container"> <div id="background"></div> <div id="jump_to"> Jump To … <div id="jump_wrapper"> <div id="jump_page"> <a class="source" href="core.html"> core.js </a> <a class="source" href="events.html"> events.js </a> <a class="source" href="htmlCanvas.html"> htmlCanvas.js </a> <a class="source" href="router.html"> router.js </a> <a class="source" href="abstractSegment.html"> abstractSegment.js </a> <a class="source" href="hashLocation.html"> hashLocation.js </a> <a class="source" href="optionalParameterSegment.html"> optionalParameterSegment.js </a> <a class="source" href="parameterSegment.html"> parameterSegment.js </a> <a class="source" href="route.html"> route.js </a> <a class="source" href="routeFactory.html"> routeFactory.js </a> <a class="source" href="routeMatchResult.html"> routeMatchResult.js </a> <a class="source" href="router.html"> router.js </a> <a class="source" href="staticSegment.html"> staticSegment.js </a> <a class="source" href="url.html"> url.js </a> <a class="source" href="widget-extensions.html"> widget-extensions.js </a> <a class="source" href="widget.html"> widget.js </a> </div> </div> </div> <table cellpadding="0" cellspacing="0"> <thead> <tr> <th class="docs"> <h1> optionalParameterSegment.js </h1> </th> <th class="code"> </th> </tr> </thead> <tbody> <tr id="section-1"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-1">¶</a> </div> </td> <td class="code"> <div class="highlight"><pre><span></span><span class="nx">define</span><span class="p">([</span> - <span class="s1">'./parameterSegment'</span> -<span class="p">],</span> <span class="kd">function</span><span class="p">(</span><span class="nx">parameterSegment</span><span class="p">)</span> <span class="p">{</span> - - <span class="cm">/**</span> -<span class="cm"> * Optional parameters can have a default value.</span> -<span class="cm"> *</span> -<span class="cm"> * @param {{}} spec abstractSegment string</span> -<span class="cm"> * @param my</span> -<span class="cm"> * @returns {parameter}</span> -<span class="cm"> */</span> - <span class="kd">var</span> <span class="nx">optionalParameterSegment</span> <span class="o">=</span> <span class="nx">parameterSegment</span><span class="p">.</span><span class="nx">subclass</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">that</span><span class="p">,</span> <span class="nx">my</span><span class="p">)</span> <span class="p">{</span> - - <span class="nx">my</span><span class="p">.</span><span class="nx">initialize</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">spec</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">my</span><span class="p">.</span><span class="kr">super</span><span class="p">(</span><span class="nx">spec</span><span class="p">);</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">defaultValue</span> <span class="o">=</span> <span class="nx">my</span><span class="p">.</span><span class="nx">options</span><span class="p">.</span><span class="nx">defaults</span> <span class="o">&&</span> <span class="nx">my</span><span class="p">.</span><span class="nx">options</span><span class="p">.</span><span class="nx">defaults</span><span class="p">[</span><span class="nx">my</span><span class="p">.</span><span class="nx">name</span><span class="p">];</span> - <span class="p">};</span></pre></div> </td> </tr> <tr id="section-2"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-2">¶</a> </div> <p>Public</p> </td> <td class="code"> <div class="highlight"><pre> <span class="cm">/**</span> -<span class="cm"> * Parameter value or default value if not matched.</span> -<span class="cm"> *</span> -<span class="cm"> * @param {string} urlSegment</span> -<span class="cm"> * @returns {*}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">getValue</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">urlSegment</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">urlSegment</span> <span class="o">===</span> <span class="kc">undefined</span> <span class="o">?</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">defaultValue</span> <span class="o">:</span> - <span class="nx">urlSegment</span><span class="p">;</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Always true.</span> -<span class="cm"> * @returns {boolean}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">isOptional</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span> - <span class="k">return</span> <span class="kc">true</span><span class="p">;</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * String representation for segment that can be used eg. when debugging.</span> -<span class="cm"> * @returns {*}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">toString</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span> - <span class="k">return</span> <span class="s1">'optional('</span> <span class="o">+</span> <span class="nx">that</span><span class="p">.</span><span class="nx">getName</span><span class="p">()</span> <span class="o">+</span> <span class="s1">')'</span><span class="p">;</span> - <span class="p">};</span> - <span class="p">});</span> - - <span class="nx">optionalParameterSegment</span><span class="p">.</span><span class="kr">class</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">that</span><span class="p">)</span> <span class="p">{</span> - <span class="cm">/**</span> -<span class="cm"> * Match segment strings with a leading `?`.</span> -<span class="cm"> * @param {string} segmentString</span> -<span class="cm"> * @returns {boolean}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">match</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">segmentString</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">segmentString</span><span class="p">.</span><span class="nx">substr</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> <span class="o">===</span> <span class="s1">'?'</span><span class="p">;</span> - <span class="p">};</span> - <span class="p">});</span> - - <span class="k">return</span> <span class="nx">optionalParameterSegment</span><span class="p">;</span> -<span class="p">});</span> - -</pre></div> </td> </tr> </tbody> </table> </div> </body> </html> \ No newline at end of file diff --git a/docs/docco/parameterSegment.html b/docs/docco/parameterSegment.html deleted file mode 100644 index 5e97b644..00000000 --- a/docs/docco/parameterSegment.html +++ /dev/null @@ -1,118 +0,0 @@ -<!DOCTYPE html> <html> <head> <title>parameterSegment.js</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <link rel="stylesheet" media="all" href="docco.css" /> </head> <body> <div id="container"> <div id="background"></div> <div id="jump_to"> Jump To … <div id="jump_wrapper"> <div id="jump_page"> <a class="source" href="core.html"> core.js </a> <a class="source" href="events.html"> events.js </a> <a class="source" href="htmlCanvas.html"> htmlCanvas.js </a> <a class="source" href="router.html"> router.js </a> <a class="source" href="abstractSegment.html"> abstractSegment.js </a> <a class="source" href="hashLocation.html"> hashLocation.js </a> <a class="source" href="optionalParameterSegment.html"> optionalParameterSegment.js </a> <a class="source" href="parameterSegment.html"> parameterSegment.js </a> <a class="source" href="route.html"> route.js </a> <a class="source" href="routeFactory.html"> routeFactory.js </a> <a class="source" href="routeMatchResult.html"> routeMatchResult.js </a> <a class="source" href="router.html"> router.js </a> <a class="source" href="staticSegment.html"> staticSegment.js </a> <a class="source" href="url.html"> url.js </a> <a class="source" href="widget-extensions.html"> widget-extensions.js </a> <a class="source" href="widget.html"> widget.js </a> </div> </div> </div> <table cellpadding="0" cellspacing="0"> <thead> <tr> <th class="docs"> <h1> parameterSegment.js </h1> </th> <th class="code"> </th> </tr> </thead> <tbody> <tr id="section-1"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-1">¶</a> </div> </td> <td class="code"> <div class="highlight"><pre><span></span><span class="nx">define</span><span class="p">([</span> - <span class="s1">'./abstractSegment'</span> -<span class="p">],</span> <span class="kd">function</span><span class="p">(</span><span class="nx">abstractSegment</span><span class="p">)</span> <span class="p">{</span> - - <span class="cm">/**</span> -<span class="cm"> * Constructs validator functions from constraints parameters.</span> -<span class="cm"> *</span> -<span class="cm"> * @param {*} constraint</span> -<span class="cm"> * @returns {function} function that take a urlSegment as argument</span> -<span class="cm"> */</span> - <span class="kd">function</span> <span class="nx">parameterValidator</span><span class="p">(</span><span class="nx">constraint</span><span class="p">)</span> <span class="p">{</span></pre></div> </td> </tr> <tr id="section-2"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-2">¶</a> </div> <p>Custom function that take a url segment as argument</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">if</span><span class="p">(</span><span class="k">typeof</span> <span class="nx">constraint</span> <span class="o">===</span> <span class="s1">'function'</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">constraint</span><span class="p">;</span> - <span class="p">}</span></pre></div> </td> </tr> <tr id="section-3"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-3">¶</a> </div> <p>Match against RegExp</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">if</span><span class="p">(</span><span class="nx">constraint</span> <span class="k">instanceof</span> <span class="nb">RegExp</span><span class="p">)</span> <span class="p">{</span> - <span class="kd">var</span> <span class="nx">exp</span> <span class="o">=</span> <span class="k">new</span> <span class="nb">RegExp</span><span class="p">(</span><span class="nx">constraint</span><span class="p">);</span> - <span class="k">return</span> <span class="kd">function</span><span class="p">(</span><span class="nx">urlSegment</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">exp</span><span class="p">.</span><span class="nx">test</span><span class="p">(</span><span class="nx">urlSegment</span><span class="p">);</span> - <span class="p">};</span> - <span class="p">}</span></pre></div> </td> </tr> <tr id="section-4"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-4">¶</a> </div> <p>Match valid options in an array</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">if</span><span class="p">(</span><span class="nb">Object</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">toString</span><span class="p">.</span><span class="nx">call</span><span class="p">(</span><span class="nx">constraint</span><span class="p">)</span> <span class="o">===</span> <span class="s1">'[object Array]'</span><span class="p">)</span> <span class="p">{</span> - <span class="kd">var</span> <span class="nx">options</span> <span class="o">=</span> <span class="nx">constraint</span><span class="p">.</span><span class="nx">map</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">option</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">option</span><span class="p">.</span><span class="nx">toLowerCase</span><span class="p">();</span> - <span class="p">});</span> - <span class="k">return</span> <span class="kd">function</span><span class="p">(</span><span class="nx">urlSegment</span><span class="p">)</span> <span class="p">{</span> - <span class="kd">var</span> <span class="nx">val</span> <span class="o">=</span> <span class="nx">urlSegment</span><span class="p">.</span><span class="nx">toLowerCase</span><span class="p">();</span> - <span class="k">return</span> <span class="nx">options</span><span class="p">.</span><span class="nx">indexOf</span><span class="p">(</span><span class="nx">val</span><span class="p">)</span> <span class="o">!==</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span> - <span class="p">};</span> - <span class="p">}</span> - <span class="p">}</span> - - <span class="cm">/**</span> -<span class="cm"> * Parameter match URL segments if all constraints are met.</span> -<span class="cm"> *</span> -<span class="cm"> * @param {{}} spec abstractSegment spec</span> -<span class="cm"> * @param [my]</span> -<span class="cm"> * @returns {parameterSegment}</span> -<span class="cm"> */</span> - <span class="kd">var</span> <span class="nx">parameterSegment</span> <span class="o">=</span> <span class="nx">abstractSegment</span><span class="p">.</span><span class="nx">subclass</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">that</span><span class="p">,</span> <span class="nx">my</span><span class="p">)</span> <span class="p">{</span> - - <span class="nx">my</span><span class="p">.</span><span class="nx">initialize</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">spec</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">my</span><span class="p">.</span><span class="kr">super</span><span class="p">(</span><span class="nx">spec</span><span class="p">);</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">name</span> <span class="o">=</span> <span class="nx">my</span><span class="p">.</span><span class="nx">segmentString</span><span class="p">.</span><span class="nx">substr</span><span class="p">(</span><span class="mi">1</span><span class="p">);</span> <span class="c1">// strip of the leading #</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">constraints</span> <span class="o">=</span> <span class="p">(</span><span class="nx">my</span><span class="p">.</span><span class="nx">options</span><span class="p">.</span><span class="nx">constraints</span> <span class="o">&&</span> <span class="nx">my</span><span class="p">.</span><span class="nx">options</span><span class="p">.</span><span class="nx">constraints</span><span class="p">[</span><span class="nx">my</span><span class="p">.</span><span class="nx">name</span><span class="p">]</span> <span class="o">&&</span> - <span class="p">[</span><span class="nx">my</span><span class="p">.</span><span class="nx">options</span><span class="p">.</span><span class="nx">constraints</span><span class="p">[</span><span class="nx">my</span><span class="p">.</span><span class="nx">name</span><span class="p">]])</span> <span class="o">||</span> <span class="p">[];</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">validators</span> <span class="o">=</span> <span class="nx">my</span><span class="p">.</span><span class="nx">constraints</span><span class="p">.</span><span class="nx">map</span><span class="p">(</span><span class="nx">parameterValidator</span><span class="p">).</span><span class="nx">filter</span><span class="p">(</span><span class="nb">Boolean</span><span class="p">);</span> - <span class="p">};</span></pre></div> </td> </tr> <tr id="section-5"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-5">¶</a> </div> <p>Public</p> </td> <td class="code"> <div class="highlight"><pre> <span class="cm">/**</span> -<span class="cm"> * Name is segmentString without leading property type char.</span> -<span class="cm"> *</span> -<span class="cm"> * @returns {string}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">getName</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">my</span><span class="p">.</span><span class="nx">name</span><span class="p">;</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Value captured for urlSegment</span> -<span class="cm"> *</span> -<span class="cm"> * @param {string} urlSegment</span> -<span class="cm"> * @returns {*}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">getValue</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">urlSegment</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">urlSegment</span><span class="p">;</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Always true</span> -<span class="cm"> *</span> -<span class="cm"> * @returns {boolean}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">isParameter</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span> - <span class="k">return</span> <span class="kc">true</span><span class="p">;</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Match urSegment if all constraints are met.</span> -<span class="cm"> *</span> -<span class="cm"> * @param {string} urlSegment</span> -<span class="cm"> * @returns {boolean|*}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">match</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">urlSegment</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">urlSegment</span> <span class="o">!==</span> <span class="kc">undefined</span> <span class="o">&&</span> <span class="nx">that</span><span class="p">.</span><span class="nx">validate</span><span class="p">(</span><span class="nx">urlSegment</span><span class="p">);</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Answers true if url segment meet all constraints for parameter.</span> -<span class="cm"> *</span> -<span class="cm"> * @param {string} urlSegment</span> -<span class="cm"> * @returns {boolean}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">validate</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">urlSegment</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">my</span><span class="p">.</span><span class="nx">validators</span><span class="p">.</span><span class="nx">every</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">validator</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">validator</span><span class="p">(</span><span class="nx">urlSegment</span><span class="p">);</span> - <span class="p">});</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * String representation for segment that can be used eg. when debugging.</span> -<span class="cm"> * @returns {*}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">toString</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span> - <span class="k">return</span> <span class="s1">'param('</span> <span class="o">+</span> <span class="nx">that</span><span class="p">.</span><span class="nx">getName</span><span class="p">()</span> <span class="o">+</span> <span class="s1">')'</span><span class="p">;</span> - <span class="p">};</span> - <span class="p">});</span> - - <span class="nx">parameterSegment</span><span class="p">.</span><span class="kr">class</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">that</span><span class="p">)</span> <span class="p">{</span> - - <span class="cm">/**</span> -<span class="cm"> * Match segment strings with a leading `#`.</span> -<span class="cm"> * @param {string} segmentString</span> -<span class="cm"> * @returns {boolean}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">match</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">segmentString</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">segmentString</span><span class="p">.</span><span class="nx">substr</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> <span class="o">===</span> <span class="s1">'#'</span><span class="p">;</span> - <span class="p">};</span> - <span class="p">});</span> - - <span class="k">return</span> <span class="nx">parameterSegment</span><span class="p">;</span> -<span class="p">});</span> - -</pre></div> </td> </tr> </tbody> </table> </div> </body> </html> \ No newline at end of file diff --git a/docs/docco/route.html b/docs/docco/route.html deleted file mode 100644 index 583825fc..00000000 --- a/docs/docco/route.html +++ /dev/null @@ -1,270 +0,0 @@ -<!DOCTYPE html> <html> <head> <title>route.js</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <link rel="stylesheet" media="all" href="docco.css" /> </head> <body> <div id="container"> <div id="background"></div> <div id="jump_to"> Jump To … <div id="jump_wrapper"> <div id="jump_page"> <a class="source" href="core.html"> core.js </a> <a class="source" href="events.html"> events.js </a> <a class="source" href="htmlCanvas.html"> htmlCanvas.js </a> <a class="source" href="router.html"> router.js </a> <a class="source" href="abstractSegment.html"> abstractSegment.js </a> <a class="source" href="hashLocation.html"> hashLocation.js </a> <a class="source" href="optionalParameterSegment.html"> optionalParameterSegment.js </a> <a class="source" href="parameterSegment.html"> parameterSegment.js </a> <a class="source" href="route.html"> route.js </a> <a class="source" href="routeFactory.html"> routeFactory.js </a> <a class="source" href="routeMatchResult.html"> routeMatchResult.js </a> <a class="source" href="router.html"> router.js </a> <a class="source" href="staticSegment.html"> staticSegment.js </a> <a class="source" href="url.html"> url.js </a> <a class="source" href="widget-extensions.html"> widget-extensions.js </a> <a class="source" href="widget.html"> widget.js </a> </div> </div> </div> <table cellpadding="0" cellspacing="0"> <thead> <tr> <th class="docs"> <h1> route.js </h1> </th> <th class="code"> </th> </tr> </thead> <tbody> <tr id="section-1"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-1">¶</a> </div> </td> <td class="code"> <div class="highlight"><pre><span></span><span class="nx">define</span><span class="p">(</span> - <span class="p">[</span><span class="s1">'./routeFactory'</span><span class="p">,</span> <span class="s1">'../events'</span><span class="p">,</span> <span class="s1">'./routeMatchResult'</span><span class="p">,</span> <span class="s1">'jquery'</span><span class="p">,</span> <span class="s1">'./url'</span><span class="p">,</span> - <span class="s1">'klassified'</span><span class="p">],</span> - <span class="kd">function</span><span class="p">(</span><span class="nx">routeFactory</span><span class="p">,</span> <span class="nx">events</span><span class="p">,</span> <span class="nx">routeMatchResult</span><span class="p">,</span> <span class="nx">jQuery</span><span class="p">,</span> <span class="nx">url</span><span class="p">,</span> <span class="nx">object</span><span class="p">)</span> <span class="p">{</span> - - <span class="cm">/**</span> -<span class="cm"> * Routes represent the path for which an action should be taken (see `matched` event).</span> -<span class="cm"> *</span> -<span class="cm"> * Route is implemented as an array of segments. A route can be constructed from a segment array</span> -<span class="cm"> * or a route pattern string.</span> -<span class="cm"> *</span> -<span class="cm"> * @example</span> -<span class="cm"> * var aRouteFromSegments = route({segments: arrayOfRouteSegments});</span> -<span class="cm"> * var aRouteFromPattern = route('/segmentA/#aParameter/?andAnOptionalParameter');</span> -<span class="cm"> *</span> -<span class="cm"> * Route pattern strings are parsed into segment arrays by `routeFactory`.</span> -<span class="cm"> *</span> -<span class="cm"> * Route match URL:s by comparing the URL segments against an array</span> -<span class="cm"> * of route segments. A route match a URL if the segments matches the route segments.</span> -<span class="cm"> *</span> -<span class="cm"> * @example</span> -<span class="cm"> * route('/User/#id').matchUrl('/User/john').matched(); // => true</span> -<span class="cm"> *</span> -<span class="cm"> * Route would match URL since first segment in URL match Route (both 'User') and second</span> -<span class="cm"> * segment is matched since a route parameter will match all values (if no constraints).</span> -<span class="cm"> *</span> -<span class="cm"> * Some segments can be optional and other mandatory. The strategy to match route with optional</span> -<span class="cm"> * segments is to match it against the segments and then all combinations of optional parameters.</span> -<span class="cm"> *</span> -<span class="cm"> * An array with all optional sequences is calculated when route is created.</span> -<span class="cm"> *</span> -<span class="cm"> * Note: Avoid large number of optionals since it will consume memory and slow down matching.</span> -<span class="cm"> * You can use query parameters instead.</span> -<span class="cm"> *</span> -<span class="cm"> * When a URL is matched the router will bind matches parameters to corresponding segments in URL</span> -<span class="cm"> * and return them in `matchResult`</span> -<span class="cm"> *</span> -<span class="cm"> * @example</span> -<span class="cm"> *</span> -<span class="cm"> * var result = route('/user/#id').matchUrl('/user/john');</span> -<span class="cm"> * console.dir(result.getValues()); // => { user: 'john'}</span> -<span class="cm"> *</span> -<span class="cm"> * Routes can also be used as patterns for creating URLs</span> -<span class="cm"> *</span> -<span class="cm"> * var url = route('/user/#id').expand({id: 'john'});</span> -<span class="cm"> * console.log(url); // => '/user/john'</span> -<span class="cm"> *</span> -<span class="cm"> *</span> -<span class="cm"> * @param {string|{}} spec Route pattern or route spec</span> -<span class="cm"> * @param {boolean} spec.ignoreTrailingSegments Route will match if all route segment match</span> -<span class="cm"> * even if url have trailing unmatched segments</span> -<span class="cm"> * @param {segment[]} [spec.segments] Array of route segments</span> -<span class="cm"> *</span> -<span class="cm"> * @param {{}} my</span> -<span class="cm"> * @returns {route}</span> -<span class="cm"> */</span> - <span class="kd">var</span> <span class="nx">route</span> <span class="o">=</span> <span class="nx">object</span><span class="p">.</span><span class="nx">subclass</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">that</span><span class="p">,</span> <span class="nx">my</span><span class="p">)</span> <span class="p">{</span> - - <span class="kd">var</span> <span class="nx">segments</span><span class="p">;</span> - <span class="kd">var</span> <span class="nx">ignoreTrailingSegments</span><span class="p">;</span> - <span class="kd">var</span> <span class="nx">optionalSequences</span><span class="p">;</span> - - <span class="nx">my</span><span class="p">.</span><span class="nx">initialize</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">spec</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">my</span><span class="p">.</span><span class="kr">super</span><span class="p">();</span></pre></div> </td> </tr> <tr id="section-2"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-2">¶</a> </div> <p>Build segments from pattern</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">segments</span> <span class="o">=</span> <span class="nx">routeFactory</span><span class="p">(</span><span class="nx">spec</span><span class="p">.</span><span class="nx">pattern</span><span class="p">,</span> <span class="nx">spec</span><span class="p">.</span><span class="nx">options</span><span class="p">);</span></pre></div> </td> </tr> <tr id="section-3"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-3">¶</a> </div> <p>Route match URL if all route segments match -but URL still contain trailing segments (default false)</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">ignoreTrailingSegments</span> <span class="o">=</span> <span class="p">(</span><span class="nx">spec</span><span class="p">.</span><span class="nx">options</span> <span class="o">&&</span> <span class="nx">spec</span><span class="p">.</span><span class="nx">options</span><span class="p">.</span><span class="nx">ignoreTrailingSegments</span><span class="p">)</span> <span class="o">||</span> <span class="kc">false</span><span class="p">;</span></pre></div> </td> </tr> <tr id="section-4"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-4">¶</a> </div> <p>Array with all optional sequences, ie. all combinations -of optional parameters. Array must be ordered to match URL:s -left to right.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">optionalSequences</span> <span class="o">=</span> <span class="p">[];</span></pre></div> </td> </tr> <tr id="section-5"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-5">¶</a> </div> <p>Pre-calculate optional sequences.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">ensureOptionalSequences</span><span class="p">();</span> - <span class="p">};</span> - - <span class="nx">my</span><span class="p">.</span><span class="nx">events</span> <span class="o">=</span> <span class="nx">events</span><span class="p">.</span><span class="nx">eventCategory</span><span class="p">();</span></pre></div> </td> </tr> <tr id="section-6"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-6">¶</a> </div> <p>Public</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">that</span><span class="p">.</span><span class="nx">onMatched</span> <span class="o">=</span> <span class="nx">my</span><span class="p">.</span><span class="nx">events</span><span class="p">.</span><span class="nx">createEvent</span><span class="p">(</span><span class="s1">'matched'</span><span class="p">);</span></pre></div> </td> </tr> <tr id="section-7"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-7">¶</a> </div> <p>@deprecated Use event property instead</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">that</span><span class="p">.</span><span class="nx">on</span> <span class="o">=</span> <span class="nx">my</span><span class="p">.</span><span class="nx">events</span><span class="p">.</span><span class="nx">on</span><span class="p">;</span> - - <span class="cm">/**</span> -<span class="cm"> * Match route against URL by comparing segments. Triggers</span> -<span class="cm"> * `onMatched` event on match.</span> -<span class="cm"> *</span> -<span class="cm"> * @param {url} url</span> -<span class="cm"> * @returns {routeMatchResult}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">matchUrl</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">url</span><span class="p">)</span> <span class="p">{</span> - <span class="kd">var</span> <span class="nx">match</span> <span class="o">=</span> <span class="nx">findMatch</span><span class="p">(</span><span class="nx">url</span><span class="p">);</span> - <span class="k">if</span><span class="p">(</span><span class="o">!</span><span class="nx">match</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">routeMatchResult</span><span class="p">.</span><span class="nx">routeNoMatchResult</span><span class="p">;</span> - <span class="p">}</span> - - <span class="kd">var</span> <span class="nx">result</span> <span class="o">=</span> <span class="nx">createMatchResult</span><span class="p">(</span><span class="nx">match</span><span class="p">,</span> <span class="nx">url</span><span class="p">);</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">events</span><span class="p">.</span><span class="nx">trigger</span><span class="p">(</span><span class="s1">'matched'</span><span class="p">,</span> <span class="nx">result</span><span class="p">);</span> - - <span class="k">return</span> <span class="nx">result</span><span class="p">;</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Expands route into a url. All non optional route parameters must exist</span> -<span class="cm"> * in `params`.</span> -<span class="cm"> *</span> -<span class="cm"> * @param {{}} params Key/Values where keys are route parameter names and values the values to use</span> -<span class="cm"> *</span> -<span class="cm"> * @returns {string} URL string</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">expand</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">params</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">params</span> <span class="o">=</span> <span class="nx">params</span> <span class="o">||</span> <span class="p">{};</span></pre></div> </td> </tr> <tr id="section-8"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-8">¶</a> </div> <p>Try to expand route into URL</p> </td> <td class="code"> <div class="highlight"><pre> <span class="kd">var</span> <span class="nx">urlSegments</span> <span class="o">=</span> <span class="p">[];</span> - <span class="nx">segments</span><span class="p">.</span><span class="nx">forEach</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">routeSegment</span><span class="p">)</span> <span class="p">{</span> - <span class="kd">var</span> <span class="nx">urlSegment</span><span class="p">;</span> - <span class="k">if</span><span class="p">(</span><span class="nx">routeSegment</span><span class="p">.</span><span class="nx">isParameter</span><span class="p">())</span> <span class="p">{</span></pre></div> </td> </tr> <tr id="section-9"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-9">¶</a> </div> <p>Use supplied value for parameters</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">urlSegment</span> <span class="o">=</span> <span class="nx">params</span><span class="p">[</span><span class="nx">routeSegment</span><span class="p">.</span><span class="nx">getName</span><span class="p">()];</span> - <span class="p">}</span> <span class="k">else</span> <span class="p">{</span></pre></div> </td> </tr> <tr id="section-10"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-10">¶</a> </div> <p>name/value for segments</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">urlSegment</span> <span class="o">=</span> <span class="nx">routeSegment</span><span class="p">.</span><span class="nx">getValue</span><span class="p">();</span> - <span class="p">}</span></pre></div> </td> </tr> <tr id="section-11"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-11">¶</a> </div> <p>Skip if no match and optional</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">if</span><span class="p">(</span><span class="nx">urlSegment</span> <span class="o">===</span> <span class="kc">undefined</span> <span class="o">&&</span> - <span class="nx">routeSegment</span><span class="p">.</span><span class="nx">isOptional</span><span class="p">())</span> <span class="p">{</span> - <span class="k">return</span><span class="p">;</span> - <span class="p">}</span></pre></div> </td> </tr> <tr id="section-12"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-12">¶</a> </div> <p>Validate segment</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">routeSegment</span><span class="p">.</span><span class="nx">match</span><span class="p">(</span><span class="nx">urlSegment</span><span class="p">))</span> <span class="p">{</span> - <span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span><span class="p">(</span><span class="s1">'Could not generate a valid URL'</span><span class="p">);</span> - <span class="p">}</span> - - <span class="nx">urlSegments</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">urlSegment</span><span class="p">);</span> - <span class="p">});</span> - - <span class="kd">var</span> <span class="nx">query</span> <span class="o">=</span> <span class="p">{};</span> - - <span class="nb">Object</span><span class="p">.</span><span class="nx">keys</span><span class="p">(</span><span class="nx">params</span><span class="p">).</span><span class="nx">forEach</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">param</span><span class="p">)</span> <span class="p">{</span> - <span class="k">if</span><span class="p">(</span><span class="o">!</span><span class="nx">that</span><span class="p">.</span><span class="nx">hasParameter</span><span class="p">(</span><span class="nx">param</span><span class="p">))</span> <span class="p">{</span> - <span class="nx">query</span><span class="p">[</span><span class="nx">param</span><span class="p">]</span> <span class="o">=</span> <span class="nx">params</span><span class="p">[</span><span class="nx">param</span><span class="p">];</span></pre></div> </td> </tr> <tr id="section-13"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-13">¶</a> </div> <p>Handle array param values</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">if</span><span class="p">(</span><span class="nx">query</span><span class="p">[</span><span class="nx">param</span><span class="p">]</span> <span class="k">instanceof</span> <span class="nb">Array</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">query</span><span class="p">[</span><span class="nx">param</span><span class="p">]</span> <span class="o">=</span> <span class="nx">query</span><span class="p">[</span><span class="nx">param</span><span class="p">].</span><span class="nx">join</span><span class="p">(</span><span class="s1">','</span><span class="p">);</span> - <span class="p">}</span> - <span class="p">}</span> - <span class="p">});</span> - - <span class="k">return</span> <span class="nx">url</span><span class="p">.</span><span class="nx">build</span><span class="p">(</span><span class="nx">urlSegments</span><span class="p">.</span><span class="nx">join</span><span class="p">(</span><span class="s1">'/'</span><span class="p">),</span> <span class="nx">query</span><span class="p">).</span><span class="nx">toString</span><span class="p">();</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Answers true if parameter with `name` exists in route.</span> -<span class="cm"> *</span> -<span class="cm"> * @param {string} name</span> -<span class="cm"> * @returns {boolean}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">hasParameter</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">name</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">segments</span><span class="p">.</span><span class="nx">some</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">segment</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">segment</span><span class="p">.</span><span class="nx">isParameter</span><span class="p">()</span> <span class="o">&&</span> <span class="nx">segment</span><span class="p">.</span><span class="nx">getName</span><span class="p">()</span> <span class="o">===</span> <span class="nx">name</span><span class="p">;</span> - <span class="p">});</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Returns a string representation of route useful for debugging.</span> -<span class="cm"> *</span> -<span class="cm"> * @returns {string}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">toString</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span> - <span class="k">return</span> <span class="s1">'route('</span> <span class="o">+</span> <span class="nx">segments</span><span class="p">.</span><span class="nx">join</span><span class="p">(</span><span class="s1">'/'</span><span class="p">)</span> <span class="o">+</span> <span class="s1">')'</span><span class="p">;</span> - <span class="p">};</span></pre></div> </td> </tr> <tr id="section-14"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-14">¶</a> </div> <p>Private</p> </td> <td class="code"> <div class="highlight"><pre> <span class="cm">/**</span> -<span class="cm"> * Checks if an array of url segments match a sequence of route segments.</span> -<span class="cm"> *</span> -<span class="cm"> * @param {string[]} urlSegments</span> -<span class="cm"> * @param {segments[]} [sequence] Route segments will be used as default</span> -<span class="cm"> * @returns {boolean}</span> -<span class="cm"> */</span> - <span class="kd">function</span> <span class="nx">isMatch</span><span class="p">(</span><span class="nx">urlSegments</span><span class="p">,</span> <span class="nx">sequence</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">sequence</span> <span class="o">=</span> <span class="nx">sequence</span> <span class="o">||</span> <span class="nx">segments</span><span class="p">;</span></pre></div> </td> </tr> <tr id="section-15"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-15">¶</a> </div> <p>Can not match if different sizes</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">if</span><span class="p">(</span><span class="nx">urlSegments</span><span class="p">.</span><span class="nx">length</span> <span class="o">!=</span> <span class="nx">sequence</span><span class="p">.</span><span class="nx">length</span> <span class="o">&&</span> <span class="o">!</span><span class="nx">ignoreTrailingSegments</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="kc">false</span><span class="p">;</span> - <span class="p">}</span></pre></div> </td> </tr> <tr id="section-16"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-16">¶</a> </div> <p>All routeSegments much match corresponding URL segment</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">return</span> <span class="nx">sequence</span><span class="p">.</span><span class="nx">every</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">routeSegment</span><span class="p">,</span> <span class="nx">index</span><span class="p">)</span> <span class="p">{</span> - <span class="kd">var</span> <span class="nx">urlSegment</span> <span class="o">=</span> <span class="nx">urlSegments</span><span class="p">[</span><span class="nx">index</span><span class="p">];</span> - <span class="k">return</span> <span class="nx">urlSegment</span> <span class="o">!==</span> <span class="kc">undefined</span> <span class="o">&&</span> <span class="nx">routeSegment</span><span class="p">.</span><span class="nx">match</span><span class="p">(</span><span class="nx">urlSegment</span><span class="p">);</span> - <span class="p">});</span> - <span class="p">}</span> - - <span class="cm">/**</span> -<span class="cm"> * Returns first sequence of segments that match url or null if no sequence match.</span> -<span class="cm"> *</span> -<span class="cm"> * @param {url} url</span> -<span class="cm"> * @returns {segment[]}</span> -<span class="cm"> */</span> - <span class="kd">function</span> <span class="nx">findMatch</span><span class="p">(</span><span class="nx">url</span><span class="p">)</span> <span class="p">{</span> - <span class="kd">var</span> <span class="nx">urlSegments</span> <span class="o">=</span> <span class="nx">url</span><span class="p">.</span><span class="nx">getSegments</span><span class="p">();</span></pre></div> </td> </tr> <tr id="section-17"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-17">¶</a> </div> <p>Try match url segments</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">if</span><span class="p">(</span><span class="nx">isMatch</span><span class="p">(</span><span class="nx">urlSegments</span><span class="p">))</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">segments</span><span class="p">;</span> - <span class="p">}</span></pre></div> </td> </tr> <tr id="section-18"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-18">¶</a> </div> <p>then optional sequences</p> </td> <td class="code"> <div class="highlight"><pre> <span class="kd">var</span> <span class="nx">sequenceIndex</span><span class="p">;</span> - <span class="k">for</span><span class="p">(</span><span class="nx">sequenceIndex</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">sequenceIndex</span> <span class="o"><</span> <span class="nx">optionalSequences</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span> <span class="nx">sequenceIndex</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span> - <span class="k">if</span><span class="p">(</span><span class="nx">isMatch</span><span class="p">(</span><span class="nx">urlSegments</span><span class="p">,</span> <span class="nx">optionalSequences</span><span class="p">[</span><span class="nx">sequenceIndex</span><span class="p">]))</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">optionalSequences</span><span class="p">[</span><span class="nx">sequenceIndex</span><span class="p">];</span> - <span class="p">}</span> - <span class="p">}</span> - - <span class="k">return</span> <span class="kc">null</span><span class="p">;</span> - <span class="p">}</span> - - <span class="cm">/**</span> -<span class="cm"> * Pre-calculate all optional sequences of segments.</span> -<span class="cm"> */</span> - <span class="kd">function</span> <span class="nx">ensureOptionalSequences</span> <span class="p">()</span> <span class="p">{</span></pre></div> </td> </tr> <tr id="section-19"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-19">¶</a> </div> <p>Find positions for optionals</p> </td> <td class="code"> <div class="highlight"><pre> <span class="kd">var</span> <span class="nx">optionalPositions</span> <span class="o">=</span> <span class="p">[];</span> - <span class="nx">segments</span><span class="p">.</span><span class="nx">forEach</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">segment</span><span class="p">,</span> <span class="nx">index</span><span class="p">)</span> <span class="p">{</span> - <span class="k">if</span><span class="p">(</span><span class="nx">segment</span><span class="p">.</span><span class="nx">isOptional</span><span class="p">())</span> <span class="p">{</span> - <span class="nx">optionalPositions</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">index</span><span class="p">);</span> - <span class="p">}</span> - <span class="p">});</span> - - <span class="k">if</span><span class="p">(</span><span class="nx">optionalPositions</span><span class="p">.</span><span class="nx">length</span> <span class="o">></span> <span class="mi">15</span><span class="p">)</span> <span class="p">{</span> - <span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span> <span class="p">(</span><span class="s1">'Too many optional arguments. "'</span> <span class="o">+</span> <span class="nx">optionalPositions</span><span class="p">.</span><span class="nx">length</span> <span class="o">+</span> - <span class="s1">'"" optionals would generate '</span> <span class="o">+</span> <span class="nb">Math</span><span class="p">.</span><span class="nx">pow</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="nx">optionalPositions</span><span class="p">.</span><span class="nx">length</span><span class="p">)</span> <span class="o">+</span> - <span class="s1">' optional sequences.'</span><span class="p">);</span> - <span class="p">}</span></pre></div> </td> </tr> <tr id="section-20"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-20">¶</a> </div> <p>Generate possible sequences</p> </td> <td class="code"> <div class="highlight"><pre> <span class="kd">var</span> <span class="nx">possibleOptionalSequences</span> <span class="o">=</span> <span class="nx">orderedSubsets</span><span class="p">(</span><span class="nx">optionalPositions</span><span class="p">);</span> - - <span class="nx">possibleOptionalSequences</span><span class="p">.</span><span class="nx">forEach</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">sequence</span><span class="p">)</span> <span class="p">{</span></pre></div> </td> </tr> <tr id="section-21"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-21">¶</a> </div> <p>Clone segments array and remove optionals matching -indexes in index sequence</p> </td> <td class="code"> <div class="highlight"><pre> <span class="kd">var</span> <span class="nx">optionalSequence</span> <span class="o">=</span> <span class="nx">segments</span><span class="p">.</span><span class="nx">slice</span><span class="p">();</span> - <span class="nx">sequence</span><span class="p">.</span><span class="nx">forEach</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">optionalIndex</span><span class="p">,</span> <span class="nx">numRemoved</span><span class="p">)</span> <span class="p">{</span></pre></div> </td> </tr> <tr id="section-22"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-22">¶</a> </div> <p>Remove optional but take in to account that we have already -removed {numRemoved} from permutation.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">optionalSequence</span><span class="p">.</span><span class="nx">splice</span><span class="p">(</span><span class="nx">optionalIndex</span> <span class="o">-</span> <span class="nx">numRemoved</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> - <span class="p">});</span> - - <span class="nx">optionalSequences</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">optionalSequence</span><span class="p">);</span> - <span class="p">});</span> - <span class="p">}</span> - - <span class="cm">/**</span> -<span class="cm"> * Create a 'routeMatchResult' from a matched sequence.</span> -<span class="cm"> *</span> -<span class="cm"> * @param {segment[]} match Matched segment sequence</span> -<span class="cm"> * @param {url} url Matched URL</span> -<span class="cm"> *</span> -<span class="cm"> * @returns {routeMatchResult}</span> -<span class="cm"> */</span> - <span class="kd">function</span> <span class="nx">createMatchResult</span><span class="p">(</span><span class="nx">match</span><span class="p">,</span> <span class="nx">url</span><span class="p">)</span> <span class="p">{</span> - <span class="kd">var</span> <span class="nx">urlSegments</span> <span class="o">=</span> <span class="nx">url</span><span class="p">.</span><span class="nx">getSegments</span><span class="p">();</span> - - <span class="kd">var</span> <span class="nx">parameterValues</span> <span class="o">=</span> <span class="p">{};</span> - <span class="nx">segments</span><span class="p">.</span><span class="nx">forEach</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">routeSegment</span><span class="p">)</span> <span class="p">{</span> - <span class="k">if</span><span class="p">(</span><span class="o">!</span><span class="nx">routeSegment</span><span class="p">.</span><span class="nx">isParameter</span><span class="p">())</span> <span class="p">{</span> - <span class="k">return</span><span class="p">;</span> - <span class="p">}</span> - - <span class="kd">var</span> <span class="nx">matchedIndex</span> <span class="o">=</span> <span class="nx">match</span><span class="p">.</span><span class="nx">indexOf</span><span class="p">(</span><span class="nx">routeSegment</span><span class="p">);</span> - <span class="k">if</span><span class="p">(</span><span class="nx">matchedIndex</span> <span class="o">>=</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">parameterValues</span><span class="p">[</span><span class="nx">routeSegment</span><span class="p">.</span><span class="nx">getName</span><span class="p">()]</span> <span class="o">=</span> <span class="nx">routeSegment</span><span class="p">.</span><span class="nx">getValue</span><span class="p">(</span><span class="nx">urlSegments</span><span class="p">[</span><span class="nx">matchedIndex</span><span class="p">]);</span> - <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> - <span class="nx">parameterValues</span><span class="p">[</span><span class="nx">routeSegment</span><span class="p">.</span><span class="nx">getName</span><span class="p">()]</span> <span class="o">=</span> <span class="nx">routeSegment</span><span class="p">.</span><span class="nx">getValue</span><span class="p">();</span> - <span class="p">}</span> - <span class="p">});</span> - - - <span class="k">return</span> <span class="nx">routeMatchResult</span><span class="p">({</span><span class="nx">route</span><span class="o">:</span> <span class="nx">that</span><span class="p">,</span> <span class="nx">url</span><span class="o">:</span> <span class="nx">url</span><span class="p">,</span> <span class="nx">values</span><span class="o">:</span> <span class="nx">parameterValues</span> <span class="p">});</span> - <span class="p">}</span> - <span class="p">});</span> - - <span class="cm">/**</span> -<span class="cm"> * Generates all subsets of an array with same internal order. Returned subsets are</span> -<span class="cm"> * ordered in right to left order.</span> -<span class="cm"> *</span> -<span class="cm"> * @example</span> -<span class="cm"> * orderedSubsets([1,2,3]); // => [[1,2,3],[2,3],[1,3],[3],[1,2],[2],[1]]</span> -<span class="cm"> *</span> -<span class="cm"> * @param {[]} input</span> -<span class="cm"> * @returns {[[]]} Array with all subset arrays</span> -<span class="cm"> */</span> - <span class="kd">function</span> <span class="nx">orderedSubsets</span><span class="p">(</span><span class="nx">input</span><span class="p">)</span> <span class="p">{</span> - <span class="kd">var</span> <span class="nx">results</span> <span class="o">=</span> <span class="p">[],</span> <span class="nx">result</span><span class="p">,</span> <span class="nx">mask</span><span class="p">,</span> - <span class="nx">total</span> <span class="o">=</span> <span class="nb">Math</span><span class="p">.</span><span class="nx">pow</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="nx">input</span><span class="p">.</span><span class="nx">length</span><span class="p">);</span> - - <span class="k">for</span> <span class="p">(</span><span class="nx">mask</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> <span class="nx">mask</span> <span class="o"><</span> <span class="nx">total</span><span class="p">;</span> <span class="nx">mask</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">result</span> <span class="o">=</span> <span class="p">[];</span> - <span class="nx">i</span> <span class="o">=</span> <span class="nx">input</span><span class="p">.</span><span class="nx">length</span> <span class="o">-</span> <span class="mi">1</span><span class="p">;</span> - <span class="k">do</span> <span class="p">{</span> - <span class="k">if</span> <span class="p">((</span><span class="nx">mask</span> <span class="o">&</span> <span class="p">(</span><span class="mi">1</span> <span class="o"><<</span> <span class="nx">i</span><span class="p">))</span> <span class="o">!==</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">result</span><span class="p">.</span><span class="nx">unshift</span><span class="p">(</span><span class="nx">input</span><span class="p">[</span><span class="nx">i</span><span class="p">]);</span> - <span class="p">}</span> - <span class="p">}</span> <span class="k">while</span> <span class="p">(</span><span class="nx">i</span><span class="o">--</span><span class="p">);</span> - <span class="nx">results</span><span class="p">.</span><span class="nx">unshift</span><span class="p">(</span><span class="nx">result</span><span class="p">);</span> - <span class="p">}</span> - - <span class="k">return</span> <span class="nx">results</span><span class="p">;</span> - <span class="p">}</span> - - <span class="k">return</span> <span class="nx">route</span><span class="p">;</span> - <span class="p">}</span> -<span class="p">);</span> - -</pre></div> </td> </tr> </tbody> </table> </div> </body> </html> \ No newline at end of file diff --git a/docs/docco/routeFactory.html b/docs/docco/routeFactory.html deleted file mode 100644 index 4d0b86ec..00000000 --- a/docs/docco/routeFactory.html +++ /dev/null @@ -1,71 +0,0 @@ -<!DOCTYPE html> <html> <head> <title>routeFactory.js</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <link rel="stylesheet" media="all" href="docco.css" /> </head> <body> <div id="container"> <div id="background"></div> <div id="jump_to"> Jump To … <div id="jump_wrapper"> <div id="jump_page"> <a class="source" href="core.html"> core.js </a> <a class="source" href="events.html"> events.js </a> <a class="source" href="htmlCanvas.html"> htmlCanvas.js </a> <a class="source" href="router.html"> router.js </a> <a class="source" href="abstractSegment.html"> abstractSegment.js </a> <a class="source" href="hashLocation.html"> hashLocation.js </a> <a class="source" href="optionalParameterSegment.html"> optionalParameterSegment.js </a> <a class="source" href="parameterSegment.html"> parameterSegment.js </a> <a class="source" href="route.html"> route.js </a> <a class="source" href="routeFactory.html"> routeFactory.js </a> <a class="source" href="routeMatchResult.html"> routeMatchResult.js </a> <a class="source" href="router.html"> router.js </a> <a class="source" href="staticSegment.html"> staticSegment.js </a> <a class="source" href="url.html"> url.js </a> <a class="source" href="widget-extensions.html"> widget-extensions.js </a> <a class="source" href="widget.html"> widget.js </a> </div> </div> </div> <table cellpadding="0" cellspacing="0"> <thead> <tr> <th class="docs"> <h1> routeFactory.js </h1> </th> <th class="code"> </th> </tr> </thead> <tbody> <tr id="section-1"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-1">¶</a> </div> </td> <td class="code"> <div class="highlight"><pre><span></span><span class="nx">define</span><span class="p">([</span> - <span class="s1">'./parameterSegment'</span><span class="p">,</span> - <span class="s1">'./optionalParameterSegment'</span><span class="p">,</span> - <span class="s1">'./staticSegment'</span><span class="p">,</span> - <span class="s1">'./abstractSegment'</span> -<span class="p">],</span> <span class="kd">function</span><span class="p">(</span><span class="nx">parameterSegment</span><span class="p">,</span> <span class="nx">optionalParameterSegment</span><span class="p">,</span> <span class="nx">staticSegment</span><span class="p">,</span> <span class="nx">abstractSegment</span><span class="p">)</span> <span class="p">{</span> - - <span class="cm">/**</span> -<span class="cm"> * Token/Char used to separate segments in route patterns.</span> -<span class="cm"> * @type {string}</span> -<span class="cm"> */</span> - <span class="kd">var</span> <span class="nx">routePatternSeparator</span> <span class="o">=</span> <span class="s1">'/'</span><span class="p">;</span> - - <span class="cm">/**</span> -<span class="cm"> * Creates a route from pattern. A pattern is a string with route segments</span> -<span class="cm"> * separated by `routePatternSeparator`.</span> -<span class="cm"> *</span> -<span class="cm"> * @example</span> -<span class="cm"> * routeFactory(`/foo/#bar/?baz`);</span> -<span class="cm"> *</span> -<span class="cm"> * @param {string} pattern</span> -<span class="cm"> * @param {{}} options</span> -<span class="cm"> * @returns {abstractSegment[]}</span> -<span class="cm"> */</span> - <span class="kd">function</span> <span class="nx">routeFactory</span><span class="p">(</span><span class="nx">pattern</span><span class="p">,</span> <span class="nx">options</span><span class="p">)</span> <span class="p">{</span> - <span class="k">if</span><span class="p">(</span><span class="o">!</span><span class="nx">pattern</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="p">[];</span> - <span class="p">}</span> - - <span class="nx">options</span> <span class="o">=</span> <span class="nx">options</span> <span class="o">||</span> <span class="p">{};</span> - <span class="kd">var</span> <span class="nx">segmentStrings</span> <span class="o">=</span> <span class="nx">pattern</span><span class="p">.</span><span class="nx">split</span><span class="p">(</span><span class="nx">routePatternSeparator</span><span class="p">);</span> - - <span class="kd">var</span> <span class="nx">nonEmptySegmentStrings</span> <span class="o">=</span> <span class="nx">segmentStrings</span> - <span class="p">.</span><span class="nx">map</span><span class="p">(</span><span class="nb">Function</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">call</span><span class="p">,</span> <span class="nb">String</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">trim</span><span class="p">)</span> - <span class="p">.</span><span class="nx">filter</span><span class="p">(</span><span class="nb">Boolean</span><span class="p">);</span> - - <span class="kd">var</span> <span class="nx">segmentArray</span> <span class="o">=</span> <span class="nx">nonEmptySegmentStrings</span><span class="p">.</span><span class="nx">map</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">segmentString</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">segmentFactory</span><span class="p">(</span><span class="nx">segmentString</span><span class="p">,</span> <span class="nx">options</span><span class="p">);</span> - <span class="p">});</span> - - <span class="k">return</span> <span class="nx">segmentArray</span><span class="p">;</span> - <span class="p">}</span> - - - <span class="cm">/**</span> -<span class="cm"> * Create segment from string</span> -<span class="cm"> *</span> -<span class="cm"> * @param {string} segmentString</span> -<span class="cm"> * @param {{}} options</span> -<span class="cm"> * @returns {abstractSegment}</span> -<span class="cm"> */</span> - <span class="kd">function</span> <span class="nx">segmentFactory</span><span class="p">(</span><span class="nx">segmentString</span><span class="p">,</span> <span class="nx">options</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">options</span> <span class="o">=</span> <span class="nx">options</span> <span class="o">||</span> <span class="p">{};</span> - - <span class="kd">var</span> <span class="nx">segments</span> <span class="o">=</span> <span class="nx">abstractSegment</span><span class="p">.</span><span class="nx">allSubclasses</span><span class="p">();</span></pre></div> </td> </tr> <tr id="section-2"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-2">¶</a> </div> <p>Find segment type from string</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">for</span><span class="p">(</span><span class="kd">var</span> <span class="nx">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">i</span> <span class="o"><</span> <span class="nx">segments</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span> <span class="nx">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span> - <span class="kd">var</span> <span class="nx">segment</span> <span class="o">=</span> <span class="nx">segments</span><span class="p">[</span><span class="nx">i</span><span class="p">];</span> - <span class="k">if</span><span class="p">(</span><span class="nx">segment</span><span class="p">.</span><span class="nx">match</span><span class="p">(</span><span class="nx">segmentString</span><span class="p">))</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">segment</span><span class="p">({</span> - <span class="nx">segmentString</span><span class="o">:</span> <span class="nx">segmentString</span><span class="p">,</span> - <span class="nx">options</span><span class="o">:</span> <span class="nx">options</span> - <span class="p">});</span> - <span class="p">}</span> - <span class="p">}</span> - - <span class="k">return</span> <span class="kc">null</span><span class="p">;</span> - <span class="p">}</span> - - <span class="k">return</span> <span class="nx">routeFactory</span><span class="p">;</span> -<span class="p">});</span> - -</pre></div> </td> </tr> </tbody> </table> </div> </body> </html> \ No newline at end of file diff --git a/docs/docco/routeMatchResult.html b/docs/docco/routeMatchResult.html deleted file mode 100644 index 8097b88d..00000000 --- a/docs/docco/routeMatchResult.html +++ /dev/null @@ -1,134 +0,0 @@ -<!DOCTYPE html> <html> <head> <title>routeMatchResult.js</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <link rel="stylesheet" media="all" href="docco.css" /> </head> <body> <div id="container"> <div id="background"></div> <div id="jump_to"> Jump To … <div id="jump_wrapper"> <div id="jump_page"> <a class="source" href="core.html"> core.js </a> <a class="source" href="events.html"> events.js </a> <a class="source" href="htmlCanvas.html"> htmlCanvas.js </a> <a class="source" href="router.html"> router.js </a> <a class="source" href="abstractSegment.html"> abstractSegment.js </a> <a class="source" href="hashLocation.html"> hashLocation.js </a> <a class="source" href="optionalParameterSegment.html"> optionalParameterSegment.js </a> <a class="source" href="parameterSegment.html"> parameterSegment.js </a> <a class="source" href="route.html"> route.js </a> <a class="source" href="routeFactory.html"> routeFactory.js </a> <a class="source" href="routeMatchResult.html"> routeMatchResult.js </a> <a class="source" href="router.html"> router.js </a> <a class="source" href="staticSegment.html"> staticSegment.js </a> <a class="source" href="url.html"> url.js </a> <a class="source" href="widget-extensions.html"> widget-extensions.js </a> <a class="source" href="widget.html"> widget.js </a> </div> </div> </div> <table cellpadding="0" cellspacing="0"> <thead> <tr> <th class="docs"> <h1> routeMatchResult.js </h1> </th> <th class="code"> </th> </tr> </thead> <tbody> <tr id="section-1"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-1">¶</a> </div> </td> <td class="code"> <div class="highlight"><pre><span></span><span class="nx">define</span><span class="p">([</span> - <span class="s1">'klassified'</span> -<span class="p">],</span> <span class="kd">function</span><span class="p">(</span><span class="nx">object</span><span class="p">)</span> <span class="p">{</span> - - <span class="cm">/**</span> -<span class="cm"> * Route match result are used as the answer of matching a url against a route.</span> -<span class="cm"> *</span> -<span class="cm"> * @param {{}} [spec]</span> -<span class="cm"> * @param {{}} spec.url Matched URL</span> -<span class="cm"> * @param {{}} spec.route Matched Route</span> -<span class="cm"> * @param {{}} spec.values Hash with matched parameter names as keys and matching url segment values.</span> -<span class="cm"> *</span> -<span class="cm"> * @returns {routeMatchResult}</span> -<span class="cm"> */</span> - <span class="kd">var</span> <span class="nx">routeMatchResult</span> <span class="o">=</span> <span class="nx">object</span><span class="p">.</span><span class="nx">subclass</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">that</span><span class="p">,</span> <span class="nx">my</span><span class="p">)</span> <span class="p">{</span> - - <span class="kd">var</span> <span class="nx">url</span><span class="p">;</span> - <span class="kd">var</span> <span class="nx">route</span><span class="p">;</span> - <span class="kd">var</span> <span class="nx">urlParameters</span><span class="p">;</span> - <span class="kd">var</span> <span class="nx">routeParameters</span><span class="p">;</span> - <span class="kd">var</span> <span class="nx">parameters</span><span class="p">;</span> - - <span class="nx">my</span><span class="p">.</span><span class="nx">initialize</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">spec</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">my</span><span class="p">.</span><span class="kr">super</span><span class="p">(</span><span class="nx">spec</span><span class="p">);</span> - <span class="nx">url</span> <span class="o">=</span> <span class="nx">spec</span><span class="p">.</span><span class="nx">url</span><span class="p">;</span> - <span class="nx">route</span> <span class="o">=</span> <span class="nx">spec</span><span class="p">.</span><span class="nx">route</span><span class="p">;</span> - - <span class="nx">urlParameters</span> <span class="o">=</span> <span class="p">(</span><span class="nx">url</span> <span class="o">&&</span> <span class="nx">url</span><span class="p">.</span><span class="nx">getQuery</span> <span class="o">&&</span> <span class="nx">url</span><span class="p">.</span><span class="nx">getQuery</span><span class="p">())</span> <span class="o">||</span> <span class="p">{};</span> - <span class="nx">routeParameters</span> <span class="o">=</span> <span class="nx">spec</span><span class="p">.</span><span class="nx">values</span> <span class="o">||</span> <span class="p">{};</span> - <span class="nx">parameters</span> <span class="o">=</span> <span class="nx">mergeParameters</span><span class="p">(</span><span class="nx">routeParameters</span><span class="p">,</span> <span class="nx">urlParameters</span><span class="p">);</span> - <span class="p">};</span></pre></div> </td> </tr> <tr id="section-2"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-2">¶</a> </div> <p>Public</p> </td> <td class="code"> <div class="highlight"><pre> <span class="cm">/**</span> -<span class="cm"> * Matched route</span> -<span class="cm"> *</span> -<span class="cm"> * @returns {route}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">getRoute</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">route</span><span class="p">;</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Matched URL</span> -<span class="cm"> *</span> -<span class="cm"> * @returns {url}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">getUrl</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">url</span><span class="p">;</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Answers true if route match URL</span> -<span class="cm"> *</span> -<span class="cm"> * @returns {boolean}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">isMatch</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span> - <span class="k">return</span> <span class="kc">true</span><span class="p">;</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Values for parameters in route</span> -<span class="cm"> *</span> -<span class="cm"> * @returns {{}}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">getRouteParameters</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">routeParameters</span><span class="p">;</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Values for parameters in query</span> -<span class="cm"> *</span> -<span class="cm"> * @returns {{}}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">getQueryParameters</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">url</span><span class="p">.</span><span class="nx">getQuery</span><span class="p">();</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * All matched parameters</span> -<span class="cm"> *</span> -<span class="cm"> * @returns {{}}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">getParameters</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">parameters</span><span class="p">;</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Constructs an array with all parameters in same order as in route pattern with</span> -<span class="cm"> * query parameter as the last value.</span> -<span class="cm"> *</span> -<span class="cm"> * @returns {Array}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">getActionArguments</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span> - <span class="kd">var</span> <span class="nx">actionArguments</span> <span class="o">=</span> <span class="nb">Object</span><span class="p">.</span><span class="nx">keys</span><span class="p">(</span><span class="nx">routeParameters</span><span class="p">).</span><span class="nx">map</span><span class="p">(</span><span class="kd">function</span> <span class="p">(</span><span class="nx">parameterName</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">routeParameters</span><span class="p">[</span><span class="nx">parameterName</span><span class="p">];</span> - <span class="p">});</span> - <span class="nx">actionArguments</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">url</span><span class="p">.</span><span class="nx">getQuery</span><span class="p">());</span> - <span class="k">return</span> <span class="nx">actionArguments</span><span class="p">;</span> - <span class="p">};</span></pre></div> </td> </tr> <tr id="section-3"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-3">¶</a> </div> <p>Private</p> </td> <td class="code"> <div class="highlight"><pre> <span class="kd">function</span> <span class="nx">mergeParameters</span><span class="p">(</span><span class="nx">routeParameters</span><span class="p">,</span> <span class="nx">queryParameters</span><span class="p">)</span> <span class="p">{</span> - <span class="kd">var</span> <span class="nx">allValues</span> <span class="o">=</span> <span class="p">{};</span></pre></div> </td> </tr> <tr id="section-4"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-4">¶</a> </div> <p>Fill with route parameters</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">for</span> <span class="p">(</span><span class="kd">var</span> <span class="nx">parameterName</span> <span class="k">in</span> <span class="nx">routeParameters</span><span class="p">)</span> <span class="p">{</span> - <span class="k">if</span><span class="p">(</span><span class="nx">routeParameters</span><span class="p">.</span><span class="nx">hasOwnProperty</span><span class="p">(</span><span class="nx">parameterName</span><span class="p">))</span> <span class="p">{</span> - <span class="nx">allValues</span><span class="p">[</span><span class="nx">parameterName</span><span class="p">]</span> <span class="o">=</span> <span class="nx">routeParameters</span><span class="p">[</span><span class="nx">parameterName</span><span class="p">];</span> - <span class="p">}</span> - <span class="p">}</span></pre></div> </td> </tr> <tr id="section-5"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-5">¶</a> </div> <p>Fill with query parameters</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">for</span> <span class="p">(</span><span class="kd">var</span> <span class="nx">queryParameterName</span> <span class="k">in</span> <span class="nx">queryParameters</span><span class="p">)</span> <span class="p">{</span> - <span class="k">if</span><span class="p">(</span><span class="nx">queryParameters</span><span class="p">.</span><span class="nx">hasOwnProperty</span><span class="p">(</span><span class="nx">queryParameterName</span><span class="p">))</span> <span class="p">{</span> - <span class="nx">allValues</span><span class="p">[</span><span class="nx">queryParameterName</span><span class="p">]</span> <span class="o">=</span> <span class="nx">queryParameters</span><span class="p">[</span><span class="nx">queryParameterName</span><span class="p">];</span> - <span class="p">}</span> - <span class="p">}</span> - - <span class="k">return</span> <span class="nx">allValues</span><span class="p">;</span> - - <span class="p">}</span> - <span class="p">});</span> - - <span class="nx">routeMatchResult</span><span class="p">.</span><span class="kr">class</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">that</span><span class="p">)</span> <span class="p">{</span> - - <span class="cm">/**</span> -<span class="cm"> * Result to use when match does not match url</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">routeNoMatchResult</span> <span class="o">=</span> <span class="p">(</span><span class="kd">function</span><span class="p">()</span> <span class="p">{</span> - - <span class="cm">/** @typedef {routeMatchResult} routeNoMatchResult */</span> - <span class="kd">var</span> <span class="nx">instance</span> <span class="o">=</span> <span class="nx">that</span><span class="p">();</span> - - <span class="nx">instance</span><span class="p">.</span><span class="nx">isMatch</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span> - <span class="k">return</span> <span class="kc">false</span><span class="p">;</span> - <span class="p">};</span> - - <span class="k">return</span> <span class="nx">instance</span><span class="p">;</span> - <span class="p">}());</span> - <span class="p">});</span> - - <span class="k">return</span> <span class="nx">routeMatchResult</span><span class="p">;</span> -<span class="p">});</span> - -</pre></div> </td> </tr> </tbody> </table> </div> </body> </html> \ No newline at end of file diff --git a/docs/docco/router.html b/docs/docco/router.html deleted file mode 100644 index e2f46867..00000000 --- a/docs/docco/router.html +++ /dev/null @@ -1,552 +0,0 @@ -<!DOCTYPE html> <html> <head> <title>router.js</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <link rel="stylesheet" media="all" href="docco.css" /> </head> <body> <div id="container"> <div id="background"></div> <div id="jump_to"> Jump To … <div id="jump_wrapper"> <div id="jump_page"> <a class="source" href="core.html"> core.js </a> <a class="source" href="events.html"> events.js </a> <a class="source" href="htmlCanvas.html"> htmlCanvas.js </a> <a class="source" href="router.html"> router.js </a> <a class="source" href="abstractSegment.html"> abstractSegment.js </a> <a class="source" href="hashLocation.html"> hashLocation.js </a> <a class="source" href="optionalParameterSegment.html"> optionalParameterSegment.js </a> <a class="source" href="parameterSegment.html"> parameterSegment.js </a> <a class="source" href="route.html"> route.js </a> <a class="source" href="routeFactory.html"> routeFactory.js </a> <a class="source" href="routeMatchResult.html"> routeMatchResult.js </a> <a class="source" href="router.html"> router.js </a> <a class="source" href="staticSegment.html"> staticSegment.js </a> <a class="source" href="url.html"> url.js </a> <a class="source" href="widget-extensions.html"> widget-extensions.js </a> <a class="source" href="widget.html"> widget.js </a> </div> </div> </div> <table cellpadding="0" cellspacing="0"> <thead> <tr> <th class="docs"> <h1> router.js </h1> </th> <th class="code"> </th> </tr> </thead> <tbody> <tr id="section-1"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-1">¶</a> </div> </td> <td class="code"> <div class="highlight"><pre><span></span><span class="nx">define</span><span class="p">(</span> - <span class="p">[</span> - <span class="s1">'jquery'</span><span class="p">,</span> - <span class="s1">'../events'</span><span class="p">,</span> - <span class="s1">'./route'</span><span class="p">,</span> - <span class="s1">'./url'</span><span class="p">,</span> - <span class="s1">'./hashLocation'</span><span class="p">,</span> - <span class="s1">'klassified'</span> - <span class="p">],</span> - <span class="kd">function</span><span class="p">(</span><span class="nx">jQuery</span><span class="p">,</span> <span class="nx">events</span><span class="p">,</span> <span class="nx">route</span><span class="p">,</span> <span class="nx">url</span><span class="p">,</span> <span class="nx">hashLocation</span><span class="p">,</span> <span class="nx">object</span><span class="p">)</span> <span class="p">{</span> - - <span class="cm">/**</span> -<span class="cm"> * Lazily creates a singleton instance of</span> -<span class="cm"> * hash-fragment listener `hashLocation()`.</span> -<span class="cm"> *</span> -<span class="cm"> * @returns {hashLocation}</span> -<span class="cm"> */</span> - <span class="kd">var</span> <span class="nx">hashSingleton</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span> - <span class="k">if</span><span class="p">(</span><span class="o">!</span><span class="nx">hashSingleton</span><span class="p">.</span><span class="nx">instance</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">hashSingleton</span><span class="p">.</span><span class="nx">instance</span> <span class="o">=</span> <span class="nx">hashLocation</span><span class="p">();</span> - <span class="p">}</span> - - <span class="k">return</span> <span class="nx">hashSingleton</span><span class="p">.</span><span class="nx">instance</span><span class="p">;</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Router allow you to keep state in the URL. When a user visits a specific URL the application</span> -<span class="cm"> * can be transformed accordingly.</span> -<span class="cm"> *</span> -<span class="cm"> * Router have a routing table consisting of an array of routes. When the router resolves a URL</span> -<span class="cm"> * each route is matched against the URL one-by-one. The order is defined by the route priority</span> -<span class="cm"> * property (lower first). If two routes have the same priority or if priority is omitted, routes</span> -<span class="cm"> * are matched in registration order.</span> -<span class="cm"> *</span> -<span class="cm"> * @param [spec]</span> -<span class="cm"> * @param [spec.locationHandler] hashSingleton by default</span> -<span class="cm"> *</span> -<span class="cm"> * @returns {{}}</span> -<span class="cm"> */</span> - <span class="kd">var</span> <span class="nx">router</span> <span class="o">=</span> <span class="nx">object</span><span class="p">.</span><span class="nx">subclass</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">that</span><span class="p">,</span> <span class="nx">my</span><span class="p">)</span> <span class="p">{</span> - - <span class="nx">my</span><span class="p">.</span><span class="nx">initialize</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">spec</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">my</span><span class="p">.</span><span class="kr">super</span><span class="p">(</span><span class="nx">spec</span><span class="p">);</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">location</span> <span class="o">=</span> <span class="nx">spec</span><span class="p">.</span><span class="nx">locationHandler</span> <span class="o">||</span> <span class="nx">hashSingleton</span><span class="p">();</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">routeTable</span> <span class="o">=</span> <span class="p">[];</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">lastMatch</span> <span class="o">=</span> <span class="kc">undefined</span><span class="p">;</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">defaultParameters</span> <span class="o">=</span> <span class="p">{};</span></pre></div> </td> </tr> <tr id="section-2"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-2">¶</a> </div> <p>Listen for URL changes and resolve URL when changed</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">my</span><span class="p">.</span><span class="nx">location</span><span class="p">.</span><span class="nx">onChanged</span><span class="p">(</span><span class="kd">function</span><span class="p">()</span> <span class="p">{</span> <span class="nx">my</span><span class="p">.</span><span class="nx">resolveUrl</span><span class="p">();</span> <span class="p">});</span> - <span class="p">};</span></pre></div> </td> </tr> <tr id="section-3"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-3">¶</a> </div> <p>Events</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">my</span><span class="p">.</span><span class="nx">events</span> <span class="o">=</span> <span class="nx">events</span><span class="p">.</span><span class="nx">eventCategory</span><span class="p">();</span></pre></div> </td> </tr> <tr id="section-4"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-4">¶</a> </div> <p>Public</p> </td> <td class="code"> <div class="highlight"><pre> <span class="cm">/**</span> -<span class="cm"> * Triggered when a route is matched with `routeMatchResult` as argument.</span> -<span class="cm"> * @type {event}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">onRouteMatched</span> <span class="o">=</span> <span class="nx">my</span><span class="p">.</span><span class="nx">events</span><span class="p">.</span><span class="nx">createEvent</span><span class="p">(</span><span class="s1">'routeMatched'</span><span class="p">);</span> - - <span class="cm">/**</span> -<span class="cm"> * Triggered when a route is not matched with 'url' as argument.</span> -<span class="cm"> * @type {event}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">onRouteNotFound</span> <span class="o">=</span> <span class="nx">my</span><span class="p">.</span><span class="nx">events</span><span class="p">.</span><span class="nx">createEvent</span><span class="p">(</span><span class="s1">'routeNotFound'</span><span class="p">);</span> - - <span class="cm">/**</span> -<span class="cm"> * Triggered each time a URL is resolved with `url` as argument</span> -<span class="cm"> * @type {event}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">onResolveUrl</span> <span class="o">=</span> <span class="nx">my</span><span class="p">.</span><span class="nx">events</span><span class="p">.</span><span class="nx">createEvent</span><span class="p">(</span><span class="s1">'resolveUrl'</span><span class="p">);</span></pre></div> </td> </tr> <tr id="section-5"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-5">¶</a> </div> <p>@deprecated Use event property instead</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">that</span><span class="p">.</span><span class="nx">on</span> <span class="o">=</span> <span class="nx">my</span><span class="p">.</span><span class="nx">events</span><span class="p">.</span><span class="nx">on</span><span class="p">;</span></pre></div> </td> </tr> <tr id="section-6"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-6">¶</a> </div> <p>Public</p> </td> <td class="code"> <div class="highlight"><pre> <span class="cm">/**</span> -<span class="cm"> * Tries to resolve URL by matching the URL against all routes in</span> -<span class="cm"> * route table. Unless `fallThrough` is set on the matched route, router</span> -<span class="cm"> * will stop on first match.</span> -<span class="cm"> *</span> -<span class="cm"> * Last match is also stored as `my.lastMatch`</span> -<span class="cm"> *</span> -<span class="cm"> * @param {url} [aUrl] A URL or current url as default</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">resolveUrl</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">aUrl</span><span class="p">)</span> <span class="p">{</span> - <span class="k">if</span><span class="p">(</span><span class="k">typeof</span> <span class="nx">aUrl</span> <span class="o">===</span> <span class="s2">"string"</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">aUrl</span> <span class="o">=</span> <span class="nx">url</span><span class="p">({</span><span class="nx">rawUrl</span><span class="o">:</span> <span class="nx">aUrl</span><span class="p">});</span> - <span class="p">}</span> - - <span class="nx">my</span><span class="p">.</span><span class="nx">resolveUrl</span><span class="p">(</span><span class="nx">aUrl</span><span class="p">);</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Creates and adds a new route to the routing table.</span> -<span class="cm"> *</span> -<span class="cm"> * @example</span> -<span class="cm"> *</span> -<span class="cm"> * // Simplest possible route</span> -<span class="cm"> * aRouter.addRoute({</span> -<span class="cm"> * pattern: '/user/#id',</span> -<span class="cm"> * action: function(id, query) { console.log(id, query);},</span> -<span class="cm"> * });</span> -<span class="cm"> *</span> -<span class="cm"> * // Route with name and priority,</span> -<span class="cm"> * aRouter.addRoute({</span> -<span class="cm"> * name: 'user',</span> -<span class="cm"> * pattern: '/user/#id',</span> -<span class="cm"> * priority: 4000,</span> -<span class="cm"> * action: function(id) { console.log(id);},</span> -<span class="cm"> * });</span> -<span class="cm"> *</span> -<span class="cm"> * // Route with only pattern and custom onMatched event handler,</span> -<span class="cm"> * var route = aRouter.addRoute({ pattern: ''/user/#id''});</span> -<span class="cm"> * route.onMatched(function(result) {</span> -<span class="cm"> * console.dir(result.getValues());</span> -<span class="cm"> * });</span> -<span class="cm"> *</span> -<span class="cm"> * // Route with route options,</span> -<span class="cm"> * aRouter.addRoute({</span> -<span class="cm"> * pattern: '/user/#id',</span> -<span class="cm"> * priority: 4000,</span> -<span class="cm"> * defaults: {</span> -<span class="cm"> * id: 'john_doe'</span> -<span class="cm"> * },</span> -<span class="cm"> * constraints: {</span> -<span class="cm"> * id: ['john_doe', 'jane_doe']</span> -<span class="cm"> * }</span> -<span class="cm"> * });</span> -<span class="cm"> *</span> -<span class="cm"> *</span> -<span class="cm"> * @param {routeSpec} routeSpec Options passed to route plus options below</span> -<span class="cm"> * @param {string} routeSpec.pattern Route pattern as string</span> -<span class="cm"> * @param {function} routeSpec.action Executed when route is matched with parameters as arguments +</span> -<span class="cm"> * query object as the last argument.</span> -<span class="cm"> * @param {string} routeSpec.pattern Route pattern as string</span> -<span class="cm"> *</span> -<span class="cm"> * @returns {route}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">addRoute</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">routeSpec</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">routeSpec</span> <span class="o">=</span> <span class="nx">routeSpec</span> <span class="o">||</span> <span class="p">{};</span> - - <span class="kd">var</span> <span class="nx">newRoute</span> <span class="o">=</span> <span class="nx">route</span><span class="p">({</span> - <span class="nx">pattern</span><span class="o">:</span> <span class="nx">routeSpec</span><span class="p">.</span><span class="nx">pattern</span><span class="p">,</span> - <span class="nx">options</span><span class="o">:</span> <span class="nx">routeSpec</span> - <span class="p">});</span> - - <span class="k">if</span><span class="p">(</span><span class="nx">routeSpec</span><span class="p">.</span><span class="nx">action</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">newRoute</span><span class="p">.</span><span class="nx">onMatched</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">result</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">routeSpec</span><span class="p">.</span><span class="nx">action</span><span class="p">.</span><span class="nx">apply</span><span class="p">(</span><span class="k">this</span><span class="p">,</span> <span class="nx">result</span><span class="p">.</span><span class="nx">getActionArguments</span><span class="p">());</span> - <span class="p">});</span> - <span class="p">}</span> - - <span class="nx">newRoute</span><span class="p">.</span><span class="nx">name</span> <span class="o">=</span> <span class="nx">routeSpec</span><span class="p">.</span><span class="nx">name</span><span class="p">;</span> - <span class="nx">newRoute</span><span class="p">.</span><span class="nx">fallThrough</span> <span class="o">=</span> <span class="nx">routeSpec</span><span class="p">.</span><span class="nx">fallThrough</span><span class="p">;</span> - - <span class="nx">newRoute</span><span class="p">.</span><span class="nx">priority</span> <span class="o">=</span> <span class="nx">routeSpec</span><span class="p">.</span><span class="nx">priority</span><span class="p">;</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">addRoute</span><span class="p">(</span><span class="nx">newRoute</span><span class="p">);</span> - - <span class="k">return</span> <span class="nx">newRoute</span><span class="p">;</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Find a route using a predicate function. The function is applied on routes</span> -<span class="cm"> * on-by-one until match.</span> -<span class="cm"> *</span> -<span class="cm"> * @param {function} predicate</span> -<span class="cm"> * @returns {route} Matched route or null if not matched</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">findRoute</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">predicate</span><span class="p">)</span> <span class="p">{</span> - <span class="kd">var</span> <span class="nx">numRoutes</span> <span class="o">=</span> <span class="nx">my</span><span class="p">.</span><span class="nx">routeTable</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span> - <span class="k">for</span><span class="p">(</span><span class="kd">var</span> <span class="nx">routeIndex</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">routeIndex</span> <span class="o"><</span> <span class="nx">numRoutes</span><span class="p">;</span> <span class="nx">routeIndex</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span> - <span class="kd">var</span> <span class="nx">route</span> <span class="o">=</span> <span class="nx">my</span><span class="p">.</span><span class="nx">routeTable</span><span class="p">[</span><span class="nx">routeIndex</span><span class="p">];</span> - <span class="k">if</span><span class="p">(</span><span class="nx">predicate</span><span class="p">(</span><span class="nx">route</span><span class="p">))</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">route</span><span class="p">;</span> - <span class="p">}</span> - <span class="p">}</span> - - <span class="k">return</span> <span class="kc">null</span><span class="p">;</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Finds route by name</span> -<span class="cm"> *</span> -<span class="cm"> * @param {string} routeName</span> -<span class="cm"> * @returns {route}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">getRouteByName</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">routeName</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">that</span><span class="p">.</span><span class="nx">findRoute</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">route</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">route</span><span class="p">.</span><span class="nx">name</span> <span class="o">&&</span> <span class="nx">route</span><span class="p">.</span><span class="nx">name</span> <span class="o">===</span> <span class="nx">routeName</span><span class="p">;</span> - <span class="p">});</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Removes a route from routing table</span> -<span class="cm"> *</span> -<span class="cm"> * @param route</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">removeRoute</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">route</span><span class="p">)</span> <span class="p">{</span> - <span class="kd">var</span> <span class="nx">index</span> <span class="o">=</span> <span class="nx">my</span><span class="p">.</span><span class="nx">routeTable</span><span class="p">.</span><span class="nx">indexOf</span><span class="p">(</span><span class="nx">route</span><span class="p">);</span> - <span class="k">if</span><span class="p">(</span><span class="nx">index</span> <span class="o">===</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="p">{</span> - <span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span><span class="p">(</span><span class="s1">'Route not in route table'</span><span class="p">);</span> - <span class="p">}</span> - - <span class="nx">my</span><span class="p">.</span><span class="nx">routeTable</span><span class="p">.</span><span class="nx">splice</span><span class="p">(</span><span class="nx">index</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Removes all routes from routing table.</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">clear</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">routeTable</span> <span class="o">=</span> <span class="p">[];</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">lastMatch</span> <span class="o">=</span> <span class="kc">undefined</span><span class="p">;</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Pipes URL matching 'routeSpec' to another router.</span> -<span class="cm"> *</span> -<span class="cm"> * @param {{}} routeSpec Same options as `addRoute`</span> -<span class="cm"> * @param {router} router</span> -<span class="cm"> *</span> -<span class="cm"> * @returns {route}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">pipeRoute</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">routeSpec</span><span class="p">,</span> <span class="nx">router</span><span class="p">)</span> <span class="p">{</span> - <span class="k">if</span><span class="p">(</span><span class="o">!</span><span class="nx">routeSpec</span> <span class="o">||</span> <span class="o">!</span><span class="nx">routeSpec</span><span class="p">.</span><span class="nx">pattern</span><span class="p">)</span> <span class="p">{</span> - <span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span><span class="p">(</span><span class="s1">'Route pattern required'</span><span class="p">);</span> - <span class="p">}</span> - - <span class="kd">var</span> <span class="nx">aRoute</span> <span class="o">=</span> <span class="nx">that</span><span class="p">.</span><span class="nx">addRoute</span><span class="p">(</span><span class="nx">routeSpec</span><span class="p">);</span> - <span class="nx">aRoute</span><span class="p">.</span><span class="nx">onMatched</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">result</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">router</span><span class="p">.</span><span class="nx">resolveUrl</span><span class="p">(</span><span class="nx">result</span><span class="p">.</span><span class="nx">getUrl</span><span class="p">());</span> - <span class="p">});</span> - - <span class="k">return</span> <span class="nx">aRoute</span><span class="p">;</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Pipe not found to a different router</span> -<span class="cm"> *</span> -<span class="cm"> * @param {router} router</span> -<span class="cm"> * @returns {route}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">pipeNotFound</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">router</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">that</span><span class="p">.</span><span class="nx">onRouteNotFound</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">aRawUrl</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">router</span><span class="p">.</span><span class="nx">resolveUrl</span><span class="p">(</span><span class="nx">aRawUrl</span><span class="p">);</span> - <span class="p">});</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Returns the current URL</span> -<span class="cm"> * @returns {url}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">getUrl</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">my</span><span class="p">.</span><span class="nx">location</span><span class="p">.</span><span class="nx">getUrl</span><span class="p">();</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Constructs a link that can be used eg. in href.</span> -<span class="cm"> *</span> -<span class="cm"> * @example</span> -<span class="cm"> * // Link to a route by name (recommended)</span> -<span class="cm"> * aRouter.linkTo('users-list', {user: 'jane'});</span> -<span class="cm"> *</span> -<span class="cm"> * // Link to a path</span> -<span class="cm"> * aRouter.linkTo('/user/mikael');</span> -<span class="cm"> * aRouter.linkTo('/user/', {sortBy: 'name'});</span> -<span class="cm"> *</span> -<span class="cm"> * @param {string} routeName Name of route or path</span> -<span class="cm"> * @param {{}} [parameters]</span> -<span class="cm"> * @param {boolean} [includeCurrentParameters=false] Merge parameters with parameters in current match.</span> -<span class="cm"> *</span> -<span class="cm"> * @returns {string}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">linkTo</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">routeName</span><span class="p">,</span> <span class="nx">parameters</span><span class="p">,</span> <span class="nx">includeCurrentParameters</span><span class="p">)</span> <span class="p">{</span> - <span class="kd">var</span> <span class="nx">route</span> <span class="o">=</span> <span class="nx">that</span><span class="p">.</span><span class="nx">getRouteByName</span><span class="p">(</span><span class="nx">routeName</span><span class="p">);</span> - <span class="k">if</span><span class="p">(</span><span class="nx">route</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">my</span><span class="p">.</span><span class="nx">location</span><span class="p">.</span><span class="nx">linkToUrl</span><span class="p">(</span><span class="nx">that</span><span class="p">.</span><span class="nx">expand</span><span class="p">({</span> - <span class="nx">routeName</span><span class="o">:</span> <span class="nx">route</span><span class="p">.</span><span class="nx">name</span><span class="p">,</span> - <span class="nx">parameters</span><span class="o">:</span> <span class="nx">parameters</span><span class="p">,</span> - <span class="nx">excludeCurrentParameters</span><span class="o">:</span> <span class="o">!</span><span class="nx">includeCurrentParameters</span> - <span class="p">}));</span> - <span class="p">}</span></pre></div> </td> </tr> <tr id="section-7"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-7">¶</a> </div> <p>fallback to path (eg. /user/john) if route is not defined</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">return</span> <span class="nx">that</span><span class="p">.</span><span class="nx">linkToPath</span><span class="p">(</span><span class="nx">routeName</span><span class="p">,</span> <span class="nx">parameters</span><span class="p">);</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Link to a path</span> -<span class="cm"> *</span> -<span class="cm"> * @example</span> -<span class="cm"> * aRouter.linkToPath('/user/mikael');</span> -<span class="cm"> * aRouter.linkToPath('/user/', {sortBy: 'name'});</span> -<span class="cm"> *</span> -<span class="cm"> * @param {string} path</span> -<span class="cm"> * @param {{}} query</span> -<span class="cm"> * @returns {string}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">linkToPath</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">path</span><span class="p">,</span> <span class="nx">query</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">that</span><span class="p">.</span><span class="nx">linkToUrl</span><span class="p">(</span><span class="nx">url</span><span class="p">.</span><span class="nx">build</span><span class="p">(</span><span class="nx">path</span><span class="p">,</span> <span class="nx">query</span><span class="p">));</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Link from url</span> -<span class="cm"> *</span> -<span class="cm"> * @param {url} aUrl</span> -<span class="cm"> * @returns {string}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">linkToUrl</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">aUrl</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">my</span><span class="p">.</span><span class="nx">location</span><span class="p">.</span><span class="nx">linkToUrl</span><span class="p">(</span><span class="nx">aUrl</span><span class="p">);</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Redirects browser to route or path.</span> -<span class="cm"> *</span> -<span class="cm"> * @example</span> -<span class="cm"> * // Redirect to a route by name</span> -<span class="cm"> * aRouter.redirectTo('users-list', {user: 'jane'});</span> -<span class="cm"> *</span> -<span class="cm"> * // Redirect to a path</span> -<span class="cm"> * aRouter.redirectTo('/user/mikael');</span> -<span class="cm"> * aRouter.redirectTo('/user/', {sortBy: 'name'});</span> -<span class="cm"> *</span> -<span class="cm"> * @param {string} routeName</span> -<span class="cm"> * @param {{}} [parameters]</span> -<span class="cm"> * @param {boolean} [includeCurrentParameters=false] Merge parameters with parameters in current match.</span> -<span class="cm"> *</span> -<span class="cm"> * @returns {string}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">redirectTo</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">routeName</span><span class="p">,</span> <span class="nx">parameters</span><span class="p">,</span> <span class="nx">includeCurrentParameters</span><span class="p">)</span> <span class="p">{</span> - <span class="kd">var</span> <span class="nx">route</span> <span class="o">=</span> <span class="nx">that</span><span class="p">.</span><span class="nx">getRouteByName</span><span class="p">(</span><span class="nx">routeName</span><span class="p">);</span> - <span class="k">if</span><span class="p">(</span><span class="nx">route</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">my</span><span class="p">.</span><span class="nx">location</span><span class="p">.</span><span class="nx">setUrl</span><span class="p">(</span><span class="nx">that</span><span class="p">.</span><span class="nx">expand</span><span class="p">({</span> - <span class="nx">routeName</span><span class="o">:</span> <span class="nx">route</span><span class="p">.</span><span class="nx">name</span><span class="p">,</span> - <span class="nx">parameters</span><span class="o">:</span> <span class="nx">parameters</span><span class="p">,</span> - <span class="nx">excludeCurrentParameters</span><span class="o">:</span> <span class="o">!</span><span class="nx">includeCurrentParameters</span> - <span class="p">}));</span> - <span class="p">}</span> - - <span class="k">return</span> <span class="nx">that</span><span class="p">.</span><span class="nx">redirectToPath</span><span class="p">(</span><span class="nx">routeName</span><span class="p">,</span> <span class="nx">parameters</span><span class="p">);</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Redirect to a path</span> -<span class="cm"> *</span> -<span class="cm"> * @example</span> -<span class="cm"> * aRouter.redirectToPath('/user/mikael');</span> -<span class="cm"> * aRouter.redirectToPath('/user/', {sortBy: 'name'});</span> -<span class="cm"> *</span> -<span class="cm"> * @param {string} path</span> -<span class="cm"> * @param {{}} query</span> -<span class="cm"> * @returns {string}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">redirectToPath</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">path</span><span class="p">,</span> <span class="nx">query</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">that</span><span class="p">.</span><span class="nx">redirectToUrl</span><span class="p">(</span><span class="nx">url</span><span class="p">.</span><span class="nx">build</span><span class="p">(</span><span class="nx">path</span><span class="p">,</span> <span class="nx">query</span><span class="p">));</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Redirect to url</span> -<span class="cm"> *</span> -<span class="cm"> * @param {url} aUrl</span> -<span class="cm"> * @returns {string}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">redirectToUrl</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">aUrl</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">my</span><span class="p">.</span><span class="nx">location</span><span class="p">.</span><span class="nx">setUrl</span><span class="p">(</span><span class="nx">aUrl</span><span class="p">);</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Constructs a new URL from parameters with a route as template. If no route is</span> -<span class="cm"> * supplied the last matched route is used.</span> -<span class="cm"> *</span> -<span class="cm"> * Parameters are merged with parameters from last match unless `excludeCurrentParameters`</span> -<span class="cm"> * is set to true.</span> -<span class="cm"> *</span> -<span class="cm"> * @param {{}} [options]</span> -<span class="cm"> * @param {string} [options.routeName] Name of route to link to. Default route from last match.</span> -<span class="cm"> * @param {{}} [options.parameters={}]</span> -<span class="cm"> * @param {boolean} [options.excludeCurrentParameters=false]</span> -<span class="cm"> *</span> -<span class="cm"> * @returns {url}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">expand</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">options</span><span class="p">)</span> <span class="p">{</span> - <span class="kd">var</span> <span class="nx">routeName</span> <span class="o">=</span> <span class="nx">options</span><span class="p">.</span><span class="nx">routeName</span><span class="p">;</span> - <span class="kd">var</span> <span class="nx">suppliedParameters</span> <span class="o">=</span> <span class="nx">options</span><span class="p">.</span><span class="nx">parameters</span> <span class="o">||</span> <span class="p">{};</span> - <span class="kd">var</span> <span class="nx">excludeCurrentParameters</span> <span class="o">=</span> <span class="nx">options</span><span class="p">.</span><span class="nx">excludeCurrentParameters</span> <span class="o">||</span> <span class="kc">false</span><span class="p">;</span></pre></div> </td> </tr> <tr id="section-8"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-8">¶</a> </div> <p>Pick a template route</p> </td> <td class="code"> <div class="highlight"><pre> <span class="kd">var</span> <span class="nx">templateRoute</span><span class="p">;</span> - <span class="k">if</span><span class="p">(</span><span class="nx">routeName</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">templateRoute</span> <span class="o">=</span> <span class="nx">that</span><span class="p">.</span><span class="nx">getRouteByName</span><span class="p">(</span><span class="nx">routeName</span><span class="p">)</span> <span class="o">||</span> <span class="nx">route</span><span class="p">();</span> - <span class="p">}</span> <span class="k">else</span> <span class="k">if</span><span class="p">(</span><span class="nx">my</span><span class="p">.</span><span class="nx">lastMatch</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">templateRoute</span> <span class="o">=</span> <span class="nx">my</span><span class="p">.</span><span class="nx">lastMatch</span><span class="p">.</span><span class="nx">getRoute</span><span class="p">();</span> - <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> - <span class="nx">templateRoute</span> <span class="o">=</span> <span class="nx">route</span><span class="p">();</span> - <span class="p">}</span></pre></div> </td> </tr> <tr id="section-9"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-9">¶</a> </div> <p>Merge current parameters with supplied parameters</p> </td> <td class="code"> <div class="highlight"><pre> <span class="kd">var</span> <span class="nx">currentParameters</span> <span class="o">=</span> <span class="o">!</span><span class="nx">excludeCurrentParameters</span> <span class="o">?</span> <span class="nx">that</span><span class="p">.</span><span class="nx">getParameters</span><span class="p">()</span> <span class="o">:</span> <span class="p">{};</span> - <span class="kd">var</span> <span class="nx">allParameters</span> <span class="o">=</span> <span class="nx">merge</span><span class="p">(</span><span class="nx">currentParameters</span><span class="p">,</span> <span class="nx">suppliedParameters</span><span class="p">);</span></pre></div> </td> </tr> <tr id="section-10"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-10">¶</a> </div> <p>Fill with defaults if needed</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nb">Object</span><span class="p">.</span><span class="nx">keys</span><span class="p">(</span><span class="nx">my</span><span class="p">.</span><span class="nx">defaultParameters</span><span class="p">).</span><span class="nx">forEach</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">parameterName</span><span class="p">){</span> - <span class="k">if</span><span class="p">(</span><span class="o">!</span><span class="p">(</span><span class="nx">parameterName</span> <span class="k">in</span> <span class="nx">allParameters</span><span class="p">))</span> <span class="p">{</span> - <span class="nx">allParameters</span><span class="p">[</span><span class="nx">parameterName</span><span class="p">]</span> <span class="o">=</span> <span class="k">typeof</span> <span class="nx">my</span><span class="p">.</span><span class="nx">defaultParameters</span><span class="p">[</span><span class="nx">parameterName</span><span class="p">]</span> <span class="o">===</span> <span class="s2">"function"</span> <span class="o">?</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">defaultParameters</span><span class="p">[</span><span class="nx">parameterName</span><span class="p">]()</span> <span class="o">:</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">defaultParameters</span><span class="p">[</span><span class="nx">parameterName</span><span class="p">];</span> - <span class="p">}</span> - <span class="p">});</span></pre></div> </td> </tr> <tr id="section-11"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-11">¶</a> </div> <p>Expand template route and construct URL</p> </td> <td class="code"> <div class="highlight"><pre> <span class="kd">var</span> <span class="nx">aRawUrl</span> <span class="o">=</span> <span class="nx">templateRoute</span><span class="p">.</span><span class="nx">expand</span><span class="p">(</span><span class="nx">allParameters</span><span class="p">);</span> - <span class="k">return</span> <span class="nx">url</span><span class="p">({</span><span class="nx">rawUrl</span><span class="o">:</span> <span class="nx">aRawUrl</span><span class="p">});</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Constructs a link from supplied parameters.</span> -<span class="cm"> *</span> -<span class="cm"> * @param {{}} [parameters={}]</span> -<span class="cm"> * @param {boolean} [excludeCurrentParameters=false]</span> -<span class="cm"> *</span> -<span class="cm"> * @returns {string}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">linkToParameters</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">parameters</span><span class="p">,</span> <span class="nx">excludeCurrentParameters</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">my</span><span class="p">.</span><span class="nx">location</span><span class="p">.</span><span class="nx">linkToUrl</span><span class="p">(</span><span class="nx">that</span><span class="p">.</span><span class="nx">expand</span><span class="p">({</span> - <span class="nx">parameters</span><span class="o">:</span> <span class="nx">parameters</span><span class="p">,</span> - <span class="nx">excludeCurrentParameters</span><span class="o">:</span> <span class="nx">excludeCurrentParameters</span> - <span class="p">}));</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Constructs a link from supplied parameters.</span> -<span class="cm"> *</span> -<span class="cm"> * @param {{}} [parameters={}]</span> -<span class="cm"> * @param {boolean} [excludeCurrentParameters=false]</span> -<span class="cm"> *</span> -<span class="cm"> * @returns {string}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">setParameters</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">parameters</span><span class="p">,</span> <span class="nx">excludeCurrentParameters</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">redirectToUrl</span><span class="p">(</span><span class="nx">that</span><span class="p">.</span><span class="nx">expand</span><span class="p">({</span> - <span class="nx">parameters</span><span class="o">:</span> <span class="nx">parameters</span><span class="p">,</span> - <span class="nx">excludeCurrentParameters</span><span class="o">:</span> <span class="nx">excludeCurrentParameters</span> - <span class="p">}));</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Return current parameters, ether from last match or if no match</span> -<span class="cm"> * from query in current URL.</span> -<span class="cm"> *</span> -<span class="cm"> * @returns {{}} Parameter values with parameter names as keys</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">getParameters</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span> - <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">my</span><span class="p">.</span><span class="nx">lastMatch</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">my</span><span class="p">.</span><span class="nx">location</span><span class="p">.</span><span class="nx">getUrl</span><span class="p">().</span><span class="nx">getQuery</span><span class="p">();</span> - <span class="p">}</span> - - <span class="k">return</span> <span class="nx">my</span><span class="p">.</span><span class="nx">lastMatch</span><span class="p">.</span><span class="nx">getParameters</span><span class="p">();</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Returns parameter value by name</span> -<span class="cm"> *</span> -<span class="cm"> * @param {string} parameterName</span> -<span class="cm"> * @returns {*}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">getParameter</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">parameterName</span><span class="p">)</span> <span class="p">{</span> - <span class="kd">var</span> <span class="nx">parameters</span> <span class="o">=</span> <span class="nx">that</span><span class="p">.</span><span class="nx">getParameters</span><span class="p">();</span> - <span class="k">return</span> <span class="nx">parameters</span><span class="p">[</span><span class="nx">parameterName</span><span class="p">];</span> - <span class="p">};</span> - - <span class="nx">that</span><span class="p">.</span><span class="nx">setDefaultParameter</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">parameterName</span><span class="p">,</span> <span class="nx">value</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">defaultParameters</span><span class="p">[</span><span class="nx">parameterName</span><span class="p">]</span> <span class="o">=</span> <span class="nx">value</span><span class="p">;</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Navigate back to previous location in history. If history is empty</span> -<span class="cm"> * the location will be changed to fallback URL.</span> -<span class="cm"> *</span> -<span class="cm"> * @param {string|url} aFallbackUrl</span> -<span class="cm"> * @returns {string} URL</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">back</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">aFallbackUrl</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">my</span><span class="p">.</span><span class="nx">location</span><span class="p">.</span><span class="nx">back</span><span class="p">(</span><span class="nx">aFallbackUrl</span><span class="p">);</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Return `true` if the history is empty</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">isHistoryEmpty</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">my</span><span class="p">.</span><span class="nx">location</span><span class="p">.</span><span class="nx">isHistoryEmpty</span><span class="p">();</span> - <span class="p">};</span> - - - <span class="cm">/**</span> -<span class="cm"> * Start listening for location changes and automatically</span> -<span class="cm"> * resolve new URLs (including the current)</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">start</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">location</span><span class="p">.</span><span class="nx">start</span><span class="p">();</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">resolveUrl</span><span class="p">();</span> <span class="c1">// resolve current url</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Stop listening for location changes.</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">stop</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">location</span><span class="p">.</span><span class="nx">stop</span><span class="p">();</span> - <span class="p">};</span></pre></div> </td> </tr> <tr id="section-12"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-12">¶</a> </div> <p>Protected</p> </td> <td class="code"> <div class="highlight"><pre> <span class="cm">/**</span> -<span class="cm"> * Tries to resolve URL by matching the URL against all routes in</span> -<span class="cm"> * route table. Unless `fallThrough`is set on the matched route router</span> -<span class="cm"> * will stop on first match.</span> -<span class="cm"> *</span> -<span class="cm"> * Last match is also stored as `my.lastMatch`</span> -<span class="cm"> *</span> -<span class="cm"> * @param {url} [aUrl] A URL or current url as default</span> -<span class="cm"> */</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">resolveUrl</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">aUrl</span><span class="p">)</span> <span class="p">{</span> - <span class="kd">var</span> <span class="nx">currentUrl</span> <span class="o">=</span> <span class="nx">aUrl</span> <span class="o">===</span> <span class="kc">undefined</span> <span class="o">?</span> <span class="nx">my</span><span class="p">.</span><span class="nx">location</span><span class="p">.</span><span class="nx">getUrl</span><span class="p">()</span> <span class="o">:</span> <span class="nx">aUrl</span><span class="p">;</span> - - <span class="nx">that</span><span class="p">.</span><span class="nx">onResolveUrl</span><span class="p">.</span><span class="nx">trigger</span><span class="p">(</span><span class="nx">currentUrl</span><span class="p">);</span> - - <span class="kd">var</span> <span class="nx">numMatched</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">routeTable</span><span class="p">.</span><span class="nx">some</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">candidateRoute</span><span class="p">)</span> <span class="p">{</span> - <span class="kd">var</span> <span class="nx">result</span> <span class="o">=</span> <span class="nx">currentUrl</span><span class="p">.</span><span class="nx">matchRoute</span><span class="p">(</span><span class="nx">candidateRoute</span><span class="p">);</span> - <span class="k">if</span><span class="p">(</span><span class="nx">result</span><span class="p">.</span><span class="nx">isMatch</span><span class="p">())</span> <span class="p">{</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">lastMatch</span> <span class="o">=</span> <span class="nx">result</span><span class="p">;</span> - <span class="nx">numMatched</span><span class="o">++</span><span class="p">;</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">onRouteMatched</span><span class="p">.</span><span class="nx">trigger</span><span class="p">(</span><span class="nx">result</span><span class="p">);</span> - - <span class="k">if</span><span class="p">(</span><span class="nx">candidateRoute</span><span class="p">.</span><span class="nx">fallThrough</span> <span class="o">===</span> <span class="kc">undefined</span> <span class="o">||</span> - <span class="nx">candidateRoute</span><span class="p">.</span><span class="nx">fallThrough</span> <span class="o">===</span> <span class="kc">false</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="kc">true</span><span class="p">;</span> - <span class="p">}</span> - <span class="p">}</span> - <span class="p">});</span> - - <span class="k">if</span> <span class="p">(</span><span class="nx">numMatched</span> <span class="o">===</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">onRouteNotFound</span><span class="p">.</span><span class="nx">trigger</span><span class="p">(</span><span class="nx">currentUrl</span><span class="p">.</span><span class="nx">toString</span><span class="p">());</span> - <span class="p">}</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Injects route in route table. Routes are ordered by priority (lower first) with</span> -<span class="cm"> * routes without priority last. Routes with same priority are order in</span> -<span class="cm"> * registration order.</span> -<span class="cm"> *</span> -<span class="cm"> * @param {route} route</span> -<span class="cm"> */</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">addRoute</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">route</span><span class="p">)</span> <span class="p">{</span> - <span class="kd">var</span> <span class="nx">routeIndex</span> <span class="o">=</span> <span class="nx">my</span><span class="p">.</span><span class="nx">routeTable</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span> - <span class="k">if</span><span class="p">(</span><span class="nx">route</span><span class="p">.</span><span class="nx">priority</span> <span class="o">!==</span> <span class="kc">undefined</span><span class="p">)</span> <span class="p">{</span> - <span class="k">do</span> <span class="p">{</span> <span class="o">--</span><span class="nx">routeIndex</span><span class="p">;</span> <span class="p">}</span> <span class="k">while</span> <span class="p">(</span><span class="nx">my</span><span class="p">.</span><span class="nx">routeTable</span><span class="p">[</span><span class="nx">routeIndex</span><span class="p">]</span> <span class="o">&&</span> - <span class="p">(</span><span class="nx">my</span><span class="p">.</span><span class="nx">routeTable</span><span class="p">[</span><span class="nx">routeIndex</span><span class="p">].</span><span class="nx">priority</span> <span class="o">===</span> <span class="kc">undefined</span> <span class="o">||</span> - <span class="nx">route</span><span class="p">.</span><span class="nx">priority</span> <span class="o"><</span> <span class="nx">my</span><span class="p">.</span><span class="nx">routeTable</span><span class="p">[</span><span class="nx">routeIndex</span><span class="p">].</span><span class="nx">priority</span><span class="p">));</span> - <span class="nx">routeIndex</span> <span class="o">+=</span> <span class="mi">1</span><span class="p">;</span> - <span class="p">}</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">routeTable</span><span class="p">.</span><span class="nx">splice</span><span class="p">(</span><span class="nx">routeIndex</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="nx">route</span><span class="p">);</span> - <span class="p">};</span></pre></div> </td> </tr> <tr id="section-13"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-13">¶</a> </div> <p>Private</p> </td> <td class="code"> <div class="highlight"><pre> <span class="cm">/**</span> -<span class="cm"> * Shallow merge all objects in arguments. Properties in later objects overwrites</span> -<span class="cm"> * properties.</span> -<span class="cm"> *</span> -<span class="cm"> * @returns {{}}</span> -<span class="cm"> */</span> - <span class="kd">function</span> <span class="nx">merge</span><span class="p">()</span> <span class="p">{</span> - <span class="kd">var</span> <span class="nx">objects</span> <span class="o">=</span> <span class="nb">Array</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">slice</span><span class="p">.</span><span class="nx">call</span><span class="p">(</span><span class="nx">arguments</span><span class="p">);</span> - - <span class="kd">var</span> <span class="nx">target</span> <span class="o">=</span> <span class="p">{};</span> - <span class="nx">objects</span><span class="p">.</span><span class="nx">forEach</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">obj</span><span class="p">)</span> <span class="p">{</span> - <span class="nb">Object</span><span class="p">.</span><span class="nx">keys</span><span class="p">(</span><span class="nx">obj</span><span class="p">).</span><span class="nx">forEach</span><span class="p">(</span><span class="kd">function</span> <span class="p">(</span><span class="nx">key</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">target</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span> <span class="o">=</span> <span class="nx">obj</span><span class="p">[</span><span class="nx">key</span><span class="p">];</span> - <span class="p">});</span> - <span class="p">});</span> - - <span class="k">return</span> <span class="nx">target</span><span class="p">;</span> - <span class="p">}</span> - <span class="p">});</span> - - <span class="k">return</span> <span class="nx">router</span><span class="p">;</span> - <span class="p">});</span> - -</pre></div> </td> </tr> </tbody> </table> </div> </body> </html> \ No newline at end of file diff --git a/docs/docco/staticSegment.html b/docs/docco/staticSegment.html deleted file mode 100644 index 1e63a52b..00000000 --- a/docs/docco/staticSegment.html +++ /dev/null @@ -1,44 +0,0 @@ -<!DOCTYPE html> <html> <head> <title>staticSegment.js</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <link rel="stylesheet" media="all" href="docco.css" /> </head> <body> <div id="container"> <div id="background"></div> <div id="jump_to"> Jump To … <div id="jump_wrapper"> <div id="jump_page"> <a class="source" href="core.html"> core.js </a> <a class="source" href="events.html"> events.js </a> <a class="source" href="htmlCanvas.html"> htmlCanvas.js </a> <a class="source" href="router.html"> router.js </a> <a class="source" href="abstractSegment.html"> abstractSegment.js </a> <a class="source" href="hashLocation.html"> hashLocation.js </a> <a class="source" href="optionalParameterSegment.html"> optionalParameterSegment.js </a> <a class="source" href="parameterSegment.html"> parameterSegment.js </a> <a class="source" href="route.html"> route.js </a> <a class="source" href="routeFactory.html"> routeFactory.js </a> <a class="source" href="routeMatchResult.html"> routeMatchResult.js </a> <a class="source" href="router.html"> router.js </a> <a class="source" href="staticSegment.html"> staticSegment.js </a> <a class="source" href="url.html"> url.js </a> <a class="source" href="widget-extensions.html"> widget-extensions.js </a> <a class="source" href="widget.html"> widget.js </a> </div> </div> </div> <table cellpadding="0" cellspacing="0"> <thead> <tr> <th class="docs"> <h1> staticSegment.js </h1> </th> <th class="code"> </th> </tr> </thead> <tbody> <tr id="section-1"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-1">¶</a> </div> </td> <td class="code"> <div class="highlight"><pre><span></span><span class="nx">define</span><span class="p">([</span> - <span class="s1">'./abstractSegment'</span> -<span class="p">],</span> <span class="kd">function</span><span class="p">(</span><span class="nx">abstractSegment</span><span class="p">)</span> <span class="p">{</span> - - <span class="cm">/**</span> -<span class="cm"> * A static segment match URL segments that are identical</span> -<span class="cm"> * to the route segment string.</span> -<span class="cm"> *</span> -<span class="cm"> * @param spec abstractSegment spec</span> -<span class="cm"> * @param [my]</span> -<span class="cm"> * @returns {segment}</span> -<span class="cm"> */</span> - <span class="kd">var</span> <span class="nx">staticSegment</span> <span class="o">=</span> <span class="nx">abstractSegment</span><span class="p">.</span><span class="nx">subclass</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">that</span><span class="p">,</span> <span class="nx">my</span><span class="p">)</span> <span class="p">{</span> - - <span class="cm">/**</span> -<span class="cm"> * Static segment match if URL and route segment</span> -<span class="cm"> * strings are identical.</span> -<span class="cm"> *</span> -<span class="cm"> * @param {string} urlSegment</span> -<span class="cm"> * @returns {boolean}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">match</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">urlSegment</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">that</span><span class="p">.</span><span class="nx">getValue</span><span class="p">()</span> <span class="o">===</span> <span class="nx">urlSegment</span><span class="p">;</span> - <span class="p">};</span> - - <span class="k">return</span> <span class="nx">that</span><span class="p">;</span> - <span class="p">});</span> - - <span class="nx">staticSegment</span><span class="p">.</span><span class="kr">class</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">that</span><span class="p">)</span> <span class="p">{</span> - - <span class="cm">/**</span> -<span class="cm"> * Match all but parameter segment strings</span> -<span class="cm"> * @param {string} segmentString</span> -<span class="cm"> * @returns {boolean}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">match</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">segmentString</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="p">[</span><span class="s1">'#'</span><span class="p">,</span> <span class="s1">'?'</span><span class="p">].</span><span class="nx">indexOf</span><span class="p">(</span><span class="nx">segmentString</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">===</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span> - <span class="p">};</span> - <span class="p">});</span> - - <span class="k">return</span> <span class="nx">staticSegment</span><span class="p">;</span> -<span class="p">});</span> - -</pre></div> </td> </tr> </tbody> </table> </div> </body> </html> \ No newline at end of file diff --git a/docs/docco/url.html b/docs/docco/url.html deleted file mode 100644 index 55db59bc..00000000 --- a/docs/docco/url.html +++ /dev/null @@ -1,156 +0,0 @@ -<!DOCTYPE html> <html> <head> <title>url.js</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <link rel="stylesheet" media="all" href="docco.css" /> </head> <body> <div id="container"> <div id="background"></div> <div id="jump_to"> Jump To … <div id="jump_wrapper"> <div id="jump_page"> <a class="source" href="core.html"> core.js </a> <a class="source" href="events.html"> events.js </a> <a class="source" href="htmlCanvas.html"> htmlCanvas.js </a> <a class="source" href="router.html"> router.js </a> <a class="source" href="abstractSegment.html"> abstractSegment.js </a> <a class="source" href="hashLocation.html"> hashLocation.js </a> <a class="source" href="optionalParameterSegment.html"> optionalParameterSegment.js </a> <a class="source" href="parameterSegment.html"> parameterSegment.js </a> <a class="source" href="route.html"> route.js </a> <a class="source" href="routeFactory.html"> routeFactory.js </a> <a class="source" href="routeMatchResult.html"> routeMatchResult.js </a> <a class="source" href="router.html"> router.js </a> <a class="source" href="staticSegment.html"> staticSegment.js </a> <a class="source" href="url.html"> url.js </a> <a class="source" href="widget-extensions.html"> widget-extensions.js </a> <a class="source" href="widget.html"> widget.js </a> </div> </div> </div> <table cellpadding="0" cellspacing="0"> <thead> <tr> <th class="docs"> <h1> url.js </h1> </th> <th class="code"> </th> </tr> </thead> <tbody> <tr id="section-1"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-1">¶</a> </div> </td> <td class="code"> <div class="highlight"><pre><span></span><span class="nx">define</span><span class="p">([</span> - <span class="s1">'klassified'</span> -<span class="p">],</span> - <span class="kd">function</span> <span class="p">(</span><span class="nx">object</span><span class="p">)</span> <span class="p">{</span> - - <span class="cm">/**</span> -<span class="cm"> * Token/Char used to separate segments in URL paths.</span> -<span class="cm"> * @type {string}</span> -<span class="cm"> */</span> - <span class="kd">var</span> <span class="nx">urlSeparator</span> <span class="o">=</span> <span class="s1">'/'</span><span class="p">;</span> - - <span class="cm">/**</span> -<span class="cm"> * A `url` actually represents the fragment part of the actual url.</span> -<span class="cm"> *</span> -<span class="cm"> * @example</span> -<span class="cm"> * var url = url({rawUrl: 'path/to?foo=a&bar=b'});</span> -<span class="cm"> * url.getPath(); // => 'path/to'</span> -<span class="cm"> * url.getQuery(); // => {foo: 'a', bar: 'b'}</span> -<span class="cm"> * url.matchRoute(aRoute); // => true</span> -<span class="cm"> *</span> -<span class="cm"> * @param {string} rawUrl</span> -<span class="cm"> * @returns {url}</span> -<span class="cm"> */</span> - <span class="kd">var</span> <span class="nx">url</span> <span class="o">=</span> <span class="nx">object</span><span class="p">.</span><span class="nx">subclass</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">that</span><span class="p">,</span> <span class="nx">my</span><span class="p">)</span> <span class="p">{</span> - - <span class="kd">var</span> <span class="nx">rawUrl</span><span class="p">;</span> - <span class="kd">var</span> <span class="nx">path</span><span class="p">;</span> - <span class="kd">var</span> <span class="nx">query</span><span class="p">;</span> - <span class="kd">var</span> <span class="nx">segments</span><span class="p">;</span> - - <span class="nx">my</span><span class="p">.</span><span class="nx">initialize</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">spec</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">my</span><span class="p">.</span><span class="kr">super</span><span class="p">(</span><span class="nx">spec</span><span class="p">);</span> - <span class="nx">rawUrl</span> <span class="o">=</span> <span class="nx">spec</span><span class="p">.</span><span class="nx">rawUrl</span> <span class="o">||</span> <span class="s1">''</span><span class="p">;</span> - <span class="nx">path</span> <span class="o">=</span> <span class="nx">parsePath</span><span class="p">(</span><span class="nx">rawUrl</span><span class="p">);</span> - <span class="nx">query</span> <span class="o">=</span> <span class="nx">parseQuery</span><span class="p">(</span><span class="nx">rawUrl</span><span class="p">);</span> - <span class="nx">segments</span> <span class="o">=</span> <span class="nx">parseSegments</span><span class="p">(</span><span class="nx">path</span><span class="p">);</span> - <span class="p">};</span></pre></div> </td> </tr> <tr id="section-2"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-2">¶</a> </div> <p>Public</p> </td> <td class="code"> <div class="highlight"><pre> <span class="cm">/**</span> -<span class="cm"> * URL path</span> -<span class="cm"> * @returns {string}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">getPath</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span> <span class="k">return</span> <span class="nx">path</span><span class="p">;</span> <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Key/Value pairs parsed from query</span> -<span class="cm"> *</span> -<span class="cm"> * @returns {{}}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">getQuery</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span> <span class="k">return</span> <span class="nx">query</span><span class="p">;</span> <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Segments in path parsed by splitting `path` by `urlSeparator`</span> -<span class="cm"> *</span> -<span class="cm"> * @returns {string[]}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">getSegments</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span> <span class="k">return</span> <span class="nx">segments</span><span class="p">;</span> <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Answers true if the route is a match for the receiver</span> -<span class="cm"> *</span> -<span class="cm"> * @param route</span> -<span class="cm"> * @returns {boolean}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">matchRoute</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">route</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">route</span><span class="p">.</span><span class="nx">matchUrl</span><span class="p">(</span><span class="nx">that</span><span class="p">);</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Returns `rawUrl`</span> -<span class="cm"> * @returns {string}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">toString</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">rawUrl</span><span class="p">;</span> - <span class="p">};</span> - <span class="p">});</span> - - <span class="cm">/**</span> -<span class="cm"> * Create URL from path and query</span> -<span class="cm"> *</span> -<span class="cm"> * @example</span> -<span class="cm"> * var aUrl = url('/path/to', {foo: 'bar' });</span> -<span class="cm"> * aUrl.toString(); // => 'path/to?foo=bar'</span> -<span class="cm"> *</span> -<span class="cm"> * @param {string} path</span> -<span class="cm"> * @param {{}} query</span> -<span class="cm"> * @returns {url}</span> -<span class="cm"> */</span> - <span class="nx">url</span><span class="p">.</span><span class="nx">build</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">path</span><span class="p">,</span> <span class="nx">query</span><span class="p">)</span> <span class="p">{</span> - <span class="k">if</span> <span class="p">(</span><span class="k">typeof</span><span class="p">(</span><span class="nx">path</span><span class="p">)</span> <span class="o">===</span> <span class="s1">'undefined'</span> <span class="o">||</span> <span class="nx">path</span> <span class="o">===</span> <span class="kc">null</span> <span class="o">||</span> <span class="k">typeof</span> <span class="nx">path</span> <span class="o">!==</span> <span class="s2">"string"</span><span class="p">)</span> <span class="p">{</span> - <span class="k">throw</span> <span class="s1">'accepts only string paths'</span><span class="p">;</span> - <span class="p">}</span> - - <span class="k">if</span> <span class="p">(</span><span class="nx">query</span><span class="p">)</span> <span class="p">{</span> - <span class="kd">var</span> <span class="nx">queryPart</span> <span class="o">=</span> <span class="nb">decodeURIComponent</span><span class="p">(</span><span class="nx">jQuery</span><span class="p">.</span><span class="nx">param</span><span class="p">(</span><span class="nx">query</span><span class="p">));</span> - <span class="k">if</span><span class="p">(</span><span class="nx">queryPart</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">url</span><span class="p">({</span><span class="nx">rawUrl</span><span class="o">:</span> <span class="nx">path</span> <span class="o">+</span> <span class="s1">'?'</span> <span class="o">+</span> <span class="nx">queryPart</span><span class="p">});</span> - <span class="p">}</span> - <span class="p">}</span> - - <span class="k">return</span> <span class="nx">url</span><span class="p">({</span><span class="nx">rawUrl</span><span class="o">:</span> <span class="nx">path</span><span class="p">});</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Splits URL path into segments. Removes leading, trailing, and</span> -<span class="cm"> * duplicated `urlSeparator`.</span> -<span class="cm"> *</span> -<span class="cm"> * @example</span> -<span class="cm"> * parseSegments('/a/path/to'); // => ['a', 'path', 'to']</span> -<span class="cm"> *</span> -<span class="cm"> * @param path</span> -<span class="cm"> * @returns {string[]}</span> -<span class="cm"> */</span> - <span class="kd">function</span> <span class="nx">parseSegments</span><span class="p">(</span><span class="nx">path</span><span class="p">)</span> <span class="p">{</span></pre></div> </td> </tr> <tr id="section-3"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-3">¶</a> </div> <p>Split on separator and remove all leading, trailing, and -duplicated <code>urlSeparator</code> by filtering empty strings.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">return</span> <span class="nx">path</span><span class="p">.</span><span class="nx">split</span><span class="p">(</span><span class="nx">urlSeparator</span><span class="p">).</span><span class="nx">filter</span><span class="p">(</span><span class="nb">Boolean</span><span class="p">);</span> - <span class="p">}</span> - - <span class="cm">/**</span> -<span class="cm"> * Returns path from a raw URL</span> -<span class="cm"> *</span> -<span class="cm"> * @example</span> -<span class="cm"> * parsePath('/a/path/to?foo=bar'); // => '/a/path/to'</span> -<span class="cm"> *</span> -<span class="cm"> * @param {string} rawUrl</span> -<span class="cm"> * @returns {string}</span> -<span class="cm"> */</span> - <span class="kd">function</span> <span class="nx">parsePath</span><span class="p">(</span><span class="nx">rawUrl</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">rawUrl</span><span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="sr">/\?.*$/g</span><span class="p">,</span> <span class="s1">''</span><span class="p">);</span> - <span class="p">}</span> - - <span class="cm">/**</span> -<span class="cm"> * Extract query key/value(s) from a rawUrl and return them as an</span> -<span class="cm"> * object literal with key/values.</span> -<span class="cm"> *</span> -<span class="cm"> * @example</span> -<span class="cm"> * parsePath('/a/path/to?foo=bar&test=1'); // => {foo: 'bar', test: '1'}</span> -<span class="cm"> *</span> -<span class="cm"> * @param {string} rawUrl</span> -<span class="cm"> * @returns {{}}</span> -<span class="cm"> */</span> - <span class="kd">function</span> <span class="nx">parseQuery</span><span class="p">(</span><span class="nx">rawUrl</span><span class="p">)</span> <span class="p">{</span></pre></div> </td> </tr> <tr id="section-4"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-4">¶</a> </div> <p>Extract query key/value(s) from a rawUrl and add them to <code>query</code> object.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="kd">var</span> <span class="nx">result</span> <span class="o">=</span> <span class="sr">/[^?]*\?(.*)$/g</span><span class="p">.</span><span class="nx">exec</span><span class="p">(</span><span class="nx">rawUrl</span><span class="p">);</span> - <span class="kd">var</span> <span class="nx">query</span> <span class="o">=</span> <span class="p">{};</span> - <span class="kd">var</span> <span class="nx">pair</span><span class="p">;</span> - <span class="k">if</span> <span class="p">(</span><span class="nx">result</span> <span class="o">&&</span> <span class="nx">result</span><span class="p">.</span><span class="nx">length</span> <span class="o">>=</span> <span class="mi">2</span><span class="p">)</span> <span class="p">{</span> - <span class="p">(</span><span class="nx">result</span><span class="p">[</span><span class="mi">1</span><span class="p">].</span><span class="nx">split</span><span class="p">(</span><span class="s2">"&"</span><span class="p">)).</span><span class="nx">forEach</span><span class="p">(</span><span class="kd">function</span> <span class="p">(</span><span class="nx">each</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">pair</span> <span class="o">=</span> <span class="nx">each</span><span class="p">.</span><span class="nx">split</span><span class="p">(</span><span class="s2">"="</span><span class="p">);</span> - <span class="nx">query</span><span class="p">[</span><span class="nx">pair</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span> <span class="o">=</span> <span class="nx">pair</span><span class="p">[</span><span class="mi">1</span><span class="p">];</span> - <span class="p">});</span> - <span class="p">}</span> - - <span class="k">return</span> <span class="nx">query</span><span class="p">;</span> - <span class="p">}</span> - - <span class="k">return</span> <span class="nx">url</span><span class="p">;</span> - <span class="p">}</span> -<span class="p">);</span> - -</pre></div> </td> </tr> </tbody> </table> </div> </body> </html> \ No newline at end of file diff --git a/docs/docco/widget-extensions.html b/docs/docco/widget-extensions.html deleted file mode 100644 index 3ce1c231..00000000 --- a/docs/docco/widget-extensions.html +++ /dev/null @@ -1,16 +0,0 @@ -<!DOCTYPE html> <html> <head> <title>widget-extensions.js</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <link rel="stylesheet" media="all" href="docco.css" /> </head> <body> <div id="container"> <div id="background"></div> <div id="jump_to"> Jump To … <div id="jump_wrapper"> <div id="jump_page"> <a class="source" href="core.html"> core.js </a> <a class="source" href="events.html"> events.js </a> <a class="source" href="htmlCanvas.html"> htmlCanvas.js </a> <a class="source" href="router.html"> router.js </a> <a class="source" href="abstractSegment.html"> abstractSegment.js </a> <a class="source" href="hashLocation.html"> hashLocation.js </a> <a class="source" href="optionalParameterSegment.html"> optionalParameterSegment.js </a> <a class="source" href="parameterSegment.html"> parameterSegment.js </a> <a class="source" href="route.html"> route.js </a> <a class="source" href="routeFactory.html"> routeFactory.js </a> <a class="source" href="routeMatchResult.html"> routeMatchResult.js </a> <a class="source" href="router.html"> router.js </a> <a class="source" href="staticSegment.html"> staticSegment.js </a> <a class="source" href="url.html"> url.js </a> <a class="source" href="widget-extensions.html"> widget-extensions.js </a> <a class="source" href="widget.html"> widget.js </a> </div> </div> </div> <table cellpadding="0" cellspacing="0"> <thead> <tr> <th class="docs"> <h1> widget-extensions.js </h1> </th> <th class="code"> </th> </tr> </thead> <tbody> <tr id="section-1"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-1">¶</a> </div> <p>Widget extensions</p> - -<p>In your application include widget extensions. Using require.js: -define(['canvas/'widget-extensions], function(ext) { ... });</p> - -<p>add properties to ext that you need in all widgets. -ext.hello = function() { alert('hello world')};</p> - -<p>and use in all widgets: -my.hello();</p> </td> <td class="code"> <div class="highlight"><pre><span></span><span class="nx">define</span><span class="p">(</span> - <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span> - <span class="k">return</span> <span class="p">{};</span> - <span class="p">}</span> -<span class="p">);</span> - -</pre></div> </td> </tr> </tbody> </table> </div> </body> </html> \ No newline at end of file diff --git a/docs/docco/widget.html b/docs/docco/widget.html deleted file mode 100644 index 9d2a8d73..00000000 --- a/docs/docco/widget.html +++ /dev/null @@ -1,455 +0,0 @@ -<!DOCTYPE html> <html> <head> <title>widget.js</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <link rel="stylesheet" media="all" href="docco.css" /> </head> <body> <div id="container"> <div id="background"></div> <div id="jump_to"> Jump To … <div id="jump_wrapper"> <div id="jump_page"> <a class="source" href="core.html"> core.js </a> <a class="source" href="events.html"> events.js </a> <a class="source" href="htmlCanvas.html"> htmlCanvas.js </a> <a class="source" href="router.html"> router.js </a> <a class="source" href="abstractSegment.html"> abstractSegment.js </a> <a class="source" href="hashLocation.html"> hashLocation.js </a> <a class="source" href="optionalParameterSegment.html"> optionalParameterSegment.js </a> <a class="source" href="parameterSegment.html"> parameterSegment.js </a> <a class="source" href="route.html"> route.js </a> <a class="source" href="routeFactory.html"> routeFactory.js </a> <a class="source" href="routeMatchResult.html"> routeMatchResult.js </a> <a class="source" href="router.html"> router.js </a> <a class="source" href="staticSegment.html"> staticSegment.js </a> <a class="source" href="url.html"> url.js </a> <a class="source" href="widget-extensions.html"> widget-extensions.js </a> <a class="source" href="widget.html"> widget.js </a> </div> </div> </div> <table cellpadding="0" cellspacing="0"> <thead> <tr> <th class="docs"> <h1> widget.js </h1> </th> <th class="code"> </th> </tr> </thead> <tbody> <tr id="section-1"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-1">¶</a> </div> </td> <td class="code"> <div class="highlight"><pre><span></span><span class="nx">define</span><span class="p">(</span> - <span class="p">[</span> - <span class="s1">'klassified'</span><span class="p">,</span> - <span class="s1">'./widget-extensions'</span><span class="p">,</span> - <span class="s1">'./router'</span><span class="p">,</span> - <span class="s1">'./events'</span><span class="p">,</span> - <span class="s1">'./htmlCanvas'</span><span class="p">,</span> - <span class="s1">'jquery'</span> - <span class="p">],</span> - - <span class="kd">function</span> <span class="p">(</span><span class="nx">object</span><span class="p">,</span> <span class="nx">ext</span><span class="p">,</span> <span class="nx">router</span><span class="p">,</span> <span class="nx">events</span><span class="p">,</span> <span class="nx">htmlCanvas</span><span class="p">,</span> <span class="nx">jQuery</span><span class="p">)</span> <span class="p">{</span> - - <span class="cm">/**</span> -<span class="cm"> * Base for all widgets. A widget can keep state in variables, contain logic and</span> -<span class="cm"> * render itself using `renderOn()`.</span> -<span class="cm"> *</span> -<span class="cm"> * @example</span> -<span class="cm"> *</span> -<span class="cm"> * var titleWidget = function(spec) {</span> -<span class="cm"> * var that = widget(spec);</span> -<span class="cm"> *</span> -<span class="cm"> * var title = spec.title || 'Hello World';</span> -<span class="cm"> *</span> -<span class="cm"> * that.renderContentOn = function(html) {</span> -<span class="cm"> * html.h1(title)</span> -<span class="cm"> * }</span> -<span class="cm"> *</span> -<span class="cm"> * return that;</span> -<span class="cm"> * };</span> -<span class="cm"> *</span> -<span class="cm"> * var helloWorldWidget = titleWidget({title: 'Hello Widget!'});</span> -<span class="cm"> *</span> -<span class="cm"> * $(document).ready(function() {</span> -<span class="cm"> * helloWorldWidget.appendTo('BODY');</span> -<span class="cm"> * });</span> -<span class="cm"> *</span> -<span class="cm"> * Widgets can also be rendered on a HTML canvas (since widget implements `appendToBrush()`). Eg.</span> -<span class="cm"> *</span> -<span class="cm"> * html.div(helloWorldWidget)</span> -<span class="cm"> *</span> -<span class="cm"> * It is therefor easy to compose widgets from other widgets.</span> -<span class="cm"> *</span> -<span class="cm"> *</span> -<span class="cm"> * @param {Object} spec</span> -<span class="cm"> * @param {String} [spec.id] Unique id for widget. Also used for root element when attached/rendered to DOM.</span> -<span class="cm"> * If not provided an ID will automatically be generated and assigned.</span> -<span class="cm"> * @param {Object} [my]</span> -<span class="cm"> *</span> -<span class="cm"> * @returns {widget}</span> -<span class="cm"> */</span> - <span class="kd">var</span> <span class="nx">widget</span> <span class="o">=</span> <span class="nx">object</span><span class="p">.</span><span class="nx">subclass</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">that</span><span class="p">,</span> <span class="nx">my</span><span class="p">)</span> <span class="p">{</span> - - <span class="cm">/**</span> -<span class="cm"> * Keep track of the rendered subwidgets</span> -<span class="cm"> */</span> - <span class="kd">var</span> <span class="nx">children</span><span class="p">;</span> - <span class="kd">var</span> <span class="nx">id</span><span class="p">;</span> - - <span class="nx">my</span><span class="p">.</span><span class="nx">initialize</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">spec</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">my</span><span class="p">.</span><span class="kr">super</span><span class="p">(</span><span class="nx">spec</span><span class="p">);</span> - <span class="nx">id</span> <span class="o">=</span> <span class="nx">spec</span><span class="p">.</span><span class="nx">id</span> <span class="o">||</span> <span class="nx">idGenerator</span><span class="p">.</span><span class="nx">newId</span><span class="p">();</span></pre></div> </td> </tr> <tr id="section-2"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-2">¶</a> </div> <p>When within an update transaction, do not update the widget</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">my</span><span class="p">.</span><span class="nx">inUpdateTransaction</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> - <span class="nx">children</span> <span class="o">=</span> <span class="p">[];</span> - <span class="p">};</span> - - <span class="cm">/** Events for widget */</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">events</span> <span class="o">=</span> <span class="nx">events</span><span class="p">.</span><span class="nx">eventCategory</span><span class="p">();</span> - - <span class="nx">that</span><span class="p">.</span><span class="nx">onAttach</span> <span class="o">=</span> <span class="nx">my</span><span class="p">.</span><span class="nx">events</span><span class="p">.</span><span class="nx">createEvent</span><span class="p">();</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">onDetach</span> <span class="o">=</span> <span class="nx">my</span><span class="p">.</span><span class="nx">events</span><span class="p">.</span><span class="nx">createEvent</span><span class="p">();</span></pre></div> </td> </tr> <tr id="section-3"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-3">¶</a> </div> <p>Public</p> </td> <td class="code"> <div class="highlight"><pre> <span class="cm">/**</span> -<span class="cm"> * Returns a unique id for the widget</span> -<span class="cm"> *</span> -<span class="cm"> * @returns {String}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">getId</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">id</span><span class="p">;</span> - <span class="p">};</span> - - <span class="nx">that</span><span class="p">.</span><span class="nx">id</span> <span class="o">=</span> <span class="nx">that</span><span class="p">.</span><span class="nx">getId</span><span class="p">;</span> <span class="c1">//TODO: deprecated</span> - - <span class="cm">/**</span> -<span class="cm"> * Performance tasks need for freeing/releasing/cleaning-up resources used by widget.</span> -<span class="cm"> *</span> -<span class="cm"> * Should always be executed before a widget is disposed. Especially</span> -<span class="cm"> * if the widget register events to avoid memory leaks.</span> -<span class="cm"> *</span> -<span class="cm"> * Most widgets should override `my.dispose` instead of overriding</span> -<span class="cm"> * this function.</span> -<span class="cm"> *</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">dispose</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span> - <span class="nx">children</span><span class="p">.</span><span class="nx">forEach</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">child</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">child</span><span class="p">.</span><span class="nx">dispose</span><span class="p">();</span> - <span class="p">});</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">dispose</span><span class="p">();</span> - - <span class="nx">my</span><span class="p">.</span><span class="nx">events</span><span class="p">.</span><span class="nx">dispose</span><span class="p">();</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Method to be performed when a root widget is detached from the</span> -<span class="cm"> * DOM. The widegt and all its children will call `my.willDetach` in</span> -<span class="cm"> * turn.</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">willDetach</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span> - <span class="nx">children</span><span class="p">.</span><span class="nx">forEach</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">child</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">child</span><span class="p">.</span><span class="nx">willDetach</span><span class="p">();</span> - <span class="p">});</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">willDetach</span><span class="p">();</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">onDetach</span><span class="p">.</span><span class="nx">trigger</span><span class="p">();</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Renders the widget on a JQuery / DOM</span> -<span class="cm"> *</span> -<span class="cm"> * @example</span> -<span class="cm"> * widget.appendTo('BODY');</span> -<span class="cm"> *</span> -<span class="cm"> * @param aJQuery</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">appendTo</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">aJQuery</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">withAttachHooks</span><span class="p">(</span><span class="kd">function</span><span class="p">()</span> <span class="p">{</span> - <span class="nx">renderBasicOn</span><span class="p">(</span><span class="nx">htmlCanvas</span><span class="p">(</span><span class="nx">aJQuery</span><span class="p">));</span> - <span class="p">});</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Does the same as appendTo except it first clear the</span> -<span class="cm"> * elements matched by aJQuery</span> -<span class="cm"> *</span> -<span class="cm"> * @param aJQuery</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">replace</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">aJQuery</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">withAttachHooks</span><span class="p">(</span><span class="kd">function</span><span class="p">()</span> <span class="p">{</span> - <span class="kd">var</span> <span class="nx">canvas</span> <span class="o">=</span> <span class="nx">htmlCanvas</span><span class="p">(</span><span class="nx">aJQuery</span><span class="p">);</span> - <span class="nx">canvas</span><span class="p">.</span><span class="nx">root</span><span class="p">.</span><span class="nx">asJQuery</span><span class="p">().</span><span class="nx">empty</span><span class="p">();</span> - <span class="nx">renderBasicOn</span><span class="p">(</span><span class="nx">canvas</span><span class="p">);</span> - <span class="p">});</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Answers a jQuery that match the root DOM element. By default</span> -<span class="cm"> * by selecting an element that have the same ID as the widget.</span> -<span class="cm"> *</span> -<span class="cm"> * See 'renderOn'</span> -<span class="cm"> *</span> -<span class="cm"> * @returns {*}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">asJQuery</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">jQuery</span><span class="p">(</span><span class="s1">'#'</span> <span class="o">+</span> <span class="nx">that</span><span class="p">.</span><span class="nx">getId</span><span class="p">());</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Answers true if if widget have rendered content in DOM</span> -<span class="cm"> *</span> -<span class="cm"> * @returns {boolean}</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">isRendered</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">that</span><span class="p">.</span><span class="nx">asJQuery</span><span class="p">().</span><span class="nx">length</span> <span class="o">></span> <span class="mi">0</span><span class="p">;</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Implementation for `appendToBrush()` to allow a widget to be</span> -<span class="cm"> * appended to a brush. See 'htmlCanvas'.</span> -<span class="cm"> *</span> -<span class="cm"> * Basically it allows us to do:</span> -<span class="cm"> * html.div(widget);</span> -<span class="cm"> *</span> -<span class="cm"> * @param aTagBrush</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">appendToBrush</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">aTagBrush</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">withAttachHooks</span><span class="p">(</span><span class="kd">function</span><span class="p">()</span> <span class="p">{</span> - <span class="nx">renderBasicOn</span><span class="p">(</span><span class="nx">htmlCanvas</span><span class="p">(</span><span class="nx">aTagBrush</span><span class="p">.</span><span class="nx">asJQuery</span><span class="p">()));</span> - <span class="p">});</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Trigger the `willAttach` event on the receiver and all</span> -<span class="cm"> * rendered subwidgets.</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">triggerWillAttach</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">willAttach</span><span class="p">();</span> - <span class="nx">children</span><span class="p">.</span><span class="nx">forEach</span><span class="p">(</span><span class="kd">function</span> <span class="p">(</span><span class="nx">widget</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">widget</span><span class="p">.</span><span class="nx">triggerWillAttach</span><span class="p">();</span> - <span class="p">});</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Trigger the `didAttach` event on the receiver and all</span> -<span class="cm"> * rendered subwidgets.</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">triggerDidAttach</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">didAttach</span><span class="p">();</span> - <span class="nx">children</span><span class="p">.</span><span class="nx">forEach</span><span class="p">(</span><span class="kd">function</span> <span class="p">(</span><span class="nx">widget</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">widget</span><span class="p">.</span><span class="nx">triggerDidAttach</span><span class="p">();</span> - <span class="p">});</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">onAttach</span><span class="p">.</span><span class="nx">trigger</span><span class="p">();</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Evaluate `fn`, calling `willAttach` before and `didAttach` after</span> -<span class="cm"> * the evaluation.</span> -<span class="cm"> */</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">withAttachHooks</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">fn</span><span class="p">)</span> <span class="p">{</span> - <span class="kd">var</span> <span class="nx">inRendering</span> <span class="o">=</span> <span class="nx">inRenderingLoop</span><span class="p">();</span> - <span class="k">if</span><span class="p">(</span><span class="o">!</span><span class="nx">inRendering</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">triggerWillAttach</span><span class="p">();</span> - <span class="p">}</span> - <span class="nx">fn</span><span class="p">();</span> - <span class="k">if</span><span class="p">(</span><span class="o">!</span><span class="nx">inRendering</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">triggerDidAttach</span><span class="p">();</span> - <span class="p">}</span> - <span class="p">};</span></pre></div> </td> </tr> <tr id="section-4"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-4">¶</a> </div> <p>Expose events</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">that</span><span class="p">.</span><span class="nx">on</span> <span class="o">=</span> <span class="nx">my</span><span class="p">.</span><span class="nx">events</span><span class="p">.</span><span class="nx">on</span><span class="p">;</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">onceOn</span> <span class="o">=</span> <span class="nx">my</span><span class="p">.</span><span class="nx">events</span><span class="p">.</span><span class="nx">onceOn</span><span class="p">;</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">off</span> <span class="o">=</span> <span class="nx">my</span><span class="p">.</span><span class="nx">events</span><span class="p">.</span><span class="nx">off</span><span class="p">;</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">trigger</span> <span class="o">=</span> <span class="nx">my</span><span class="p">.</span><span class="nx">events</span><span class="p">.</span><span class="nx">trigger</span><span class="p">;</span></pre></div> </td> </tr> <tr id="section-5"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-5">¶</a> </div> <p>Protected</p> </td> <td class="code"> <div class="highlight"><pre> <span class="cm">/**</span> -<span class="cm"> * Exposes the internal ID generator. Generates new unique IDs to be used</span> -<span class="cm"> * for sub-widgets, etc.</span> -<span class="cm"> *</span> -<span class="cm"> * @returns {String}</span> -<span class="cm"> */</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">nextId</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">idGenerator</span><span class="p">.</span><span class="nx">newId</span><span class="p">();</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Widget specific dispose.</span> -<span class="cm"> */</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">dispose</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{};</span></pre></div> </td> </tr> <tr id="section-6"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-6">¶</a> </div> <p>Route / Controller extensions</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">my</span><span class="p">.</span><span class="nx">router</span> <span class="o">=</span> <span class="nx">router</span><span class="p">.</span><span class="nx">getRouter</span><span class="p">();</span> - - <span class="nx">my</span><span class="p">.</span><span class="nx">linkTo</span> <span class="o">=</span> <span class="nx">my</span><span class="p">.</span><span class="nx">router</span><span class="p">.</span><span class="nx">linkTo</span><span class="p">;</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">linkToPath</span> <span class="o">=</span> <span class="nx">my</span><span class="p">.</span><span class="nx">router</span><span class="p">.</span><span class="nx">linkToPath</span><span class="p">;</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">linkToUrl</span> <span class="o">=</span> <span class="nx">my</span><span class="p">.</span><span class="nx">router</span><span class="p">.</span><span class="nx">linkToUrl</span><span class="p">;</span> - - <span class="nx">my</span><span class="p">.</span><span class="nx">redirectTo</span> <span class="o">=</span> <span class="nx">my</span><span class="p">.</span><span class="nx">router</span><span class="p">.</span><span class="nx">redirectTo</span><span class="p">;</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">redirectToPath</span> <span class="o">=</span> <span class="nx">my</span><span class="p">.</span><span class="nx">router</span><span class="p">.</span><span class="nx">redirectToPath</span><span class="p">;</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">redirectToUrl</span> <span class="o">=</span> <span class="nx">my</span><span class="p">.</span><span class="nx">router</span><span class="p">.</span><span class="nx">redirectToUrl</span><span class="p">;</span> - - <span class="nx">my</span><span class="p">.</span><span class="nx">getParameters</span> <span class="o">=</span> <span class="nx">my</span><span class="p">.</span><span class="nx">router</span><span class="p">.</span><span class="nx">getParameters</span><span class="p">;</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">getParameter</span> <span class="o">=</span> <span class="nx">my</span><span class="p">.</span><span class="nx">router</span><span class="p">.</span><span class="nx">getParameter</span><span class="p">;</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">setParameters</span> <span class="o">=</span> <span class="nx">my</span><span class="p">.</span><span class="nx">router</span><span class="p">.</span><span class="nx">setParameters</span><span class="p">;</span></pre></div> </td> </tr> <tr id="section-7"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-7">¶</a> </div> <p>Render</p> </td> <td class="code"> <div class="highlight"><pre> <span class="cm">/**</span> -<span class="cm"> * Private rendering function. This is the function</span> -<span class="cm"> * internally called each time the widget is rendered, in</span> -<span class="cm"> * `appendTo`, `replace` and `update`.</span> -<span class="cm"> *</span> -<span class="cm"> */</span> - <span class="kd">function</span> <span class="nx">renderBasicOn</span><span class="p">(</span><span class="nx">html</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">withChildrenRegistration</span><span class="p">(</span><span class="kd">function</span><span class="p">()</span> <span class="p">{</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">renderOn</span><span class="p">(</span><span class="nx">html</span><span class="p">);</span> - <span class="p">});</span> - <span class="p">}</span> - - <span class="cm">/**</span> -<span class="cm"> * Main entry point for rendering. For convenience 'renderOn' will wrap the content</span> -<span class="cm"> * rendered by 'renderContentOn' in a root element (renderRootOn) that will be matched</span> -<span class="cm"> * by asJQuery.</span> -<span class="cm"> *</span> -<span class="cm"> * Usually concrete widgets override 'renderContentOn' to render it content. Widgets</span> -<span class="cm"> * can override 'renderOn' but must then make sure that it can be matched by 'asJQuery'.</span> -<span class="cm"> *</span> -<span class="cm"> * One way to do that is to make sure to have only one root element and setting the ID of</span> -<span class="cm"> * that element to the ID of the widget.</span> -<span class="cm"> *</span> -<span class="cm"> * @example</span> -<span class="cm"> *</span> -<span class="cm"> * that.renderOn = function (html) {</span> -<span class="cm"> * html.ul({id: that.getId()}</span> -<span class="cm"> * html.li('BMW'),</span> -<span class="cm"> * html.li('Toyota')</span> -<span class="cm"> * );</span> -<span class="cm"> * };</span> -<span class="cm"> *</span> -<span class="cm"> *</span> -<span class="cm"> * @param html</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">renderOn</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">html</span><span class="p">)</span> <span class="p">{</span></pre></div> </td> </tr> <tr id="section-8"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-8">¶</a> </div> <p>Renders widget by wrapping <code>renderContentOn()</code> in a root element.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">my</span><span class="p">.</span><span class="nx">renderRootOn</span><span class="p">(</span><span class="nx">html</span><span class="p">).</span><span class="nx">render</span><span class="p">(</span><span class="nx">that</span><span class="p">.</span><span class="nx">renderContentOn</span><span class="p">);</span> - <span class="p">};</span> - - <span class="nx">my</span><span class="p">.</span><span class="nx">withChildrenRegistration</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">fn</span><span class="p">)</span> <span class="p">{</span> - <span class="kd">var</span> <span class="nx">parent</span> <span class="o">=</span> <span class="nx">currentWidget</span><span class="p">.</span><span class="nx">get</span><span class="p">();</span> - <span class="k">if</span><span class="p">(</span><span class="nx">parent</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">parent</span><span class="p">.</span><span class="nx">registerChild</span><span class="p">(</span><span class="nx">that</span><span class="p">);</span> - <span class="p">}</span> - <span class="nx">withCurrentWidget</span><span class="p">(</span><span class="kd">function</span> <span class="p">()</span> <span class="p">{</span> - <span class="nx">children</span> <span class="o">=</span> <span class="p">[];</span> - <span class="nx">fn</span><span class="p">();</span> - <span class="p">},</span> <span class="nx">that</span><span class="p">);</span> - <span class="p">};</span> - - <span class="nx">that</span><span class="p">.</span><span class="nx">registerChild</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">widget</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">children</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">widget</span><span class="p">);</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Renders a wrapper element (by default a 'widgetjs-widget' tag) and</span> -<span class="cm"> * set the element ID to the ID of the widget so that it can be found by</span> -<span class="cm"> * 'asJQuery' eg. when we re-render using 'update'.</span> -<span class="cm"> *</span> -<span class="cm"> * @param html</span> -<span class="cm"> * @returns {htmlBrush}</span> -<span class="cm"> */</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">renderRootOn</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">html</span><span class="p">)</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">html</span><span class="p">.</span><span class="nx">tag</span><span class="p">(</span><span class="s1">'widgetjs-widget'</span><span class="p">).</span><span class="nx">id</span><span class="p">(</span><span class="nx">id</span><span class="p">);</span> - <span class="p">};</span> - - <span class="cm">/**</span> -<span class="cm"> * Overridden in concrete widgets to render widget to canvas/DOM.</span> -<span class="cm"> *</span> -<span class="cm"> * @example</span> -<span class="cm"> *</span> -<span class="cm"> * that.renderContentOn = function (html) {</span> -<span class="cm"> * html.ul(</span> -<span class="cm"> * html.li('BMW'),</span> -<span class="cm"> * html.li('Toyota')</span> -<span class="cm"> * );</span> -<span class="cm"> * };</span> -<span class="cm"> *</span> -<span class="cm"> * @param {htmlCanvas} html</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">renderContentOn</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">html</span><span class="p">)</span> <span class="p">{};</span> - - <span class="cm">/**</span> -<span class="cm"> * Hook evaluated before the widget is attached (or reattached due</span> -<span class="cm"> * to an update of rendering) to the DOM.</span> -<span class="cm"> */</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">willAttach</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{};</span> - - <span class="cm">/**</span> -<span class="cm"> * Hook evaluated each time the widget is attached (or</span> -<span class="cm"> * reattached due to an update of rendering) to the DOM.</span> -<span class="cm"> */</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">didAttach</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{};</span> - - <span class="cm">/**</span> -<span class="cm"> * Hook evaluated when a widget is detached from the DOM.</span> -<span class="cm"> */</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">willDetach</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{};</span> - - <span class="cm">/**</span> -<span class="cm"> * Hook evaluated before widget update.</span> -<span class="cm"> */</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">willUpdate</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{};</span> - - <span class="cm">/**</span> -<span class="cm"> * Re-renders the widget and replace it in the DOM</span> -<span class="cm"> *</span> -<span class="cm"> * Content is first re-rendered on a document fragment. Update then replace the element matched</span> -<span class="cm"> * by 'asJQuery' with the new content.</span> -<span class="cm"> *</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">update</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span> - <span class="k">if</span> <span class="p">(</span><span class="nx">my</span><span class="p">.</span><span class="nx">inUpdateTransaction</span> <span class="o">||</span> <span class="o">!</span><span class="nx">that</span><span class="p">.</span><span class="nx">isRendered</span><span class="p">())</span> <span class="p">{</span> - <span class="k">return</span><span class="p">;</span> - <span class="p">}</span> - - <span class="nx">my</span><span class="p">.</span><span class="nx">willUpdate</span><span class="p">();</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">withAttachHooks</span><span class="p">(</span><span class="kd">function</span><span class="p">()</span> <span class="p">{</span></pre></div> </td> </tr> <tr id="section-9"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-9">¶</a> </div> <p>Re-render</p> </td> <td class="code"> <div class="highlight"><pre> <span class="kd">var</span> <span class="nx">html</span> <span class="o">=</span> <span class="nx">htmlCanvas</span><span class="p">();</span> - <span class="nx">renderBasicOn</span><span class="p">(</span><span class="nx">html</span><span class="p">);</span></pre></div> </td> </tr> <tr id="section-10"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-10">¶</a> </div> <p>Replace our self</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">that</span><span class="p">.</span><span class="nx">asJQuery</span><span class="p">().</span><span class="nx">replaceWith</span><span class="p">(</span><span class="nx">html</span><span class="p">.</span><span class="nx">root</span><span class="p">.</span><span class="nx">element</span><span class="p">);</span> - <span class="p">});</span> - <span class="p">};</span> - - <span class="nx">that</span><span class="p">.</span><span class="nx">withinTransaction</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">fn</span><span class="p">,</span> <span class="nx">onDone</span><span class="p">)</span> <span class="p">{</span> - <span class="k">if</span><span class="p">(</span><span class="nx">my</span><span class="p">.</span><span class="nx">inUpdateTransaction</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">fn</span><span class="p">();</span> - <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> - <span class="k">try</span> <span class="p">{</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">inUpdateTransaction</span> <span class="o">=</span> <span class="kc">true</span><span class="p">;</span> - <span class="nx">fn</span><span class="p">();</span> - <span class="p">}</span> - <span class="k">finally</span> <span class="p">{</span> - <span class="nx">my</span><span class="p">.</span><span class="nx">inUpdateTransaction</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> - <span class="k">if</span><span class="p">(</span><span class="nx">onDone</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">onDone</span><span class="p">();</span> - <span class="p">}</span> - <span class="p">}</span> - <span class="p">}</span> - <span class="p">};</span> - - - <span class="cm">/**</span> -<span class="cm"> * Evaluate `fn`, ensuring that an update will be</span> -<span class="cm"> * performed after evaluating the function. Nested calls</span> -<span class="cm"> * to `withUpdate` or `update` will result in updating the</span> -<span class="cm"> * widget only once.</span> -<span class="cm"> */</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">withUpdate</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">fn</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">withinTransaction</span><span class="p">(</span><span class="nx">fn</span><span class="p">,</span> <span class="nx">that</span><span class="p">.</span><span class="nx">update</span><span class="p">);</span> - <span class="p">};</span> - - <span class="nx">that</span><span class="p">.</span><span class="nx">withNoUpdate</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">fn</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">that</span><span class="p">.</span><span class="nx">withinTransaction</span><span class="p">(</span><span class="nx">fn</span><span class="p">);</span> - <span class="p">};</span></pre></div> </td> </tr> <tr id="section-11"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-11">¶</a> </div> <p>Third party protected extensions** added to <code>my</code>. -See widget-extensions.js</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">for</span> <span class="p">(</span><span class="kd">var</span> <span class="nx">extProperty</span> <span class="k">in</span> <span class="nx">ext</span><span class="p">)</span> <span class="p">{</span> - <span class="k">if</span> <span class="p">(</span><span class="nx">ext</span><span class="p">.</span><span class="nx">hasOwnProperty</span><span class="p">(</span><span class="nx">extProperty</span><span class="p">))</span> <span class="p">{</span> - <span class="nx">my</span><span class="p">[</span><span class="nx">extProperty</span><span class="p">]</span> <span class="o">=</span> <span class="nx">ext</span><span class="p">[</span><span class="nx">extProperty</span><span class="p">];</span> - <span class="p">}</span> - <span class="p">}</span> - - <span class="k">return</span> <span class="nx">that</span><span class="p">;</span> - <span class="p">});</span> - - <span class="cm">/**</span> -<span class="cm"> * Creates unique ids used by widgets to identify their root div.</span> -<span class="cm"> */</span> - <span class="kd">var</span> <span class="nx">idGenerator</span> <span class="o">=</span> <span class="p">(</span><span class="kd">function</span> <span class="p">()</span> <span class="p">{</span> - <span class="kd">var</span> <span class="nx">that</span> <span class="o">=</span> <span class="p">{};</span> - <span class="kd">var</span> <span class="nx">id</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> - - <span class="nx">that</span><span class="p">.</span><span class="nx">newId</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span> - <span class="nx">id</span> <span class="o">+=</span> <span class="mi">1</span><span class="p">;</span> - <span class="k">return</span> <span class="nx">id</span><span class="p">.</span><span class="nx">toString</span><span class="p">();</span> - <span class="p">};</span> - - <span class="k">return</span> <span class="nx">that</span><span class="p">;</span> - <span class="p">})();</span> - - <span class="cm">/**</span> -<span class="cm"> * Helpers for keeping track of the currently rendered widget.</span> -<span class="cm"> */</span> - <span class="kd">var</span> <span class="nx">currentWidget</span> <span class="o">=</span> <span class="p">(</span><span class="kd">function</span> <span class="p">()</span> <span class="p">{</span> - <span class="kd">var</span> <span class="nx">current</span><span class="p">;</span> - <span class="k">return</span> <span class="p">{</span> - <span class="nx">get</span><span class="o">:</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span> - <span class="k">return</span> <span class="nx">current</span><span class="p">;</span> - <span class="p">},</span> - <span class="nx">set</span><span class="o">:</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">widget</span><span class="p">)</span> <span class="p">{</span> - <span class="nx">current</span> <span class="o">=</span> <span class="nx">widget</span><span class="p">;</span> - <span class="p">}</span> - <span class="p">};</span> - <span class="p">})();</span> - - <span class="cm">/**</span> -<span class="cm"> * Return true if the parent widget is rendering the receiver.</span> -<span class="cm"> */</span> - <span class="kd">function</span> <span class="nx">inRenderingLoop</span><span class="p">()</span> <span class="p">{</span> - <span class="k">return</span> <span class="o">!!</span><span class="nx">currentWidget</span><span class="p">.</span><span class="nx">get</span><span class="p">();</span> - <span class="p">}</span> - - <span class="cm">/**</span> -<span class="cm"> * Set `widget` as the current widget while evaluating `fn`.</span> -<span class="cm"> */</span> - <span class="kd">function</span> <span class="nx">withCurrentWidget</span><span class="p">(</span><span class="nx">fn</span><span class="p">,</span> <span class="nx">widget</span><span class="p">)</span> <span class="p">{</span> - <span class="kd">var</span> <span class="nx">current</span> <span class="o">=</span> <span class="nx">currentWidget</span><span class="p">.</span><span class="nx">get</span><span class="p">();</span> - <span class="k">try</span> <span class="p">{</span> - <span class="nx">currentWidget</span><span class="p">.</span><span class="nx">set</span><span class="p">(</span><span class="nx">widget</span><span class="p">);</span> - <span class="nx">fn</span><span class="p">();</span> - <span class="p">}</span> <span class="k">finally</span> <span class="p">{</span> - <span class="nx">currentWidget</span><span class="p">.</span><span class="nx">set</span><span class="p">(</span><span class="nx">current</span><span class="p">);</span> - <span class="p">}</span> - <span class="p">}</span> - - <span class="k">return</span> <span class="nx">widget</span><span class="p">;</span> - <span class="p">}</span> -<span class="p">);</span> - -</pre></div> </td> </tr> </tbody> </table> </div> </body> </html> \ No newline at end of file