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.
Files changed (81) hide show
  1. data/.gemtest +0 -0
  2. data/.gitignore +10 -0
  3. data/LICENSE +201 -0
  4. data/README.md +68 -212
  5. data/Rakefile +65 -41
  6. data/TODO.md +65 -0
  7. data/bin/noah +2 -1
  8. data/bin/noah-watcher.rb +103 -0
  9. data/config.ru +6 -3
  10. data/config/warble.rb +18 -0
  11. data/examples/README.md +116 -0
  12. data/examples/cluster.ru +2 -0
  13. data/examples/custom-watcher.rb +10 -0
  14. data/examples/httpclient-server.rb +7 -0
  15. data/examples/httpclient.rb +12 -0
  16. data/examples/httpclient2.rb +28 -0
  17. data/examples/js/FABridge.js +1452 -0
  18. data/examples/js/WebSocketMain.swf +830 -0
  19. data/examples/js/swfobject.js +851 -0
  20. data/examples/js/web_socket.js +312 -0
  21. data/examples/logger.rb +11 -0
  22. data/examples/reconfiguring-sinatra-watcher.rb +11 -0
  23. data/examples/reconfiguring-sinatra.rb +33 -0
  24. data/examples/simple-post.rb +17 -0
  25. data/examples/websocket.html +24 -0
  26. data/examples/websocket.rb +41 -0
  27. data/lib/noah.rb +6 -8
  28. data/lib/noah/app.rb +20 -268
  29. data/lib/noah/application_routes.rb +70 -0
  30. data/lib/noah/ark.rb +0 -0
  31. data/lib/noah/configuration_routes.rb +81 -0
  32. data/lib/noah/custom_watcher.rb +79 -0
  33. data/lib/noah/ephemeral_routes.rb +47 -0
  34. data/lib/noah/helpers.rb +37 -14
  35. data/lib/noah/host_routes.rb +69 -0
  36. data/lib/noah/models.rb +86 -5
  37. data/lib/noah/models/applications.rb +41 -0
  38. data/lib/noah/models/configurations.rb +49 -0
  39. data/lib/noah/models/ephemerals.rb +54 -0
  40. data/lib/noah/models/hosts.rb +56 -0
  41. data/lib/noah/models/services.rb +54 -0
  42. data/lib/noah/models/watchers.rb +62 -0
  43. data/lib/noah/passthrough.rb +11 -0
  44. data/lib/noah/service_routes.rb +71 -0
  45. data/lib/noah/validations.rb +1 -0
  46. data/lib/noah/validations/watcher_validations.rb +48 -0
  47. data/lib/noah/version.rb +1 -1
  48. data/lib/noah/watcher_routes.rb +45 -0
  49. data/noah.gemspec +25 -17
  50. data/spec/application_spec.rb +30 -30
  51. data/spec/configuration_spec.rb +78 -14
  52. data/spec/ephemeral_spec.rb +59 -0
  53. data/spec/host_spec.rb +21 -21
  54. data/spec/noahapp_application_spec.rb +6 -6
  55. data/spec/noahapp_configuration_spec.rb +5 -5
  56. data/spec/noahapp_ephemeral_spec.rb +115 -0
  57. data/spec/noahapp_host_spec.rb +3 -3
  58. data/spec/noahapp_service_spec.rb +10 -10
  59. data/spec/noahapp_watcher_spec.rb +123 -0
  60. data/spec/service_spec.rb +27 -27
  61. data/spec/spec_helper.rb +13 -22
  62. data/spec/support/db/.keep +0 -0
  63. data/spec/support/test-redis.conf +8 -0
  64. data/spec/watcher_spec.rb +62 -0
  65. data/views/index.haml +21 -15
  66. metadata +189 -146
  67. data/Gemfile.lock +0 -83
  68. data/doc/coverage/index.html +0 -138
  69. data/doc/coverage/jquery-1.3.2.min.js +0 -19
  70. data/doc/coverage/jquery.tablesorter.min.js +0 -15
  71. data/doc/coverage/lib-helpers_rb.html +0 -393
  72. data/doc/coverage/lib-models_rb.html +0 -1449
  73. data/doc/coverage/noah_rb.html +0 -2019
  74. data/doc/coverage/print.css +0 -12
  75. data/doc/coverage/rcov.js +0 -42
  76. data/doc/coverage/screen.css +0 -270
  77. data/lib/noah/applications.rb +0 -46
  78. data/lib/noah/configurations.rb +0 -49
  79. data/lib/noah/hosts.rb +0 -54
  80. data/lib/noah/services.rb +0 -57
  81. 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 &#x2713;</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>&nbsp;</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&hellip;</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">&mdash; <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> &nbsp; <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> &nbsp; <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&amp;copied=&amp;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&amp;copied=&amp;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&nbsp;&nbsp;<a href="/igrigorik/em-websocket/commit/cdedd7bd5c43e25fd0b30236889bc131b5cbe495" hotkey="c">cdedd7bd5c43e25fd0b3</a><br />
417
+ <span>t</span>ree&nbsp;&nbsp;&nbsp;&nbsp;<a href="/igrigorik/em-websocket/tree/cdedd7bd5c43e25fd0b30236889bc131b5cbe495" hotkey="t">087af53398020bbc09b5</a><br />
418
+
419
+ <span>p</span>arent&nbsp;
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&amp;copied=copied!&amp;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&amp;copied=copied!&amp;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>&reg;</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">&copy; 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
+