|
85 | 85 | <span class="p">}</span>
|
86 | 86 | <span class="k">return</span> <span class="nx">findNode</span><span class="p">(</span><span class="nx">current</span><span class="p">,</span> <span class="nx">_</span><span class="p">.</span><span class="nx">rest</span><span class="p">(</span><span class="nx">parts</span><span class="p">),</span> <span class="nx">callback</span><span class="p">);</span>
|
87 | 87 | <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> <h2>Setup Document Behavior</h2> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-22"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-22">¶</a> </div> <p>Activation and display behavior happens at document ready time.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">$</span><span class="p">(</span><span class="nb">document</span><span class="p">).</span><span class="nx">ready</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-23"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-23">¶</a> </div> <p>The default name for the div the shell uses as its container is <code>shell-panel</code>, although that can be changed via
|
88 |
| -the shell config parameter <code>shell-view-id</code>. The <code>Shell</code> display model relies on a div to contain a 'view'. The |
89 |
| -acts as the view-port, i.e. the visible portion of the shell content, while the view is appended to and |
90 |
| -scrolled up as new content is added.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="kd">var</span> <span class="nx">$consolePanel</span> <span class="o">=</span> <span class="nx">$</span><span class="p">(</span><span class="s1">'#shell-panel'</span><span class="p">);</span></pre></div> </td> </tr> <tr id="section-24"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-24">¶</a> </div> <p>We use <strong>jquery-ui</strong>'s <code>resizable</code> to let us drag the bottom edge of the console up and down.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">$consolePanel</span><span class="p">.</span><span class="nx">resizable</span><span class="p">({</span> <span class="nx">handles</span><span class="o">:</span> <span class="s2">"s"</span><span class="p">});</span></pre></div> </td> </tr> <tr id="section-25"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-25">¶</a> </div> <p>Wire up a the keypress handler. This will be used only for shell activation.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">$</span><span class="p">(</span><span class="nb">document</span><span class="p">).</span><span class="nx">keypress</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></pre></div> </td> </tr> <tr id="section-26"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-26">¶</a> </div> <p>If the shell is already active drop out of the keyhandler, since all keyhandling happens in <code>Readline</code>.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">if</span><span class="p">(</span><span class="nx">shell</span><span class="p">.</span><span class="nx">isActive</span><span class="p">())</span> <span class="p">{</span> |
91 |
| - <span class="k">return</span><span class="p">;</span> |
92 |
| - <span class="p">}</span></pre></div> </td> </tr> <tr id="section-27"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-27">¶</a> </div> <p>Mimicking <em>Quake</em>-style dropdown consoles, we activate and show on <code>~</code>.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">_console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s2">"activating shell"</span><span class="p">);</span> |
93 |
| - <span class="k">if</span><span class="p">(</span><span class="nx">event</span><span class="p">.</span><span class="nx">keyCode</span> <span class="o">==</span> <span class="mi">126</span><span class="p">)</span> <span class="p">{</span> |
94 |
| - <span class="nx">event</span><span class="p">.</span><span class="nx">preventDefault</span><span class="p">();</span> |
95 |
| - <span class="nx">shell</span><span class="p">.</span><span class="nx">activate</span><span class="p">();</span> |
96 |
| - <span class="nx">$consolePanel</span><span class="p">.</span><span class="nx">slideDown</span><span class="p">();</span> |
97 |
| - <span class="nx">$consolePanel</span><span class="p">.</span><span class="nx">focus</span><span class="p">();</span> |
98 |
| - <span class="p">}</span> |
99 |
| - <span class="p">});</span></pre></div> </td> </tr> <tr id="section-28"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-28">¶</a> </div> <p>Whenever we get either a <code>EOT</code> (<code>Ctrl-D</code> on empty line) or a <code>Cancel</code> (<code>Ctrl-C</code>) signal from the shell, |
100 |
| -we deactivate the shell and hide the console.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="kd">function</span> <span class="nx">hideAndDeactivate</span><span class="p">()</span> <span class="p">{</span> |
101 |
| - <span class="nx">_console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s2">"deactivating shell"</span><span class="p">);</span> |
102 |
| - <span class="nx">shell</span><span class="p">.</span><span class="nx">deactivate</span><span class="p">();</span> |
103 |
| - <span class="nx">$consolePanel</span><span class="p">.</span><span class="nx">slideUp</span><span class="p">();</span> |
104 |
| - <span class="nx">$consolePanel</span><span class="p">.</span><span class="nx">blur</span><span class="p">();</span> |
105 |
| - <span class="p">}</span></pre></div> </td> </tr> <tr id="section-29"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-29">¶</a> </div> <p>Attach our hide function to the EOT and Cancel events.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">shell</span><span class="p">.</span><span class="nx">onEOT</span><span class="p">(</span><span class="nx">hideAndDeactivate</span><span class="p">);</span> |
106 |
| - <span class="nx">shell</span><span class="p">.</span><span class="nx">onCancel</span><span class="p">(</span><span class="nx">hideAndDeactivate</span><span class="p">);</span> |
107 |
| - <span class="p">});</span></pre></div> </td> </tr> <tr id="section-30"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-30">¶</a> </div> <p>We attach the various objects we've created here to <code>Josh.Instance</code> purely so they can be inspected via a |
| 88 | +the shell config parameter <code>shell-panel-id</code>. The <code>Shell</code> display model relies on a 'panel' to contain a 'view'. |
| 89 | +The 'panel' acts as the view-port, i.e. the visible portion of the shell content, while the 'view' is appended |
| 90 | +to and scrolled up as new content is added.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="kd">var</span> <span class="nx">$consolePanel</span> <span class="o">=</span> <span class="nx">$</span><span class="p">(</span><span class="s1">'#shell-panel'</span><span class="p">);</span></pre></div> </td> </tr> <tr id="section-24"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-24">¶</a> </div> <p>We use <strong>jquery-ui</strong>'s <code>resizable</code> to let us drag the bottom edge of the console up and down.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">$consolePanel</span><span class="p">.</span><span class="nx">resizable</span><span class="p">({</span> <span class="nx">handles</span><span class="o">:</span> <span class="s2">"s"</span><span class="p">});</span></pre></div> </td> </tr> <tr id="section-25"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-25">¶</a> </div> <p>activate the shell</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">shell</span><span class="p">.</span><span class="nx">activate</span><span class="p">();</span> |
| 91 | + <span class="p">});</span></pre></div> </td> </tr> <tr id="section-26"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-26">¶</a> </div> <p>We attach the various objects we've created here to <code>Josh.Instance</code> purely so they can be inspected via a |
108 | 92 | javascript console. This is not required for the functionality of the example.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">Josh</span><span class="p">.</span><span class="nx">Instance</span> <span class="o">=</span> <span class="p">{</span>
|
109 | 93 | <span class="nx">Tree</span><span class="o">:</span> <span class="nx">treeroot</span><span class="p">,</span>
|
110 | 94 | <span class="nx">Shell</span><span class="o">:</span> <span class="nx">shell</span><span class="p">,</span>
|
111 | 95 | <span class="nx">PathHandler</span><span class="o">:</span> <span class="nx">pathhandler</span><span class="p">,</span>
|
112 | 96 | <span class="nx">KillRing</span><span class="o">:</span> <span class="nx">killring</span>
|
113 |
| - <span class="p">};</span></pre></div> </td> </tr> <tr id="section-31"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-31">¶</a> </div> <p>This code builds our <em>fake</em> directory structure. Since most real applications of <code>Josh</code> would not keep their |
| 97 | + <span class="p">};</span></pre></div> </td> </tr> <tr id="section-27"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-27">¶</a> </div> <p>This code builds our <em>fake</em> directory structure. Since most real applications of <code>Josh</code> would not keep their |
114 | 98 | entire hierarchy in memory, but instead make callbacks to a server to find nodes and node children, the details
|
115 | 99 | of this function are of little interest.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="kd">function</span> <span class="nx">buildTree</span><span class="p">()</span> <span class="p">{</span>
|
116 | 100 | <span class="kd">var</span> <span class="nx">fs</span> <span class="o">=</span> <span class="p">{</span>
|
|
0 commit comments