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.
- data/Manifest +1 -0
- data/README.rdoc +35 -3
- data/Rakefile +1 -1
- data/cockatoo.gemspec +3 -3
- data/extra/chat.css +503 -0
- metadata +4 -3
data/Manifest
CHANGED
data/README.rdoc
CHANGED
@@ -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
|
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
|
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.
|
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"
|
data/cockatoo.gemspec
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{cockatoo}
|
5
|
-
s.version = "0.
|
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"]
|
data/extra/chat.css
ADDED
@@ -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:
|
4
|
+
hash: 9
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
- 0
|
9
8
|
- 1
|
10
|
-
version: 0.
|
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
|