cockatoo 0.0.1 → 0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (6) hide show
  1. data/Manifest +1 -0
  2. data/README.rdoc +35 -3
  3. data/Rakefile +1 -1
  4. data/cockatoo.gemspec +3 -3
  5. data/extra/chat.css +503 -0
  6. metadata +4 -3
data/Manifest CHANGED
@@ -6,6 +6,7 @@ bin/cockatoo
6
6
  cockatoo.gemspec
7
7
  extra/_chat.html.haml
8
8
  extra/_chat_initialization.html.haml
9
+ extra/chat.css
9
10
  extra/chat.js
10
11
  lib/cockatoo_daemon.rb
11
12
  lib/cockatoo_http_server.rb
@@ -1,10 +1,12 @@
1
1
  = Cockatoo
2
2
 
3
- Cockatoo is a simple chat server. It's coded in Ruby with the help of the fantastic EventMachine.
3
+ Cockatoo is a simple chat server. It's coded in Ruby with the help of the fantastic EventMachine[http://rubyeventmachine.com/].
4
4
 
5
5
  There are several techniques to handle the real-time web, but we decided to use the Long Polling technique.
6
6
  It works with plenty of browsers.
7
7
 
8
+ If you don't know EventMachine and Long Polling, maybe you can read {"Long Polling with Event Machine"}[http://www.slideshare.net/novelys/long-polling-with-event-machine].
9
+
8
10
  * homepage[http://github.com/novelys/cockatoo]
9
11
 
10
12
  == Server part
@@ -14,10 +16,11 @@ The server part is coded in Ruby and EventMachine. The protocol is pretty straig
14
16
  == Client part
15
17
 
16
18
  You can use any client part you want.
17
- We provide 3 components so you can setup a simple chat system in any Ruby/Rails app you're working on :
19
+ We provide 4 components so you can setup a simple chat system in any Ruby/Rails app you're working on :
18
20
  * _chat_initialization[http://github.com/novelys/cockatoo/raw/master/extra/_chat_initialization.html.haml] HAML template
19
21
  * _chat[http://github.com/novelys/cockatoo/raw/master/extra/_chat.html.haml] HAML template
20
22
  * chat.js[http://github.com/novelys/cockatoo/raw/master/extra/chat.js] is the javascript client library (you will need jQuery[http://jquery.com])
23
+ * chat.css[http://github.com/novelys/cockatoo/raw/master/extra/chat.css] is the CSS stylesheet
21
24
 
22
25
  Just include the 2 templates and the javascript lib in your layout and you'll be good to go.
23
26
 
@@ -45,7 +48,36 @@ stop the server
45
48
  restart the server
46
49
  cockatoo restart
47
50
 
51
+ You will need an HTTP server in front of your Ruby/Rails app and your chat server.
52
+
53
+ In Nginx, you will have to add something like the following to your configuration file :
54
+
55
+ server {
56
+ listen 80;
57
+ server_name mywebapp.com;
58
+ root /home/rails/www/lollidays/current/public;
59
+ passenger_enabled on;
60
+
61
+ location /chat {
62
+ proxy_pass http://mychatserver:8000;
63
+ proxy_set_header X-Real-IP $remote_addr;
64
+ }
65
+ }
66
+
67
+ And in Apache :
68
+
69
+ ProxyPass /chat http://mychatserver:8000
70
+ ProxyPassReverse /chat http://mychatserver:8000
71
+ ProxyPreserveHost On
72
+
73
+
48
74
  == Copyright
49
75
 
50
- Copyright (c) 2010 Yann Klis. See LICENSE[http://github.com/novelys/cockatoo/raw/master/LICENSE] for details.
76
+ Copyright (c) 2010 Novelys[http://www.novelys.com]. See LICENSE[http://github.com/novelys/cockatoo/raw/master/LICENSE] for details.
77
+
78
+ == Contributors
79
+
80
+ * {Yann Klis}[http://github.com/yannski] inital work and packaging
81
+ * {Sébastien Pierre}[http://github.com/sebastien] client side HTML and CSS
82
+ * {Nicolas Blanco}[http://github.com/slainer68]
51
83
 
data/Rakefile CHANGED
@@ -1,5 +1,5 @@
1
1
  require 'echoe'
2
- Echoe.new('cockatoo', '0.0.1') do |p|
2
+ Echoe.new('cockatoo', '0.1') do |p|
3
3
  p.summary = "Cockatoo is a simple chat server"
4
4
  p.description = "Cockatoo is a simple chat server coded with EventMachine and using the Long Polling technique"
5
5
  p.url = "http://github.com/novelys/cockatoo"
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{cockatoo}
5
- s.version = "0.0.1"
5
+ s.version = "0.1"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Yann Klis"]
@@ -11,8 +11,8 @@ Gem::Specification.new do |s|
11
11
  s.description = %q{Cockatoo is a simple chat server coded with EventMachine and using the Long Polling technique}
12
12
  s.email = %q{yann.klis @nospam@ novelys.com}
13
13
  s.executables = ["cockatoo"]
14
- s.extra_rdoc_files = ["LICENSE", "README.rdoc", "bin/cockatoo", "extra/_chat.html.haml", "extra/_chat_initialization.html.haml", "extra/chat.js", "lib/cockatoo_daemon.rb", "lib/cockatoo_http_server.rb"]
15
- s.files = ["LICENSE", "Manifest", "README.rdoc", "Rakefile", "bin/cockatoo", "cockatoo.gemspec", "extra/_chat.html.haml", "extra/_chat_initialization.html.haml", "extra/chat.js", "lib/cockatoo_daemon.rb", "lib/cockatoo_http_server.rb"]
14
+ s.extra_rdoc_files = ["LICENSE", "README.rdoc", "bin/cockatoo", "extra/_chat.html.haml", "extra/_chat_initialization.html.haml", "extra/chat.css", "extra/chat.js", "lib/cockatoo_daemon.rb", "lib/cockatoo_http_server.rb"]
15
+ s.files = ["LICENSE", "Manifest", "README.rdoc", "Rakefile", "bin/cockatoo", "cockatoo.gemspec", "extra/_chat.html.haml", "extra/_chat_initialization.html.haml", "extra/chat.css", "extra/chat.js", "lib/cockatoo_daemon.rb", "lib/cockatoo_http_server.rb"]
16
16
  s.homepage = %q{http://github.com/novelys/cockatoo}
17
17
  s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Cockatoo", "--main", "README.rdoc"]
18
18
  s.require_paths = ["lib"]
@@ -0,0 +1,503 @@
1
+ .ChatApplication {
2
+ color: #7196c2;
3
+ font-family: Helvetica, Arial, sans-serif;
4
+ font-size: 11px;
5
+ margin: 0;
6
+ padding: 0;
7
+ border: 0px solid transparent;
8
+ background-color: transparent;
9
+ position: fixed;
10
+ bottom: 0px;
11
+ left: 0px;
12
+ right: 0px;
13
+ width: auto;
14
+ z-index: 203;
15
+ }
16
+
17
+ .ChatApplication .csb-body {
18
+ padding-right: 10px;
19
+ padding-left: 10px;
20
+ background-color: transparent;
21
+ }
22
+
23
+ .ChatApplication .bar-container {
24
+ position: relative;
25
+ z-index: 201;
26
+ float: right;
27
+ margin-left: 10px;
28
+ background-color: transparent;
29
+ }
30
+
31
+ .ChatApplication .bar-container .with-focus {
32
+ z-index: 202 !important;
33
+ }
34
+
35
+ .ChatApplication div,
36
+ .ChatApplication span,
37
+ .ChatApplication ul,
38
+ .ChatApplication li,
39
+ .ChatApplication h1,
40
+ .ChatApplication h2,
41
+ .ChatApplication h3,
42
+ .ChatApplication h4,
43
+ .ChatApplication h5,
44
+ .ChatApplication h6,
45
+ .ChatApplication button,
46
+ .ChatApplication a,
47
+ .ChatApplication img,
48
+ .ChatApplication input,
49
+ .ChatApplication form .is-chat {
50
+ color: #fff;
51
+ font-family: Helvetica, Arial, sans-serif;
52
+ font-size: 11px;
53
+ margin: 0;
54
+ padding: 0;
55
+ border: 0px solid transparent;
56
+ background: transparent;
57
+ width: auto;
58
+ float: none;
59
+ overflow: visible;
60
+ position: static;
61
+ text-align: left;
62
+ }
63
+
64
+ .ChatApplication div,
65
+ .ChatApplication ul,
66
+ .ChatApplication li,
67
+ .ChatApplication h1,
68
+ .ChatApplication h2,
69
+ .ChatApplication h3,
70
+ .ChatApplication h4,
71
+ .ChatApplication h5,
72
+ .ChatApplication h6,
73
+ .ChatApplication form {
74
+ display: block;
75
+ }
76
+
77
+ .ChatApplication div,
78
+ .ChatApplication span,
79
+ .ChatApplication ul,
80
+ .ChatApplication li,
81
+ .ChatApplication h1,
82
+ .ChatApplication h2,
83
+ .ChatApplication h3,
84
+ .ChatApplication h4,
85
+ .ChatApplication h5,
86
+ .ChatApplication h6,
87
+ .ChatApplication button,
88
+ .ChatApplication a,
89
+ .ChatApplication img,
90
+ .ChatApplication input,
91
+ .ChatApplication .is-chat {
92
+ display: span;
93
+ }
94
+
95
+ .ChatApplication .left {
96
+ float: left;
97
+ }
98
+
99
+ .ChatApplication .hi {
100
+ font-weight: bold;
101
+ }
102
+
103
+ .ChatApplication .hsep-5 {
104
+ padding-right: 5px;
105
+ }
106
+
107
+ .ChatApplication .hidden {
108
+ display: none;
109
+ }
110
+
111
+ .ChatApplication .TEMPLATES {
112
+ display: none !important;
113
+ }
114
+
115
+ .ChatApplication .clearer {
116
+ clear: both;
117
+ height: 0px;
118
+ }
119
+
120
+ .ChatApplication button {
121
+ padding: 2px;
122
+ background: #3cbae4;
123
+ border: 1px solid #0e4475;
124
+ border-bottom: 2px solid #0e4475;
125
+ border-right: 2px solid #0e4475;
126
+ cursor: pointer;
127
+ }
128
+
129
+ .ChatApplication button:hover {
130
+ background: #79d4f2;
131
+ }
132
+
133
+ .ChatApplication .StatusBar {
134
+ position: relative;
135
+ width: 150px;
136
+ height: 22px;
137
+ border: 1px solid #0e4475;
138
+ margin-bottom: -2px;
139
+ }
140
+
141
+ .ChatApplication .StatusBar.is-expanded {
142
+ border-top: 0px solid #0e4475;
143
+ }
144
+
145
+ .ChatApplication .StatusBar.is-expanded .us-body {
146
+ border-top: 1px solid #0e4475;
147
+ }
148
+
149
+ .ChatApplication .StatusBar .us-body {
150
+ padding: 2px;
151
+ max-width: 150px;
152
+ background: #3cbae4;
153
+ }
154
+
155
+ .ChatApplication .StatusBar .us-body .info {
156
+ overflow: hidden;
157
+ }
158
+
159
+ .ChatApplication .StatusBar .us-body .toggle {
160
+ position: absolute;
161
+ top: 0px;
162
+ right: 0px;
163
+ bottom: 0px;
164
+ height: 23px;
165
+ padding-left: 4px;
166
+ padding-right: 4px;
167
+ background: #3cbae4;
168
+ }
169
+
170
+ .ChatApplication .Bubble {
171
+ position: absolute;
172
+ bottom: 40px;
173
+ width: 300px;
174
+ margin-left: -149px;
175
+ z-index: 103;
176
+ }
177
+
178
+ .ChatApplication .Bubble .bbl-header {
179
+ border: 1px solid #0e4475;
180
+ border-bottom: 0px solid transparent;
181
+ background: #3cbae4;
182
+ padding: 10px;
183
+ padding-top: 5px;
184
+ padding-bottom: 5px;
185
+ }
186
+
187
+ .ChatApplication .Bubble .bbl-header .title {
188
+ font-weight: bold;
189
+ }
190
+
191
+ .ChatApplication .Bubble .bbl-header .title .date {
192
+ padding-left: 5px;
193
+ color: #dee9ef;
194
+ font-weight: normal;
195
+ }
196
+
197
+ .ChatApplication .Bubble .bbl-header .do-close {
198
+ position: absolute;
199
+ top: 7px;
200
+ right: 10px;
201
+ cursor: pointer;
202
+ font-size: 10px;
203
+ }
204
+
205
+ .ChatApplication .Bubble .bbl-body {
206
+ border-left: 1px solid #0e4475;
207
+ border-right: 1px solid #0e4475;
208
+ padding-left: 10px;
209
+ padding-right: 10px;
210
+ padding-top: 10px;
211
+ background: #79d4f2;
212
+ }
213
+
214
+ .ChatApplication .Bubble .bbl-body .icon img {
215
+ margin-right: 10px;
216
+ margin-bottom: 10px;
217
+ }
218
+
219
+ .ChatApplication .Bubble .bbl-body .text {
220
+ font-size: 14px;
221
+ padding-bottom: 10px;
222
+ }
223
+
224
+ .ChatApplication .Bubble .bbl-footer {
225
+ position: relative;
226
+ border: 1px solid #0e4475;
227
+ border-top: 0px solid transparent;
228
+ padding: 10px;
229
+ padding-top: 5px;
230
+ padding-bottom: 5px;
231
+ background: #79d4f2;
232
+ }
233
+
234
+ .ChatApplication .Bubble .bbl-footer .operations {
235
+ text-align: right;
236
+ }
237
+
238
+ .ChatApplication .Bubble .bbl-footer .tip {
239
+ position: absolute;
240
+ bottom: -24px;
241
+ width: 24px;
242
+ left: 150px;
243
+ height: 24px;
244
+ background: url(/images/chat/bubble-tip.png) no-repeat;
245
+ }
246
+
247
+ .ChatApplication .ChatLog {
248
+ position: absolute;
249
+ bottom: 20px;
250
+ width: 300px;
251
+ margin-left: -146px;
252
+ }
253
+
254
+ .ChatApplication .ChatLog .cl-header {
255
+ border: 1px solid #0e4475;
256
+ border-bottom: 0px solid #dee9ef;
257
+ background: #3cbae4;
258
+ }
259
+
260
+ .ChatApplication .ChatLog .cl-header .icon {
261
+ margin: 5px;
262
+ margin-right: 12px;
263
+ }
264
+
265
+ .ChatApplication .ChatLog .cl-header .name {
266
+ padding-top: 9px;
267
+ font-weight: bold;
268
+ font-size: 16px;
269
+ }
270
+
271
+ .ChatApplication .ChatLog .cl-header .status {
272
+ position: relative;
273
+ font-size: 12px;
274
+ color: #fff;
275
+ }
276
+
277
+ .ChatApplication .ChatLog .cl-header .do-collapse {
278
+ position: absolute;
279
+ top: 10px;
280
+ right: 30px;
281
+ cursor: pointer;
282
+ }
283
+
284
+ .ChatApplication .ChatLog .cl-header .do-close-discussion {
285
+ position: absolute;
286
+ top: 10px;
287
+ right: 10px;
288
+ cursor: pointer;
289
+ }
290
+
291
+ .ChatApplication .ChatLog .cl-header-2 {
292
+ background: #79d4f2;
293
+ border-left: 1px solid #0e4475;
294
+ border-right: 1px solid #0e4475;
295
+ border-bottom: 0px solid #0e4475;
296
+ padding: 5px;
297
+ padding-left: 5px;
298
+ padding-right: 5px;
299
+ color: #dee9ef;
300
+ font-size: 10px;
301
+ }
302
+
303
+ .ChatApplication .ChatLog .cl-header-2 .left {
304
+ float: left;
305
+ padding-top: 2px;
306
+ }
307
+
308
+ .ChatApplication .ChatLog .cl-header-2 .right {
309
+ float: right;
310
+ }
311
+
312
+ .ChatApplication .ChatLog .cl-header-2 .right button {
313
+ padding: 0px;
314
+ font-size: 9px;
315
+ }
316
+
317
+ .ChatApplication .ChatLog .cl-body {
318
+ border-left: 1px solid #0e4475;
319
+ border-right: 1px solid #0e4475;
320
+ background: #e6f7fd;
321
+ height: 300px;
322
+ overflow: auto;
323
+ }
324
+
325
+ .ChatApplication .ChatLog .cl-body ul {
326
+ background: #e6f7fd;
327
+ padding: 0;
328
+ margin: 0;
329
+ padding-top: 10px;
330
+ padding-bottom: 10px;
331
+ }
332
+
333
+ .ChatApplication .ChatLog .cl-body ul.is-empty {
334
+ background: #79d4f2;
335
+ }
336
+
337
+ .ChatApplication .ChatLog .cl-body li {
338
+ background: #d6f2fb;
339
+ padding: 0;
340
+ padding-left: 10px;
341
+ padding-right: 10px;
342
+ padding-bottom: 5px;
343
+ padding-top:2px;
344
+ margin-bottom: 10px;
345
+ border-bottom: 1px solid #3cbae4;
346
+ list-style-type: none;
347
+ }
348
+
349
+ .ChatApplication .ChatLog .cl-body li:last-child {
350
+ border-bottom: 1px solid #3cbae4;
351
+ padding-bottom: 5px;
352
+ margin-bottom: 0px;
353
+ }
354
+
355
+ .ChatApplication .ChatLog .cl-body li.placeholder {
356
+ display: none;
357
+ }
358
+
359
+ .ChatApplication .ChatLog .cl-body li .message .header {
360
+ color: #3cbae4;
361
+ }
362
+
363
+ .ChatApplication .ChatLog .cl-body li .message .header .left {
364
+ float: left;
365
+ }
366
+
367
+ .ChatApplication .ChatLog .cl-body li .message .header .right {
368
+ float: right;
369
+ }
370
+
371
+ .ChatApplication .ChatLog .cl-body li .message .body {
372
+ clear: both;
373
+ font-size: 12px;
374
+ font-style:italic;
375
+ color: #333;
376
+ padding-top:2px;
377
+ }
378
+
379
+ .ChatApplication .ChatLog .cl-body li.inbound .name,
380
+ .ChatApplication .ChatLog .cl-body li.outbound .name,
381
+ .ChatApplication .ChatLog .cl-body li .date {
382
+ color: #0e4475;
383
+ font-weight: bold;
384
+ font-size:9px;
385
+ }
386
+
387
+ .ChatApplication .ChatLog .cl-footer {
388
+ border: 1px solid #0e4475;
389
+ border-top: 0px solid transparent;
390
+ background: #3cbae4;
391
+ padding: 5px;
392
+ }
393
+
394
+ .ChatApplication .ChatLog .cl-footer .in-message {
395
+ position: relative;
396
+ bottom: -1px;
397
+ width: 254px;
398
+ padding: 2px;
399
+ background: #79d4f2;
400
+ border: 0px solid transparent;
401
+ border-bottom: 1px solid #0e4475;
402
+ color:#0e4475;
403
+ }
404
+
405
+ .ChatApplication .ChatLog .cl-footer .in-message:focus {
406
+ background: #fffdf2;
407
+ color:#0e4475;
408
+ }
409
+
410
+ .ChatApplication .ChatLog .cl-footer button {
411
+ padding: 0px;
412
+ }
413
+
414
+ .ChatApplication .FriendsList {
415
+ position: absolute;
416
+ bottom: 20px;
417
+ width: 250px;
418
+ margin-left: -96px;
419
+ }
420
+
421
+ .ChatApplication .FriendsList .fl-header {
422
+ border: 1px solid #0e4475;
423
+ border-bottom: 1px solid #0e4475;
424
+ background: #3cbae4;
425
+ }
426
+
427
+ .ChatApplication .FriendsList .fl-header .title {
428
+ padding: 5px;
429
+ padding-left: 10px;
430
+ font-weight: bold;
431
+ color: #fff;
432
+ }
433
+
434
+ .ChatApplication .FriendsList .fl-header .do-collapse {
435
+ position: absolute;
436
+ top: 7px;
437
+ right: 10px;
438
+ cursor: pointer;
439
+ }
440
+
441
+ .ChatApplication .FriendsList .fl-body {
442
+ background: #79d4f2;
443
+ border: 1px solid #0e4475;
444
+ border-top: 0px solid transparent;
445
+ max-height: 300px;
446
+ overflow: auto;
447
+ }
448
+
449
+ .ChatApplication .FriendsList .fl-body ul {
450
+ padding-top: 0px;
451
+ padding-bottom: 0px;
452
+ margin: 0;
453
+ padding: 0;
454
+ }
455
+
456
+ .ChatApplication .FriendsList .fl-body ul li {
457
+ list-style-type: none;
458
+ padding: 0;
459
+ margin: 0;
460
+ padding: 10px;
461
+ }
462
+
463
+ .ChatApplication .FriendsList .fl-body ul li:hover {
464
+ background: #7196c2;
465
+ }
466
+
467
+ .ChatApplication .FriendsList .fl-body ul li .message {
468
+ position: relative;
469
+ }
470
+
471
+ .ChatApplication .FriendsList .fl-body ul li .message .action {
472
+ position: absolute;
473
+ right: -3px;
474
+ top: -4px;
475
+ }
476
+
477
+ .ChatApplication .FriendsList .fl-body ul li .friend {
478
+ position: relative;
479
+ }
480
+
481
+ .ChatApplication .FriendsList .fl-body ul li .friend .icon {
482
+ margin-right: 12px;
483
+ }
484
+
485
+ .ChatApplication .FriendsList .fl-body ul li .friend .name {
486
+ font-weight: bold;
487
+ font-size: 12px;
488
+ line-height: 15px;
489
+ padding-right: 40px;
490
+ }
491
+
492
+ .ChatApplication .FriendsList .fl-body ul li .friend .status {
493
+ position: relative;
494
+ font-size: 12px;
495
+ color: #fff;
496
+ line-height: 15px;
497
+ }
498
+
499
+ .ChatApplication .FriendsList .fl-body ul li .friend .action {
500
+ position: absolute;
501
+ right: 5px;
502
+ top: 2px;
503
+ }
metadata CHANGED
@@ -1,13 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cockatoo
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 9
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 0
9
8
  - 1
10
- version: 0.0.1
9
+ version: "0.1"
11
10
  platform: ruby
12
11
  authors:
13
12
  - Yann Klis
@@ -110,6 +109,7 @@ extra_rdoc_files:
110
109
  - bin/cockatoo
111
110
  - extra/_chat.html.haml
112
111
  - extra/_chat_initialization.html.haml
112
+ - extra/chat.css
113
113
  - extra/chat.js
114
114
  - lib/cockatoo_daemon.rb
115
115
  - lib/cockatoo_http_server.rb
@@ -122,6 +122,7 @@ files:
122
122
  - cockatoo.gemspec
123
123
  - extra/_chat.html.haml
124
124
  - extra/_chat_initialization.html.haml
125
+ - extra/chat.css
125
126
  - extra/chat.js
126
127
  - lib/cockatoo_daemon.rb
127
128
  - lib/cockatoo_http_server.rb