marathon_deploy 0.1.6 → 0.1.7
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/.gitignore +0 -1
- data/bin/expand_macros +0 -0
- data/bin/json2yaml +0 -0
- data/doc/MarathonDeploy/Application.html +906 -0
- data/doc/MarathonDeploy/Deployment.html +1348 -0
- data/doc/MarathonDeploy/Environment.html +480 -0
- data/doc/MarathonDeploy/Error/BadFormatError.html +131 -0
- data/doc/MarathonDeploy/Error/BadURLError.html +131 -0
- data/doc/MarathonDeploy/Error/DeploymentError.html +131 -0
- data/doc/MarathonDeploy/Error/IOError.html +131 -0
- data/doc/MarathonDeploy/Error/MarathonError.html +127 -0
- data/doc/MarathonDeploy/Error/MissingMarathonAttributesError.html +131 -0
- data/doc/MarathonDeploy/Error/TimeoutError.html +131 -0
- data/doc/MarathonDeploy/Error/UndefinedMacroError.html +131 -0
- data/doc/MarathonDeploy/Error/UnsupportedFileExtension.html +131 -0
- data/doc/MarathonDeploy/Error.html +115 -0
- data/doc/MarathonDeploy/HttpUtil.html +664 -0
- data/doc/MarathonDeploy/Macro.html +192 -0
- data/doc/MarathonDeploy/MarathonClient.html +615 -0
- data/doc/MarathonDeploy/MarathonDefaults.html +460 -0
- data/doc/MarathonDeploy/Utils.html +354 -0
- data/doc/MarathonDeploy/YamlJson.html +374 -0
- data/doc/MarathonDeploy.html +156 -0
- data/doc/_index.html +318 -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 +223 -0
- data/doc/file_list.html +60 -0
- data/doc/frames.html +26 -0
- data/doc/index.html +223 -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 +393 -0
- data/doc/top-level-namespace.html +112 -0
- data/lib/marathon_deploy/application.rb +7 -7
- data/lib/marathon_deploy/version.rb +1 -1
- data/lib/marathon_deploy.rb +1 -0
- data/marathon_deploy.gemspec +1 -0
- metadata +52 -3
data/doc/index.html
ADDED
@@ -0,0 +1,223 @@
|
|
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-Marathon+Deploy">Marathon Deploy</h1>
|
66
|
+
|
67
|
+
<p>A <a href="https://mesosphere.github.io/marathon/">Marathon</a>
|
68
|
+
command-line deployment tool in Ruby. Takes a json or yaml file describing
|
69
|
+
an application and pushes it to the Marathon <a
|
70
|
+
href="https://mesosphere.github.io/marathon/docs/rest-api.html">REST
|
71
|
+
API</a></p>
|
72
|
+
|
73
|
+
<h3 id="label-Feature+Summary">Feature Summary</h3>
|
74
|
+
<ul><li>
|
75
|
+
<p>Deploy a single application descriptor to multiple marathon endpoints</p>
|
76
|
+
</li><li>
|
77
|
+
<p>Checks for existing deployment of application before starting new
|
78
|
+
deployment</p>
|
79
|
+
</li><li>
|
80
|
+
<p>Polls for Healthcheck results after deployment</p>
|
81
|
+
</li><li>
|
82
|
+
<p>Proper exit codes for easier integration with Jenkins automated pipelines</p>
|
83
|
+
</li><li>
|
84
|
+
<p>Deploy file macro substitution using values from ENV variables (eg,
|
85
|
+
%%MACRO_NAME%%)</p>
|
86
|
+
</li><li>
|
87
|
+
<p>PRODUCTION / PREPRODUCTION modes (specified with –environment)</p>
|
88
|
+
</li><li>
|
89
|
+
<p>Rolling upgrade deployment strategy (Marathon default)</p>
|
90
|
+
</li></ul>
|
91
|
+
|
92
|
+
<h3 id="label-Roadmap+Features">Roadmap Features</h3>
|
93
|
+
<ul><li>
|
94
|
+
<p>Record actions and json payload to a database (for rollback, history,
|
95
|
+
auditing)</p>
|
96
|
+
</li><li>
|
97
|
+
<p>Deploy a deployment descriptor containing multiple applications</p>
|
98
|
+
</li><li>
|
99
|
+
<p>Specify deployment strategy (using minimumHealthCapacity) as an option. See
|
100
|
+
<a
|
101
|
+
href="https://mesosphere.github.io/marathon/docs/deployments.html">Marathon
|
102
|
+
Deployment document</a></p>
|
103
|
+
</li></ul>
|
104
|
+
|
105
|
+
<h2 id="label-Installation">Installation</h2>
|
106
|
+
|
107
|
+
<p>Ensure Ruby (1.9+) and gem are installed on you system, then run:</p>
|
108
|
+
|
109
|
+
<pre class="code ruby"><code class="ruby">$ gem install marathon_deploy</code></pre>
|
110
|
+
|
111
|
+
<p>Executables from this gem (automatically added to your $PATH):</p>
|
112
|
+
|
113
|
+
<pre class="code ruby"><code class="ruby">$ marathon_deploy (client program executable)
|
114
|
+
$ json2yaml.rb (convenience utility for converting json to yaml)
|
115
|
+
$ expand_macros.rb (expands all macros in the form %%MACRO%% with value of ENV[MACRO])</code></pre>
|
116
|
+
|
117
|
+
<h2 id="label-Usage">Usage</h2>
|
118
|
+
|
119
|
+
<h3 id="label-Help">Help</h3>
|
120
|
+
|
121
|
+
<pre class="code ruby"><code class="ruby">>marathon_deploy -h
|
122
|
+
Usage: bin/marathon_deploy [options]
|
123
|
+
-u, --url MARATHON_URL(S) Default: ["http://localhost:8080"]
|
124
|
+
-l, --logfile LOGFILE Default: STDOUT
|
125
|
+
-d, --debug Run in debug mode
|
126
|
+
-v, --version Version info
|
127
|
+
-f, --force Force deployment when sending same deploy JSON to Marathon
|
128
|
+
-n, --noop No action. Just display what would be performed.
|
129
|
+
-e, --environment ENVIRONMENT Default: PREPRODUC</code></pre>
|
130
|
+
|
131
|
+
<h3 id="label-Example+Deployfile">Example Deployfile</h3>
|
132
|
+
|
133
|
+
<p>By default, a file called 'deploy.yaml' is searched for in the
|
134
|
+
current directory where deploy.rb is run from. An alternative file name can
|
135
|
+
be provided with the -f parameter.</p>
|
136
|
+
|
137
|
+
<p>The file format must conform to the <a
|
138
|
+
href="https://mesosphere.github.io/marathon/docs/rest-api.html#post-/v2/apps">Marathon
|
139
|
+
API specification</a></p>
|
140
|
+
|
141
|
+
<p>Minimalistic example (using Docker container):</p>
|
142
|
+
|
143
|
+
<pre class="code ruby"><code class="ruby">id: python-example-stable
|
144
|
+
cmd: echo python stable `hostname` > index.html; python3 -m http.server 8080
|
145
|
+
mem: 16
|
146
|
+
cpus: 0.1
|
147
|
+
instances: 5
|
148
|
+
container:
|
149
|
+
type: DOCKER
|
150
|
+
docker:
|
151
|
+
image: ubuntu:14.04
|
152
|
+
network: BRIDGE
|
153
|
+
portMappings:
|
154
|
+
- containerPort: 8080
|
155
|
+
hostPort: 0
|
156
|
+
protocol: tcp
|
157
|
+
env:
|
158
|
+
SERVICE_TAGS: python,webapp,http,weight=100
|
159
|
+
SERVICE_NAME: python
|
160
|
+
healthChecks:
|
161
|
+
- portIndex: 0
|
162
|
+
protocol: TCP
|
163
|
+
gracePeriodSeconds: 30
|
164
|
+
intervalSeconds: 10
|
165
|
+
timeoutSeconds: 30
|
166
|
+
maxConsecutiveFailures: 3
|
167
|
+
- path: "/"
|
168
|
+
portIndex: 0
|
169
|
+
protocol: HTTP
|
170
|
+
gracePeriodSeconds: 30
|
171
|
+
intervalSeconds: 10
|
172
|
+
timeoutSeconds: 30
|
173
|
+
maxConsecutiveFailures: 3</code></pre>
|
174
|
+
|
175
|
+
<h3 id="label-JSON+to+YAML+file+conversion">JSON to YAML file conversion</h3>
|
176
|
+
|
177
|
+
<p>As a convenience, the provided json2yaml.rb script can convert a JSON file
|
178
|
+
to the arguably more human-readable YAML format:</p>
|
179
|
+
|
180
|
+
<pre class="code ruby"><code class="ruby"><span class='gvar'>$json2yaml</span><span class='period'>.</span><span class='id identifier rubyid_rb'>rb</span> <span class='id identifier rubyid_marathon'>marathon</span><span class='op'>-</span><span class='id identifier rubyid_webapp'>webapp</span><span class='period'>.</span><span class='id identifier rubyid_json'>json</span> <span class='op'>></span> <span class='id identifier rubyid_marathon'>marathon</span><span class='op'>-</span><span class='id identifier rubyid_webapp'>webapp</span><span class='period'>.</span><span class='id identifier rubyid_yaml'>yaml</span>
|
181
|
+
</code></pre>
|
182
|
+
|
183
|
+
<h3 id="label-Parsing+a+file+with+macro+expansion+from+ENV+variables">Parsing a file with macro expansion from ENV variables</h3>
|
184
|
+
|
185
|
+
<p>A helper script which takes a file and replaces all macros having the
|
186
|
+
format %%MACRO%% with the values from ENV variables. Script will fail if
|
187
|
+
there are no ENV values for macro names contained in the template.</p>
|
188
|
+
|
189
|
+
<pre class="code ruby"><code class="ruby">$expand_macros.rb -h
|
190
|
+
Usage: bin/expand_macros.rb [options]
|
191
|
+
-o, --outfile OUTFILE Default: STDOUT
|
192
|
+
-l, --logfile LOGFILE Default: STDOUT
|
193
|
+
-d, --debug Run in debug mode
|
194
|
+
-v, --version Version info
|
195
|
+
-f, --force force overwrite of existing OUTFILE
|
196
|
+
-t, --template TEMPLATE_FILE Input file. Default: dockerfile.tpl
|
197
|
+
-h, --help Show this message</code></pre>
|
198
|
+
|
199
|
+
<h2 id="label-Contributing">Contributing</h2>
|
200
|
+
<ol><li>
|
201
|
+
<p>Fork it ( <a
|
202
|
+
href="https://github.com/[my-github-username]/marathon_deploy/fork">github.com/[my-github-username]/marathon_deploy/fork</a>
|
203
|
+
)</p>
|
204
|
+
</li><li>
|
205
|
+
<p>Create your feature branch (<code>git checkout -b my-new-feature</code>)</p>
|
206
|
+
</li><li>
|
207
|
+
<p>Commit your changes (<code>git commit -am 'Add some
|
208
|
+
feature'</code>)</p>
|
209
|
+
</li><li>
|
210
|
+
<p>Push to the branch (<code>git push origin my-new-feature</code>)</p>
|
211
|
+
</li><li>
|
212
|
+
<p>Create a new Pull Request</p>
|
213
|
+
</li></ol>
|
214
|
+
</div></div>
|
215
|
+
|
216
|
+
<div id="footer">
|
217
|
+
Generated on Thu Aug 6 12:50:37 2015 by
|
218
|
+
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
219
|
+
0.8.7.6 (ruby-2.2.0).
|
220
|
+
</div>
|
221
|
+
|
222
|
+
</body>
|
223
|
+
</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);
|