noah 0.0.5-jruby → 0.1-jruby
Sign up to get free protection for your applications and to get access to all the features.
- data/.gemtest +0 -0
- data/.gitignore +10 -0
- data/LICENSE +201 -0
- data/README.md +68 -212
- data/Rakefile +65 -41
- data/TODO.md +65 -0
- data/bin/noah +2 -1
- data/bin/noah-watcher.rb +103 -0
- data/config.ru +6 -3
- data/config/warble.rb +18 -0
- data/examples/README.md +116 -0
- data/examples/cluster.ru +2 -0
- data/examples/custom-watcher.rb +10 -0
- data/examples/httpclient-server.rb +7 -0
- data/examples/httpclient.rb +12 -0
- data/examples/httpclient2.rb +28 -0
- data/examples/js/FABridge.js +1452 -0
- data/examples/js/WebSocketMain.swf +830 -0
- data/examples/js/swfobject.js +851 -0
- data/examples/js/web_socket.js +312 -0
- data/examples/logger.rb +11 -0
- data/examples/reconfiguring-sinatra-watcher.rb +11 -0
- data/examples/reconfiguring-sinatra.rb +33 -0
- data/examples/simple-post.rb +17 -0
- data/examples/websocket.html +24 -0
- data/examples/websocket.rb +41 -0
- data/lib/noah.rb +6 -8
- data/lib/noah/app.rb +20 -268
- data/lib/noah/application_routes.rb +70 -0
- data/lib/noah/ark.rb +0 -0
- data/lib/noah/configuration_routes.rb +81 -0
- data/lib/noah/custom_watcher.rb +79 -0
- data/lib/noah/ephemeral_routes.rb +47 -0
- data/lib/noah/helpers.rb +37 -14
- data/lib/noah/host_routes.rb +69 -0
- data/lib/noah/models.rb +86 -5
- data/lib/noah/models/applications.rb +41 -0
- data/lib/noah/models/configurations.rb +49 -0
- data/lib/noah/models/ephemerals.rb +54 -0
- data/lib/noah/models/hosts.rb +56 -0
- data/lib/noah/models/services.rb +54 -0
- data/lib/noah/models/watchers.rb +62 -0
- data/lib/noah/passthrough.rb +11 -0
- data/lib/noah/service_routes.rb +71 -0
- data/lib/noah/validations.rb +1 -0
- data/lib/noah/validations/watcher_validations.rb +48 -0
- data/lib/noah/version.rb +1 -1
- data/lib/noah/watcher_routes.rb +45 -0
- data/noah.gemspec +25 -17
- data/spec/application_spec.rb +30 -30
- data/spec/configuration_spec.rb +78 -14
- data/spec/ephemeral_spec.rb +59 -0
- data/spec/host_spec.rb +21 -21
- data/spec/noahapp_application_spec.rb +6 -6
- data/spec/noahapp_configuration_spec.rb +5 -5
- data/spec/noahapp_ephemeral_spec.rb +115 -0
- data/spec/noahapp_host_spec.rb +3 -3
- data/spec/noahapp_service_spec.rb +10 -10
- data/spec/noahapp_watcher_spec.rb +123 -0
- data/spec/service_spec.rb +27 -27
- data/spec/spec_helper.rb +13 -22
- data/spec/support/db/.keep +0 -0
- data/spec/support/test-redis.conf +8 -0
- data/spec/watcher_spec.rb +62 -0
- data/views/index.haml +21 -15
- metadata +189 -146
- data/Gemfile.lock +0 -83
- data/doc/coverage/index.html +0 -138
- data/doc/coverage/jquery-1.3.2.min.js +0 -19
- data/doc/coverage/jquery.tablesorter.min.js +0 -15
- data/doc/coverage/lib-helpers_rb.html +0 -393
- data/doc/coverage/lib-models_rb.html +0 -1449
- data/doc/coverage/noah_rb.html +0 -2019
- data/doc/coverage/print.css +0 -12
- data/doc/coverage/rcov.js +0 -42
- data/doc/coverage/screen.css +0 -270
- data/lib/noah/applications.rb +0 -46
- data/lib/noah/configurations.rb +0 -49
- data/lib/noah/hosts.rb +0 -54
- data/lib/noah/services.rb +0 -57
- data/lib/noah/watchers.rb +0 -18
@@ -0,0 +1,830 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
+
|
6
|
+
<!DOCTYPE html>
|
7
|
+
<html>
|
8
|
+
<head>
|
9
|
+
<meta charset='utf-8'>
|
10
|
+
<meta http-equiv="X-UA-Compatible" content="chrome=1">
|
11
|
+
<title>examples/js/WebSocketMain.swf at master from igrigorik's em-websocket - GitHub</title>
|
12
|
+
<link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub" />
|
13
|
+
<link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub" />
|
14
|
+
|
15
|
+
<link href="https://assets2.github.com/stylesheets/bundle_common.css?fcea8a71e43a6abea9b38ae62a9eeb7e84f5652a" media="screen" rel="stylesheet" type="text/css" />
|
16
|
+
<link href="https://assets1.github.com/stylesheets/bundle_github.css?fcea8a71e43a6abea9b38ae62a9eeb7e84f5652a" media="screen" rel="stylesheet" type="text/css" />
|
17
|
+
|
18
|
+
<script type="text/javascript">
|
19
|
+
if (typeof console == "undefined" || typeof console.log == "undefined")
|
20
|
+
console = { log: function() {} }
|
21
|
+
</script>
|
22
|
+
<script type="text/javascript" charset="utf-8">
|
23
|
+
var GitHub = {}
|
24
|
+
var github_user = null
|
25
|
+
|
26
|
+
</script>
|
27
|
+
<script src="https://assets3.github.com/javascripts/jquery/jquery-1.4.2.min.js?fcea8a71e43a6abea9b38ae62a9eeb7e84f5652a" type="text/javascript"></script>
|
28
|
+
<script src="https://assets0.github.com/javascripts/bundle_common.js?fcea8a71e43a6abea9b38ae62a9eeb7e84f5652a" type="text/javascript"></script>
|
29
|
+
<script src="https://assets0.github.com/javascripts/bundle_github.js?fcea8a71e43a6abea9b38ae62a9eeb7e84f5652a" type="text/javascript"></script>
|
30
|
+
|
31
|
+
|
32
|
+
<script type="text/javascript" charset="utf-8">
|
33
|
+
GitHub.spy({
|
34
|
+
repo: "igrigorik/em-websocket"
|
35
|
+
})
|
36
|
+
</script>
|
37
|
+
|
38
|
+
|
39
|
+
|
40
|
+
|
41
|
+
|
42
|
+
|
43
|
+
<link href="https://github.com/igrigorik/em-websocket/commits/master.atom" rel="alternate" title="Recent Commits to em-websocket:master" type="application/atom+xml" />
|
44
|
+
|
45
|
+
<meta name="description" content="EventMachine based WebSocket server" />
|
46
|
+
<script type="text/javascript">
|
47
|
+
GitHub.nameWithOwner = GitHub.nameWithOwner || "igrigorik/em-websocket";
|
48
|
+
GitHub.currentRef = 'master';
|
49
|
+
GitHub.commitSHA = "cdedd7bd5c43e25fd0b30236889bc131b5cbe495";
|
50
|
+
GitHub.currentPath = 'examples/js/WebSocketMain.swf';
|
51
|
+
GitHub.masterBranch = "master";
|
52
|
+
|
53
|
+
|
54
|
+
</script>
|
55
|
+
|
56
|
+
|
57
|
+
<script type="text/javascript">
|
58
|
+
var _gaq = _gaq || [];
|
59
|
+
_gaq.push(['_setAccount', 'UA-3769691-2']);
|
60
|
+
_gaq.push(['_trackPageview']);
|
61
|
+
(function() {
|
62
|
+
var ga = document.createElement('script');
|
63
|
+
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
64
|
+
ga.setAttribute('async', 'true');
|
65
|
+
document.documentElement.firstChild.appendChild(ga);
|
66
|
+
})();
|
67
|
+
</script>
|
68
|
+
|
69
|
+
<script type="text/javascript">
|
70
|
+
var mpq = [];
|
71
|
+
mpq.push(["init", "65fde2abd433eae3b32b38b7ebd2f37e"]);
|
72
|
+
(function() {
|
73
|
+
var mp = document.createElement("script"); mp.type = "text/javascript"; mp.async = true;
|
74
|
+
mp.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') + "//api.mixpanel.com/site_media/js/api/mixpanel.js";
|
75
|
+
var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(mp, s);
|
76
|
+
})();
|
77
|
+
</script>
|
78
|
+
|
79
|
+
</head>
|
80
|
+
|
81
|
+
|
82
|
+
|
83
|
+
<body class="logged_out page-blob">
|
84
|
+
|
85
|
+
|
86
|
+
|
87
|
+
|
88
|
+
|
89
|
+
|
90
|
+
|
91
|
+
|
92
|
+
|
93
|
+
|
94
|
+
<div class="subnavd" id="main">
|
95
|
+
<div id="header" class="true">
|
96
|
+
|
97
|
+
<a class="logo boring" href="https://github.com">
|
98
|
+
<img src="/images/modules/header/logov3.png?changed" class="default" alt="github" />
|
99
|
+
<![if !IE]>
|
100
|
+
<img src="/images/modules/header/logov3-hover.png" class="hover" alt="github" />
|
101
|
+
<![endif]>
|
102
|
+
</a>
|
103
|
+
|
104
|
+
|
105
|
+
<div class="topsearch">
|
106
|
+
|
107
|
+
<ul class="nav logged_out">
|
108
|
+
<li class="pricing"><a href="/plans">Pricing and Signup</a></li>
|
109
|
+
<li class="explore"><a href="/explore">Explore GitHub</a></li>
|
110
|
+
<li class="features"><a href="/features">Features</a></li>
|
111
|
+
<li class="blog"><a href="/blog">Blog</a></li>
|
112
|
+
<li class="login"><a href="/login?return_to=https://github.com/igrigorik/em-websocket/blob/master/examples/js/WebSocketMain.swf">Login</a></li>
|
113
|
+
</ul>
|
114
|
+
|
115
|
+
</div>
|
116
|
+
|
117
|
+
</div>
|
118
|
+
|
119
|
+
|
120
|
+
|
121
|
+
|
122
|
+
<div class="site">
|
123
|
+
<div class="pagehead repohead vis-public ">
|
124
|
+
|
125
|
+
|
126
|
+
|
127
|
+
<div class="title-actions-bar">
|
128
|
+
<h1>
|
129
|
+
<a href="/igrigorik">igrigorik</a> / <strong><a href="https://github.com/igrigorik/em-websocket">em-websocket</a></strong>
|
130
|
+
|
131
|
+
|
132
|
+
</h1>
|
133
|
+
|
134
|
+
|
135
|
+
<ul class="actions">
|
136
|
+
|
137
|
+
|
138
|
+
|
139
|
+
<li class="for-owner" style="display:none"><a href="https://github.com/igrigorik/em-websocket/admin" class="minibutton btn-admin "><span><span class="icon"></span>Admin</span></a></li>
|
140
|
+
<li>
|
141
|
+
<a href="/igrigorik/em-websocket/toggle_watch" class="minibutton btn-watch " id="watch_button" onclick="var f = document.createElement('form'); f.style.display = 'none'; this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href;var s = document.createElement('input'); s.setAttribute('type', 'hidden'); s.setAttribute('name', 'authenticity_token'); s.setAttribute('value', '7ee0ec2c300dda8607aa77a9bf60aa6ef031c060'); f.appendChild(s);f.submit();return false;" style="display:none"><span><span class="icon"></span>Watch</span></a>
|
142
|
+
<a href="/igrigorik/em-websocket/toggle_watch" class="minibutton btn-watch " id="unwatch_button" onclick="var f = document.createElement('form'); f.style.display = 'none'; this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href;var s = document.createElement('input'); s.setAttribute('type', 'hidden'); s.setAttribute('name', 'authenticity_token'); s.setAttribute('value', '7ee0ec2c300dda8607aa77a9bf60aa6ef031c060'); f.appendChild(s);f.submit();return false;" style="display:none"><span><span class="icon"></span>Unwatch</span></a>
|
143
|
+
</li>
|
144
|
+
|
145
|
+
|
146
|
+
<li class="for-notforked" style="display:none"><a href="/igrigorik/em-websocket/fork" class="minibutton btn-fork " id="fork_button" onclick="var f = document.createElement('form'); f.style.display = 'none'; this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href;var s = document.createElement('input'); s.setAttribute('type', 'hidden'); s.setAttribute('name', 'authenticity_token'); s.setAttribute('value', '7ee0ec2c300dda8607aa77a9bf60aa6ef031c060'); f.appendChild(s);f.submit();return false;"><span><span class="icon"></span>Fork</span></a></li>
|
147
|
+
<li class="for-hasfork" style="display:none"><a href="#" class="minibutton btn-fork " id="your_fork_button"><span><span class="icon"></span>Your Fork</span></a></li>
|
148
|
+
|
149
|
+
|
150
|
+
|
151
|
+
|
152
|
+
|
153
|
+
|
154
|
+
<li class="repostats">
|
155
|
+
<ul class="repo-stats">
|
156
|
+
<li class="watchers"><a href="/igrigorik/em-websocket/watchers" title="Watchers" class="tooltipped downwards">365</a></li>
|
157
|
+
<li class="forks"><a href="/igrigorik/em-websocket/network" title="Forks" class="tooltipped downwards">20</a></li>
|
158
|
+
</ul>
|
159
|
+
</li>
|
160
|
+
</ul>
|
161
|
+
|
162
|
+
</div>
|
163
|
+
|
164
|
+
|
165
|
+
<ul class="tabs">
|
166
|
+
<li><a href="https://github.com/igrigorik/em-websocket" class="selected" highlight="repo_source">Source</a></li>
|
167
|
+
<li><a href="https://github.com/igrigorik/em-websocket/commits/master" highlight="repo_commits">Commits</a></li>
|
168
|
+
<li><a href="/igrigorik/em-websocket/network" highlight="repo_network">Network</a></li>
|
169
|
+
<li><a href="/igrigorik/em-websocket/pulls" highlight="repo_pulls">Pull Requests (1)</a></li>
|
170
|
+
|
171
|
+
|
172
|
+
|
173
|
+
|
174
|
+
|
175
|
+
<li><a href="/igrigorik/em-websocket/issues" highlight="issues">Issues (7)</a></li>
|
176
|
+
|
177
|
+
|
178
|
+
<li><a href="/igrigorik/em-websocket/wiki" highlight="repo_wiki">Wiki (1)</a></li>
|
179
|
+
|
180
|
+
<li><a href="/igrigorik/em-websocket/graphs" highlight="repo_graphs">Graphs</a></li>
|
181
|
+
|
182
|
+
<li class="contextswitch nochoices">
|
183
|
+
<span class="toggle leftwards" >
|
184
|
+
<em>Branch:</em>
|
185
|
+
<code>master</code>
|
186
|
+
</span>
|
187
|
+
</li>
|
188
|
+
</ul>
|
189
|
+
|
190
|
+
<div style="display:none" id="pl-description"><p><em class="placeholder">click here to add a description</em></p></div>
|
191
|
+
<div style="display:none" id="pl-homepage"><p><em class="placeholder">click here to add a homepage</em></p></div>
|
192
|
+
|
193
|
+
<div class="subnav-bar">
|
194
|
+
|
195
|
+
<ul>
|
196
|
+
<li>
|
197
|
+
<a href="#" class="dropdown">Switch Branches (4)</a>
|
198
|
+
<ul>
|
199
|
+
|
200
|
+
|
201
|
+
|
202
|
+
<li><a href="/igrigorik/em-websocket/blob/draft03/examples/js/WebSocketMain.swf" action="show">draft03</a></li>
|
203
|
+
|
204
|
+
|
205
|
+
|
206
|
+
<li><strong>master ✓</strong></li>
|
207
|
+
|
208
|
+
|
209
|
+
|
210
|
+
<li><a href="/igrigorik/em-websocket/blob/onerror/examples/js/WebSocketMain.swf" action="show">onerror</a></li>
|
211
|
+
|
212
|
+
|
213
|
+
|
214
|
+
|
215
|
+
<li><a href="/igrigorik/em-websocket/blob/ruby19fixes/examples/js/WebSocketMain.swf" action="show">ruby19fixes</a></li>
|
216
|
+
|
217
|
+
|
218
|
+
</ul>
|
219
|
+
</li>
|
220
|
+
<li>
|
221
|
+
<a href="#" class="dropdown ">Switch Tags (2)</a>
|
222
|
+
<ul>
|
223
|
+
|
224
|
+
<li><a href="/igrigorik/em-websocket/blob/v0.2.0/examples/js/WebSocketMain.swf">v0.2.0</a></li>
|
225
|
+
|
226
|
+
|
227
|
+
<li><a href="/igrigorik/em-websocket/blob/v0.1.4/examples/js/WebSocketMain.swf">v0.1.4</a></li>
|
228
|
+
|
229
|
+
</ul>
|
230
|
+
|
231
|
+
</li>
|
232
|
+
<li>
|
233
|
+
|
234
|
+
<a href="/igrigorik/em-websocket/branches" class="manage">Branch List</a>
|
235
|
+
|
236
|
+
</li>
|
237
|
+
</ul>
|
238
|
+
</div>
|
239
|
+
|
240
|
+
|
241
|
+
|
242
|
+
|
243
|
+
|
244
|
+
|
245
|
+
|
246
|
+
|
247
|
+
|
248
|
+
|
249
|
+
|
250
|
+
<div class="frame frame-center tree-finder" style="display: none">
|
251
|
+
<div class="breadcrumb">
|
252
|
+
<b><a href="/igrigorik/em-websocket">em-websocket</a></b> /
|
253
|
+
<input class="tree-finder-input" type="text" name="query" autocomplete="off" spellcheck="false">
|
254
|
+
</div>
|
255
|
+
|
256
|
+
|
257
|
+
<div class="octotip">
|
258
|
+
<p>
|
259
|
+
<a href="/igrigorik/em-websocket/dismiss-tree-finder-help" class="dismiss js-dismiss-tree-list-help" title="Hide this notice forever">Dismiss</a>
|
260
|
+
<strong>Octotip:</strong> You've activated the <em>file finder</em> by pressing <span class="kbd">t</span>
|
261
|
+
Start typing to filter the file list. Use <span class="kbd badmono">↑</span> and <span class="kbd badmono">↓</span> to navigate,
|
262
|
+
<span class="kbd">enter</span> to view files.
|
263
|
+
</p>
|
264
|
+
</div>
|
265
|
+
|
266
|
+
|
267
|
+
<table class="tree-browser" cellpadding="0" cellspacing="0">
|
268
|
+
<tr class="js-header"><th> </th><th>name</th></tr>
|
269
|
+
<tr class="js-no-results no-results" style="display: none">
|
270
|
+
<th colspan="2">No matching files</th>
|
271
|
+
</tr>
|
272
|
+
<tbody class="js-results-list">
|
273
|
+
</tbody>
|
274
|
+
</table>
|
275
|
+
</div>
|
276
|
+
|
277
|
+
<div id="repo_details" class="metabox clearfix">
|
278
|
+
<div id="repo_details_loader" class="metabox-loader" style="display:none">Sending Request…</div>
|
279
|
+
|
280
|
+
<a href="/igrigorik/em-websocket/downloads" class="download-source" id="download_button" title="Download source, tagged packages and binaries."><span class="icon"></span>Downloads</a>
|
281
|
+
|
282
|
+
<div id="repository_desc_wrapper">
|
283
|
+
<div id="repository_description" rel="repository_description_edit">
|
284
|
+
|
285
|
+
<p>EventMachine based WebSocket server
|
286
|
+
<span id="read_more" style="display:none">— <a href="#readme">Read more</a></span>
|
287
|
+
</p>
|
288
|
+
|
289
|
+
</div>
|
290
|
+
|
291
|
+
<div id="repository_description_edit" style="display:none;" class="inline-edit">
|
292
|
+
<form action="/igrigorik/em-websocket/admin/update" method="post"><div style="margin:0;padding:0"><input name="authenticity_token" type="hidden" value="7ee0ec2c300dda8607aa77a9bf60aa6ef031c060" /></div>
|
293
|
+
<input type="hidden" name="field" value="repository_description">
|
294
|
+
<input type="text" class="textfield" name="value" value="EventMachine based WebSocket server">
|
295
|
+
<div class="form-actions">
|
296
|
+
<button class="minibutton"><span>Save</span></button> <a href="#" class="cancel">Cancel</a>
|
297
|
+
</div>
|
298
|
+
</form>
|
299
|
+
</div>
|
300
|
+
|
301
|
+
|
302
|
+
<div class="repository-homepage" id="repository_homepage" rel="repository_homepage_edit">
|
303
|
+
<p><a href="http://www.igvita.com/2009/12/22/ruby-websockets-tcp-for-the-browser/" rel="nofollow">http://www.igvita.com/2009/12/22/ruby-websockets-tcp-for-the-browser/</a></p>
|
304
|
+
</div>
|
305
|
+
|
306
|
+
<div id="repository_homepage_edit" style="display:none;" class="inline-edit">
|
307
|
+
<form action="/igrigorik/em-websocket/admin/update" method="post"><div style="margin:0;padding:0"><input name="authenticity_token" type="hidden" value="7ee0ec2c300dda8607aa77a9bf60aa6ef031c060" /></div>
|
308
|
+
<input type="hidden" name="field" value="repository_homepage">
|
309
|
+
<input type="text" class="textfield" name="value" value="http://www.igvita.com/2009/12/22/ruby-websockets-tcp-for-the-browser/">
|
310
|
+
<div class="form-actions">
|
311
|
+
<button class="minibutton"><span>Save</span></button> <a href="#" class="cancel">Cancel</a>
|
312
|
+
</div>
|
313
|
+
</form>
|
314
|
+
</div>
|
315
|
+
</div>
|
316
|
+
<div class="rule "></div>
|
317
|
+
<div id="url_box" class="url-box">
|
318
|
+
<ul class="clone-urls">
|
319
|
+
|
320
|
+
|
321
|
+
<li id="http_clone_url"><a href="https://github.com/igrigorik/em-websocket.git" data-permissions="Read-Only">HTTP</a></li>
|
322
|
+
<li id="public_clone_url"><a href="git://github.com/igrigorik/em-websocket.git" data-permissions="Read-Only">Git Read-Only</a></li>
|
323
|
+
|
324
|
+
|
325
|
+
</ul>
|
326
|
+
<input type="text" spellcheck="false" id="url_field" class="url-field" />
|
327
|
+
<span style="display:none" id="url_box_clippy"></span>
|
328
|
+
<span id="clippy_tooltip_url_box_clippy" class="clippy-tooltip tooltipped" title="copy to clipboard">
|
329
|
+
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
|
330
|
+
width="14"
|
331
|
+
height="14"
|
332
|
+
class="clippy"
|
333
|
+
id="clippy" >
|
334
|
+
<param name="movie" value="https://assets3.github.com/flash/clippy.swf?v5"/>
|
335
|
+
<param name="allowScriptAccess" value="always" />
|
336
|
+
<param name="quality" value="high" />
|
337
|
+
<param name="scale" value="noscale" />
|
338
|
+
<param NAME="FlashVars" value="id=url_box_clippy&copied=&copyto=">
|
339
|
+
<param name="bgcolor" value="#FFFFFF">
|
340
|
+
<param name="wmode" value="opaque">
|
341
|
+
<embed src="https://assets3.github.com/flash/clippy.swf?v5"
|
342
|
+
width="14"
|
343
|
+
height="14"
|
344
|
+
name="clippy"
|
345
|
+
quality="high"
|
346
|
+
allowScriptAccess="always"
|
347
|
+
type="application/x-shockwave-flash"
|
348
|
+
pluginspage="http://www.macromedia.com/go/getflashplayer"
|
349
|
+
FlashVars="id=url_box_clippy&copied=&copyto="
|
350
|
+
bgcolor="#FFFFFF"
|
351
|
+
wmode="opaque"
|
352
|
+
/>
|
353
|
+
</object>
|
354
|
+
</span>
|
355
|
+
|
356
|
+
<p id="url_description">This URL has <strong>Read+Write</strong> access</p>
|
357
|
+
</div>
|
358
|
+
</div>
|
359
|
+
|
360
|
+
|
361
|
+
|
362
|
+
|
363
|
+
</div><!-- /.pagehead -->
|
364
|
+
|
365
|
+
|
366
|
+
|
367
|
+
|
368
|
+
|
369
|
+
|
370
|
+
|
371
|
+
<script type="text/javascript">
|
372
|
+
GitHub.downloadRepo = '/igrigorik/em-websocket/archives/master'
|
373
|
+
GitHub.revType = "master"
|
374
|
+
|
375
|
+
GitHub.controllerName = "blob"
|
376
|
+
GitHub.actionName = "show"
|
377
|
+
GitHub.currentAction = "blob#show"
|
378
|
+
|
379
|
+
|
380
|
+
|
381
|
+
|
382
|
+
</script>
|
383
|
+
|
384
|
+
|
385
|
+
|
386
|
+
|
387
|
+
|
388
|
+
|
389
|
+
<div class="flash-messages"></div>
|
390
|
+
|
391
|
+
|
392
|
+
<div id="commit">
|
393
|
+
<div class="group">
|
394
|
+
|
395
|
+
<div class="envelope commit">
|
396
|
+
<div class="human">
|
397
|
+
|
398
|
+
<div class="message"><pre><a href="/igrigorik/em-websocket/commit/cdedd7bd5c43e25fd0b30236889bc131b5cbe495">Added Gemfile.lock to gitignore</a> </pre></div>
|
399
|
+
|
400
|
+
|
401
|
+
<div class="actor">
|
402
|
+
<div class="gravatar">
|
403
|
+
|
404
|
+
<img src="https://secure.gravatar.com/avatar/b96c2426a6ef84c069876e80e49a600b?s=140&d=https://github.com%2Fimages%2Fgravatars%2Fgravatar-140.png" alt="" width="30" height="30" />
|
405
|
+
</div>
|
406
|
+
<div class="name"><a href="/mloughran">mloughran</a> <span>(author)</span></div>
|
407
|
+
<div class="date">
|
408
|
+
<abbr class="relatize" title="2011-02-07 04:29:18">Mon Feb 07 04:29:18 -0800 2011</abbr>
|
409
|
+
</div>
|
410
|
+
</div>
|
411
|
+
|
412
|
+
|
413
|
+
|
414
|
+
</div>
|
415
|
+
<div class="machine">
|
416
|
+
<span>c</span>ommit <a href="/igrigorik/em-websocket/commit/cdedd7bd5c43e25fd0b30236889bc131b5cbe495" hotkey="c">cdedd7bd5c43e25fd0b3</a><br />
|
417
|
+
<span>t</span>ree <a href="/igrigorik/em-websocket/tree/cdedd7bd5c43e25fd0b30236889bc131b5cbe495" hotkey="t">087af53398020bbc09b5</a><br />
|
418
|
+
|
419
|
+
<span>p</span>arent
|
420
|
+
|
421
|
+
<a href="/igrigorik/em-websocket/tree/97c850128ccd49063d12dde2512cbdd1d3c128a2" hotkey="p">97c850128ccd49063d12</a>
|
422
|
+
|
423
|
+
|
424
|
+
</div>
|
425
|
+
</div>
|
426
|
+
|
427
|
+
</div>
|
428
|
+
</div>
|
429
|
+
|
430
|
+
|
431
|
+
|
432
|
+
<div id="slider">
|
433
|
+
|
434
|
+
|
435
|
+
|
436
|
+
<div class="breadcrumb" data-path="examples/js/WebSocketMain.swf/">
|
437
|
+
<b><a href="/igrigorik/em-websocket/tree/cdedd7bd5c43e25fd0b30236889bc131b5cbe495">em-websocket</a></b> / <a href="/igrigorik/em-websocket/tree/cdedd7bd5c43e25fd0b30236889bc131b5cbe495/examples">examples</a> / <a href="/igrigorik/em-websocket/tree/cdedd7bd5c43e25fd0b30236889bc131b5cbe495/examples/js">js</a> / WebSocketMain.swf <span style="display:none" id="clippy_3183">examples/js/WebSocketMain.swf</span>
|
438
|
+
|
439
|
+
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
|
440
|
+
width="110"
|
441
|
+
height="14"
|
442
|
+
class="clippy"
|
443
|
+
id="clippy" >
|
444
|
+
<param name="movie" value="https://assets2.github.com/flash/clippy.swf?v5"/>
|
445
|
+
<param name="allowScriptAccess" value="always" />
|
446
|
+
<param name="quality" value="high" />
|
447
|
+
<param name="scale" value="noscale" />
|
448
|
+
<param NAME="FlashVars" value="id=clippy_3183&copied=copied!&copyto=copy to clipboard">
|
449
|
+
<param name="bgcolor" value="#FFFFFF">
|
450
|
+
<param name="wmode" value="opaque">
|
451
|
+
<embed src="https://assets2.github.com/flash/clippy.swf?v5"
|
452
|
+
width="110"
|
453
|
+
height="14"
|
454
|
+
name="clippy"
|
455
|
+
quality="high"
|
456
|
+
allowScriptAccess="always"
|
457
|
+
type="application/x-shockwave-flash"
|
458
|
+
pluginspage="http://www.macromedia.com/go/getflashplayer"
|
459
|
+
FlashVars="id=clippy_3183&copied=copied!&copyto=copy to clipboard"
|
460
|
+
bgcolor="#FFFFFF"
|
461
|
+
wmode="opaque"
|
462
|
+
/>
|
463
|
+
</object>
|
464
|
+
|
465
|
+
|
466
|
+
</div>
|
467
|
+
|
468
|
+
<div class="frames">
|
469
|
+
<div class="frame frame-center" data-path="examples/js/WebSocketMain.swf/">
|
470
|
+
|
471
|
+
|
472
|
+
<div id="files">
|
473
|
+
<div class="file">
|
474
|
+
<div class="meta">
|
475
|
+
<div class="info">
|
476
|
+
<span class="icon"><img alt="Txt" height="16" src="https://assets3.github.com/images/icons/txt.png?03ad842eba9fc581233193a04c4cc3290def09be" width="16" /></span>
|
477
|
+
<span class="mode" title="File Mode">100644</span>
|
478
|
+
|
479
|
+
<span>11.791 kb</span>
|
480
|
+
</div>
|
481
|
+
<ul class="actions">
|
482
|
+
<li><a href="/igrigorik/em-websocket/raw/master/examples/js/WebSocketMain.swf" id="raw-url">raw</a></li>
|
483
|
+
|
484
|
+
<li><a href="/igrigorik/em-websocket/commits/master/examples/js/WebSocketMain.swf">history</a></li>
|
485
|
+
</ul>
|
486
|
+
</div>
|
487
|
+
|
488
|
+
<div class="data type-text">
|
489
|
+
|
490
|
+
<div class="image">
|
491
|
+
|
492
|
+
|
493
|
+
<a href="/igrigorik/em-websocket/raw/master/examples/js/WebSocketMain.swf">View Raw</a>
|
494
|
+
|
495
|
+
</div>
|
496
|
+
|
497
|
+
</div>
|
498
|
+
|
499
|
+
|
500
|
+
</div>
|
501
|
+
</div>
|
502
|
+
</div>
|
503
|
+
</div>
|
504
|
+
|
505
|
+
|
506
|
+
</div>
|
507
|
+
|
508
|
+
|
509
|
+
<div class="frame frame-loading" style="display:none;">
|
510
|
+
<img src="/images/modules/ajax/big_spinner_336699.gif">
|
511
|
+
</div>
|
512
|
+
|
513
|
+
</div>
|
514
|
+
|
515
|
+
|
516
|
+
</div>
|
517
|
+
|
518
|
+
<div id="footer" class="clearfix">
|
519
|
+
<div class="site">
|
520
|
+
<div class="sponsor">
|
521
|
+
<a href="http://www.rackspace.com" class="logo">
|
522
|
+
<img alt="Dedicated Server" src="https://assets1.github.com/images/modules/footer/rackspace_logo.png?v2?fcea8a71e43a6abea9b38ae62a9eeb7e84f5652a" />
|
523
|
+
</a>
|
524
|
+
Powered by the <a href="http://www.rackspace.com ">Dedicated
|
525
|
+
Servers</a> and<br/> <a href="http://www.rackspacecloud.com">Cloud
|
526
|
+
Computing</a> of Rackspace Hosting<span>®</span>
|
527
|
+
</div>
|
528
|
+
|
529
|
+
<ul class="links">
|
530
|
+
<li class="blog"><a href="https://github.com/blog">Blog</a></li>
|
531
|
+
<li><a href="http://support.github.com">Support</a></li>
|
532
|
+
<li><a href="https://github.com/training">Training</a></li>
|
533
|
+
<li><a href="http://jobs.github.com">Job Board</a></li>
|
534
|
+
<li><a href="http://shop.github.com">Shop</a></li>
|
535
|
+
<li><a href="https://github.com/contact">Contact</a></li>
|
536
|
+
<li><a href="http://develop.github.com">API</a></li>
|
537
|
+
<li><a href="http://status.github.com">Status</a></li>
|
538
|
+
</ul>
|
539
|
+
<ul class="sosueme">
|
540
|
+
<li class="main">© 2011 <span id="_rrt" title="0.09310s from fe4.rs.github.com">GitHub</span> Inc. All rights reserved.</li>
|
541
|
+
<li><a href="/site/terms">Terms of Service</a></li>
|
542
|
+
<li><a href="/site/privacy">Privacy</a></li>
|
543
|
+
<li><a href="https://github.com/security">Security</a></li>
|
544
|
+
</ul>
|
545
|
+
</div>
|
546
|
+
</div><!-- /#footer -->
|
547
|
+
|
548
|
+
|
549
|
+
|
550
|
+
|
551
|
+
<!-- current locale: -->
|
552
|
+
<div class="locales">
|
553
|
+
<div class="site">
|
554
|
+
|
555
|
+
<ul class="choices clearfix limited-locales">
|
556
|
+
<li><span class="current">English</span></li>
|
557
|
+
|
558
|
+
<li><a rel="nofollow" href="?locale=de">Deutsch</a></li>
|
559
|
+
|
560
|
+
<li><a rel="nofollow" href="?locale=fr">Français</a></li>
|
561
|
+
|
562
|
+
<li><a rel="nofollow" href="?locale=ja">日本語</a></li>
|
563
|
+
|
564
|
+
<li><a rel="nofollow" href="?locale=pt-BR">Português (BR)</a></li>
|
565
|
+
|
566
|
+
<li><a rel="nofollow" href="?locale=ru">Русский</a></li>
|
567
|
+
|
568
|
+
<li><a rel="nofollow" href="?locale=zh">中文</a></li>
|
569
|
+
|
570
|
+
<li class="all"><a href="#" class="minibutton btn-forward js-all-locales"><span><span class="icon"></span>See all available languages</span></a></li>
|
571
|
+
</ul>
|
572
|
+
|
573
|
+
<div class="all-locales clearfix">
|
574
|
+
<h3>Your current locale selection: <strong>English</strong>. Choose another?</h3>
|
575
|
+
|
576
|
+
|
577
|
+
<ul class="choices">
|
578
|
+
|
579
|
+
<li><a rel="nofollow" href="?locale=en">English</a></li>
|
580
|
+
|
581
|
+
<li><a rel="nofollow" href="?locale=af">Afrikaans</a></li>
|
582
|
+
|
583
|
+
<li><a rel="nofollow" href="?locale=ca">Català</a></li>
|
584
|
+
|
585
|
+
<li><a rel="nofollow" href="?locale=cs">Čeština</a></li>
|
586
|
+
|
587
|
+
</ul>
|
588
|
+
|
589
|
+
<ul class="choices">
|
590
|
+
|
591
|
+
<li><a rel="nofollow" href="?locale=de">Deutsch</a></li>
|
592
|
+
|
593
|
+
<li><a rel="nofollow" href="?locale=es">Español</a></li>
|
594
|
+
|
595
|
+
<li><a rel="nofollow" href="?locale=fr">Français</a></li>
|
596
|
+
|
597
|
+
<li><a rel="nofollow" href="?locale=hr">Hrvatski</a></li>
|
598
|
+
|
599
|
+
</ul>
|
600
|
+
|
601
|
+
<ul class="choices">
|
602
|
+
|
603
|
+
<li><a rel="nofollow" href="?locale=id">Indonesia</a></li>
|
604
|
+
|
605
|
+
<li><a rel="nofollow" href="?locale=it">Italiano</a></li>
|
606
|
+
|
607
|
+
<li><a rel="nofollow" href="?locale=ja">日本語</a></li>
|
608
|
+
|
609
|
+
<li><a rel="nofollow" href="?locale=nl">Nederlands</a></li>
|
610
|
+
|
611
|
+
</ul>
|
612
|
+
|
613
|
+
<ul class="choices">
|
614
|
+
|
615
|
+
<li><a rel="nofollow" href="?locale=no">Norsk</a></li>
|
616
|
+
|
617
|
+
<li><a rel="nofollow" href="?locale=pl">Polski</a></li>
|
618
|
+
|
619
|
+
<li><a rel="nofollow" href="?locale=pt-BR">Português (BR)</a></li>
|
620
|
+
|
621
|
+
<li><a rel="nofollow" href="?locale=ru">Русский</a></li>
|
622
|
+
|
623
|
+
</ul>
|
624
|
+
|
625
|
+
<ul class="choices">
|
626
|
+
|
627
|
+
<li><a rel="nofollow" href="?locale=sr">Српски</a></li>
|
628
|
+
|
629
|
+
<li><a rel="nofollow" href="?locale=sv">Svenska</a></li>
|
630
|
+
|
631
|
+
<li><a rel="nofollow" href="?locale=zh">中文</a></li>
|
632
|
+
|
633
|
+
</ul>
|
634
|
+
|
635
|
+
</div>
|
636
|
+
|
637
|
+
</div>
|
638
|
+
<div class="fade"></div>
|
639
|
+
</div>
|
640
|
+
|
641
|
+
|
642
|
+
|
643
|
+
<script>window._auth_token = "7ee0ec2c300dda8607aa77a9bf60aa6ef031c060"</script>
|
644
|
+
<div id="keyboard_shortcuts_pane" style="display:none">
|
645
|
+
<h2>Keyboard Shortcuts</h2>
|
646
|
+
|
647
|
+
<div class="columns threecols">
|
648
|
+
<div class="column first">
|
649
|
+
<h3>Site wide shortcuts</h3>
|
650
|
+
<dl class="keyboard-mappings">
|
651
|
+
<dt>s</dt>
|
652
|
+
<dd>Focus site search</dd>
|
653
|
+
</dl>
|
654
|
+
<dl class="keyboard-mappings">
|
655
|
+
<dt>?</dt>
|
656
|
+
<dd>Bring up this help dialog</dd>
|
657
|
+
</dl>
|
658
|
+
</div><!-- /.column.first -->
|
659
|
+
<div class="column middle">
|
660
|
+
<h3>Commit list</h3>
|
661
|
+
<dl class="keyboard-mappings">
|
662
|
+
<dt>j</dt>
|
663
|
+
<dd>Move selected down</dd>
|
664
|
+
</dl>
|
665
|
+
<dl class="keyboard-mappings">
|
666
|
+
<dt>k</dt>
|
667
|
+
<dd>Move selected up</dd>
|
668
|
+
</dl>
|
669
|
+
<dl class="keyboard-mappings">
|
670
|
+
<dt>t</dt>
|
671
|
+
<dd>Open tree</dd>
|
672
|
+
</dl>
|
673
|
+
<dl class="keyboard-mappings">
|
674
|
+
<dt>p</dt>
|
675
|
+
<dd>Open parent</dd>
|
676
|
+
</dl>
|
677
|
+
<dl class="keyboard-mappings">
|
678
|
+
<dt>c <em>or</em> o <em>or</em> enter</dt>
|
679
|
+
<dd>Open commit</dd>
|
680
|
+
</dl>
|
681
|
+
</div><!-- /.column.first -->
|
682
|
+
<div class="column last">
|
683
|
+
<h3>Pull request list</h3>
|
684
|
+
<dl class="keyboard-mappings">
|
685
|
+
<dt>j</dt>
|
686
|
+
<dd>Move selected down</dd>
|
687
|
+
</dl>
|
688
|
+
<dl class="keyboard-mappings">
|
689
|
+
<dt>k</dt>
|
690
|
+
<dd>Move selected up</dd>
|
691
|
+
</dl>
|
692
|
+
<dl class="keyboard-mappings">
|
693
|
+
<dt>o <em>or</em> enter</dt>
|
694
|
+
<dd>Open issue</dd>
|
695
|
+
</dl>
|
696
|
+
</div><!-- /.columns.last -->
|
697
|
+
</div><!-- /.columns.equacols -->
|
698
|
+
|
699
|
+
<div class="rule"></div>
|
700
|
+
|
701
|
+
<h3>Issues</h3>
|
702
|
+
|
703
|
+
<div class="columns threecols">
|
704
|
+
<div class="column first">
|
705
|
+
<dl class="keyboard-mappings">
|
706
|
+
<dt>j</dt>
|
707
|
+
<dd>Move selected down</dd>
|
708
|
+
</dl>
|
709
|
+
<dl class="keyboard-mappings">
|
710
|
+
<dt>k</dt>
|
711
|
+
<dd>Move selected up</dd>
|
712
|
+
</dl>
|
713
|
+
<dl class="keyboard-mappings">
|
714
|
+
<dt>x</dt>
|
715
|
+
<dd>Toggle select target</dd>
|
716
|
+
</dl>
|
717
|
+
<dl class="keyboard-mappings">
|
718
|
+
<dt>o <em>or</em> enter</dt>
|
719
|
+
<dd>Open issue</dd>
|
720
|
+
</dl>
|
721
|
+
</div><!-- /.column.first -->
|
722
|
+
<div class="column middle">
|
723
|
+
<dl class="keyboard-mappings">
|
724
|
+
<dt>I</dt>
|
725
|
+
<dd>Mark selected as read</dd>
|
726
|
+
</dl>
|
727
|
+
<dl class="keyboard-mappings">
|
728
|
+
<dt>U</dt>
|
729
|
+
<dd>Mark selected as unread</dd>
|
730
|
+
</dl>
|
731
|
+
<dl class="keyboard-mappings">
|
732
|
+
<dt>e</dt>
|
733
|
+
<dd>Close selected</dd>
|
734
|
+
</dl>
|
735
|
+
<dl class="keyboard-mappings">
|
736
|
+
<dt>y</dt>
|
737
|
+
<dd>Remove selected from view</dd>
|
738
|
+
</dl>
|
739
|
+
</div><!-- /.column.middle -->
|
740
|
+
<div class="column last">
|
741
|
+
<dl class="keyboard-mappings">
|
742
|
+
<dt>c</dt>
|
743
|
+
<dd>Create issue</dd>
|
744
|
+
</dl>
|
745
|
+
<dl class="keyboard-mappings">
|
746
|
+
<dt>l</dt>
|
747
|
+
<dd>Create label</dd>
|
748
|
+
</dl>
|
749
|
+
<dl class="keyboard-mappings">
|
750
|
+
<dt>i</dt>
|
751
|
+
<dd>Back to inbox</dd>
|
752
|
+
</dl>
|
753
|
+
<dl class="keyboard-mappings">
|
754
|
+
<dt>u</dt>
|
755
|
+
<dd>Back to issues</dd>
|
756
|
+
</dl>
|
757
|
+
<dl class="keyboard-mappings">
|
758
|
+
<dt>/</dt>
|
759
|
+
<dd>Focus issues search</dd>
|
760
|
+
</dl>
|
761
|
+
</div>
|
762
|
+
</div>
|
763
|
+
|
764
|
+
<div class="rule"></div>
|
765
|
+
|
766
|
+
<h3>Network Graph</h3>
|
767
|
+
<div class="columns equacols">
|
768
|
+
<div class="column first">
|
769
|
+
<dl class="keyboard-mappings">
|
770
|
+
<dt>← <em>or</em> h</dt>
|
771
|
+
<dd>Scroll left</dd>
|
772
|
+
</dl>
|
773
|
+
<dl class="keyboard-mappings">
|
774
|
+
<dt>→ <em>or</em> l</dt>
|
775
|
+
<dd>Scroll right</dd>
|
776
|
+
</dl>
|
777
|
+
<dl class="keyboard-mappings">
|
778
|
+
<dt>↑ <em>or</em> k</dt>
|
779
|
+
<dd>Scroll up</dd>
|
780
|
+
</dl>
|
781
|
+
<dl class="keyboard-mappings">
|
782
|
+
<dt>↓ <em>or</em> j</dt>
|
783
|
+
<dd>Scroll down</dd>
|
784
|
+
</dl>
|
785
|
+
<dl class="keyboard-mappings">
|
786
|
+
<dt>t</dt>
|
787
|
+
<dd>Toggle visibility of head labels</dd>
|
788
|
+
</dl>
|
789
|
+
</div><!-- /.column.first -->
|
790
|
+
<div class="column last">
|
791
|
+
<dl class="keyboard-mappings">
|
792
|
+
<dt>shift ← <em>or</em> shift h</dt>
|
793
|
+
<dd>Scroll all the way left</dd>
|
794
|
+
</dl>
|
795
|
+
<dl class="keyboard-mappings">
|
796
|
+
<dt>shift → <em>or</em> shift l</dt>
|
797
|
+
<dd>Scroll all the way right</dd>
|
798
|
+
</dl>
|
799
|
+
<dl class="keyboard-mappings">
|
800
|
+
<dt>shift ↑ <em>or</em> shift k</dt>
|
801
|
+
<dd>Scroll all the way up</dd>
|
802
|
+
</dl>
|
803
|
+
<dl class="keyboard-mappings">
|
804
|
+
<dt>shift ↓ <em>or</em> shift j</dt>
|
805
|
+
<dd>Scroll all the way down</dd>
|
806
|
+
</dl>
|
807
|
+
</div><!-- /.column.last -->
|
808
|
+
</div>
|
809
|
+
|
810
|
+
</div>
|
811
|
+
|
812
|
+
|
813
|
+
<!--[if IE 8]>
|
814
|
+
<script type="text/javascript" charset="utf-8">
|
815
|
+
$(document.body).addClass("ie8")
|
816
|
+
</script>
|
817
|
+
<![endif]-->
|
818
|
+
|
819
|
+
<!--[if IE 7]>
|
820
|
+
<script type="text/javascript" charset="utf-8">
|
821
|
+
$(document.body).addClass("ie7")
|
822
|
+
</script>
|
823
|
+
<![endif]-->
|
824
|
+
|
825
|
+
|
826
|
+
<script type='text/javascript'></script>
|
827
|
+
|
828
|
+
</body>
|
829
|
+
</html>
|
830
|
+
|