meroku 2.0.8 → 2.0.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +9 -5
  3. data/bin/meroku +1 -1
  4. data/circle.yml +23 -0
  5. data/frontend/Gemfile +5 -2
  6. data/frontend/Gemfile.lock +5 -2
  7. data/frontend/app/controllers/application_controller.rb +1 -0
  8. data/frontend/app/controllers/apps_controller.rb +46 -48
  9. data/frontend/app/controllers/publickeys_controller.rb +45 -46
  10. data/frontend/app/controllers/users/registrations_controller.rb +0 -15
  11. data/frontend/app/controllers/users/sessions_controller.rb +12 -3
  12. data/frontend/app/lib/cmd.rb +11 -0
  13. data/frontend/app/models/app.rb +18 -11
  14. data/frontend/app/models/publickey.rb +1 -1
  15. data/frontend/app/models/user.rb +5 -4
  16. data/frontend/app/policies/application_policy.rb +53 -0
  17. data/frontend/app/policies/publickey_policy.rb +7 -0
  18. data/frontend/app/serializable/serializable_user.rb +2 -1
  19. data/frontend/app/views/layouts/application.html.erb +1 -1
  20. data/frontend/config/database.yml +72 -10
  21. data/frontend/config/routes.rb +6 -14
  22. data/frontend/db/migrate/20171028150506_add_apisecret_to_users.rb +6 -0
  23. data/frontend/etc_nginx_sites-enabled_default +1 -1
  24. data/frontend/public/Meroku.html +140 -0
  25. data/frontend/public/Meroku/Api.html +129 -0
  26. data/frontend/public/Meroku/Api/Request.html +221 -0
  27. data/frontend/public/Meroku/Aws.html +212 -0
  28. data/frontend/public/Meroku/Aws/Ec2.html +477 -0
  29. data/frontend/public/Meroku/CLI.html +784 -0
  30. data/frontend/public/Meroku/CLI/AdminUser.html +192 -0
  31. data/frontend/public/Meroku/CLI/Help.html +224 -0
  32. data/frontend/public/Meroku/CLI/Secrets.html +191 -0
  33. data/frontend/public/Meroku/CLI/Session.html +460 -0
  34. data/frontend/public/Meroku/CLI/User.html +182 -0
  35. data/frontend/public/Meroku/Extensions.html +405 -0
  36. data/frontend/public/Meroku/Infrastructure.html +279 -0
  37. data/frontend/public/Meroku/Infrastructure/Node.html +785 -0
  38. data/frontend/public/Meroku/Infrastructure/Server.html +373 -0
  39. data/frontend/public/Meroku/Node.html +845 -0
  40. data/frontend/public/Meroku/Tunnel.html +701 -0
  41. data/frontend/public/Meroku/Tunnelable.html +243 -0
  42. data/frontend/public/_index.html +273 -0
  43. data/frontend/public/class_list.html +51 -0
  44. data/frontend/public/css/common.css +1 -0
  45. data/frontend/public/css/full_list.css +58 -0
  46. data/frontend/public/css/style.css +492 -0
  47. data/frontend/public/file.README.html +181 -0
  48. data/frontend/public/file_list.html +56 -0
  49. data/frontend/public/frames.html +17 -0
  50. data/frontend/public/index.html +181 -0
  51. data/frontend/public/js/app.js +248 -0
  52. data/frontend/public/js/full_list.js +216 -0
  53. data/frontend/public/js/jquery.js +4 -0
  54. data/frontend/public/method_list.html +395 -0
  55. data/frontend/public/robots.txt +2 -1
  56. data/frontend/public/top-level-namespace.html +110 -0
  57. data/frontend/test/policies/publickey_policy_test.rb +19 -0
  58. data/lib/meroku.rb +9 -7
  59. data/lib/meroku/api.rb +8 -0
  60. data/lib/meroku/api/request.rb +17 -0
  61. data/lib/meroku/aws.rb +14 -0
  62. data/lib/meroku/aws/ec2.rb +59 -0
  63. data/lib/meroku/cli.rb +80 -81
  64. data/lib/meroku/cli/help.rb +27 -0
  65. data/lib/meroku/cli/secrets.rb +13 -0
  66. data/lib/meroku/cli/session.rb +32 -51
  67. data/lib/meroku/extensions.rb +32 -0
  68. data/lib/meroku/infrastructure.rb +14 -17
  69. data/lib/meroku/infrastructure/server.rb +20 -0
  70. data/lib/meroku/node.rb +113 -0
  71. data/lib/meroku/tunnelable.rb +31 -0
  72. data/lib/meroku/version.rb +1 -1
  73. data/modified-cedar-14.sh +0 -4
  74. metadata +50 -9
  75. data/frontend/app/controllers/pages_controller.rb +0 -4
  76. data/frontend/app/views/pages/landing.html.erb +0 -2
  77. data/frontend/db/migrate/20171025193627_add_token_to_users.rb +0 -5
  78. data/lib/meroku/cli/admin_user.rb +0 -20
  79. data/lib/meroku/cli/user.rb +0 -14
  80. data/lib/meroku/infrastructure/node.rb +0 -102
  81. data/lib/meroku/tunnel.rb +0 -56
@@ -0,0 +1,181 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>
7
+ File: README
8
+
9
+ &mdash; Documentation by YARD 0.9.9
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
+ pathId = "README";
19
+ relpath = '';
20
+ </script>
21
+
22
+
23
+ <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
24
+
25
+ <script type="text/javascript" charset="utf-8" src="js/app.js"></script>
26
+
27
+
28
+ </head>
29
+ <body>
30
+ <div class="nav_wrap">
31
+ <iframe id="nav" src="file_list.html?1"></iframe>
32
+ <div id="resizer"></div>
33
+ </div>
34
+
35
+ <div id="main" tabindex="-1">
36
+ <div id="header">
37
+ <div id="menu">
38
+
39
+ <a href="_index.html">Index</a> &raquo;
40
+ <span class="title">File: README</span>
41
+
42
+ </div>
43
+
44
+ <div id="search">
45
+
46
+ <a class="full_list_link" id="class_list_link"
47
+ href="class_list.html">
48
+
49
+ <svg width="24" height="24">
50
+ <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
51
+ <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
52
+ <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
53
+ </svg>
54
+ </a>
55
+
56
+ </div>
57
+ <div class="clear"></div>
58
+ </div>
59
+
60
+ <div id="content"><div id='filecontents'>
61
+ <p><a href="https://travis-ci.org/oystersauce8/meroku"><img
62
+ src="https://travis-ci.org/oystersauce8/meroku.svg?branch=master"></a> <a
63
+ href="https://coveralls.io/github/oystersauce8/meroku?branch=master"><img
64
+ src="https://coveralls.io/repos/github/oystersauce8/meroku/badge.svg?branch=master"></a>
65
+ <a
66
+ href="https://codeclimate.com/github/oystersauce8/meroku/maintainability"><img
67
+ src="https://api.codeclimate.com/v1/badges/266f087c272cd3ca268e/maintainability"></a>
68
+ <a href="https://gemnasium.com/github.com/oystersauce8/meroku"><img
69
+ src="https://gemnasium.com/badges/github.com/oystersauce8/meroku.svg"></a>
70
+ <a href="https://badge.fury.io/rb/meroku"><img
71
+ src="https://badge.fury.io/rb/meroku.svg"></a></p>
72
+
73
+ <h1 id="label-Getting+started">Getting started</h1>
74
+
75
+ <p>Ruby on Rails is a popular web framework written in Ruby. This guide covers
76
+ using Rails 5 on Meroku. To follow along, you need</p>
77
+ <ul><li>
78
+ <p>Basic Ruby/Rails knowledge.</p>
79
+ </li><li>
80
+ <p>A locally installed version of Ruby 2.4.2+, Rubygems, Bundler, and Rails
81
+ 5+.</p>
82
+ </li><li>
83
+ <p>Basic Git knowledge.</p>
84
+ </li></ul>
85
+
86
+ <p>Install the meroku gem on your local workstation</p>
87
+
88
+ <pre class="code ruby"><code class="ruby">$ gem install meroku</code></pre>
89
+
90
+ <p>Once installed, you’ll have access to the <code>$ meroku</code> command
91
+ from your command shell.</p>
92
+
93
+ <pre class="code ruby"><code class="ruby">$ meroku signup # if you haven&#39;t done already</code></pre>
94
+
95
+ <p>Make sure you&#39;re running the latest version of ruby</p>
96
+
97
+ <pre class="code ruby"><code class="ruby">$ cd ~; ruby --version
98
+ ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-darwin16]</code></pre>
99
+
100
+ <p>Install the rails gem if you haven&#39;t done already</p>
101
+
102
+ <pre class="code ruby"><code class="ruby">$ gem install rails --no-ri --no-rdoc
103
+ Successfully installed rails-5.1.4
104
+ 1 gem installed</code></pre>
105
+
106
+ <p>Then create a new app:</p>
107
+
108
+ <pre class="code ruby"><code class="ruby">$ rails new myapp --database=postgresql</code></pre>
109
+
110
+ <p>Then move into your application directory.</p>
111
+
112
+ <pre class="code ruby"><code class="ruby">$ cd myapp</code></pre>
113
+
114
+ <p>Mention you want to the latest ruby version</p>
115
+
116
+ <pre class="code ruby"><code class="ruby">$ echo &quot;2.4.2&quot; &gt; .ruby-version</code></pre>
117
+
118
+ <p>And commit it</p>
119
+
120
+ <pre class="code ruby"><code class="ruby">$ git add --all; git commit -m &quot;Added ruby version&quot;;</code></pre>
121
+
122
+ <p>Register your application with meroku</p>
123
+
124
+ <pre class="code ruby"><code class="ruby">$ meroku create
125
+ Creating app... done</code></pre>
126
+
127
+ <p>Add your public key to meroku</p>
128
+
129
+ <pre class="code ruby"><code class="ruby">$ meroku keys:add</code></pre>
130
+
131
+ <p>And deploy</p>
132
+
133
+ <pre class="code ruby"><code class="ruby">$ git push meroku master
134
+ $ meroku run rake db:migrate</code></pre>
135
+
136
+ <h2 id="label-DOCUMENTATION+FOR+MAINTAINERS">DOCUMENTATION FOR MAINTAINERS</h2>
137
+
138
+ <h3 id="label-Prereqs">Prereqs</h3>
139
+
140
+ <p>You will need a copy of the file <code>.secret</code>. Place it at
141
+ <code>~/.meroku/.secret</code></p>
142
+
143
+ <h3 id="label-Commands">Commands</h3>
144
+
145
+ <pre class="code ruby"><code class="ruby">$ meroku infrastructure spawn
146
+ $ meroku infrastructure despawn
147
+
148
+ $ rubocop -D -F --except FrozenStringLiteralComment,StringLiterals,MutableConstant lib/
149
+ Inspecting 15 files
150
+ ...............
151
+
152
+ 15 files inspected, no offenses detected
153
+ $</code></pre>
154
+
155
+ <h3 id="label-TODO">TODO</h3>
156
+
157
+ <pre class="code ruby"><code class="ruby">- Only latest stable ruby is supported at the moment
158
+ - Only latest stable rails is supported at the moment
159
+ - Only RAILS_ENV=procution is supported at the moment
160
+ - Only puma is supported at the moment
161
+
162
+ - Nightly spawn
163
+ - respons time sanity check and full-lifecycle topics
164
+ - piper visual check
165
+ - some commodity apps</code></pre>
166
+
167
+ <h3 id="label-To+Run+tests">To Run tests</h3>
168
+
169
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_rake'>rake</span>
170
+ </code></pre>
171
+ </div></div>
172
+
173
+ <div id="footer">
174
+ Generated on Tue Oct 31 19:39:54 2017 by
175
+ <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
176
+ 0.9.9 (ruby-2.4.2).
177
+ </div>
178
+
179
+ </div>
180
+ </body>
181
+ </html>
@@ -0,0 +1,56 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
5
+ <meta 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
+ <title>File List</title>
19
+ <base id="base_target" target="_parent" />
20
+ </head>
21
+ <body>
22
+ <div id="content">
23
+ <div class="fixed_header">
24
+ <h1 id="full_list_header">File List</h1>
25
+ <div id="full_list_nav">
26
+
27
+ <span><a target="_self" href="class_list.html">
28
+ Classes
29
+ </a></span>
30
+
31
+ <span><a target="_self" href="method_list.html">
32
+ Methods
33
+ </a></span>
34
+
35
+ <span><a target="_self" href="file_list.html">
36
+ Files
37
+ </a></span>
38
+
39
+ </div>
40
+
41
+ <div id="search">Search: <input type="text" /></div>
42
+ </div>
43
+
44
+ <ul id="full_list" class="file">
45
+
46
+
47
+ <li id="object_README" class="odd">
48
+ <div class="item"><span class="object_link"><a href="index.html" title="README">README</a></span></div>
49
+ </li>
50
+
51
+
52
+
53
+ </ul>
54
+ </div>
55
+ </body>
56
+ </html>
@@ -0,0 +1,17 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <title>Documentation by YARD 0.9.9</title>
6
+ </head>
7
+ <script type="text/javascript" charset="utf-8">
8
+ var match = unescape(window.location.hash).match(/^#!(.+)/);
9
+ var name = match ? match[1] : 'index.html';
10
+ name = name.replace(/^(\w+):\/\//, '').replace(/^\/\//, '');
11
+ window.top.location = name;
12
+ </script>
13
+ <noscript>
14
+ <h1>Oops!</h1>
15
+ <h2>YARD requires JavaScript!</h2>
16
+ </noscript>
17
+ </html>
@@ -0,0 +1,181 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>
7
+ File: README
8
+
9
+ &mdash; Documentation by YARD 0.9.9
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
+ pathId = "README";
19
+ relpath = '';
20
+ </script>
21
+
22
+
23
+ <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
24
+
25
+ <script type="text/javascript" charset="utf-8" src="js/app.js"></script>
26
+
27
+
28
+ </head>
29
+ <body>
30
+ <div class="nav_wrap">
31
+ <iframe id="nav" src="class_list.html?1"></iframe>
32
+ <div id="resizer"></div>
33
+ </div>
34
+
35
+ <div id="main" tabindex="-1">
36
+ <div id="header">
37
+ <div id="menu">
38
+
39
+ <a href="_index.html">Index</a> &raquo;
40
+ <span class="title">File: README</span>
41
+
42
+ </div>
43
+
44
+ <div id="search">
45
+
46
+ <a class="full_list_link" id="class_list_link"
47
+ href="class_list.html">
48
+
49
+ <svg width="24" height="24">
50
+ <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
51
+ <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
52
+ <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
53
+ </svg>
54
+ </a>
55
+
56
+ </div>
57
+ <div class="clear"></div>
58
+ </div>
59
+
60
+ <div id="content"><div id='filecontents'>
61
+ <p><a href="https://travis-ci.org/oystersauce8/meroku"><img
62
+ src="https://travis-ci.org/oystersauce8/meroku.svg?branch=master"></a> <a
63
+ href="https://coveralls.io/github/oystersauce8/meroku?branch=master"><img
64
+ src="https://coveralls.io/repos/github/oystersauce8/meroku/badge.svg?branch=master"></a>
65
+ <a
66
+ href="https://codeclimate.com/github/oystersauce8/meroku/maintainability"><img
67
+ src="https://api.codeclimate.com/v1/badges/266f087c272cd3ca268e/maintainability"></a>
68
+ <a href="https://gemnasium.com/github.com/oystersauce8/meroku"><img
69
+ src="https://gemnasium.com/badges/github.com/oystersauce8/meroku.svg"></a>
70
+ <a href="https://badge.fury.io/rb/meroku"><img
71
+ src="https://badge.fury.io/rb/meroku.svg"></a></p>
72
+
73
+ <h1 id="label-Getting+started">Getting started</h1>
74
+
75
+ <p>Ruby on Rails is a popular web framework written in Ruby. This guide covers
76
+ using Rails 5 on Meroku. To follow along, you need</p>
77
+ <ul><li>
78
+ <p>Basic Ruby/Rails knowledge.</p>
79
+ </li><li>
80
+ <p>A locally installed version of Ruby 2.4.2+, Rubygems, Bundler, and Rails
81
+ 5+.</p>
82
+ </li><li>
83
+ <p>Basic Git knowledge.</p>
84
+ </li></ul>
85
+
86
+ <p>Install the meroku gem on your local workstation</p>
87
+
88
+ <pre class="code ruby"><code class="ruby">$ gem install meroku</code></pre>
89
+
90
+ <p>Once installed, you’ll have access to the <code>$ meroku</code> command
91
+ from your command shell.</p>
92
+
93
+ <pre class="code ruby"><code class="ruby">$ meroku signup # if you haven&#39;t done already</code></pre>
94
+
95
+ <p>Make sure you&#39;re running the latest version of ruby</p>
96
+
97
+ <pre class="code ruby"><code class="ruby">$ cd ~; ruby --version
98
+ ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-darwin16]</code></pre>
99
+
100
+ <p>Install the rails gem if you haven&#39;t done already</p>
101
+
102
+ <pre class="code ruby"><code class="ruby">$ gem install rails --no-ri --no-rdoc
103
+ Successfully installed rails-5.1.4
104
+ 1 gem installed</code></pre>
105
+
106
+ <p>Then create a new app:</p>
107
+
108
+ <pre class="code ruby"><code class="ruby">$ rails new myapp --database=postgresql</code></pre>
109
+
110
+ <p>Then move into your application directory.</p>
111
+
112
+ <pre class="code ruby"><code class="ruby">$ cd myapp</code></pre>
113
+
114
+ <p>Mention you want to the latest ruby version</p>
115
+
116
+ <pre class="code ruby"><code class="ruby">$ echo &quot;2.4.2&quot; &gt; .ruby-version</code></pre>
117
+
118
+ <p>And commit it</p>
119
+
120
+ <pre class="code ruby"><code class="ruby">$ git add --all; git commit -m &quot;Added ruby version&quot;;</code></pre>
121
+
122
+ <p>Register your application with meroku</p>
123
+
124
+ <pre class="code ruby"><code class="ruby">$ meroku create
125
+ Creating app... done</code></pre>
126
+
127
+ <p>Add your public key to meroku</p>
128
+
129
+ <pre class="code ruby"><code class="ruby">$ meroku keys:add</code></pre>
130
+
131
+ <p>And deploy</p>
132
+
133
+ <pre class="code ruby"><code class="ruby">$ git push meroku master
134
+ $ meroku run rake db:migrate</code></pre>
135
+
136
+ <h2 id="label-DOCUMENTATION+FOR+MAINTAINERS">DOCUMENTATION FOR MAINTAINERS</h2>
137
+
138
+ <h3 id="label-Prereqs">Prereqs</h3>
139
+
140
+ <p>You will need a copy of the file <code>.secret</code>. Place it at
141
+ <code>~/.meroku/.secret</code></p>
142
+
143
+ <h3 id="label-Commands">Commands</h3>
144
+
145
+ <pre class="code ruby"><code class="ruby">$ meroku infrastructure spawn
146
+ $ meroku infrastructure despawn
147
+
148
+ $ rubocop -D -F --except FrozenStringLiteralComment,StringLiterals,MutableConstant lib/
149
+ Inspecting 15 files
150
+ ...............
151
+
152
+ 15 files inspected, no offenses detected
153
+ $</code></pre>
154
+
155
+ <h3 id="label-TODO">TODO</h3>
156
+
157
+ <pre class="code ruby"><code class="ruby">- Only latest stable ruby is supported at the moment
158
+ - Only latest stable rails is supported at the moment
159
+ - Only RAILS_ENV=procution is supported at the moment
160
+ - Only puma is supported at the moment
161
+
162
+ - Nightly spawn
163
+ - respons time sanity check and full-lifecycle topics
164
+ - piper visual check
165
+ - some commodity apps</code></pre>
166
+
167
+ <h3 id="label-To+Run+tests">To Run tests</h3>
168
+
169
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_rake'>rake</span>
170
+ </code></pre>
171
+ </div></div>
172
+
173
+ <div id="footer">
174
+ Generated on Tue Oct 31 19:39:54 2017 by
175
+ <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
176
+ 0.9.9 (ruby-2.4.2).
177
+ </div>
178
+
179
+ </div>
180
+ </body>
181
+ </html>
@@ -0,0 +1,248 @@
1
+ (function() {
2
+
3
+ var localStorage = {}, sessionStorage = {};
4
+ try { localStorage = window.localStorage; } catch (e) { }
5
+ try { sessionStorage = window.sessionStorage; } catch (e) { }
6
+
7
+ function createSourceLinks() {
8
+ $('.method_details_list .source_code').
9
+ before("<span class='showSource'>[<a href='#' class='toggleSource'>View source</a>]</span>");
10
+ $('.toggleSource').toggle(function() {
11
+ $(this).parent().nextAll('.source_code').slideDown(100);
12
+ $(this).text("Hide source");
13
+ },
14
+ function() {
15
+ $(this).parent().nextAll('.source_code').slideUp(100);
16
+ $(this).text("View source");
17
+ });
18
+ }
19
+
20
+ function createDefineLinks() {
21
+ var tHeight = 0;
22
+ $('.defines').after(" <a href='#' class='toggleDefines'>more...</a>");
23
+ $('.toggleDefines').toggle(function() {
24
+ tHeight = $(this).parent().prev().height();
25
+ $(this).prev().css('display', 'inline');
26
+ $(this).parent().prev().height($(this).parent().height());
27
+ $(this).text("(less)");
28
+ },
29
+ function() {
30
+ $(this).prev().hide();
31
+ $(this).parent().prev().height(tHeight);
32
+ $(this).text("more...");
33
+ });
34
+ }
35
+
36
+ function createFullTreeLinks() {
37
+ var tHeight = 0;
38
+ $('.inheritanceTree').toggle(function() {
39
+ tHeight = $(this).parent().prev().height();
40
+ $(this).parent().toggleClass('showAll');
41
+ $(this).text("(hide)");
42
+ $(this).parent().prev().height($(this).parent().height());
43
+ },
44
+ function() {
45
+ $(this).parent().toggleClass('showAll');
46
+ $(this).parent().prev().height(tHeight);
47
+ $(this).text("show all");
48
+ });
49
+ }
50
+
51
+ function searchFrameButtons() {
52
+ $('.full_list_link').click(function() {
53
+ toggleSearchFrame(this, $(this).attr('href'));
54
+ return false;
55
+ });
56
+ window.addEventListener('message', function(e) {
57
+ if (e.data === 'navEscape') {
58
+ $('#nav').slideUp(100);
59
+ $('#search a').removeClass('active inactive');
60
+ $(window).focus();
61
+ }
62
+ });
63
+
64
+ $(window).resize(function() {
65
+ if ($('#search:visible').length === 0) {
66
+ $('#nav').removeAttr('style');
67
+ $('#search a').removeClass('active inactive');
68
+ $(window).focus();
69
+ }
70
+ });
71
+ }
72
+
73
+ function toggleSearchFrame(id, link) {
74
+ var frame = $('#nav');
75
+ $('#search a').removeClass('active').addClass('inactive');
76
+ if (frame.attr('src') === link && frame.css('display') !== "none") {
77
+ frame.slideUp(100);
78
+ $('#search a').removeClass('active inactive');
79
+ }
80
+ else {
81
+ $(id).addClass('active').removeClass('inactive');
82
+ if (frame.attr('src') !== link) frame.attr('src', link);
83
+ frame.slideDown(100);
84
+ }
85
+ }
86
+
87
+ function linkSummaries() {
88
+ $('.summary_signature').click(function() {
89
+ document.location = $(this).find('a').attr('href');
90
+ });
91
+ }
92
+
93
+ function summaryToggle() {
94
+ $('.summary_toggle').click(function(e) {
95
+ e.preventDefault();
96
+ localStorage.summaryCollapsed = $(this).text();
97
+ $('.summary_toggle').each(function() {
98
+ $(this).text($(this).text() == "collapse" ? "expand" : "collapse");
99
+ var next = $(this).parent().parent().nextAll('ul.summary').first();
100
+ if (next.hasClass('compact')) {
101
+ next.toggle();
102
+ next.nextAll('ul.summary').first().toggle();
103
+ }
104
+ else if (next.hasClass('summary')) {
105
+ var list = $('<ul class="summary compact" />');
106
+ list.html(next.html());
107
+ list.find('.summary_desc, .note').remove();
108
+ list.find('a').each(function() {
109
+ $(this).html($(this).find('strong').html());
110
+ $(this).parent().html($(this)[0].outerHTML);
111
+ });
112
+ next.before(list);
113
+ next.toggle();
114
+ }
115
+ });
116
+ return false;
117
+ });
118
+ if (localStorage.summaryCollapsed == "collapse") {
119
+ $('.summary_toggle').first().click();
120
+ } else { localStorage.summaryCollapsed = "expand"; }
121
+ }
122
+
123
+ function generateTOC() {
124
+ if ($('#filecontents').length === 0) return;
125
+ var _toc = $('<ol class="top"></ol>');
126
+ var show = false;
127
+ var toc = _toc;
128
+ var counter = 0;
129
+ var tags = ['h2', 'h3', 'h4', 'h5', 'h6'];
130
+ var i;
131
+ if ($('#filecontents h1').length > 1) tags.unshift('h1');
132
+ for (i = 0; i < tags.length; i++) { tags[i] = '#filecontents ' + tags[i]; }
133
+ var lastTag = parseInt(tags[0][1], 10);
134
+ $(tags.join(', ')).each(function() {
135
+ if ($(this).parents('.method_details .docstring').length != 0) return;
136
+ if (this.id == "filecontents") return;
137
+ show = true;
138
+ var thisTag = parseInt(this.tagName[1], 10);
139
+ if (this.id.length === 0) {
140
+ var proposedId = $(this).attr('toc-id');
141
+ if (typeof(proposedId) != "undefined") this.id = proposedId;
142
+ else {
143
+ var proposedId = $(this).text().replace(/[^a-z0-9-]/ig, '_');
144
+ if ($('#' + proposedId).length > 0) { proposedId += counter; counter++; }
145
+ this.id = proposedId;
146
+ }
147
+ }
148
+ if (thisTag > lastTag) {
149
+ for (i = 0; i < thisTag - lastTag; i++) {
150
+ var tmp = $('<ol/>'); toc.append(tmp); toc = tmp;
151
+ }
152
+ }
153
+ if (thisTag < lastTag) {
154
+ for (i = 0; i < lastTag - thisTag; i++) toc = toc.parent();
155
+ }
156
+ var title = $(this).attr('toc-title');
157
+ if (typeof(title) == "undefined") title = $(this).text();
158
+ toc.append('<li><a href="#' + this.id + '">' + title + '</a></li>');
159
+ lastTag = thisTag;
160
+ });
161
+ if (!show) return;
162
+ html = '<div id="toc"><p class="title hide_toc"><a href="#"><strong>Table of Contents</strong></a></p></div>';
163
+ $('#content').prepend(html);
164
+ $('#toc').append(_toc);
165
+ $('#toc .hide_toc').toggle(function() {
166
+ $('#toc .top').slideUp('fast');
167
+ $('#toc').toggleClass('hidden');
168
+ $('#toc .title small').toggle();
169
+ }, function() {
170
+ $('#toc .top').slideDown('fast');
171
+ $('#toc').toggleClass('hidden');
172
+ $('#toc .title small').toggle();
173
+ });
174
+ }
175
+
176
+ function navResizeFn(e) {
177
+ if (e.which !== 1) {
178
+ navResizeFnStop();
179
+ return;
180
+ }
181
+
182
+ sessionStorage.navWidth = e.pageX.toString();
183
+ $('.nav_wrap').css('width', e.pageX);
184
+ $('.nav_wrap').css('-ms-flex', 'inherit');
185
+ }
186
+
187
+ function navResizeFnStop() {
188
+ $(window).unbind('mousemove', navResizeFn);
189
+ window.removeEventListener('message', navMessageFn, false);
190
+ }
191
+
192
+ function navMessageFn(e) {
193
+ if (e.data.action === 'mousemove') navResizeFn(e.data.event);
194
+ if (e.data.action === 'mouseup') navResizeFnStop();
195
+ }
196
+
197
+ function navResizer() {
198
+ $('#resizer').mousedown(function(e) {
199
+ e.preventDefault();
200
+ $(window).mousemove(navResizeFn);
201
+ window.addEventListener('message', navMessageFn, false);
202
+ });
203
+ $(window).mouseup(navResizeFnStop);
204
+
205
+ if (sessionStorage.navWidth) {
206
+ navResizeFn({which: 1, pageX: parseInt(sessionStorage.navWidth, 10)});
207
+ }
208
+ }
209
+
210
+ function navExpander() {
211
+ var done = false, timer = setTimeout(postMessage, 500);
212
+ function postMessage() {
213
+ if (done) return;
214
+ clearTimeout(timer);
215
+ var opts = { action: 'expand', path: pathId };
216
+ document.getElementById('nav').contentWindow.postMessage(opts, '*');
217
+ done = true;
218
+ }
219
+
220
+ window.addEventListener('message', function(event) {
221
+ if (event.data === 'navReady') postMessage();
222
+ return false;
223
+ }, false);
224
+ }
225
+
226
+ function mainFocus() {
227
+ var hash = window.location.hash;
228
+ if (hash !== '' && $(hash)[0]) {
229
+ $(hash)[0].scrollIntoView();
230
+ }
231
+
232
+ setTimeout(function() { $('#main').focus(); }, 10);
233
+ }
234
+
235
+ $(document).ready(function() {
236
+ navResizer();
237
+ navExpander();
238
+ createSourceLinks();
239
+ createDefineLinks();
240
+ createFullTreeLinks();
241
+ searchFrameButtons();
242
+ linkSummaries();
243
+ summaryToggle();
244
+ generateTOC();
245
+ mainFocus();
246
+ });
247
+
248
+ })();