stackup 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/Gemfile.lock +12 -12
 - data/README.md +38 -15
 - data/bin/stackup +76 -34
 - data/doc/Stackup/ErrorMappingProxy.html +378 -0
 - data/doc/Stackup/InvalidStateError.html +142 -0
 - data/doc/Stackup/NoSuchStack.html +142 -0
 - data/doc/Stackup/NoUpdateRequired.html +134 -0
 - data/doc/Stackup/Service.html +399 -0
 - data/doc/Stackup/ServiceError.html +138 -0
 - data/doc/Stackup/Stack.html +1269 -0
 - data/doc/Stackup/StackUpdateError.html +142 -0
 - data/doc/Stackup/StackWatcher.html +455 -0
 - data/doc/Stackup.html +202 -0
 - data/doc/_index.html +199 -0
 - data/doc/class_list.html +58 -0
 - data/doc/css/common.css +1 -0
 - data/doc/css/full_list.css +57 -0
 - data/doc/css/style.css +339 -0
 - data/doc/file.README.html +143 -0
 - data/doc/file_list.html +60 -0
 - data/doc/frames.html +26 -0
 - data/doc/index.html +143 -0
 - data/doc/js/app.js +219 -0
 - data/doc/js/full_list.js +181 -0
 - data/doc/js/jquery.js +4 -0
 - data/doc/method_list.html +195 -0
 - data/doc/top-level-namespace.html +194 -0
 - data/lib/stackup/error_mapping_proxy.rb +37 -0
 - data/lib/stackup/errors.rb +9 -6
 - data/lib/stackup/service.rb +39 -0
 - data/lib/stackup/stack.rb +52 -59
 - data/lib/stackup/stack_watcher.rb +16 -10
 - data/lib/stackup.rb +26 -0
 - data/spec/spec_helper.rb +15 -1
 - data/spec/stackup/stack_spec.rb +114 -48
 - data/spec/stackup/stack_watcher_spec.rb +20 -15
 - data/stackup.gemspec +1 -1
 - data/woollyams/template.json +44 -0
 - metadata +29 -6
 - data/pkg/stackup-0.0.1.gem +0 -0
 - data/pkg/stackup-0.0.8.gem +0 -0
 - data/pkg/stackup-0.0.9.gem +0 -0
 - data/woollyams/sample-template.json +0 -79
 
    
        data/doc/index.html
    ADDED
    
    | 
         @@ -0,0 +1,143 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
         
     | 
| 
      
 2 
     | 
    
         
            +
              "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
         
     | 
| 
      
 3 
     | 
    
         
            +
            <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
         
     | 
| 
      
 4 
     | 
    
         
            +
              <head>
         
     | 
| 
      
 5 
     | 
    
         
            +
                <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
         
     | 
| 
      
 6 
     | 
    
         
            +
            <title>
         
     | 
| 
      
 7 
     | 
    
         
            +
              File: README
         
     | 
| 
      
 8 
     | 
    
         
            +
              
         
     | 
| 
      
 9 
     | 
    
         
            +
                — Documentation by YARD 0.8.7.6
         
     | 
| 
      
 10 
     | 
    
         
            +
              
         
     | 
| 
      
 11 
     | 
    
         
            +
            </title>
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              <link rel="stylesheet" href="css/style.css" type="text/css" charset="utf-8" />
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
              <link rel="stylesheet" href="css/common.css" type="text/css" charset="utf-8" />
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            <script type="text/javascript" charset="utf-8">
         
     | 
| 
      
 18 
     | 
    
         
            +
              hasFrames = window.top.frames.main ? true : false;
         
     | 
| 
      
 19 
     | 
    
         
            +
              relpath = '';
         
     | 
| 
      
 20 
     | 
    
         
            +
              framesUrl = "frames.html#!file.README.html";
         
     | 
| 
      
 21 
     | 
    
         
            +
            </script>
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
              <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
              <script type="text/javascript" charset="utf-8" src="js/app.js"></script>
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
              </head>
         
     | 
| 
      
 30 
     | 
    
         
            +
              <body>
         
     | 
| 
      
 31 
     | 
    
         
            +
                <div id="header">
         
     | 
| 
      
 32 
     | 
    
         
            +
                  <div id="menu">
         
     | 
| 
      
 33 
     | 
    
         
            +
              
         
     | 
| 
      
 34 
     | 
    
         
            +
                <a href="_index.html">Index</a> » 
         
     | 
| 
      
 35 
     | 
    
         
            +
                <span class="title">File: README</span>
         
     | 
| 
      
 36 
     | 
    
         
            +
              
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
              <div class="noframes"><span class="title">(</span><a href="." target="_top">no frames</a><span class="title">)</span></div>
         
     | 
| 
      
 39 
     | 
    
         
            +
            </div>
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
                  <div id="search">
         
     | 
| 
      
 42 
     | 
    
         
            +
              
         
     | 
| 
      
 43 
     | 
    
         
            +
                <a class="full_list_link" id="class_list_link"
         
     | 
| 
      
 44 
     | 
    
         
            +
                    href="class_list.html">
         
     | 
| 
      
 45 
     | 
    
         
            +
                  Class List
         
     | 
| 
      
 46 
     | 
    
         
            +
                </a>
         
     | 
| 
      
 47 
     | 
    
         
            +
              
         
     | 
| 
      
 48 
     | 
    
         
            +
                <a class="full_list_link" id="method_list_link"
         
     | 
| 
      
 49 
     | 
    
         
            +
                    href="method_list.html">
         
     | 
| 
      
 50 
     | 
    
         
            +
                  Method List
         
     | 
| 
      
 51 
     | 
    
         
            +
                </a>
         
     | 
| 
      
 52 
     | 
    
         
            +
              
         
     | 
| 
      
 53 
     | 
    
         
            +
                <a class="full_list_link" id="file_list_link"
         
     | 
| 
      
 54 
     | 
    
         
            +
                    href="file_list.html">
         
     | 
| 
      
 55 
     | 
    
         
            +
                  File List
         
     | 
| 
      
 56 
     | 
    
         
            +
                </a>
         
     | 
| 
      
 57 
     | 
    
         
            +
              
         
     | 
| 
      
 58 
     | 
    
         
            +
            </div>
         
     | 
| 
      
 59 
     | 
    
         
            +
                  <div class="clear"></div>
         
     | 
| 
      
 60 
     | 
    
         
            +
                </div>
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
                <iframe id="search_frame"></iframe>
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
                <div id="content"><div id='filecontents'>
         
     | 
| 
      
 65 
     | 
    
         
            +
            <h1 id="label-stackup">stackup</h1>
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
            <p><a href="https://travis-ci.org/realestate-com-au/stackup"><img
         
     | 
| 
      
 68 
     | 
    
         
            +
            src="https://travis-ci.org/realestate-com-au/stackup.svg?branch=master"></a></p>
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
            <p>Stackup attempts to simplify AWS Cloudformation stack creation process in
         
     | 
| 
      
 71 
     | 
    
         
            +
            ruby projects by providing executable to perform common operations such as
         
     | 
| 
      
 72 
     | 
    
         
            +
            apply(create/update), delete, recreate on stack along with validations on
         
     | 
| 
      
 73 
     | 
    
         
            +
            templates. Operations which enforce a stack change will wait until the
         
     | 
| 
      
 74 
     | 
    
         
            +
            change is complete.</p>
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
      
 76 
     | 
    
         
            +
            <h2 id="label-Installation">Installation</h2>
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
            <pre class="code ruby"><code class="ruby">$ gem install stackup</code></pre>
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
            <h2 id="label-Command-line+usage">Command-line usage</h2>
         
     | 
| 
      
 81 
     | 
    
         
            +
             
     | 
| 
      
 82 
     | 
    
         
            +
            <p>The entry-point is the “stackup” command.</p>
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
      
 84 
     | 
    
         
            +
            <p>Most commands operate in the context of a named stack:</p>
         
     | 
| 
      
 85 
     | 
    
         
            +
             
     | 
| 
      
 86 
     | 
    
         
            +
            <pre class="code ruby"><code class="ruby">$ stackup STACK-NAME ...</code></pre>
         
     | 
| 
      
 87 
     | 
    
         
            +
             
     | 
| 
      
 88 
     | 
    
         
            +
            <p>Called without stack-name, it will list stacks:</p>
         
     | 
| 
      
 89 
     | 
    
         
            +
             
     | 
| 
      
 90 
     | 
    
         
            +
            <pre class="code ruby"><code class="ruby">$ stackup
         
     | 
| 
      
 91 
     | 
    
         
            +
            foo-bar-test
         
     | 
| 
      
 92 
     | 
    
         
            +
            zzz-production</code></pre>
         
     | 
| 
      
 93 
     | 
    
         
            +
             
     | 
| 
      
 94 
     | 
    
         
            +
            <h3 id="label-Stack+create-2Fupdate">Stack create/update</h3>
         
     | 
| 
      
 95 
     | 
    
         
            +
             
     | 
| 
      
 96 
     | 
    
         
            +
            <p>Use sub-command “up” to create or update a stack, as appropriate:</p>
         
     | 
| 
      
 97 
     | 
    
         
            +
             
     | 
| 
      
 98 
     | 
    
         
            +
            <pre class="code ruby"><code class="ruby">$ stackup myapp-test up template.json</code></pre>
         
     | 
| 
      
 99 
     | 
    
         
            +
             
     | 
| 
      
 100 
     | 
    
         
            +
            <p>This will:</p>
         
     | 
| 
      
 101 
     | 
    
         
            +
            <ul><li>
         
     | 
| 
      
 102 
     | 
    
         
            +
            <p>update (or create) the named CloudFormation stack, using the specified
         
     | 
| 
      
 103 
     | 
    
         
            +
            template</p>
         
     | 
| 
      
 104 
     | 
    
         
            +
            </li><li>
         
     | 
| 
      
 105 
     | 
    
         
            +
            <p>monitor events until the stack update is complete</p>
         
     | 
| 
      
 106 
     | 
    
         
            +
            </li></ul>
         
     | 
| 
      
 107 
     | 
    
         
            +
             
     | 
| 
      
 108 
     | 
    
         
            +
            <h3 id="label-Stack+deletion">Stack deletion</h3>
         
     | 
| 
      
 109 
     | 
    
         
            +
             
     | 
| 
      
 110 
     | 
    
         
            +
            <p>Sub-command “delete” deletes the stack.</p>
         
     | 
| 
      
 111 
     | 
    
         
            +
             
     | 
| 
      
 112 
     | 
    
         
            +
            <h3 id="label-Stack+inspection">Stack inspection</h3>
         
     | 
| 
      
 113 
     | 
    
         
            +
             
     | 
| 
      
 114 
     | 
    
         
            +
            <p>Inspect details of a stack with:</p>
         
     | 
| 
      
 115 
     | 
    
         
            +
             
     | 
| 
      
 116 
     | 
    
         
            +
            <pre class="code ruby"><code class="ruby">$ stackup myapp-test status
         
     | 
| 
      
 117 
     | 
    
         
            +
            $ stackup myapp-test resources
         
     | 
| 
      
 118 
     | 
    
         
            +
            $ stackup myapp-test outputs</code></pre>
         
     | 
| 
      
 119 
     | 
    
         
            +
             
     | 
| 
      
 120 
     | 
    
         
            +
            <h2 id="label-Programmatic+usage">Programmatic usage</h2>
         
     | 
| 
      
 121 
     | 
    
         
            +
             
     | 
| 
      
 122 
     | 
    
         
            +
            <p>Get a handle to a <code>Stack</code> object as follows:</p>
         
     | 
| 
      
 123 
     | 
    
         
            +
             
     | 
| 
      
 124 
     | 
    
         
            +
            <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_stack'>stack</span> <span class='op'>=</span> <span class='const'>Stackup</span><span class='period'>.</span><span class='id identifier rubyid_stack'>stack</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>my-stack</span><span class='tstring_end'>"</span></span><span class='rparen'>)</span>
         
     | 
| 
      
 125 
     | 
    
         
            +
            </code></pre>
         
     | 
| 
      
 126 
     | 
    
         
            +
             
     | 
| 
      
 127 
     | 
    
         
            +
            <p>You can pass an <code>Aws::CloudFormation::Client</code>, or client config,
         
     | 
| 
      
 128 
     | 
    
         
            +
            to <code>Stackup</code>, e.g.</p>
         
     | 
| 
      
 129 
     | 
    
         
            +
             
     | 
| 
      
 130 
     | 
    
         
            +
            <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_stack'>stack</span> <span class='op'>=</span> <span class='const'>Stackup</span><span class='lparen'>(</span><span class='id identifier rubyid_credentials'>credentials</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_stack'>stack</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>my-stack</span><span class='tstring_end'>"</span></span><span class='rparen'>)</span>
         
     | 
| 
      
 131 
     | 
    
         
            +
            </code></pre>
         
     | 
| 
      
 132 
     | 
    
         
            +
             
     | 
| 
      
 133 
     | 
    
         
            +
            <p>See <span class='object_link'><a href="Stackup/Stack.html" title="Stackup::Stack (class)">Stackup::Stack</a></span> for more details.</p>
         
     | 
| 
      
 134 
     | 
    
         
            +
            </div></div>
         
     | 
| 
      
 135 
     | 
    
         
            +
             
     | 
| 
      
 136 
     | 
    
         
            +
                <div id="footer">
         
     | 
| 
      
 137 
     | 
    
         
            +
              Generated on Fri Oct  9 11:23:11 2015 by
         
     | 
| 
      
 138 
     | 
    
         
            +
              <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
         
     | 
| 
      
 139 
     | 
    
         
            +
              0.8.7.6 (ruby-2.2.2).
         
     | 
| 
      
 140 
     | 
    
         
            +
            </div>
         
     | 
| 
      
 141 
     | 
    
         
            +
             
     | 
| 
      
 142 
     | 
    
         
            +
              </body>
         
     | 
| 
      
 143 
     | 
    
         
            +
            </html>
         
     | 
    
        data/doc/js/app.js
    ADDED
    
    | 
         @@ -0,0 +1,219 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            function createSourceLinks() {
         
     | 
| 
      
 2 
     | 
    
         
            +
                $('.method_details_list .source_code').
         
     | 
| 
      
 3 
     | 
    
         
            +
                    before("<span class='showSource'>[<a href='#' class='toggleSource'>View source</a>]</span>");
         
     | 
| 
      
 4 
     | 
    
         
            +
                $('.toggleSource').toggle(function() {
         
     | 
| 
      
 5 
     | 
    
         
            +
                   $(this).parent().nextAll('.source_code').slideDown(100);
         
     | 
| 
      
 6 
     | 
    
         
            +
                   $(this).text("Hide source");
         
     | 
| 
      
 7 
     | 
    
         
            +
                },
         
     | 
| 
      
 8 
     | 
    
         
            +
                function() {
         
     | 
| 
      
 9 
     | 
    
         
            +
                    $(this).parent().nextAll('.source_code').slideUp(100);
         
     | 
| 
      
 10 
     | 
    
         
            +
                    $(this).text("View source");
         
     | 
| 
      
 11 
     | 
    
         
            +
                });
         
     | 
| 
      
 12 
     | 
    
         
            +
            }
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            function createDefineLinks() {
         
     | 
| 
      
 15 
     | 
    
         
            +
                var tHeight = 0;
         
     | 
| 
      
 16 
     | 
    
         
            +
                $('.defines').after(" <a href='#' class='toggleDefines'>more...</a>");
         
     | 
| 
      
 17 
     | 
    
         
            +
                $('.toggleDefines').toggle(function() {
         
     | 
| 
      
 18 
     | 
    
         
            +
                    tHeight = $(this).parent().prev().height();
         
     | 
| 
      
 19 
     | 
    
         
            +
                    $(this).prev().show();
         
     | 
| 
      
 20 
     | 
    
         
            +
                    $(this).parent().prev().height($(this).parent().height());
         
     | 
| 
      
 21 
     | 
    
         
            +
                    $(this).text("(less)");
         
     | 
| 
      
 22 
     | 
    
         
            +
                },
         
     | 
| 
      
 23 
     | 
    
         
            +
                function() {
         
     | 
| 
      
 24 
     | 
    
         
            +
                    $(this).prev().hide();
         
     | 
| 
      
 25 
     | 
    
         
            +
                    $(this).parent().prev().height(tHeight);
         
     | 
| 
      
 26 
     | 
    
         
            +
                    $(this).text("more...");
         
     | 
| 
      
 27 
     | 
    
         
            +
                });
         
     | 
| 
      
 28 
     | 
    
         
            +
            }
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
            function createFullTreeLinks() {
         
     | 
| 
      
 31 
     | 
    
         
            +
                var tHeight = 0;
         
     | 
| 
      
 32 
     | 
    
         
            +
                $('.inheritanceTree').toggle(function() {
         
     | 
| 
      
 33 
     | 
    
         
            +
                    tHeight = $(this).parent().prev().height();
         
     | 
| 
      
 34 
     | 
    
         
            +
                    $(this).parent().toggleClass('showAll');
         
     | 
| 
      
 35 
     | 
    
         
            +
                    $(this).text("(hide)");
         
     | 
| 
      
 36 
     | 
    
         
            +
                    $(this).parent().prev().height($(this).parent().height());
         
     | 
| 
      
 37 
     | 
    
         
            +
                },
         
     | 
| 
      
 38 
     | 
    
         
            +
                function() {
         
     | 
| 
      
 39 
     | 
    
         
            +
                    $(this).parent().toggleClass('showAll');
         
     | 
| 
      
 40 
     | 
    
         
            +
                    $(this).parent().prev().height(tHeight);
         
     | 
| 
      
 41 
     | 
    
         
            +
                    $(this).text("show all");
         
     | 
| 
      
 42 
     | 
    
         
            +
                });
         
     | 
| 
      
 43 
     | 
    
         
            +
            }
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
            function fixBoxInfoHeights() {
         
     | 
| 
      
 46 
     | 
    
         
            +
                $('dl.box dd.r1, dl.box dd.r2').each(function() {
         
     | 
| 
      
 47 
     | 
    
         
            +
                   $(this).prev().height($(this).height());
         
     | 
| 
      
 48 
     | 
    
         
            +
                });
         
     | 
| 
      
 49 
     | 
    
         
            +
            }
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
            function searchFrameLinks() {
         
     | 
| 
      
 52 
     | 
    
         
            +
              $('.full_list_link').click(function() {
         
     | 
| 
      
 53 
     | 
    
         
            +
                toggleSearchFrame(this, $(this).attr('href'));
         
     | 
| 
      
 54 
     | 
    
         
            +
                return false;
         
     | 
| 
      
 55 
     | 
    
         
            +
              });
         
     | 
| 
      
 56 
     | 
    
         
            +
            }
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
            function toggleSearchFrame(id, link) {
         
     | 
| 
      
 59 
     | 
    
         
            +
              var frame = $('#search_frame');
         
     | 
| 
      
 60 
     | 
    
         
            +
              $('#search a').removeClass('active').addClass('inactive');
         
     | 
| 
      
 61 
     | 
    
         
            +
              if (frame.attr('src') == link && frame.css('display') != "none") {
         
     | 
| 
      
 62 
     | 
    
         
            +
                frame.slideUp(100);
         
     | 
| 
      
 63 
     | 
    
         
            +
                $('#search a').removeClass('active inactive');
         
     | 
| 
      
 64 
     | 
    
         
            +
              }
         
     | 
| 
      
 65 
     | 
    
         
            +
              else {
         
     | 
| 
      
 66 
     | 
    
         
            +
                $(id).addClass('active').removeClass('inactive');
         
     | 
| 
      
 67 
     | 
    
         
            +
                frame.attr('src', link).slideDown(100);
         
     | 
| 
      
 68 
     | 
    
         
            +
              }
         
     | 
| 
      
 69 
     | 
    
         
            +
            }
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
            function linkSummaries() {
         
     | 
| 
      
 72 
     | 
    
         
            +
              $('.summary_signature').click(function() {
         
     | 
| 
      
 73 
     | 
    
         
            +
                document.location = $(this).find('a').attr('href');
         
     | 
| 
      
 74 
     | 
    
         
            +
              });
         
     | 
| 
      
 75 
     | 
    
         
            +
            }
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
            function framesInit() {
         
     | 
| 
      
 78 
     | 
    
         
            +
              if (hasFrames) {
         
     | 
| 
      
 79 
     | 
    
         
            +
                document.body.className = 'frames';
         
     | 
| 
      
 80 
     | 
    
         
            +
                $('#menu .noframes a').attr('href', document.location);
         
     | 
| 
      
 81 
     | 
    
         
            +
                try {
         
     | 
| 
      
 82 
     | 
    
         
            +
                  window.top.document.title = $('html head title').text();
         
     | 
| 
      
 83 
     | 
    
         
            +
                } catch(error) {
         
     | 
| 
      
 84 
     | 
    
         
            +
                  // some browsers will not allow this when serving from file://
         
     | 
| 
      
 85 
     | 
    
         
            +
                  // but we don't want to stop the world.
         
     | 
| 
      
 86 
     | 
    
         
            +
                }
         
     | 
| 
      
 87 
     | 
    
         
            +
              }
         
     | 
| 
      
 88 
     | 
    
         
            +
              else {
         
     | 
| 
      
 89 
     | 
    
         
            +
                $('#menu .noframes a').text('frames').attr('href', framesUrl);
         
     | 
| 
      
 90 
     | 
    
         
            +
              }
         
     | 
| 
      
 91 
     | 
    
         
            +
            }
         
     | 
| 
      
 92 
     | 
    
         
            +
             
     | 
| 
      
 93 
     | 
    
         
            +
            function keyboardShortcuts() {
         
     | 
| 
      
 94 
     | 
    
         
            +
              if (window.top.frames.main) return;
         
     | 
| 
      
 95 
     | 
    
         
            +
              $(document).keypress(function(evt) {
         
     | 
| 
      
 96 
     | 
    
         
            +
                if (evt.altKey || evt.ctrlKey || evt.metaKey || evt.shiftKey) return;
         
     | 
| 
      
 97 
     | 
    
         
            +
                if (typeof evt.target !== "undefined" &&
         
     | 
| 
      
 98 
     | 
    
         
            +
                    (evt.target.nodeName == "INPUT" ||
         
     | 
| 
      
 99 
     | 
    
         
            +
                    evt.target.nodeName == "TEXTAREA")) return;
         
     | 
| 
      
 100 
     | 
    
         
            +
                switch (evt.charCode) {
         
     | 
| 
      
 101 
     | 
    
         
            +
                  case 67: case 99:  $('#class_list_link').click(); break;  // 'c'
         
     | 
| 
      
 102 
     | 
    
         
            +
                  case 77: case 109: $('#method_list_link').click(); break; // 'm'
         
     | 
| 
      
 103 
     | 
    
         
            +
                  case 70: case 102: $('#file_list_link').click(); break;   // 'f'
         
     | 
| 
      
 104 
     | 
    
         
            +
                  default: break;
         
     | 
| 
      
 105 
     | 
    
         
            +
                }
         
     | 
| 
      
 106 
     | 
    
         
            +
              });
         
     | 
| 
      
 107 
     | 
    
         
            +
            }
         
     | 
| 
      
 108 
     | 
    
         
            +
             
     | 
| 
      
 109 
     | 
    
         
            +
            function summaryToggle() {
         
     | 
| 
      
 110 
     | 
    
         
            +
              $('.summary_toggle').click(function() {
         
     | 
| 
      
 111 
     | 
    
         
            +
                if (localStorage) {
         
     | 
| 
      
 112 
     | 
    
         
            +
                  localStorage.summaryCollapsed = $(this).text();
         
     | 
| 
      
 113 
     | 
    
         
            +
                }
         
     | 
| 
      
 114 
     | 
    
         
            +
                $('.summary_toggle').each(function() {
         
     | 
| 
      
 115 
     | 
    
         
            +
                  $(this).text($(this).text() == "collapse" ? "expand" : "collapse");
         
     | 
| 
      
 116 
     | 
    
         
            +
                  var next = $(this).parent().parent().nextAll('ul.summary').first();
         
     | 
| 
      
 117 
     | 
    
         
            +
                  if (next.hasClass('compact')) {
         
     | 
| 
      
 118 
     | 
    
         
            +
                    next.toggle();
         
     | 
| 
      
 119 
     | 
    
         
            +
                    next.nextAll('ul.summary').first().toggle();
         
     | 
| 
      
 120 
     | 
    
         
            +
                  }
         
     | 
| 
      
 121 
     | 
    
         
            +
                  else if (next.hasClass('summary')) {
         
     | 
| 
      
 122 
     | 
    
         
            +
                    var list = $('<ul class="summary compact" />');
         
     | 
| 
      
 123 
     | 
    
         
            +
                    list.html(next.html());
         
     | 
| 
      
 124 
     | 
    
         
            +
                    list.find('.summary_desc, .note').remove();
         
     | 
| 
      
 125 
     | 
    
         
            +
                    list.find('a').each(function() {
         
     | 
| 
      
 126 
     | 
    
         
            +
                      $(this).html($(this).find('strong').html());
         
     | 
| 
      
 127 
     | 
    
         
            +
                      $(this).parent().html($(this)[0].outerHTML);
         
     | 
| 
      
 128 
     | 
    
         
            +
                    });
         
     | 
| 
      
 129 
     | 
    
         
            +
                    next.before(list);
         
     | 
| 
      
 130 
     | 
    
         
            +
                    next.toggle();
         
     | 
| 
      
 131 
     | 
    
         
            +
                  }
         
     | 
| 
      
 132 
     | 
    
         
            +
                });
         
     | 
| 
      
 133 
     | 
    
         
            +
                return false;
         
     | 
| 
      
 134 
     | 
    
         
            +
              });
         
     | 
| 
      
 135 
     | 
    
         
            +
              if (localStorage) {
         
     | 
| 
      
 136 
     | 
    
         
            +
                if (localStorage.summaryCollapsed == "collapse") {
         
     | 
| 
      
 137 
     | 
    
         
            +
                  $('.summary_toggle').first().click();
         
     | 
| 
      
 138 
     | 
    
         
            +
                }
         
     | 
| 
      
 139 
     | 
    
         
            +
                else localStorage.summaryCollapsed = "expand";
         
     | 
| 
      
 140 
     | 
    
         
            +
              }
         
     | 
| 
      
 141 
     | 
    
         
            +
            }
         
     | 
| 
      
 142 
     | 
    
         
            +
             
     | 
| 
      
 143 
     | 
    
         
            +
            function fixOutsideWorldLinks() {
         
     | 
| 
      
 144 
     | 
    
         
            +
              $('a').each(function() {
         
     | 
| 
      
 145 
     | 
    
         
            +
                if (window.location.host != this.host) this.target = '_parent';
         
     | 
| 
      
 146 
     | 
    
         
            +
              });
         
     | 
| 
      
 147 
     | 
    
         
            +
            }
         
     | 
| 
      
 148 
     | 
    
         
            +
             
     | 
| 
      
 149 
     | 
    
         
            +
            function generateTOC() {
         
     | 
| 
      
 150 
     | 
    
         
            +
              if ($('#filecontents').length === 0) return;
         
     | 
| 
      
 151 
     | 
    
         
            +
              var _toc = $('<ol class="top"></ol>');
         
     | 
| 
      
 152 
     | 
    
         
            +
              var show = false;
         
     | 
| 
      
 153 
     | 
    
         
            +
              var toc = _toc;
         
     | 
| 
      
 154 
     | 
    
         
            +
              var counter = 0;
         
     | 
| 
      
 155 
     | 
    
         
            +
              var tags = ['h2', 'h3', 'h4', 'h5', 'h6'];
         
     | 
| 
      
 156 
     | 
    
         
            +
              var i;
         
     | 
| 
      
 157 
     | 
    
         
            +
              if ($('#filecontents h1').length > 1) tags.unshift('h1');
         
     | 
| 
      
 158 
     | 
    
         
            +
              for (i = 0; i < tags.length; i++) { tags[i] = '#filecontents ' + tags[i]; }
         
     | 
| 
      
 159 
     | 
    
         
            +
              var lastTag = parseInt(tags[0][1], 10);
         
     | 
| 
      
 160 
     | 
    
         
            +
              $(tags.join(', ')).each(function() {
         
     | 
| 
      
 161 
     | 
    
         
            +
                if ($(this).parents('.method_details .docstring').length != 0) return;
         
     | 
| 
      
 162 
     | 
    
         
            +
                if (this.id == "filecontents") return;
         
     | 
| 
      
 163 
     | 
    
         
            +
                show = true;
         
     | 
| 
      
 164 
     | 
    
         
            +
                var thisTag = parseInt(this.tagName[1], 10);
         
     | 
| 
      
 165 
     | 
    
         
            +
                if (this.id.length === 0) {
         
     | 
| 
      
 166 
     | 
    
         
            +
                  var proposedId = $(this).attr('toc-id');
         
     | 
| 
      
 167 
     | 
    
         
            +
                  if (typeof(proposedId) != "undefined") this.id = proposedId;
         
     | 
| 
      
 168 
     | 
    
         
            +
                  else {
         
     | 
| 
      
 169 
     | 
    
         
            +
                    var proposedId = $(this).text().replace(/[^a-z0-9-]/ig, '_');
         
     | 
| 
      
 170 
     | 
    
         
            +
                    if ($('#' + proposedId).length > 0) { proposedId += counter; counter++; }
         
     | 
| 
      
 171 
     | 
    
         
            +
                    this.id = proposedId;
         
     | 
| 
      
 172 
     | 
    
         
            +
                  }
         
     | 
| 
      
 173 
     | 
    
         
            +
                }
         
     | 
| 
      
 174 
     | 
    
         
            +
                if (thisTag > lastTag) {
         
     | 
| 
      
 175 
     | 
    
         
            +
                  for (i = 0; i < thisTag - lastTag; i++) {
         
     | 
| 
      
 176 
     | 
    
         
            +
                    var tmp = $('<ol/>'); toc.append(tmp); toc = tmp;
         
     | 
| 
      
 177 
     | 
    
         
            +
                  }
         
     | 
| 
      
 178 
     | 
    
         
            +
                }
         
     | 
| 
      
 179 
     | 
    
         
            +
                if (thisTag < lastTag) {
         
     | 
| 
      
 180 
     | 
    
         
            +
                  for (i = 0; i < lastTag - thisTag; i++) toc = toc.parent();
         
     | 
| 
      
 181 
     | 
    
         
            +
                }
         
     | 
| 
      
 182 
     | 
    
         
            +
                var title = $(this).attr('toc-title');
         
     | 
| 
      
 183 
     | 
    
         
            +
                if (typeof(title) == "undefined") title = $(this).text();
         
     | 
| 
      
 184 
     | 
    
         
            +
                toc.append('<li><a href="#' + this.id + '">' + title + '</a></li>');
         
     | 
| 
      
 185 
     | 
    
         
            +
                lastTag = thisTag;
         
     | 
| 
      
 186 
     | 
    
         
            +
              });
         
     | 
| 
      
 187 
     | 
    
         
            +
              if (!show) return;
         
     | 
| 
      
 188 
     | 
    
         
            +
              html = '<div id="toc"><p class="title"><a class="hide_toc" href="#"><strong>Table of Contents</strong></a> <small>(<a href="#" class="float_toc">left</a>)</small></p></div>';
         
     | 
| 
      
 189 
     | 
    
         
            +
              $('#content').prepend(html);
         
     | 
| 
      
 190 
     | 
    
         
            +
              $('#toc').append(_toc);
         
     | 
| 
      
 191 
     | 
    
         
            +
              $('#toc .hide_toc').toggle(function() {
         
     | 
| 
      
 192 
     | 
    
         
            +
                $('#toc .top').slideUp('fast');
         
     | 
| 
      
 193 
     | 
    
         
            +
                $('#toc').toggleClass('hidden');
         
     | 
| 
      
 194 
     | 
    
         
            +
                $('#toc .title small').toggle();
         
     | 
| 
      
 195 
     | 
    
         
            +
              }, function() {
         
     | 
| 
      
 196 
     | 
    
         
            +
                $('#toc .top').slideDown('fast');
         
     | 
| 
      
 197 
     | 
    
         
            +
                $('#toc').toggleClass('hidden');
         
     | 
| 
      
 198 
     | 
    
         
            +
                $('#toc .title small').toggle();
         
     | 
| 
      
 199 
     | 
    
         
            +
              });
         
     | 
| 
      
 200 
     | 
    
         
            +
              $('#toc .float_toc').toggle(function() {
         
     | 
| 
      
 201 
     | 
    
         
            +
                $(this).text('float');
         
     | 
| 
      
 202 
     | 
    
         
            +
                $('#toc').toggleClass('nofloat');
         
     | 
| 
      
 203 
     | 
    
         
            +
              }, function() {
         
     | 
| 
      
 204 
     | 
    
         
            +
                $(this).text('left');
         
     | 
| 
      
 205 
     | 
    
         
            +
                $('#toc').toggleClass('nofloat');
         
     | 
| 
      
 206 
     | 
    
         
            +
              });
         
     | 
| 
      
 207 
     | 
    
         
            +
            }
         
     | 
| 
      
 208 
     | 
    
         
            +
             
     | 
| 
      
 209 
     | 
    
         
            +
            $(framesInit);
         
     | 
| 
      
 210 
     | 
    
         
            +
            $(createSourceLinks);
         
     | 
| 
      
 211 
     | 
    
         
            +
            $(createDefineLinks);
         
     | 
| 
      
 212 
     | 
    
         
            +
            $(createFullTreeLinks);
         
     | 
| 
      
 213 
     | 
    
         
            +
            $(fixBoxInfoHeights);
         
     | 
| 
      
 214 
     | 
    
         
            +
            $(searchFrameLinks);
         
     | 
| 
      
 215 
     | 
    
         
            +
            $(linkSummaries);
         
     | 
| 
      
 216 
     | 
    
         
            +
            $(keyboardShortcuts);
         
     | 
| 
      
 217 
     | 
    
         
            +
            $(summaryToggle);
         
     | 
| 
      
 218 
     | 
    
         
            +
            $(fixOutsideWorldLinks);
         
     | 
| 
      
 219 
     | 
    
         
            +
            $(generateTOC);
         
     | 
    
        data/doc/js/full_list.js
    ADDED
    
    | 
         @@ -0,0 +1,181 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            var inSearch = null;
         
     | 
| 
      
 2 
     | 
    
         
            +
            var searchIndex = 0;
         
     | 
| 
      
 3 
     | 
    
         
            +
            var searchCache = [];
         
     | 
| 
      
 4 
     | 
    
         
            +
            var searchString = '';
         
     | 
| 
      
 5 
     | 
    
         
            +
            var regexSearchString = '';
         
     | 
| 
      
 6 
     | 
    
         
            +
            var caseSensitiveMatch = false;
         
     | 
| 
      
 7 
     | 
    
         
            +
            var ignoreKeyCodeMin = 8;
         
     | 
| 
      
 8 
     | 
    
         
            +
            var ignoreKeyCodeMax = 46;
         
     | 
| 
      
 9 
     | 
    
         
            +
            var commandKey = 91;
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            RegExp.escape = function(text) {
         
     | 
| 
      
 12 
     | 
    
         
            +
                return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
         
     | 
| 
      
 13 
     | 
    
         
            +
            }
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            function fullListSearch() {
         
     | 
| 
      
 16 
     | 
    
         
            +
              // generate cache
         
     | 
| 
      
 17 
     | 
    
         
            +
              searchCache = [];
         
     | 
| 
      
 18 
     | 
    
         
            +
              $('#full_list li').each(function() {
         
     | 
| 
      
 19 
     | 
    
         
            +
                var link = $(this).find('.object_link a');
         
     | 
| 
      
 20 
     | 
    
         
            +
                if (link.length === 0) return;
         
     | 
| 
      
 21 
     | 
    
         
            +
                var fullName = link.attr('title').split(' ')[0];
         
     | 
| 
      
 22 
     | 
    
         
            +
                searchCache.push({name:link.text(), fullName:fullName, node:$(this), link:link});
         
     | 
| 
      
 23 
     | 
    
         
            +
              });
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
              $('#search input').keyup(function(event) {
         
     | 
| 
      
 26 
     | 
    
         
            +
                if ((event.keyCode > ignoreKeyCodeMin && event.keyCode < ignoreKeyCodeMax)
         
     | 
| 
      
 27 
     | 
    
         
            +
                     || event.keyCode == commandKey)
         
     | 
| 
      
 28 
     | 
    
         
            +
                  return;
         
     | 
| 
      
 29 
     | 
    
         
            +
                searchString = this.value;
         
     | 
| 
      
 30 
     | 
    
         
            +
                caseSensitiveMatch = searchString.match(/[A-Z]/) != null;
         
     | 
| 
      
 31 
     | 
    
         
            +
                regexSearchString = RegExp.escape(searchString);
         
     | 
| 
      
 32 
     | 
    
         
            +
                if (caseSensitiveMatch) {
         
     | 
| 
      
 33 
     | 
    
         
            +
                  regexSearchString += "|" +
         
     | 
| 
      
 34 
     | 
    
         
            +
                    $.map(searchString.split(''), function(e) { return RegExp.escape(e); }).
         
     | 
| 
      
 35 
     | 
    
         
            +
                    join('.+?');
         
     | 
| 
      
 36 
     | 
    
         
            +
                }
         
     | 
| 
      
 37 
     | 
    
         
            +
                if (searchString === "") {
         
     | 
| 
      
 38 
     | 
    
         
            +
                  clearTimeout(inSearch);
         
     | 
| 
      
 39 
     | 
    
         
            +
                  inSearch = null;
         
     | 
| 
      
 40 
     | 
    
         
            +
                  $('ul .search_uncollapsed').removeClass('search_uncollapsed');
         
     | 
| 
      
 41 
     | 
    
         
            +
                  $('#full_list, #content').removeClass('insearch');
         
     | 
| 
      
 42 
     | 
    
         
            +
                  $('#full_list li').removeClass('found').each(function() {
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
                    var link = $(this).find('.object_link a');
         
     | 
| 
      
 45 
     | 
    
         
            +
                    if (link.length > 0) link.text(link.text());
         
     | 
| 
      
 46 
     | 
    
         
            +
                  });
         
     | 
| 
      
 47 
     | 
    
         
            +
                  if (clicked) {
         
     | 
| 
      
 48 
     | 
    
         
            +
                    clicked.parents('ul').each(function() {
         
     | 
| 
      
 49 
     | 
    
         
            +
                      $(this).removeClass('collapsed').prev().removeClass('collapsed');
         
     | 
| 
      
 50 
     | 
    
         
            +
                    });
         
     | 
| 
      
 51 
     | 
    
         
            +
                  }
         
     | 
| 
      
 52 
     | 
    
         
            +
                  highlight();
         
     | 
| 
      
 53 
     | 
    
         
            +
                }
         
     | 
| 
      
 54 
     | 
    
         
            +
                else {
         
     | 
| 
      
 55 
     | 
    
         
            +
                  if (inSearch) clearTimeout(inSearch);
         
     | 
| 
      
 56 
     | 
    
         
            +
                  searchIndex = 0;
         
     | 
| 
      
 57 
     | 
    
         
            +
                  lastRowClass = '';
         
     | 
| 
      
 58 
     | 
    
         
            +
                  $('#full_list, #content').addClass('insearch');
         
     | 
| 
      
 59 
     | 
    
         
            +
                  $('#noresults').text('');
         
     | 
| 
      
 60 
     | 
    
         
            +
                  searchItem();
         
     | 
| 
      
 61 
     | 
    
         
            +
                }
         
     | 
| 
      
 62 
     | 
    
         
            +
              });
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
              $('#search input').focus();
         
     | 
| 
      
 65 
     | 
    
         
            +
              $('#full_list').after("<div id='noresults'></div>");
         
     | 
| 
      
 66 
     | 
    
         
            +
            }
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
            var lastRowClass = '';
         
     | 
| 
      
 69 
     | 
    
         
            +
            function searchItem() {
         
     | 
| 
      
 70 
     | 
    
         
            +
              for (var i = 0; i < searchCache.length / 50; i++) {
         
     | 
| 
      
 71 
     | 
    
         
            +
                var item = searchCache[searchIndex];
         
     | 
| 
      
 72 
     | 
    
         
            +
                var searchName = (searchString.indexOf('::') != -1 ? item.fullName : item.name);
         
     | 
| 
      
 73 
     | 
    
         
            +
                var matchString = regexSearchString;
         
     | 
| 
      
 74 
     | 
    
         
            +
                var matchRegexp = new RegExp(matchString, caseSensitiveMatch ? "" : "i");
         
     | 
| 
      
 75 
     | 
    
         
            +
                if (searchName.match(matchRegexp) == null) {
         
     | 
| 
      
 76 
     | 
    
         
            +
                  item.node.removeClass('found');
         
     | 
| 
      
 77 
     | 
    
         
            +
                }
         
     | 
| 
      
 78 
     | 
    
         
            +
                else {
         
     | 
| 
      
 79 
     | 
    
         
            +
                  item.node.css('padding-left', '10px').addClass('found');
         
     | 
| 
      
 80 
     | 
    
         
            +
                  item.node.parents().addClass('search_uncollapsed');
         
     | 
| 
      
 81 
     | 
    
         
            +
                  item.node.removeClass(lastRowClass).addClass(lastRowClass == 'r1' ? 'r2' : 'r1');
         
     | 
| 
      
 82 
     | 
    
         
            +
                  lastRowClass = item.node.hasClass('r1') ? 'r1' : 'r2';
         
     | 
| 
      
 83 
     | 
    
         
            +
                  item.link.html(item.name.replace(matchRegexp, "<strong>$&</strong>"));
         
     | 
| 
      
 84 
     | 
    
         
            +
                }
         
     | 
| 
      
 85 
     | 
    
         
            +
             
     | 
| 
      
 86 
     | 
    
         
            +
                if (searchCache.length === searchIndex + 1) {
         
     | 
| 
      
 87 
     | 
    
         
            +
                  searchDone();
         
     | 
| 
      
 88 
     | 
    
         
            +
                  return;
         
     | 
| 
      
 89 
     | 
    
         
            +
                }
         
     | 
| 
      
 90 
     | 
    
         
            +
                else {
         
     | 
| 
      
 91 
     | 
    
         
            +
                  searchIndex++;
         
     | 
| 
      
 92 
     | 
    
         
            +
                }
         
     | 
| 
      
 93 
     | 
    
         
            +
              }
         
     | 
| 
      
 94 
     | 
    
         
            +
              inSearch = setTimeout('searchItem()', 0);
         
     | 
| 
      
 95 
     | 
    
         
            +
            }
         
     | 
| 
      
 96 
     | 
    
         
            +
             
     | 
| 
      
 97 
     | 
    
         
            +
            function searchDone() {
         
     | 
| 
      
 98 
     | 
    
         
            +
              highlight(true);
         
     | 
| 
      
 99 
     | 
    
         
            +
              if ($('#full_list li:visible').size() === 0) {
         
     | 
| 
      
 100 
     | 
    
         
            +
                $('#noresults').text('No results were found.').hide().fadeIn();
         
     | 
| 
      
 101 
     | 
    
         
            +
              }
         
     | 
| 
      
 102 
     | 
    
         
            +
              else {
         
     | 
| 
      
 103 
     | 
    
         
            +
                $('#noresults').text('');
         
     | 
| 
      
 104 
     | 
    
         
            +
              }
         
     | 
| 
      
 105 
     | 
    
         
            +
              $('#content').removeClass('insearch');
         
     | 
| 
      
 106 
     | 
    
         
            +
              clearTimeout(inSearch);
         
     | 
| 
      
 107 
     | 
    
         
            +
              inSearch = null;
         
     | 
| 
      
 108 
     | 
    
         
            +
            }
         
     | 
| 
      
 109 
     | 
    
         
            +
             
     | 
| 
      
 110 
     | 
    
         
            +
            clicked = null;
         
     | 
| 
      
 111 
     | 
    
         
            +
            function linkList() {
         
     | 
| 
      
 112 
     | 
    
         
            +
              $('#full_list li, #full_list li a:last').click(function(evt) {
         
     | 
| 
      
 113 
     | 
    
         
            +
                if ($(this).hasClass('toggle')) return true;
         
     | 
| 
      
 114 
     | 
    
         
            +
                if (this.tagName.toLowerCase() == "li") {
         
     | 
| 
      
 115 
     | 
    
         
            +
                  if ($(this).find('.object_link a').length === 0) {
         
     | 
| 
      
 116 
     | 
    
         
            +
                    $(this).children('a.toggle').click();
         
     | 
| 
      
 117 
     | 
    
         
            +
                    return false;
         
     | 
| 
      
 118 
     | 
    
         
            +
                  }
         
     | 
| 
      
 119 
     | 
    
         
            +
                  var toggle = $(this).children('a.toggle');
         
     | 
| 
      
 120 
     | 
    
         
            +
                  if (toggle.size() > 0 && evt.pageX < toggle.offset().left) {
         
     | 
| 
      
 121 
     | 
    
         
            +
                    toggle.click();
         
     | 
| 
      
 122 
     | 
    
         
            +
                    return false;
         
     | 
| 
      
 123 
     | 
    
         
            +
                  }
         
     | 
| 
      
 124 
     | 
    
         
            +
                }
         
     | 
| 
      
 125 
     | 
    
         
            +
                if (clicked) clicked.removeClass('clicked');
         
     | 
| 
      
 126 
     | 
    
         
            +
                var win;
         
     | 
| 
      
 127 
     | 
    
         
            +
                try {
         
     | 
| 
      
 128 
     | 
    
         
            +
                  win = window.top.frames.main ? window.top.frames.main : window.parent;
         
     | 
| 
      
 129 
     | 
    
         
            +
                } catch (e) { win = window.parent; }
         
     | 
| 
      
 130 
     | 
    
         
            +
                if (this.tagName.toLowerCase() == "a") {
         
     | 
| 
      
 131 
     | 
    
         
            +
                  clicked = $(this).parents('li').addClass('clicked');
         
     | 
| 
      
 132 
     | 
    
         
            +
                  win.location = this.href;
         
     | 
| 
      
 133 
     | 
    
         
            +
                }
         
     | 
| 
      
 134 
     | 
    
         
            +
                else {
         
     | 
| 
      
 135 
     | 
    
         
            +
                  clicked = $(this).addClass('clicked');
         
     | 
| 
      
 136 
     | 
    
         
            +
                  win.location = $(this).find('a:last').attr('href');
         
     | 
| 
      
 137 
     | 
    
         
            +
                }
         
     | 
| 
      
 138 
     | 
    
         
            +
                return false;
         
     | 
| 
      
 139 
     | 
    
         
            +
              });
         
     | 
| 
      
 140 
     | 
    
         
            +
            }
         
     | 
| 
      
 141 
     | 
    
         
            +
             
     | 
| 
      
 142 
     | 
    
         
            +
            function collapse() {
         
     | 
| 
      
 143 
     | 
    
         
            +
              if (!$('#full_list').hasClass('class')) return;
         
     | 
| 
      
 144 
     | 
    
         
            +
              $('#full_list.class a.toggle').click(function() {
         
     | 
| 
      
 145 
     | 
    
         
            +
                $(this).parent().toggleClass('collapsed').next().toggleClass('collapsed');
         
     | 
| 
      
 146 
     | 
    
         
            +
                highlight();
         
     | 
| 
      
 147 
     | 
    
         
            +
                return false;
         
     | 
| 
      
 148 
     | 
    
         
            +
              });
         
     | 
| 
      
 149 
     | 
    
         
            +
              $('#full_list.class ul').each(function() {
         
     | 
| 
      
 150 
     | 
    
         
            +
                $(this).addClass('collapsed').prev().addClass('collapsed');
         
     | 
| 
      
 151 
     | 
    
         
            +
              });
         
     | 
| 
      
 152 
     | 
    
         
            +
              $('#full_list.class').children().removeClass('collapsed');
         
     | 
| 
      
 153 
     | 
    
         
            +
              highlight();
         
     | 
| 
      
 154 
     | 
    
         
            +
            }
         
     | 
| 
      
 155 
     | 
    
         
            +
             
     | 
| 
      
 156 
     | 
    
         
            +
            function highlight(no_padding) {
         
     | 
| 
      
 157 
     | 
    
         
            +
              var n = 1;
         
     | 
| 
      
 158 
     | 
    
         
            +
              $('#full_list li:visible').each(function() {
         
     | 
| 
      
 159 
     | 
    
         
            +
                var next = n == 1 ? 2 : 1;
         
     | 
| 
      
 160 
     | 
    
         
            +
                $(this).removeClass("r" + next).addClass("r" + n);
         
     | 
| 
      
 161 
     | 
    
         
            +
                if (!no_padding && $('#full_list').hasClass('class')) {
         
     | 
| 
      
 162 
     | 
    
         
            +
                  $(this).css('padding-left', (10 + $(this).parents('ul').size() * 15) + 'px');
         
     | 
| 
      
 163 
     | 
    
         
            +
                }
         
     | 
| 
      
 164 
     | 
    
         
            +
                n = next;
         
     | 
| 
      
 165 
     | 
    
         
            +
              });
         
     | 
| 
      
 166 
     | 
    
         
            +
            }
         
     | 
| 
      
 167 
     | 
    
         
            +
             
     | 
| 
      
 168 
     | 
    
         
            +
            function escapeShortcut() {
         
     | 
| 
      
 169 
     | 
    
         
            +
              $(document).keydown(function(evt) {
         
     | 
| 
      
 170 
     | 
    
         
            +
                if (evt.which == 27) {
         
     | 
| 
      
 171 
     | 
    
         
            +
                  $('#search_frame', window.top.document).slideUp(100);
         
     | 
| 
      
 172 
     | 
    
         
            +
                  $('#search a', window.top.document).removeClass('active inactive');
         
     | 
| 
      
 173 
     | 
    
         
            +
                  $(window.top).focus();
         
     | 
| 
      
 174 
     | 
    
         
            +
                }
         
     | 
| 
      
 175 
     | 
    
         
            +
              });
         
     | 
| 
      
 176 
     | 
    
         
            +
            }
         
     | 
| 
      
 177 
     | 
    
         
            +
             
     | 
| 
      
 178 
     | 
    
         
            +
            $(escapeShortcut);
         
     | 
| 
      
 179 
     | 
    
         
            +
            $(fullListSearch);
         
     | 
| 
      
 180 
     | 
    
         
            +
            $(linkList);
         
     | 
| 
      
 181 
     | 
    
         
            +
            $(collapse);
         
     |