cockatoo 0.0.1 → 0.1

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.
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