clavem 1.0.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.
- data/.gitignore +6 -0
- data/.travis.yml +8 -0
- data/.yardopts +1 -0
- data/Gemfile +9 -0
- data/README.md +58 -0
- data/Rakefile +18 -0
- data/bin/clavem +41 -0
- data/clavem.gemspec +39 -0
- data/clavem.yml +1 -0
- data/doc/Clavem.html +129 -0
- data/doc/Clavem/Authorizer.html +1976 -0
- data/doc/Clavem/Exceptions.html +125 -0
- data/doc/Clavem/Exceptions/AuthorizationDenied.html +133 -0
- data/doc/Clavem/Exceptions/Failure.html +133 -0
- data/doc/Clavem/Exceptions/Timeout.html +133 -0
- data/doc/Clavem/Version.html +189 -0
- data/doc/_index.html +192 -0
- data/doc/class_list.html +53 -0
- data/doc/css/common.css +1 -0
- data/doc/css/full_list.css +57 -0
- data/doc/css/style.css +328 -0
- data/doc/file.README.html +132 -0
- data/doc/file_list.html +55 -0
- data/doc/frames.html +28 -0
- data/doc/index.html +132 -0
- data/doc/js/app.js +214 -0
- data/doc/js/full_list.js +173 -0
- data/doc/js/jquery.js +4 -0
- data/doc/method_list.html +188 -0
- data/doc/top-level-namespace.html +112 -0
- data/lib/clavem.rb +15 -0
- data/lib/clavem/authorizer.rb +220 -0
- data/lib/clavem/template.html.erb +25 -0
- data/lib/clavem/version.rb +24 -0
- data/locales/en.yml +9 -0
- data/locales/it.yml +9 -0
- data/spec/clavem/authorizer_spec.rb +334 -0
- data/spec/coverage_helper.rb +21 -0
- data/spec/spec_helper.rb +16 -0
- data/test_server.rb +16 -0
- metadata +266 -0
    
        data/doc/file_list.html
    ADDED
    
    | @@ -0,0 +1,55 @@ | |
| 1 | 
            +
            <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
         | 
| 2 | 
            +
              "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
         | 
| 3 | 
            +
            <html>
         | 
| 4 | 
            +
              <head>
         | 
| 5 | 
            +
                <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
         | 
| 6 | 
            +
                
         | 
| 7 | 
            +
                  <link rel="stylesheet" href="css/full_list.css" type="text/css" media="screen" charset="utf-8" />
         | 
| 8 | 
            +
                
         | 
| 9 | 
            +
                  <link rel="stylesheet" href="css/common.css" type="text/css" media="screen" charset="utf-8" />
         | 
| 10 | 
            +
                
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                
         | 
| 13 | 
            +
                  <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
         | 
| 14 | 
            +
                
         | 
| 15 | 
            +
                  <script type="text/javascript" charset="utf-8" src="js/full_list.js"></script>
         | 
| 16 | 
            +
                
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                <base id="base_target" target="_parent" />
         | 
| 19 | 
            +
              </head>
         | 
| 20 | 
            +
              <body>
         | 
| 21 | 
            +
                <script type="text/javascript" charset="utf-8">
         | 
| 22 | 
            +
                  if (window.top.frames.main) {
         | 
| 23 | 
            +
                    document.getElementById('base_target').target = 'main';
         | 
| 24 | 
            +
                    document.body.className = 'frames';
         | 
| 25 | 
            +
                  }
         | 
| 26 | 
            +
                </script>
         | 
| 27 | 
            +
                <div id="content">
         | 
| 28 | 
            +
                  <h1 id="full_list_header">File List</h1>
         | 
| 29 | 
            +
                  <div id="nav">
         | 
| 30 | 
            +
                    
         | 
| 31 | 
            +
                      <span><a target="_self" href="class_list.html">
         | 
| 32 | 
            +
                        Classes
         | 
| 33 | 
            +
                      </a></span>
         | 
| 34 | 
            +
                    
         | 
| 35 | 
            +
                      <span><a target="_self" href="method_list.html">
         | 
| 36 | 
            +
                        Methods
         | 
| 37 | 
            +
                      </a></span>
         | 
| 38 | 
            +
                    
         | 
| 39 | 
            +
                      <span><a target="_self" href="file_list.html">
         | 
| 40 | 
            +
                        Files
         | 
| 41 | 
            +
                      </a></span>
         | 
| 42 | 
            +
                    
         | 
| 43 | 
            +
                  </div>
         | 
| 44 | 
            +
                  <div id="search">Search: <input type="text" /></div>
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                  <ul id="full_list" class="file">
         | 
| 47 | 
            +
                    
         | 
| 48 | 
            +
             | 
| 49 | 
            +
              <li class="r1"><a href="index.html" title="README">README</a></li>
         | 
| 50 | 
            +
              
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                  </ul>
         | 
| 53 | 
            +
                </div>
         | 
| 54 | 
            +
              </body>
         | 
| 55 | 
            +
            </html>
         | 
    
        data/doc/frames.html
    ADDED
    
    | @@ -0,0 +1,28 @@ | |
| 1 | 
            +
            <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
         | 
| 2 | 
            +
            	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
         | 
| 5 | 
            +
            <head>
         | 
| 6 | 
            +
            	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
         | 
| 7 | 
            +
            	<title>Documentation by YARD 0.8.3</title>
         | 
| 8 | 
            +
            </head>
         | 
| 9 | 
            +
            <script type="text/javascript" charset="utf-8">
         | 
| 10 | 
            +
            window.onload = function() {
         | 
| 11 | 
            +
              var match = window.location.hash.match(/^#!(.+)/);
         | 
| 12 | 
            +
              var name = 'index.html';
         | 
| 13 | 
            +
              if (match) {
         | 
| 14 | 
            +
                name = unescape(match[1]);
         | 
| 15 | 
            +
              }
         | 
| 16 | 
            +
              document.writeln('<frameset cols="20%,*">' +
         | 
| 17 | 
            +
                '<frame name="list" src="class_list.html" />' +
         | 
| 18 | 
            +
                '<frame name="main" src="' + name + '" />' +
         | 
| 19 | 
            +
                '</frameset>');
         | 
| 20 | 
            +
            }
         | 
| 21 | 
            +
            </script>
         | 
| 22 | 
            +
            <noscript>
         | 
| 23 | 
            +
              <frameset cols="20%,*">
         | 
| 24 | 
            +
                <frame name="list" src="class_list.html" />
         | 
| 25 | 
            +
                <frame name="main" src="index.html" />
         | 
| 26 | 
            +
              </frameset>
         | 
| 27 | 
            +
            </noscript>
         | 
| 28 | 
            +
            </html>
         | 
    
        data/doc/index.html
    ADDED
    
    | @@ -0,0 +1,132 @@ | |
| 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=US-ASCII" />
         | 
| 6 | 
            +
            <title>
         | 
| 7 | 
            +
              File: README
         | 
| 8 | 
            +
              
         | 
| 9 | 
            +
                — Documentation by YARD 0.8.3
         | 
| 10 | 
            +
              
         | 
| 11 | 
            +
            </title>
         | 
| 12 | 
            +
             | 
| 13 | 
            +
              <link rel="stylesheet" href="css/style.css" type="text/css" media="screen" charset="utf-8" />
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              <link rel="stylesheet" href="css/common.css" type="text/css" media="screen" 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#!" + escape(window.location.href);
         | 
| 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'><h1>Introduction</h1>
         | 
| 65 | 
            +
             | 
| 66 | 
            +
            <p><a href="https://travis-ci.org/ShogunPanda/clavem"><img src="https://secure.travis-ci.org/ShogunPanda/clavem.png?branch=master" alt="Build Status"></a>
         | 
| 67 | 
            +
            <a href="https://gemnasium.com/ShogunPanda/clavem"><img src="https://gemnasium.com/ShogunPanda/clavem.png?travis" alt="Dependency Status"></a>
         | 
| 68 | 
            +
            <a href="https://codeclimate.com/github/ShogunPanda/clavem"><img src="https://codeclimate.com/badge.png" alt="Code Climate"></a></p>
         | 
| 69 | 
            +
             | 
| 70 | 
            +
            <p>A local callback server for oAuth web-flow.</p>
         | 
| 71 | 
            +
             | 
| 72 | 
            +
            <p><a href="http://sw.cow.tc/clavem">http://sw.cow.tc/clavem</a></p>
         | 
| 73 | 
            +
             | 
| 74 | 
            +
            <p><a href="http://rdoc.info/gems/clavem">http://rdoc.info/gems/clavem</a></p>
         | 
| 75 | 
            +
             | 
| 76 | 
            +
            <h2>Usage</h2>
         | 
| 77 | 
            +
             | 
| 78 | 
            +
            <p>clavem allows you to handle a full oAuth authentication flow directly from the console.</p>
         | 
| 79 | 
            +
             | 
| 80 | 
            +
            <p>Simply instantiate the authorizer and run the authorize method with the URL:</p>
         | 
| 81 | 
            +
             | 
| 82 | 
            +
            <pre class="code ruby"><code><span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>clavem</span><span class='tstring_end'>"</span></span>
         | 
| 83 | 
            +
             | 
| 84 | 
            +
            <span class='comment'># Initalize your oAuth access.
         | 
| 85 | 
            +
            </span>
         | 
| 86 | 
            +
            <span class='id identifier rubyid_authorizer'>authorizer</span> <span class='op'>=</span> <span class='const'>Clavem</span><span class='op'>::</span><span class='const'>Authorizer</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span>
         | 
| 87 | 
            +
             | 
| 88 | 
            +
            <span class='comment'># Get your authorization URL and append the callback.
         | 
| 89 | 
            +
            </span>
         | 
| 90 | 
            +
            <span class='id identifier rubyid_url'>url</span> <span class='op'>+=</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>?oauth_callback=</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_authorizer'>authorizer</span><span class='period'>.</span><span class='id identifier rubyid_callback_url'>callback_url</span><span class='rbrace'>}</span><span class='tstring_end'>"</span></span>
         | 
| 91 | 
            +
            <span class='id identifier rubyid_authorizer'>authorizer</span><span class='period'>.</span><span class='id identifier rubyid_authorize'>authorize</span><span class='lparen'>(</span><span class='id identifier rubyid_url'>url</span><span class='rparen'>)</span>
         | 
| 92 | 
            +
             | 
| 93 | 
            +
            <span class='kw'>if</span> <span class='id identifier rubyid_authorizer'>authorizer</span><span class='period'>.</span><span class='id identifier rubyid_status'>status</span> <span class='op'>==</span> <span class='symbol'>:succeded</span> <span class='kw'>then</span>
         | 
| 94 | 
            +
              <span class='id identifier rubyid_access_token'>access_token</span> <span class='op'>=</span> <span class='id identifier rubyid_authorizer'>authorizer</span><span class='period'>.</span><span class='id identifier rubyid_token'>token</span>
         | 
| 95 | 
            +
             | 
| 96 | 
            +
              <span class='comment'># Go on!
         | 
| 97 | 
            +
            </span><span class='kw'>else</span>
         | 
| 98 | 
            +
              <span class='comment'># Authorization denied
         | 
| 99 | 
            +
            </span><span class='kw'>end</span>
         | 
| 100 | 
            +
            </code></pre>
         | 
| 101 | 
            +
             | 
| 102 | 
            +
            <p>Alternatively, you can also specify a timeout and a block to the constructor to customizer the response handling.</p>
         | 
| 103 | 
            +
             | 
| 104 | 
            +
            <p>See the <a href="http://rdoc.info/gems/clavem">documentation</a> for more information.</p>
         | 
| 105 | 
            +
             | 
| 106 | 
            +
            <h2>Contributing to clavem</h2>
         | 
| 107 | 
            +
             | 
| 108 | 
            +
            <ul>
         | 
| 109 | 
            +
            <li>Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.</li>
         | 
| 110 | 
            +
            <li>Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it.</li>
         | 
| 111 | 
            +
            <li>Fork the project.</li>
         | 
| 112 | 
            +
            <li>Start a feature/bugfix branch.</li>
         | 
| 113 | 
            +
            <li>Commit and push until you are happy with your contribution.</li>
         | 
| 114 | 
            +
            <li>Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.</li>
         | 
| 115 | 
            +
            <li>Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.</li>
         | 
| 116 | 
            +
            </ul>
         | 
| 117 | 
            +
             | 
| 118 | 
            +
            <h2>Copyright</h2>
         | 
| 119 | 
            +
             | 
| 120 | 
            +
            <p>Copyright (C) 2013 and above Shogun (<a href="mailto:shogun_panda@me.com">shogun_panda@me.com</a>).</p>
         | 
| 121 | 
            +
             | 
| 122 | 
            +
            <p>Licensed under the MIT license, which can be found at <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>.</p>
         | 
| 123 | 
            +
            </div></div>
         | 
| 124 | 
            +
             | 
| 125 | 
            +
                <div id="footer">
         | 
| 126 | 
            +
              Generated on Sun Jan 27 14:14:59 2013 by
         | 
| 127 | 
            +
              <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
         | 
| 128 | 
            +
              0.8.3 (ruby-1.9.3).
         | 
| 129 | 
            +
            </div>
         | 
| 130 | 
            +
             | 
| 131 | 
            +
              </body>
         | 
| 132 | 
            +
            </html>
         | 
    
        data/doc/js/app.js
    ADDED
    
    | @@ -0,0 +1,214 @@ | |
| 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 | 
            +
                window.top.document.title = $('html head title').text();
         | 
| 82 | 
            +
              }
         | 
| 83 | 
            +
              else {
         | 
| 84 | 
            +
                $('#menu .noframes a').text('frames').attr('href', framesUrl);
         | 
| 85 | 
            +
              }
         | 
| 86 | 
            +
            }
         | 
| 87 | 
            +
             | 
| 88 | 
            +
            function keyboardShortcuts() {
         | 
| 89 | 
            +
              if (window.top.frames.main) return;
         | 
| 90 | 
            +
              $(document).keypress(function(evt) {
         | 
| 91 | 
            +
                if (evt.altKey || evt.ctrlKey || evt.metaKey || evt.shiftKey) return;
         | 
| 92 | 
            +
                if (typeof evt.target !== "undefined" &&
         | 
| 93 | 
            +
                    (evt.target.nodeName == "INPUT" ||
         | 
| 94 | 
            +
                    evt.target.nodeName == "TEXTAREA")) return;
         | 
| 95 | 
            +
                switch (evt.charCode) {
         | 
| 96 | 
            +
                  case 67: case 99:  $('#class_list_link').click(); break;  // 'c'
         | 
| 97 | 
            +
                  case 77: case 109: $('#method_list_link').click(); break; // 'm'
         | 
| 98 | 
            +
                  case 70: case 102: $('#file_list_link').click(); break;   // 'f'
         | 
| 99 | 
            +
                  default: break;
         | 
| 100 | 
            +
                }
         | 
| 101 | 
            +
              });
         | 
| 102 | 
            +
            }
         | 
| 103 | 
            +
             | 
| 104 | 
            +
            function summaryToggle() {
         | 
| 105 | 
            +
              $('.summary_toggle').click(function() {
         | 
| 106 | 
            +
                if (localStorage) {
         | 
| 107 | 
            +
                  localStorage.summaryCollapsed = $(this).text();
         | 
| 108 | 
            +
                }
         | 
| 109 | 
            +
                $('.summary_toggle').each(function() {
         | 
| 110 | 
            +
                  $(this).text($(this).text() == "collapse" ? "expand" : "collapse");
         | 
| 111 | 
            +
                  var next = $(this).parent().parent().nextAll('ul.summary').first();
         | 
| 112 | 
            +
                  if (next.hasClass('compact')) {
         | 
| 113 | 
            +
                    next.toggle();
         | 
| 114 | 
            +
                    next.nextAll('ul.summary').first().toggle();
         | 
| 115 | 
            +
                  }
         | 
| 116 | 
            +
                  else if (next.hasClass('summary')) {
         | 
| 117 | 
            +
                    var list = $('<ul class="summary compact" />');
         | 
| 118 | 
            +
                    list.html(next.html());
         | 
| 119 | 
            +
                    list.find('.summary_desc, .note').remove();
         | 
| 120 | 
            +
                    list.find('a').each(function() {
         | 
| 121 | 
            +
                      $(this).html($(this).find('strong').html());
         | 
| 122 | 
            +
                      $(this).parent().html($(this)[0].outerHTML);
         | 
| 123 | 
            +
                    });
         | 
| 124 | 
            +
                    next.before(list);
         | 
| 125 | 
            +
                    next.toggle();
         | 
| 126 | 
            +
                  }
         | 
| 127 | 
            +
                });
         | 
| 128 | 
            +
                return false;
         | 
| 129 | 
            +
              });
         | 
| 130 | 
            +
              if (localStorage) {
         | 
| 131 | 
            +
                if (localStorage.summaryCollapsed == "collapse") {
         | 
| 132 | 
            +
                  $('.summary_toggle').first().click();
         | 
| 133 | 
            +
                }
         | 
| 134 | 
            +
                else localStorage.summaryCollapsed = "expand";
         | 
| 135 | 
            +
              }
         | 
| 136 | 
            +
            }
         | 
| 137 | 
            +
             | 
| 138 | 
            +
            function fixOutsideWorldLinks() {
         | 
| 139 | 
            +
              $('a').each(function() {
         | 
| 140 | 
            +
                if (window.location.host != this.host) this.target = '_parent';
         | 
| 141 | 
            +
              });
         | 
| 142 | 
            +
            }
         | 
| 143 | 
            +
             | 
| 144 | 
            +
            function generateTOC() {
         | 
| 145 | 
            +
              if ($('#filecontents').length === 0) return;
         | 
| 146 | 
            +
              var _toc = $('<ol class="top"></ol>');
         | 
| 147 | 
            +
              var show = false;
         | 
| 148 | 
            +
              var toc = _toc;
         | 
| 149 | 
            +
              var counter = 0;
         | 
| 150 | 
            +
              var tags = ['h2', 'h3', 'h4', 'h5', 'h6'];
         | 
| 151 | 
            +
              var i;
         | 
| 152 | 
            +
              if ($('#filecontents h1').length > 1) tags.unshift('h1');
         | 
| 153 | 
            +
              for (i = 0; i < tags.length; i++) { tags[i] = '#filecontents ' + tags[i]; }
         | 
| 154 | 
            +
              var lastTag = parseInt(tags[0][1], 10);
         | 
| 155 | 
            +
              $(tags.join(', ')).each(function() {
         | 
| 156 | 
            +
                if ($(this).parents('.method_details .docstring').length != 0) return;
         | 
| 157 | 
            +
                if (this.id == "filecontents") return;
         | 
| 158 | 
            +
                show = true;
         | 
| 159 | 
            +
                var thisTag = parseInt(this.tagName[1], 10);
         | 
| 160 | 
            +
                if (this.id.length === 0) {
         | 
| 161 | 
            +
                  var proposedId = $(this).attr('toc-id');
         | 
| 162 | 
            +
                  if (typeof(proposedId) != "undefined") this.id = proposedId;
         | 
| 163 | 
            +
                  else {
         | 
| 164 | 
            +
                    var proposedId = $(this).text().replace(/[^a-z0-9-]/ig, '_');
         | 
| 165 | 
            +
                    if ($('#' + proposedId).length > 0) { proposedId += counter; counter++; }
         | 
| 166 | 
            +
                    this.id = proposedId;
         | 
| 167 | 
            +
                  }
         | 
| 168 | 
            +
                }
         | 
| 169 | 
            +
                if (thisTag > lastTag) {
         | 
| 170 | 
            +
                  for (i = 0; i < thisTag - lastTag; i++) {
         | 
| 171 | 
            +
                    var tmp = $('<ol/>'); toc.append(tmp); toc = tmp;
         | 
| 172 | 
            +
                  }
         | 
| 173 | 
            +
                }
         | 
| 174 | 
            +
                if (thisTag < lastTag) {
         | 
| 175 | 
            +
                  for (i = 0; i < lastTag - thisTag; i++) toc = toc.parent();
         | 
| 176 | 
            +
                }
         | 
| 177 | 
            +
                var title = $(this).attr('toc-title');
         | 
| 178 | 
            +
                if (typeof(title) == "undefined") title = $(this).text();
         | 
| 179 | 
            +
                toc.append('<li><a href="#' + this.id + '">' + title + '</a></li>');
         | 
| 180 | 
            +
                lastTag = thisTag;
         | 
| 181 | 
            +
              });
         | 
| 182 | 
            +
              if (!show) return;
         | 
| 183 | 
            +
              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>';
         | 
| 184 | 
            +
              $('#content').prepend(html);
         | 
| 185 | 
            +
              $('#toc').append(_toc);
         | 
| 186 | 
            +
              $('#toc .hide_toc').toggle(function() {
         | 
| 187 | 
            +
                $('#toc .top').slideUp('fast');
         | 
| 188 | 
            +
                $('#toc').toggleClass('hidden');
         | 
| 189 | 
            +
                $('#toc .title small').toggle();
         | 
| 190 | 
            +
              }, function() {
         | 
| 191 | 
            +
                $('#toc .top').slideDown('fast');
         | 
| 192 | 
            +
                $('#toc').toggleClass('hidden');
         | 
| 193 | 
            +
                $('#toc .title small').toggle();
         | 
| 194 | 
            +
              });
         | 
| 195 | 
            +
              $('#toc .float_toc').toggle(function() {
         | 
| 196 | 
            +
                $(this).text('float');
         | 
| 197 | 
            +
                $('#toc').toggleClass('nofloat');
         | 
| 198 | 
            +
              }, function() {
         | 
| 199 | 
            +
                $(this).text('left');
         | 
| 200 | 
            +
                $('#toc').toggleClass('nofloat');
         | 
| 201 | 
            +
              });
         | 
| 202 | 
            +
            }
         | 
| 203 | 
            +
             | 
| 204 | 
            +
            $(framesInit);
         | 
| 205 | 
            +
            $(createSourceLinks);
         | 
| 206 | 
            +
            $(createDefineLinks);
         | 
| 207 | 
            +
            $(createFullTreeLinks);
         | 
| 208 | 
            +
            $(fixBoxInfoHeights);
         | 
| 209 | 
            +
            $(searchFrameLinks);
         | 
| 210 | 
            +
            $(linkSummaries);
         | 
| 211 | 
            +
            $(keyboardShortcuts);
         | 
| 212 | 
            +
            $(summaryToggle);
         | 
| 213 | 
            +
            $(fixOutsideWorldLinks);
         | 
| 214 | 
            +
            $(generateTOC);
         | 
    
        data/doc/js/full_list.js
    ADDED
    
    | @@ -0,0 +1,173 @@ | |
| 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 | 
            +
                var fullName = link.attr('title').split(' ')[0];
         | 
| 21 | 
            +
                searchCache.push({name:link.text(), fullName:fullName, node:$(this), link:link});
         | 
| 22 | 
            +
              });
         | 
| 23 | 
            +
             | 
| 24 | 
            +
              $('#search input').keyup(function(event) {
         | 
| 25 | 
            +
                if ((event.keyCode > ignoreKeyCodeMin && event.keyCode < ignoreKeyCodeMax)
         | 
| 26 | 
            +
                     || event.keyCode == commandKey)
         | 
| 27 | 
            +
                  return;
         | 
| 28 | 
            +
                searchString = this.value;
         | 
| 29 | 
            +
                caseSensitiveMatch = searchString.match(/[A-Z]/) != null;
         | 
| 30 | 
            +
                regexSearchString = RegExp.escape(searchString);
         | 
| 31 | 
            +
                if (caseSensitiveMatch) {
         | 
| 32 | 
            +
                  regexSearchString += "|" +
         | 
| 33 | 
            +
                    $.map(searchString.split(''), function(e) { return RegExp.escape(e); }).
         | 
| 34 | 
            +
                    join('.+?');
         | 
| 35 | 
            +
                }
         | 
| 36 | 
            +
                if (searchString === "") {
         | 
| 37 | 
            +
                  clearTimeout(inSearch);
         | 
| 38 | 
            +
                  inSearch = null;
         | 
| 39 | 
            +
                  $('ul .search_uncollapsed').removeClass('search_uncollapsed');
         | 
| 40 | 
            +
                  $('#full_list, #content').removeClass('insearch');
         | 
| 41 | 
            +
                  $('#full_list li').removeClass('found').each(function() {
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                    var link = $(this).find('.object_link a');
         | 
| 44 | 
            +
                    link.text(link.text());
         | 
| 45 | 
            +
                  });
         | 
| 46 | 
            +
                  if (clicked) {
         | 
| 47 | 
            +
                    clicked.parents('ul').each(function() {
         | 
| 48 | 
            +
                      $(this).removeClass('collapsed').prev().removeClass('collapsed');
         | 
| 49 | 
            +
                    });
         | 
| 50 | 
            +
                  }
         | 
| 51 | 
            +
                  highlight();
         | 
| 52 | 
            +
                }
         | 
| 53 | 
            +
                else {
         | 
| 54 | 
            +
                  if (inSearch) clearTimeout(inSearch);
         | 
| 55 | 
            +
                  searchIndex = 0;
         | 
| 56 | 
            +
                  lastRowClass = '';
         | 
| 57 | 
            +
                  $('#full_list, #content').addClass('insearch');
         | 
| 58 | 
            +
                  $('#noresults').text('');
         | 
| 59 | 
            +
                  searchItem();
         | 
| 60 | 
            +
                }
         | 
| 61 | 
            +
              });
         | 
| 62 | 
            +
             | 
| 63 | 
            +
              $('#search input').focus();
         | 
| 64 | 
            +
              $('#full_list').after("<div id='noresults'></div>");
         | 
| 65 | 
            +
            }
         | 
| 66 | 
            +
             | 
| 67 | 
            +
            var lastRowClass = '';
         | 
| 68 | 
            +
            function searchItem() {
         | 
| 69 | 
            +
              for (var i = 0; i < searchCache.length / 50; i++) {
         | 
| 70 | 
            +
                var item = searchCache[searchIndex];
         | 
| 71 | 
            +
                var searchName = (searchString.indexOf('::') != -1 ? item.fullName : item.name);
         | 
| 72 | 
            +
                var matchString = regexSearchString;
         | 
| 73 | 
            +
                var matchRegexp = new RegExp(matchString, caseSensitiveMatch ? "" : "i");
         | 
| 74 | 
            +
                if (searchName.match(matchRegexp) == null) {
         | 
| 75 | 
            +
                  item.node.removeClass('found');
         | 
| 76 | 
            +
                }
         | 
| 77 | 
            +
                else {
         | 
| 78 | 
            +
                  item.node.css('padding-left', '10px').addClass('found');
         | 
| 79 | 
            +
                  item.node.parents().addClass('search_uncollapsed');
         | 
| 80 | 
            +
                  item.node.removeClass(lastRowClass).addClass(lastRowClass == 'r1' ? 'r2' : 'r1');
         | 
| 81 | 
            +
                  lastRowClass = item.node.hasClass('r1') ? 'r1' : 'r2';
         | 
| 82 | 
            +
                  item.link.html(item.name.replace(matchRegexp, "<strong>$&</strong>"));
         | 
| 83 | 
            +
                }
         | 
| 84 | 
            +
             | 
| 85 | 
            +
                if (searchCache.length === searchIndex + 1) {
         | 
| 86 | 
            +
                  searchDone();
         | 
| 87 | 
            +
                  return;
         | 
| 88 | 
            +
                }
         | 
| 89 | 
            +
                else {
         | 
| 90 | 
            +
                  searchIndex++;
         | 
| 91 | 
            +
                }
         | 
| 92 | 
            +
              }
         | 
| 93 | 
            +
              inSearch = setTimeout('searchItem()', 0);
         | 
| 94 | 
            +
            }
         | 
| 95 | 
            +
             | 
| 96 | 
            +
            function searchDone() {
         | 
| 97 | 
            +
              highlight(true);
         | 
| 98 | 
            +
              if ($('#full_list li:visible').size() === 0) {
         | 
| 99 | 
            +
                $('#noresults').text('No results were found.').hide().fadeIn();
         | 
| 100 | 
            +
              }
         | 
| 101 | 
            +
              else {
         | 
| 102 | 
            +
                $('#noresults').text('');
         | 
| 103 | 
            +
              }
         | 
| 104 | 
            +
              $('#content').removeClass('insearch');
         | 
| 105 | 
            +
              clearTimeout(inSearch);
         | 
| 106 | 
            +
              inSearch = null;
         | 
| 107 | 
            +
            }
         | 
| 108 | 
            +
             | 
| 109 | 
            +
            clicked = null;
         | 
| 110 | 
            +
            function linkList() {
         | 
| 111 | 
            +
              $('#full_list li, #full_list li a:last').click(function(evt) {
         | 
| 112 | 
            +
                if ($(this).hasClass('toggle')) return true;
         | 
| 113 | 
            +
                if (this.tagName.toLowerCase() == "li") {
         | 
| 114 | 
            +
                  var toggle = $(this).children('a.toggle');
         | 
| 115 | 
            +
                  if (toggle.size() > 0 && evt.pageX < toggle.offset().left) {
         | 
| 116 | 
            +
                    toggle.click();
         | 
| 117 | 
            +
                    return false;
         | 
| 118 | 
            +
                  }
         | 
| 119 | 
            +
                }
         | 
| 120 | 
            +
                if (clicked) clicked.removeClass('clicked');
         | 
| 121 | 
            +
                var win = window.top.frames.main ? window.top.frames.main : window.parent;
         | 
| 122 | 
            +
                if (this.tagName.toLowerCase() == "a") {
         | 
| 123 | 
            +
                  clicked = $(this).parent('li').addClass('clicked');
         | 
| 124 | 
            +
                  win.location = this.href;
         | 
| 125 | 
            +
                }
         | 
| 126 | 
            +
                else {
         | 
| 127 | 
            +
                  clicked = $(this).addClass('clicked');
         | 
| 128 | 
            +
                  win.location = $(this).find('a:last').attr('href');
         | 
| 129 | 
            +
                }
         | 
| 130 | 
            +
                return false;
         | 
| 131 | 
            +
              });
         | 
| 132 | 
            +
            }
         | 
| 133 | 
            +
             | 
| 134 | 
            +
            function collapse() {
         | 
| 135 | 
            +
              if (!$('#full_list').hasClass('class')) return;
         | 
| 136 | 
            +
              $('#full_list.class a.toggle').click(function() {
         | 
| 137 | 
            +
                $(this).parent().toggleClass('collapsed').next().toggleClass('collapsed');
         | 
| 138 | 
            +
                highlight();
         | 
| 139 | 
            +
                return false;
         | 
| 140 | 
            +
              });
         | 
| 141 | 
            +
              $('#full_list.class ul').each(function() {
         | 
| 142 | 
            +
                $(this).addClass('collapsed').prev().addClass('collapsed');
         | 
| 143 | 
            +
              });
         | 
| 144 | 
            +
              $('#full_list.class').children().removeClass('collapsed');
         | 
| 145 | 
            +
              highlight();
         | 
| 146 | 
            +
            }
         | 
| 147 | 
            +
             | 
| 148 | 
            +
            function highlight(no_padding) {
         | 
| 149 | 
            +
              var n = 1;
         | 
| 150 | 
            +
              $('#full_list li:visible').each(function() {
         | 
| 151 | 
            +
                var next = n == 1 ? 2 : 1;
         | 
| 152 | 
            +
                $(this).removeClass("r" + next).addClass("r" + n);
         | 
| 153 | 
            +
                if (!no_padding && $('#full_list').hasClass('class')) {
         | 
| 154 | 
            +
                  $(this).css('padding-left', (10 + $(this).parents('ul').size() * 15) + 'px');
         | 
| 155 | 
            +
                }
         | 
| 156 | 
            +
                n = next;
         | 
| 157 | 
            +
              });
         | 
| 158 | 
            +
            }
         | 
| 159 | 
            +
             | 
| 160 | 
            +
            function escapeShortcut() {
         | 
| 161 | 
            +
              $(document).keydown(function(evt) {
         | 
| 162 | 
            +
                if (evt.which == 27) {
         | 
| 163 | 
            +
                  $('#search_frame', window.top.document).slideUp(100);
         | 
| 164 | 
            +
                  $('#search a', window.top.document).removeClass('active inactive');
         | 
| 165 | 
            +
                  $(window.top).focus();
         | 
| 166 | 
            +
                }
         | 
| 167 | 
            +
              });
         | 
| 168 | 
            +
            }
         | 
| 169 | 
            +
             | 
| 170 | 
            +
            $(escapeShortcut);
         | 
| 171 | 
            +
            $(fullListSearch);
         | 
| 172 | 
            +
            $(linkList);
         | 
| 173 | 
            +
            $(collapse);
         |