Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
converse.js
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
converse.js
Commits
ffbacad9
Commit
ffbacad9
authored
Feb 21, 2013
by
JC Brand
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of github.com:jcbrand/converse.js
Conflicts: converse.js
parents
75b9a35e
1c7ef191
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
214 additions
and
201 deletions
+214
-201
Libraries/jarnxmpp.core.handlers.js
Libraries/jarnxmpp.core.handlers.js
+3
-3
converse.css
converse.css
+132
-123
converse.js
converse.js
+79
-75
No files found.
Libraries/jarnxmpp.core.handlers.js
View file @
ffbacad9
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
$msg:false, Strophe:false, setTimeout:false, navigator:false, jarn:false, google:false, jarnxmpp:false, jQuery:false, sessionStorage:false, $iq:false, $pres:false, Image:false, */
$msg:false, Strophe:false, setTimeout:false, navigator:false, jarn:false, google:false, jarnxmpp:false, jQuery:false, sessionStorage:false, $iq:false, $pres:false, Image:false, */
(
function
(
jarnxmpp
,
$
,
portal_url
)
{
(
function
(
jarnxmpp
,
$
,
portal_url
)
{
portal_url
=
portal_url
||
''
;
portal_url
=
portal_url
||
''
;
jarnxmpp
.
Storage
=
{
jarnxmpp
.
Storage
=
{
...
@@ -230,9 +230,9 @@ $msg:false, Strophe:false, setTimeout:false, navigator:false, jarn:false, google
...
@@ -230,9 +230,9 @@ $msg:false, Strophe:false, setTimeout:false, navigator:false, jarn:false, google
data
=
{};
data
=
{};
}
}
$
.
ajax
({
$
.
ajax
({
'
url
'
:
portal_url
+
'
/@@xmpp-loader
'
,
'
url
'
:
portal_url
+
'
/@@xmpp-loader
'
,
'
dataType
'
:
'
json
'
,
'
dataType
'
:
'
json
'
,
'
data
'
:
data
,
'
data
'
:
data
,
'
success
'
:
function
(
data
)
{
'
success
'
:
function
(
data
)
{
if
(
!
((
'
rid
'
in
data
)
&&
(
'
sid
'
in
data
)
&&
(
'
BOSH_SERVICE
'
in
data
)))
{
if
(
!
((
'
rid
'
in
data
)
&&
(
'
sid
'
in
data
)
&&
(
'
BOSH_SERVICE
'
in
data
)))
{
return
;
return
;
...
...
converse.css
View file @
ffbacad9
...
@@ -3,44 +3,53 @@
...
@@ -3,44 +3,53 @@
}
}
#chatpanel
{
#chatpanel
{
z-index
:
4
;
/*--Keeps the panel on top of all other elements--*/
z-index
:
4
;
/*--Keeps the panel on top of all other elements--*/
position
:
fixed
;
position
:
fixed
;
bottom
:
0
;
right
:
0
;
bottom
:
0
;
right
:
0
;
height
:
332px
;
height
:
332px
;
width
:
auto
;
width
:
auto
;
}
}
#toggle-controlbox
{
#toggle-controlbox
{
position
:
fixed
;
position
:
fixed
;
font-size
:
80%
;
font-size
:
80%
;
bottom
:
0
;
bottom
:
0
;
right
:
0
;
right
:
0
;
border-top-right-radius
:
4px
;
border-top-right-radius
:
4px
;
border-top-left-radius
:
4px
;
border-top-left-radius
:
4px
;
background
:
#e3e2e2
;
background
:
#e3e2e2
;
border
:
1px
solid
#c3c3c3
;
border
:
1px
solid
#c3c3c3
;
border-bottom
:
none
;
border-bottom
:
none
;
padding
:
0.25em
0.5em
;
padding
:
0.25em
0.5em
;
margin-right
:
1em
;
margin-right
:
1em
;
height
:
1.1em
;
height
:
1.1em
;
}
}
#toggle-online-users
{
display
:
none
;
}
#connecting-to-chat
{
background
:
url('/spinner.gif')
no-repeat
;
padding-left
:
1.4em
;
}
.chat-head
{
.chat-head
{
color
:
#ffffff
;
color
:
#ffffff
;
margin
:
0
;
margin
:
0
;
font-size
:
100%
;
font-size
:
100%
;
border-top-right-radius
:
4px
;
border-top-right-radius
:
4px
;
border-top-left-radius
:
4px
;
border-top-left-radius
:
4px
;
padding
:
3px
0
3px
7px
;
padding
:
3px
0
3px
7px
;
}
}
.chat-head-chatbox
{
.chat-head-chatbox
{
background-color
:
rgb
(
89
,
106
,
114
);
background-color
:
rgb
(
89
,
106
,
114
);
background-color
:
rgba
(
89
,
106
,
114
,
1
);
background-color
:
rgba
(
89
,
106
,
114
,
1
);
}
}
.chat-head-chatroom
{
.chat-head-chatroom
{
background-color
:
#2D617A
;
background-color
:
#2D617A
;
}
}
.chatroom
.chat-area
{
.chatroom
.chat-area
{
...
@@ -60,15 +69,15 @@
...
@@ -60,15 +69,15 @@
height
:
272px
;
height
:
272px
;
background-color
:
white
;
background-color
:
white
;
overflow
:
auto
;
overflow
:
auto
;
border-right
:
1px
solid
#999
;
border-right
:
1px
solid
#999
;
border-bottom
:
1px
solid
#999
;
border-bottom
:
1px
solid
#999
;
border-bottom-right-radius
:
4px
;
border-bottom-right-radius
:
4px
;
}
}
.participants
ul
.participant-list
li
{
.participants
ul
.participant-list
li
{
overflow
:
hidden
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
text-overflow
:
ellipsis
;
white-space
:
nowrap
;
white-space
:
nowrap
;
display
:
block
;
display
:
block
;
font-size
:
12px
;
font-size
:
12px
;
padding
:
0.5em
0
0
0.5em
;
padding
:
0.5em
0
0
0.5em
;
...
@@ -89,58 +98,58 @@ input.new-chatroom-name {
...
@@ -89,58 +98,58 @@ input.new-chatroom-name {
}
}
.chat-blink
{
.chat-blink
{
background-color
:
#176689
;
background-color
:
#176689
;
border-right
:
1px
solid
#176689
;
border-right
:
1px
solid
#176689
;
border-left
:
1px
solid
#176689
;
border-left
:
1px
solid
#176689
;
}
}
.chat-content
{
.chat-content
{
padding
:
0.3em
;
padding
:
0.3em
;
font-size
:
13px
;
font-size
:
13px
;
color
:
#333333
;
color
:
#333333
;
height
:
193px
;
height
:
193px
;
overflow-y
:
auto
;
overflow-y
:
auto
;
border
:
1px
solid
#999
;
border
:
1px
solid
#999
;
border-bottom
:
0
;
border-bottom
:
0
;
border-top
:
0
;
border-top
:
0
;
background-color
:
#ffffff
;
background-color
:
#ffffff
;
line-height
:
1.3em
;
line-height
:
1.3em
;
}
}
.chat-textarea
{
.chat-textarea
{
border
:
0
;
border
:
0
;
height
:
50px
;
height
:
50px
;
width
:
100%
;
width
:
100%
;
}
}
.chat-textarea-chatbox-selected
{
.chat-textarea-chatbox-selected
{
border
:
1px
solid
#578308
;
border
:
1px
solid
#578308
;
margin
:
0
;
margin
:
0
;
}
}
.chat-textarea-chatroom-selected
{
.chat-textarea-chatroom-selected
{
border
:
2px
solid
#2D617A
;
border
:
2px
solid
#2D617A
;
margin
:
0
;
margin
:
0
;
}
}
.chat-info
{
.chat-info
{
color
:
#666666
;
color
:
#666666
;
}
}
.chat-message-me
{
.chat-message-me
{
font-weight
:
bold
;
font-weight
:
bold
;
color
:
#436976
;
color
:
#436976
;
}
}
.chat-message-room
{
.chat-message-room
{
font-weight
:
bold
;
font-weight
:
bold
;
color
:
#4B7003
;
color
:
#4B7003
;
white-space
:
nowrap
;
white-space
:
nowrap
;
}
}
.chat-message-them
{
.chat-message-them
{
font-weight
:
bold
;
font-weight
:
bold
;
color
:
#F62817
;
color
:
#F62817
;
white-space
:
nowrap
;
white-space
:
nowrap
;
}
}
...
@@ -149,7 +158,7 @@ input.new-chatroom-name {
...
@@ -149,7 +158,7 @@ input.new-chatroom-name {
color
:
#808080
;
color
:
#808080
;
}
}
div
#settings
,
div
#settings
,
div
#chatrooms
{
div
#chatrooms
{
height
:
279px
;
height
:
279px
;
}
}
...
@@ -160,11 +169,11 @@ p.not-implemented {
...
@@ -160,11 +169,11 @@ p.not-implemented {
color
:
#808080
;
color
:
#808080
;
}
}
div
.delayed
.chat-message-them
{
div
.delayed
.chat-message-them
{
color
:
#FB5D50
;
color
:
#FB5D50
;
}
}
div
.delayed
.chat-message-me
{
div
.delayed
.chat-message-me
{
color
:
#7EABBB
;
color
:
#7EABBB
;
}
}
...
@@ -175,30 +184,30 @@ div.delayed .chat-message-me {
...
@@ -175,30 +184,30 @@ div.delayed .chat-message-me {
}
}
.chat-head
.avatar
{
.chat-head
.avatar
{
height
:
35px
;
height
:
35px
;
float
:
left
;
float
:
left
;
margin-right
:
6px
;
margin-right
:
6px
;
}
}
div
.chat-title
{
div
.chat-title
{
height
:
1.1em
;
height
:
1.1em
;
color
:
white
;
color
:
white
;
font-weight
:
bold
;
font-weight
:
bold
;
line-height
:
15px
;
line-height
:
15px
;
display
:
block
;
display
:
block
;
margin-top
:
2px
;
margin-top
:
2px
;
margin-right
:
20px
;
margin-right
:
20px
;
overflow
:
hidden
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
text-overflow
:
ellipsis
;
white-space
:
nowrap
;
white-space
:
nowrap
;
text-shadow
:
rgba
(
0
,
0
,
0
,
0.51
)
0
-1px
0
;
text-shadow
:
rgba
(
0
,
0
,
0
,
0.51
)
0
-1px
0
;
}
}
.chat-head-chatbox
,
.chat-head-chatbox
,
.chat-head-chatroom
{
.chat-head-chatroom
{
background
:
linear-gradient
(
top
,
rgba
(
206
,
220
,
231
,
1
)
0%
,
rgba
(
89
,
106
,
114
,
1
)
100%
);
background
:
linear-gradient
(
top
,
rgba
(
206
,
220
,
231
,
1
)
0%
,
rgba
(
89
,
106
,
114
,
1
)
100%
);
height
:
33px
;
height
:
33px
;
position
:
relative
;
position
:
relative
;
}
}
p
.user-custom-message
,
p
.user-custom-message
,
...
@@ -207,9 +216,9 @@ p.chatroom-topic {
...
@@ -207,9 +216,9 @@ p.chatroom-topic {
font-style
:
italic
;
font-style
:
italic
;
height
:
1.3em
;
height
:
1.3em
;
clear
:
right
;
clear
:
right
;
overflow
:
hidden
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
text-overflow
:
ellipsis
;
white-space
:
nowrap
;
white-space
:
nowrap
;
}
}
.activated
{
.activated
{
...
@@ -224,7 +233,7 @@ a.subscribe-to-user {
...
@@ -224,7 +233,7 @@ a.subscribe-to-user {
div
.add-xmpp-contact
{
div
.add-xmpp-contact
{
display
:
block
;
display
:
block
;
border
:
1px
solid
#ddd
;
border
:
1px
solid
#ddd
;
padding
:
3px
3px
3px
3px
;
padding
:
3px
3px
3px
3px
;
margin
:
0
0.5em
;
margin
:
0
0.5em
;
clear
:
both
;
clear
:
both
;
...
@@ -233,12 +242,12 @@ div.add-xmpp-contact {
...
@@ -233,12 +242,12 @@ div.add-xmpp-contact {
}
}
div
.add-xmpp-contact
a
.add-xmpp-contact
{
div
.add-xmpp-contact
a
.add-xmpp-contact
{
text-shadow
:
0
1px
0
rgba
(
250
,
250
,
250
,
1
);
text-shadow
:
0
1px
0
rgba
(
250
,
250
,
250
,
1
);
padding-left
:
1.5em
;
padding-left
:
1.5em
;
}
}
#fancy-xmpp-status-select
a
.change-xmpp-status-message
{
#fancy-xmpp-status-select
a
.change-xmpp-status-message
{
text-shadow
:
0
1px
0
rgba
(
250
,
250
,
250
,
1
);
text-shadow
:
0
1px
0
rgba
(
250
,
250
,
250
,
1
);
background
:
url('/pencil_icon.png')
no-repeat
right
top
;
background
:
url('/pencil_icon.png')
no-repeat
right
top
;
float
:
right
;
float
:
right
;
clear
:
right
;
clear
:
right
;
...
@@ -247,13 +256,13 @@ div.add-xmpp-contact a.add-xmpp-contact {
...
@@ -247,13 +256,13 @@ div.add-xmpp-contact a.add-xmpp-contact {
}
}
#fancy-xmpp-status-select
a
.choose-xmpp-status
{
#fancy-xmpp-status-select
a
.choose-xmpp-status
{
text-shadow
:
0
1px
0
rgba
(
250
,
250
,
250
,
1
);
text-shadow
:
0
1px
0
rgba
(
250
,
250
,
250
,
1
);
padding-left
:
1.5em
;
padding-left
:
1.5em
;
width
:
140px
;
width
:
140px
;
display
:
block
;
display
:
block
;
overflow
:
hidden
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
text-overflow
:
ellipsis
;
white-space
:
nowrap
;
white-space
:
nowrap
;
float
:
left
;
float
:
left
;
}
}
...
@@ -272,13 +281,13 @@ form.search-xmpp-contact input {
...
@@ -272,13 +281,13 @@ form.search-xmpp-contact input {
.oc-chat-head
{
.oc-chat-head
{
margin
:
0
;
margin
:
0
;
color
:
#FFF
;
color
:
#FFF
;
border-top-right-radius
:
4px
;
border-top-right-radius
:
4px
;
border-top-left-radius
:
4px
;
border-top-left-radius
:
4px
;
height
:
35px
;
height
:
35px
;
clear
:
right
;
clear
:
right
;
background-color
:
#5390C8
;
background-color
:
#5390C8
;
padding
:
3px
0
0
0
;
padding
:
3px
0
0
0
;
}
}
.close-chatbox-button
{
.close-chatbox-button
{
...
@@ -334,24 +343,24 @@ form.search-xmpp-contact input {
...
@@ -334,24 +343,24 @@ form.search-xmpp-contact input {
#xmppchat-roster
dd
.current-xmpp-contact
,
#xmppchat-roster
dd
.current-xmpp-contact
,
#xmppchat-roster
dd
.current-xmpp-contact
:hover
{
#xmppchat-roster
dd
.current-xmpp-contact
:hover
{
background
:
url(images/user_online_panel.png)
no-repeat
5px
2px
;
background
:
url(images/user_online_panel.png)
no-repeat
5px
2px
;
}
}
#xmppchat-roster
dd
.current-xmpp-contact.offline
:hover
,
#xmppchat-roster
dd
.current-xmpp-contact.offline
:hover
,
#xmppchat-roster
dd
.current-xmpp-contact.unavailable
:hover
,
#xmppchat-roster
dd
.current-xmpp-contact.unavailable
:hover
,
#xmppchat-roster
dd
.current-xmpp-contact.offline
,
#xmppchat-roster
dd
.current-xmpp-contact.offline
,
#xmppchat-roster
dd
.current-xmpp-contact.unavailable
{
#xmppchat-roster
dd
.current-xmpp-contact.unavailable
{
background
:
url(images/user_offline_panel.png)
no-repeat
5px
2px
;
background
:
url(images/user_offline_panel.png)
no-repeat
5px
2px
;
}
}
#xmppchat-roster
dd
.current-xmpp-contact.busy
,
#xmppchat-roster
dd
.current-xmpp-contact.busy
,
#xmppchat-roster
dd
.current-xmpp-contact.busy
:hover
{
#xmppchat-roster
dd
.current-xmpp-contact.busy
:hover
{
background
:
url(images/user_busy_panel.png)
no-repeat
5px
2px
;
background
:
url(images/user_busy_panel.png)
no-repeat
5px
2px
;
}
}
#xmppchat-roster
dd
.current-xmpp-contact.away
,
#xmppchat-roster
dd
.current-xmpp-contact.away
,
#xmppchat-roster
dd
.current-xmpp-contact.away
:hover
{
#xmppchat-roster
dd
.current-xmpp-contact.away
:hover
{
background
:
url(images/user_away_panel.png)
no-repeat
5px
2px
;
background
:
url(images/user_away_panel.png)
no-repeat
5px
2px
;
}
}
#xmppchat-roster
dd
.requesting-xmpp-contact
button
{
#xmppchat-roster
dd
.requesting-xmpp-contact
button
{
...
@@ -360,7 +369,7 @@ form.search-xmpp-contact input {
...
@@ -360,7 +369,7 @@ form.search-xmpp-contact input {
#xmppchat-roster
dd
a
{
#xmppchat-roster
dd
a
{
margin-left
:
2em
;
margin-left
:
2em
;
text-shadow
:
0
1px
0
rgba
(
250
,
250
,
250
,
1
);
text-shadow
:
0
1px
0
rgba
(
250
,
250
,
250
,
1
);
}
}
.remove-xmpp-contact-dialog
.ui-dialog-buttonpane
{
.remove-xmpp-contact-dialog
.ui-dialog-buttonpane
{
...
@@ -386,7 +395,7 @@ form.search-xmpp-contact input {
...
@@ -386,7 +395,7 @@ form.search-xmpp-contact input {
color
:
#666
;
color
:
#666
;
border
:
none
;
border
:
none
;
padding
:
0.3em
0.5em
0.3em
0.5em
;
padding
:
0.3em
0.5em
0.3em
0.5em
;
text-shadow
:
0
1px
0
rgba
(
250
,
250
,
250
,
1
);
text-shadow
:
0
1px
0
rgba
(
250
,
250
,
250
,
1
);
}
}
#available-chatrooms
dt
{
#available-chatrooms
dt
{
...
@@ -404,8 +413,8 @@ dd.available-chatroom,
...
@@ -404,8 +413,8 @@ dd.available-chatroom,
border
:
none
;
border
:
none
;
display
:
block
;
display
:
block
;
padding
:
0
0.5em
0
0.5em
;
padding
:
0
0.5em
0
0.5em
;
color
:
#3f3f3f
;
color
:
#3f3f3f
;
text-shadow
:
0
1px
0
rgba
(
250
,
250
,
250
,
1
);
text-shadow
:
0
1px
0
rgba
(
250
,
250
,
250
,
1
);
}
}
#xmppchat-roster
dd
a
.remove-xmpp-contact
{
#xmppchat-roster
dd
a
.remove-xmpp-contact
{
...
@@ -417,8 +426,8 @@ dd.available-chatroom,
...
@@ -417,8 +426,8 @@ dd.available-chatroom,
.chatbox
,
.chatbox
,
.chatroom
{
.chatroom
{
box-shadow
:
1px
1px
5px
1px
rgba
(
0
,
0
,
0
,
0.4
);
box-shadow
:
1px
1px
5px
1px
rgba
(
0
,
0
,
0
,
0.4
);
display
:
none
;
display
:
none
;
float
:
right
;
float
:
right
;
margin-right
:
15px
;
margin-right
:
15px
;
z-index
:
3
;
/* So that it's higher than the content actions */
z-index
:
3
;
/* So that it's higher than the content actions */
...
@@ -426,16 +435,16 @@ dd.available-chatroom,
...
@@ -426,16 +435,16 @@ dd.available-chatroom,
}
}
.chatbox
{
.chatbox
{
width
:
200px
;
width
:
200px
;
}
}
.chatroom
{
.chatroom
{
width
:
300px
;
width
:
300px
;
height
:
311px
;
height
:
311px
;
}
}
.oc-chat-content
{
.oc-chat-content
{
height
:
272px
;
height
:
272px
;
width
:
199px
;
width
:
199px
;
padding
:
0
;
padding
:
0
;
}
}
...
@@ -456,12 +465,12 @@ dd.available-chatroom,
...
@@ -456,12 +465,12 @@ dd.available-chatroom,
}
}
div
#controlbox-panes
{
div
#controlbox-panes
{
background
:
-moz-linear-gradient
(
top
,
rgba
(
255
,
255
,
255
,
1
)
0%
,
rgba
(
240
,
240
,
240
,
1
)
100%
);
/* FF3.6+ */
background
:
-moz-linear-gradient
(
top
,
rgba
(
255
,
255
,
255
,
1
)
0%
,
rgba
(
240
,
240
,
240
,
1
)
100%
);
/* FF3.6+ */
background
:
-ms-linear-gradient
(
top
,
rgba
(
255
,
255
,
255
,
1
)
0%
,
rgba
(
240
,
240
,
240
,
1
)
100%
);
/* IE10+ */
background
:
-ms-linear-gradient
(
top
,
rgba
(
255
,
255
,
255
,
1
)
0%
,
rgba
(
240
,
240
,
240
,
1
)
100%
);
/* IE10+ */
background
:
-o-linear-gradient
(
top
,
rgba
(
255
,
255
,
255
,
1
)
0%
,
rgba
(
240
,
240
,
240
,
1
)
100%
);
/* Opera 11.10+ */
background
:
-o-linear-gradient
(
top
,
rgba
(
255
,
255
,
255
,
1
)
0%
,
rgba
(
240
,
240
,
240
,
1
)
100%
);
/* Opera 11.10+ */
background
:
-webkit-gradient
(
linear
,
left
top
,
left
bottom
,
color-stop
(
0%
,
rgba
(
255
,
255
,
255
,
1
)),
color-stop
(
100%
,
rgba
(
240
,
240
,
240
,
1
)));
/* Chrome,Safari4+ */
background
:
-webkit-gradient
(
linear
,
left
top
,
left
bottom
,
color-stop
(
0%
,
rgba
(
255
,
255
,
255
,
1
)),
color-stop
(
100%
,
rgba
(
240
,
240
,
240
,
1
)));
/* Chrome,Safari4+ */
background
:
-webkit-linear-gradient
(
top
,
rgba
(
255
,
255
,
255
,
1
)
0%
,
rgba
(
240
,
240
,
240
,
1
)
100%
);
/* Chrome10+,Safari5.1+ */
background
:
-webkit-linear-gradient
(
top
,
rgba
(
255
,
255
,
255
,
1
)
0%
,
rgba
(
240
,
240
,
240
,
1
)
100%
);
/* Chrome10+,Safari5.1+ */
background
:
linear-gradient
(
top
,
rgba
(
255
,
255
,
255
,
1
)
0%
,
rgba
(
240
,
240
,
240
,
1
)
100%
);
/* W3C */
background
:
linear-gradient
(
top
,
rgba
(
255
,
255
,
255
,
1
)
0%
,
rgba
(
240
,
240
,
240
,
1
)
100%
);
/* W3C */
background-color
:
white
;
background-color
:
white
;
border-bottom-left-radius
:
4px
;
border-bottom-left-radius
:
4px
;
border-bottom-right-radius
:
4px
;
border-bottom-right-radius
:
4px
;
...
@@ -482,18 +491,18 @@ select#select-xmpp-status {
...
@@ -482,18 +491,18 @@ select#select-xmpp-status {
/* @group Tabs */
/* @group Tabs */
.chat-head
#controlbox-tabs
{
.chat-head
#controlbox-tabs
{
text-align
:
center
;
text-align
:
center
;
display
:
inline
;
display
:
inline
;
overflow
:
hidden
;
overflow
:
hidden
;
font-size
:
12px
;
font-size
:
12px
;
list-style-type
:
none
;
list-style-type
:
none
;
}
}
/* single tab */
/* single tab */
.chat-head
#controlbox-tabs
li
{
.chat-head
#controlbox-tabs
li
{
width
:
40%
;
width
:
40%
;
float
:
left
;
float
:
left
;
text-shadow
:
white
0
1px
0
;
text-shadow
:
white
0
1px
0
;
}
}
ul
#controlbox-tabs
li
a
{
ul
#controlbox-tabs
li
a
{
...
@@ -509,27 +518,27 @@ ul#controlbox-tabs li a {
...
@@ -509,27 +518,27 @@ ul#controlbox-tabs li a {
border-top-left-radius
:
4px
;
border-top-left-radius
:
4px
;
color
:
#666
;
color
:
#666
;
background-color
:
#EEE
;
background-color
:
#EEE
;
background
:
-moz-linear-gradient
(
top
,
rgba
(
245
,
245
,
245
,
1
)
0%
,
rgba
(
255
,
255
,
255
,
1
)
100%
);
/* FF3.6+ */
background
:
-moz-linear-gradient
(
top
,
rgba
(
245
,
245
,
245
,
1
)
0%
,
rgba
(
255
,
255
,
255
,
1
)
100%
);
/* FF3.6+ */
background
:
-ms-linear-gradient
(
top
,
rgba
(
245
,
245
,
245
,
1
)
0%
,
rgba
(
255
,
255
,
255
,
1
)
100%
);
/* IE10+ */
background
:
-ms-linear-gradient
(
top
,
rgba
(
245
,
245
,
245
,
1
)
0%
,
rgba
(
255
,
255
,
255
,
1
)
100%
);
/* IE10+ */
background
:
-o-linear-gradient
(
top
,
rgba
(
245
,
245
,
245
,
1
)
0%
,
rgba
(
255
,
255
,
255
,
1
)
100%
);
/* Opera 11.10+ */
background
:
-o-linear-gradient
(
top
,
rgba
(
245
,
245
,
245
,
1
)
0%
,
rgba
(
255
,
255
,
255
,
1
)
100%
);
/* Opera 11.10+ */
background
:
-webkit-gradient
(
linear
,
left
top
,
left
bottom
,
color-stop
(
0%
,
rgba
(
255
,
255
,
255
,
1
)),
color-stop
(
100%
,
rgba
(
245
,
245
,
245
,
1
)));
/* Chrome,Safari4+ */
background
:
-webkit-gradient
(
linear
,
left
top
,
left
bottom
,
color-stop
(
0%
,
rgba
(
255
,
255
,
255
,
1
)),
color-stop
(
100%
,
rgba
(
245
,
245
,
245
,
1
)));
/* Chrome,Safari4+ */
background
:
-webkit-linear-gradient
(
top
,
rgba
(
245
,
245
,
245
,
1
)
0%
,
rgba
(
255
,
255
,
255
,
1
)
100%
);
/* Chrome10+,Safari5.1+ */
background
:
-webkit-linear-gradient
(
top
,
rgba
(
245
,
245
,
245
,
1
)
0%
,
rgba
(
255
,
255
,
255
,
1
)
100%
);
/* Chrome10+,Safari5.1+ */
background
:
linear-gradient
(
top
,
rgba
(
245
,
245
,
245
,
1
)
0%
,
rgba
(
255
,
255
,
255
,
1
)
100%
);
/* W3C */
background
:
linear-gradient
(
top
,
rgba
(
245
,
245
,
245
,
1
)
0%
,
rgba
(
255
,
255
,
255
,
1
)
100%
);
/* W3C */
text-shadow
:
0
1px
0
rgba
(
250
,
250
,
250
,
1
);
text-shadow
:
0
1px
0
rgba
(
250
,
250
,
250
,
1
);
}
}
.chat-head
#controlbox-tabs
li
a
:hover
{
.chat-head
#controlbox-tabs
li
a
:hover
{
color
:
black
;
color
:
black
;
}
}
.chat-head
#controlbox-tabs
li
a
{
.chat-head
#controlbox-tabs
li
a
{
background-color
:
rgba
(
240
,
240
,
240
,
1
);
background-color
:
rgba
(
240
,
240
,
240
,
1
);
box-shadow
:
inset
0
0
8px
rgba
(
0
,
0
,
0
,
0.2
);
box-shadow
:
inset
0
0
8px
rgba
(
0
,
0
,
0
,
0.2
);
}
}
ul
#controlbox-tabs
a
.current
,
ul
#controlbox-tabs
a
.current
:hover
{
ul
#controlbox-tabs
a
.current
,
ul
#controlbox-tabs
a
.current
:hover
{
box-shadow
:
none
;
box-shadow
:
none
;
color
:
#000
;
color
:
#000
;
border-bottom
:
0
;
border-bottom
:
0
;
height
:
35px
;
height
:
35px
;
}
}
...
@@ -566,7 +575,7 @@ form.sendXMPPMessage {
...
@@ -566,7 +575,7 @@ form.sendXMPPMessage {
padding
:
1px
2px
1px
1px
;
padding
:
1px
2px
1px
1px
;
}
}
/* status dropdown styles */
/* status dropdown styles */
dl
.dropdown
{
dl
.dropdown
{
margin-right
:
0.5em
;
margin-right
:
0.5em
;
}
}
...
@@ -582,7 +591,7 @@ input.custom-xmpp-status {
...
@@ -582,7 +591,7 @@ input.custom-xmpp-status {
}
}
#fancy-xmpp-status-select
{
#fancy-xmpp-status-select
{
border
:
1px
solid
#ddd
;
border
:
1px
solid
#ddd
;
height
:
22px
;
height
:
22px
;
}
}
...
@@ -590,43 +599,43 @@ input.custom-xmpp-status {
...
@@ -590,43 +599,43 @@ input.custom-xmpp-status {
cursor
:
pointer
;
display
:
block
;
padding
:
5px
;
cursor
:
pointer
;
display
:
block
;
padding
:
5px
;
}
}
.dropdown
dd
ul
{
.dropdown
dd
ul
{
list-style
:
none
;
list-style
:
none
;
padding
:
5px
0
;
padding
:
5px
0
;
position
:
absolute
;
left
:
0
;
top
:
0
;
position
:
absolute
;
left
:
0
;
top
:
0
;
border
:
1px
solid
#ddd
;
border
:
1px
solid
#ddd
;
border-top
:
0
;
border-top
:
0
;
width
:
99%
;
width
:
99%
;
background-color
:
#FFF
;
background-color
:
#FFF
;
z-index
:
4
;
z-index
:
4
;
}
}
.dropdown
dd
ul
li
a
:hover
{
.dropdown
dd
ul
li
a
:hover
{
background-color
:
#bed6e5
;
background-color
:
#bed6e5
;
}
}
.dropdown
span
.value
{
.dropdown
span
.value
{
display
:
none
;
display
:
none
;
}
}
.dropdown
dd
ul
li
a
{
.dropdown
dd
ul
li
a
{
padding
:
5px
5px
5px
30px
;
padding
:
5px
5px
5px
30px
;
display
:
block
;
display
:
block
;
}
}
.dropdown
a
.online
{
.dropdown
a
.online
{
background
:
url(images/user_online_panel.png)
no-repeat
left
;
background
:
url(images/user_online_panel.png)
no-repeat
left
;
}
}
.dropdown
a
.offline
{
.dropdown
a
.offline
{
background
:
url(images/user_offline_panel.png)
no-repeat
left
;
background
:
url(images/user_offline_panel.png)
no-repeat
left
;
}
}
.dropdown
a
.busy
{
.dropdown
a
.busy
{
background
:
url(images/user_busy_panel.png)
no-repeat
left
;
background
:
url(images/user_busy_panel.png)
no-repeat
left
;
}
}
.dropdown
a
.away
{
.dropdown
a
.away
{
background
:
url(images/user_away_panel.png)
no-repeat
left
;
background
:
url(images/user_away_panel.png)
no-repeat
left
;
}
}
converse.js
View file @
ffbacad9
...
@@ -14,7 +14,7 @@
...
@@ -14,7 +14,7 @@
if
(
console
===
undefined
||
console
.
log
===
undefined
)
{
if
(
console
===
undefined
||
console
.
log
===
undefined
)
{
console
=
{
log
:
function
()
{},
error
:
function
()
{}
};
console
=
{
log
:
function
()
{},
error
:
function
()
{}
};
}
}
if
(
typeof
define
===
'
function
'
&&
define
.
amd
)
{
if
(
typeof
define
===
'
function
'
&&
define
.
amd
)
{
require
.
config
({
require
.
config
({
// paths: {
// paths: {
// "patterns": "Libraries/Patterns"
// "patterns": "Libraries/Patterns"
...
@@ -25,7 +25,7 @@
...
@@ -25,7 +25,7 @@
//These script dependencies should be loaded before loading
//These script dependencies should be loaded before loading
//backbone.js
//backbone.js
deps
:
[
deps
:
[
'
Libraries/underscore
'
,
'
Libraries/underscore
'
,
'
jquery
'
],
'
jquery
'
],
//Once loaded, use the global 'Backbone' as the
//Once loaded, use the global 'Backbone' as the
//module value.
//module value.
...
@@ -62,7 +62,7 @@
...
@@ -62,7 +62,7 @@
return
factory
(
jQuery
,
store
,
_
,
console
);
return
factory
(
jQuery
,
store
,
_
,
console
);
}
}
);
);
}
else
{
}
else
{
// Browser globals
// Browser globals
var
store
=
new
Burry
.
Store
(
'
collective.xmpp.chat
'
);
var
store
=
new
Burry
.
Store
(
'
collective.xmpp.chat
'
);
_
.
templateSettings
=
{
_
.
templateSettings
=
{
...
@@ -84,12 +84,12 @@
...
@@ -84,12 +84,12 @@
pad
=
function
(
num
)
{
pad
=
function
(
num
)
{
return
(
num
<
10
)
?
'
0
'
+
num
:
''
+
num
;
return
(
num
<
10
)
?
'
0
'
+
num
:
''
+
num
;
};
};
return
date
.
getUTCFullYear
()
+
'
-
'
+
return
date
.
getUTCFullYear
()
+
'
-
'
+
pad
(
date
.
getUTCMonth
()
+
1
)
+
'
-
'
+
pad
(
date
.
getUTCMonth
()
+
1
)
+
'
-
'
+
pad
(
date
.
getUTCDate
())
+
'
T
'
+
pad
(
date
.
getUTCDate
())
+
'
T
'
+
pad
(
date
.
getUTCHours
())
+
'
:
'
+
pad
(
date
.
getUTCHours
())
+
'
:
'
+
pad
(
date
.
getUTCMinutes
())
+
'
:
'
+
pad
(
date
.
getUTCMinutes
())
+
'
:
'
+
pad
(
date
.
getUTCSeconds
())
+
'
.000Z
'
;
pad
(
date
.
getUTCSeconds
())
+
'
.000Z
'
;
}
}
};
};
...
@@ -132,7 +132,7 @@
...
@@ -132,7 +132,7 @@
};
};
xmppchat
.
collections
=
{
xmppchat
.
collections
=
{
/* FIXME: XEP-0136 specifies 'urn:xmpp:archive' but the mod_archive_odbc
/* FIXME: XEP-0136 specifies 'urn:xmpp:archive' but the mod_archive_odbc
* add-on for ejabberd wants the URL below. This might break for other
* add-on for ejabberd wants the URL below. This might break for other
* Jabber servers.
* Jabber servers.
*/
*/
...
@@ -150,17 +150,17 @@
...
@@ -150,17 +150,17 @@
.
c
(
'
max
'
)
.
c
(
'
max
'
)
.
t
(
'
1
'
);
.
t
(
'
1
'
);
xmppchat
.
connection
.
sendIQ
(
iq
,
xmppchat
.
connection
.
sendIQ
(
iq
,
callback
,
callback
,
function
()
{
function
()
{
console
.
log
(
'
Error while retrieving collections
'
);
console
.
log
(
'
Error while retrieving collections
'
);
});
});
};
};
xmppchat
.
collections
.
getLastMessages
=
function
(
jid
,
callback
)
{
xmppchat
.
collections
.
getLastMessages
=
function
(
jid
,
callback
)
{
var
that
=
this
;
var
that
=
this
;
this
.
getLastCollection
(
jid
,
function
(
result
)
{
this
.
getLastCollection
(
jid
,
function
(
result
)
{
// Retrieve the last page of a collection (max 30 elements).
// Retrieve the last page of a collection (max 30 elements).
var
$collection
=
$
(
result
).
find
(
'
chat
'
),
var
$collection
=
$
(
result
).
find
(
'
chat
'
),
jid
=
$collection
.
attr
(
'
with
'
),
jid
=
$collection
.
attr
(
'
with
'
),
start
=
$collection
.
attr
(
'
start
'
),
start
=
$collection
.
attr
(
'
start
'
),
...
@@ -208,7 +208,7 @@
...
@@ -208,7 +208,7 @@
var
msgs
=
store
.
get
(
hex_sha1
(
this
.
get
(
'
own_jid
'
)
+
bare_jid
))
||
[];
var
msgs
=
store
.
get
(
hex_sha1
(
this
.
get
(
'
own_jid
'
)
+
bare_jid
))
||
[];
if
(
msgs
.
length
)
{
if
(
msgs
.
length
)
{
return
sjcl
.
decrypt
(
hex_sha1
(
this
.
get
(
'
own_jid
'
)),
msgs
[
msgs
.
length
-
1
]);
return
sjcl
.
decrypt
(
hex_sha1
(
this
.
get
(
'
own_jid
'
)),
msgs
[
msgs
.
length
-
1
]);
}
}
},
},
clearMessages
:
function
(
jid
)
{
clearMessages
:
function
(
jid
)
{
...
@@ -218,7 +218,7 @@
...
@@ -218,7 +218,7 @@
getOpenChats
:
function
()
{
getOpenChats
:
function
()
{
var
key
=
hex_sha1
(
this
.
get
(
'
own_jid
'
)
+
'
-open-chats
'
),
var
key
=
hex_sha1
(
this
.
get
(
'
own_jid
'
)
+
'
-open-chats
'
),
chats
=
store
.
get
(
key
)
||
[],
chats
=
store
.
get
(
key
)
||
[],
decrypted_chats
=
[],
decrypted_chats
=
[],
i
;
i
;
...
@@ -255,7 +255,7 @@
...
@@ -255,7 +255,7 @@
store
.
flush
();
store
.
flush
();
}
}
});
});
xmppchat
.
ChatBox
=
Backbone
.
Model
.
extend
({
xmppchat
.
ChatBox
=
Backbone
.
Model
.
extend
({
initialize
:
function
()
{
initialize
:
function
()
{
this
.
set
({
this
.
set
({
...
@@ -279,15 +279,15 @@
...
@@ -279,15 +279,15 @@
},
},
message_template
:
_
.
template
(
message_template
:
_
.
template
(
'
<div class="chat-message {{extra_classes}}">
'
+
'
<div class="chat-message {{extra_classes}}">
'
+
'
<span class="chat-message-{{sender}}">{{time}} {{username}}: </span>
'
+
'
<span class="chat-message-{{sender}}">{{time}} {{username}}: </span>
'
+
'
<span class="chat-message-content">{{message}}</span>
'
+
'
<span class="chat-message-content">{{message}}</span>
'
+
'
</div>
'
),
'
</div>
'
),
action_template
:
_
.
template
(
action_template
:
_
.
template
(
'
<div class="chat-message {{extra_classes}}">
'
+
'
<div class="chat-message {{extra_classes}}">
'
+
'
<span class="chat-message-{{sender}}">{{time}}: </span>
'
+
'
<span class="chat-message-{{sender}}">{{time}}: </span>
'
+
'
<span class="chat-message-content">{{message}}</span>
'
+
'
<span class="chat-message-content">{{message}}</span>
'
+
'
</div>
'
),
'
</div>
'
),
autoLink
:
function
(
text
)
{
autoLink
:
function
(
text
)
{
...
@@ -314,9 +314,9 @@
...
@@ -314,9 +314,9 @@
if
(
minutes
.
length
==
1
)
{
minutes
=
'
0
'
+
minutes
;}
if
(
minutes
.
length
==
1
)
{
minutes
=
'
0
'
+
minutes
;}
$chat_content
.
find
(
'
div.chat-event
'
).
remove
();
$chat_content
.
find
(
'
div.chat-event
'
).
remove
();
$chat_content
.
append
(
this
.
message_template
({
$chat_content
.
append
(
this
.
message_template
({
'
sender
'
:
'
me
'
,
'
sender
'
:
'
me
'
,
'
time
'
:
time
,
'
time
'
:
time
,
'
message
'
:
message
,
'
message
'
:
message
,
'
username
'
:
'
me
'
,
'
username
'
:
'
me
'
,
'
extra_classes
'
:
''
'
extra_classes
'
:
''
}));
}));
...
@@ -331,8 +331,8 @@
...
@@ -331,8 +331,8 @@
},
},
messageReceived
:
function
(
message
)
{
messageReceived
:
function
(
message
)
{
/* XXX: event.mtype should be 'xhtml' for XHTML-IM messages,
/* XXX: event.mtype should be 'xhtml' for XHTML-IM messages,
but I only seem to get 'text'.
but I only seem to get 'text'.
*/
*/
var
body
=
this
.
autoLink
(
$message
.
children
(
'
body
'
).
text
()),
var
body
=
this
.
autoLink
(
$message
.
children
(
'
body
'
).
text
()),
from
=
Strophe
.
getBareJidFromJid
(
$message
.
attr
(
'
from
'
)),
from
=
Strophe
.
getBareJidFromJid
(
$message
.
attr
(
'
from
'
)),
...
@@ -368,13 +368,13 @@
...
@@ -368,13 +368,13 @@
// XXX: Test properly (for really old messages we somehow need to show
// XXX: Test properly (for really old messages we somehow need to show
// their date as well)
// their date as well)
stamp
=
$message
.
find
(
'
delay
'
).
attr
(
'
stamp
'
);
stamp
=
$message
.
find
(
'
delay
'
).
attr
(
'
stamp
'
);
time
=
(
new
Date
(
stamp
)).
toLocaleTimeString
().
substring
(
0
,
5
);
time
=
(
new
Date
(
stamp
)).
toLocaleTimeString
().
substring
(
0
,
5
);
}
else
{
}
else
{
time
=
(
new
Date
()).
toLocaleTimeString
().
substring
(
0
,
5
);
time
=
(
new
Date
()).
toLocaleTimeString
().
substring
(
0
,
5
);
}
}
$chat_content
.
append
(
$chat_content
.
append
(
this
.
message_template
({
this
.
message_template
({
'
sender
'
:
sender
,
'
sender
'
:
sender
,
'
time
'
:
time
,
'
time
'
:
time
,
'
message
'
:
body
,
'
message
'
:
body
,
'
username
'
:
username
,
'
username
'
:
username
,
...
@@ -391,11 +391,11 @@
...
@@ -391,11 +391,11 @@
insertClientStoredMessages
:
function
()
{
insertClientStoredMessages
:
function
()
{
var
msgs
=
xmppchat
.
storage
.
getMessages
(
this
.
model
.
get
(
'
jid
'
)),
var
msgs
=
xmppchat
.
storage
.
getMessages
(
this
.
model
.
get
(
'
jid
'
)),
$content
=
this
.
$el
.
find
(
'
.chat-content
'
),
$content
=
this
.
$el
.
find
(
'
.chat-content
'
),
prev_date
,
this_date
,
now
,
separator
,
i
;
prev_date
,
this_date
,
now
,
separator
,
i
;
for
(
i
=
0
;
i
<
_
.
size
(
msgs
);
i
++
)
{
for
(
i
=
0
;
i
<
_
.
size
(
msgs
);
i
++
)
{
var
msg
=
msgs
[
i
],
var
msg
=
msgs
[
i
],
msg_array
=
msg
.
split
(
'
'
,
2
),
msg_array
=
msg
.
split
(
'
'
,
2
),
date
=
msg_array
[
0
];
date
=
msg_array
[
0
];
...
@@ -416,16 +416,16 @@
...
@@ -416,16 +416,16 @@
if
(
msg_array
[
1
]
==
'
to
'
)
{
if
(
msg_array
[
1
]
==
'
to
'
)
{
$content
.
append
(
$content
.
append
(
this
.
message_template
({
this
.
message_template
({
'
sender
'
:
'
me
'
,
'
sender
'
:
'
me
'
,
'
time
'
:
this_date
.
toLocaleTimeString
().
substring
(
0
,
5
),
'
time
'
:
this_date
.
toLocaleTimeString
().
substring
(
0
,
5
),
'
message
'
:
msg
,
'
message
'
:
msg
,
'
username
'
:
'
me
'
,
'
username
'
:
'
me
'
,
'
extra_classes
'
:
'
delayed
'
'
extra_classes
'
:
'
delayed
'
}));
}));
}
else
{
}
else
{
$content
.
append
(
$content
.
append
(
this
.
message_template
({
this
.
message_template
({
'
sender
'
:
'
them
'
,
'
sender
'
:
'
them
'
,
'
time
'
:
this_date
.
toLocaleTimeString
().
substring
(
0
,
5
),
'
time
'
:
this_date
.
toLocaleTimeString
().
substring
(
0
,
5
),
'
message
'
:
msg
,
'
message
'
:
msg
,
'
username
'
:
this
.
model
.
get
(
'
fullname
'
).
split
(
'
'
)[
0
],
'
username
'
:
this
.
model
.
get
(
'
fullname
'
).
split
(
'
'
)[
0
],
...
@@ -563,7 +563,7 @@
...
@@ -563,7 +563,7 @@
'
</a>
'
+
'
</a>
'
+
'
<p class="user-custom-message"><p/>
'
+
'
<p class="user-custom-message"><p/>
'
+
'
</div>
'
+
'
</div>
'
+
'
<div class="chat-content"></div>
'
+
'
<div class="chat-content"></div>
'
+
'
<form class="sendXMPPMessage" action="" method="post">
'
+
'
<form class="sendXMPPMessage" action="" method="post">
'
+
'
<textarea
'
+
'
<textarea
'
+
'
type="text"
'
+
'
type="text"
'
+
...
@@ -650,7 +650,7 @@
...
@@ -650,7 +650,7 @@
$
.
getJSON
(
portal_url
+
"
/search-users?q=
"
+
$
(
ev
.
target
).
find
(
'
input.username
'
).
val
(),
function
(
data
)
{
$
.
getJSON
(
portal_url
+
"
/search-users?q=
"
+
$
(
ev
.
target
).
find
(
'
input.username
'
).
val
(),
function
(
data
)
{
var
$results_el
=
$
(
'
#found-users
'
);
var
$results_el
=
$
(
'
#found-users
'
);
$
(
data
).
each
(
function
(
idx
,
obj
)
{
$
(
data
).
each
(
function
(
idx
,
obj
)
{
if
(
$results_el
.
children
().
length
>
0
)
{
if
(
$results_el
.
children
().
length
>
0
)
{
$results_el
.
empty
();
$results_el
.
empty
();
}
}
$results_el
.
append
(
$results_el
.
append
(
...
@@ -717,7 +717,7 @@
...
@@ -717,7 +717,7 @@
updateRoomsList
:
function
()
{
updateRoomsList
:
function
()
{
xmppchat
.
connection
.
muc
.
listRooms
(
xmppchat
.
connection
.
muc_domain
,
$
.
proxy
(
function
(
iq
)
{
xmppchat
.
connection
.
muc
.
listRooms
(
xmppchat
.
connection
.
muc_domain
,
$
.
proxy
(
function
(
iq
)
{
var
room
,
name
,
jid
,
i
,
var
room
,
name
,
jid
,
i
,
rooms
=
$
(
iq
).
find
(
'
query
'
).
find
(
'
item
'
);
rooms
=
$
(
iq
).
find
(
'
query
'
).
find
(
'
item
'
);
this
.
$el
.
find
(
'
#available-chatrooms
'
).
find
(
'
dd.available-chatroom
'
).
remove
();
this
.
$el
.
find
(
'
#available-chatrooms
'
).
find
(
'
dd.available-chatroom
'
).
remove
();
if
(
rooms
.
length
)
{
if
(
rooms
.
length
)
{
...
@@ -795,7 +795,7 @@
...
@@ -795,7 +795,7 @@
$tab_panel
=
$
(
$tab
.
attr
(
'
href
'
)),
$tab_panel
=
$
(
$tab
.
attr
(
'
href
'
)),
$sibling_panel
=
$
(
$sibling
.
attr
(
'
href
'
));
$sibling_panel
=
$
(
$sibling
.
attr
(
'
href
'
));
$sibling_panel
.
fadeOut
(
'
fast
'
,
function
()
{
$sibling_panel
.
fadeOut
(
'
fast
'
,
function
()
{
$sibling
.
removeClass
(
'
current
'
);
$sibling
.
removeClass
(
'
current
'
);
$tab
.
addClass
(
'
current
'
);
$tab
.
addClass
(
'
current
'
);
$tab_panel
.
fadeIn
(
'
fast
'
,
function
()
{
$tab_panel
.
fadeIn
(
'
fast
'
,
function
()
{
...
@@ -842,8 +842,8 @@
...
@@ -842,8 +842,8 @@
closeChatRoom
:
function
()
{
closeChatRoom
:
function
()
{
this
.
closeChat
();
this
.
closeChat
();
xmppchat
.
connection
.
muc
.
leave
(
xmppchat
.
connection
.
muc
.
leave
(
this
.
model
.
get
(
'
jid
'
),
this
.
model
.
get
(
'
jid
'
),
this
.
model
.
get
(
'
nick
'
),
this
.
model
.
get
(
'
nick
'
),
this
.
onLeave
,
this
.
onLeave
,
undefined
);
undefined
);
delete
xmppchat
.
chatboxesview
.
views
[
this
.
model
.
get
(
'
jid
'
)];
delete
xmppchat
.
chatboxesview
.
views
[
this
.
model
.
get
(
'
jid
'
)];
...
@@ -865,7 +865,7 @@
...
@@ -865,7 +865,7 @@
if
(
message
!==
''
)
{
if
(
message
!==
''
)
{
this
.
sendChatRoomMessage
(
message
);
this
.
sendChatRoomMessage
(
message
);
}
}
}
}
},
},
sendChatRoomMessage
:
function
(
body
)
{
sendChatRoomMessage
:
function
(
body
)
{
...
@@ -988,16 +988,16 @@
...
@@ -988,16 +988,16 @@
body
=
body
.
replace
(
/^
\/
me/
,
'
*
'
+
sender
);
body
=
body
.
replace
(
/^
\/
me/
,
'
*
'
+
sender
);
$chat_content
.
append
(
$chat_content
.
append
(
this
.
action_template
({
this
.
action_template
({
'
sender
'
:
'
room
'
,
'
sender
'
:
'
room
'
,
'
time
'
:
(
new
Date
()).
toLocaleTimeString
().
substring
(
0
,
5
),
'
time
'
:
(
new
Date
()).
toLocaleTimeString
().
substring
(
0
,
5
),
'
message
'
:
body
,
'
message
'
:
body
,
'
username
'
:
sender
,
'
username
'
:
sender
,
'
extra_classes
'
:
(
$
(
message
).
find
(
'
delay
'
).
length
>
0
)
&&
'
delayed
'
||
''
'
extra_classes
'
:
(
$
(
message
).
find
(
'
delay
'
).
length
>
0
)
&&
'
delayed
'
||
''
}));
}));
}
else
{
}
else
{
$chat_content
.
append
(
$chat_content
.
append
(
this
.
message_template
({
this
.
message_template
({
'
sender
'
:
'
room
'
,
'
sender
'
:
'
room
'
,
'
time
'
:
(
new
Date
()).
toLocaleTimeString
().
substring
(
0
,
5
),
'
time
'
:
(
new
Date
()).
toLocaleTimeString
().
substring
(
0
,
5
),
'
message
'
:
body
,
'
message
'
:
body
,
'
username
'
:
sender
,
'
username
'
:
sender
,
...
@@ -1061,11 +1061,11 @@
...
@@ -1061,11 +1061,11 @@
}
}
},
this
));
},
this
));
},
},
isChatRoom
:
function
(
jid
)
{
isChatRoom
:
function
(
jid
)
{
return
Strophe
.
getDomainFromJid
(
jid
)
===
xmppchat
.
connection
.
muc_domain
;
return
Strophe
.
getDomainFromJid
(
jid
)
===
xmppchat
.
connection
.
muc_domain
;
},
},
createChatBox
:
function
(
jid
,
data
)
{
createChatBox
:
function
(
jid
,
data
)
{
var
box
,
view
;
var
box
,
view
;
if
(
this
.
isChatRoom
(
jid
))
{
if
(
this
.
isChatRoom
(
jid
))
{
...
@@ -1075,14 +1075,14 @@
...
@@ -1075,14 +1075,14 @@
});
});
}
else
{
}
else
{
box
=
new
xmppchat
.
ChatBox
({
box
=
new
xmppchat
.
ChatBox
({
'
id
'
:
jid
,
'
id
'
:
jid
,
'
jid
'
:
jid
,
'
jid
'
:
jid
,
'
fullname
'
:
data
.
fullname
,
'
fullname
'
:
data
.
fullname
,
'
portrait_url
'
:
data
.
portrait_url
,
'
portrait_url
'
:
data
.
portrait_url
,
'
user_profile_url
'
:
data
.
user_profile_url
'
user_profile_url
'
:
data
.
user_profile_url
});
});
view
=
new
xmppchat
.
ChatBoxView
({
view
=
new
xmppchat
.
ChatBoxView
({
model
:
box
model
:
box
});
});
}
}
this
.
views
[
jid
]
=
view
.
render
();
this
.
views
[
jid
]
=
view
.
render
();
...
@@ -1109,7 +1109,7 @@
...
@@ -1109,7 +1109,7 @@
$
.
getJSON
(
portal_url
+
"
/xmpp-userinfo?user_id=
"
+
Strophe
.
getNodeFromJid
(
jid
),
$
.
proxy
(
function
(
data
)
{
$
.
getJSON
(
portal_url
+
"
/xmpp-userinfo?user_id=
"
+
Strophe
.
getNodeFromJid
(
jid
),
$
.
proxy
(
function
(
data
)
{
view
=
this
.
createChatBox
(
jid
,
data
);
view
=
this
.
createChatBox
(
jid
,
data
);
},
this
));
},
this
));
}
}
},
},
showChat
:
function
(
jid
)
{
showChat
:
function
(
jid
)
{
...
@@ -1212,7 +1212,7 @@
...
@@ -1212,7 +1212,7 @@
'
bare_jid
'
:
Strophe
.
getBareJidFromJid
(
jid
),
'
bare_jid
'
:
Strophe
.
getBareJidFromJid
(
jid
),
'
user_id
'
:
user_id
,
'
user_id
'
:
user_id
,
'
subscription
'
:
subscription
,
'
subscription
'
:
subscription
,
'
fullname
'
:
name
,
'
fullname
'
:
name
,
'
resources
'
:
[],
'
resources
'
:
[],
'
presence_type
'
:
'
offline
'
,
'
presence_type
'
:
'
offline
'
,
'
status
'
:
'
offline
'
'
status
'
:
'
offline
'
...
@@ -1291,7 +1291,6 @@
...
@@ -1291,7 +1291,6 @@
ask
=
item
.
get
(
'
ask
'
),
ask
=
item
.
get
(
'
ask
'
),
that
=
this
,
that
=
this
,
subscription
=
item
.
get
(
'
subscription
'
);
subscription
=
item
.
get
(
'
subscription
'
);
this
.
$el
.
addClass
(
item
.
get
(
'
presence_type
'
));
this
.
$el
.
addClass
(
item
.
get
(
'
presence_type
'
));
if
(
ask
===
'
subscribe
'
)
{
if
(
ask
===
'
subscribe
'
)
{
...
@@ -1317,7 +1316,7 @@
...
@@ -1317,7 +1316,7 @@
that
.
openChat
();
that
.
openChat
();
});
});
}
}
// Event handlers
// Event handlers
this
.
$el
.
delegate
(
'
a.remove-xmpp-contact
'
,
'
click
'
,
function
(
ev
)
{
this
.
$el
.
delegate
(
'
a.remove-xmpp-contact
'
,
'
click
'
,
function
(
ev
)
{
ev
.
preventDefault
();
ev
.
preventDefault
();
...
@@ -1345,7 +1344,7 @@
...
@@ -1345,7 +1344,7 @@
var
presence_type
=
rosteritem
.
get
(
'
presence_type
'
),
var
presence_type
=
rosteritem
.
get
(
'
presence_type
'
),
rank
=
4
;
rank
=
4
;
switch
(
presence_type
)
{
switch
(
presence_type
)
{
case
'
offline
'
:
case
'
offline
'
:
rank
=
0
;
rank
=
0
;
break
;
break
;
case
'
unavailable
'
:
case
'
unavailable
'
:
...
@@ -1393,7 +1392,7 @@
...
@@ -1393,7 +1392,7 @@
var
model
=
new
xmppchat
.
RosterItem
(
jid
,
subscription
,
ask
,
name
);
var
model
=
new
xmppchat
.
RosterItem
(
jid
,
subscription
,
ask
,
name
);
this
.
add
(
model
);
this
.
add
(
model
);
},
},
addResource
:
function
(
bare_jid
,
resource
)
{
addResource
:
function
(
bare_jid
,
resource
)
{
var
item
=
this
.
getItem
(
bare_jid
),
var
item
=
this
.
getItem
(
bare_jid
),
resources
;
resources
;
...
@@ -1475,13 +1474,13 @@
...
@@ -1475,13 +1474,13 @@
if
(
this
.
isSelf
(
bare_jid
))
{
if
(
this
.
isSelf
(
bare_jid
))
{
if
(
xmppchat
.
connection
.
jid
!=
jid
)
{
if
(
xmppchat
.
connection
.
jid
!=
jid
)
{
// Another resource has changed it's status, we'll update ours as well.
// Another resource has changed it's status, we'll update ours as well.
// FIXME: We should ideally differentiate between converse.js using
// FIXME: We should ideally differentiate between converse.js using
// resources and other resources (i.e Pidgin etc.)
// resources and other resources (i.e Pidgin etc.)
xmppchat
.
xmppstatus
.
set
({
'
status
'
:
presence_type
});
xmppchat
.
xmppstatus
.
set
({
'
status
'
:
presence_type
});
}
}
return
true
;
return
true
;
}
else
if
((
$
(
presence
).
find
(
'
x
'
).
attr
(
'
xmlns
'
)
||
''
).
indexOf
(
Strophe
.
NS
.
MUC
)
===
0
)
{
}
else
if
((
$
(
presence
).
find
(
'
x
'
).
attr
(
'
xmlns
'
)
||
''
).
indexOf
(
Strophe
.
NS
.
MUC
)
===
0
)
{
return
true
;
// Ignore MUC
return
true
;
// Ignore MUC
}
}
if
((
status_message
.
length
>
0
)
&&
(
status_message
.
text
()
&&
(
presence_type
!==
'
unavailable
'
)))
{
if
((
status_message
.
length
>
0
)
&&
(
status_message
.
text
()
&&
(
presence_type
!==
'
unavailable
'
)))
{
...
@@ -1526,10 +1525,10 @@
...
@@ -1526,10 +1525,10 @@
}
}
}
else
if
(
presence_type
===
'
unsubscribed
'
)
{
}
else
if
(
presence_type
===
'
unsubscribed
'
)
{
/* Upon receiving the presence stanza of type "unsubscribed",
/* Upon receiving the presence stanza of type "unsubscribed",
* the user SHOULD acknowledge receipt of that subscription state
* the user SHOULD acknowledge receipt of that subscription state
* notification by sending a presence stanza of type "unsubscribe"
* notification by sending a presence stanza of type "unsubscribe"
* this step lets the user's server know that it MUST no longer
* this step lets the user's server know that it MUST no longer
* send notification of the subscription state change to the user.
* send notification of the subscription state change to the user.
*/
*/
xmppchat
.
xmppstatus
.
sendPresence
(
'
unsubscribe
'
);
xmppchat
.
xmppstatus
.
sendPresence
(
'
unsubscribe
'
);
...
@@ -1537,7 +1536,7 @@
...
@@ -1537,7 +1536,7 @@
xmppchat
.
chatboxesview
.
controlbox
.
roster
.
remove
(
bare_jid
);
xmppchat
.
chatboxesview
.
controlbox
.
roster
.
remove
(
bare_jid
);
xmppchat
.
connection
.
roster
.
remove
(
bare_jid
);
xmppchat
.
connection
.
roster
.
remove
(
bare_jid
);
}
}
}
else
{
}
else
{
if
((
presence_type
===
undefined
)
&&
(
show
))
{
if
((
presence_type
===
undefined
)
&&
(
show
))
{
if
(
show
.
text
()
===
'
chat
'
)
{
if
(
show
.
text
()
===
'
chat
'
)
{
presence_type
=
'
online
'
;
presence_type
=
'
online
'
;
...
@@ -1628,7 +1627,7 @@
...
@@ -1628,7 +1627,7 @@
$my_contacts
.
after
(
$my_contacts
.
siblings
(
'
dd.current-xmpp-contact.away
'
).
tsort
(
'
a
'
,
crit
));
$my_contacts
.
after
(
$my_contacts
.
siblings
(
'
dd.current-xmpp-contact.away
'
).
tsort
(
'
a
'
,
crit
));
$my_contacts
.
after
(
$my_contacts
.
siblings
(
'
dd.current-xmpp-contact.busy
'
).
tsort
(
'
a
'
,
crit
));
$my_contacts
.
after
(
$my_contacts
.
siblings
(
'
dd.current-xmpp-contact.busy
'
).
tsort
(
'
a
'
,
crit
));
$my_contacts
.
after
(
$my_contacts
.
siblings
(
'
dd.current-xmpp-contact.online
'
).
tsort
(
'
a
'
,
crit
));
$my_contacts
.
after
(
$my_contacts
.
siblings
(
'
dd.current-xmpp-contact.online
'
).
tsort
(
'
a
'
,
crit
));
}
}
}
}
// Hide the headings if there are no contacts under them
// Hide the headings if there are no contacts under them
_
.
each
([
$my_contacts
,
$contact_requests
,
$pending_contacts
],
function
(
h
)
{
_
.
each
([
$my_contacts
,
$contact_requests
,
$pending_contacts
],
function
(
h
)
{
...
@@ -1781,12 +1780,12 @@
...
@@ -1781,12 +1780,12 @@
this
.
$el
.
find
(
'
#fancy-xmpp-status-select
'
)
this
.
$el
.
find
(
'
#fancy-xmpp-status-select
'
)
.
html
(
this
.
status_template
({
.
html
(
this
.
status_template
({
'
status_message
'
:
"
I am
"
+
presence_type
,
'
status_message
'
:
"
I am
"
+
presence_type
,
'
presence_type
'
:
presence_type
'
presence_type
'
:
presence_type
}));
}));
// iterate through all the <option> elements and create UL
// iterate through all the <option> elements and create UL
options
.
each
(
function
(){
options
.
each
(
function
(){
$
(
that
.
el
).
find
(
"
#target dd ul
"
).
append
(
that
.
option_template
({
$
(
that
.
el
).
find
(
"
#target dd ul
"
).
append
(
that
.
option_template
({
'
value
'
:
$
(
this
).
val
(),
'
value
'
:
$
(
this
).
val
(),
'
text
'
:
$
(
this
).
text
()
'
text
'
:
$
(
this
).
text
()
})).
hide
();
})).
hide
();
});
});
...
@@ -1794,7 +1793,7 @@
...
@@ -1794,7 +1793,7 @@
// Listen for status change on the model and initialize
// Listen for status change on the model and initialize
// ----------------------------------------------------
// ----------------------------------------------------
this
.
options
.
model
.
on
(
"
change
"
,
$
.
proxy
(
this
.
updateStatusUI
,
this
));
this
.
options
.
model
.
on
(
"
change
"
,
$
.
proxy
(
this
.
updateStatusUI
,
this
));
this
.
model
.
initStatus
();
this
.
model
.
initStatus
();
}
}
});
});
...
@@ -1803,6 +1802,7 @@
...
@@ -1803,6 +1802,7 @@
// --------------
// --------------
$
(
document
).
ready
(
$
.
proxy
(
function
()
{
$
(
document
).
ready
(
$
.
proxy
(
function
()
{
var
chatdata
=
$
(
'
div#collective-xmpp-chat-data
'
),
var
chatdata
=
$
(
'
div#collective-xmpp-chat-data
'
),
$connecting
=
$
(
'
span#connecting-to-chat
'
),
$toggle
=
$
(
'
a#toggle-online-users
'
);
$toggle
=
$
(
'
a#toggle-online-users
'
);
$toggle
.
unbind
(
'
click
'
);
$toggle
.
unbind
(
'
click
'
);
...
@@ -1815,6 +1815,8 @@
...
@@ -1815,6 +1815,8 @@
}).
render
();
}).
render
();
$
(
document
).
bind
(
'
jarnxmpp.disconnected
'
,
$
.
proxy
(
function
(
ev
,
conn
)
{
$
(
document
).
bind
(
'
jarnxmpp.disconnected
'
,
$
.
proxy
(
function
(
ev
,
conn
)
{
$connecting
.
show
();
$toggle
.
hide
();
console
.
log
(
"
Connection Failed :(
"
);
console
.
log
(
"
Connection Failed :(
"
);
},
this
));
},
this
));
...
@@ -1832,11 +1834,11 @@
...
@@ -1832,11 +1834,11 @@
this
.
chatboxesview
=
new
this
.
ChatBoxesView
({
'
model
'
:
this
.
chatboxes
});
this
.
chatboxesview
=
new
this
.
ChatBoxesView
({
'
model
'
:
this
.
chatboxes
});
this
.
connection
.
addHandler
(
this
.
connection
.
addHandler
(
$
.
proxy
(
this
.
roster
.
subscribeToSuggestedItems
,
this
.
roster
),
$
.
proxy
(
this
.
roster
.
subscribeToSuggestedItems
,
this
.
roster
),
'
http://jabber.org/protocol/rosterx
'
,
'
message
'
,
null
);
'
http://jabber.org/protocol/rosterx
'
,
'
message
'
,
null
);
this
.
connection
.
roster
.
registerCallback
(
this
.
connection
.
roster
.
registerCallback
(
$
.
proxy
(
this
.
roster
.
rosterHandler
,
this
.
roster
),
$
.
proxy
(
this
.
roster
.
rosterHandler
,
this
.
roster
),
null
,
'
presence
'
,
null
);
null
,
'
presence
'
,
null
);
this
.
connection
.
roster
.
get
(
$
.
proxy
(
function
()
{
this
.
connection
.
roster
.
get
(
$
.
proxy
(
function
()
{
...
@@ -1847,12 +1849,12 @@
...
@@ -1847,12 +1849,12 @@
},
this
.
roster
),
null
,
'
presence
'
,
null
);
},
this
.
roster
),
null
,
'
presence
'
,
null
);
this
.
connection
.
addHandler
(
this
.
connection
.
addHandler
(
$
.
proxy
(
function
(
message
)
{
$
.
proxy
(
function
(
message
)
{
this
.
chatboxesview
.
messageReceived
(
message
);
this
.
chatboxesview
.
messageReceived
(
message
);
return
true
;
return
true
;
},
this
),
null
,
'
message
'
,
'
chat
'
);
},
this
),
null
,
'
message
'
,
'
chat
'
);
// XMPP Status
// XMPP Status
this
.
xmppstatus
=
new
this
.
XMPPStatus
();
this
.
xmppstatus
=
new
this
.
XMPPStatus
();
this
.
xmppstatusview
=
new
this
.
XMPPStatusView
({
this
.
xmppstatusview
=
new
this
.
XMPPStatusView
({
'
model
'
:
this
.
xmppstatus
'
model
'
:
this
.
xmppstatus
...
@@ -1861,6 +1863,8 @@
...
@@ -1861,6 +1863,8 @@
// Controlbox toggler
// Controlbox toggler
if
(
$toggle
.
length
)
{
if
(
$toggle
.
length
)
{
$connecting
.
hide
();
$toggle
.
show
();
$toggle
.
bind
(
'
click
'
,
$
.
proxy
(
function
(
e
)
{
$toggle
.
bind
(
'
click
'
,
$
.
proxy
(
function
(
e
)
{
e
.
preventDefault
();
e
.
preventDefault
();
if
(
$
(
"
div#controlbox
"
).
is
(
'
:visible
'
))
{
if
(
$
(
"
div#controlbox
"
).
is
(
'
:visible
'
))
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment