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
8780f7a1
Commit
8780f7a1
authored
Oct 09, 2019
by
JC Brand
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix linting errors (no-unused-vars)
parent
05cdae99
Changes
61
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
61 changed files
with
220 additions
and
345 deletions
+220
-345
spec/autocomplete.js
spec/autocomplete.js
+0
-4
spec/bookmarks.js
spec/bookmarks.js
+0
-3
spec/chatbox.js
spec/chatbox.js
+5
-13
spec/controlbox.js
spec/controlbox.js
+0
-7
spec/converse.js
spec/converse.js
+2
-3
spec/emojis.js
spec/emojis.js
+5
-5
spec/eventemitter.js
spec/eventemitter.js
+2
-2
spec/http-file-upload.js
spec/http-file-upload.js
+5
-9
spec/mam.js
spec/mam.js
+1
-2
spec/messages.js
spec/messages.js
+52
-58
spec/minchats.js
spec/minchats.js
+0
-1
spec/muc.js
spec/muc.js
+19
-37
spec/muc_messages.js
spec/muc_messages.js
+18
-19
spec/notification.js
spec/notification.js
+2
-3
spec/omemo.js
spec/omemo.js
+2
-15
spec/presence.js
spec/presence.js
+0
-4
spec/profiling.js
spec/profiling.js
+0
-2
spec/protocol.js
spec/protocol.js
+2
-6
spec/push.js
spec/push.js
+0
-1
spec/room_registration.js
spec/room_registration.js
+0
-1
spec/roomslist.js
spec/roomslist.js
+1
-5
spec/roster.js
spec/roster.js
+4
-8
spec/spoilers.js
spec/spoilers.js
+4
-4
spec/user-details-modal.js
spec/user-details-modal.js
+0
-4
spec/utils.js
spec/utils.js
+1
-1
spec/xmppstatus.js
spec/xmppstatus.js
+2
-2
src/converse-autocomplete.js
src/converse-autocomplete.js
+0
-1
src/converse-bookmark-views.js
src/converse-bookmark-views.js
+2
-2
src/converse-chatboxviews.js
src/converse-chatboxviews.js
+2
-5
src/converse-controlbox.js
src/converse-controlbox.js
+10
-10
src/converse-fullscreen.js
src/converse-fullscreen.js
+0
-2
src/converse-headline.js
src/converse-headline.js
+6
-8
src/converse-mam-views.js
src/converse-mam-views.js
+1
-2
src/converse-message-view.js
src/converse-message-view.js
+2
-2
src/converse-minimize.js
src/converse-minimize.js
+4
-4
src/converse-muc-views.js
src/converse-muc-views.js
+9
-12
src/converse-oauth.js
src/converse-oauth.js
+2
-4
src/converse-omemo.js
src/converse-omemo.js
+7
-10
src/converse-profile.js
src/converse-profile.js
+2
-4
src/converse-push.js
src/converse-push.js
+1
-2
src/converse-register.js
src/converse-register.js
+2
-3
src/converse-roomslist.js
src/converse-roomslist.js
+4
-4
src/converse-rosterview.js
src/converse-rosterview.js
+4
-8
src/converse-singleton.js
src/converse-singleton.js
+1
-4
src/converse-uniview.js
src/converse-uniview.js
+0
-1
src/headless/converse-bosh.js
src/headless/converse-bosh.js
+1
-1
src/headless/converse-chatboxes.js
src/headless/converse-chatboxes.js
+5
-5
src/headless/converse-core.js
src/headless/converse-core.js
+1
-1
src/headless/converse-emoji.js
src/headless/converse-emoji.js
+2
-2
src/headless/converse-mam.js
src/headless/converse-mam.js
+1
-1
src/headless/converse-muc.js
src/headless/converse-muc.js
+3
-5
src/headless/converse-ping.js
src/headless/converse-ping.js
+1
-1
src/headless/converse-pubsub.js
src/headless/converse-pubsub.js
+2
-3
src/headless/converse-smacks.js
src/headless/converse-smacks.js
+7
-6
src/headless/converse-vcard.js
src/headless/converse-vcard.js
+1
-1
src/headless/i18n.js
src/headless/i18n.js
+0
-3
src/headless/utils/core.js
src/headless/utils/core.js
+0
-1
src/headless/utils/muc.js
src/headless/utils/muc.js
+0
-1
src/templates/profile_modal.html
src/templates/profile_modal.html
+1
-1
src/utils/html.js
src/utils/html.js
+7
-4
src/website.js
src/website.js
+2
-2
No files found.
spec/autocomplete.js
View file @
8780f7a1
...
...
@@ -6,12 +6,8 @@
],
factory
);
}
(
this
,
function
(
jasmine
,
mock
,
test_utils
)
{
"
use strict
"
;
const
_
=
converse
.
env
.
_
;
const
$iq
=
converse
.
env
.
$iq
;
const
$msg
=
converse
.
env
.
$msg
;
const
$pres
=
converse
.
env
.
$pres
;
const
Strophe
=
converse
.
env
.
Strophe
;
const
u
=
converse
.
env
.
utils
;
describe
(
"
The nickname autocomplete feature
"
,
function
()
{
...
...
spec/bookmarks.js
View file @
8780f7a1
/*global waitUntilPromise */
(
function
(
root
,
factory
)
{
define
([
"
jasmine
"
,
...
...
@@ -10,7 +8,6 @@
"
use strict
"
;
const
$iq
=
converse
.
env
.
$iq
,
$msg
=
converse
.
env
.
$msg
,
Backbone
=
converse
.
env
.
Backbone
,
Strophe
=
converse
.
env
.
Strophe
,
sizzle
=
converse
.
env
.
sizzle
,
_
=
converse
.
env
.
_
,
...
...
spec/chatbox.js
View file @
8780f7a1
...
...
@@ -7,7 +7,6 @@
}
(
this
,
function
(
jasmine
,
mock
,
test_utils
)
{
"
use strict
"
;
const
_
=
converse
.
env
.
_
;
const
$iq
=
converse
.
env
.
$iq
;
const
$msg
=
converse
.
env
.
$msg
;
const
Strophe
=
converse
.
env
.
Strophe
;
const
u
=
converse
.
env
.
utils
;
...
...
@@ -71,7 +70,7 @@
await
_converse
.
chatboxes
.
onMessage
(
msg
);
const
view
=
_converse
.
chatboxviews
.
get
(
sender_jid
);
await
new
Promise
(
(
resolve
,
reject
)
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
await
new
Promise
(
resolve
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
expect
(
view
.
el
.
querySelectorAll
(
'
.chat-msg--action
'
).
length
).
toBe
(
1
);
expect
(
_
.
includes
(
view
.
el
.
querySelector
(
'
.chat-msg__author
'
).
textContent
,
'
**Mercutio
'
)).
toBeTruthy
();
expect
(
view
.
el
.
querySelector
(
'
.chat-msg__text
'
).
textContent
).
toBe
(
'
is tired
'
);
...
...
@@ -115,14 +114,12 @@
const
online_contacts
=
_converse
.
rosterview
.
el
.
querySelectorAll
(
'
.roster-group .current-xmpp-contact a.open-chat
'
);
expect
(
online_contacts
.
length
).
toBe
(
15
);
let
el
=
online_contacts
[
0
];
const
jid
=
el
.
textContent
.
trim
().
replace
(
/ /g
,
'
.
'
).
toLowerCase
()
+
'
@montague.lit
'
;
el
.
click
();
await
u
.
waitUntil
(()
=>
document
.
querySelectorAll
(
"
#conversejs .chatbox
"
).
length
==
2
);
expect
(
_converse
.
chatboxviews
.
trimChats
).
toHaveBeenCalled
();
online_contacts
[
1
].
click
();
await
u
.
waitUntil
(()
=>
_converse
.
chatboxes
.
length
==
3
);
el
=
online_contacts
[
1
];
const
new_jid
=
el
.
textContent
.
trim
().
replace
(
/ /g
,
'
.
'
).
toLowerCase
()
+
'
@montague.lit
'
;
expect
(
_converse
.
chatboxviews
.
trimChats
).
toHaveBeenCalled
();
// Check that new chat boxes are created to the left of the
// controlbox (but to the right of all existing chat boxes)
...
...
@@ -233,7 +230,7 @@
await
test_utils
.
waitForRoster
(
_converse
,
'
current
'
);
const
sender_jid
=
mock
.
cur_names
[
0
].
replace
(
/ /g
,
'
.
'
).
toLowerCase
()
+
'
@montague.lit
'
;
const
chat
=
await
_converse
.
api
.
chats
.
create
(
sender_jid
,
{
'
minimized
'
:
true
});
await
_converse
.
api
.
chats
.
create
(
sender_jid
,
{
'
minimized
'
:
true
});
await
u
.
waitUntil
(()
=>
_converse
.
chatboxes
.
length
>
1
);
const
chatBoxView
=
_converse
.
chatboxviews
.
get
(
sender_jid
);
expect
(
u
.
isVisible
(
chatBoxView
.
el
)).
toBeFalsy
();
...
...
@@ -257,7 +254,6 @@
const
view
=
await
test_utils
.
openChatBoxFor
(
_converse
,
contact_jid
);
const
el
=
sizzle
(
'
a.open-chat:contains("
'
+
view
.
model
.
getDisplayName
()
+
'
")
'
,
_converse
.
rosterview
.
el
).
pop
();
await
u
.
waitUntil
(()
=>
u
.
isVisible
(
el
));
const
jid
=
el
.
textContent
.
replace
(
/ /g
,
'
.
'
).
toLowerCase
()
+
'
@montague.lit
'
;
const
textarea
=
view
.
el
.
querySelector
(
'
.chat-textarea
'
);
await
u
.
waitUntil
(()
=>
u
.
isVisible
(
textarea
));
textarea
.
blur
();
...
...
@@ -470,7 +466,7 @@
keyCode
:
13
// Enter
};
view
.
onKeyDown
(
ev
);
await
new
Promise
(
(
resolve
,
reject
)
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
await
new
Promise
(
resolve
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
view
.
onKeyUp
(
ev
);
expect
(
counter
.
textContent
).
toBe
(
'
200
'
);
...
...
@@ -758,7 +754,6 @@
null
,
[
'
rosterGroupsFetched
'
,
'
chatBoxesFetched
'
],
{},
async
function
(
done
,
_converse
)
{
let
contact
,
sent_stanza
,
IQ_id
,
stanza
;
await
test_utils
.
waitUntilDiscoConfirmed
(
_converse
,
'
montague.lit
'
,
[],
[
'
vcard-temp
'
]);
await
u
.
waitUntil
(()
=>
_converse
.
xmppstatus
.
vcard
.
get
(
'
fullname
'
));
await
test_utils
.
waitForRoster
(
_converse
,
'
current
'
);
...
...
@@ -886,7 +881,6 @@
null
,
[
'
rosterGroupsFetched
'
,
'
chatBoxesFetched
'
],
{},
async
function
(
done
,
_converse
)
{
let
contact
,
sent_stanza
,
IQ_id
,
stanza
;
await
test_utils
.
waitUntilDiscoConfirmed
(
_converse
,
'
montague.lit
'
,
[],
[
'
vcard-temp
'
]);
await
u
.
waitUntil
(()
=>
_converse
.
xmppstatus
.
vcard
.
get
(
'
fullname
'
));
await
test_utils
.
waitForRoster
(
_converse
,
'
current
'
);
...
...
@@ -1026,7 +1020,6 @@
view
.
close
();
expect
(
view
.
model
.
get
(
'
chat_state
'
)).
toBe
(
'
inactive
'
);
expect
(
_converse
.
connection
.
send
).
toHaveBeenCalled
();
var
$stanza
=
_converse
.
connection
.
send
.
calls
.
argsFor
(
0
)[
0
].
tree
();
const
stanza
=
_converse
.
connection
.
send
.
calls
.
argsFor
(
0
)[
0
].
tree
();
expect
(
stanza
.
getAttribute
(
'
to
'
)).
toBe
(
contact_jid
);
expect
(
stanza
.
childNodes
.
length
).
toBe
(
3
);
...
...
@@ -1181,7 +1174,7 @@
spyOn
(
_converse
,
'
clearMsgCounter
'
).
and
.
callThrough
();
await
_converse
.
chatboxes
.
onMessage
(
msg
);
await
new
Promise
(
(
resolve
,
reject
)
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
await
new
Promise
(
resolve
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
expect
(
_converse
.
incrementMsgCounter
).
toHaveBeenCalled
();
expect
(
_converse
.
clearMsgCounter
).
not
.
toHaveBeenCalled
();
expect
(
_converse
.
msg_counter
).
toBe
(
1
);
...
...
@@ -1588,8 +1581,7 @@
await
test_utils
.
waitForRoster
(
_converse
,
'
current
'
,
1
);
const
base_url
=
document
.
URL
.
split
(
window
.
location
.
pathname
)[
0
],
message
=
"
geo:37.786971,-122.399677
"
,
const
message
=
"
geo:37.786971,-122.399677
"
,
contact_jid
=
mock
.
cur_names
[
0
].
replace
(
/ /g
,
'
.
'
).
toLowerCase
()
+
'
@montague.lit
'
;
await
test_utils
.
openChatBoxFor
(
_converse
,
contact_jid
);
...
...
spec/controlbox.js
View file @
8780f7a1
...
...
@@ -2,9 +2,7 @@
define
([
"
jasmine
"
,
"
mock
"
,
"
test-utils
"
],
factory
);
}
(
this
,
function
(
jasmine
,
mock
,
test_utils
)
{
const
_
=
converse
.
env
.
_
,
$pres
=
converse
.
env
.
$pres
,
$msg
=
converse
.
env
.
$msg
,
$iq
=
converse
.
env
.
$iq
,
u
=
converse
.
env
.
utils
,
Strophe
=
converse
.
env
.
Strophe
,
sizzle
=
converse
.
env
.
sizzle
;
...
...
@@ -198,7 +196,6 @@
test_utils
.
createContacts
(
_converse
,
'
all
'
).
openControlBox
();
const
panel
=
_converse
.
chatboxviews
.
get
(
'
controlbox
'
).
contactspanel
;
const
cbview
=
_converse
.
chatboxviews
.
get
(
'
controlbox
'
);
cbview
.
el
.
querySelector
(
'
.add-contact
'
).
click
()
const
modal
=
_converse
.
rosterview
.
add_contact_modal
;
...
...
@@ -233,7 +230,6 @@
async
function
(
done
,
_converse
)
{
test_utils
.
openControlBox
();
const
panel
=
_converse
.
chatboxviews
.
get
(
'
controlbox
'
).
contactspanel
;
const
cbview
=
_converse
.
chatboxviews
.
get
(
'
controlbox
'
);
cbview
.
el
.
querySelector
(
'
.add-contact
'
).
click
()
const
modal
=
_converse
.
rosterview
.
add_contact_modal
;
...
...
@@ -243,7 +239,6 @@
await
u
.
waitUntil
(()
=>
u
.
isVisible
(
modal
.
el
),
1000
);
expect
(
!
_
.
isNull
(
modal
.
el
.
querySelector
(
'
form.add-xmpp-contact
'
))).
toBeTruthy
();
const
input_jid
=
modal
.
el
.
querySelector
(
'
input[name="jid"]
'
);
const
input_name
=
modal
.
el
.
querySelector
(
'
input[name="name"]
'
);
input_jid
.
value
=
'
someone@montague.lit
'
;
modal
.
el
.
querySelector
(
'
button[type="submit"]
'
).
click
();
...
...
@@ -280,7 +275,6 @@
window
.
XMLHttpRequest
=
jasmine
.
createSpy
(
'
XMLHttpRequest
'
);
XMLHttpRequest
.
and
.
callFake
(()
=>
xhr
);
const
panel
=
_converse
.
chatboxviews
.
get
(
'
controlbox
'
).
contactspanel
;
const
cbview
=
_converse
.
chatboxviews
.
get
(
'
controlbox
'
);
cbview
.
el
.
querySelector
(
'
.add-contact
'
).
click
()
const
modal
=
_converse
.
rosterview
.
add_contact_modal
;
...
...
@@ -353,7 +347,6 @@
window
.
XMLHttpRequest
=
jasmine
.
createSpy
(
'
XMLHttpRequest
'
);
XMLHttpRequest
.
and
.
callFake
(()
=>
xhr
);
const
panel
=
_converse
.
chatboxviews
.
get
(
'
controlbox
'
).
contactspanel
;
const
cbview
=
_converse
.
chatboxviews
.
get
(
'
controlbox
'
);
cbview
.
el
.
querySelector
(
'
.add-contact
'
).
click
()
modal
=
_converse
.
rosterview
.
add_contact_modal
;
...
...
spec/converse.js
View file @
8780f7a1
...
...
@@ -4,8 +4,7 @@
"
mock
"
,
"
test-utils
"
],
factory
);
}
(
this
,
function
(
jasmine
,
mock
,
test_utils
)
{
const
b64_sha1
=
converse
.
env
.
b64_sha1
,
_
=
converse
.
env
.
_
,
const
_
=
converse
.
env
.
_
,
u
=
converse
.
env
.
utils
;
describe
(
"
Converse
"
,
function
()
{
...
...
@@ -354,7 +353,7 @@
describe
(
"
The
\"
plugins.add
\"
method
"
,
function
()
{
it
(
"
throws an error when multiple plugins attempt to register with the same name
"
,
mock
.
initConverse
((
done
,
_converse
)
=>
{
mock
.
initConverse
((
done
,
_converse
)
=>
{
// eslint-disable-line no-unused-vars
converse
.
plugins
.
add
(
'
myplugin
'
,
{});
const
error
=
new
TypeError
(
'
Error: plugin with name "myplugin" has already been registered!
'
);
...
...
spec/emojis.js
View file @
8780f7a1
...
...
@@ -6,7 +6,7 @@
],
factory
);
}
(
this
,
function
(
jasmine
,
mock
,
test_utils
)
{
"
use strict
"
;
const
{
Backbone
,
Promise
,
Strophe
,
$iq
,
$msg
,
$pres
,
b64_sha1
,
dayjs
,
sizzle
,
_
}
=
converse
.
env
;
const
{
Promise
,
$msg
,
$pres
,
sizzle
}
=
converse
.
env
;
const
u
=
converse
.
env
.
utils
;
describe
(
"
Emojis
"
,
function
()
{
...
...
@@ -175,7 +175,7 @@
.
c
(
'
active
'
,
{
'
xmlns
'
:
'
http://jabber.org/protocol/chatstates
'
}).
tree
());
await
new
Promise
(
resolve
=>
_converse
.
on
(
'
chatBoxInitialized
'
,
resolve
));
const
view
=
_converse
.
api
.
chatviews
.
get
(
sender_jid
);
await
new
Promise
(
(
resolve
,
reject
)
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
await
new
Promise
(
resolve
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
const
chat_content
=
view
.
el
.
querySelector
(
'
.chat-content
'
);
let
message
=
chat_content
.
querySelector
(
'
.chat-msg__text
'
);
expect
(
u
.
hasClass
(
'
chat-msg__text--larger
'
,
message
)).
toBe
(
true
);
...
...
@@ -187,7 +187,7 @@
'
id
'
:
_converse
.
connection
.
getUniqueId
()
}).
c
(
'
body
'
).
t
(
'
😇 Hello world! 😇 😇
'
).
up
()
.
c
(
'
active
'
,
{
'
xmlns
'
:
'
http://jabber.org/protocol/chatstates
'
}).
tree
());
await
new
Promise
(
(
resolve
,
reject
)
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
await
new
Promise
(
resolve
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
message
=
chat_content
.
querySelector
(
'
.message:last-child .chat-msg__text
'
);
expect
(
u
.
hasClass
(
'
chat-msg__text--larger
'
,
message
)).
toBe
(
false
);
...
...
@@ -200,7 +200,7 @@
preventDefault
:
function
preventDefault
()
{},
keyCode
:
13
// Enter
});
await
new
Promise
(
(
resolve
,
reject
)
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
await
new
Promise
(
resolve
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
expect
(
view
.
el
.
querySelectorAll
(
'
.chat-msg
'
).
length
).
toBe
(
3
);
expect
(
chat_content
.
querySelector
(
'
.message:last-child .chat-msg__text
'
).
textContent
).
toBe
(
'
💩 😇
'
);
expect
(
textarea
.
value
).
toBe
(
''
);
...
...
@@ -217,7 +217,7 @@
preventDefault
:
function
preventDefault
()
{},
keyCode
:
13
// Enter
});
await
new
Promise
(
(
resolve
,
reject
)
=>
view
.
model
.
messages
.
once
(
'
rendered
'
,
resolve
));
await
new
Promise
(
resolve
=>
view
.
model
.
messages
.
once
(
'
rendered
'
,
resolve
));
expect
(
view
.
model
.
messages
.
models
.
length
).
toBe
(
3
);
message
=
chat_content
.
querySelector
(
'
.message:last-child .chat-msg__text
'
);
expect
(
u
.
hasClass
(
'
chat-msg__text--larger
'
,
message
)).
toBe
(
false
);
...
...
spec/eventemitter.js
View file @
8780f7a1
(
function
(
root
,
factory
)
{
define
([
"
jasmine
"
,
"
mock
"
,
"
test-utils
"
],
factory
);
}
(
this
,
function
(
jasmine
,
mock
,
test_utils
)
{
define
([
"
jasmine
"
,
"
mock
"
],
factory
);
}
(
this
,
function
(
jasmine
,
mock
)
{
return
describe
(
"
The _converse Event Emitter
"
,
function
()
{
...
...
spec/http-file-upload.js
View file @
8780f7a1
...
...
@@ -276,7 +276,7 @@
'
name
'
:
"
my-juliet.jpg
"
};
view
.
model
.
sendFiles
([
file
]);
await
new
Promise
(
(
resolve
,
reject
)
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
await
new
Promise
(
resolve
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
await
u
.
waitUntil
(()
=>
_
.
filter
(
IQ_stanzas
,
iq
=>
iq
.
querySelector
(
'
iq[to="upload.montague.tld"] request
'
)).
length
);
const
iq
=
IQ_stanzas
.
pop
();
...
...
@@ -323,7 +323,7 @@
'
oob_url
'
:
message
.
get
(
'
get
'
),
'
message
'
:
message
.
get
(
'
get
'
)
});
return
new
Promise
(
(
resolve
,
reject
)
=>
view
.
model
.
messages
.
once
(
'
rendered
'
,
resolve
));
return
new
Promise
(
resolve
=>
view
.
model
.
messages
.
once
(
'
rendered
'
,
resolve
));
});
});
let
sent_stanza
;
...
...
@@ -383,7 +383,7 @@
'
name
'
:
"
my-juliet.jpg
"
};
view
.
model
.
sendFiles
([
file
]);
await
new
Promise
(
(
resolve
,
reject
)
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
await
new
Promise
(
resolve
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
await
u
.
waitUntil
(()
=>
_
.
filter
(
IQ_stanzas
,
iq
=>
iq
.
querySelector
(
'
iq[to="upload.montague.tld"] request
'
)).
length
);
const
iq
=
IQ_stanzas
.
pop
();
...
...
@@ -429,7 +429,7 @@
'
oob_url
'
:
message
.
get
(
'
get
'
),
'
message
'
:
message
.
get
(
'
get
'
)
});
return
new
Promise
(
(
resolve
,
reject
)
=>
view
.
model
.
messages
.
once
(
'
rendered
'
,
resolve
));
return
new
Promise
(
resolve
=>
view
.
model
.
messages
.
once
(
'
rendered
'
,
resolve
));
});
});
let
sent_stanza
;
...
...
@@ -469,7 +469,6 @@
const
IQ_stanzas
=
_converse
.
connection
.
IQ_stanzas
;
const
IQ_ids
=
_converse
.
connection
.
IQ_ids
;
const
send_backup
=
XMLHttpRequest
.
prototype
.
send
;
await
test_utils
.
waitUntilDiscoConfirmed
(
_converse
,
_converse
.
bare_jid
,
[],
[]);
await
u
.
waitUntil
(()
=>
_
.
filter
(
...
...
@@ -596,7 +595,6 @@
[{
'
category
'
:
'
server
'
,
'
type
'
:
'
IM
'
}],
[
'
http://jabber.org/protocol/disco#items
'
],
[],
'
info
'
);
const
send_backup
=
XMLHttpRequest
.
prototype
.
send
;
const
IQ_stanzas
=
_converse
.
connection
.
IQ_stanzas
;
await
test_utils
.
waitUntilDiscoConfirmed
(
_converse
,
_converse
.
domain
,
[],
[],
[
'
upload.montague.tld
'
],
'
items
'
);
...
...
@@ -613,7 +611,7 @@
'
name
'
:
"
my-juliet.jpg
"
};
view
.
model
.
sendFiles
([
file
]);
await
new
Promise
(
(
resolve
,
reject
)
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
await
new
Promise
(
resolve
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
await
u
.
waitUntil
(()
=>
_
.
filter
(
IQ_stanzas
,
iq
=>
iq
.
querySelector
(
'
iq[to="upload.montague.tld"] request
'
)).
length
)
const
iq
=
IQ_stanzas
.
pop
();
expect
(
Strophe
.
serialize
(
iq
)).
toBe
(
...
...
@@ -657,8 +655,6 @@
done
();
});
});
let
sent_stanza
;
spyOn
(
_converse
.
connection
,
'
send
'
).
and
.
callFake
(
stanza
=>
(
sent_stanza
=
stanza
));
_converse
.
connection
.
_dataRecv
(
test_utils
.
createRequest
(
stanza
));
}));
});
...
...
spec/mam.js
View file @
8780f7a1
...
...
@@ -2,7 +2,6 @@
define
([
"
jasmine
"
,
"
mock
"
,
"
test-utils
"
],
factory
);
}
(
this
,
function
(
jasmine
,
mock
,
test_utils
)
{
"
use strict
"
;
const
_
=
converse
.
env
.
_
;
const
Backbone
=
converse
.
env
.
Backbone
;
const
Strophe
=
converse
.
env
.
Strophe
;
const
$iq
=
converse
.
env
.
$iq
;
...
...
@@ -259,7 +258,7 @@
_converse
.
connection
.
_dataRecv
(
test_utils
.
createRequest
(
iq_result
));
const
view
=
_converse
.
chatboxviews
.
get
(
contact_jid
);
await
new
Promise
(
(
resolve
,
reject
)
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
await
new
Promise
(
resolve
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
expect
(
view
.
model
.
messages
.
length
).
toBe
(
1
);
expect
(
view
.
model
.
messages
.
at
(
0
).
get
(
'
message
'
)).
toBe
(
"
Thrice the brinded cat hath mew'd.
"
);
done
();
...
...
spec/messages.js
View file @
8780f7a1
This diff is collapsed.
Click to expand it.
spec/minchats.js
View file @
8780f7a1
...
...
@@ -159,7 +159,6 @@
await
test_utils
.
openAndEnterChatRoom
(
_converse
,
'
kitchen@conference.shakespeare.lit
'
,
'
fires
'
);
const
view
=
_converse
.
chatboxviews
.
get
(
muc_jid
);
view
.
model
.
set
({
'
minimized
'
:
true
});
const
contact_jid
=
mock
.
cur_names
[
5
].
replace
(
/ /g
,
'
.
'
).
toLowerCase
()
+
'
@montague.lit
'
;
const
message
=
'
fires: Your attention is required
'
;
const
nick
=
mock
.
chatroom_names
[
0
];
const
msg
=
$msg
({
...
...
spec/muc.js
View file @
8780f7a1
This diff is collapsed.
Click to expand it.
spec/muc_messages.js
View file @
8780f7a1
...
...
@@ -6,7 +6,7 @@
],
factory
);
}
(
this
,
function
(
jasmine
,
mock
,
test_utils
)
{
"
use strict
"
;
const
{
Promise
,
Strophe
,
$
iq
,
$msg
,
$pres
,
sizzle
,
_
}
=
converse
.
env
;
const
{
Promise
,
Strophe
,
$
msg
,
$pres
,
sizzle
}
=
converse
.
env
;
const
u
=
converse
.
env
.
utils
;
describe
(
"
A Groupchat Message
"
,
function
()
{
...
...
@@ -65,7 +65,7 @@
type
:
'
groupchat
'
}).
c
(
'
body
'
).
t
(
message
).
tree
();
await
view
.
model
.
onMessage
(
msg
);
await
new
Promise
(
(
resolve
,
reject
)
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
await
new
Promise
(
resolve
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
expect
(
u
.
hasClass
(
'
mentioned
'
,
view
.
el
.
querySelector
(
'
.chat-msg
'
))).
toBeTruthy
();
done
();
}));
...
...
@@ -87,7 +87,7 @@
type
:
'
groupchat
'
}).
c
(
'
body
'
).
t
(
'
First message
'
).
tree
();
await
view
.
model
.
onMessage
(
msg
);
await
new
Promise
(
(
resolve
,
reject
)
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
await
new
Promise
(
resolve
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
expect
(
view
.
el
.
querySelectorAll
(
'
.chat-msg
'
).
length
).
toBe
(
1
);
msg
=
$msg
({
...
...
@@ -97,7 +97,7 @@
type
:
'
groupchat
'
}).
c
(
'
body
'
).
t
(
'
Another message
'
).
tree
();
await
view
.
model
.
onMessage
(
msg
);
await
new
Promise
(
(
resolve
,
reject
)
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
await
new
Promise
(
resolve
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
expect
(
view
.
el
.
querySelectorAll
(
'
.chat-msg
'
).
length
).
toBe
(
2
);
done
();
}));
...
...
@@ -223,7 +223,7 @@
type
:
'
groupchat
'
}).
c
(
'
body
'
).
t
(
'
I wrote this message!
'
).
tree
();
await
view
.
model
.
onMessage
(
msg
);
await
new
Promise
(
(
resolve
,
reject
)
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
await
new
Promise
(
resolve
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
expect
(
view
.
model
.
messages
.
last
().
occupant
.
get
(
'
affiliation
'
)).
toBe
(
'
owner
'
);
expect
(
view
.
model
.
messages
.
last
().
occupant
.
get
(
'
role
'
)).
toBe
(
'
moderator
'
);
expect
(
view
.
el
.
querySelectorAll
(
'
.chat-msg
'
).
length
).
toBe
(
1
);
...
...
@@ -250,7 +250,7 @@
type
:
'
groupchat
'
}).
c
(
'
body
'
).
t
(
'
Another message!
'
).
tree
();
await
view
.
model
.
onMessage
(
msg
);
await
new
Promise
(
(
resolve
,
reject
)
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
await
new
Promise
(
resolve
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
expect
(
view
.
model
.
messages
.
last
().
occupant
.
get
(
'
affiliation
'
)).
toBe
(
'
member
'
);
expect
(
view
.
model
.
messages
.
last
().
occupant
.
get
(
'
role
'
)).
toBe
(
'
participant
'
);
expect
(
view
.
el
.
querySelectorAll
(
'
.chat-msg
'
).
length
).
toBe
(
2
);
...
...
@@ -286,7 +286,7 @@
type
:
'
groupchat
'
}).
c
(
'
body
'
).
t
(
'
Message from someone not in the MUC right now
'
).
tree
();
await
view
.
model
.
onMessage
(
msg
);
await
new
Promise
(
(
resolve
,
reject
)
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
await
new
Promise
(
resolve
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
expect
(
view
.
model
.
messages
.
last
().
occupant
).
toBeUndefined
();
// Check that there's a new "add" event handler, for when the occupant appears.
expect
(
view
.
model
.
occupants
.
_events
.
add
.
length
).
toBe
(
add_events
+
1
);
...
...
@@ -351,7 +351,7 @@
type
:
'
groupchat
'
}).
c
(
'
body
'
).
t
(
'
I wrote this message!
'
).
tree
();
await
view
.
model
.
onMessage
(
msg
);
await
new
Promise
(
(
resolve
,
reject
)
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
await
new
Promise
(
resolve
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
expect
(
view
.
model
.
messages
.
last
().
get
(
'
sender
'
)).
toBe
(
'
me
'
);
done
();
}));
...
...
@@ -382,7 +382,7 @@
'
type
'
:
'
groupchat
'
,
'
id
'
:
msg_id
,
}).
c
(
'
body
'
).
t
(
'
But soft, what light through yonder airlock breaks?
'
).
tree
());
await
new
Promise
(
(
resolve
,
reject
)
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
await
new
Promise
(
resolve
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
expect
(
view
.
el
.
querySelectorAll
(
'
.chat-msg
'
).
length
).
toBe
(
1
);
expect
(
view
.
el
.
querySelector
(
'
.chat-msg__text
'
).
textContent
)
.
toBe
(
'
But soft, what light through yonder airlock breaks?
'
);
...
...
@@ -445,7 +445,7 @@
preventDefault
:
function
preventDefault
()
{},
keyCode
:
13
// Enter
});
await
new
Promise
(
(
resolve
,
reject
)
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
await
new
Promise
(
resolve
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
expect
(
view
.
el
.
querySelectorAll
(
'
.chat-msg
'
).
length
).
toBe
(
1
);
expect
(
view
.
el
.
querySelector
(
'
.chat-msg__text
'
).
textContent
)
.
toBe
(
'
But soft, what light through yonder airlock breaks?
'
);
...
...
@@ -456,7 +456,7 @@
target
:
textarea
,
keyCode
:
38
// Up arrow
});
await
new
Promise
(
(
resolve
,
reject
)
=>
view
.
model
.
messages
.
once
(
'
rendered
'
,
resolve
));
await
new
Promise
(
resolve
=>
view
.
model
.
messages
.
once
(
'
rendered
'
,
resolve
));
expect
(
textarea
.
value
).
toBe
(
'
But soft, what light through yonder airlock breaks?
'
);
expect
(
view
.
model
.
messages
.
at
(
0
).
get
(
'
correcting
'
)).
toBe
(
true
);
expect
(
view
.
el
.
querySelectorAll
(
'
.chat-msg
'
).
length
).
toBe
(
1
);
...
...
@@ -470,7 +470,7 @@
keyCode
:
13
// Enter
});
expect
(
_converse
.
connection
.
send
).
toHaveBeenCalled
();
await
new
Promise
(
(
resolve
,
reject
)
=>
view
.
model
.
messages
.
once
(
'
rendered
'
,
resolve
));
await
new
Promise
(
resolve
=>
view
.
model
.
messages
.
once
(
'
rendered
'
,
resolve
));
const
msg
=
_converse
.
connection
.
send
.
calls
.
all
()[
0
].
args
[
0
];
expect
(
msg
.
toLocaleString
())
...
...
@@ -503,7 +503,7 @@
'
to
'
:
'
romeo@montague.lit
'
,
'
type
'
:
'
groupchat
'
}).
c
(
'
body
'
).
t
(
'
Hello world
'
).
tree
());
await
new
Promise
(
(
resolve
,
reject
)
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
await
new
Promise
(
resolve
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
expect
(
view
.
el
.
querySelectorAll
(
'
.chat-msg
'
).
length
).
toBe
(
2
);
// Test that pressing the down arrow cancels message correction
...
...
@@ -544,7 +544,7 @@
preventDefault
:
function
preventDefault
()
{},
keyCode
:
13
// Enter
});
await
new
Promise
(
(
resolve
,
reject
)
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
await
new
Promise
(
resolve
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
expect
(
view
.
el
.
querySelectorAll
(
'
.chat-msg__body.chat-msg__body--received
'
).
length
).
toBe
(
0
);
const
msg_obj
=
view
.
model
.
messages
.
at
(
0
);
...
...
@@ -623,7 +623,7 @@
preventDefault
:
function
preventDefault
()
{},
keyCode
:
13
// Enter
});
await
new
Promise
(
(
resolve
,
reject
)
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
await
new
Promise
(
resolve
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
expect
(
view
.
el
.
querySelectorAll
(
'
.chat-msg
'
).
length
).
toBe
(
1
);
const
msg_obj
=
view
.
model
.
messages
.
at
(
0
);
...
...
@@ -659,7 +659,7 @@
preventDefault
:
function
preventDefault
()
{},
keyCode
:
13
// Enter
});
await
new
Promise
(
(
resolve
,
reject
)
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
await
new
Promise
(
resolve
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
expect
(
view
.
el
.
querySelectorAll
(
'
.chat-msg
'
).
length
).
toBe
(
1
);
expect
(
view
.
el
.
querySelector
(
'
.chat-msg .chat-msg__body
'
).
textContent
.
trim
())
.
toBe
(
"
But soft, what light through yonder airlock breaks?
"
);
...
...
@@ -744,7 +744,7 @@
.
c
(
'
reference
'
,
{
'
xmlns
'
:
'
urn:xmpp:reference:0
'
,
'
begin
'
:
'
11
'
,
'
end
'
:
'
14
'
,
'
type
'
:
'
mention
'
,
'
uri
'
:
'
xmpp:romeo@montague.lit
'
}).
up
()
.
c
(
'
reference
'
,
{
'
xmlns
'
:
'
urn:xmpp:reference:0
'
,
'
begin
'
:
'
15
'
,
'
end
'
:
'
23
'
,
'
type
'
:
'
mention
'
,
'
uri
'
:
'
xmpp:mr.robot@montague.lit
'
}).
nodeTree
;
await
view
.
model
.
onMessage
(
msg
);
await
new
Promise
(
(
resolve
,
reject
)
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
await
new
Promise
(
resolve
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
const
messages
=
view
.
el
.
querySelectorAll
(
'
.chat-msg__text
'
);
expect
(
messages
.
length
).
toBe
(
1
);
expect
(
messages
[
0
].
classList
.
length
).
toEqual
(
1
);
...
...
@@ -907,7 +907,7 @@
}
spyOn
(
_converse
.
connection
,
'
send
'
);
view
.
onKeyDown
(
enter_event
);
await
new
Promise
(
(
resolve
,
reject
)
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
await
new
Promise
(
resolve
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
const
msg
=
_converse
.
connection
.
send
.
calls
.
all
()[
0
].
args
[
0
];
expect
(
msg
.
toLocaleString
())
.
toBe
(
`<message from="romeo@montague.lit/orchard" id="
${
msg
.
nodeTree
.
getAttribute
(
"
id
"
)}
" `
+
...
...
@@ -921,7 +921,6 @@
`<origin-id id="
${
msg
.
nodeTree
.
querySelector
(
'
origin-id
'
).
getAttribute
(
"
id
"
)}
" xmlns="urn:xmpp:sid:0"/>`
+
`</message>`
);
const
first_msg
=
view
.
model
.
messages
.
findWhere
({
'
message
'
:
'
hello z3r0 gibson mr.robot, how are you?
'
});
const
action
=
view
.
el
.
querySelector
(
'
.chat-msg .chat-msg__action
'
);
action
.
style
.
opacity
=
1
;
action
.
click
();
...
...
spec/notification.js
View file @
8780f7a1
...
...
@@ -2,7 +2,6 @@
define
([
"
jasmine
"
,
"
mock
"
,
"
test-utils
"
],
factory
);
}
(
this
,
function
(
jasmine
,
mock
,
test_utils
)
{
"
use strict
"
;
const
Strophe
=
converse
.
env
.
Strophe
;
const
_
=
converse
.
env
.
_
;
const
$msg
=
converse
.
env
.
$msg
;
const
u
=
converse
.
env
.
utils
;
...
...
@@ -73,7 +72,7 @@
}).
c
(
'
body
'
).
t
(
message
).
tree
();
_converse
.
connection
.
_dataRecv
(
test_utils
.
createRequest
(
msg
));
await
new
Promise
(
(
resolve
,
reject
)
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
await
new
Promise
(
resolve
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
expect
(
_converse
.
areDesktopNotificationsEnabled
).
toHaveBeenCalled
();
expect
(
_converse
.
showMessageNotification
).
toHaveBeenCalled
();
if
(
no_notification
)
{
...
...
@@ -103,7 +102,7 @@
_converse
.
connection
.
_dataRecv
(
test_utils
.
createRequest
(
stanza
));
await
u
.
waitUntil
(()
=>
_converse
.
chatboxviews
.
keys
().
length
);
const
view
=
_converse
.
chatboxviews
.
get
(
'
notify.example.com
'
);
await
new
Promise
(
(
resolve
,
reject
)
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
await
new
Promise
(
resolve
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
expect
(
_
.
includes
(
_converse
.
chatboxviews
.
keys
(),
'
notify.example.com
'
)
...
...
spec/omemo.js
View file @
8780f7a1
...
...
@@ -205,7 +205,7 @@
.
up
().
up
()
.
c
(
'
payload
'
).
t
(
obj
.
payload
);
_converse
.
connection
.
_dataRecv
(
test_utils
.
createRequest
(
stanza
));
await
new
Promise
(
(
resolve
,
reject
)
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
await
new
Promise
(
resolve
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
expect
(
view
.
model
.
messages
.
length
).
toBe
(
2
);
expect
(
view
.
el
.
querySelectorAll
(
'
.chat-msg__body
'
)[
1
].
textContent
.
trim
())
.
toBe
(
'
This is an encrypted message from the contact
'
);
...
...
@@ -224,7 +224,7 @@
.
up
().
up
()
.
c
(
'
payload
'
).
t
(
obj
.
payload
);
_converse
.
connection
.
_dataRecv
(
test_utils
.
createRequest
(
stanza
));
await
new
Promise
(
(
resolve
,
reject
)
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
await
new
Promise
(
resolve
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
await
u
.
waitUntil
(()
=>
view
.
model
.
messages
.
length
>
1
);
expect
(
view
.
model
.
messages
.
length
).
toBe
(
3
);
expect
(
view
.
el
.
querySelectorAll
(
'
.chat-msg__body
'
)[
2
].
textContent
.
trim
())
...
...
@@ -386,7 +386,6 @@
await
test_utils
.
waitUntilDiscoConfirmed
(
_converse
,
_converse
.
bare_jid
,
[],
[
Strophe
.
NS
.
SID
]);
let
sent_stanza
;
test_utils
.
createContacts
(
_converse
,
'
current
'
,
1
);
_converse
.
api
.
trigger
(
'
rosterContactsFetched
'
);
const
contact_jid
=
mock
.
cur_names
[
0
].
replace
(
/ /g
,
'
.
'
).
toLowerCase
()
+
'
@montague.lit
'
;
...
...
@@ -606,7 +605,6 @@
async
function
(
done
,
_converse
)
{
_converse
.
NUM_PREKEYS
=
5
;
// Restrict to 5, otherwise the resulting stanza is too large to easily test
let
view
,
sent_stanza
;
test_utils
.
createContacts
(
_converse
,
'
current
'
,
1
);
_converse
.
api
.
trigger
(
'
rosterContactsFetched
'
);
const
contact_jid
=
mock
.
cur_names
[
0
].
replace
(
/ /g
,
'
.
'
).
toLowerCase
()
+
'
@montague.lit
'
;
...
...
@@ -1548,15 +1546,4 @@
done
();
}));
});
describe
(
"
A chatbox with an active OMEMO session
"
,
function
()
{
it
(
"
will not show the spoiler toolbar button
"
,
mock
.
initConverse
(
null
,
[
'
rosterGroupsFetched
'
],
{},
function
(
done
,
_converse
)
{
// TODO
done
()
}));
});
}));
spec/presence.js
View file @
8780f7a1
...
...
@@ -8,10 +8,6 @@
],
factory
);
}
(
this
,
function
(
jasmine
,
mock
,
test_utils
)
{
"
use strict
"
;
const
Strophe
=
converse
.
env
.
Strophe
;
const
$iq
=
converse
.
env
.
$iq
;
const
$pres
=
converse
.
env
.
$pres
;
const
_
=
converse
.
env
.
_
;
const
u
=
converse
.
env
.
utils
;
// See: https://xmpp.org/rfcs/rfc3921.html
...
...
spec/profiling.js
View file @
8780f7a1
...
...
@@ -15,8 +15,6 @@
test_utils
.
openControlBox
();
await
test_utils
.
openAndEnterChatRoom
(
_converse
,
'
lounge@montague.lit
'
,
'
romeo
'
);
const
view
=
_converse
.
chatboxviews
.
get
(
'
lounge@montague.lit
'
),
occupants
=
view
.
el
.
querySelector
(
'
.occupant-list
'
);
_
.
rangeRight
(
3000
,
0
).
forEach
(
i
=>
{
const
name
=
`User
${
i
.
toString
().
padStart
(
5
,
'
0
'
)}
`
;
const
presence
=
$pres
({
...
...
spec/protocol.js
View file @
8780f7a1
...
...
@@ -389,12 +389,8 @@
expect
(
_converse
.
roster
.
get
(
'
contact@example.org
'
)
instanceof
_converse
.
RosterContact
).
toBeTruthy
();
spyOn
(
contact
,
"
ackUnsubscribe
"
).
and
.
callThrough
();
spyOn
(
_converse
.
connection
,
'
send
'
).
and
.
callFake
(
function
(
stanza
)
{
sent_stanza
=
stanza
;
});
spyOn
(
_converse
.
connection
,
'
sendIQ
'
).
and
.
callFake
(
function
(
iq
,
callback
,
errback
)
{
sent_IQ
=
iq
;
});
spyOn
(
_converse
.
connection
,
'
send
'
).
and
.
callFake
(
stanza
=>
{
sent_stanza
=
stanza
});
spyOn
(
_converse
.
connection
,
'
sendIQ
'
).
and
.
callFake
(
iq
=>
{
sent_IQ
=
iq
});
/* We now assume the contact declines the subscription
* requests.
*
...
...
spec/push.js
View file @
8780f7a1
...
...
@@ -59,7 +59,6 @@
},
async
function
(
done
,
_converse
)
{
const
IQ_stanzas
=
_converse
.
connection
.
IQ_stanzas
;
const
room_jid
=
'
coven@chat.shakespeare.lit
'
;
await
test_utils
.
waitUntilDiscoConfirmed
(
_converse
,
_converse
.
push_app_servers
[
0
].
jid
,
[{
'
category
'
:
'
pubsub
'
,
'
type
'
:
'
push
'
}],
...
...
spec/room_registration.js
View file @
8780f7a1
...
...
@@ -74,7 +74,6 @@
null
,
[
'
rosterGroupsFetched
'
,
'
chatBoxesFetched
'
],
{
'
auto_register_muc_nickname
'
:
true
},
async
function
(
done
,
_converse
)
{
const
IQ_stanzas
=
_converse
.
connection
.
IQ_stanzas
;
const
muc_jid
=
'
coven@chat.shakespeare.lit
'
;
await
test_utils
.
openAndEnterChatRoom
(
_converse
,
muc_jid
,
'
romeo
'
);
const
view
=
_converse
.
chatboxviews
.
get
(
muc_jid
);
...
...
spec/roomslist.js
View file @
8780f7a1
(
function
(
root
,
factory
)
{
define
([
"
jasmine
"
,
"
mock
"
,
"
test-utils
"
],
factory
);
}
(
this
,
function
(
jasmine
,
mock
,
test_utils
)
{
const
{
Backbone
,
Promise
,
Strophe
,
$iq
,
$msg
,
$pres
,
b64_sha1
,
sizzle
,
_
}
=
converse
.
env
;
const
{
Strophe
,
$iq
,
$msg
,
$pres
,
sizzle
,
_
}
=
converse
.
env
;
const
u
=
converse
.
env
.
utils
;
...
...
@@ -59,9 +59,6 @@
async
function
(
done
,
_converse
)
{
await
test_utils
.
openAndEnterChatRoom
(
_converse
,
'
lounge@montague.lit
'
,
'
romeo
'
);
const
view
=
_converse
.
chatboxviews
.
get
(
'
lounge@montague.lit
'
);
const
contact_jid
=
'
newguy@montague.lit
'
;
let
stanza
=
$pres
({
to
:
'
romeo@montague.lit/orchard
'
,
from
:
'
lounge@montague.lit/newguy
'
...
...
@@ -291,7 +288,6 @@
await
test_utils
.
openAndEnterChatRoom
(
_converse
,
'
kitchen@conference.shakespeare.lit
'
,
'
romeo
'
);
const
view
=
_converse
.
chatboxviews
.
get
(
room_jid
);
view
.
model
.
set
({
'
minimized
'
:
true
});
const
contact_jid
=
mock
.
cur_names
[
5
].
replace
(
/ /g
,
'
.
'
).
toLowerCase
()
+
'
@montague.lit
'
;
const
nick
=
mock
.
chatroom_names
[
0
];
await
view
.
model
.
onMessage
(
$msg
({
...
...
spec/roster.js
View file @
8780f7a1
...
...
@@ -2,7 +2,6 @@
define
([
"
jasmine
"
,
"
mock
"
,
"
test-utils
"
],
factory
);
}
(
this
,
function
(
jasmine
,
mock
,
test_utils
)
{
const
$iq
=
converse
.
env
.
$iq
;
const
$msg
=
converse
.
env
.
$msg
;
const
$pres
=
converse
.
env
.
$pres
;
const
Strophe
=
converse
.
env
.
Strophe
;
const
_
=
converse
.
env
.
_
;
...
...
@@ -187,7 +186,7 @@
const
roster
=
_converse
.
rosterview
.
roster_el
;
_converse
.
rosterview
.
filter_view
.
delegateEvents
();
const
contacts
=
await
u
.
waitUntil
(()
=>
(
sizzle
(
'
li
'
,
roster
).
filter
(
u
.
isVisible
).
length
===
15
),
600
);
await
u
.
waitUntil
(()
=>
(
sizzle
(
'
li
'
,
roster
).
filter
(
u
.
isVisible
).
length
===
15
),
600
);
expect
(
sizzle
(
'
ul.roster-group-contacts
'
,
roster
).
filter
(
u
.
isVisible
).
length
).
toBe
(
5
);
filter
.
value
=
"
juliet
"
;
u
.
triggerEvent
(
filter
,
"
keydown
"
,
"
KeyboardEvent
"
);
...
...
@@ -286,7 +285,7 @@
var
button
=
_converse
.
rosterview
.
el
.
querySelector
(
'
span[data-type="groups"]
'
);
button
.
click
();
const
contacts
=
await
u
.
waitUntil
(()
=>
(
sizzle
(
'
li
'
,
roster
).
filter
(
u
.
isVisible
).
length
===
15
),
600
);
await
u
.
waitUntil
(()
=>
(
sizzle
(
'
li
'
,
roster
).
filter
(
u
.
isVisible
).
length
===
15
),
600
);
expect
(
sizzle
(
'
.roster-group
'
,
roster
).
filter
(
u
.
isVisible
).
length
).
toBe
(
5
);
var
filter
=
_converse
.
rosterview
.
el
.
querySelector
(
'
.roster-filter
'
);
...
...
@@ -403,7 +402,6 @@
"
Pending contacts
"
]);
// Check that usernames appear alphabetically per group
let
names
;
_
.
each
(
_
.
keys
(
mock
.
groups
),
function
(
name
)
{
const
contacts
=
sizzle
(
'
.roster-group[data-group="
'
+
name
+
'
"] ul
'
,
_converse
.
rosterview
.
el
);
const
names
=
_
.
map
(
contacts
,
o
=>
o
.
textContent
.
trim
());
...
...
@@ -608,8 +606,7 @@
spyOn
(
contact
,
'
unauthorize
'
).
and
.
callFake
(
function
()
{
return
contact
;
});
spyOn
(
contact
,
'
removeFromRoster
'
).
and
.
callThrough
();
await
u
.
waitUntil
(()
=>
sizzle
(
"
.pending-contact-name:contains('
"
+
name
+
"
')
"
,
_converse
.
rosterview
.
el
).
length
,
700
);
var
sendIQ
=
_converse
.
connection
.
sendIQ
;
spyOn
(
_converse
.
connection
,
'
sendIQ
'
).
and
.
callFake
(
function
(
iq
,
callback
,
errback
)
{
spyOn
(
_converse
.
connection
,
'
sendIQ
'
).
and
.
callFake
(
function
(
iq
,
callback
)
{
sent_IQ
=
iq
;
callback
();
});
...
...
@@ -784,9 +781,8 @@
spyOn
(
window
,
'
confirm
'
).
and
.
returnValue
(
true
);
spyOn
(
contact
,
'
removeFromRoster
'
).
and
.
callThrough
();
const
sendIQ
=
_converse
.
connection
.
sendIQ
;
let
sent_IQ
;
spyOn
(
_converse
.
connection
,
'
sendIQ
'
).
and
.
callFake
(
function
(
iq
,
callback
,
errback
)
{
spyOn
(
_converse
.
connection
,
'
sendIQ
'
).
and
.
callFake
(
function
(
iq
,
callback
)
{
sent_IQ
=
iq
;
callback
();
});
...
...
spec/spoilers.js
View file @
8780f7a1
...
...
@@ -36,7 +36,7 @@
.
tree
();
await
_converse
.
chatboxes
.
onMessage
(
msg
);
const
view
=
_converse
.
chatboxviews
.
get
(
sender_jid
);
await
new
Promise
(
(
resolve
,
reject
)
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
await
new
Promise
(
resolve
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
await
u
.
waitUntil
(()
=>
view
.
model
.
vcard
.
get
(
'
fullname
'
)
===
'
Mercutio
'
)
expect
(
view
.
el
.
querySelector
(
'
.chat-msg__author
'
).
textContent
.
trim
()).
toBe
(
'
Mercutio
'
);
const
message_content
=
view
.
el
.
querySelector
(
'
.chat-msg__text
'
);
...
...
@@ -70,7 +70,7 @@
}).
tree
();
await
_converse
.
chatboxes
.
onMessage
(
msg
);
const
view
=
_converse
.
chatboxviews
.
get
(
sender_jid
);
await
new
Promise
(
(
resolve
,
reject
)
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
await
new
Promise
(
resolve
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
await
u
.
waitUntil
(()
=>
view
.
model
.
vcard
.
get
(
'
fullname
'
)
===
'
Mercutio
'
)
expect
(
_
.
includes
(
view
.
el
.
querySelector
(
'
.chat-msg__author
'
).
textContent
,
'
Mercutio
'
)).
toBeTruthy
();
const
message_content
=
view
.
el
.
querySelector
(
'
.chat-msg__text
'
);
...
...
@@ -114,7 +114,7 @@
preventDefault
:
function
preventDefault
()
{},
keyCode
:
13
});
await
new
Promise
(
(
resolve
,
reject
)
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
await
new
Promise
(
resolve
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
/* Test the XML stanza
*
...
...
@@ -191,7 +191,7 @@
preventDefault
:
function
preventDefault
()
{},
keyCode
:
13
});
await
new
Promise
(
(
resolve
,
reject
)
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
await
new
Promise
(
resolve
=>
view
.
once
(
'
messageInserted
'
,
resolve
));
/* Test the XML stanza
*
...
...
spec/user-details-modal.js
View file @
8780f7a1
...
...
@@ -6,10 +6,6 @@
],
factory
);
}
(
this
,
function
(
jasmine
,
mock
,
test_utils
)
{
"
use strict
"
;
const
_
=
converse
.
env
.
_
;
const
$iq
=
converse
.
env
.
$iq
;
const
$msg
=
converse
.
env
.
$msg
;
const
Strophe
=
converse
.
env
.
Strophe
;
const
u
=
converse
.
env
.
utils
;
return
describe
(
"
The User Details Modal
"
,
function
()
{
...
...
spec/utils.js
View file @
8780f7a1
(
function
(
root
,
factory
)
{
define
([
"
jasmine
"
],
factory
);
}
(
this
,
function
(
jasmine
)
{
}
(
this
,
function
()
{
var
utils
=
converse
.
env
.
utils
,
_
=
converse
.
env
.
_
;
...
...
spec/xmppstatus.js
View file @
8780f7a1
(
function
(
root
,
factory
)
{
define
([
"
jasmine
"
,
"
mock
"
,
"
test-utils
"
],
factory
);
}
(
this
,
function
(
jasmine
,
mock
,
test_utils
)
{
define
([
"
jasmine
"
,
"
mock
"
],
factory
);
}
(
this
,
function
(
jasmine
,
mock
)
{
return
describe
(
"
The XMPPStatus model
"
,
function
()
{
...
...
src/converse-autocomplete.js
View file @
8780f7a1
...
...
@@ -194,7 +194,6 @@ converse.plugins.add("converse-autocomplete", {
}
insertValue
(
suggestion
)
{
let
value
;
if
(
this
.
match_current_word
)
{
u
.
replaceCurrentWord
(
this
.
input
,
suggestion
.
value
);
}
else
{
...
...
src/converse-bookmark-views.js
View file @
8780f7a1
...
...
@@ -95,7 +95,7 @@ converse.plugins.add('converse-bookmark-views', {
*/
ev
.
preventDefault
();
const
jid
=
ev
.
target
.
getAttribute
(
'
data-room-jid
'
);
const
chatroom
=
_converse
.
api
.
rooms
.
open
(
jid
,
{
'
bring_to_foreground
'
:
true
});
_converse
.
api
.
rooms
.
open
(
jid
,
{
'
bring_to_foreground
'
:
true
});
_converse
.
chatboxviews
.
get
(
jid
).
renderBookmarkForm
();
},
});
...
...
@@ -307,7 +307,7 @@ converse.plugins.add('converse-bookmark-views', {
}
},
showOrHide
(
item
)
{
showOrHide
()
{
if
(
_converse
.
hide_open_bookmarks
)
{
const
bookmarks
=
this
.
model
.
filter
((
bookmark
)
=>
!
_converse
.
chatboxes
.
get
(
bookmark
.
get
(
'
jid
'
)));
...
...
src/converse-chatboxviews.js
View file @
8780f7a1
...
...
@@ -63,12 +63,9 @@ converse.plugins.add('converse-chatboxviews', {
/* The initialize function gets called as soon as the plugin is
* loaded by converse.js's plugin machinery.
*/
const
{
_converse
}
=
this
,
{
__
}
=
_converse
;
const
{
_converse
}
=
this
;
_converse
.
api
.
promises
.
add
([
'
chatBoxViewsInitialized
'
]);
_converse
.
api
.
promises
.
add
([
'
chatBoxViewsInitialized
'
]);
// Configuration values for this plugin
// ====================================
...
...
src/converse-controlbox.js
View file @
8780f7a1
...
...
@@ -8,7 +8,7 @@
* @module converse-controlbox
*/
import
"
converse-chatview
"
;
import
_FormData
from
"
formdata-polyfill
"
;
import
"
formdata-polyfill
"
;
import
bootstrap
from
"
bootstrap.native
"
;
import
converse
from
"
@converse/headless/converse-core
"
;
import
{
get
}
from
"
lodash
"
;
...
...
@@ -17,7 +17,6 @@ import tpl_controlbox from "templates/controlbox.html";
import
tpl_controlbox_toggle
from
"
templates/controlbox_toggle.html
"
;
import
tpl_login_panel
from
"
templates/login_panel.html
"
;
const
CHATBOX_TYPE
=
'
chatbox
'
;
const
{
Strophe
,
Backbone
,
dayjs
}
=
converse
.
env
;
const
u
=
converse
.
env
.
utils
;
...
...
@@ -109,7 +108,7 @@ converse.plugins.add('converse-controlbox', {
},
ChatBox
:
{
validate
(
attrs
,
options
)
{
validate
(
attrs
)
{
const
{
_converse
}
=
this
.
__super__
;
if
(
attrs
.
type
===
_converse
.
CONTROLBOX_TYPE
)
{
if
(
_converse
.
view_mode
===
'
embedded
'
&&
_converse
.
singleton
)
{
...
...
@@ -270,12 +269,13 @@ converse.plugins.add('converse-controlbox', {
return
this
;
},
/**
* Renders the "Contacts" panel of the controlbox.
* This will only be called after the user has already been logged in.
* @private
* @method _converse.ControlBoxView.renderControlBoxPane
*/
renderControlBoxPane
()
{
/* Renders the "Contacts" panel of the controlbox.
*
* This will only be called after the user has already been
* logged in.
*/
if
(
this
.
loginpanel
)
{
this
.
loginpanel
.
remove
();
delete
this
.
loginpanel
;
...
...
@@ -366,7 +366,7 @@ converse.plugins.add('converse-controlbox', {
'
change input
'
:
'
validate
'
},
initialize
(
cfg
)
{
initialize
()
{
this
.
listenTo
(
this
.
model
,
'
change
'
,
this
.
render
)
this
.
listenTo
(
_converse
.
connfeedback
,
'
change
'
,
this
.
render
);
this
.
render
();
...
...
@@ -402,7 +402,7 @@ converse.plugins.add('converse-controlbox', {
initPopovers
()
{
Array
.
from
(
this
.
el
.
querySelectorAll
(
'
[data-title]
'
)).
forEach
(
el
=>
{
const
popover
=
new
bootstrap
.
Popover
(
el
,
{
new
bootstrap
.
Popover
(
el
,
{
'
trigger
'
:
_converse
.
view_mode
===
'
mobile
'
&&
'
click
'
||
'
hover
'
,
'
dismissible
'
:
_converse
.
view_mode
===
'
mobile
'
&&
true
||
false
,
'
container
'
:
this
.
el
.
parentElement
.
parentElement
.
parentElement
...
...
src/converse-fullscreen.js
View file @
8780f7a1
...
...
@@ -14,8 +14,6 @@ import "converse-singleton";
import
converse
from
"
@converse/headless/converse-core
"
;
import
tpl_brand_heading
from
"
templates/inverse_brand_heading.html
"
;
const
{
Strophe
,
_
}
=
converse
.
env
;
converse
.
plugins
.
add
(
'
converse-fullscreen
'
,
{
...
...
src/converse-headline.js
View file @
8780f7a1
...
...
@@ -10,7 +10,7 @@ import "converse-chatview";
import
converse
from
"
@converse/headless/converse-core
"
;
import
tpl_chatbox
from
"
templates/chatbox.html
"
;
const
{
_
,
dayjs
,
utils
}
=
converse
.
env
;
const
{
utils
}
=
converse
.
env
;
converse
.
plugins
.
add
(
'
converse-headline
'
,
{
...
...
@@ -50,14 +50,13 @@ converse.plugins.add('converse-headline', {
/* The initialize function gets called as soon as the plugin is
* loaded by converse.js's plugin machinery.
*/
const
{
_converse
}
=
this
,
{
__
}
=
_converse
;
const
{
_converse
}
=
this
;
_converse
.
HeadlinesBox
=
_converse
.
ChatBox
.
extend
({
defaults
()
{
return
{
'
bookmarked
'
:
false
,
'
hidden
'
:
_
.
includes
([
'
mobile
'
,
'
fullscreen
'
],
_converse
.
view_mode
),
'
hidden
'
:
[
'
mobile
'
,
'
fullscreen
'
].
includes
(
_converse
.
view_mode
),
'
message_type
'
:
'
headline
'
,
'
num_unread
'
:
0
,
'
time_opened
'
:
this
.
get
(
'
time_opened
'
)
||
(
new
Date
()).
getTime
(),
...
...
@@ -120,14 +119,13 @@ converse.plugins.add('converse-headline', {
/* Handler method for all incoming messages of type "headline". */
if
(
utils
.
isHeadlineMessage
(
_converse
,
message
))
{
const
from_jid
=
message
.
getAttribute
(
'
from
'
);
if
(
_
.
includes
(
from_jid
,
'
@
'
)
&&
if
(
from_jid
.
includes
(
'
@
'
)
&&
!
_converse
.
roster
.
get
(
from_jid
)
&&
!
_converse
.
allow_non_roster_messaging
)
{
return
;
}
if
(
_
.
isNull
(
message
.
querySelector
(
'
body
'
)))
{
// Avoid creating a chat box if we have nothing to show
// inside it.
if
(
message
.
querySelector
(
'
body
'
)
===
null
)
{
// Avoid creating a chat box if we have nothing to show inside it.
return
;
}
const
chatbox
=
_converse
.
chatboxes
.
create
({
...
...
src/converse-mam-views.js
View file @
8780f7a1
...
...
@@ -33,8 +33,7 @@ converse.plugins.add('converse-mam-views', {
return
result
;
},
async
onScroll
(
ev
)
{
const
{
_converse
}
=
this
.
__super__
;
async
onScroll
()
{
if
(
this
.
content
.
scrollTop
===
0
&&
this
.
model
.
messages
.
length
)
{
const
oldest_message
=
this
.
model
.
getOldestMessage
();
if
(
oldest_message
)
{
...
...
src/converse-message-view.js
View file @
8780f7a1
...
...
@@ -6,12 +6,12 @@
/**
* @module converse-message-view
*/
import
"
./utils/html
"
;
import
"
@converse/headless/converse-emoji
"
;
import
URI
from
"
urijs
"
;
import
converse
from
"
@converse/headless/converse-core
"
;
import
{
debounce
}
from
'
lodash
'
import
filesize
from
"
filesize
"
;
import
html
from
"
./utils/html
"
;
import
tpl_csn
from
"
templates/csn.html
"
;
import
tpl_file_progress
from
"
templates/file_progress.html
"
;
import
tpl_info
from
"
templates/info.html
"
;
...
...
@@ -20,7 +20,7 @@ import tpl_message_versions_modal from "templates/message_versions_modal.html";
import
tpl_spinner
from
"
templates/spinner.html
"
;
import
xss
from
"
xss/dist/xss
"
;
const
{
Backbone
,
dayjs
}
=
converse
.
env
;
const
{
dayjs
}
=
converse
.
env
;
const
u
=
converse
.
env
.
utils
;
...
...
src/converse-minimize.js
View file @
8780f7a1
...
...
@@ -100,13 +100,13 @@ converse.plugins.add('converse-minimize', {
setChatBoxHeight
(
height
)
{
if
(
!
this
.
model
.
get
(
'
minimized
'
))
{
return
this
.
__super__
.
setChatBoxHeight
.
apply
(
this
,
arguments
);
return
this
.
__super__
.
setChatBoxHeight
.
call
(
this
,
height
);
}
},
setChatBoxWidth
(
width
)
{
if
(
!
this
.
model
.
get
(
'
minimized
'
))
{
return
this
.
__super__
.
setChatBoxWidth
.
apply
(
this
,
arguments
);
return
this
.
__super__
.
setChatBoxWidth
.
call
(
this
,
width
);
}
}
},
...
...
@@ -115,7 +115,7 @@ converse.plugins.add('converse-minimize', {
render
()
{
const
{
_converse
}
=
this
.
__super__
,
{
__
}
=
_converse
;
const
result
=
this
.
__super__
.
render
.
apply
(
this
,
arguments
);
this
.
__super__
.
render
.
apply
(
this
,
arguments
);
const
new_html
=
tpl_chatbox_minimize
({
'
info_minimize
'
:
__
(
'
Minimize this chat box
'
)
});
...
...
@@ -251,7 +251,7 @@ converse.plugins.add('converse-minimize', {
* Minimizes a chat box.
* @returns {_converse.ChatBoxView|_converse.ChatRoomView}
*/
minimize
(
ev
)
{
minimize
()
{
this
.
model
.
minimize
();
return
this
;
},
...
...
src/converse-muc-views.js
View file @
8780f7a1
...
...
@@ -11,12 +11,11 @@
*/
import
"
converse-modal
"
;
import
"
backbone.vdomview
"
;
import
"
formdata-polyfill
"
;
import
"
@converse/headless/utils/muc
"
;
import
BrowserStorage
from
"
backbone.browserStorage
"
;
import
{
OrderedListView
}
from
"
backbone.overview
"
;
import
_FormData
from
"
formdata-polyfill
"
;
import
bootstrap
from
"
bootstrap.native
"
;
import
converse
from
"
@converse/headless/converse-core
"
;
import
muc_utils
from
"
@converse/headless/utils/muc
"
;
import
tpl_add_chatroom_modal
from
"
templates/add_chatroom_modal.html
"
;
import
tpl_chatarea
from
"
templates/chatarea.html
"
;
import
tpl_chatroom
from
"
templates/chatroom.html
"
;
...
...
@@ -43,12 +42,11 @@ import tpl_spinner from "templates/spinner.html";
import
xss
from
"
xss/dist/xss
"
;
const
{
Backbone
,
Strophe
,
dayjs
,
sizzle
,
_
,
$iq
,
$msg
,
$pres
}
=
converse
.
env
;
const
{
Backbone
,
Strophe
,
sizzle
,
_
,
$iq
,
$pres
}
=
converse
.
env
;
const
u
=
converse
.
env
.
utils
;
const
ROLES
=
[
'
moderator
'
,
'
participant
'
,
'
visitor
'
];
const
AFFILIATIONS
=
[
'
admin
'
,
'
member
'
,
'
outcast
'
,
'
owner
'
];
const
AFFILIATION_CHANGE_COMANDS
=
[
'
admin
'
,
'
ban
'
,
'
owner
'
,
'
member
'
,
'
revoke
'
];
const
OWNER_COMMANDS
=
[
'
owner
'
];
const
ADMIN_COMMANDS
=
[
'
admin
'
,
'
ban
'
,
'
deop
'
,
'
destroy
'
,
'
member
'
,
'
op
'
,
'
revoke
'
];
const
MODERATOR_COMMANDS
=
[
'
kick
'
,
'
mute
'
,
'
voice
'
,
'
modtools
'
];
...
...
@@ -439,7 +437,7 @@ converse.plugins.add('converse-muc-views', {
toggleRoomInfo
(
ev
);
},
onDomainChange
(
model
)
{
onDomainChange
()
{
if
(
_converse
.
auto_list_rooms
)
{
this
.
updateRoomsList
();
}
...
...
@@ -500,7 +498,7 @@ converse.plugins.add('converse-muc-views', {
}).
c
(
"
query
"
,
{
xmlns
:
Strophe
.
NS
.
DISCO_ITEMS
});
_converse
.
api
.
sendIQ
(
iq
)
.
then
(
iq
=>
this
.
onRoomsFound
(
iq
))
.
catch
(
iq
=>
this
.
informNoRoomsFound
())
.
catch
(
()
=>
this
.
informNoRoomsFound
())
},
showRooms
(
ev
)
{
...
...
@@ -952,7 +950,7 @@ converse.plugins.add('converse-muc-views', {
}
},
hideOccupants
(
ev
,
preserve_state
)
{
hideOccupants
(
ev
)
{
/* Show or hide the right sidebar containing the chat
* occupants (and the invite widget).
*/
...
...
@@ -1037,7 +1035,7 @@ converse.plugins.add('converse-muc-views', {
if
(
!
args
.
startsWith
(
'
@
'
))
{
args
=
'
@
'
+
args
;
}
const
[
text
,
references
]
=
this
.
model
.
parseTextForReferences
(
args
);
const
[
text
,
references
]
=
this
.
model
.
parseTextForReferences
(
args
);
// eslint-disable-line no-unused-vars
if
(
!
references
.
length
)
{
this
.
showErrorMessage
(
__
(
"
Error: couldn't find a groupchat participant based on your arguments
"
));
return
;
...
...
@@ -1312,7 +1310,7 @@ converse.plugins.add('converse-muc-views', {
this
.
renderAfterTransition
();
},
getAndRenderConfigurationForm
(
ev
)
{
getAndRenderConfigurationForm
()
{
/* Start the process of configuring a groupchat, either by
* rendering a configuration form, or by auto-configuring
* based on the "roomconfig" data stored on the
...
...
@@ -1451,7 +1449,6 @@ converse.plugins.add('converse-muc-views', {
getNotificationWithMessage
(
message
)
{
let
el
=
this
.
content
.
lastElementChild
;
while
(
el
)
{
const
data
=
_
.
get
(
el
,
'
dataset
'
,
{});
if
(
!
_
.
includes
(
_
.
get
(
el
,
'
classList
'
,
[]),
'
chat-info
'
))
{
return
;
}
...
...
@@ -2061,7 +2058,7 @@ converse.plugins.add('converse-muc-views', {
'
list
'
:
list
});
this
.
invite_auto_complete
.
on
(
'
suggestion-box-selectcomplete
'
,
ev
=>
this
.
promptForInvite
(
ev
));
this
.
invite_auto_complete
.
on
(
'
suggestion-box-open
'
,
ev
=>
{
this
.
invite_auto_complete
.
on
(
'
suggestion-box-open
'
,
()
=>
{
this
.
invite_auto_complete
.
ul
.
setAttribute
(
'
style
'
,
`max-height: calc(
${
this
.
el
.
offsetHeight
}
px - 80px);`
);
});
}
...
...
src/converse-oauth.js
View file @
8780f7a1
...
...
@@ -8,9 +8,7 @@ import converse from "@converse/headless/converse-core";
import
hello
from
"
hellojs
"
;
import
tpl_oauth_providers
from
"
templates/oauth_providers.html
"
;
const
_
=
converse
.
env
.
_
,
Backbone
=
converse
.
env
.
Backbone
,
Strophe
=
converse
.
env
.
Strophe
;
const
{
_
,
Backbone
}
=
converse
.
env
;
// The following line registers your plugin.
...
...
@@ -55,7 +53,7 @@ converse.plugins.add("converse-oauth", {
this
.
oauth_providers_view
.
render
();
},
render
(
cfg
)
{
render
()
{
const
{
_converse
}
=
this
.
__super__
;
const
result
=
this
.
__super__
.
render
.
apply
(
this
,
arguments
);
if
(
_converse
.
oauth_providers
&&
!
_converse
.
auto_login
)
{
...
...
src/converse-omemo.js
View file @
8780f7a1
...
...
@@ -13,7 +13,7 @@ import BrowserStorage from "backbone.browserStorage";
import
converse
from
"
@converse/headless/converse-core
"
;
import
tpl_toolbar_omemo
from
"
templates/toolbar_omemo.html
"
;
const
{
Backbone
,
Strophe
,
dayjs
,
sizzle
,
$build
,
$iq
,
$msg
,
_
}
=
converse
.
env
;
const
{
Backbone
,
Strophe
,
sizzle
,
$build
,
$iq
,
$msg
,
_
}
=
converse
.
env
;
const
u
=
converse
.
env
.
utils
;
Strophe
.
addNamespace
(
'
OMEMO_DEVICELIST
'
,
Strophe
.
NS
.
OMEMO
+
"
.devicelist
"
);
...
...
@@ -22,7 +22,7 @@ Strophe.addNamespace('OMEMO_WHITELISTED', Strophe.NS.OMEMO+".whitelisted");
Strophe
.
addNamespace
(
'
OMEMO_BUNDLES
'
,
Strophe
.
NS
.
OMEMO
+
"
.bundles
"
);
const
UNDECIDED
=
0
;
const
TRUSTED
=
1
;
const
TRUSTED
=
1
;
// eslint-disable-line no-unused-vars
const
UNTRUSTED
=
-
1
;
const
TAG_LENGTH
=
128
;
const
KEY_ALGO
=
{
...
...
@@ -44,16 +44,13 @@ function parseBundle (bundle_el) {
/* Given an XML element representing a user's OMEMO bundle, parse it
* and return a map.
*/
const
signed_prekey_public_el
=
bundle_el
.
querySelector
(
'
signedPreKeyPublic
'
),
signed_prekey_signature_el
=
bundle_el
.
querySelector
(
'
signedPreKeySignature
'
),
identity_key_el
=
bundle_el
.
querySelector
(
'
identityKey
'
);
const
signed_prekey_public_el
=
bundle_el
.
querySelector
(
'
signedPreKeyPublic
'
);
const
signed_prekey_signature_el
=
bundle_el
.
querySelector
(
'
signedPreKeySignature
'
);
const
prekeys
=
sizzle
(
`prekeys > preKeyPublic`
,
bundle_el
)
.
map
(
el
=>
({
'
id
'
:
parseInt
(
el
.
getAttribute
(
'
preKeyId
'
),
10
),
'
key
'
:
el
.
textContent
}));
return
{
'
identity_key
'
:
bundle_el
.
querySelector
(
'
identityKey
'
).
textContent
.
trim
(),
'
signed_prekey
'
:
{
...
...
@@ -693,7 +690,7 @@ converse.plugins.add('converse-omemo', {
return
Promise
.
resolve
(
parseInt
(
this
.
get
(
'
device_id
'
),
10
));
},
isTrustedIdentity
(
identifier
,
identity_key
,
direction
)
{
isTrustedIdentity
(
identifier
,
identity_key
,
direction
)
{
// eslint-disable-line no-unused-vars
if
(
identifier
===
null
||
identifier
===
undefined
)
{
throw
new
Error
(
"
Can't check identity key for invalid key
"
);
}
...
...
@@ -761,7 +758,7 @@ converse.plugins.add('converse-omemo', {
return
Promise
.
resolve
();
},
loadSignedPreKey
(
keyId
)
{
loadSignedPreKey
(
keyId
)
{
// eslint-disable-line no-unused-vars
const
res
=
this
.
get
(
'
signed_prekey
'
);
if
(
res
)
{
return
Promise
.
resolve
({
...
...
@@ -1263,7 +1260,7 @@ converse.plugins.add('converse-omemo', {
_converse
.
generateFingerprints
(
jid
).
catch
(
e
=>
_converse
.
log
(
e
,
Strophe
.
LogLevel
.
ERROR
));
});
_converse
.
api
.
listen
.
on
(
'
profileModalInitialized
'
,
(
contact
)
=>
{
_converse
.
api
.
listen
.
on
(
'
profileModalInitialized
'
,
()
=>
{
_converse
.
generateFingerprints
(
_converse
.
bare_jid
).
catch
(
e
=>
_converse
.
log
(
e
,
Strophe
.
LogLevel
.
ERROR
));
});
...
...
src/converse-profile.js
View file @
8780f7a1
...
...
@@ -9,16 +9,15 @@
*/
import
"
@converse/headless/converse-vcard
"
;
import
"
converse-modal
"
;
import
_FormData
from
"
formdata-polyfill
"
;
import
"
formdata-polyfill
"
;
import
bootstrap
from
"
bootstrap.native
"
;
import
converse
from
"
@converse/headless/converse-core
"
;
import
tpl_chat_status_modal
from
"
templates/chat_status_modal.html
"
;
import
tpl_client_info_modal
from
"
templates/client_info_modal.html
"
;
import
tpl_profile_modal
from
"
templates/profile_modal.html
"
;
import
tpl_profile_view
from
"
templates/profile_view.html
"
;
import
tpl_status_option
from
"
templates/status_option.html
"
;
const
{
Strophe
,
Backbone
,
utils
,
_
,
dayjs
,
sizzle
}
=
converse
.
env
;
const
{
Strophe
,
sizzle
}
=
converse
.
env
;
const
u
=
converse
.
env
.
utils
;
...
...
@@ -61,7 +60,6 @@ converse.plugins.add('converse-profile', {
return
tpl_profile_modal
(
Object
.
assign
(
this
.
model
.
toJSON
(),
this
.
model
.
vcard
.
toJSON
(),
{
'
_
'
:
_
,
'
__
'
:
__
,
'
_converse
'
:
_converse
,
'
alt_avatar
'
:
__
(
'
Your avatar image
'
),
...
...
src/converse-push.js
View file @
8780f7a1
...
...
@@ -22,8 +22,7 @@ converse.plugins.add('converse-push', {
/* The initialize function gets called as soon as the plugin is
* loaded by converse.js's plugin machinery.
*/
const
{
_converse
}
=
this
,
{
__
}
=
_converse
;
const
{
_converse
}
=
this
;
_converse
.
api
.
settings
.
update
({
'
push_app_servers
'
:
[],
...
...
src/converse-register.js
View file @
8780f7a1
...
...
@@ -45,7 +45,7 @@ converse.plugins.add('converse-register', {
// New functions which don't exist yet can also be added.
LoginPanel
:
{
render
(
cfg
)
{
render
()
{
const
{
_converse
}
=
this
.
__super__
;
this
.
__super__
.
render
.
apply
(
this
,
arguments
);
if
(
_converse
.
allow_registration
&&
!
_converse
.
auto_login
)
{
...
...
@@ -107,7 +107,6 @@ converse.plugins.add('converse-register', {
Object
.
assign
(
_converse
.
ControlBoxView
.
prototype
,
{
showLoginOrRegisterForm
()
{
const
{
_converse
}
=
this
.
__super__
;
if
(
!
this
.
registerpanel
)
{
return
;
}
...
...
@@ -173,7 +172,7 @@ converse.plugins.add('converse-register', {
'
click .button-cancel
'
:
'
renderProviderChoiceForm
'
,
},
initialize
(
cfg
)
{
initialize
()
{
this
.
reset
();
this
.
registerHooks
();
},
...
...
src/converse-roomslist.js
View file @
8780f7a1
...
...
@@ -9,14 +9,14 @@
* Converse.js plugin which shows a list of currently open
* rooms in the "Rooms Panel" of the ControlBox.
*/
import
"
@converse/headless/converse-muc
"
;
import
BrowserStorage
from
"
backbone.browserStorage
"
;
import
{
OrderedListView
}
from
"
backbone.overview
"
;
import
converse
from
"
@converse/headless/converse-core
"
;
import
muc
from
"
@converse/headless/converse-muc
"
;
import
tpl_rooms_list
from
"
templates/rooms_list.html
"
;
import
tpl_rooms_list_item
from
"
templates/rooms_list_item.html
"
const
{
Backbone
,
Strophe
,
sizzle
,
_
}
=
converse
.
env
;
const
{
Backbone
,
Strophe
,
}
=
converse
.
env
;
const
u
=
converse
.
env
.
utils
;
...
...
@@ -51,7 +51,7 @@ converse.plugins.add('converse-roomslist', {
comparator
(
room
)
{
if
(
_converse
.
bookmarks
&&
room
.
get
(
'
bookmarked
'
))
{
const
bookmark
=
_
.
head
(
_converse
.
bookmarks
.
where
({
'
jid
'
:
room
.
get
(
'
jid
'
)})
);
const
bookmark
=
_
converse
.
bookmarks
.
findWhere
({
'
jid
'
:
room
.
get
(
'
jid
'
)}
);
return
bookmark
.
get
(
'
name
'
);
}
else
{
return
room
.
get
(
'
name
'
);
...
...
@@ -236,7 +236,7 @@ converse.plugins.add('converse-roomslist', {
}
},
showOrHide
(
item
)
{
showOrHide
()
{
if
(
!
this
.
model
.
models
.
length
)
{
u
.
hideElement
(
this
.
el
);
}
else
{
...
...
src/converse-rosterview.js
View file @
8780f7a1
...
...
@@ -9,10 +9,10 @@
import
"
@converse/headless/converse-chatboxes
"
;
import
"
@converse/headless/converse-roster
"
;
import
"
converse-modal
"
;
import
"
formdata-polyfill
"
;
import
BrowserStorage
from
"
backbone.browserStorage
"
;
import
{
OrderedListView
}
from
"
backbone.overview
"
;
import
SHA1
from
'
strophe.js/src/sha1
'
;
import
_FormData
from
"
formdata-polyfill
"
;
import
converse
from
"
@converse/headless/converse-core
"
;
import
tpl_add_contact_modal
from
"
templates/add_contact_modal.html
"
;
import
tpl_group_header
from
"
templates/group_header.html
"
;
...
...
@@ -21,9 +21,8 @@ import tpl_requesting_contact from "templates/requesting_contact.html";
import
tpl_roster
from
"
templates/roster.html
"
;
import
tpl_roster_filter
from
"
templates/roster_filter.html
"
;
import
tpl_roster_item
from
"
templates/roster_item.html
"
;
import
tpl_search_contact
from
"
templates/search_contact.html
"
;
const
{
Backbone
,
Strophe
,
$iq
,
sizzle
,
_
}
=
converse
.
env
;
const
{
Backbone
,
Strophe
,
_
}
=
converse
.
env
;
const
u
=
converse
.
env
.
utils
;
...
...
@@ -58,7 +57,6 @@ converse.plugins.add('converse-rosterview', {
'
xa
'
:
__
(
'
This contact is away for an extended period
'
),
'
away
'
:
__
(
'
This contact is away
'
)
};
const
LABEL_GROUPS
=
__
(
'
Groups
'
);
_converse
.
AddContactModal
=
_converse
.
BootstrapModal
.
extend
({
...
...
@@ -266,7 +264,7 @@ converse.plugins.add('converse-rosterview', {
}
},
liveFilter
:
_
.
debounce
(
function
(
ev
)
{
liveFilter
:
_
.
debounce
(
function
()
{
this
.
model
.
save
({
'
filter_text
'
:
this
.
el
.
querySelector
(
'
.roster-filter
'
).
value
});
...
...
@@ -496,9 +494,8 @@ converse.plugins.add('converse-rosterview', {
if
(
!
_converse
.
allow_contact_removal
)
{
return
;
}
if
(
!
confirm
(
__
(
"
Are you sure you want to remove this contact?
"
)))
{
return
;
}
let
iq
;
try
{
iq
=
await
this
.
model
.
removeFromRoster
();
await
this
.
model
.
removeFromRoster
();
this
.
remove
();
if
(
this
.
model
.
collection
)
{
// The model might have already been removed as
...
...
@@ -605,7 +602,6 @@ converse.plugins.add('converse-rosterview', {
* title.
*/
let
shown
=
0
;
const
all_contact_views
=
this
.
getAll
();
this
.
model
.
contacts
.
forEach
(
contact
=>
{
const
contact_view
=
this
.
get
(
contact
.
get
(
'
id
'
));
if
(
_
.
includes
(
contacts
,
contact
))
{
...
...
src/converse-singleton.js
View file @
8780f7a1
...
...
@@ -10,9 +10,6 @@
*/
import
converse
from
"
@converse/headless/converse-core
"
;
const
{
_
,
Strophe
}
=
converse
.
env
;
const
u
=
converse
.
env
.
utils
;
converse
.
plugins
.
add
(
'
converse-singleton
'
,
{
...
...
@@ -31,7 +28,7 @@ converse.plugins.add('converse-singleton', {
'
hide_muc_server
'
:
true
});
const
{
_converse
}
=
this
;
if
(
!
_
.
isArray
(
_converse
.
auto_join_rooms
)
&&
!
_
.
isArray
(
_converse
.
auto_join_private_chats
))
{
if
(
!
Array
.
isArray
(
_converse
.
auto_join_rooms
)
&&
!
Array
.
isArray
(
_converse
.
auto_join_private_chats
))
{
throw
new
Error
(
"
converse-singleton: auto_join_rooms must be an Array
"
);
}
if
(
_converse
.
auto_join_rooms
.
length
>
1
||
_converse
.
auto_join_private_chats
.
length
>
1
)
{
...
...
src/converse-uniview.js
View file @
8780f7a1
...
...
@@ -16,7 +16,6 @@
import
"
converse-chatview
"
;
import
converse
from
"
@converse/headless/converse-core
"
;
const
{
_
,
Strophe
}
=
converse
.
env
;
const
u
=
converse
.
env
.
utils
;
...
...
src/headless/converse-bosh.js
View file @
8780f7a1
...
...
@@ -12,7 +12,7 @@ import 'strophe.js/src/bosh';
import
BrowserStorage
from
"
backbone.browserStorage
"
;
import
converse
from
"
./converse-core
"
;
const
{
Backbone
,
Strophe
,
_
}
=
converse
.
env
;
const
{
Backbone
,
Strophe
}
=
converse
.
env
;
const
BOSH_SESSION_ID
=
'
converse.bosh-session
'
;
...
...
src/headless/converse-chatboxes.js
View file @
8780f7a1
...
...
@@ -13,7 +13,7 @@ import BrowserStorage from "backbone.browserStorage";
import
converse
from
"
./converse-core
"
;
import
filesize
from
"
filesize
"
;
const
{
$msg
,
Backbone
,
Strophe
,
dayjs
,
sizzle
,
utils
,
_
}
=
converse
.
env
;
const
{
$msg
,
Backbone
,
Strophe
,
dayjs
,
sizzle
,
utils
}
=
converse
.
env
;
const
u
=
converse
.
env
.
utils
;
Strophe
.
addNamespace
(
'
MESSAGE_CORRECT
'
,
'
urn:xmpp:message-correct:0
'
);
...
...
@@ -404,7 +404,7 @@ converse.plugins.add('converse-chatboxes', {
this
.
announceReconnection
();
},
validate
(
attrs
,
options
)
{
validate
(
attrs
)
{
if
(
!
attrs
.
jid
)
{
return
'
Ignored ChatBox without JID
'
;
}
...
...
@@ -453,7 +453,7 @@ converse.plugins.add('converse-chatboxes', {
}
},
getUpdatedMessageAttributes
(
message
,
stanza
)
{
getUpdatedMessageAttributes
(
message
,
stanza
)
{
// eslint-disable-line no-unused-vars
// Overridden in converse-muc and converse-mam
return
{};
},
...
...
@@ -673,7 +673,7 @@ converse.plugins.add('converse-chatboxes', {
_converse
.
api
.
send
(
receipt_stanza
);
},
handleReceipt
(
stanza
,
from_jid
,
is_carbon
,
is_me
,
is_mam
)
{
handleReceipt
(
stanza
,
from_jid
,
is_carbon
,
is_me
)
{
const
requests_receipt
=
sizzle
(
`request[xmlns="
${
Strophe
.
NS
.
RECEIPTS
}
"]`
,
stanza
).
pop
()
!==
undefined
;
if
(
requests_receipt
&&
!
is_carbon
&&
!
is_me
)
{
this
.
sendReceiptStanza
(
from_jid
,
stanza
.
getAttribute
(
'
id
'
));
...
...
@@ -1287,7 +1287,7 @@ converse.plugins.add('converse-chatboxes', {
chatbox
.
updateMessage
(
message
,
original_stanza
);
}
if
(
!
message
&&
!
chatbox
.
handleReceipt
(
stanza
,
from_jid
,
is_carbon
,
is_me
,
is_mam
)
&&
!
chatbox
.
handleReceipt
(
stanza
,
from_jid
,
is_carbon
,
is_me
)
&&
!
chatbox
.
handleChatMarker
(
stanza
,
from_jid
,
is_carbon
,
is_roster_contact
,
is_mam
))
{
const
attrs
=
await
chatbox
.
getMessageAttributesFromStanza
(
stanza
,
original_stanza
);
...
...
src/headless/converse-core.js
View file @
8780f7a1
...
...
@@ -7,6 +7,7 @@
* @module converse-core
*/
import
'
strophe.js/src/websocket
'
;
import
'
./polyfill
'
;
import
*
as
strophe
from
'
strophe.js/src/core
'
;
import
Backbone
from
'
backbone
'
;
import
BrowserStorage
from
'
backbone.browserStorage
'
;
...
...
@@ -15,7 +16,6 @@ import advancedFormat from 'dayjs/plugin/advancedFormat';
import
dayjs
from
'
dayjs
'
;
import
i18n
from
'
./i18n
'
;
import
pluggable
from
'
pluggable.js/src/pluggable
'
;
import
polyfill
from
'
./polyfill
'
;
import
sizzle
from
'
sizzle
'
;
import
u
from
'
@converse/headless/utils/core
'
;
...
...
src/headless/converse-emoji.js
View file @
8780f7a1
...
...
@@ -10,7 +10,7 @@ import * as twemoji from "twemoji";
import
_
from
"
./lodash.noconflict
"
;
import
converse
from
"
./converse-core
"
;
const
{
Backbone
,
Strophe
}
=
converse
.
env
;
const
{
Backbone
,
}
=
converse
.
env
;
const
u
=
converse
.
env
.
utils
;
const
ASCII_LIST
=
{
...
...
@@ -253,7 +253,7 @@ converse.plugins.add('converse-emoji', {
*/
getEmojiRenderer
()
{
const
how
=
{
'
attributes
'
:
(
icon
,
variant
)
=>
{
'
attributes
'
:
(
icon
)
=>
{
const
codepoint
=
twemoji
.
default
.
convert
.
toCodePoint
(
icon
);
return
{
'
title
'
:
`
${
u
.
getEmojisByAtrribute
(
'
cp
'
)[
codepoint
][
'
sn
'
]}
${
icon
}
`
}
}
...
...
src/headless/converse-mam.js
View file @
8780f7a1
...
...
@@ -15,7 +15,7 @@ import { intersection, pick } from 'lodash'
import
converse
from
"
./converse-core
"
;
import
sizzle
from
"
sizzle
"
;
const
{
Strophe
,
$iq
,
$build
,
dayjs
}
=
converse
.
env
;
const
{
Strophe
,
$iq
,
dayjs
}
=
converse
.
env
;
const
u
=
converse
.
env
.
utils
;
// XEP-0313 Message Archive Management
...
...
src/headless/converse-muc.js
View file @
8780f7a1
...
...
@@ -263,7 +263,7 @@ converse.plugins.add('converse-muc', {
}
},
onOccupantRemoved
(
occupant
)
{
onOccupantRemoved
()
{
this
.
stopListening
(
this
.
occupant
);
delete
this
.
occupant
;
const
chatbox
=
_
.
get
(
this
,
'
collection.chatbox
'
);
...
...
@@ -484,7 +484,6 @@ converse.plugins.add('converse-muc', {
},
initFeatures
()
{
const
storage
=
_converse
.
config
.
get
(
'
storage
'
);
const
id
=
`converse.muc-features-
${
_converse
.
bare_jid
}
-
${
this
.
get
(
'
jid
'
)}
`
;
this
.
features
=
new
Backbone
.
Model
(
_
.
assign
({
id
},
_
.
zipObject
(
converse
.
ROOM_FEATURES
,
converse
.
ROOM_FEATURES
.
map
(
_
.
stubFalse
)))
...
...
@@ -1176,7 +1175,6 @@ converse.plugins.add('converse-muc', {
async
updateMemberLists
(
members
)
{
const
all_affiliations
=
[
'
member
'
,
'
admin
'
,
'
owner
'
];
const
aff_lists
=
await
Promise
.
all
(
all_affiliations
.
map
(
a
=>
this
.
getAffiliationList
(
a
)));
const
known_affiliations
=
all_affiliations
.
filter
(
a
=>
!
u
.
isErrorObject
(
aff_lists
[
all_affiliations
.
indexOf
(
a
)]));
const
old_members
=
aff_lists
.
reduce
((
acc
,
val
)
=>
(
u
.
isErrorObject
(
val
)
?
acc
:
[...
val
,
...
acc
]),
[]);
await
this
.
setAffiliations
(
u
.
computeAffiliationsDelta
(
true
,
false
,
members
,
old_members
));
if
(
_converse
.
muc_fetch_members
)
{
...
...
@@ -2329,9 +2327,9 @@ converse.plugins.add('converse-muc', {
attrs
.
nick
=
Strophe
.
getNodeFromJid
(
_converse
.
bare_jid
);
}
if
(
_
.
isString
(
jids
))
{
return
getChatRoom
(
jids
,
attrs
);
return
getChatRoom
(
jids
,
attrs
,
create
);
}
return
jids
.
map
(
jid
=>
getChatRoom
(
jid
,
attrs
));
return
jids
.
map
(
jid
=>
getChatRoom
(
jid
,
attrs
,
create
));
}
}
});
...
...
src/headless/converse-ping.js
View file @
8780f7a1
...
...
@@ -10,7 +10,7 @@
* as specified in XEP-0199 XMPP Ping.
*/
import
converse
from
"
./converse-core
"
;
const
{
Strophe
,
$iq
,
_
}
=
converse
.
env
;
const
{
Strophe
,
$iq
}
=
converse
.
env
;
const
u
=
converse
.
env
.
utils
;
Strophe
.
addNamespace
(
'
PING
'
,
"
urn:xmpp:ping
"
);
...
...
src/headless/converse-pubsub.js
View file @
8780f7a1
...
...
@@ -9,7 +9,7 @@
import
"
./converse-disco
"
;
import
converse
from
"
./converse-core
"
;
const
{
Strophe
,
Backbone
,
$iq
,
$build
,
$msg
,
$pres
,
dayjs
,
_
}
=
converse
.
env
;
const
{
Strophe
,
$iq
}
=
converse
.
env
;
Strophe
.
addNamespace
(
'
PUBSUB_ERROR
'
,
Strophe
.
NS
.
PUBSUB
+
"
#errors
"
);
...
...
@@ -22,8 +22,7 @@ converse.plugins.add('converse-pubsub', {
/* The initialize function gets called as soon as the plugin is
* loaded by converse.js's plugin machinery.
*/
const
{
_converse
}
=
this
,
{
__
}
=
_converse
;
const
{
_converse
}
=
this
;
/************************ BEGIN API ************************/
...
...
src/headless/converse-smacks.js
View file @
8780f7a1
...
...
@@ -11,9 +11,10 @@
*/
import
converse
from
"
./converse-core
"
;
const
{
Strophe
,
$build
,
_
}
=
converse
.
env
;
const
{
Strophe
,
}
=
converse
.
env
;
const
u
=
converse
.
env
.
utils
;
Strophe
.
addNamespace
(
'
SM
'
,
'
urn:xmpp:sm:3
'
);
...
...
@@ -159,7 +160,7 @@ converse.plugins.add('converse-smacks', {
stanzas
.
forEach
(
s
=>
_converse
.
api
.
send
(
s
));
}
function
onResumedStanza
(
el
,
resolve
)
{
function
onResumedStanza
(
el
)
{
saveSessionData
(
el
);
handleAck
(
el
);
resendUnackedStanzas
();
...
...
@@ -171,8 +172,8 @@ converse.plugins.add('converse-smacks', {
async
function
sendResumeStanza
()
{
const
promise
=
u
.
getResolveablePromise
();
_converse
.
connection
.
_addSysHandler
(
_
.
flow
(
onResumedStanza
,
promise
.
resolve
),
Strophe
.
NS
.
SM
,
'
resumed
'
);
_converse
.
connection
.
_addSysHandler
(
_
.
flow
(
onFailedStanza
,
promise
.
resolve
),
Strophe
.
NS
.
SM
,
'
failed
'
);
_converse
.
connection
.
_addSysHandler
(
el
=>
promise
.
resolve
(
onResumedStanza
(
el
)
),
Strophe
.
NS
.
SM
,
'
resumed
'
);
_converse
.
connection
.
_addSysHandler
(
el
=>
promise
.
resolve
(
onFailedStanza
(
el
)
),
Strophe
.
NS
.
SM
,
'
failed
'
);
const
previous_id
=
_converse
.
session
.
get
(
'
smacks_stream_id
'
);
const
h
=
_converse
.
session
.
get
(
'
num_stanzas_handled
'
);
...
...
@@ -188,8 +189,8 @@ converse.plugins.add('converse-smacks', {
}
if
(
await
isStreamManagementSupported
())
{
const
promise
=
u
.
getResolveablePromise
();
_converse
.
connection
.
_addSysHandler
(
_
.
flow
(
saveSessionData
,
promise
.
resolve
),
Strophe
.
NS
.
SM
,
'
enabled
'
);
_converse
.
connection
.
_addSysHandler
(
_
.
flow
(
onFailedStanza
,
promise
.
resolve
),
Strophe
.
NS
.
SM
,
'
failed
'
);
_converse
.
connection
.
_addSysHandler
(
el
=>
promise
.
resolve
(
saveSessionData
(
el
)
),
Strophe
.
NS
.
SM
,
'
enabled
'
);
_converse
.
connection
.
_addSysHandler
(
el
=>
promise
.
resolve
(
onFailedStanza
(
el
)
),
Strophe
.
NS
.
SM
,
'
failed
'
);
const
resume
=
(
_converse
.
api
.
connection
.
isType
(
'
websocket
'
)
||
_converse
.
isTestEnv
());
const
stanza
=
u
.
toStanza
(
`<enable xmlns="
${
Strophe
.
NS
.
SM
}
" resume="
${
resume
}
"/>`
);
...
...
src/headless/converse-vcard.js
View file @
8780f7a1
...
...
@@ -10,7 +10,7 @@ import BrowserStorage from "backbone.browserStorage";
import
converse
from
"
./converse-core
"
;
import
tpl_vcard
from
"
./templates/vcard.html
"
;
const
{
Backbone
,
Strophe
,
_
,
$iq
,
$build
,
dayjs
,
sizzle
}
=
converse
.
env
;
const
{
Backbone
,
Strophe
,
_
,
$iq
,
dayjs
,
}
=
converse
.
env
;
const
u
=
converse
.
env
.
utils
;
...
...
src/headless/i18n.js
View file @
8780f7a1
...
...
@@ -6,12 +6,9 @@
// Copyright (c) 2013-2017, Jan-Carel Brand <jc@opkode.com>
// Licensed under the Mozilla Public License (MPLv2)
//
import
*
as
strophe
from
'
strophe.js/src/core
'
;
import
Jed
from
"
jed
"
;
import
dayjs
from
"
dayjs
"
;
const
Strophe
=
strophe
.
default
.
Strophe
;
function
detectLocale
(
library_check
)
{
/* Determine which locale is supported by the user's system as well
...
...
src/headless/utils/core.js
View file @
8780f7a1
...
...
@@ -497,7 +497,6 @@ u.getSelectValues = function (select) {
u
.
formatFingerprint
=
function
(
fp
)
{
fp
=
fp
.
replace
(
/^05/
,
''
);
const
arr
=
[];
for
(
let
i
=
1
;
i
<
8
;
i
++
)
{
const
idx
=
i
*
8
+
i
-
1
;
fp
=
fp
.
slice
(
0
,
idx
)
+
'
'
+
fp
.
slice
(
idx
);
...
...
src/headless/utils/muc.js
View file @
8780f7a1
...
...
@@ -6,7 +6,6 @@
// Copyright (c) 2013-2019, Jan-Carel Brand <jc@opkode.com>
// Licensed under the Mozilla Public License (MPLv2)
//
/*global Jed */
import
converse
from
"
@converse/headless/converse-core
"
;
import
u
from
"
./core
"
;
...
...
src/templates/profile_modal.html
View file @
8780f7a1
...
...
@@ -91,7 +91,7 @@
{{{o.__('Other OMEMO-enabled devices')}}}
</label>
</li>
{[ o.
_.forEach(o.view.other_devices,
function (device) { ]}
{[ o.
view.other_devices.forEach(
function (device) { ]}
{[ if (device.get('bundle')
&&
device.get('bundle').fingerprint) { ]}
<li
class=
"fingerprint-removal-item list-group-item nopadding"
>
<label>
...
...
src/utils/html.js
View file @
8780f7a1
...
...
@@ -10,7 +10,6 @@ import URI from "urijs";
import
_
from
"
../headless/lodash.noconflict
"
;
import
sizzle
from
"
sizzle
"
;
import
tpl_audio
from
"
../templates/audio.html
"
;
import
tpl_field
from
"
@converse/headless/templates/field.html
"
;
import
tpl_file
from
"
../templates/file.html
"
;
import
tpl_form_captcha
from
"
../templates/form_captcha.html
"
;
import
tpl_form_checkbox
from
"
../templates/form_checkbox.html
"
;
...
...
@@ -172,7 +171,7 @@ u.renderImageURLs = function (_converse, el) {
const
list
=
el
.
textContent
.
match
(
URL_REGEX
)
||
[];
return
Promise
.
all
(
list
.
map
(
url
=>
new
Promise
((
resolve
,
reject
)
=>
{
new
Promise
((
resolve
)
=>
{
if
(
u
.
isImageURL
(
url
))
{
return
isImage
(
url
).
then
(
img
=>
{
const
i
=
new
Image
();
...
...
@@ -290,8 +289,12 @@ u.ancestor = function (el, selector) {
return
parent
;
}
u
.
nextUntil
=
function
(
el
,
selector
,
include_self
=
false
)
{
/* Return the element's siblings until one matches the selector. */
/**
* Return the element's siblings until one matches the selector.
* @private
* @method u#nextUntil
*/
u
.
nextUntil
=
function
(
el
,
selector
)
{
const
matches
=
[];
let
sibling_el
=
el
.
nextElementSibling
;
while
(
sibling_el
!==
null
&&
!
sibling_el
.
matches
(
selector
))
{
...
...
src/website.js
View file @
8780f7a1
(
function
()
{
document
.
addEventListener
(
"
DOMContentLoaded
"
,
function
(
event
)
{
document
.
addEventListener
(
"
DOMContentLoaded
"
,
function
()
{
window
.
addEventListener
(
'
scroll
'
,
function
(
ev
)
{
window
.
addEventListener
(
'
scroll
'
,
function
()
{
var
navbar
=
document
.
querySelector
(
"
.navbar
"
);
var
rect
=
navbar
.
getBoundingClientRect
();
if
(
rect
.
top
+
window
.
scrollY
>
50
)
{
...
...
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