Compare commits
2301 Commits
v5.0.0
...
main-chapr
Author | SHA1 | Date | |
---|---|---|---|
a461444bed | |||
1307f87912 | |||
23cf858a02 | |||
b49146b36f | |||
8d67dce865 | |||
543807aa50 | |||
|
82a8c3f9fc | ||
|
3e680e88d8 | ||
|
005f5374f0 | ||
|
79bb8e76ce | ||
|
61192f91d9 | ||
|
e31d4c7bac | ||
|
c30569dfd3 | ||
|
5e02b9bd5d | ||
|
9114db8764 | ||
|
bc7621c25d | ||
|
ae518aa2c3 | ||
|
e4a4b2819c | ||
|
5310021b67 | ||
|
e18fdd56b1 | ||
|
94963662e7 | ||
|
4f14d50f5d | ||
|
699ab71f21 | ||
|
daeb641530 | ||
|
6e71555ee4 | ||
|
27d61411ab | ||
|
3328e1c94c | ||
|
c63c787a6d | ||
|
0efeead71a | ||
|
5822fade32 | ||
|
621612d126 | ||
|
536350155d | ||
|
841a57fd66 | ||
|
175595098a | ||
|
03655b45b2 | ||
|
fa9ae16ead | ||
|
cb1f929045 | ||
|
9ba339a6d9 | ||
|
bc452596a7 | ||
|
2b732cdb94 | ||
|
1e4937bf41 | ||
|
8b28ffecfe | ||
|
80bf81db6f | ||
|
7fdbcd0e64 | ||
|
975a2c2305 | ||
|
abad4d054b | ||
|
b5b6d1f8b2 | ||
|
64aef7f70d | ||
|
4f0f210e21 | ||
|
c4299e92be | ||
|
0cc03e7e7a | ||
|
f9f246282b | ||
|
3e4a8b23fe | ||
|
cdda140137 | ||
|
0a15b003dc | ||
|
23539ecf47 | ||
|
efa448956e | ||
|
743f336dc5 | ||
|
8a0386fdcc | ||
|
b647f5463f | ||
|
46f2e40f91 | ||
|
8b1b4b6446 | ||
|
9407d00c67 | ||
|
f0d584aed6 | ||
|
2768c2a3ec | ||
|
8fb1716681 | ||
|
507cfa9ef2 | ||
|
5ef7807a68 | ||
|
952d3cf440 | ||
|
c9a95faa35 | ||
|
02185cee5f | ||
|
40290f27e7 | ||
|
bbfcb74eaa | ||
|
a2e618a8f6 | ||
|
ebbb39a9aa | ||
|
2d66a974d0 | ||
|
fa12dae7bc | ||
|
df25e16438 | ||
|
c39d61f62c | ||
|
01ce344d82 | ||
|
bb428fa1d7 | ||
|
5a710e4601 | ||
|
f91f4cb7ab | ||
|
f2ac748e06 | ||
|
27a47c6ee8 | ||
|
0a338feb40 | ||
|
d74daccfbb | ||
|
5c3acc8a4d | ||
|
48e7987f38 | ||
|
4d2a8e9f8d | ||
|
3d0e9a7374 | ||
|
fb054c40be | ||
|
c3c666e568 | ||
|
6b365458f5 | ||
|
885a3d92b5 | ||
|
6df80507f3 | ||
|
16754c15aa | ||
|
70a10efd49 | ||
|
9a63629b40 | ||
|
dcfc0d50f4 | ||
|
fde55bea2c | ||
|
3530ccc35d | ||
|
05c5cd1046 | ||
|
c38c706079 | ||
|
e1e93c2ec9 | ||
|
16b442ac19 | ||
|
0122bd7bab | ||
|
56259fd22e | ||
|
85181053e6 | ||
|
26062df4e5 | ||
|
2fb9fec8f8 | ||
|
d4cb67dc5f | ||
|
ad7b4ae343 | ||
|
57f489f61b | ||
|
6ce8879e9c | ||
|
1ee4cce2fd | ||
|
b69e5b5482 | ||
|
3f6ad0d950 | ||
|
9899351597 | ||
|
0b3bcbfe40 | ||
|
5e3139f563 | ||
|
7b8b32638c | ||
|
8035084e8e | ||
|
19466ddf62 | ||
|
bb7ed5315f | ||
|
6719aeba45 | ||
|
45844447bf | ||
|
82314eb1df | ||
|
d9c86ed575 | ||
|
89d231a5dd | ||
|
72406b4aac | ||
|
e08b58c3d3 | ||
|
387c992381 | ||
|
4e98383e65 | ||
|
dae84028c2 | ||
|
5e5bdc78ec | ||
|
15c10376b0 | ||
|
ccc165facc | ||
|
aa299af3ec | ||
|
b16e3efbd4 | ||
|
5db3e8ca51 | ||
|
0fcdb2a594 | ||
|
5029d93523 | ||
|
bab11b682b | ||
|
9343488864 | ||
|
782c8c97fa | ||
|
d2f7756313 | ||
|
07371b0852 | ||
|
25aa0303c6 | ||
|
6186f05a3e | ||
|
dd4f1e6b85 | ||
|
366390935f | ||
|
7eb07fa02f | ||
|
fbe2e41de7 | ||
|
cfc2d93b9b | ||
|
12170461cd | ||
|
ab079036da | ||
|
8001cf3809 | ||
|
d93a47d246 | ||
|
76fb90319b | ||
|
9ca1114670 | ||
|
251784c21c | ||
|
8c3ce2892b | ||
|
6c44fb2a2f | ||
|
465aa38222 | ||
|
6fc83db9df | ||
|
a486fe25b8 | ||
|
87c172acd0 | ||
|
968ec8182c | ||
|
451ed18261 | ||
|
078936fb8a | ||
|
0227b2e06c | ||
|
44c22bb984 | ||
|
da12005420 | ||
|
de65409e79 | ||
|
9ab99a0859 | ||
|
77fdbb5aa2 | ||
|
a8f4bc4617 | ||
|
18cd864e09 | ||
|
192861f9c9 | ||
|
4a43b46432 | ||
|
95bf14385b | ||
|
0fe2df24ad | ||
|
5a368a9c0f | ||
|
73b9cbea13 | ||
|
2dee891c63 | ||
|
97b87bcdc1 | ||
|
c10f18ad1c | ||
|
4d687b022a | ||
|
53d562481e | ||
|
7539fc1a6f | ||
|
f740332e95 | ||
|
4abc9c45d3 | ||
|
756942d2bd | ||
|
fdcab413f5 | ||
|
3c6dd5d0ae | ||
|
3004d7bff5 | ||
|
6494b34da3 | ||
|
447fe8ba08 | ||
|
8ab0b718de | ||
|
97e5bb9b11 | ||
|
5f38a914b1 | ||
|
fa132567da | ||
|
5ea00b8008 | ||
|
a76393f216 | ||
|
739d79e90c | ||
|
e63ba2075f | ||
|
8ca265d8d5 | ||
|
78a7841afb | ||
|
4733e7f65f | ||
|
8c84e276ff | ||
|
a251608fc5 | ||
|
3af6168270 | ||
|
34c17a7662 | ||
|
87aba699f1 | ||
|
defe5cdcb0 | ||
|
038a38cae0 | ||
|
8aaf792c6c | ||
|
659a69e7b7 | ||
|
ec70d4bc56 | ||
|
b0b8a3f89d | ||
|
72be204f77 | ||
|
d5deed0871 | ||
|
040d5bae9d | ||
|
b2ad6e844c | ||
|
b4fb710d61 | ||
|
a5be19ad50 | ||
|
6250be89ed | ||
|
e355814da7 | ||
|
1ecffd61af | ||
|
d887ea4b7b | ||
|
b2943351a1 | ||
|
0b514fbc3e | ||
|
0d743d428f | ||
|
0b809049e2 | ||
|
8b64482fd4 | ||
|
996e47b275 | ||
|
c3ff3370bd | ||
|
83726f0821 | ||
|
1ef2c3b3d4 | ||
|
0af4b185ac | ||
|
a3a90a9be8 | ||
|
7861af7bf9 | ||
|
e90cf6453e | ||
|
dbd36a0d75 | ||
|
c6bc5e1438 | ||
|
cc6a20b3e6 | ||
|
40024f4599 | ||
|
18d8b69f00 | ||
|
62cd0afa37 | ||
|
eb9fd74c77 | ||
|
6c9f0400c8 | ||
|
210d4cb87d | ||
|
7b6301d7f3 | ||
|
63cc8411a5 | ||
|
21c41f9265 | ||
|
83351fb98f | ||
|
4531dd4363 | ||
|
31b10aa0b0 | ||
|
ef16a52ced | ||
|
1a8ae3dcbe | ||
|
34a4a70ae2 | ||
|
f791169f47 | ||
|
782de0165f | ||
|
e555469e3f | ||
|
b4eb6c0994 | ||
|
74cda3f4b4 | ||
|
aebd98cf0a | ||
|
983d5ea09c | ||
|
3720092c09 | ||
|
36cb7a644e | ||
|
6293efd8ee | ||
|
5760379e0a | ||
|
a4ee3085b7 | ||
|
bd60861c1e | ||
|
fbe86e5af8 | ||
|
927add0707 | ||
|
8378ce739b | ||
|
f9e6c3ff95 | ||
|
98ae55790d | ||
|
bb0ad432b2 | ||
|
55e3417df3 | ||
|
92f71bafb2 | ||
|
f1734dbb40 | ||
|
0489e0f902 | ||
|
0aa66fee99 | ||
|
ed1099490c | ||
|
a74bbd093f | ||
|
8ae4b6abd4 | ||
|
ca3c8fc10b | ||
|
e8b9681a15 | ||
|
51516e38f6 | ||
|
de72d6bae3 | ||
|
0d9561e666 | ||
|
97be0bd8ac | ||
|
7f99b24e28 | ||
|
17e5804be7 | ||
|
fd9e41a917 | ||
|
760f4f7dd1 | ||
|
5231262bda | ||
|
34927b5b77 | ||
|
7028286855 | ||
|
342c75775b | ||
|
f1cc8c85f4 | ||
|
c5588e3c49 | ||
|
3d19def3e7 | ||
|
53521c2236 | ||
|
22170450b4 | ||
|
f014db8b7a | ||
|
fe9345b7fc | ||
|
d2bdce51e8 | ||
|
cac92c3ebc | ||
|
603f8349e8 | ||
|
5f6e70289b | ||
|
c716551fc8 | ||
|
78634cdec3 | ||
|
45e989f048 | ||
|
0cfe2a18af | ||
|
71d1383604 | ||
|
0df1c1880e | ||
|
06a2aac022 | ||
|
d8ea42a845 | ||
|
085de8405f | ||
|
990aefc6cb | ||
|
eb29d962f5 | ||
|
605c02901a | ||
|
368bcf258f | ||
|
07efd601da | ||
|
4aab83c4af | ||
|
f05a41f6a5 | ||
|
4d9c0d3f9a | ||
|
35bdcf58cd | ||
|
3ca478da32 | ||
|
5d3da20bd9 | ||
|
a95c070c2b | ||
|
c14c2b3b59 | ||
|
b7e793df02 | ||
|
c245599e65 | ||
|
7e86c561c7 | ||
|
25891ef0ee | ||
|
ba7c6d7a50 | ||
|
7e2dd55c16 | ||
|
b8579ccc90 | ||
|
73a7b209ce | ||
|
8dc8b1d564 | ||
|
d2b4f2e0f6 | ||
|
320f11f795 | ||
|
4237e5b3ae | ||
|
8671afc4b1 | ||
|
6d39fae71a | ||
|
0316f073e0 | ||
|
1744dbc420 | ||
|
eb8ebea920 | ||
|
6c13cfaf30 | ||
|
a228cf244c | ||
|
3b124cfdce | ||
|
4c8bc187b2 | ||
|
1ad6de2dd6 | ||
|
795a9a7e3e | ||
|
87ecf061f1 | ||
|
858a6051ac | ||
|
52693bfc0b | ||
|
79063b9993 | ||
|
22840f8a50 | ||
|
92f74b888b | ||
|
ac241e5ed1 | ||
|
6573d080e4 | ||
|
12a0d0e3cc | ||
|
2a7bfd13b5 | ||
|
ab7e879261 | ||
|
a57853156e | ||
|
a3c0f90476 | ||
|
b5bcc05947 | ||
|
bd579d8613 | ||
|
0c02fbe4cf | ||
|
0b172be3d0 | ||
|
7e9861ba8f | ||
|
0c9fd691ac | ||
|
984386aa64 | ||
|
ae2bd63d8f | ||
|
5e27e27845 | ||
|
ca9d68b99e | ||
|
99c5d7a760 | ||
|
4b6626ee70 | ||
|
8ea9e8a5ad | ||
|
f929f8b7f9 | ||
|
ad8c250314 | ||
|
02146bdf22 | ||
|
dbc0028880 | ||
|
f27238b76f | ||
|
5adc39ebac | ||
|
53ccc4948f | ||
|
e48bd0dd4b | ||
|
cb6fc463aa | ||
|
3b4ef074b9 | ||
|
a3b5c58023 | ||
|
1f7fe4f48e | ||
|
e03d7bc71c | ||
|
828b6785b4 | ||
|
e06d335b7d | ||
|
55d02cb37b | ||
|
8e612e3cd9 | ||
|
0af72d41da | ||
|
ebd9474ac1 | ||
|
2172409fec | ||
|
d22c063ae5 | ||
|
b71a7ae2ac | ||
|
6c26c1397f | ||
|
a31f87f25b | ||
|
18ca225450 | ||
|
fe10f2203b | ||
|
3c2eda4a1d | ||
|
0a07cad2cb | ||
|
f93b30f7b3 | ||
|
35b2c247f3 | ||
|
1915d70c41 | ||
|
059795c0f3 | ||
|
0260e5f803 | ||
|
1b60697565 | ||
|
fb158e418b | ||
|
995cc51f99 | ||
|
760fa4ae63 | ||
|
d4382fda19 | ||
|
4c394c072e | ||
|
699326547a | ||
|
2a9a01bc32 | ||
|
ce22508344 | ||
|
230b72139a | ||
|
0b168e8439 | ||
|
e492885ac0 | ||
|
7cb86638b5 | ||
|
2d5b0753e2 | ||
|
8e1c3e47df | ||
|
99ae9a9850 | ||
|
7b31f4d333 | ||
|
8930201b99 | ||
|
ad11dce92f | ||
|
0c049dd364 | ||
|
ca0953e4bd | ||
|
a17e8bea1c | ||
|
b331405658 | ||
|
c3e3f89e52 | ||
|
f0297fe075 | ||
|
4d4e0ffc8d | ||
|
e202ac9964 | ||
|
5c5825fb75 | ||
|
e0e1fd4f02 | ||
|
5e4fa98577 | ||
|
7e18873bcd | ||
|
592d982210 | ||
|
9d4382c754 | ||
|
b1a448f1e9 | ||
|
af342456c5 | ||
|
5d3895078b | ||
|
0464381cac | ||
|
32a443408a | ||
|
b429484501 | ||
|
2fa1d00fb4 | ||
|
c590c4f4bb | ||
|
6b1845ff39 | ||
|
fb704fdf87 | ||
|
f6a985c24f | ||
|
44cd910154 | ||
|
f21fc90629 | ||
|
21fb57ecfd | ||
|
3bb645ce24 | ||
|
fd991846f4 | ||
|
523566c218 | ||
|
cd1c6a4d23 | ||
|
c3933426b9 | ||
|
be561addfa | ||
|
c379fe80fb | ||
|
5ef0f3ad5d | ||
|
d570b6095e | ||
|
fca275b7c9 | ||
|
e160ee2ed5 | ||
|
70aa22d12d | ||
|
fbfd6c3ac4 | ||
|
7355c2c5fe | ||
|
297869c59f | ||
|
defea1631c | ||
|
82fb263438 | ||
|
d2b9c954d9 | ||
|
f9a9d327d1 | ||
|
d2622f6fed | ||
|
731e98b07c | ||
|
89a3c81a19 | ||
|
2133241998 | ||
|
47b016599e | ||
|
e52056bb33 | ||
|
1c0ce25f12 | ||
|
c42bd90c9d | ||
|
7409668a5d | ||
|
d432bab73a | ||
|
9328db645d | ||
|
21d3159081 | ||
|
b7ad1eaade | ||
|
727bad01c7 | ||
|
b248803a4b | ||
|
a468a0fb24 | ||
|
c2ba8ecf97 | ||
|
7b63b7b30f | ||
|
ca20f687bf | ||
|
bbef09346a | ||
|
1c8085f00e | ||
|
beb220f188 | ||
|
20cd90855f | ||
|
39e9ed8fe4 | ||
|
22a7e1b35f | ||
|
9a95c2d048 | ||
|
9a2424fa26 | ||
|
b44e1c82f0 | ||
|
a07bd7c817 | ||
|
85d75a5494 | ||
|
a2c7e83812 | ||
|
7c7b667745 | ||
|
e1a919749f | ||
|
8dff87658f | ||
|
38519a6261 | ||
|
f6c524f760 | ||
|
94d29bc617 | ||
|
0fb4dcac96 | ||
|
caf8360745 | ||
|
ea63c9a17d | ||
|
6a293de86b | ||
|
5caa5aa9ae | ||
|
b8487cfaa6 | ||
|
203afea72b | ||
|
7f40d1a2f2 | ||
|
47f3109957 | ||
|
066d29d637 | ||
|
12a2354d9e | ||
|
d8f6a16936 | ||
|
8a9e0f6d23 | ||
|
f4fdc36d31 | ||
|
ba52defdae | ||
|
505416a59e | ||
|
9d250c3cbf | ||
|
46e6cfb0d4 | ||
|
3d8a583101 | ||
|
337638034f | ||
|
0f648ed1eb | ||
|
d3fa925bff | ||
|
cb0b1765f3 | ||
|
bef2cbb462 | ||
|
125f45c447 | ||
|
817b1200ca | ||
|
8dcacd41bf | ||
|
2e9f478c87 | ||
|
b13c674047 | ||
|
dd539c7675 | ||
|
4f89c4c10f | ||
|
818ad0955a | ||
|
ac473fd297 | ||
|
11bbbb4899 | ||
|
0d0ee294ad | ||
|
7c51147023 | ||
|
003a90c71c | ||
|
d06761e2a8 | ||
|
c83cc69cef | ||
|
351212cd13 | ||
|
93ec6e4e83 | ||
|
007b4bce2f | ||
|
46a5a64dda | ||
|
72eb9d9595 | ||
|
ba6da97416 | ||
|
fab83139f8 | ||
|
6cd05eab39 | ||
|
16626c80a7 | ||
|
c809141ee6 | ||
|
53df0f8942 | ||
|
17678f06f6 | ||
|
5da069d585 | ||
|
10264e1647 | ||
|
900bb11fb0 | ||
|
1b3ab06614 | ||
|
a20188e7a8 | ||
|
d55fc92c1c | ||
|
0a9444c41b | ||
|
7ebb35d80c | ||
|
cada8146b6 | ||
|
68bcf51ed8 | ||
|
ed089d0546 | ||
|
6ee3ddbc8c | ||
|
c3aafdf341 | ||
|
9411860f69 | ||
|
4dc78c3742 | ||
|
ee4ab47442 | ||
|
4bb4f932cf | ||
|
f25f110e0e | ||
|
e9ae5306e3 | ||
|
8ad097f23f | ||
|
048560908e | ||
|
0dee9897dd | ||
|
a673086941 | ||
|
b16d035975 | ||
|
ca9e13a047 | ||
|
dc66c3a101 | ||
|
47bab27f7b | ||
|
077162529d | ||
|
32bc8917ab | ||
|
b418db5643 | ||
|
1c247969b4 | ||
|
c178cbbcd8 | ||
|
d31f1ce317 | ||
|
209bea2fcc | ||
|
c820920b2c | ||
|
ed7efb2c61 | ||
|
801a21e049 | ||
|
a8a397d8b2 | ||
|
bdc7390eca | ||
|
0f99d4833e | ||
|
b96150a629 | ||
|
6001273c6f | ||
|
430f1f5a0e | ||
|
128079f2a4 | ||
|
8efafc7c25 | ||
|
20666a334e | ||
|
c81841e036 | ||
|
3d74ed31c2 | ||
|
1a6a7ade73 | ||
|
ee4e056125 | ||
|
e4da0f894d | ||
|
284eccf047 | ||
|
bad2577e5e | ||
|
9b1a7c70a3 | ||
|
a06d180827 | ||
|
2af758e66d | ||
|
fa562cabae | ||
|
07b2425ff9 | ||
|
d48d748e30 | ||
|
33f3cb76ad | ||
|
78846ab984 | ||
|
afbb46bd8c | ||
|
ed63902ac1 | ||
|
35947e3d62 | ||
|
bdac6f1b47 | ||
|
c76e6fb86b | ||
|
664f290001 | ||
|
c62ea03e2e | ||
|
8db12e61bf | ||
|
f36c3fefdd | ||
|
a5b73f0309 | ||
|
e347621dc8 | ||
|
1ee75b78b7 | ||
|
571cb3bac1 | ||
|
5dd0065936 | ||
|
ecfc3e9fcf | ||
|
a60127e66f | ||
|
93e1758a0b | ||
|
2fb8ea3ea0 | ||
|
1c6ada4af8 | ||
|
ca02bdcb61 | ||
|
90d93b364a | ||
|
6177afd5b1 | ||
|
5abec5bff0 | ||
|
ec792abbda | ||
|
6890da11ed | ||
|
1b31e80f25 | ||
|
d2a33bc210 | ||
|
3cfdf4c946 | ||
|
5a7f16b6f9 | ||
|
32e521fdc7 | ||
|
521f3d88d2 | ||
|
cf8522b1ef | ||
|
6cff47c6d8 | ||
|
366932e999 | ||
|
be2ded3b7e | ||
|
1809e38911 | ||
|
06ec539839 | ||
|
84c6a0039c | ||
|
5ff57258ec | ||
|
d4f6b040f3 | ||
|
1104b28758 | ||
|
881a9a6d27 | ||
|
48f37aa1c0 | ||
|
7f2ab05f97 | ||
|
de092f8f00 | ||
|
9e48fdc91c | ||
|
05dcb4e8d7 | ||
|
864e8910c4 | ||
|
efafc2d691 | ||
|
ed490fc202 | ||
|
ae6dbeb287 | ||
|
75fee76693 | ||
|
caffcaaef2 | ||
|
2b7624e622 | ||
|
ad501d4309 | ||
|
126fa1809e | ||
|
d44abbb48e | ||
|
40a49042e9 | ||
|
6b3f8a3f39 | ||
|
2c1d6e3ecb | ||
|
906a606010 | ||
|
ef2c206507 | ||
|
b78c19f6f2 | ||
|
8aa16ea0be | ||
|
8d01d7a710 | ||
|
660d765c59 | ||
|
8f34065fc0 | ||
|
f40a8f69ae | ||
|
0950555b49 | ||
|
286ab1ad83 | ||
|
90cac3ecae | ||
|
f04a376653 | ||
|
b75e67fafa | ||
|
8854f67c20 | ||
|
9b4ce0011e | ||
|
c03bc7d600 | ||
|
8f2f3e6498 | ||
|
730cb9c822 | ||
|
acbd6000fc | ||
|
e80a12a8a4 | ||
|
a21abae5f6 | ||
|
5095027a0b | ||
|
5dc89fb2b3 | ||
|
353a90788c | ||
|
90ea092e4d | ||
|
7e88ffd098 | ||
|
6827e21df1 | ||
|
b4d00f86a8 | ||
|
c4ccde1b4d | ||
|
0c0af2d00b | ||
|
6c3a3dd1d3 | ||
|
fc51257ee1 | ||
|
47b8337ff6 | ||
|
8d62c2b103 | ||
|
726dbddea7 | ||
|
88d778bdea | ||
|
9edab0729f | ||
|
9cef50323a | ||
|
df53282b6e | ||
|
b936824348 | ||
|
a0ff85d74e | ||
|
f739b9d37d | ||
|
8eac031047 | ||
|
edd3b681c5 | ||
|
82ade54caa | ||
|
610e334bed | ||
|
44a573b6c4 | ||
|
95fbd55a19 | ||
|
d0627f800c | ||
|
ac36407d1d | ||
|
ebfda5c86e | ||
|
106cde9262 | ||
|
7b4f8954b3 | ||
|
0242fdb020 | ||
|
10c610232c | ||
|
c961615609 | ||
|
55146820e3 | ||
|
0ccf25d986 | ||
|
316748988b | ||
|
7075c9feee | ||
|
5cce34eb40 | ||
|
60826ac6c6 | ||
|
8931c61876 | ||
|
d1abf3a04e | ||
|
2bdea0dd18 | ||
|
d2a35d4ce1 | ||
|
8de4671603 | ||
|
b22127a877 | ||
|
d7af120154 | ||
|
7bc70f728a | ||
|
664c3522a7 | ||
|
c209b9e2b9 | ||
|
2bcf01f5ab | ||
|
14e5e3b3a6 | ||
|
3c0a621b47 | ||
|
fe3650d766 | ||
|
46201613a6 | ||
|
f2aa39e1c3 | ||
|
b90a435833 | ||
|
bff714f24c | ||
|
06460507d4 | ||
|
01efb02f9e | ||
|
3d8852950d | ||
|
e675c853f3 | ||
|
27bc548552 | ||
|
424a0c43a3 | ||
|
6665bef76c | ||
|
dff5f485c9 | ||
|
4047d619a1 | ||
|
956a890b94 | ||
|
767d5ec91d | ||
|
335a491e0d | ||
|
3e9f028bf4 | ||
|
8506646db2 | ||
|
be329a2d10 | ||
|
73989e09a9 | ||
|
46f567d0d1 | ||
|
18f883545b | ||
|
7a22afa9ec | ||
|
524e14f464 | ||
|
7503de27c5 | ||
|
f4da817cb2 | ||
|
51e0237f5d | ||
|
14020125b9 | ||
|
0f82b76c09 | ||
|
4c6c774251 | ||
|
fe28b3e6af | ||
|
f9a2719507 | ||
|
0b00d4f9e1 | ||
|
aa80093665 | ||
|
778121010f | ||
|
a5c391a6a3 | ||
|
f846cb1b20 | ||
|
789d3438e3 | ||
|
f6de5247d6 | ||
|
c80d65cf60 | ||
|
cba44998b9 | ||
|
ba0ea6c2c4 | ||
|
7848d8cb2f | ||
|
2c0fbec43c | ||
|
c5de9dd9f1 | ||
|
92093d6d28 | ||
|
670f435c64 | ||
|
846dfd6762 | ||
|
e00bf3da36 | ||
|
9e21813251 | ||
|
3d3242c00d | ||
|
522998bade | ||
|
629f382642 | ||
|
ad96db994e | ||
|
958d98a1a1 | ||
|
fb6bafdf6c | ||
|
6dea5959cc | ||
|
afd737f965 | ||
|
8de6e78729 | ||
|
be8a47b672 | ||
|
cf11f2588c | ||
|
bb60f8cff4 | ||
|
42b15497fc | ||
|
f598b7d267 | ||
|
9349ba200e | ||
|
619fb538d7 | ||
|
095d9b60cd | ||
|
33b426c79e | ||
|
2ac49fb9a5 | ||
|
b071a0e22f | ||
|
b6f2662ad7 | ||
|
5ea9564cc3 | ||
|
85a651ae79 | ||
|
dc711d494f | ||
|
14f0ed43c5 | ||
|
6f318bc86d | ||
|
bbc952b265 | ||
|
1121a90af0 | ||
|
969b2f2e11 | ||
|
8907adc236 | ||
|
c8304497b5 | ||
|
68f0be996f | ||
|
9fb92080f2 | ||
|
ba1b712fee | ||
|
543cf9066a | ||
|
bccd4a81b8 | ||
|
17d9d2766d | ||
|
2bbb889196 | ||
|
ff1b6d3adf | ||
|
39d60f05c3 | ||
|
54d6a6af56 | ||
|
5b3d03bc63 | ||
|
878a3b49a7 | ||
|
825e2643ae | ||
|
9bcf5f2947 | ||
|
c966c49304 | ||
|
90dff612c7 | ||
|
9e4a4ba2ff | ||
|
e3612e8c62 | ||
|
06c4ded063 | ||
|
ff233a5b1c | ||
|
982586b0e6 | ||
|
ae5a13bb06 | ||
|
f3efbba26c | ||
|
2f7dcb6bbc | ||
|
623deac3ec | ||
|
58d96c8594 | ||
|
8701708b53 | ||
|
279a3c3413 | ||
|
fe3e63d8c5 | ||
|
ec93e2fff3 | ||
|
59d55b3526 | ||
|
0756af2b30 | ||
|
1598640c80 | ||
|
994e528b45 | ||
|
06f03fc884 | ||
|
698f3a7b15 | ||
|
c0c8fbac38 | ||
|
19b34231d4 | ||
|
ad53a3c9a1 | ||
|
58b59fe263 | ||
|
d71ab6d30d | ||
|
2b12f8e257 | ||
|
9e81fa495e | ||
|
f40bbbf145 | ||
|
1fc44b9d8e | ||
|
7bd0d9a83f | ||
|
c8f0406c84 | ||
|
18e3b618b4 | ||
|
fdc81fa4ea | ||
|
dd609c1cec | ||
|
d0594a6bfc | ||
|
9c11e0dc32 | ||
|
4bdafb8ea3 | ||
|
8966290369 | ||
|
9ea8653ef7 | ||
|
fe29a86af9 | ||
|
1cb2b1f7a9 | ||
|
4870d41aae | ||
|
754f1fcb25 | ||
|
3d58b67517 | ||
|
57ccf4c20e | ||
|
4c804fcf2d | ||
|
1f7fecab21 | ||
|
d86f3094b9 | ||
|
4b737c1c93 | ||
|
ff14a706cf | ||
|
8e0701f7bb | ||
|
a5d428c42d | ||
|
b2445d36d1 | ||
|
db12e8a1e6 | ||
|
f7432672e4 | ||
|
7b49296a24 | ||
|
b678df8d23 | ||
|
a4b90e3ab2 | ||
|
458c51b32d | ||
|
6af9142810 | ||
|
7b7ec45db8 | ||
|
f283dd848e | ||
|
b2f09f64c3 | ||
|
3558936b46 | ||
|
9e90b60a4f | ||
|
a129638fd1 | ||
|
649e813ee8 | ||
|
943ad96d52 | ||
|
fdde708327 | ||
|
b439ae1cc4 | ||
|
cd9977c94e | ||
|
383f5c1d60 | ||
|
13e19eb7f8 | ||
|
42581b1d12 | ||
|
573cc3e8d9 | ||
|
a67603f689 | ||
|
2b984e7851 | ||
|
e57bc316d1 | ||
|
ee0628085b | ||
|
b24ece11e5 | ||
|
e5240c1a45 | ||
|
00f1aae38d | ||
|
be9db63718 | ||
|
548021b556 | ||
|
24e57244d1 | ||
|
724a6855ed | ||
|
e7ddd07d56 | ||
|
65742d32ec | ||
|
6d60a79369 | ||
|
ccd60f76c3 | ||
|
3bfd60a3df | ||
|
3129dd9351 | ||
|
c2a6b09a25 | ||
|
f897596215 | ||
|
7f5a1d205e | ||
|
b31eaadfab | ||
|
bd8a57e0c3 | ||
|
65efe5ad43 | ||
|
41d82a54b6 | ||
|
864f5fd7d3 | ||
|
1fd3e3676a | ||
|
16e7133e31 | ||
|
6d01a3153e | ||
|
3c99f1f840 | ||
|
b28594a976 | ||
|
3bdae848b3 | ||
|
89906f4826 | ||
|
fde371b90f | ||
|
453b993cfb | ||
|
90ab412628 | ||
|
1b91d9b69e | ||
|
79a4006a61 | ||
|
73c4c21533 | ||
|
b189fc83b0 | ||
|
005cf4dc96 | ||
|
f805f0d1ef | ||
|
9d5d94a8f4 | ||
|
e896361b2f | ||
|
224336e232 | ||
|
05abb1dae9 | ||
|
8f21b020b1 | ||
|
7126ee2df9 | ||
|
19e701683d | ||
|
d548180f20 | ||
|
bd452a04e8 | ||
|
001fe37059 | ||
|
fff431737b | ||
|
0aec04a9c9 | ||
|
cc0ddc92b3 | ||
|
2461d433e8 | ||
|
859d4ff640 | ||
|
249f0b4e79 | ||
|
02a821aa3c | ||
|
1b4787df99 | ||
|
6c39cbca5e | ||
|
e3faa3c443 | ||
|
94e4ff9cdd | ||
|
bb302b91c4 | ||
|
5dc3639831 | ||
|
c3f03e0e3e | ||
|
3e6634c1e4 | ||
|
a1e788b958 | ||
|
5450e0ccde | ||
|
164d2898c9 | ||
|
884b5a7661 | ||
|
76a64898ef | ||
|
7e793f9514 | ||
|
9555f7610d | ||
|
e023c1b47d | ||
|
9e089a5090 | ||
|
dde3ef206d | ||
|
c7c077074f | ||
|
f62b9ab665 | ||
|
56a7050160 | ||
|
da1eeb9cfa | ||
|
96f5b07bec | ||
|
e0ccba9e24 | ||
|
35ad4d31a1 | ||
|
d8daedea0d | ||
|
851bfc61e0 | ||
|
5006ebcbae | ||
|
69a9adb459 | ||
|
4646956922 | ||
|
2dbe50fc97 | ||
|
349b6d616d | ||
|
4ca30c4b93 | ||
|
4fd848ff3e | ||
|
d3ab68011a | ||
|
a921e303ac | ||
|
0d9c7bade3 | ||
|
b19a1e79f5 | ||
|
051eeb9980 | ||
|
6400710b56 | ||
|
08a47b9ad9 | ||
|
68d461bd42 | ||
|
a24aa1487e | ||
|
541613d1fe | ||
|
19a9da3032 | ||
|
698ad90c43 | ||
|
3e5bd34141 | ||
|
a778f3866a | ||
|
c90b7a9691 | ||
|
1bd4572957 | ||
|
8dd8c7d1dd | ||
|
64fd0ebcf6 | ||
|
68ca5dd279 | ||
|
9bac86fe1a | ||
|
16e1f95790 | ||
|
426bf1d631 | ||
|
49837c2da4 | ||
|
ce1c5ec7f6 | ||
|
d8cab006c8 | ||
|
d335a11119 | ||
|
4d0012f672 | ||
|
c11b3d03f4 | ||
|
5cab477bf4 | ||
|
61dacfd2a5 | ||
|
8d74e063af | ||
|
ccfa00d7b8 | ||
|
f158a996f4 | ||
|
ae3b2c597d | ||
|
f4bcfa5c44 | ||
|
16edc2954d | ||
|
c69eb6e1bf | ||
|
de4fd466dc | ||
|
c43969fece | ||
|
3ae71a45a2 | ||
|
a8a2bb4681 | ||
|
906fa93812 | ||
|
9ce4092a7c | ||
|
94bc087f50 | ||
|
8b052e20b9 | ||
|
45e0ba7f9b | ||
|
a32b7b64bf | ||
|
78fb5935c7 | ||
|
b2ac138c88 | ||
|
95c14e5a26 | ||
|
f81292e955 | ||
|
790caf9f5a | ||
|
18e48be5c4 | ||
|
3f24720633 | ||
|
28fb2472a4 | ||
|
f33fa1e9fc | ||
|
22b6b4b502 | ||
|
7abc81f8a4 | ||
|
ea6e370347 | ||
|
9f5dbad589 | ||
|
7407a5a681 | ||
|
b8d710800a | ||
|
bb317d1abb | ||
|
b31f334109 | ||
|
05c00c5e1c | ||
|
704b50fb3e | ||
|
fa7443be95 | ||
|
d1c807ec79 | ||
|
66abe309f6 | ||
|
336adac1ef | ||
|
d6c0129c86 | ||
|
fd2f253c09 | ||
|
a029ece808 | ||
|
e64798208f | ||
|
be9016a081 | ||
|
75b8a16465 | ||
|
a59920e6e5 | ||
|
6ca2183e24 | ||
|
bb7d1c5cba | ||
|
0ecd86ecf7 | ||
|
ccfb29f1b3 | ||
|
b9bf577ccd | ||
|
7f869ea72d | ||
|
dea2eea919 | ||
|
1949356ede | ||
|
eb65f75f45 | ||
|
758c46c5aa | ||
|
581f892613 | ||
|
0a1cbf87b8 | ||
|
5feaab9a95 | ||
|
a294827211 | ||
|
9568d57e5f | ||
|
5d1b5ac6c9 | ||
|
50dda3244e | ||
|
7f851208aa | ||
|
7199e63fd7 | ||
|
85bd192f3c | ||
|
1a88aff179 | ||
|
61bb0cfab7 | ||
|
2c7b220453 | ||
|
8bd2114d8a | ||
|
c0249b9c28 | ||
|
26c1c483da | ||
|
dcd1407109 | ||
|
b5b35a97c6 | ||
|
58c5e9676a | ||
|
5e6a6ba6ac | ||
|
9a2678450a | ||
|
bb8c7423b6 | ||
|
2f5cc3b271 | ||
|
11023dfef9 | ||
|
2da2dbff71 | ||
|
eaa67dab91 | ||
|
680701667e | ||
|
3f47c4d3dd | ||
|
d55c4eb66e | ||
|
9a2ded5a9a | ||
|
c1847a0b34 | ||
|
5e0b05356f | ||
|
12bb9375f4 | ||
|
f2ef8c7206 | ||
|
3f40098144 | ||
|
9372ad2dff | ||
|
e31fa1f7dd | ||
|
828eac1e72 | ||
|
bb3ac36098 | ||
|
794a709690 | ||
|
da131715ba | ||
|
62dbb1062f | ||
|
6b9c718df7 | ||
|
986f7550f3 | ||
|
1f476b8793 | ||
|
8db1f3e3f3 | ||
|
4349b016eb | ||
|
c09511adb8 | ||
|
18e6ebe9af | ||
|
594332181b | ||
|
2121766623 | ||
|
fe365a6561 | ||
|
eed9ee8033 | ||
|
e80afbfe39 | ||
|
e8eea6324e | ||
|
c457081597 | ||
|
e6e416306e | ||
|
2f244da8b1 | ||
|
14c9b2f4ae | ||
|
3b00a0e30d | ||
|
b771827d2a | ||
|
5a82478381 | ||
|
c855d2f4ce | ||
|
4ece50d07c | ||
|
23a4a20dc2 | ||
|
bb3f52d2f2 | ||
|
9174be8ff3 | ||
|
af2df84fc1 | ||
|
8572c86941 | ||
|
58586ab2e4 | ||
|
240fab99f4 | ||
|
e31d5ba939 | ||
|
c0fafcec70 | ||
|
e8536ebc88 | ||
|
2b6c56f148 | ||
|
ecfaba0781 | ||
|
4c1813d6d4 | ||
|
e3ebde9741 | ||
|
01e03fc677 | ||
|
d47c72711b | ||
|
824bf2ed30 | ||
|
5dc7a442f6 | ||
|
c0dc8c8915 | ||
|
f4b6b93b8b | ||
|
160ab3452e | ||
|
1a161ad2c7 | ||
|
b18cc6bcc5 | ||
|
34cba68432 | ||
|
5a3aaeb056 | ||
|
01ee942920 | ||
|
21dfd8a325 | ||
|
f5707c51c0 | ||
|
c608958eb3 | ||
|
f86efca9a6 | ||
|
8b9c97745f | ||
|
35db01d316 | ||
|
30e784b8ec | ||
|
33f62bb93c | ||
|
a65da05094 | ||
|
c002600ac5 | ||
|
fb316ff010 | ||
|
d2074afe9a | ||
|
f9650f33be | ||
|
7ae2b48da9 | ||
|
357b6406e2 | ||
|
db1905fdb6 | ||
|
c0e0a209e4 | ||
|
77b737ad87 | ||
|
4e3a81d697 | ||
|
1b50696ca7 | ||
|
2918a175ee | ||
|
a70e82c82b | ||
|
b03ea65943 | ||
|
f2e1b5983e | ||
|
4520a04be9 | ||
|
85375842a8 | ||
|
93d03106b6 | ||
|
3638056dd7 | ||
|
503ec61a04 | ||
|
3fa5ae08d5 | ||
|
c82c6961d7 | ||
|
557ddf974f | ||
|
e56cd9024d | ||
|
4a692e510e | ||
|
90ab459ad4 | ||
|
3201b6865b | ||
|
26d33aade2 | ||
|
fbf05e9d5e | ||
|
8f2a742a09 | ||
|
16b16a109e | ||
|
e0088a45da | ||
|
76aa1ef3ec | ||
|
357cad8a49 | ||
|
74ee783685 | ||
|
2b59186d03 | ||
|
08684a7c51 | ||
|
144479428d | ||
|
8a857e39f4 | ||
|
6de07c5c29 | ||
|
cf94a5193a | ||
|
d921242be7 | ||
|
bdb347b703 | ||
|
9f548ae8de | ||
|
285bbbc2f1 | ||
|
4f7ff1f3cf | ||
|
fbc4adff99 | ||
|
59e216ad34 | ||
|
c750748b8d | ||
|
fe17be24e0 | ||
|
c08ee00fcd | ||
|
d8852c6260 | ||
|
00466cd550 | ||
|
5a2d361c81 | ||
|
476bcfe7cc | ||
|
4252a17f62 | ||
|
ae7b29cb90 | ||
|
8c1e886af9 | ||
|
15f5b185c3 | ||
|
5a4fbe12a9 | ||
|
03919b9777 | ||
|
81f0cb49bb | ||
|
646542602f | ||
|
7803fd2335 | ||
|
19dc66900d | ||
|
5341a1ea49 | ||
|
86c4853b2e | ||
|
62c657beba | ||
|
055c1b1194 | ||
|
042aa3a73e | ||
|
e49f97472a | ||
|
a42390c91f | ||
|
395aa8cb95 | ||
|
e73d14304c | ||
|
4295264a33 | ||
|
48f119b673 | ||
|
fb773d5d9b | ||
|
ab0521ebfb | ||
|
c9ba42d0a0 | ||
|
af4fd3b0c2 | ||
|
7aee9c4432 | ||
|
1af233cc59 | ||
|
be833631f3 | ||
|
846ef06862 | ||
|
3f08201f5a | ||
|
86c04b876b | ||
|
15aef10d5d | ||
|
f68eb65cd7 | ||
|
30d550596b | ||
|
31a05f111b | ||
|
07f2f285ff | ||
|
383b6a27c3 | ||
|
24ddbefb63 | ||
|
8ef3b10d39 | ||
|
6d9752645f | ||
|
efd4e50378 | ||
|
e761923cc9 | ||
|
ccd9146c6c | ||
|
02a9126ab6 | ||
|
b5783c0668 | ||
|
e7a3bb87c6 | ||
|
ff5a046922 | ||
|
5ea2ccfc17 | ||
|
76b488a672 | ||
|
65ad33ec81 | ||
|
4ebd3caf48 | ||
|
904a1394eb | ||
|
5dac2d8873 | ||
|
889f4d4e15 | ||
|
0ca2e5ae08 | ||
|
3fc6f7fa23 | ||
|
3a88831b9d | ||
|
5350cb107f | ||
|
e82d6785c2 | ||
|
fff9eeaa5c | ||
|
a436f9e117 | ||
|
e7606d133d | ||
|
cd7817126e | ||
|
8aeaa54ba4 | ||
|
9733d572de | ||
|
1d83c3b852 | ||
|
d42aa4d3c6 | ||
|
78f8f73fea | ||
|
f79fd33302 | ||
|
ced43363f6 | ||
|
5a874a4956 | ||
|
b17e7cd55b | ||
|
0a7dff442c | ||
|
7330530d13 | ||
|
3af1ffc357 | ||
|
32847e860f | ||
|
5949d29460 | ||
|
87b69c1d11 | ||
|
2e393d260b | ||
|
819a83f218 | ||
|
fc2a0d07ab | ||
|
5162f3f674 | ||
|
dd155220f0 | ||
|
4dedfdb89e | ||
|
a0ae8135ce | ||
|
a72ad8a53d | ||
|
bbf4c08ffd | ||
|
ccbf049000 | ||
|
49cda74971 | ||
|
7f2ba663d5 | ||
|
0a82a177c4 | ||
|
9fe7bfcd64 | ||
|
522e7706c1 | ||
|
80aeb02ba3 | ||
|
8d3cd687e7 | ||
|
bbcfc9f998 | ||
|
71cfc7aba1 | ||
|
c0fc3c38f3 | ||
|
543a29bcce | ||
|
527c14b194 | ||
|
0e03640ebe | ||
|
5d8e5468ba | ||
|
1873003624 | ||
|
2c042cc3fa | ||
|
89d5c872b3 | ||
|
ffbab33a26 | ||
|
b7654f1fc7 | ||
|
7c43d0435c | ||
|
fce337e352 | ||
|
e705b038f8 | ||
|
cc458e8d3b | ||
|
37662e8dc1 | ||
|
6319f566dd | ||
|
0594c480ff | ||
|
c3d8f12050 | ||
|
4e7b29e417 | ||
|
cb53c86711 | ||
|
c41bdac6c8 | ||
|
d5c93eb024 | ||
|
00df8b45fd | ||
|
496b070d2a | ||
|
ac31d41c85 | ||
|
3535d05ff5 | ||
|
d83d0158e2 | ||
|
eb016a2aa4 | ||
|
831a9fa224 | ||
|
6adec9a8d2 | ||
|
f88960c561 | ||
|
94af11d7e3 | ||
|
4d9d391365 | ||
|
9348ac80b5 | ||
|
ce2827a342 | ||
|
823134d762 | ||
|
fa3a825549 | ||
|
d50151c9dd | ||
|
8c799efc58 | ||
|
9f0dfcdbdb | ||
|
f7ef334fac | ||
|
7cbb1b23b2 | ||
|
f5aaaa8712 | ||
|
372da2107a | ||
|
d44875e138 | ||
|
cb2759a653 | ||
|
306b9fdd71 | ||
|
11cd6b8321 | ||
|
3e8b3f73bd | ||
|
f51d281dc0 | ||
|
fbcd7cf737 | ||
|
d615cebcfe | ||
|
6e86fe3300 | ||
|
09371712b0 | ||
|
78bf07ecff | ||
|
cd84feefff | ||
|
6fbb9463ee | ||
|
7cdc592ed9 | ||
|
bd21f27f4f | ||
|
696c8e3522 | ||
|
2fcce78144 | ||
|
5579e82fb9 | ||
|
4927d561a5 | ||
|
867f80e95e | ||
|
23201991c1 | ||
|
1898e7865d | ||
|
16ca8044f8 | ||
|
5e479d3bbb | ||
|
29383301df | ||
|
a6c821be95 | ||
|
377dad49c7 | ||
|
1419b4fc96 | ||
|
945d7e9891 | ||
|
cb50de16e2 | ||
|
4534a343d6 | ||
|
2937ea7ef4 | ||
|
1335a96dad | ||
|
0da8067129 | ||
|
712e14c4ee | ||
|
6a6d080679 | ||
|
6b62b51f11 | ||
|
91c130752c | ||
|
282ffc622f | ||
|
4de9816f24 | ||
|
3519bfe7c6 | ||
|
71add9c064 | ||
|
40587aa2e1 | ||
|
8f6b1f9049 | ||
|
e6d8634194 | ||
|
756a85fb53 | ||
|
43ccc09cf2 | ||
|
cca5c17ccb | ||
|
d9fcb2b408 | ||
|
5222881690 | ||
|
d7bc129ce3 | ||
|
22573cf79b | ||
|
1269cb7252 | ||
|
8de55ce684 | ||
|
99195ffd07 | ||
|
d0ba94e9df | ||
|
54ffd90087 | ||
|
45ebc70bfe | ||
|
a014eca9e7 | ||
|
8943609d10 | ||
|
bb9ee4caab | ||
|
34c0c248be | ||
|
78925b011d | ||
|
51ad0e3708 | ||
|
4bf823f6cd | ||
|
c3d6b64f4b | ||
|
b8be707dc5 | ||
|
54f402867f | ||
|
de1cc396bb | ||
|
82357f7d97 | ||
|
3607bb6dc8 | ||
|
eafa1573e7 | ||
|
f4f183bc46 | ||
|
a36ba22676 | ||
|
2cb1af3dea | ||
|
4f209e9f04 | ||
|
f8efd94249 | ||
|
0c5f0e247b | ||
|
061142e0c3 | ||
|
1062fbdd6b | ||
|
ea354d6bd2 | ||
|
9392377ffd | ||
|
9026062a32 | ||
|
694e7abe9c | ||
|
33a2a368d2 | ||
|
22b2875b52 | ||
|
bec476b601 | ||
|
b7a40dad41 | ||
|
1b520328fa | ||
|
b3e34a0636 | ||
|
be20b8e1a0 | ||
|
77a0a01eff | ||
|
346e5d896f | ||
|
b6dabf7381 | ||
|
e2fbfa7470 | ||
|
a31d245136 | ||
|
0120f78c87 | ||
|
7c29ae4a8a | ||
|
0cc088a523 | ||
|
e0be139783 | ||
|
73d33e1161 | ||
|
2009a94ba4 | ||
|
bab71485ca | ||
|
a78763b510 | ||
|
6b55907ddd | ||
|
8008a2af9b | ||
|
1015b63ef7 | ||
|
85688d1871 | ||
|
29bc4215bd | ||
|
de583cbd32 | ||
|
59a5acf249 | ||
|
80c955f267 | ||
|
3f7e5e29f3 | ||
|
abec9bc39e | ||
|
cf258f0b4c | ||
|
9780024dc6 | ||
|
6ef2b7544a | ||
|
48fcbfa5ea | ||
|
22bcbfbbc8 | ||
|
b0cb489769 | ||
|
da62d27678 | ||
|
83da03d6eb | ||
|
a2d33ce3b9 | ||
|
b511f1d950 | ||
|
1059b30641 | ||
|
c2c1db587f | ||
|
6ad76c14ef | ||
|
dd7bb28d86 | ||
|
58d018e868 | ||
|
cf2497656a | ||
|
18b0d8db3f | ||
|
994fdb9e37 | ||
|
7b0e9df41e | ||
|
95b015f01a | ||
|
09a79d609f | ||
|
c82e3e9bda | ||
|
b4e4248f40 | ||
|
9f7b6d6fa1 | ||
|
88c7d49054 | ||
|
0f33960d5e | ||
|
d325059c28 | ||
|
85e9169b35 | ||
|
830e060568 | ||
|
279a6e6cb8 | ||
|
1ff6ced3ab | ||
|
cfbdc1516f | ||
|
b90508db04 | ||
|
73544b5203 | ||
|
5a57ded243 | ||
|
ac36adddfe | ||
|
ccd817cce1 | ||
|
deb7c63910 | ||
|
7651d58470 | ||
|
a497e8df3a | ||
|
aec0ba7148 | ||
|
9050b2fe88 | ||
|
4b1efd1e1f | ||
|
b1817daa12 | ||
|
120f02d728 | ||
|
d77f8d9fec | ||
|
e8f1f6d528 | ||
|
ca7adeedbd | ||
|
1e44f45a68 | ||
|
bf4b3efa5b | ||
|
9813d43f0b | ||
|
2a62e9dc29 | ||
|
ef66f2e35d | ||
|
3cca2fdb7f | ||
|
a6129eeb78 | ||
|
35cde98e71 | ||
|
6453ee16d2 | ||
|
b8f2db6e33 | ||
|
49ff6369c9 | ||
|
cae5e9c875 | ||
|
6157189efe | ||
|
7ebaac0b63 | ||
|
c70a256eb1 | ||
|
efb486511c | ||
|
2f60c4399a | ||
|
2e6bfb6717 | ||
|
c2143f617a | ||
|
2b5aeb5ed1 | ||
|
20d70a042b | ||
|
5674056c3f | ||
|
79510302fd | ||
|
555c0966cc | ||
|
e67230633f | ||
|
3319398f17 | ||
|
b64b20c44d | ||
|
1ddf1032f5 | ||
|
d49b630bdc | ||
|
2e82b82d7f | ||
|
98faa71e65 | ||
|
e621362471 | ||
|
a0de42503e | ||
|
fa30563937 | ||
|
089a54281e | ||
|
f7a7703539 | ||
|
a7deb2021a | ||
|
5546085f0d | ||
|
f20e14282a | ||
|
fe032867a3 | ||
|
db69d724bb | ||
|
2963830916 | ||
|
6cd2fac33c | ||
|
82b7e2846a | ||
|
60134c4d35 | ||
|
f78a1372e3 | ||
|
0c5593ed75 | ||
|
5efb7b2a84 | ||
|
be2def5fad | ||
|
8815699d4e | ||
|
b5eea12d49 | ||
|
27008aff66 | ||
|
bad815b429 | ||
|
77f38bb40b | ||
|
958379682a | ||
|
c6f8ef0c46 | ||
|
b44c0c266c | ||
|
ad4999384d | ||
|
7e2552bd8c | ||
|
4b270359f6 | ||
|
7e23adf26f | ||
|
7eb6a17fd2 | ||
|
65246d0041 | ||
|
ac3e87965f | ||
|
d9c41f62cf | ||
|
c1efb0d2b4 | ||
|
edf7f6b8d3 | ||
|
8a7b25584d | ||
|
4131850429 | ||
|
6426f9cf12 | ||
|
2696c26ffb | ||
|
fb92229f22 | ||
|
99d95b06ea | ||
|
622abbe128 | ||
|
3630055baa | ||
|
5e91adbf4e | ||
|
78b60a3bd9 | ||
|
60b3f7ae25 | ||
|
4c872164c3 | ||
|
f74e270b8a | ||
|
be3cbe6dc3 | ||
|
0660663161 | ||
|
f97d827280 | ||
|
38bb845ce7 | ||
|
f68f577b71 | ||
|
590bb8e3e0 | ||
|
c9084e4ed5 | ||
|
16c58a966a | ||
|
78b1a5c42a | ||
|
ced8b8acdc | ||
|
5cb65d84f1 | ||
|
5ea7a4d127 | ||
|
df9612f937 | ||
|
e2a7045e22 | ||
|
a1d5563963 | ||
|
ce1f7e090e | ||
|
fef5292a12 | ||
|
df304a908f | ||
|
2dd6bc85ea | ||
|
8824bb26c4 | ||
|
a9e6d1131a | ||
|
e91a38547a | ||
|
dcd8c8d418 | ||
|
ac4440f4bf | ||
|
08b402a9c1 | ||
|
4ef5363024 | ||
|
bd00bc4bca | ||
|
c4c7e41981 | ||
|
1c2c03dc8b | ||
|
8b496d085e | ||
|
35de251ce7 | ||
|
4425c3dde7 | ||
|
bc4d016557 | ||
|
c4ba6735ba | ||
|
a065b0c88c | ||
|
c7e702368b | ||
|
727ddc29bf | ||
|
3954e7c6fa | ||
|
be073e5c21 | ||
|
5b6a69e0ab | ||
|
9c509eae4b | ||
|
fe635989a1 | ||
|
b1cf25f443 | ||
|
90cc596be8 | ||
|
fee8b5e5fc | ||
|
fe153c466d | ||
|
6e85a91315 | ||
|
ec369049b4 | ||
|
7c864ede63 | ||
|
514a989197 | ||
|
a9a4b24511 | ||
|
852e93ffa2 | ||
|
6aca0d1b4e | ||
|
57062dfe45 | ||
|
4b111f9df8 | ||
|
b31d15619d | ||
|
f12f3e18a2 | ||
|
ac84ce5c4a | ||
|
d9f103d706 | ||
|
180d35e968 | ||
|
78d6d746d6 | ||
|
619cb8973d | ||
|
9a6d6ddd1f | ||
|
8c5e4b95d0 | ||
|
5fd316816d | ||
|
3e27a5ec81 | ||
|
e18fe5e212 | ||
|
75d64c04d9 | ||
|
121a3f9bed | ||
|
531ebf335c | ||
|
10da630d8a | ||
|
bb9e394e93 | ||
|
c20dbbbbbd | ||
|
e498657323 | ||
|
6391cc0803 | ||
|
030c26a8ab | ||
|
d057177f1b | ||
|
8b1d4e0e9d | ||
|
631b9bb438 | ||
|
8d81637388 | ||
|
095a1bc56b | ||
|
690ff1fba1 | ||
|
63b1886f50 | ||
|
321a54323e | ||
|
0c0ca558ed | ||
|
6865a73f46 | ||
|
e363c02041 | ||
|
42235167f8 | ||
|
6a66ba7158 | ||
|
460d88534e | ||
|
3116f3dbe0 | ||
|
e3bd7b45f5 | ||
|
dc2eb30120 | ||
|
967154d314 | ||
|
7812d4e7b6 | ||
|
4727f3b3bb | ||
|
5e27579ebe | ||
|
57709b2e78 | ||
|
00cac6d250 | ||
|
b215c59bd0 | ||
|
540a85e8db | ||
|
b5d57f0ef8 | ||
|
283a810d6b | ||
|
bf063d4df7 | ||
|
dda0838a12 | ||
|
49d8fdd237 | ||
|
da492fd753 | ||
|
ca012d4479 | ||
|
9b9f9a946d | ||
|
89795504a2 | ||
|
6fe802a96b | ||
|
91243f64af | ||
|
b6b00887e4 | ||
|
c9f29f76e5 | ||
|
366dee0aa5 | ||
|
a7f28cd61d | ||
|
e691d858e3 | ||
|
a6aaf3f595 | ||
|
f34cc63d4c | ||
|
831e59c1a7 | ||
|
8aaa1a6417 | ||
|
9295850789 | ||
|
4b62678e2f | ||
|
5a9f8218c8 | ||
|
f02caff854 | ||
|
34c4b2aa5e | ||
|
804c78de81 | ||
|
2af93f4492 | ||
|
e5341d54a9 | ||
|
61e86a3c23 | ||
|
7dc0b7bb13 | ||
|
5fe23f477f | ||
|
2c5cde050e | ||
|
c69a2abc45 | ||
|
d07b9510a2 | ||
|
a1a2b501ee | ||
|
cd442f27c4 | ||
|
3c9ec96350 | ||
|
2ac33c77b3 | ||
|
d361d1d0a3 | ||
|
62ef18a027 | ||
|
590a8862bc | ||
|
c7e57936fb | ||
|
56cbb69ad1 | ||
|
49817a850f | ||
|
58f6d36564 | ||
|
bc48e413f1 | ||
|
0137eb88ae | ||
|
5b5c4595cc | ||
|
ce08819a43 | ||
|
ead8cdbcd6 | ||
|
227b70339c | ||
|
004d2b7f23 | ||
|
bcbde04530 | ||
|
a81e019427 | ||
|
f564a1edaf | ||
|
39d140005e | ||
|
da493430f8 | ||
|
776bbe74ab | ||
|
170d56b774 | ||
|
3400acbfeb | ||
|
2a7773dce5 | ||
|
c2fe2aabff | ||
|
ed411c226d | ||
|
f6f7d05c8b | ||
|
34436b7f56 | ||
|
98963366b7 | ||
|
2d57f6c889 | ||
|
d833120f5e | ||
|
49fa881be8 | ||
|
2598a8fa8d | ||
|
7fafabf7c4 | ||
|
c31b19a640 | ||
|
88ff2276e3 | ||
|
e8b750c54f | ||
|
2a21a35a8e | ||
|
788a3b930f | ||
|
d893d7853b | ||
|
177501a14a | ||
|
a5b68b09ef | ||
|
ad4c6dd60c | ||
|
181d18fcfe | ||
|
897d3af277 | ||
|
5edb62c3c0 | ||
|
2775f24610 | ||
|
054f4174a2 | ||
|
4a5e30717c | ||
|
08f1b73c34 | ||
|
8d91c33c0b | ||
|
a16851fa92 | ||
|
65f40e493f | ||
|
02509eb43e | ||
|
ef3bff76fe | ||
|
ee91745545 | ||
|
64f5bfa09f | ||
|
faa02b058d | ||
|
893ef10563 | ||
|
2235d4c432 | ||
|
64e8291eaf | ||
|
15f15e9a09 | ||
|
cf5f78cb79 | ||
|
5fd3ce0138 | ||
|
7d91b17552 | ||
|
0653505a40 | ||
|
fb9fe280ac | ||
|
746fe441e2 | ||
|
d2b6b41128 | ||
|
976c3d6006 | ||
|
a1670462ca | ||
|
9b279ad39d | ||
|
9e86b5e8df | ||
|
4b3d330190 | ||
|
6e8a987694 | ||
|
f854e477b7 | ||
|
7279f08a34 | ||
|
7d7c41a135 | ||
|
f78837cbc5 | ||
|
6430691c22 | ||
|
6b4bdb636e | ||
|
e3708bd598 | ||
|
c55a2171d5 | ||
|
73fa24a844 | ||
|
17b86f0491 | ||
|
e2e70c221a | ||
|
ed287df43a | ||
|
29aed314c1 | ||
|
fef92ad99e | ||
|
8b5227761e | ||
|
39f189b1d1 | ||
|
30d08d2bfe | ||
|
9fb2056753 | ||
|
c6ac03e94e | ||
|
d32c4c1f61 | ||
|
9fb2d279e9 | ||
|
393a96cf02 | ||
|
c4b48d701f | ||
|
d310f1e3e4 | ||
|
11e219dd41 | ||
|
ad93407907 | ||
|
a8104d7498 | ||
|
a219b0bc3f | ||
|
be632b3600 | ||
|
6459a786db | ||
|
50e6c8a082 | ||
|
b08f5d355b | ||
|
cde6b093c0 | ||
|
ee6b8be7ad | ||
|
1b12221a6d | ||
|
ddf2a06ab8 | ||
|
a0ad0e248e | ||
|
d884edb8df | ||
|
eb9141cb05 | ||
|
c473167017 | ||
|
764a3370c5 | ||
|
28115661b9 | ||
|
a472a0806e | ||
|
464c68a3b6 | ||
|
bda704901f | ||
|
f3472e1b9f | ||
|
2f76397590 | ||
|
901f70272e | ||
|
685c9585f4 | ||
|
234b273ca6 | ||
|
b0a9782d31 | ||
|
d5472a8d23 | ||
|
17ef50f662 | ||
|
161cbec0d8 | ||
|
b2a4ff7a85 | ||
|
79cc160772 | ||
|
4bad10cd21 | ||
|
16d2fa3f48 | ||
|
3d3d97e75b | ||
|
aa86a8be32 | ||
|
929a00e1cd | ||
|
851930f980 | ||
|
d17ae811d7 | ||
|
f367157d75 | ||
|
a7c658a21c | ||
|
8a4c71305f | ||
|
17e9f5607d | ||
|
66d1a65432 | ||
|
9ce315dece | ||
|
5128bc9eb0 | ||
|
40726e06e9 | ||
|
e2d744ddc4 | ||
|
496e5ba46d | ||
|
2a3ca93256 | ||
|
22ff93c3a7 | ||
|
d0ee41d4fb | ||
|
36e56052bc | ||
|
916e300a79 | ||
|
9c5fc2e4d3 | ||
|
91fc8c52d7 | ||
|
e866248227 | ||
|
7d94c712c8 | ||
|
c15b4b3ac9 | ||
|
16a40a0974 | ||
|
a033cc63e3 | ||
|
cb68308d5b | ||
|
cd60614f88 | ||
|
e78aa68233 | ||
|
4f4b10d2a3 | ||
|
ff799a41f6 | ||
|
ee9c29d1f9 | ||
|
162445e5ed | ||
|
1361b5e146 | ||
|
6737aebe0f | ||
|
a921f68f8a | ||
|
481f800cbd | ||
|
0fd025d8b9 | ||
|
6f7d2ed39a | ||
|
9cbc15d4a6 | ||
|
4018dd959e | ||
|
2dae07fa87 | ||
|
224f41ca8a | ||
|
158f3f0025 | ||
|
ef1f16c186 | ||
|
72e6fb5ef0 | ||
|
13652f6a6f | ||
|
6ad0426a7d | ||
|
6f4b490b37 | ||
|
17654aaf40 | ||
|
e87db91e2d | ||
|
b339f99cbf | ||
|
0524352446 | ||
|
995f2a9997 | ||
|
2b213d0561 | ||
|
30bd4d34c9 | ||
|
1653c1ae92 | ||
|
d8e561ef7e | ||
|
0d8b3e1839 | ||
|
9b4276721c | ||
|
da319604b6 | ||
|
8b6c902c4c | ||
|
c3102561f4 | ||
|
c6c65749bb | ||
|
a246aef823 | ||
|
115ee46e09 | ||
|
b0e66232d3 | ||
|
d8a522b2d4 | ||
|
82b19173f1 | ||
|
565283b8a3 | ||
|
03b7ae0a30 | ||
|
4aa6b728cf | ||
|
0f63c84d5b | ||
|
c379807d4c | ||
|
f3a1351a42 | ||
|
720087bef2 | ||
|
a4567ee075 | ||
|
09b085be6e | ||
|
8125eaed57 | ||
|
306748feb0 | ||
|
3d3738f3be | ||
|
7bf39a092f | ||
|
890db3427f | ||
|
c646879cca | ||
|
5b507ec74e | ||
|
7866247f5d | ||
|
97b8ecbbdf | ||
|
0082c0ce60 | ||
|
b1c9af3ed0 | ||
|
0c4da63e07 | ||
|
8e19ae7824 | ||
|
115abdda27 | ||
|
dffe3d1a26 | ||
|
c3447dd205 | ||
|
5232019ed7 | ||
|
7fc3151e56 | ||
|
5809c97828 | ||
|
9bff567b3c | ||
|
f1e1e538b6 | ||
|
099603ed8b | ||
|
fc42f2903c | ||
|
d2cf29bce4 | ||
|
1c116b0385 | ||
|
a9128808de | ||
|
53ced8c763 | ||
|
a8cfc12fac | ||
|
8a93b74f68 | ||
|
c7e12b1aef | ||
|
ef79a9fc82 | ||
|
970143fcd2 | ||
|
18fbfd2ce5 | ||
|
14a23afcef | ||
|
c2fd4159c9 | ||
|
e88f54f3d4 | ||
|
24073ddb48 | ||
|
8c89e6a57c | ||
|
e96814a188 | ||
|
c4fc397653 | ||
|
563f1512df | ||
|
d7d810ba89 | ||
|
a83911d67f | ||
|
c836eb401f | ||
|
762717dd38 | ||
|
e23c7ce543 | ||
|
13ffe5a667 | ||
|
53df5d6b49 | ||
|
3ffb56baa2 | ||
|
adf2e97ea1 | ||
|
86809d9301 | ||
|
e4010185dc | ||
|
2eff75b387 | ||
|
2e3cc12d9a | ||
|
025cdbf18f | ||
|
ad77ba60e6 | ||
|
1b9ba58aca | ||
|
99f539b3cb | ||
|
3d4bad4b19 | ||
|
657dd1e6d1 | ||
|
16c83877d2 | ||
|
d895c7fc16 | ||
|
149fcf5d32 | ||
|
b4dafcc45b | ||
|
4b3d427cff | ||
|
9965a93291 | ||
|
e915321e33 | ||
|
8523cae8d0 | ||
|
caadb24310 | ||
|
4a70d97b4e | ||
|
627f306d1b | ||
|
e85afc9c7c | ||
|
84ff74242e | ||
|
707fd07dc6 | ||
|
e7661b725e | ||
|
88ea9f8b61 | ||
|
b94e5653a9 | ||
|
1f673b7aae | ||
|
eae878e766 | ||
|
5ede164e8d | ||
|
7bd1812054 | ||
|
e22923d546 | ||
|
530e29810d | ||
|
879e165ae5 | ||
|
93d56898b7 | ||
|
1cba506bc7 | ||
|
23797dee21 | ||
|
17dfa3d7ba | ||
|
1fa203c990 | ||
|
66c052f3fd | ||
|
b71500104b | ||
|
9ee8a6e8bc | ||
|
acf14cf8cb | ||
|
9934fa7191 | ||
|
b6d5077d04 | ||
|
1a7f58b578 | ||
|
aae7e111eb | ||
|
015f1c6fc8 | ||
|
ea54644a45 | ||
|
f7a57f272e | ||
|
053e82579f | ||
|
4fa02b1357 | ||
|
e6e23a1a82 | ||
|
2ed8b4660e | ||
|
99805d2510 | ||
|
9d619820f9 | ||
|
be03b30d75 | ||
|
487f1b5281 | ||
|
f21abc60f5 | ||
|
358187f8b0 | ||
|
0fa95ccd50 | ||
|
bcd39a7ff4 | ||
|
50b77e8608 | ||
|
c8b7e8ab99 | ||
|
91397125ba | ||
|
28d0e88565 | ||
|
82bce1e946 | ||
|
877e07775a | ||
|
9d77a4ef97 | ||
|
54e9c51a1a | ||
|
445ff4f8aa | ||
|
6253dd52a6 | ||
|
a0bd6dbab6 | ||
|
5383d65d5a | ||
|
86a6164713 | ||
|
b63b080419 | ||
|
8e4e918575 | ||
|
2d44144b69 | ||
|
cf94a2c02f | ||
|
2b268c92bb | ||
|
1e707f7cf2 | ||
|
8780f7a128 | ||
|
05cdae999f | ||
|
ffd3cda03b | ||
|
8b1c17c12b | ||
|
f9b09052eb | ||
|
75c11a2006 | ||
|
472a2e96a1 | ||
|
266fe131a9 | ||
|
b70fde159d | ||
|
5c532e3b92 | ||
|
8d9862612f | ||
|
218fd9bbff | ||
|
701e6211f8 | ||
|
f29bd502f9 | ||
|
f5aea98296 | ||
|
8e6a2dfac4 | ||
|
4f46f7bf33 | ||
|
bb5cedfa3c | ||
|
a281c35a7e | ||
|
51caf366a5 | ||
|
fdb24122c0 | ||
|
1c7c25091f | ||
|
43935a9e56 | ||
|
463caf36a1 | ||
|
0895abf3e4 | ||
|
44e5b4c947 | ||
|
bce8dc9113 | ||
|
e29849fe5e | ||
|
cd5dacbe29 | ||
|
51b818f916 | ||
|
7ee6152c0b | ||
|
47ac7e7176 | ||
|
db5998dd84 | ||
|
4c8a06bb6b | ||
|
799fbdf1fc | ||
|
f2481759ae | ||
|
9291dfc918 | ||
|
8574f66954 | ||
|
e377c9bd6f | ||
|
ab9b2d64ab | ||
|
1a2de997b5 | ||
|
9d52b16b58 | ||
|
c357dec8ed | ||
|
39896b508b | ||
|
c07ff3e494 | ||
|
91bc25749d | ||
|
bdf4f3f536 | ||
|
31860acc9d | ||
|
68e34351ed | ||
|
fe34b7eaa0 | ||
|
37d052ad9e | ||
|
c6f3da5887 | ||
|
c24e72272b | ||
|
d58380af83 | ||
|
5afe8629cd | ||
|
251061fad6 | ||
|
b26e1c87ae | ||
|
63da4b4b49 | ||
|
a6b7d0d972 | ||
|
43c7040331 | ||
|
5bf0955193 | ||
|
b3e13c5ea5 | ||
|
41c4f9ceb2 | ||
|
bd67dc3fac | ||
|
4302c77c2b | ||
|
857ea4b839 | ||
|
275d990074 | ||
|
8524eabe17 | ||
|
21efdeccb0 | ||
|
4b3b21f3b5 | ||
|
a7bd7124f4 | ||
|
35e97c2353 | ||
|
0af9bc8ffc | ||
|
a69ebcbdf6 | ||
|
26c1dbb0eb | ||
|
d0b6e8fd16 | ||
|
07abbfc531 | ||
|
e305cc35b0 | ||
|
54c90e146e | ||
|
54b3fc6dfc | ||
|
ef32050553 | ||
|
1a7b7f1bea | ||
|
3fee5540a0 | ||
|
2ec70adc5d | ||
|
90ef4b0c9d | ||
|
768ed4a577 | ||
|
ea22cdd7f1 | ||
|
46ccc1a87f | ||
|
cc91f3751e | ||
|
d9c1bbf95b | ||
|
b52b3e5503 | ||
|
dfafbefb71 | ||
|
f52ade1193 | ||
|
bf599f39ff | ||
|
42ec0037c6 | ||
|
e5d07f5a41 | ||
|
01468fc087 | ||
|
60f04bc915 | ||
|
4015eb2fd1 | ||
|
b5c56c8323 | ||
|
5f5de90f0c | ||
|
c8f0fd2a7f | ||
|
64135b7731 | ||
|
38919a35ba | ||
|
3f0d88e88d | ||
|
032d019029 | ||
|
df7e3841a2 | ||
|
778fb4e65d | ||
|
3cc993740e | ||
|
cf7d2fb648 | ||
|
12bca2298c | ||
|
9ae71104c2 | ||
|
93de11d167 | ||
|
9f054dd767 | ||
|
76f2b66445 | ||
|
8aaf50d58c | ||
|
d619012b6b | ||
|
bb0670c6b2 | ||
|
3b40f6964f | ||
|
c01d110501 | ||
|
a59510bbf0 | ||
|
2c48096664 | ||
|
e4dc9fa820 | ||
|
9099ef89fa | ||
|
73c8002b76 | ||
|
13d419102a | ||
|
1cf9a936a4 | ||
|
d7ce231c51 | ||
|
4cb9fd88a8 | ||
|
4e440b0325 | ||
|
3482bbcd61 | ||
|
f6c5f167f8 | ||
|
c9c689aec7 | ||
|
4291a45631 | ||
|
8f571ff148 | ||
|
2e4c54b925 | ||
|
260c7187ab | ||
|
7b4af432c5 | ||
|
d12467e6d4 | ||
|
bcc73fe727 | ||
|
9c024757b6 | ||
|
3faaf6a62b | ||
|
8b93e0f70a | ||
|
fa59b22f93 | ||
|
21a9ea7365 | ||
|
502d2aa064 | ||
|
89ac4a6969 | ||
|
6307fa698d | ||
|
cb10c28082 | ||
|
2ba2ce0c0b | ||
|
c490ba212d | ||
|
e45bd5fc36 | ||
|
02e50ca3a3 | ||
|
ea123e9713 | ||
|
a407aff33c | ||
|
0f95059c72 | ||
|
aa9aad918f | ||
|
135cbcd043 | ||
|
aee6a192d1 | ||
|
a03e722a24 | ||
|
89f039dccd | ||
|
1194467f82 | ||
|
a116a1ec8f |
@ -1,42 +1,30 @@
|
|||||||
{
|
{
|
||||||
|
"parser": "@typescript-eslint/parser",
|
||||||
"parserOptions": {
|
"parserOptions": {
|
||||||
"ecmaVersion": 2017,
|
"ecmaVersion": 2020,
|
||||||
"sourceType": "module"
|
"sourceType": "module",
|
||||||
|
"allowImportExportEverywhere": true
|
||||||
},
|
},
|
||||||
"env": {
|
"env": {
|
||||||
"browser": true,
|
"browser": true,
|
||||||
"jasmine": true
|
"jasmine": true,
|
||||||
|
"es6": true
|
||||||
},
|
},
|
||||||
"plugins": ["lodash"],
|
"plugins": ["@typescript-eslint"],
|
||||||
"extends": ["eslint:recommended", "plugin:lodash/canonical"],
|
"extends": [
|
||||||
|
"eslint:recommended",
|
||||||
|
"plugin:@typescript-eslint/eslint-recommended",
|
||||||
|
"plugin:@typescript-eslint/recommended"
|
||||||
|
],
|
||||||
"globals": {
|
"globals": {
|
||||||
"Uint8Array": true,
|
"Uint8Array": true,
|
||||||
"Promise": true,
|
"Promise": true,
|
||||||
"converse": true,
|
|
||||||
"define": true,
|
"define": true,
|
||||||
"require": true,
|
"require": true,
|
||||||
"sinon": true,
|
"sinon": true,
|
||||||
"window": true
|
"window": true
|
||||||
},
|
},
|
||||||
"rules": {
|
"rules": {
|
||||||
"lodash/prefer-lodash-chain": "off",
|
|
||||||
"lodash/prefer-lodash-method": [2, {
|
|
||||||
"ignoreMethods": [
|
|
||||||
"assign", "every", "keys", "find", "endsWith", "startsWith", "filter",
|
|
||||||
"reduce", "isArray", "create", "map", "replace", "some", "toLower",
|
|
||||||
"split", "trim", "forEach", "toUpperCase", "includes", "values", "padStart"
|
|
||||||
]
|
|
||||||
}],
|
|
||||||
"lodash/import-scope": "off",
|
|
||||||
"lodash/prefer-constant": "off",
|
|
||||||
"lodash/prefer-get": "off",
|
|
||||||
"lodash/prefer-includes": "off",
|
|
||||||
"lodash/prefer-invoke-map": "off",
|
|
||||||
"lodash/prefer-is-nil": "off",
|
|
||||||
"lodash/prefer-lodash-typecheck": "off",
|
|
||||||
"lodash/prefer-noop": "off",
|
|
||||||
"lodash/prefer-startswith": "off",
|
|
||||||
"lodash/preferred-alias": "off",
|
|
||||||
"accessor-pairs": "error",
|
"accessor-pairs": "error",
|
||||||
"array-bracket-spacing": "off",
|
"array-bracket-spacing": "off",
|
||||||
"array-callback-return": "error",
|
"array-callback-return": "error",
|
||||||
@ -76,6 +64,7 @@
|
|||||||
"eqeqeq": "off",
|
"eqeqeq": "off",
|
||||||
"func-call-spacing": "off",
|
"func-call-spacing": "off",
|
||||||
"no-spaced-func": "off",
|
"no-spaced-func": "off",
|
||||||
|
"no-redeclare": "off",
|
||||||
"func-name-matching": "error",
|
"func-name-matching": "error",
|
||||||
"func-names": "off",
|
"func-names": "off",
|
||||||
"func-style": "off",
|
"func-style": "off",
|
||||||
@ -112,13 +101,13 @@
|
|||||||
"newline-per-chained-call": "off",
|
"newline-per-chained-call": "off",
|
||||||
"no-alert": "off",
|
"no-alert": "off",
|
||||||
"no-array-constructor": "error",
|
"no-array-constructor": "error",
|
||||||
"no-await-in-loop": "error",
|
"no-await-in-loop": "off",
|
||||||
"no-bitwise": "off",
|
"no-bitwise": "off",
|
||||||
"no-caller": "error",
|
"no-caller": "error",
|
||||||
"no-console": "off",
|
"no-console": "off",
|
||||||
"no-catch-shadow": "off",
|
"no-catch-shadow": "off",
|
||||||
"no-cond-assign": [
|
"no-cond-assign": [
|
||||||
"error",
|
"off",
|
||||||
"except-parens"
|
"except-parens"
|
||||||
],
|
],
|
||||||
"no-confusing-arrow": "off",
|
"no-confusing-arrow": "off",
|
||||||
@ -168,7 +157,7 @@
|
|||||||
"no-param-reassign": "off",
|
"no-param-reassign": "off",
|
||||||
"no-path-concat": "error",
|
"no-path-concat": "error",
|
||||||
"no-plusplus": "off",
|
"no-plusplus": "off",
|
||||||
"no-process-env": "error",
|
"no-process-env": "off",
|
||||||
"no-process-exit": "error",
|
"no-process-exit": "error",
|
||||||
"no-proto": "error",
|
"no-proto": "error",
|
||||||
"no-prototype-builtins": "error",
|
"no-prototype-builtins": "error",
|
||||||
@ -195,10 +184,11 @@
|
|||||||
"no-underscore-dangle": "off",
|
"no-underscore-dangle": "off",
|
||||||
"no-unmodified-loop-condition": "error",
|
"no-unmodified-loop-condition": "error",
|
||||||
"no-unneeded-ternary": "off",
|
"no-unneeded-ternary": "off",
|
||||||
"no-unused-vars": "off",
|
"no-unused-vars": "error",
|
||||||
"no-unused-expressions": "off",
|
"no-unused-expressions": "off",
|
||||||
"no-use-before-define": "off",
|
"no-use-before-define": "off",
|
||||||
"no-useless-call": "error",
|
"no-useless-call": "error",
|
||||||
|
"no-useless-catch": "off",
|
||||||
"no-useless-computed-key": "error",
|
"no-useless-computed-key": "error",
|
||||||
"no-useless-concat": "off",
|
"no-useless-concat": "off",
|
||||||
"no-useless-constructor": "error",
|
"no-useless-constructor": "error",
|
||||||
@ -213,7 +203,7 @@
|
|||||||
"object-curly-newline": "off",
|
"object-curly-newline": "off",
|
||||||
"object-curly-spacing": "off",
|
"object-curly-spacing": "off",
|
||||||
"object-property-newline": [
|
"object-property-newline": [
|
||||||
"error",
|
"off",
|
||||||
{
|
{
|
||||||
"allowMultiplePropertiesPerLine": true
|
"allowMultiplePropertiesPerLine": true
|
||||||
}
|
}
|
||||||
@ -251,7 +241,7 @@
|
|||||||
"rest-spread-spacing": "error",
|
"rest-spread-spacing": "error",
|
||||||
"semi": "off",
|
"semi": "off",
|
||||||
"semi-spacing": "off",
|
"semi-spacing": "off",
|
||||||
"sort-imports": "error",
|
"sort-imports": "off",
|
||||||
"sort-keys": "off",
|
"sort-keys": "off",
|
||||||
"sort-vars": "off",
|
"sort-vars": "off",
|
||||||
"space-before-blocks": "off",
|
"space-before-blocks": "off",
|
||||||
@ -262,7 +252,7 @@
|
|||||||
"spaced-comment": "off",
|
"spaced-comment": "off",
|
||||||
"strict": "off",
|
"strict": "off",
|
||||||
"symbol-description": "error",
|
"symbol-description": "error",
|
||||||
"template-curly-spacing": "error",
|
"template-curly-spacing": "off",
|
||||||
"unicode-bom": [
|
"unicode-bom": [
|
||||||
"error",
|
"error",
|
||||||
"never"
|
"never"
|
||||||
|
28
.github/CONTRIBUTING.md
vendored
Normal file
28
.github/CONTRIBUTING.md
vendored
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
# Contribution Guidelines
|
||||||
|
|
||||||
|
Thanks for contributing to [Converse.js](https://conversejs.org)
|
||||||
|
|
||||||
|
## Support questions
|
||||||
|
|
||||||
|
The Github issue tracker is used for bug reports and feature requests, not for general tech support.
|
||||||
|
|
||||||
|
For support, you can join our [XMPP webchat](https://inverse.chat/#converse/room?jid=discuss@conference.conversejs.org).
|
||||||
|
Instead of the webchat, you can also open the room in your XMPP client, [click here](xmpp://discuss@conference.conversejs.org?join).
|
||||||
|
|
||||||
|
You can also ask questions on [StackOverflow](https://stackoverflow.com/questions/tagged/converse.js)
|
||||||
|
|
||||||
|
## Contributing Code
|
||||||
|
|
||||||
|
Please follow the usual Github workflow. Create a fork of this repository, make your changes and then submit a pull request.
|
||||||
|
|
||||||
|
### Before submitting a pull request
|
||||||
|
|
||||||
|
Please read the [style guide](https://conversejs.org/docs/html/style_guide.html) and make sure that your code follows it.
|
||||||
|
|
||||||
|
### Add tests for your bugfix or feature
|
||||||
|
|
||||||
|
Add a test for any bug fixed or feature added.
|
||||||
|
|
||||||
|
Tests can be found in various `./tests` folders in the Converse source code.
|
||||||
|
|
||||||
|
To run the tests, you can run `make check` on Linux and Mac, or `./node_modules/bin/karma start karma.conf` on Windows.
|
37
.github/CONTRIBUTING.rst
vendored
37
.github/CONTRIBUTING.rst
vendored
@ -1,37 +0,0 @@
|
|||||||
=======================
|
|
||||||
Contribution Guidelines
|
|
||||||
=======================
|
|
||||||
|
|
||||||
Thanks for contributing to `Converse.js <https://conversejs.org>`_.
|
|
||||||
|
|
||||||
Support questions
|
|
||||||
=================
|
|
||||||
Please ask support and setup questions on the mailing list: conversejs@librelist.com
|
|
||||||
|
|
||||||
The issue tracker is only for bugs (i.e. issues) and feature requests.
|
|
||||||
|
|
||||||
Contributing Code
|
|
||||||
=================
|
|
||||||
Please follow the usual github workflow. Create your own local fork of this repository,
|
|
||||||
make your changes and then submit a pull request.
|
|
||||||
|
|
||||||
Before submitting a pull request
|
|
||||||
--------------------------------
|
|
||||||
|
|
||||||
Please read the `style guide <https://conversejs.org/docs/html/style_guide.html>`_ and make sure that your code follows it.
|
|
||||||
|
|
||||||
Add tests for your bugfix or feature
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
Add a test for any bug fixed or feature added. We use Jasmine
|
|
||||||
for testing.
|
|
||||||
|
|
||||||
Take a look at `tests.html <https://github.com/jcbrand/converse.js/blob/master/tests.html>`_
|
|
||||||
and the `spec files <https://github.com/jcbrand/converse.js/blob/master/tests.html>`_
|
|
||||||
to see how tests are implemented.
|
|
||||||
|
|
||||||
Check that the tests pass
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
Check that all tests complete sucessfully.
|
|
||||||
|
|
||||||
Run ``make check`` in your terminal or open `tests.html <https://github.com/jcbrand/converse.js/blob/master/tests.html>`_
|
|
||||||
in your browser.
|
|
2
.github/codeql-config.yml
vendored
Normal file
2
.github/codeql-config.yml
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
paths-ignore:
|
||||||
|
- '**/tests/*.js'
|
61
.github/dependabot.yml
vendored
Normal file
61
.github/dependabot.yml
vendored
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
version: 2
|
||||||
|
updates:
|
||||||
|
- package-ecosystem: npm
|
||||||
|
directory: "/"
|
||||||
|
schedule:
|
||||||
|
interval: daily
|
||||||
|
open-pull-requests-limit: 10
|
||||||
|
ignore:
|
||||||
|
- dependency-name: mini-css-extract-plugin
|
||||||
|
versions:
|
||||||
|
- 1.3.5
|
||||||
|
- 1.3.6
|
||||||
|
- 1.3.7
|
||||||
|
- 1.3.8
|
||||||
|
- 1.3.9
|
||||||
|
- 1.4.0
|
||||||
|
- 1.4.1
|
||||||
|
- 1.5.0
|
||||||
|
- dependency-name: css-loader
|
||||||
|
versions:
|
||||||
|
- 5.0.1
|
||||||
|
- 5.0.2
|
||||||
|
- 5.1.0
|
||||||
|
- 5.1.1
|
||||||
|
- 5.1.2
|
||||||
|
- 5.1.3
|
||||||
|
- 5.2.0
|
||||||
|
- 5.2.1
|
||||||
|
- dependency-name: y18n
|
||||||
|
versions:
|
||||||
|
- 4.0.2
|
||||||
|
- dependency-name: sinon
|
||||||
|
versions:
|
||||||
|
- 10.0.0
|
||||||
|
- 9.2.4
|
||||||
|
- dependency-name: bootstrap
|
||||||
|
versions:
|
||||||
|
- 4.6.0
|
||||||
|
- dependency-name: "@babel/plugin-proposal-nullish-coalescing-operator"
|
||||||
|
versions:
|
||||||
|
- 7.12.1
|
||||||
|
- 7.12.13
|
||||||
|
- 7.13.0
|
||||||
|
- 7.13.8
|
||||||
|
- dependency-name: webpack-cli
|
||||||
|
versions:
|
||||||
|
- 4.4.0
|
||||||
|
- 4.5.0
|
||||||
|
- dependency-name: webpack-merge
|
||||||
|
versions:
|
||||||
|
- 5.7.3
|
||||||
|
- dependency-name: xmldom
|
||||||
|
versions:
|
||||||
|
- 0.5.0
|
||||||
|
- dependency-name: urijs
|
||||||
|
versions:
|
||||||
|
- 1.19.4
|
||||||
|
- 1.19.6
|
||||||
|
- dependency-name: sass-loader
|
||||||
|
versions:
|
||||||
|
- 10.1.1
|
43
.github/workflows/codeql.yml
vendored
Normal file
43
.github/workflows/codeql.yml
vendored
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
name: "CodeQL"
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ "master" ]
|
||||||
|
pull_request:
|
||||||
|
branches: [ "master" ]
|
||||||
|
schedule:
|
||||||
|
- cron: "11 18 * * 6"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
analyze:
|
||||||
|
name: Analyze
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
actions: read
|
||||||
|
contents: read
|
||||||
|
security-events: write
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
language: [ javascript ]
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Initialize CodeQL
|
||||||
|
uses: github/codeql-action/init@v2
|
||||||
|
with:
|
||||||
|
config-file: ./.github/codeql-config.yml
|
||||||
|
languages: ${{ matrix.language }}
|
||||||
|
queries: +security-and-quality
|
||||||
|
|
||||||
|
- name: Autobuild
|
||||||
|
uses: github/codeql-action/autobuild@v2
|
||||||
|
if: ${{ matrix.language == 'javascript' }}
|
||||||
|
|
||||||
|
- name: Perform CodeQL Analysis
|
||||||
|
uses: github/codeql-action/analyze@v2
|
||||||
|
with:
|
||||||
|
category: "/language:${{ matrix.language }}"
|
34
.github/workflows/karma-tests.yml
vendored
Normal file
34
.github/workflows/karma-tests.yml
vendored
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
# This workflow will do a clean installation of node dependencies, cache/restore them, build the source code and run tests across different versions of node
|
||||||
|
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions
|
||||||
|
|
||||||
|
name: CI Tests
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ master ]
|
||||||
|
pull_request:
|
||||||
|
branches: [ master ]
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
env:
|
||||||
|
DISPLAY: :99.0
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
node-version: [18.x]
|
||||||
|
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Use Node.js ${{ matrix.node-version }}
|
||||||
|
uses: actions/setup-node@v2
|
||||||
|
with:
|
||||||
|
node-version: ${{ matrix.node-version }}
|
||||||
|
cache: 'npm'
|
||||||
|
- name: Run Karma tests
|
||||||
|
uses: GabrielBB/xvfb-action@v1
|
||||||
|
with:
|
||||||
|
run: make check ARGS=--single-run
|
4
.gitignore
vendored
4
.gitignore
vendored
@ -1,6 +1,9 @@
|
|||||||
# Distribution directory
|
# Distribution directory
|
||||||
dist
|
dist
|
||||||
|
|
||||||
|
# conversejs/media repo checkout
|
||||||
|
media
|
||||||
|
|
||||||
# Editor fluff
|
# Editor fluff
|
||||||
*~
|
*~
|
||||||
.sw?
|
.sw?
|
||||||
@ -46,7 +49,6 @@ converse-logs/*.html
|
|||||||
|
|
||||||
Backbone.Overview
|
Backbone.Overview
|
||||||
tags
|
tags
|
||||||
stamp-npm
|
|
||||||
transpile
|
transpile
|
||||||
|
|
||||||
# Sphinx
|
# Sphinx
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
{
|
{
|
||||||
"arrowParens": "avoid",
|
"printWidth": 120,
|
||||||
"printWidth": 100,
|
|
||||||
"quoteProps": "preserve",
|
"quoteProps": "preserve",
|
||||||
"singleQuote": true,
|
"singleQuote": true,
|
||||||
"spaceBeforeFunctionParen": true,
|
"spaceBeforeFunctionParen": true,
|
||||||
|
12
.travis.yml
12
.travis.yml
@ -1,12 +0,0 @@
|
|||||||
dist: xenial
|
|
||||||
language: node_js
|
|
||||||
cache:
|
|
||||||
directories:
|
|
||||||
- node_modules
|
|
||||||
addons:
|
|
||||||
chrome: stable
|
|
||||||
node_js:
|
|
||||||
- "10"
|
|
||||||
install: make stamp-npm
|
|
||||||
before_script: make serve_bg
|
|
||||||
script: make check
|
|
36541
3rdparty/libsignal-protocol.js
vendored
Normal file
36541
3rdparty/libsignal-protocol.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
3rdparty/libsignal-protocol.min.js
vendored
Normal file
1
3rdparty/libsignal-protocol.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
477
CHANGES.md
477
CHANGES.md
@ -1,6 +1,483 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## 10.1.6 (2023-08-31)
|
||||||
|
|
||||||
|
- #3246: Badge color not responsive to dark theme
|
||||||
|
- Fix a GIF rendering bug that causes a memory overflow
|
||||||
|
|
||||||
|
## 10.1.5 (2023-06-29)
|
||||||
|
|
||||||
|
- #3209: Fix error when importing the `converse` global with bootstrap modal API
|
||||||
|
- #3207: `.po` translation files weren't included in previous release
|
||||||
|
- Updated Galician and Portuguese translations
|
||||||
|
|
||||||
|
## 10.1.4 (2023-06-25)
|
||||||
|
|
||||||
|
- Fix `dist` directory not included in NPM package
|
||||||
|
|
||||||
|
## 10.1.3 (2023-06-23)
|
||||||
|
|
||||||
|
- Add the ability to set roles and affiliations via the MUC occupant modal
|
||||||
|
- Fix `isOnlyEmojis is not a function` when using only `@converse/headless`
|
||||||
|
- Fix `autojoin` checkbox state in MUC bookmark form
|
||||||
|
- Remove call to `api.confirm` in `@converse/headless`
|
||||||
|
- Generate TypeScript declaration files into `dist/types`
|
||||||
|
- Removed documentation about the no longer implemented `fullname` option.
|
||||||
|
- Updated translations
|
||||||
|
- #3123: Contacts do not show up online until chat is opened with them.
|
||||||
|
- #3156: Add function to prevent drag stutter effect over iframes when resize is called in overlay mode
|
||||||
|
- #3165: Use configured nickname in profile view in the control box
|
||||||
|
|
||||||
|
- New config option [stanza_timeout](https://conversejs.org/docs/html/configuration.html#stanza-timeout)
|
||||||
|
|
||||||
|
## 10.1.2 (2023-02-17)
|
||||||
|
|
||||||
|
- #1490: Busy-loop when fetching registration form fails
|
||||||
|
- #1556: Can't switch to registration form afrer logout
|
||||||
|
- #3137: Various UI/UX bugfixes regarding the registration form
|
||||||
|
- XEP-0437: Room Activity Indicators (RAI) optimizations
|
||||||
|
|
||||||
|
## 10.1.1 (2023-02-15)
|
||||||
|
|
||||||
|
- #1851: Sort open groupchats alphabetically
|
||||||
|
- #2240: Ad-Hoc command result form not shown
|
||||||
|
- #3128: Second bookmarked room shows info of the first one
|
||||||
|
- Bugfix. Uyghur translations weren't loading
|
||||||
|
|
||||||
|
## 10.1.0 (2023-01-07)
|
||||||
|
|
||||||
|
- #326: Add the ability to reset your password
|
||||||
|
- #2759: Don't automatically log in again if the user manually logged out
|
||||||
|
- #2816: Chat highlight behaves odd
|
||||||
|
- #2925: File upload is not always enabled
|
||||||
|
- #3001: Add option to save SCRAM details and to use them to stay logged in upon reload
|
||||||
|
- Add a "Add to Contacts" button in MUC occupant modals
|
||||||
|
- Updated translations and add support for Uyghur
|
||||||
|
|
||||||
|
- New config option [reuse_scram_keys](https://conversejs.org/docs/html/configuration.html#reuse-scram-keys)
|
||||||
|
|
||||||
|
## 10.0.0 (2022-10-30)
|
||||||
|
|
||||||
|
- Update to Strophe.js 1.6.0 which adds support for SCRAM-SHA-256 and SCRAM-SHA-512
|
||||||
|
- Don't automatically convert OpenStreetMap URLs into `geo:` URIs in sent messages
|
||||||
|
- Remove the `allow_chat_pending_contacts` config option.
|
||||||
|
- Show roster contacts with `subscription` set to `none`
|
||||||
|
- Remove the `converse-carbons` plugin and make carbons part of the `converse-chat` plugin.
|
||||||
|
- Remove the `message_carbons` configuration setting. Carbons are now always enabled.
|
||||||
|
- Move the `converse-oauth` plugin to the [community-plugins](https://github.com/conversejs/community-plugins)
|
||||||
|
- Don't apply message corrections when the MUC occupant-id doesn't match.
|
||||||
|
- Update `nick` attribute on ChatRoom when user nickname changes
|
||||||
|
- Restrict editing of MUC messages to ones with the same XEP-0421 occupant ID
|
||||||
|
- Remove unfurls for links removed in a subsequent message correction
|
||||||
|
- Bookmarks now appear in a modal and the `hide_open_bookmarks` config setting has been removed.
|
||||||
|
- #1004: Stop using fonts to render icons and use SVG instead
|
||||||
|
- #2797: Weird unicode characters rendering outside of line-height
|
||||||
|
- #2870: Fix for multiple URLs to be linkified when sent together in chat and adds a test for this.
|
||||||
|
- #2879: Quotes, lines not aligned to the first line
|
||||||
|
- #2925: Fix missing disco-items in browser storage.
|
||||||
|
- #2936: Fix documentation about enable_smacks option, which is true by default.
|
||||||
|
- #2939: Data forms with a field named "username" are not displayed
|
||||||
|
- #3005: Fix MUC messages with a fallback body not rendering.
|
||||||
|
- #3007: Fix links becoming text when a message is edited
|
||||||
|
- #3018: Fix MUC icons not functioning.
|
||||||
|
- #3028: Fix encrypted media from Conversations/Quicksy not properly decrypting
|
||||||
|
|
||||||
|
|
||||||
|
## 9.1.1 (2022-05-05)
|
||||||
|
|
||||||
|
- GIFs don't render inside unfurls and cause a TypeError
|
||||||
|
- Improve how the `muc_domain` setting is populated via service discovery
|
||||||
|
- Remove local (non-requesting) contacts not returned from a full roster response
|
||||||
|
- Improve performance by looking up VCards via map instead of traversing an array
|
||||||
|
- Fix infinite loop when receiving service discovery entities with a circular dependency
|
||||||
|
- #1130: Display the room’s vCard-temp avatar
|
||||||
|
- #2746: Always reply to all iqs, even those not understood
|
||||||
|
- #2794: Some display problems with mobile view mode
|
||||||
|
- #2868: Selected emoji is inserted into all open chat boxes
|
||||||
|
|
||||||
|
Remove the very old and largely unused config option `allow_muc`.
|
||||||
|
If you don't want MUC support, you can add `'converse-muc'` to the
|
||||||
|
`blacklisted_plugins` setting.
|
||||||
|
|
||||||
|
## 9.1.0 (2022-04-02)
|
||||||
|
|
||||||
|
- Updated translations: af, ar, es, eu, fr, gl, he, lt
|
||||||
|
- Increased stanza timeout from 10 to 20 seconds
|
||||||
|
- Replace various font icons with SVG icons
|
||||||
|
- Fix bug where MUC config wasn't persisted across page loads
|
||||||
|
- Add support for calling the IndexedDB `getAll` method to speed up fetching models from storage.
|
||||||
|
- #1761: Add a new dark theme based on the [Dracula](https://draculatheme.com/) theme
|
||||||
|
- #2557: Allow OMEMO encrypted messages to be edited
|
||||||
|
- #2627: Spoiler toggles only after switching to another tab and back
|
||||||
|
- #2733: Fix OMEMO race condition related to automatic reconnection and SMACKS
|
||||||
|
- #2733: Wait for decrypted/parsed message before queuing to UI
|
||||||
|
- #2751: Media not rendered when Converse runs in a browser extension
|
||||||
|
- #2754: Navigation keys doesn't work anymore into chat input message
|
||||||
|
- #2781: Flashing error when connecting to a room
|
||||||
|
- #2786: Fix webpack configuration not working on Windows OS
|
||||||
|
- #2788: `TypeError` when trying to use `@converse/headless`
|
||||||
|
- #2789: Implement new hook `parseMessageForCommands` for plugins to add custom commands
|
||||||
|
- #2814: Links are mangled on open/copy
|
||||||
|
- #2822: Singleton doesn't work in overlayed view mode
|
||||||
|
|
||||||
|
- New config option [show_connection_url_input](https://conversejs.org/docs/html/configuration.html#show-connection-url-input)
|
||||||
|
|
||||||
|
## 9.0.0 (2021-11-26)
|
||||||
|
|
||||||
|
- Compress new avatar images before uploading them
|
||||||
|
- Add initial support for XEP-0421 occupant Ids.
|
||||||
|
- Use more specific types for form fields based on XEP-0122
|
||||||
|
- Fix trimming of chats in overlayed view mode
|
||||||
|
- OMEMO bugfix: Always create device session based on real JID.
|
||||||
|
- If `auto_register_muc_nickname` is set, make sure to register when the user changes current nick.
|
||||||
|
- #1322: Display occupants’ avatars in the occupants list
|
||||||
|
- #1419: Clicking on avatar should show bigger version
|
||||||
|
- #1426: Don't fetch member list if not affiliated
|
||||||
|
- #2423: Could not find dependency "converse-controlbox" for plugin "converse-muc"
|
||||||
|
- #2640: Add `beforeFetchLoginCredentials` hook
|
||||||
|
- #2647: Singleton mode doesn't work
|
||||||
|
- #2650: Clicking on occupant in sidebar should add nickname to textarea
|
||||||
|
- #2683: Show error messages that don't refer to specific chat messages
|
||||||
|
- #2704: Send button doesn't work in a multi-user chat
|
||||||
|
- #2715: Singleton + fullscreen mode styling issue
|
||||||
|
- #2718: Message is not displayed if it contains an invalid URL
|
||||||
|
- #2725: Send new presence status to all connected MUCs
|
||||||
|
- #2728: Not sending headers with upload request
|
||||||
|
- #2733: OMEMO Messages received while client closed not decrypted
|
||||||
|
|
||||||
|
- Emit a `change` event when a configuration setting changes
|
||||||
|
- 3 New configuration settings:
|
||||||
|
- [render_media](https://conversejs.org/docs/html/configuration.html#render-media)
|
||||||
|
- [allowed_audio_domains](https://conversejs.org/docs/html/configuration.html#allowed-audio-domains)
|
||||||
|
- [allowed_video_domains](https://conversejs.org/docs/html/configuration.html#allowed-video-domains)
|
||||||
|
- [allowed_image_domains](https://conversejs.org/docs/html/configuration.html#allowed-image-domains)
|
||||||
|
|
||||||
|
Three config settings have been obsoleted:
|
||||||
|
- embed_audio
|
||||||
|
- embed_video
|
||||||
|
- show_images_inline
|
||||||
|
- muc_show_ogp_unfurls
|
||||||
|
|
||||||
|
### Breaking Changes
|
||||||
|
|
||||||
|
Configuration settings are no longer available on the `_converse` object.
|
||||||
|
Instead, use `api.settings.get` and `api.settings.set`.
|
||||||
|
|
||||||
|
|
||||||
|
## 8.0.1 (2021-09-09)
|
||||||
|
|
||||||
|
- #2326: 404 for asset /logo/conversejs-filled.svg
|
||||||
|
- #2628: Open groupchats toggle emits an error
|
||||||
|
- #2629: OMEMO button tooltip is wrong in private chat
|
||||||
|
- #2633: Excessive logging of warning
|
||||||
|
- #2634: Image previews not loading when not serving Converse locally
|
||||||
|
- #2636: Don't fail when setting up a new XEP-0198 managed stream and `_converse.session` is undefined
|
||||||
|
- Bugfix: Don't show minimized chats when logged out
|
||||||
|
|
||||||
|
## 8.0.0 (2021-09-03)
|
||||||
|
|
||||||
|
- Requires Node 12 or above
|
||||||
|
|
||||||
|
### Issues and features
|
||||||
|
|
||||||
|
- #1083: Add support for XEP-0393 Message Styling
|
||||||
|
- #1182: Add support for XEP-0454 OMEMO Media sharing
|
||||||
|
- #1823: New config options [mam_request_all_pages](https://conversejs.org/docs/html/configuration.html#mam-request-all-pages)
|
||||||
|
- #2275: Allow punctuation to immediately precede a mention
|
||||||
|
- #2348: `auto_join_room` not showing the room in `fullscreen` `view_mode`.
|
||||||
|
- #2400: Fixes infinite loop bug when appending .png to allowed image urls
|
||||||
|
- #2409: Integrate App Badging API for unread messages
|
||||||
|
- #2464: New configuration setting [allow_url_history_change](https://conversejs.org/docs/html/configuration.html#allow-url-history-change)
|
||||||
|
- #2497: Bugfix /nick command is not working
|
||||||
|
- Add a Description Of A Project (DOAP) file
|
||||||
|
- Add ability to deregister nickname when closing a MUC by setting `auto_register_muc_nickname` to `'unregister'`.
|
||||||
|
- Add support for XEP-0437 Room Activity Indicators see [muc-subscribe-to-rai](https://conversejs.org/docs/html/configuration.html#muc-subscribe-to-rai)
|
||||||
|
- Add support for rendering unfurls via [mod_ogp](https://modules.prosody.im/mod_ogp.html)
|
||||||
|
- Bugfix: Connection protocol not updated based on XEP-0156 connection methods
|
||||||
|
- Bugfix: Use real JID in XEP-0372 references only when the MUC is non-anonymous
|
||||||
|
- Bugfix: `null` inserted by emoji picker and can't switch between skintones
|
||||||
|
- File structure reordering: All plugins are now in `./plugins` folders.
|
||||||
|
- Show a gap placeholder when there are gaps in the chat history. The user can click these to fill the gaps.
|
||||||
|
- Use the MUC stanza id when sending XEP-0333 markers
|
||||||
|
- Add support for pausing Gif images
|
||||||
|
- Add limited support for XEP-0316 MUC notifications
|
||||||
|
|
||||||
|
### New configuration setings
|
||||||
|
|
||||||
|
- [show_tab_notifications](https://conversejs.org/docs/html/configuration.html#show-tab-notifications)
|
||||||
|
- [muc_clear_messages_on_leave](https://conversejs.org/docs/html/configuration.html#muc-clear-messages-on-leave)
|
||||||
|
- [send_chat_markers](https://conversejs.org/docs/html/configuration.html#send-chat-markers)
|
||||||
|
- [muc_show_ogp_unfurls](https://conversejs.org/docs/html/configuration.html#muc-show-ogp-unfurls)
|
||||||
|
- [prune-messages-above](https://conversejs.org/docs/html/configuration.html#prune-messages-above)
|
||||||
|
- [pruning_behavior](https://conversejs.org/docs/html/configuration.html#pruning-behavior)
|
||||||
|
|
||||||
|
### New hooks and events
|
||||||
|
|
||||||
|
- New hook: [getMessageActionButtons](https://conversejs.org/docs/html/api/-_converse.html#event:getMessageActionButtons)
|
||||||
|
- New hook: [shouldNotifyOfGroupMessage](https://conversejs.org/docs/html/api/-_converse.html#event:shouldNotifyOfGroupMessage)
|
||||||
|
- New hook: [presenceConstructed](https://conversejs.org/docs/html/api/-_converse.html#event:presenceConstructed)
|
||||||
|
- New event: [historyPruned](https://conversejs.org/docs/html/api/-_converse.html#event:historyPruned)
|
||||||
|
|
||||||
|
### Breaking Changes
|
||||||
|
|
||||||
|
The default persistent store, set via the [persistent_store](https://conversejs.org/docs/html/configuration.html#persistent-store),
|
||||||
|
is now IndexedDB. This main advantage of using IndexedDB is that it doesn't
|
||||||
|
have a fixed size limit. We don't provide a tool to migrate data from
|
||||||
|
localStorage to IndexedDB. For almost all data this is not a problem since
|
||||||
|
the data can be fetched again from the XMPP server. However,
|
||||||
|
decrypted OMEMO messages cannot be fetched again from the server, since the
|
||||||
|
double ratchet makes it impossible to again decrypt them. This means your
|
||||||
|
decrypted OMEMO history will be lost in the transition.
|
||||||
|
|
||||||
|
The [afterMessageBodyTransformed](https://conversejs.org/docs/html/api/-_converse.html#event:afterMessageBodyTransformed) and [beforeMessageBodyTransformed](https://conversejs.org/docs/html/api/-_converse.html#event:beforeMessageBodyTransformed) events now has a different signatures.
|
||||||
|
When leaving a MUC, the message history is deleted. This means that decrypted
|
||||||
|
OMEMO messages are gone and cannot be recovered on that device. See [muc_clear_messages_on_leave](https://conversejs.org/docs/html/configuration.html#muc-clear-messages-on-leave).
|
||||||
|
|
||||||
|
Removed events:
|
||||||
|
* `bookmarkViewsInitialized`
|
||||||
|
* `chatBoxInsertedIntoDOM`
|
||||||
|
* `contactStatusMessageChanged`
|
||||||
|
* `messageSend` (use `sendMessage` instead)
|
||||||
|
* `rosterGroupsFetched`
|
||||||
|
|
||||||
|
The `chatBoxClosed`, `chatBoxMaximized` and `chatBoxMinimized` events now have the `model` as
|
||||||
|
payload and not the `view`.
|
||||||
|
|
||||||
|
The `api.chatviews` and `api.roomviews` API groupings and methods have been
|
||||||
|
removed. The original "views" don't really exist anymore, the UI is now composed web
|
||||||
|
components which should update reactively based on changes made on the models.
|
||||||
|
|
||||||
|
## 7.0.6 (2021-06-11)
|
||||||
|
|
||||||
|
- #2500: Wrong assignment in OMEMO code
|
||||||
|
|
||||||
|
## 7.0.5 (2021-03-16)
|
||||||
|
|
||||||
|
- #2377: The @converse/headless NPM package is missing the dist directory, causing import errors
|
||||||
|
- #2396: @converse/headless wrongly depends on `CustomElement` from the view layer
|
||||||
|
- #2381: Converse does not reflect the browser language
|
||||||
|
|
||||||
|
## 7.0.4 (2020-12-09)
|
||||||
|
|
||||||
|
Bugfix: Set protocol after discovering connection methods
|
||||||
|
|
||||||
|
Otherwise if an endpoint was passed in with `converse.initialize`, then
|
||||||
|
that endpoint's protocol is (potentially wrongly) used.
|
||||||
|
|
||||||
|
## 7.0.3 (2020-12-02)
|
||||||
|
|
||||||
|
- Bugfix: `null` inserted by emoji picker and can't switch between skintones
|
||||||
|
|
||||||
|
|
||||||
|
## 7.0.2 (2020-11-23)
|
||||||
|
|
||||||
|
- Updated translations: de, nb, gl, tr
|
||||||
|
- Still more necessary files not included in the 7.0.1 NPM package, causing `Module not found` errors.
|
||||||
|
- #2337: Newly opened headline chat isn't hidden by default
|
||||||
|
|
||||||
|
## 7.0.1 (2020-11-19)
|
||||||
|
|
||||||
|
- Updated translations: de, es, fi, fr, gl, hu, nb_NO, oc, pl, pt, pt_BR, ru, tr, uk, zh
|
||||||
|
- #2328: Honor `use_system_emojis` in emoji-picker
|
||||||
|
- Not all template/*.js files were included in the 7.0.0 NPM package, causing:
|
||||||
|
`Module not found: Error: Can't resolve 'templates/*.js'`
|
||||||
|
|
||||||
|
## 7.0.0 (2020-11-18)
|
||||||
|
|
||||||
|
*Note for plugin authors:*
|
||||||
|
configuration settings should now be accessed via `_converse.api.settings.get` and not directly on the `_converse` object.
|
||||||
|
Soon we'll deprecate the latter, so prepare now.
|
||||||
|
|
||||||
|
- #515 Add support for XEP-0050 Ad-Hoc commands
|
||||||
|
- #2231: add sort_by_query and remove sort_by_length
|
||||||
|
- #1313: Stylistic improvements to the send button
|
||||||
|
- #1481: MUC OMEMO: Error No record for device
|
||||||
|
- #1490: Busy-loop when fetching registration form fails
|
||||||
|
- #1535: Add option to destroy a MUC
|
||||||
|
- #1715: Update chat state notification after receiving a message correction.
|
||||||
|
- #1793: Send button doesn't appear in Firefox in 1:1 chats
|
||||||
|
- #1820: Set focus on jid field after controlbox is loaded
|
||||||
|
- #1822: Don't log error if user has no bookmarks
|
||||||
|
- #1823: New config options [muc_roomid_policy](https://conversejs.org/docs/html/configuration.html#muc-roomid-policy)
|
||||||
|
and [muc_roomid_policy_hint](https://conversejs.org/docs/html/configuration.html#muc-roomid-policy-hint)
|
||||||
|
- #1826: A user can now add himself as a contact
|
||||||
|
- #1839: Headline messages are shown in controlbox
|
||||||
|
- #1924: Configuring an ejabberd room fails
|
||||||
|
- #1896: Don't send receipts for messages fetched from the archive
|
||||||
|
- #1937: Editing a message removes the mentions highlight
|
||||||
|
- #1963: Mentions are visually incorrect when used in message replies
|
||||||
|
- #1999: Demarcate first unread message
|
||||||
|
- #2002: fix rendering of `muc_roomid_policy_hint`
|
||||||
|
- #2006: fix rendering of emojis in case `use_system_emojis == false`
|
||||||
|
- #2028: Implement XEP-0333 `displayed` chat marker
|
||||||
|
- #2101: Improve contrast of text in control box
|
||||||
|
- #2187: Avoid merging initial settings with themselves every time settings are extended.
|
||||||
|
- #2199: Fix BOSH session restore.
|
||||||
|
- #2201: added html to converse.env
|
||||||
|
- #2213: added CustomElement to converse.env
|
||||||
|
- #2220: fix rendering of emojis in case `use_system_emojis == false` (again).
|
||||||
|
- #2092: fixes room list update loop when having the `locked_muc_domain` truthy or `'hidden'`
|
||||||
|
- #2259: Rename configuration setting `muc_show_join_leave` to `muc_show_info_messages`. Now accepts a list of events to show instead of a boolean.
|
||||||
|
- #2285: Rename config option `muc_hats_from_vcard` to [muc_hats](https://conversejs.org/docs/html/configuration.html#muc-hats). Now accepts a list instead of a boolean and allows for more flexible choices regarding user badges.
|
||||||
|
- #2300: Fix message reorder issue after message correction.
|
||||||
|
- #2304: Custom emojis (stickers) images not shown
|
||||||
|
- #2307: BootstrapModal is not accessible to plugins
|
||||||
|
- #2308: Allow getHats method to be overriden in the `overrides` object in plugins.
|
||||||
|
- #2321: When Converse runs inside a browser extension, enable browser sync and local storage for persistent storage
|
||||||
|
- #1250: Change favicon color when unread messages
|
||||||
|
- Updated translations: de, es, fi, fr, gl, hu, nb_NO, oc, pl, pt, pt_BR, ru, tr, uk, zh
|
||||||
|
- The `trusted` configuration setting has been removed in favor of two new settings:
|
||||||
|
[allow_user_trust_override](https://conversejs.org/docs/html/configuration.html#allow-user-trust-override)
|
||||||
|
[clear_cache_on_logout](https://conversejs.org/docs/html/configuration.html#clear-cache-on-logout)
|
||||||
|
- The `persistent_store` setting can now also be set to `sessionStorage`
|
||||||
|
- The `api.archive.query` method no longer accepts an RSM instance as argument.
|
||||||
|
- The plugin `converse-uniview` has been removed and its functionality merged into `converse-chatboxviews`
|
||||||
|
- Removed the mockups from the project. Recommended to use tests instead.
|
||||||
|
- The API method `api.settings.update` has been deprecated in favor of `api.settings.extend`.
|
||||||
|
- The API methods under the `api.user.status` namespace are now asynchronous and need to be `await`ed.
|
||||||
|
- Filter roster contacts via all available information (JID, nickname and VCard full name).
|
||||||
|
- Allow ignoring of bootstrap modules at build using environment variable. For xample: `export BOOTSTRAP_IGNORE_MODULES="Modal,Dropdown" && make dist`
|
||||||
|
- Bugfix. Handle stanza that clears the MUC subject
|
||||||
|
- Replace Backbone with [Skeletor](https://github.com/skeletorjs/skeletor)
|
||||||
|
- Start using [lit-html](https://lit-html.polymer-project.org/) instead of lodash for templating.
|
||||||
|
- [muc_fetch_members](https://conversejs.org/docs/html/configuration.html#muc-fetch-members) now also accepts an array of affiliations to fetch.
|
||||||
|
- Remove the configuration setting `muc_show_join_leave_status`. The optional status message is no longer shown at all.
|
||||||
|
- Support for XEP-0156 is now enabled by default (which means that
|
||||||
|
[discover_connection_methods](https://conversejs.org/docs/html/configuration.html#discover-connection-methods) now has a default value of `true`).
|
||||||
|
- [show_send_button](https://conversejs.org/docs/html/configuration.html#show-send-button) now has a default value of `true`.
|
||||||
|
- The [api.confirm](https://conversejs.org/docs/html/api/-_converse.api.html#.confirm) method now accepts a list of fields and returns the filled in list upon confirmation.
|
||||||
|
- New config option [allow_adhoc_commands](https://conversejs.org/docs/html/configuration.html#allow-adhoc-commands)
|
||||||
|
- New config option [modtools_disable_assign](https://conversejs.org/docs/html/configuration.html#modtools-disable-assign)
|
||||||
|
- New config option [modtools_disable_query](https://conversejs.org/docs/html/configuration.html#modtools-disable-query)
|
||||||
|
- New config option [muc_hats_from_vcard](https://conversejs.org/docs/html/configuration.html#muc-hats-from-vcard).
|
||||||
|
- New config option [muc_send_probes](https://conversejs.org/docs/html/configuration.html#muc-send-probes).
|
||||||
|
- New config option [notify_nicknames_without_references](https://conversejs.org/docs/html/configuration.html#notify-nicknames-without-references).
|
||||||
|
- New config option [show_message_avatar](https://conversejs.org/docs/html/configuration.html#show-message-avatar).
|
||||||
|
- New public API [converse.insertInto](https://conversejs.org/docs/html/api/converse.html#.insertInto)
|
||||||
|
|
||||||
|
## 6.0.0 (2020-01-09)
|
||||||
|
|
||||||
|
- [enable_smacks](https://conversejs.org/docs/html/configuration.html#enable-smacks) is now set to `true` by default.
|
||||||
|
- Refactor some presence and status handling code from `converse-core` into `@converse/headless/converse-status`.
|
||||||
|
- It's now possible to navigate the emoji-picker via the keyboard arrow keys.
|
||||||
|
|
||||||
|
- Add support for [notifications about affiliation change for users not in a room](https://xmpp.org/extensions/xep-0045.html#example-196)
|
||||||
|
- Add support for [XEP-0424 Message Retraction](http://xmpps.org/extensions/xep-0424.html)
|
||||||
|
- Add support for [XEP-0425 Message Moderation](http://xmpps.org/extensions/xep-0425.html)
|
||||||
|
|
||||||
|
- New API [\_converse.api.headlines](https://conversejs.org/docs/html/api/-_converse.api.headlines.html#.get)
|
||||||
|
- New config option [allow_message_retraction](https://conversejs.org/docs/html/configuration.html#allow-message-retraction)
|
||||||
|
- New config option [muc-show-logs-before-join](https://conversejs.org/docs/html/configuration.html#muc-show-logs-before-join)
|
||||||
|
- New config option [muc_mention_autocomplete_filter](https://conversejs.org/docs/html/configuration.html#muc-mention-autocomplete-filter)
|
||||||
|
- New config option [muc_mention_autocomplete_show_avatar](https://conversejs.org/docs/html/configuration.html#muc-mention-autocomplete-show-avatar)
|
||||||
|
- New config option [persistent_store](https://conversejs.org/docs/html/configuration.html#persistent-store)
|
||||||
|
|
||||||
|
- Initial support for sending custom emojis. Currently only between Converse
|
||||||
|
instances. Still working out a wire protocol for compatibility with other clients.
|
||||||
|
To add custom emojis, edit the `emojis.json` file.
|
||||||
|
|
||||||
|
- #129: Add support for [XEP-0156: Disovering Alternative XMPP Connection Methods](https://xmpp.org/extensions/xep-0156.html). Only XML is supported for now.
|
||||||
|
- #1105: Support for storing persistent data in IndexedDB
|
||||||
|
- #1253: Show contacts with unread messages at the top of the roster
|
||||||
|
- #1322 Display occupants’ avatars in the occupants list
|
||||||
|
- #1640: Add the ability to resize the occupants sidebar in MUCs
|
||||||
|
- #1666: Allow scrolling of the OMEMO fingerprints list
|
||||||
|
- #1691: Fix `collection.chatbox is undefined` errors
|
||||||
|
- #1767: `credentials_url` is not called when logging out and then in again
|
||||||
|
- #1764: Incorrect URI encoding in "mention" references
|
||||||
|
- #1772: `_converse.api.contact.add(jid, nick)` fails, says not a function
|
||||||
|
- #1791: `auto_focus` set to `false` is ignored when switching back to a MUC
|
||||||
|
- #1792: Fix: modals don't have scrollbars
|
||||||
|
- #1796: Don't show "back" arrow navigation (on mobile) in the chat header when in `singleton` mode
|
||||||
|
- #1821: Errors caused by malformed URLs are now handled
|
||||||
|
- #1819: Click on a desktop notification now opens corresponding chat.
|
||||||
|
- #1836: MUC invites appear to come from the MUC name
|
||||||
|
|
||||||
|
### Breaking changes
|
||||||
|
|
||||||
|
- The ``debug`` configuration option has been replaced with [loglevel](https://conversejs.org/docs/html/configuration.html#loglevel).
|
||||||
|
|
||||||
|
- In contrast to sessionStorage and localStorage, IndexedDB is an asynchronous database.
|
||||||
|
A lot of code that relied on database access to be synchronous had to be
|
||||||
|
updated to work with asynchronous access via promises.
|
||||||
|
|
||||||
|
- In order to add support for XEP-0156, the XMPP connection needs to be created
|
||||||
|
only once we know the JID of the user that's logging in. This means that the
|
||||||
|
[connectionInitialized](https://conversejs.org/docs/html/api/-_converse.html#event:connectionInitialized)
|
||||||
|
event now fires much later than before. Plugins that rely on `connectionInitialized`
|
||||||
|
being triggered before the user's JID has been provided will need to be updated.
|
||||||
|
|
||||||
|
- The following API methods now return promises:
|
||||||
|
* `_converse.api.chats.get`
|
||||||
|
* `_converse.api.chats.create`
|
||||||
|
* `_converse.api.rooms.get`
|
||||||
|
* `_converse.api.rooms.create`
|
||||||
|
* `_converse.api.roomviews.close`
|
||||||
|
|
||||||
|
- Changes the events:
|
||||||
|
* The `chatBoxInitialized` event now triggers when a `_converse.ChatBox` (not the view) is opened.
|
||||||
|
* Renamed the old `chatBoxInitialized` to `chatBoxViewInitialized` and trigger only for `ChatBoxView` instances.
|
||||||
|
* Renamed `chatRoomOpened` event to `chatRoomViewInitialized`
|
||||||
|
* The order of certain events have now changed: `statusInitialized` is now triggered after `initialized` and `connected` and `reconnected`.
|
||||||
|
|
||||||
|
- `_converse.api.chats.get()` now only returns one-on-one chats, not the control box or headline notifications.
|
||||||
|
- The `show_only_online_users` setting has been removed.
|
||||||
|
- `_converse.api.alert.show` is now `_converse.api.show` and instead of taking
|
||||||
|
an integer for the `type`, "info", "warn" or "error" should be passed in.
|
||||||
|
- The `converse-headline` plugin has been split up into `converse-headlines` and `converse-headlines-view`.
|
||||||
|
|
||||||
|
## 5.0.5 (2019-11-20)
|
||||||
|
|
||||||
|
- Prevent editing of sent file uploads.
|
||||||
|
- #1089: When filtering the roster for `online` users, show all non-offline users.
|
||||||
|
- #1733: New message notifications for a minimized chat stack on top of each other
|
||||||
|
- #1757: Chats are hidden behind the controlbox on mobile
|
||||||
|
- #1760: Private messages no longer received after websocket reconnect
|
||||||
|
|
||||||
|
## 5.0.4 (2019-10-08)
|
||||||
|
|
||||||
|
- New config option [allow_message_corrections](https://conversejs.org/docs/html/configuration.html#allow-message-corrections)
|
||||||
|
which, if set to `last`, limits editing of sent messages to the last message sent.
|
||||||
|
- Bugfix: Don't treat every duplicate message ID as a message correction; since some clients don't use globally unique ID's this causes false positives.
|
||||||
|
- Bugfix: process stanzas from mam one-by-one in order to correctly process message receipts
|
||||||
|
- #1712: `TypeError: plugin._features is not a function`
|
||||||
|
- #1714: Don't notify the user in case we're receiving a message delivery receipt only
|
||||||
|
- #1739: New config option [assets_path](https://conversejs.org/docs/html/configuration.html#assets-path)
|
||||||
|
which lets you set the path from which "chunks" are loaded.
|
||||||
|
|
||||||
|
## 5.0.3 (2019-09-13)
|
||||||
|
|
||||||
|
- Emit `chatBoxFocused` and `chatBoxBlurred` events for emoji picker input
|
||||||
|
- SECURITY FIX: Reject unencapsulated forwarded messages, since we don't support XEP-0297 on its own
|
||||||
|
|
||||||
|
## 5.0.2 (2019-09-11)
|
||||||
|
|
||||||
|
- `po` translations files are now loaded via Webpack. As a result the `locales_url`
|
||||||
|
config option is now removed given that the path to the locale JSON files is now
|
||||||
|
determined by the webpack config and can't be changed at runtime.
|
||||||
|
- The JSON representing emojis is now fetched asynchronously as a separate file `converse.emojis.js`.
|
||||||
|
- Webpack is now configured with a `publicPath` set to `/dist/`. This is necessary
|
||||||
|
so that chunks (such as the emojis and locales JSON files) can be fetched asynchronously.
|
||||||
|
This means that all your assets need to be served at `/dist`. If you need to set a
|
||||||
|
different path, you'll need to set `publicPath` in `webpack.config.js` to
|
||||||
|
your preferred path and then rebuild all assets (e.g. `make dist`).
|
||||||
|
- Use `listenTo` to avoid memory leaks when views get removed.
|
||||||
|
- SECURITY FIX: Ignore MAM `chat` messages not sent from yourself
|
||||||
|
- #1692 Bugfix: `TypeError: oldest_message is undefined`
|
||||||
|
- #1704: SECURITY FIX: Impersonation by misusage of groupchat carbons
|
||||||
|
- #1705: Bugfix: `this.roomspanel` is `undefined` after hibernating
|
||||||
|
|
||||||
|
## 5.0.1 (2019-08-14)
|
||||||
|
|
||||||
|
- Add a new GUI for moderator actions. You can trigger it by entering `/modtools` in a MUC.
|
||||||
|
- Reconnect if the server doesn't respond to a `ping` within 10 seconds.
|
||||||
|
- Don't query for MAM MUC messages before the cached messages have been restored (another cause of duplicate messages).
|
||||||
|
- Show an error message and option to retry when fetching of the MAM archive times out
|
||||||
|
- Bugfix: `TypeError: o.getAttribute is not a function converse-chatview.js` (can cause messages to not appear).
|
||||||
|
- #1679: Room invitation fails with singleton and random server assigned room name
|
||||||
|
|
||||||
## 5.0.0 (2019-08-08)
|
## 5.0.0 (2019-08-08)
|
||||||
|
|
||||||
- BOSH support has been moved to a plugin.
|
- BOSH support has been moved to a plugin.
|
||||||
- Support for XEP-0410 to check whether we're still present in a room
|
- Support for XEP-0410 to check whether we're still present in a room
|
||||||
- Initial support for the [CredentialsContainer](https://developer.mozilla.org/en-US/docs/Web/API/CredentialsContainer) web API
|
- Initial support for the [CredentialsContainer](https://developer.mozilla.org/en-US/docs/Web/API/CredentialsContainer) web API
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
*
|
*
|
||||||
* An XMPP chat client that runs in the browser.
|
* An XMPP chat client that runs in the browser.
|
||||||
*
|
*
|
||||||
* Version: 5.0.0
|
* Version: 10.1.6
|
||||||
*
|
*
|
||||||
* Copyright: JC Brand 2013-2018
|
* Copyright: JC Brand 2013-2018
|
||||||
* Except for 3rd party dependencies.
|
* Except for 3rd party dependencies.
|
||||||
|
238
Makefile
238
Makefile
@ -1,27 +1,22 @@
|
|||||||
# You can set these variables from the command line.
|
# You can set these variables from the command line.
|
||||||
BABEL ?= node_modules/.bin/babel
|
|
||||||
BOOTSTRAP = ./node_modules/
|
BOOTSTRAP = ./node_modules/
|
||||||
BOURBON = ./node_modules/bourbon/app/assets/stylesheets/
|
|
||||||
BUILDDIR = ./docs
|
BUILDDIR = ./docs
|
||||||
CHROMIUM ?= ./node_modules/.bin/run-headless-chromium
|
KARMA ?= ./node_modules/.bin/karma
|
||||||
CLEANCSS ?= ./node_modules/clean-css-cli/bin/cleancss --skip-rebase
|
CLEANCSS ?= ./node_modules/clean-css-cli/bin/cleancss
|
||||||
ESLINT ?= ./node_modules/.bin/eslint
|
|
||||||
HTTPSERVE ?= ./node_modules/.bin/http-server
|
HTTPSERVE ?= ./node_modules/.bin/http-server
|
||||||
HTTPSERVE_PORT ?= 8000
|
HTTPSERVE_PORT ?= 8000
|
||||||
INKSCAPE ?= inkscape
|
INKSCAPE ?= inkscape
|
||||||
INSTALL ?= install
|
INSTALL ?= install
|
||||||
JSDOC ?= ./node_modules/.bin/jsdoc
|
JSDOC ?= ./node_modules/.bin/jsdoc
|
||||||
LERNA ?= ./node_modules/.bin/lerna
|
|
||||||
OXIPNG ?= oxipng
|
OXIPNG ?= oxipng
|
||||||
PAPER =
|
PAPER =
|
||||||
PO2JSON ?= ./node_modules/.bin/po2json
|
|
||||||
RJS ?= ./node_modules/.bin/r.js
|
RJS ?= ./node_modules/.bin/r.js
|
||||||
NPX ?= ./node_modules/.bin/npx
|
NPX ?= ./node_modules/.bin/npx
|
||||||
SASS ?= ./node_modules/.bin/node-sass
|
SASS ?= ./node_modules/.bin/sass
|
||||||
SED ?= sed
|
SED ?= sed
|
||||||
SPHINXBUILD ?= ./bin/sphinx-build
|
SPHINXBUILD ?= ./bin/sphinx-build
|
||||||
SPHINXOPTS =
|
SPHINXOPTS =
|
||||||
UGLIFYJS ?= node_modules/.bin/uglifyjs
|
XGETTEXT = xgettext
|
||||||
|
|
||||||
|
|
||||||
# Internal variables.
|
# Internal variables.
|
||||||
@ -29,26 +24,25 @@ ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) ./d
|
|||||||
VERSION_FORMAT = [0-9]+\.[0-9]+\.[0-9]+
|
VERSION_FORMAT = [0-9]+\.[0-9]+\.[0-9]+
|
||||||
|
|
||||||
.PHONY: all
|
.PHONY: all
|
||||||
all: dev dist
|
all: node_modules dist
|
||||||
|
|
||||||
.PHONY: help
|
.PHONY: help
|
||||||
help:
|
help:
|
||||||
@echo "Please use \`make <target>' where <target> is one of the following:"
|
@echo "Please use \`make <target>' where <target> is one of the following:"
|
||||||
@echo ""
|
@echo ""
|
||||||
@echo " all Set up dev environment and create all builds"
|
@echo " all Set up dev environment and create all builds"
|
||||||
@echo " build Create minified builds of converse.js and all its dependencies."
|
@echo " dist Create minified builds of converse.js and all its dependencies."
|
||||||
@echo " clean Remove all NPM packages."
|
@echo " clean Remove all NPM packages."
|
||||||
@echo " check Run all tests."
|
@echo " check Run all tests."
|
||||||
@echo " css Generate CSS from the Sass files."
|
@echo " dev Set up the development environment and build unminified resources. To force a fresh start, run 'make clean' first."
|
||||||
@echo " dev Set up the development environment. To force a fresh start, run 'make clean' first."
|
@echo " devserver Set up the development environment and start the webpack dev server."
|
||||||
@echo " html Make standalone HTML files of the documentation."
|
@echo " doc Make standalone HTML files of the documentation."
|
||||||
@echo " po Generate gettext PO files for each i18n language."
|
@echo " po Generate gettext PO files for each i18n language."
|
||||||
@echo " po2json Generate JSON files from the language PO files."
|
|
||||||
@echo " pot Generate a gettext POT file to be used for translations."
|
@echo " pot Generate a gettext POT file to be used for translations."
|
||||||
@echo " release Prepare a new release of converse.js. E.g. make release VERSION=0.9.5"
|
@echo " release Prepare a new release of converse.js. E.g. make release VERSION=0.9.5"
|
||||||
@echo " serve Serve this directory via a webserver on port 8000."
|
@echo " serve Serve this directory via a webserver on port 8000."
|
||||||
@echo " serve_bg Same as \"serve\", but do it in the background"
|
@echo " serve_bg Same as \"serve\", but do it in the background"
|
||||||
@echo " stamp-npm Install NPM dependencies"
|
@echo " node_modules Install NPM dependencies"
|
||||||
@echo " watch Watch for changes on JS and scss files and automatically update the generated files."
|
@echo " watch Watch for changes on JS and scss files and automatically update the generated files."
|
||||||
@echo " logo Generate PNG logos of multiple sizes."
|
@echo " logo Generate PNG logos of multiple sizes."
|
||||||
|
|
||||||
@ -57,38 +51,43 @@ help:
|
|||||||
## Miscellaneous
|
## Miscellaneous
|
||||||
|
|
||||||
.PHONY: serve
|
.PHONY: serve
|
||||||
serve: stamp-npm
|
serve: node_modules dist
|
||||||
$(HTTPSERVE) -p $(HTTPSERVE_PORT) -c-1
|
$(HTTPSERVE) -p $(HTTPSERVE_PORT) -c-1
|
||||||
|
|
||||||
.PHONY: serve_bg
|
.PHONY: serve_bg
|
||||||
serve_bg: stamp-npm
|
serve_bg: node_modules
|
||||||
$(HTTPSERVE) -p $(HTTPSERVE_PORT) -c-1 -s &
|
$(HTTPSERVE) -p $(HTTPSERVE_PORT) -c-1 -s &
|
||||||
|
|
||||||
|
certs:
|
||||||
|
mkdir certs
|
||||||
|
cd certs && openssl req -newkey rsa:4096 -x509 -sha256 -days 365 -nodes -out chat.example.org.crt -keyout chat.example.org.key
|
||||||
|
|
||||||
########################################################################
|
########################################################################
|
||||||
## Translation machinery
|
## Translation machinery
|
||||||
|
|
||||||
GETTEXT = xgettext --language="JavaScript" --keyword=__ --keyword=___ --from-code=UTF-8 --output=locale/converse.pot dist/converse-no-dependencies.js --package-name=Converse.js --copyright-holder="Jan-Carel Brand" --package-version=5.0.0 -c
|
GETTEXT = $(XGETTEXT) --from-code=UTF-8 --language=JavaScript --keyword=__ --keyword=___ --keyword=i18n_ --force-po --output=src/i18n/converse.pot --package-name=Converse.js --copyright-holder="Jan-Carel Brand" --package-version=10.1.6 dist/converse-no-dependencies.js -c
|
||||||
|
|
||||||
|
src/i18n/converse.pot: dist/converse-no-dependencies.js
|
||||||
|
$(GETTEXT) 2>&1 > /dev/null; exit $$?;
|
||||||
|
rm dist/converse-no-dependencies.js
|
||||||
|
rm dist/tmp.css
|
||||||
|
|
||||||
.PHONY: pot
|
.PHONY: pot
|
||||||
pot: dist/converse-no-dependencies-es2015.js
|
pot: src/i18n/converse.pot
|
||||||
$(GETTEXT) 2>&1 > /dev/null; exit $$?;
|
|
||||||
|
|
||||||
.PHONY: po
|
.PHONY: po
|
||||||
po:
|
po:
|
||||||
find ./locale -maxdepth 1 -mindepth 1 -type d -exec msgmerge {}/LC_MESSAGES/converse.po ./locale/converse.pot -U \;
|
find ./src/i18n -maxdepth 1 -mindepth 1 -type d -exec msgmerge {}/LC_MESSAGES/converse.po ./src/i18n/converse.pot -U \;
|
||||||
|
|
||||||
.PHONY: po2json
|
|
||||||
po2json:
|
|
||||||
find ./locale -maxdepth 1 -mindepth 1 -type d -exec $(PO2JSON) -f jed1.x -d converse {}/LC_MESSAGES/converse.po {}/LC_MESSAGES/converse.json \;
|
|
||||||
|
|
||||||
########################################################################
|
########################################################################
|
||||||
## Release management
|
## Release management
|
||||||
|
|
||||||
.PHONY: release
|
.PHONY: version
|
||||||
release:
|
version:
|
||||||
$(SED) -i '/^_converse.VERSION_NAME =/s/=.*/= "v$(VERSION)";/' src/headless/converse-core.js
|
$(SED) -i '/^export const VERSION_NAME =/s/=.*/= "v$(VERSION)";/' src/headless/shared/constants.js
|
||||||
$(SED) -i '/Version:/s/:.*/: $(VERSION)/' COPYRIGHT
|
$(SED) -i '/Version:/s/:.*/: $(VERSION)/' COPYRIGHT
|
||||||
$(SED) -i '/Project-Id-Version:/s/:.*/: Converse.js $(VERSION)\n"/' locale/converse.pot
|
$(SED) -i '/Project-Id-Version:/s/:.*/: Converse.js $(VERSION)\n"/' src/i18n/converse.pot
|
||||||
|
$(SED) -i '/"version":/s/:.*/: "$(VERSION)",/' manifest.json
|
||||||
$(SED) -i '/"version":/s/:.*/: "$(VERSION)",/' package.json
|
$(SED) -i '/"version":/s/:.*/: "$(VERSION)",/' package.json
|
||||||
$(SED) -i '/"version":/s/:.*/: "$(VERSION)",/' src/headless/package.json
|
$(SED) -i '/"version":/s/:.*/: "$(VERSION)",/' src/headless/package.json
|
||||||
$(SED) -ri 's/--package-version=$(VERSION_FORMAT)/--package-version=$(VERSION)/' Makefile
|
$(SED) -ri 's/--package-version=$(VERSION_FORMAT)/--package-version=$(VERSION)/' Makefile
|
||||||
@ -99,23 +98,47 @@ release:
|
|||||||
$(SED) -ri 's,cdn.conversejs.org/$(VERSION_FORMAT),cdn.conversejs.org/$(VERSION),' demo/*.html
|
$(SED) -ri 's,cdn.conversejs.org/$(VERSION_FORMAT),cdn.conversejs.org/$(VERSION),' demo/*.html
|
||||||
make pot
|
make pot
|
||||||
make po
|
make po
|
||||||
make po2json
|
make dist
|
||||||
make build
|
|
||||||
npm pack
|
release-checkout:
|
||||||
|
git clone git@github.com:conversejs/converse.js.git --depth 1 --branch $(BRANCH) release-$(BRANCH)
|
||||||
|
cd release-$(BRANCH) && make dist
|
||||||
|
|
||||||
|
.PHONY: publish
|
||||||
|
publish:
|
||||||
|
make release-checkout
|
||||||
|
cd release-$(BRANCH) && npm pack && npm publish
|
||||||
|
cd release-$(BRANCH)/src/headless && npm pack && npm publish
|
||||||
|
find ./release-$(BRANCH)/ -name "converse.js-*.tgz" -exec mv {} . \;
|
||||||
|
find ./release-$(BRANCH)/src/headless -name "converse-headless-*.tgz" -exec mv {} . \;
|
||||||
|
rm -rf release-$(BRANCH)
|
||||||
|
|
||||||
.PHONY: postrelease
|
.PHONY: postrelease
|
||||||
postrelease:
|
postrelease:
|
||||||
$(SED) -i '/^_converse.VERSION_NAME =/s/=.*/= "v$(VERSION)dev";/' src/headless/converse-core.js
|
$(SED) -i '/^export const VERSION_NAME =/s/=.*/= "v$(VERSION)dev";/' src/headless/shared/constants.js
|
||||||
|
|
||||||
|
.PHONY: deploy
|
||||||
|
deploy:
|
||||||
|
git clone --branch v$(VERSION) git@github.com:conversejs/converse.js.git --depth 1 $(VERSION)
|
||||||
|
cd $(VERSION) && make node && ASSET_PATH=https://cdn.conversejs.org/$(VERSION)/dist/ make dist && make doc
|
||||||
|
cd .. && git pull && make node && ASSET_PATH=https://cdn.conversejs.org/dist/ make dist && make doc
|
||||||
|
|
||||||
########################################################################
|
########################################################################
|
||||||
## Install dependencies
|
## Install dependencies
|
||||||
|
|
||||||
$(LERNA):
|
${NVM_DIR}/nvm.sh:
|
||||||
npm install lerna
|
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash
|
||||||
|
source ~/.bashrc
|
||||||
|
|
||||||
stamp-npm: $(LERNA) package.json package-lock.json src/headless/package.json
|
.PHONY: nvm
|
||||||
npm run lerna
|
nvm: ${NVM_DIR}/nvm.sh
|
||||||
touch stamp-npm
|
|
||||||
|
.PHONY: node
|
||||||
|
node: .nvmrc
|
||||||
|
. $(HOME)/.nvm/nvm.sh && nvm install
|
||||||
|
|
||||||
|
node_modules: package.json src/headless/package.json
|
||||||
|
npm install
|
||||||
|
|
||||||
.PHONY: clean
|
.PHONY: clean
|
||||||
clean:
|
clean:
|
||||||
@ -123,44 +146,34 @@ clean:
|
|||||||
rm -rf lib bin include parts
|
rm -rf lib bin include parts
|
||||||
|
|
||||||
.PHONY: dev
|
.PHONY: dev
|
||||||
dev: stamp-npm
|
dev: node_modules
|
||||||
|
npm run dev
|
||||||
|
|
||||||
|
.PHONY: devserver
|
||||||
|
devserver: node_modules
|
||||||
|
npm run serve
|
||||||
|
|
||||||
########################################################################
|
########################################################################
|
||||||
## Builds
|
## Builds
|
||||||
|
|
||||||
.PHONY: css
|
dist/converse-no-dependencies.js: src webpack/webpack.common.js webpack/webpack.nodeps.js @converse/headless node_modules
|
||||||
css: sass/*.scss dist/converse.css dist/converse.min.css dist/website.css dist/website.min.css dist/font-awesome.css
|
npm run nodeps
|
||||||
|
|
||||||
dist/website.css:: stamp-npm sass
|
dist/converse.js:: node_modules
|
||||||
$(SASS) --source-map true --include-path $(BOURBON) --include-path $(BOOTSTRAP) sass/website.scss $@
|
npm run build
|
||||||
|
|
||||||
dist/website.min.css:: stamp-npm dist/website.css
|
dist/converse.css:: node_modules
|
||||||
|
npm run build
|
||||||
|
|
||||||
|
dist/website.css:: node_modules src/shared/styles/website.scss
|
||||||
|
$(SASS) --load-path=$(BOOTSTRAP) src/shared/styles/website.scss $@
|
||||||
|
|
||||||
|
dist/website.min.css:: node_modules dist/website.css
|
||||||
$(CLEANCSS) dist/website.css > $@
|
$(CLEANCSS) dist/website.css > $@
|
||||||
|
|
||||||
dist/font-awesome.css:: stamp-npm sass
|
|
||||||
$(SASS) --source-map true --include-path $(BOURBON) --include-path $(BOOTSTRAP) sass/font-awesome.scss $@
|
|
||||||
|
|
||||||
dist/converse.css:: stamp-npm webpack.config.js sass
|
|
||||||
npm run converse.css
|
|
||||||
|
|
||||||
dist/converse.min.css:: stamp-npm dist/converse.css
|
|
||||||
npm run converse.min.css
|
|
||||||
|
|
||||||
.PHONY: watchcss
|
|
||||||
watchcss: stamp-npm
|
|
||||||
$(NPX) webpack --type=css --mode=development --watch
|
|
||||||
|
|
||||||
.PHONY: watchjs
|
|
||||||
watchjs: stamp-npm src/headless/dist/converse-headless.js
|
|
||||||
$(NPX) webpack --mode=development --watch
|
|
||||||
|
|
||||||
.PHONY: watchjsheadless
|
|
||||||
watchjsheadless: stamp-npm
|
|
||||||
$(NPX) webpack --mode=development --watch --type=headless
|
|
||||||
|
|
||||||
.PHONY: watch
|
.PHONY: watch
|
||||||
watch: stamp-npm
|
watch: node_modules
|
||||||
make -j 3 watchcss watchjsheadless watchjs
|
npm run watch
|
||||||
|
|
||||||
.PHONY: logo
|
.PHONY: logo
|
||||||
logo: logo/conversejs-transparent16.png \
|
logo: logo/conversejs-transparent16.png \
|
||||||
@ -182,68 +195,69 @@ logo/conversejs-filled%.png:: logo/conversejs-filled.svg
|
|||||||
$(INKSCAPE) -e $@ -w $* $<
|
$(INKSCAPE) -e $@ -w $* $<
|
||||||
$(OXIPNG) $@
|
$(OXIPNG) $@
|
||||||
|
|
||||||
BUILDS = dist/converse.js \
|
|
||||||
dist/converse.min.js \
|
|
||||||
src/headless/dist/converse-headless.js \
|
|
||||||
src/headless/dist/converse-headless.min.js \
|
|
||||||
dist/converse-no-dependencies.min.js \
|
|
||||||
dist/converse-no-dependencies.js \
|
|
||||||
dist/converse-no-dependencies-es2015.js
|
|
||||||
|
|
||||||
dist/converse.js: src webpack.config.js stamp-npm @converse/headless
|
|
||||||
npm run converse.js
|
|
||||||
dist/converse.min.js: src webpack.config.js stamp-npm @converse/headless
|
|
||||||
npm run converse.min.js
|
|
||||||
src/headless/dist/converse-headless.js: src webpack.config.js stamp-npm @converse/headless
|
|
||||||
npm run converse-headless.js
|
|
||||||
src/headless/dist/converse-headless.min.js: src webpack.config.js stamp-npm @converse/headless
|
|
||||||
npm run converse-headless.min.js
|
|
||||||
dist/converse-no-dependencies.js: src webpack.config.js stamp-npm @converse/headless
|
|
||||||
$(NPX) webpack --mode=development --type=nodeps
|
|
||||||
dist/converse-no-dependencies.min.js: src webpack.config.js stamp-npm @converse/headless
|
|
||||||
$(NPX) webpack --mode=production --type=nodeps
|
|
||||||
dist/converse-no-dependencies-es2015.js: src webpack.config.js stamp-npm @converse/headless
|
|
||||||
$(NPX) webpack --mode=development --type=nodeps --lang=es2015
|
|
||||||
|
|
||||||
@converse/headless: src/headless
|
@converse/headless: src/headless
|
||||||
|
|
||||||
.PHONY: dist
|
src/headless/dist/converse-headless.js: src webpack/webpack.common.js node_modules @converse/headless
|
||||||
dist:: build
|
npm run headless-dev
|
||||||
|
|
||||||
.PHONY: build
|
src/headless/dist/converse-headless.min.js: src webpack/webpack.common.js node_modules @converse/headless
|
||||||
build:: stamp-npm css $(BUILDS)
|
npm run headless
|
||||||
|
|
||||||
|
dist:: node_modules src/* | dist/website.css dist/website.min.css
|
||||||
|
npm run headless
|
||||||
|
# Ideally this should just be `npm run build`.
|
||||||
|
# The additional steps are necessary to properly generate JSON chunk files
|
||||||
|
# from the .po files. The nodeps config uses preset-env with IE11.
|
||||||
|
# Somehow this is necessary.
|
||||||
|
npm run nodeps
|
||||||
|
$(eval TMPD := $(shell mktemp -d))
|
||||||
|
mv dist/locales $(TMPD) && \
|
||||||
|
npm run build && \
|
||||||
|
mv $(TMPD)/locales/*-po.js dist/locales/ && \
|
||||||
|
rm -rf $(TMPD)
|
||||||
|
|
||||||
|
.PHONY: install
|
||||||
|
install:: dist
|
||||||
|
|
||||||
|
.PHONY: cdn
|
||||||
|
cdn:: node_modules
|
||||||
|
npm run cdn
|
||||||
|
|
||||||
|
.PHONY: types
|
||||||
|
types:: node_modules
|
||||||
|
npm run types
|
||||||
|
|
||||||
########################################################################
|
########################################################################
|
||||||
## Tests
|
## Tests
|
||||||
|
|
||||||
.PHONY: eslint
|
.PHONY: eslint
|
||||||
eslint: stamp-npm
|
eslint: node_modules
|
||||||
$(ESLINT) src/*.js
|
npm run lint
|
||||||
$(ESLINT) src/utils/*.js
|
|
||||||
$(ESLINT) src/headless/*.js
|
|
||||||
$(ESLINT) src/headless/utils/*.js
|
|
||||||
$(ESLINT) spec/
|
|
||||||
|
|
||||||
.PHONY: check
|
.PHONY: check
|
||||||
check: eslint dist/converse.js
|
check: eslint | dist/converse.js dist/converse.css
|
||||||
LOG_CR_VERBOSITY=INFO $(CHROMIUM) --disable-gpu --no-sandbox http://localhost:$(HTTPSERVE_PORT)/tests/index.html
|
npm run test -- $(ARGS)
|
||||||
|
|
||||||
|
.PHONY: test
|
||||||
|
test:
|
||||||
|
npm run test -- $(ARGS)
|
||||||
|
|
||||||
########################################################################
|
########################################################################
|
||||||
## Documentation
|
## Documentation
|
||||||
|
|
||||||
./bin/activate:
|
./bin/activate:
|
||||||
python3.7 -m venv .
|
python3 -m venv .
|
||||||
|
|
||||||
.installed.cfg: requirements.txt buildout.cfg
|
.PHONY: docsdev
|
||||||
|
docsdev: ./bin/activate requirements.txt
|
||||||
|
./bin/pip install --upgrade pip==21.3.1
|
||||||
./bin/pip install -r requirements.txt
|
./bin/pip install -r requirements.txt
|
||||||
./bin/pip install --upgrade pip==19.2.1
|
|
||||||
./bin/pip install --upgrade setuptools==41.0.1
|
|
||||||
./bin/buildout -v
|
|
||||||
|
|
||||||
docsdev: ./bin/activate .installed.cfg
|
|
||||||
|
|
||||||
.PHONY: html
|
.PHONY: html
|
||||||
html: stamp-npm docsdev apidoc
|
html: doc
|
||||||
|
|
||||||
|
.PHONY: doc
|
||||||
|
doc: node_modules docsdev apidoc
|
||||||
rm -rf $(BUILDDIR)/html
|
rm -rf $(BUILDDIR)/html
|
||||||
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
|
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
|
||||||
make apidoc
|
make apidoc
|
||||||
@ -252,4 +266,4 @@ html: stamp-npm docsdev apidoc
|
|||||||
|
|
||||||
PHONY: apidoc
|
PHONY: apidoc
|
||||||
apidoc:
|
apidoc:
|
||||||
$(JSDOC) --private --readme docs/source/jsdoc_intro.md -c docs/source/conf.json -d docs/html/api src/*.js src/utils/*.js src/headless/*.js src/headless/utils/*.js
|
find ./src -type d -name node_modules -prune -false -o -name "*.js" | xargs $(JSDOC) --private --readme docs/source/jsdoc_intro.md -c docs/source/conf.json -d docs/html/api
|
||||||
|
17
README.chapril.md
Normal file
17
README.chapril.md
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
# Construire une version Chapril de ConverseJS
|
||||||
|
|
||||||
|
```
|
||||||
|
cd .../conversejs
|
||||||
|
# La première fois, installer nvm (attention, ça va modifier le .bashrc, entre autres choses)
|
||||||
|
make nvm
|
||||||
|
|
||||||
|
export V=7.0.4
|
||||||
|
git rebase v${V?}
|
||||||
|
# [... Résoudre les conflits]
|
||||||
|
git checkout -b v${V?}-chapril
|
||||||
|
nvm install
|
||||||
|
make dist
|
||||||
|
# [... Tester les livrables présents dans dist/, et si tout est ok :]
|
||||||
|
make version VERSION=${V?}-chapril
|
||||||
|
rsync -av dist/ chapril-xmpp:/var/www/xmpp.chapril.org/public_html/dist-custom-chapril-${V?}/
|
||||||
|
```
|
169
README.md
169
README.md
@ -1,7 +1,12 @@
|
|||||||
# Converse
|
<h2 align="center">
|
||||||
|
<a href="https://conversejs.org" target="_blank" rel="noopener">
|
||||||
|
<img alt="Converse.js" src="https://github.com/conversejs/converse.js/blob/master/logo/readme.png" width="480">
|
||||||
|
</a>
|
||||||
|
</h2>
|
||||||
|
|
||||||
[![XMPP Chat](https://inverse.chat/badge.svg?room=discuss@conference.conversejs.org)](https://inverse.chat/#converse/room?jid=discuss@conference.conversejs.org)
|
|
||||||
[![Travis](https://api.travis-ci.org/conversejs/converse.js.png?branch=master)](https://travis-ci.org/conversejs/converse.js)
|
[![XMPP Chat](https://conference.conversejs.org/muc_badge/discuss@conference.conversejs.org)](https://inverse.chat/#converse/room?jid=discuss@conference.conversejs.org)
|
||||||
|
[![CI Tests](https://github.com/conversejs/converse.js/actions/workflows/karma-tests.yml/badge.svg)](https://github.com/conversejs/converse.js/actions/workflows/karma-tests.yml)
|
||||||
[![Bountysource bounties](https://img.shields.io/bountysource/team/converse.js/activity.svg?maxAge=2592000)](https://www.bountysource.com/teams/converse.js/issues?tracker_ids=194169)
|
[![Bountysource bounties](https://img.shields.io/bountysource/team/converse.js/activity.svg?maxAge=2592000)](https://www.bountysource.com/teams/converse.js/issues?tracker_ids=194169)
|
||||||
[![Translation status](https://hosted.weblate.org/widgets/conversejs/-/svg-badge.svg)](https://hosted.weblate.org/engage/conversejs/?utm_source=widget)
|
[![Translation status](https://hosted.weblate.org/widgets/conversejs/-/svg-badge.svg)](https://hosted.weblate.org/engage/conversejs/?utm_source=widget)
|
||||||
|
|
||||||
@ -22,14 +27,6 @@ A demo showing anonymous login is available at [https://conversejs.org/demo/anon
|
|||||||
and a demo which shows how you can embed a single chat room into a page is
|
and a demo which shows how you can embed a single chat room into a page is
|
||||||
avialable at [https://conversejs.org/demo/embedded.html](https://conversejs.org/demo/embedded.html).
|
avialable at [https://conversejs.org/demo/embedded.html](https://conversejs.org/demo/embedded.html).
|
||||||
|
|
||||||
### Converse in overlay mode
|
|
||||||
|
|
||||||
![Screenshot of Converse](https://opkode.com/img/Screen-Shot-2018-09-19-at-19.15.16.png)
|
|
||||||
|
|
||||||
## Converse in fullpage mode
|
|
||||||
|
|
||||||
![Screenshot of Converse in fullpage mode](https://opkode.com/img/Screen-Shot-2018-09-19-at-19.16.46.png)
|
|
||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
|
|
||||||
The developer/integrator documentation can be found at [https://conversejs.org/docs/html](https://conversejs.org/docs/html).
|
The developer/integrator documentation can be found at [https://conversejs.org/docs/html](https://conversejs.org/docs/html).
|
||||||
@ -37,53 +34,116 @@ The developer/integrator documentation can be found at [https://conversejs.org/d
|
|||||||
You'll probably want to begin with the [quickstart guide](https://conversejs.org/docs/html/quickstart.html),
|
You'll probably want to begin with the [quickstart guide](https://conversejs.org/docs/html/quickstart.html),
|
||||||
which shows you how to use the CDN (content delivery network) to quickly get a demo up and running.
|
which shows you how to use the CDN (content delivery network) to quickly get a demo up and running.
|
||||||
|
|
||||||
|
## Converse modes
|
||||||
|
|
||||||
|
### Overlay
|
||||||
|
|
||||||
|
In overlay mode, Converse appears overlayed chats on top of the website.
|
||||||
|
|
||||||
|
![Screenshot of Converse in overlay mode](https://conversejs.org/screenshots/Converse-overlayed.png)
|
||||||
|
|
||||||
|
### Fullpage
|
||||||
|
|
||||||
|
In fullpage mode, Converse behaves like a single-page app that covers the whole browser viewport.
|
||||||
|
|
||||||
|
![Screenshot of Converse 9.0.0 in fullpage mode](https://conversejs.org/screenshots/Converse-fullscreen.png)
|
||||||
|
|
||||||
|
### Dark mode
|
||||||
|
|
||||||
|
![Screenshot of Converse 9.1.0 with a dark theme](https://conversejs.org/screenshots/Converse-Dracula-Theme.png)
|
||||||
|
|
||||||
|
### Embedded
|
||||||
|
|
||||||
|
In embedded mode, Converse can be embedded into an element in the DOM.
|
||||||
|
|
||||||
|
![Screenshot of Converse in embedded mode](https://conversejs.org/screenshots/Converse-embedded.png)
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
- Available as overlayed chat boxes or as a fullscreen application. See [inverse.chat](https://inverse.chat) for the fullscreen version.
|
- Available as overlayed chat boxes or as a fullscreen application. See [inverse.chat](https://inverse.chat) for the fullscreen version.
|
||||||
- A [plugin architecture](https://conversejs.org/docs/html/plugin_development.html) based on [pluggable.js](https://conversejs.github.io/pluggable.js/)
|
|
||||||
- Single-user and group chats
|
|
||||||
- Contacts and groups
|
|
||||||
- Multi-user chat rooms [XEP 45](https://xmpp.org/extensions/xep-0045.html)
|
|
||||||
- Chatroom bookmarks [XEP 48](https://xmpp.org/extensions/xep-0048.html)
|
|
||||||
- Direct invitations to chat rooms [XEP 249](https://xmpp.org/extensions/xep-0249.html)
|
|
||||||
- vCard support [XEP 54](https://xmpp.org/extensions/xep-0054.html)
|
|
||||||
- Service discovery [XEP 30](https://xmpp.org/extensions/xep-0030.html)
|
|
||||||
- In-band registration [XEP 77](https://xmpp.org/extensions/xep-0077.html)
|
|
||||||
- Roster item exchange [XEP 144](https://xmpp.org/extensions/tmp/xep-0144-1.1.html)
|
|
||||||
- Chat statuses (online, busy, away, offline)
|
|
||||||
- Custom status messages
|
- Custom status messages
|
||||||
- Typing and state notifications [XEP 85](https://xmpp.org/extensions/xep-0085.html)
|
|
||||||
- Desktop notifications
|
- Desktop notifications
|
||||||
- File sharing / HTTP File Upload [XEP 363](https://xmpp.org/extensions/xep-0363.html)
|
- A [plugin architecture](https://conversejs.org/docs/html/plugin_development.html) based on [pluggable.js](https://conversejs.github.io/pluggable.js/)
|
||||||
- Messages appear in all connnected chat clients / Message Carbons [XEP 280](https://xmpp.org/extensions/xep-0280.html)
|
- Chat statuses (online, busy, away, offline)
|
||||||
- Third person "/me" messages [XEP 245](https://xmpp.org/extensions/xep-0245.html)
|
- Anonymous logins, see the [anonymous login demo](https://conversejs.org/demo/anonymous.html)
|
||||||
- XMPP Ping [XEP 199](https://xmpp.org/extensions/xep-0199.html)
|
- URL Previews (requires server support, for example [mod_ogp](https://modules.prosody.im/mod_ogp.html)
|
||||||
- Server-side archiving of messages [XEP 313](https://xmpp.org/extensions/xep-0313.html)
|
- Translated into over 30 languages
|
||||||
- Hidden Messages (aka Spoilers) [XEP 382](https://xmpp.org/extensions/xep-0382.html)
|
|
||||||
- Client state indication [XEP 352](https://xmpp.org/extensions/xep-0352.html)
|
|
||||||
- Last Message Correction [XEP 308](https://xmpp.org/extensions/xep-0308.html)
|
|
||||||
- OMEMO encrypted messaging [XEP 384](https://xmpp.org/extensions/xep-0384.html")
|
|
||||||
- Supports anonymous logins, see the [anonymous login demo](https://conversejs.org/demo/anonymous.html).
|
|
||||||
- Translated into 28 languages
|
|
||||||
|
|
||||||
## Integration into other frameworks
|
### Supported XMPP Extensions
|
||||||
|
|
||||||
|
- [RFC-7395](https://tools.ietf.org/html/rfc7395) XMPP Subprotocol support for WebSocket
|
||||||
|
- [XEP-0004](https://xmpp.org/extensions/xep-0004.html) Data Forms
|
||||||
|
- [XEP-0030](https://xmpp.org/extensions/xep-0030.html) Service discovery
|
||||||
|
- [XEP-0045](https://xmpp.org/extensions/xep-0045.html) Multi-user chat rooms
|
||||||
|
- [XEP-0048](https://xmpp.org/extensions/xep-0048.html) Bookmarks
|
||||||
|
- [XEP-0050](https://xmpp.org/extensions/xep-0050.html) Ad-Hoc Commands
|
||||||
|
- [XEP-0054](https://xmpp.org/extensions/xep-0054.html) VCard-temp
|
||||||
|
- [XEP-0059](https://xmpp.org/extensions/xep-0059.html) Result Set Management
|
||||||
|
- [XEP-0060](https://xmpp.org/extensions/xep-0060.html) Publish-Subscribe (limited support)
|
||||||
|
- [XEP-0066](https://xmpp.org/extensions/xep-0066.html) Out of Band Data
|
||||||
|
- [XEP-0077](https://xmpp.org/extensions/xep-0077.html) In-band registration
|
||||||
|
- [XEP-0085](https://xmpp.org/extensions/xep-0085.html) Chat State Notifications
|
||||||
|
- [XEP-0115](https://xmpp.org/extensions/xep-0115.html) Entity Capabilities
|
||||||
|
- [XEP-0124](https://xmpp.org/extensions/xep-0124.html) Bidirectional-streams Over Synchronous HTTP (BOSH)
|
||||||
|
- [XEP-0144](https://xmpp.org/extensions/xep-0144.html) Roster item exchange
|
||||||
|
- [XEP-0156](https://xmpp.org/extensions/xep-0156.html) Discovering Alternative XMPP Connection Methods
|
||||||
|
- [XEP-0163](https://xmpp.org/extensions/xep-0163.html) Personal Eventing Protocol (limited support)
|
||||||
|
- [XEP-0184](https://xmpp.org/extensions/xep-0184.html) Message Receipt
|
||||||
|
- [XEP-0198](https://xmpp.org/extensions/xep-0198.html) Stream Management
|
||||||
|
- [XEP-0199](https://xmpp.org/extensions/xep-0199.html) XMPP Ping
|
||||||
|
- [XEP-0203](https://xmpp.org/extensions/xep-0203.html) Delayed Delivery
|
||||||
|
- [XEP-0206](https://xmpp.org/extensions/xep-0206.html) XMPP Over BOSH
|
||||||
|
- [XEP-0245](https://xmpp.org/extensions/xep-0245.html) The /me Command
|
||||||
|
- [XEP-0249](https://xmpp.org/extensions/xep-0249.html) Direct MUC Invitations
|
||||||
|
- [XEP-0280](https://xmpp.org/extensions/xep-0280.html) Message Carbons
|
||||||
|
- [XEP-0297](https://xmpp.org/extensions/xep-0297.html) Stanza Forwarding (limited support)
|
||||||
|
- [XEP-0308](https://xmpp.org/extensions/xep-0308.html) Last Message Correction
|
||||||
|
- [XEP-0313](https://xmpp.org/extensions/xep-0313.html) Message Archive Management
|
||||||
|
- [XEP-0316](https://xmpp.org/extensions/xep-0316.html) MUC Eventing protocol (limited support)
|
||||||
|
- [XEP-0317](https://xmpp.org/extensions/xep-0317.html) Hats (limited support)
|
||||||
|
- [XEP-0333](https://xmpp.org/extensions/xep-0333.html) Chat Markers (limited support)
|
||||||
|
- [XEP-0352](https://xmpp.org/extensions/xep-0352.html) Client State Indication
|
||||||
|
- [XEP-0357](https://xmpp.org/extensions/xep-0357.html) Push Notifications
|
||||||
|
- [XEP-0359](https://xmpp.org/extensions/xep-0359.html) Unique and Stable Stanza IDs
|
||||||
|
- [XEP-0363](https://xmpp.org/extensions/xep-0363.html) HTTP File Upload
|
||||||
|
- [XEP-0372](https://xmpp.org/extensions/xep-0372.html) References
|
||||||
|
- [XEP-0382](https://xmpp.org/extensions/xep-0382.html) Spoiler messages
|
||||||
|
- [XEP-0384](https://xmpp.org/extensions/xep-0384.html) OMEMO Encryption
|
||||||
|
- [XEP-0393](https://xmpp.org/extensions/xep-0393.html) Message styling
|
||||||
|
- [XEP-0422](https://xmpp.org/extensions/xep-0422.html) Message Fastening (limited support)
|
||||||
|
- [XEP-0424](https://xmpp.org/extensions/xep-0424.html) Message Retractions
|
||||||
|
- [XEP-0425](https://xmpp.org/extensions/xep-0425.html) Message Moderation
|
||||||
|
- [XEP-0437](https://xmpp.org/extensions/xep-0437.html) Room Activity Indicators
|
||||||
|
- [XEP-0453](https://xmpp.org/extensions/xep-0453.html) DOAP Usage in XMPP
|
||||||
|
- [XEP-0454](https://xmpp.org/extensions/xep-0454.html) OMEMO Media sharing
|
||||||
|
|
||||||
|
## Integration into other servers and frameworks
|
||||||
|
|
||||||
|
### XMPP servers
|
||||||
|
|
||||||
- **[Prosody](https://prosody.im/)**: [mod_conversejs](https://modules.prosody.im/mod_conversejs.html)
|
|
||||||
- **[Openfire](https://www.igniterealtime.org/projects/openfire/index.jsp)**: [inverse.jar](https://www.igniterealtime.org/projects/openfire/plugins.jsp)
|
- **[Openfire](https://www.igniterealtime.org/projects/openfire/index.jsp)**: [inverse.jar](https://www.igniterealtime.org/projects/openfire/plugins.jsp)
|
||||||
- **[Ruby on Rails](https://rubyonrails.org)**: [conversejs-rails](https://github.com/mikemarsian/conversejs-rails)
|
- **[Prosody](https://prosody.im/)**: [mod_conversejs](https://modules.prosody.im/mod_conversejs.html)
|
||||||
- **[Django](https://www.djangoproject.com)**: [django-conversejs](https://pypi.python.org/pypi/django-conversejs) or [django-xmpp](https://github.com/fpytloun/django-xmpp)
|
- **[Ejabberd](https://ejabberd.im/)**: [mod-conversejs](https://docs.ejabberd.im/admin/configuration/modules/#mod-conversejs)
|
||||||
- **[Patternslib](http://patternslib.com)**: [patterns.converse](https://github.com/jcbrand/patterns.converse)
|
|
||||||
- **[Roundcube](https://roundcube.net)**: [roundcube-converse.js-xmpp-plugin](https://github.com/devurandom/roundcube-converse.js-xmpp-plugin)
|
### Other
|
||||||
- **[Wordpress](https://wordpress.org)**: [ConverseJS](https://wordpress.org/plugins/conversejs/)
|
|
||||||
- **[Plone](https://plone.com)**: [collective.converse](https://github.com/collective/collective.converse)
|
|
||||||
- **[Alfresco](https://www.alfresco.com)**: [alfresco-js-chat-share](https://github.com/keensoft/alfresco-js-chat-share)
|
- **[Alfresco](https://www.alfresco.com)**: [alfresco-js-chat-share](https://github.com/keensoft/alfresco-js-chat-share)
|
||||||
|
- **[Django](https://www.djangoproject.com)**: [django-conversejs](https://pypi.python.org/pypi/django-conversejs) or [django-xmpp](https://github.com/fpytloun/django-xmpp)
|
||||||
|
- **[Elgg](https://elgg.org)**: [plugin](https://elgg.org/plugins/2997196)
|
||||||
- **[Friendica](https://friendi.ca)**: [converse](https://github.com/friendica/friendica-addons/tree/master/xmpp/converse)
|
- **[Friendica](https://friendi.ca)**: [converse](https://github.com/friendica/friendica-addons/tree/master/xmpp/converse)
|
||||||
|
- **[Patternslib](http://patternslib.com)**: [patterns.converse](https://github.com/jcbrand/patterns.converse)
|
||||||
|
- **[Plone](https://plone.com)**: [collective.converse](https://github.com/collective/collective.converse)
|
||||||
|
- **[Pàdé](https://www.igniterealtime.org/projects/pade/index.jsp)**: [Pàdé](https://www.igniterealtime.org/projects/pade/index.jsp)
|
||||||
|
- **[Roundcube](https://roundcube.net)**: [roundcube-converse.js-xmpp-plugin](https://github.com/devurandom/roundcube-converse.js-xmpp-plugin)
|
||||||
|
- **[Ruby on Rails](https://rubyonrails.org)**: [conversejs-rails](https://github.com/mikemarsian/conversejs-rails)
|
||||||
- **[Tiki Wiki CMS Groupware](https://tiki.org)**: [built-in optional feature](https://doc.tiki.org/XMPP)
|
- **[Tiki Wiki CMS Groupware](https://tiki.org)**: [built-in optional feature](https://doc.tiki.org/XMPP)
|
||||||
|
- **[Wordpress](https://wordpress.org)**: [ConverseJS](https://wordpress.org/plugins/conversejs/)
|
||||||
|
|
||||||
|
|
||||||
## Tests
|
## Tests
|
||||||
|
|
||||||
We use behavior-driven tests written with [jasmine.js](https://jasmine.github.io/).
|
We use behavior-driven tests written with [jasmine.js](https://jasmine.github.io/).
|
||||||
|
|
||||||
Open [tests.html](https://github.com/conversejs/converse.js/blob/master/tests.html) in your browser, and the tests will run automatically.
|
Run `make check` to execute all the tests.
|
||||||
|
|
||||||
## Licence
|
## Licence
|
||||||
|
|
||||||
@ -103,3 +163,26 @@ A heartfelt thanks for everyone who has supported this project over the years.
|
|||||||
Many people have contributed testing, bugfixes, features and corrections.
|
Many people have contributed testing, bugfixes, features and corrections.
|
||||||
|
|
||||||
We accept donations via [Patreon](https://www.patreon.com/jcbrand) and [Liberapay](https://liberapay.com/jcbrand).
|
We accept donations via [Patreon](https://www.patreon.com/jcbrand) and [Liberapay](https://liberapay.com/jcbrand).
|
||||||
|
|
||||||
|
## Sponsors
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<a href="https://bairesdev.com/sponsoring-open-source-projects/?utm_source=conversejs" target="_blank" rel="noopener">
|
||||||
|
<img alt="BairesDev" src="https://raw.githubusercontent.com/conversejs/media/main/logos/bairesdev-primary.png" width="200">
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<a href="https://blokt.com?utm_source=conversejs" target="_blank" rel="noopener">
|
||||||
|
<img alt="Blokt Crypto & Privacy" src="https://raw.githubusercontent.com/conversejs/converse.js/541613d1fea8aef364af00180f60e959162e5e4b/logo/blokt.png" width="200">
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<a href="https://primesound.org/?utm_source=conversejs" target="_blank" rel="noopener">
|
||||||
|
<img alt="Prime Sound" src="https://raw.githubusercontent.com/conversejs/media/main/logos/primesound.png" width="200">
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<a href="https://www.keycdn.com?utm_source=conversejs" target="_blank" rel="noopener">
|
||||||
|
<img alt="KeyCDN" src="https://raw.githubusercontent.com/conversejs/converse.js/541613d1fea8aef364af00180f60e959162e5e4b/logo/keycdn.png" width="200">
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
28
RELEASE.md
28
RELEASE.md
@ -1,20 +1,18 @@
|
|||||||
# Release checklist
|
# Release checklist
|
||||||
|
|
||||||
1. Run `make check` to check that all tests pass.
|
1. Merge weblate translations: https://hosted.weblate.org/projects/conversejs/translations/#repository
|
||||||
2. Decide on a version number, e.g. 5.0.0
|
2. Run `make check` to check that all tests pass.
|
||||||
3. Run `make release VERSION=5.0.0`
|
3. Run `make version VERSION=10.1.6`
|
||||||
4. Do a `git diff` to check if things look sane.
|
4. Do a `git diff` to check if things look sane.
|
||||||
5. Do a quick manual test with the `dist` files (via `index.html`)
|
5. Do a quick manual test with the `dist` files (via `index.html`)
|
||||||
6. `git commit -am "New release 5.0.0"`
|
6. `git commit -am "Release 10.1.6"`
|
||||||
7. `git tag -s v5.0.0
|
7. `git tag -s v10.1.6 -m "Release 10.1.6"`
|
||||||
8. Run `git push && git push --tags`
|
8. `git push && git push origin v10.1.6`
|
||||||
9. Update https://conversejs.org
|
9. `make publish BRANCH=v10.1.6`
|
||||||
10. Create `5.0.0` directory for the CDN.
|
10. Update release page on Github
|
||||||
* Create a new version for the CDN by copying
|
* Upload tar files
|
||||||
* Check out the correct tag
|
11. Update https://conversejs.org
|
||||||
* Update `index.html` to point to that version of the CDN
|
* `cd /home/conversejs/converse.js`
|
||||||
* Run `make dist`
|
* `make deploy VERSION=10.1.6`
|
||||||
* Do the same for the root dir
|
|
||||||
11. Run `npm publish && cd src/headless/ && npm publish`
|
|
||||||
12. Update the repository on weblate
|
12. Update the repository on weblate
|
||||||
13. Decide on next release number and run `make postrelease VERSION=5.0.1`
|
13. Decide on next release number and run `make postrelease VERSION=10.1.7`
|
||||||
|
10
babel.config.json
Normal file
10
babel.config.json
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"presets": [
|
||||||
|
["@babel/preset-env", {
|
||||||
|
"targets": {
|
||||||
|
"browsers": [">1%", "not ie 11", "not op_mini all", "not dead"]
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
],
|
||||||
|
"plugins": []
|
||||||
|
}
|
15
buildout.cfg
15
buildout.cfg
@ -1,15 +0,0 @@
|
|||||||
[buildout]
|
|
||||||
parts =
|
|
||||||
sphinx
|
|
||||||
|
|
||||||
versions = versions
|
|
||||||
|
|
||||||
[sphinx]
|
|
||||||
recipe = zc.recipe.egg
|
|
||||||
eggs =
|
|
||||||
Sphinx
|
|
||||||
sphinx-bootstrap-theme
|
|
||||||
|
|
||||||
[versions]
|
|
||||||
Sphinx = 2.1.2
|
|
||||||
docutils = 0.15.1
|
|
@ -1,23 +0,0 @@
|
|||||||
# How to use saved Chrome/Chromium logs to replay events
|
|
||||||
|
|
||||||
**NOTE**: This feature is very experimental and in many cases doesn't work
|
|
||||||
without data massaging and ugly hacks.
|
|
||||||
|
|
||||||
It's possible to save the log output from Chrome/Chromium (I haven't tried this
|
|
||||||
yet with any other browser) and then to replay that log output in the browser.
|
|
||||||
|
|
||||||
This can be a very helpful technique to track down bugs.
|
|
||||||
|
|
||||||
To do this, follow the following steps:
|
|
||||||
|
|
||||||
1. Save the log file (right click and then click "Save as" in the browser's console).
|
|
||||||
2. Rename the log file, making sure it ends in `.html`
|
|
||||||
3. Move the log file to the `converse-logs` directory in the converse.js repo.
|
|
||||||
4. Add `<log>` to the top of the log file and `</log>` to the bottom of the log file.
|
|
||||||
5. In `converse-logs/converse-logs.js`, add a new entry for the log file (don't
|
|
||||||
include the `.html` part of the file name.
|
|
||||||
6. Make sure that `spec/transcripts` is "required"-ed in `tests/main.js`
|
|
||||||
6. Open `tests.html` in your browser.
|
|
||||||
|
|
||||||
Your logs will run first, and then all the other tests will run afterwards.
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
|||||||
define("transcripts", [
|
|
||||||
"tpl!../../converse-logs/missing_messages",
|
|
||||||
], function () {
|
|
||||||
return arguments;
|
|
||||||
});
|
|
293
conversejs.doap
Normal file
293
conversejs.doap
Normal file
@ -0,0 +1,293 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<rdf:RDF xmlns:doap="http://usefulinc.com/ns/doap#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xmpp="https://linkmauve.fr/ns/xmpp-doap#" xmlns:schema="https://schema.org/" xml:lang="en">
|
||||||
|
<Project xmlns="http://usefulinc.com/ns/doap#">
|
||||||
|
<name>Converse.js</name>
|
||||||
|
<shortdesc>Browser based XMPP chat client</shortdesc>
|
||||||
|
<homepage rdf:resource="https://conversejs.org/"/>
|
||||||
|
<bug-database rdf:resource="https://github.com/conversejs/converse.js/issues"/>
|
||||||
|
<developer-forum rdf:resource="xmpp:discuss@conference.conversejs.org?join"/>
|
||||||
|
<support-forum rdf:resource="xmpp:discuss@conference.conversejs.org?join"/>
|
||||||
|
<category rdf:resource="https://linkmauve.fr/ns/xmpp-doap#category-client"/>
|
||||||
|
<programming-language>JavaScript</programming-language>
|
||||||
|
<os>Browser</os>
|
||||||
|
<os>Linux</os>
|
||||||
|
<os>macOS</os>
|
||||||
|
<os>Windows</os>
|
||||||
|
<schema:logo rdf:resource="https://raw.githubusercontent.com/conversejs/converse.js/master/logo/conversejs-filled.svg"/>
|
||||||
|
<repository>
|
||||||
|
<GitRepository>
|
||||||
|
<browse rdf:resource="https://github.com/conversejs/converse.js"/>
|
||||||
|
<location rdf:resource="https://github.com/conversejs/converse.js.git"/>
|
||||||
|
</GitRepository>
|
||||||
|
</repository>
|
||||||
|
<implements rdf:resource="https://www.rfc-editor.org/info/rfc6120"/>
|
||||||
|
<implements rdf:resource="https://www.rfc-editor.org/info/rfc6121"/>
|
||||||
|
<implements rdf:resource="https://www.rfc-editor.org/info/rfc6122"/>
|
||||||
|
<implements rdf:resource="https://www.rfc-editor.org/info/rfc7395"/>
|
||||||
|
<implements rdf:resource="https://www.rfc-editor.org/info/rfc7590"/>
|
||||||
|
<implements>
|
||||||
|
<xmpp:SupportedXep>
|
||||||
|
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0004.html"/>
|
||||||
|
</xmpp:SupportedXep>
|
||||||
|
</implements>
|
||||||
|
<implements>
|
||||||
|
<xmpp:SupportedXep>
|
||||||
|
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0030.html"/>
|
||||||
|
<xmpp:since>0.8.2</xmpp:since>
|
||||||
|
</xmpp:SupportedXep>
|
||||||
|
</implements>
|
||||||
|
<implements>
|
||||||
|
<xmpp:SupportedXep>
|
||||||
|
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0045.html"/>
|
||||||
|
</xmpp:SupportedXep>
|
||||||
|
</implements>
|
||||||
|
<implements>
|
||||||
|
<xmpp:SupportedXep>
|
||||||
|
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0048.html"/>
|
||||||
|
<xmpp:since>2.0.1</xmpp:since>
|
||||||
|
</xmpp:SupportedXep>
|
||||||
|
</implements>
|
||||||
|
<implements>
|
||||||
|
<xmpp:SupportedXep>
|
||||||
|
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0050.html"/>
|
||||||
|
<xmpp:since>7.0.0</xmpp:since>
|
||||||
|
</xmpp:SupportedXep>
|
||||||
|
</implements>
|
||||||
|
<implements>
|
||||||
|
<xmpp:SupportedXep>
|
||||||
|
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0054.html"/>
|
||||||
|
</xmpp:SupportedXep>
|
||||||
|
</implements>
|
||||||
|
<implements>
|
||||||
|
<xmpp:SupportedXep>
|
||||||
|
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0059.html"/>
|
||||||
|
</xmpp:SupportedXep>
|
||||||
|
</implements>
|
||||||
|
<implements>
|
||||||
|
<xmpp:SupportedXep>
|
||||||
|
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0060.html"/>
|
||||||
|
</xmpp:SupportedXep>
|
||||||
|
</implements>
|
||||||
|
<implements>
|
||||||
|
<xmpp:SupportedXep>
|
||||||
|
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0066.html"/>
|
||||||
|
<xmpp:since>4.0.0</xmpp:since>
|
||||||
|
</xmpp:SupportedXep>
|
||||||
|
</implements>
|
||||||
|
<implements>
|
||||||
|
<xmpp:SupportedXep>
|
||||||
|
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0077.html"/>
|
||||||
|
<xmpp:since>0.8.5</xmpp:since>
|
||||||
|
</xmpp:SupportedXep>
|
||||||
|
</implements>
|
||||||
|
<implements>
|
||||||
|
<xmpp:SupportedXep>
|
||||||
|
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0085.html"/>
|
||||||
|
</xmpp:SupportedXep>
|
||||||
|
</implements>
|
||||||
|
<implements>
|
||||||
|
<xmpp:SupportedXep>
|
||||||
|
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0115.html"/>
|
||||||
|
<xmpp:status>partial</xmpp:status>
|
||||||
|
<xmpp:note>advertises caps but no caching</xmpp:note>
|
||||||
|
</xmpp:SupportedXep>
|
||||||
|
</implements>
|
||||||
|
<implements>
|
||||||
|
<xmpp:SupportedXep>
|
||||||
|
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0122.html"/>
|
||||||
|
<xmpp:status>partial</xmpp:status>
|
||||||
|
<xmpp:note>basic string field sub-type usage</xmpp:note>
|
||||||
|
</xmpp:SupportedXep>
|
||||||
|
</implements>
|
||||||
|
<implements>
|
||||||
|
<xmpp:SupportedXep>
|
||||||
|
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0124.html"/>
|
||||||
|
</xmpp:SupportedXep>
|
||||||
|
</implements>
|
||||||
|
<implements>
|
||||||
|
<xmpp:SupportedXep>
|
||||||
|
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0144.html"/>
|
||||||
|
</xmpp:SupportedXep>
|
||||||
|
</implements>
|
||||||
|
<implements>
|
||||||
|
<xmpp:SupportedXep>
|
||||||
|
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0156.html"/>
|
||||||
|
<xmpp:since>6.0.0</xmpp:since>
|
||||||
|
</xmpp:SupportedXep>
|
||||||
|
</implements>
|
||||||
|
<implements>
|
||||||
|
<xmpp:SupportedXep>
|
||||||
|
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0163.html"/>
|
||||||
|
</xmpp:SupportedXep>
|
||||||
|
</implements>
|
||||||
|
<implements>
|
||||||
|
<xmpp:SupportedXep>
|
||||||
|
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0184.html"/>
|
||||||
|
</xmpp:SupportedXep>
|
||||||
|
</implements>
|
||||||
|
<implements>
|
||||||
|
<xmpp:SupportedXep>
|
||||||
|
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0198.html"/>
|
||||||
|
<xmpp:since>5.0.0</xmpp:since>
|
||||||
|
</xmpp:SupportedXep>
|
||||||
|
</implements>
|
||||||
|
<implements>
|
||||||
|
<xmpp:SupportedXep>
|
||||||
|
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0199.html"/>
|
||||||
|
</xmpp:SupportedXep>
|
||||||
|
</implements>
|
||||||
|
<implements>
|
||||||
|
<xmpp:SupportedXep>
|
||||||
|
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0203.html"/>
|
||||||
|
</xmpp:SupportedXep>
|
||||||
|
</implements>
|
||||||
|
<implements>
|
||||||
|
<xmpp:SupportedXep>
|
||||||
|
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0206.html"/>
|
||||||
|
</xmpp:SupportedXep>
|
||||||
|
</implements>
|
||||||
|
<implements>
|
||||||
|
<xmpp:SupportedXep>
|
||||||
|
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0245.html"/>
|
||||||
|
</xmpp:SupportedXep>
|
||||||
|
</implements>
|
||||||
|
<implements>
|
||||||
|
<xmpp:SupportedXep>
|
||||||
|
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0249.html"/>
|
||||||
|
<xmpp:since>0.8.2</xmpp:since>
|
||||||
|
</xmpp:SupportedXep>
|
||||||
|
</implements>
|
||||||
|
<implements>
|
||||||
|
<xmpp:SupportedXep>
|
||||||
|
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0280.html"/>
|
||||||
|
<xmpp:since>0.8.0</xmpp:since>
|
||||||
|
</xmpp:SupportedXep>
|
||||||
|
</implements>
|
||||||
|
<implements>
|
||||||
|
<xmpp:SupportedXep>
|
||||||
|
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0297.html"/>
|
||||||
|
</xmpp:SupportedXep>
|
||||||
|
</implements>
|
||||||
|
<implements>
|
||||||
|
<xmpp:SupportedXep>
|
||||||
|
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0308.html"/>
|
||||||
|
<xmpp:since>4.0.0</xmpp:since>
|
||||||
|
</xmpp:SupportedXep>
|
||||||
|
</implements>
|
||||||
|
<implements>
|
||||||
|
<xmpp:SupportedXep>
|
||||||
|
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0313.html"/>
|
||||||
|
<xmpp:since>0.9.5</xmpp:since>
|
||||||
|
</xmpp:SupportedXep>
|
||||||
|
</implements>
|
||||||
|
<implements>
|
||||||
|
<xmpp:SupportedXep>
|
||||||
|
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0317.html"/>
|
||||||
|
</xmpp:SupportedXep>
|
||||||
|
</implements>
|
||||||
|
<implements>
|
||||||
|
<xmpp:SupportedXep>
|
||||||
|
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0319.html"/>
|
||||||
|
<xmpp:since>4.0.5</xmpp:since>
|
||||||
|
</xmpp:SupportedXep>
|
||||||
|
</implements>
|
||||||
|
<implements>
|
||||||
|
<xmpp:SupportedXep>
|
||||||
|
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0333.html"/>
|
||||||
|
<xmpp:since>4.1.1</xmpp:since>
|
||||||
|
<xmpp:status>partial</xmpp:status>
|
||||||
|
</xmpp:SupportedXep>
|
||||||
|
</implements>
|
||||||
|
<implements>
|
||||||
|
<xmpp:SupportedXep>
|
||||||
|
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0352.html"/>
|
||||||
|
<xmpp:since>0.9.4</xmpp:since>
|
||||||
|
</xmpp:SupportedXep>
|
||||||
|
</implements>
|
||||||
|
<implements>
|
||||||
|
<xmpp:SupportedXep>
|
||||||
|
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0357.html"/>
|
||||||
|
<xmpp:since>4.0.0</xmpp:since>
|
||||||
|
</xmpp:SupportedXep>
|
||||||
|
</implements>
|
||||||
|
<implements>
|
||||||
|
<xmpp:SupportedXep>
|
||||||
|
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0359.html"/>
|
||||||
|
</xmpp:SupportedXep>
|
||||||
|
</implements>
|
||||||
|
<implements>
|
||||||
|
<xmpp:SupportedXep>
|
||||||
|
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0363.html"/>
|
||||||
|
<xmpp:since>4.0.0</xmpp:since>
|
||||||
|
</xmpp:SupportedXep>
|
||||||
|
</implements>
|
||||||
|
<implements>
|
||||||
|
<xmpp:SupportedXep>
|
||||||
|
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0371.html"/>
|
||||||
|
</xmpp:SupportedXep>
|
||||||
|
</implements>
|
||||||
|
<implements>
|
||||||
|
<xmpp:SupportedXep>
|
||||||
|
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0372.html"/>
|
||||||
|
</xmpp:SupportedXep>
|
||||||
|
</implements>
|
||||||
|
<implements>
|
||||||
|
<xmpp:SupportedXep>
|
||||||
|
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0382.html"/>
|
||||||
|
<xmpp:since>3.3.3</xmpp:since>
|
||||||
|
</xmpp:SupportedXep>
|
||||||
|
</implements>
|
||||||
|
<implements>
|
||||||
|
<xmpp:SupportedXep>
|
||||||
|
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0384.html"/>
|
||||||
|
<xmpp:since>4.0.0</xmpp:since>
|
||||||
|
</xmpp:SupportedXep>
|
||||||
|
</implements>
|
||||||
|
<implements>
|
||||||
|
<xmpp:SupportedXep>
|
||||||
|
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0393.html"/>
|
||||||
|
<xmpp:since>8.0.0</xmpp:since>
|
||||||
|
</xmpp:SupportedXep>
|
||||||
|
</implements>
|
||||||
|
<implements>
|
||||||
|
<xmpp:SupportedXep>
|
||||||
|
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0410.html"/>
|
||||||
|
<xmpp:since>5.0.0</xmpp:since>
|
||||||
|
</xmpp:SupportedXep>
|
||||||
|
</implements>
|
||||||
|
<implements>
|
||||||
|
<xmpp:SupportedXep>
|
||||||
|
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0421.html"/>
|
||||||
|
</xmpp:SupportedXep>
|
||||||
|
</implements>
|
||||||
|
<implements>
|
||||||
|
<xmpp:SupportedXep>
|
||||||
|
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0422.html"/>
|
||||||
|
</xmpp:SupportedXep>
|
||||||
|
</implements>
|
||||||
|
<implements>
|
||||||
|
<xmpp:SupportedXep>
|
||||||
|
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0424.html"/>
|
||||||
|
<xmpp:since>6.0.0</xmpp:since>
|
||||||
|
</xmpp:SupportedXep>
|
||||||
|
</implements>
|
||||||
|
<implements>
|
||||||
|
<xmpp:SupportedXep>
|
||||||
|
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0425.html"/>
|
||||||
|
<xmpp:since>6.0.0</xmpp:since>
|
||||||
|
</xmpp:SupportedXep>
|
||||||
|
</implements>
|
||||||
|
<implements>
|
||||||
|
<xmpp:SupportedXep>
|
||||||
|
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0437.html"/>
|
||||||
|
<xmpp:since>8.0.0</xmpp:since>
|
||||||
|
</xmpp:SupportedXep>
|
||||||
|
</implements>
|
||||||
|
<implements>
|
||||||
|
<xmpp:SupportedXep>
|
||||||
|
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0454.html"/>
|
||||||
|
<xmpp:since>8.0.0</xmpp:since>
|
||||||
|
</xmpp:SupportedXep>
|
||||||
|
</implements>
|
||||||
|
</Project>
|
||||||
|
</rdf:RDF>
|
@ -1,25 +1,28 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<title>Converse.js</title>
|
<title>Converse - Anonymous login demo</title>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<meta name="description" content="Converse.js: A free chat client for your website" />
|
<meta name="description" content="Converse XMPP/Jabber Chat"/>
|
||||||
<meta name="author" content="JC Brand" />
|
<meta name="author" content="JC Brand" />
|
||||||
<meta name="keywords" content="xmpp chat webchat converse.js" />
|
<meta name="keywords" content="xmpp chat webchat converse.js Converse" />
|
||||||
<link rel="shortcut icon" type="image/ico" href="../images/favicon.ico"/>
|
|
||||||
<link type="text/css" rel="stylesheet" media="screen" href="https://cdn.conversejs.org/5.0.0/dist/font-awesome.min.css" />
|
<!-- These files are NOT needed when using converse.js in your own project. -->
|
||||||
<link type="text/css" rel="stylesheet" media="screen" href="https://cdn.conversejs.org/5.0.0/dist/website.min.css" />
|
<link rel="shortcut icon" type="image/ico" href="/dist/favicon.ico"/>
|
||||||
<script type="text/javascript" src="../analytics.js"></script>
|
<link type="text/css" rel="stylesheet" media="screen" href="/dist/website.min.css" />
|
||||||
<noscript><p><img src="//stats.opkode.com/piwik.php?idsite=1" style="border:0;" alt="" /></p></noscript>
|
<noscript><p><img src="//stats.opkode.com/piwik.php?idsite=1" style="border:0;" alt="" /></p></noscript>
|
||||||
<![if gt IE 11]>
|
<script type="text/javascript" src="analytics.js"></script>
|
||||||
<link type="text/css" rel="stylesheet" media="screen" href="https://cdn.conversejs.org/5.0.0/dist/converse.min.css" />
|
<!-- *********************************************************************** -->
|
||||||
<script src="https://cdn.conversejs.org/5.0.0/dist/converse.min.js"></script>
|
|
||||||
<![endif]>
|
<link rel="manifest" href="/manifest.json">
|
||||||
|
<link type="text/css" rel="stylesheet" media="screen" href="/dist/converse.min.css" />
|
||||||
|
<script src="https://cdn.conversejs.org/3rdparty/libsignal-protocol.min.js"></script>
|
||||||
|
<script src="/dist/converse.min.js"></script>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body id="page-top" data-spy="scroll" class="converse-website">
|
||||||
<section class="section-wrapper">
|
<section class="section-wrapper">
|
||||||
<nav class="navbar sticky-top navbar-expand-lg" role="navigation">
|
<nav class="navbar sticky-top navbar-expand-lg" role="navigation">
|
||||||
<div class="collapse navbar-collapse" id="navbarTogglerDemo01">
|
<div class="collapse navbar-collapse" id="navbarTogglerDemo01">
|
||||||
@ -30,7 +33,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<section id="intro" class="intro container">
|
<section id="intro" class="intro" class="container">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12 col-md-offset-2">
|
<div class="col-md-12 col-md-offset-2">
|
||||||
<h1 class="brand-heading fade-in">
|
<h1 class="brand-heading fade-in">
|
||||||
@ -39,7 +42,7 @@
|
|||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
viewBox="0 0 364 364">
|
viewBox="0 0 364 364">
|
||||||
<title>Home</title>
|
<title>Converse</title>
|
||||||
<g class="cls-1" id="g904">
|
<g class="cls-1" id="g904">
|
||||||
<g data-name="Layer 2">
|
<g data-name="Layer 2">
|
||||||
<g data-name="Layer 7">
|
<g data-name="Layer 7">
|
||||||
|
@ -1,30 +1,35 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<title>Converse.js</title>
|
<title>Converse - Anonymous login demo</title>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<meta name="description" content="Converse.js: An XMPP chat client which can be integrated into any website" />
|
<meta name="description" content="Converse XMPP/Jabber Chat"/>
|
||||||
<meta name="author" content="JC Brand" />
|
<meta name="author" content="JC Brand" />
|
||||||
<meta name="keywords" content="xmpp chat webchat converse.js" />
|
<meta name="keywords" content="xmpp chat webchat converse.js Converse" />
|
||||||
<link rel="shortcut icon" type="image/ico" href="../images/favicon.ico"/>
|
|
||||||
<link type="text/css" rel="stylesheet" media="screen" href="https://cdn.conversejs.org/5.0.0/dist/font-awesome.min.css" />
|
<!-- These files are NOT needed when using converse.js in your own project. -->
|
||||||
<link type="text/css" rel="stylesheet" media="screen" href="https://cdn.conversejs.org/5.0.0/dist/website.min.css" />
|
<link rel="shortcut icon" type="image/ico" href="../dist/favicon.ico"/>
|
||||||
|
<link type="text/css" rel="stylesheet" media="screen" href="../dist/website.min.css" />
|
||||||
|
<noscript><p><img src="https://stats.opkode.com/piwik.php?idsite=1" style="border:0;" alt="" /></p></noscript>
|
||||||
<script type="text/javascript" src="/analytics.js"></script>
|
<script type="text/javascript" src="/analytics.js"></script>
|
||||||
<noscript><p><img src="//stats.opkode.com/piwik.php?idsite=1" style="border:0;" alt="" /></p></noscript>
|
<!-- *********************************************************************** -->
|
||||||
<![if gte IE 11]>
|
|
||||||
<link type="text/css" rel="stylesheet" media="screen" href="https://cdn.conversejs.org/5.0.0/dist/converse.min.css" />
|
<link rel="manifest" href="../manifest.json">
|
||||||
<script src="https://cdn.conversejs.org/5.0.0/dist/converse.min.js"></script>
|
<link type="text/css" rel="stylesheet" media="screen" href="../dist/converse.min.css" />
|
||||||
<![endif]>
|
<script src="https://cdn.conversejs.org/3rdparty/libsignal-protocol.min.js"></script>
|
||||||
|
<script src="../dist/converse.min.js"></script>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
.converse-container {
|
.converse-container {
|
||||||
height: 55vh;
|
height: 50vh;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body id="page-top" data-spy="scroll">
|
|
||||||
|
<body id="page-top" data-spy="scroll" class="converse-website">
|
||||||
<section class="section-wrapper">
|
<section class="section-wrapper">
|
||||||
<nav class="navbar sticky-top navbar-expand-lg" role="navigation">
|
<nav class="navbar sticky-top navbar-expand-lg" role="navigation">
|
||||||
<div class="collapse navbar-collapse" id="navbarTogglerDemo01">
|
<div class="collapse navbar-collapse" id="navbarTogglerDemo01">
|
||||||
@ -39,7 +44,7 @@
|
|||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<h1 class="brand-heading fade-in">
|
<h1 class="brand-heading fade-in" style="margin: 1.5em 0 0 0">
|
||||||
<svg class="converse-svg-logo"
|
<svg class="converse-svg-logo"
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
@ -67,7 +72,7 @@
|
|||||||
</h1>
|
</h1>
|
||||||
<p class="intro-text">Embedded MUC chat demo</p>
|
<p class="intro-text">Embedded MUC chat demo</p>
|
||||||
<div class="converse-container">
|
<div class="converse-container">
|
||||||
<div id="conversejs"></div>
|
<converse-root></converse-root>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,26 +1,28 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<title>Converse.js</title>
|
<title>Converse Demos</title>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<meta name="description" content="Converse.js: A free chat client for your website" />
|
<meta name="description" content="Converse XMPP/Jabber Chat"/>
|
||||||
<meta name="author" content="JC Brand" />
|
<meta name="author" content="JC Brand" />
|
||||||
<meta name="keywords" content="xmpp chat webchat converse.js" />
|
<meta name="keywords" content="xmpp chat webchat converse.js Converse" />
|
||||||
|
|
||||||
<link rel="shortcut icon" type="image/ico" href="images/favicon.ico"/>
|
<!-- These files are NOT needed when using converse.js in your own project. -->
|
||||||
<link type="text/css" rel="stylesheet" media="screen" href="https://cdn.conversejs.org/5.0.0/dist/font-awesome.min.css" />
|
<link rel="shortcut icon" type="image/ico" href="/dist/favicon.ico"/>
|
||||||
<link type="text/css" rel="stylesheet" media="screen" href="https://cdn.conversejs.org/5.0.0/dist/website.min.css" />
|
<link type="text/css" rel="stylesheet" media="screen" href="/dist/website.min.css" />
|
||||||
<script type="text/javascript" src="/analytics.js"></script>
|
|
||||||
<noscript><p><img src="//stats.opkode.com/piwik.php?idsite=1" style="border:0;" alt="" /></p></noscript>
|
<noscript><p><img src="//stats.opkode.com/piwik.php?idsite=1" style="border:0;" alt="" /></p></noscript>
|
||||||
<![if gte IE 9]>
|
<script type="text/javascript" src="analytics.js"></script>
|
||||||
<link type="text/css" rel="stylesheet" media="screen" href="https://cdn.conversejs.org/5.0.0/dist/converse.min.css" />
|
<!-- *********************************************************************** -->
|
||||||
<script src="https://cdn.conversejs.org/5.0.0/dist/converse.min.js"></script>
|
|
||||||
<![endif]>
|
<link rel="manifest" href="/manifest.json">
|
||||||
|
<link type="text/css" rel="stylesheet" media="screen" href="/dist/converse.min.css" />
|
||||||
|
<script src="https://cdn.conversejs.org/3rdparty/libsignal-protocol.min.js"></script>
|
||||||
|
<script src="/dist/converse.min.js"></script>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body id="page-top" data-spy="scroll">
|
<body id="page-top" data-spy="scroll" class="converse-website">
|
||||||
<section class="section-wrapper">
|
<section class="section-wrapper">
|
||||||
<nav class="navbar sticky-top navbar-expand-lg" role="navigation">
|
<nav class="navbar sticky-top navbar-expand-lg" role="navigation">
|
||||||
<div class="collapse navbar-collapse" id="navbarTogglerDemo01">
|
<div class="collapse navbar-collapse" id="navbarTogglerDemo01">
|
||||||
@ -75,47 +77,37 @@
|
|||||||
</body>
|
</body>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
require(['converse'], function (converse) {
|
/*
|
||||||
(function () {
|
@licstart
|
||||||
/* XXX: This function initializes jquery.easing for the https://conversejs.org
|
This is free and unencumbered software released into the public domain.
|
||||||
* website. This code is only useful in the context of the converse.js
|
|
||||||
* website and converse.js itself is NOT dependent on it.
|
|
||||||
*/
|
|
||||||
var $ = converse.env.jQuery;
|
|
||||||
$.extend( $.easing, {
|
|
||||||
easeInOutExpo: function (x, t, b, c, d) {
|
|
||||||
if (t==0) return b;
|
|
||||||
if (t==d) return b+c;
|
|
||||||
if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
|
|
||||||
return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
$(window).scroll(function() {
|
Anyone is free to copy, modify, publish, use, compile, sell, or
|
||||||
if ($(".navbar").offset().top > 50) {
|
distribute this software, either in source code form or as a compiled
|
||||||
$(".navbar-fixed-top").addClass("top-nav-collapse");
|
binary, for any purpose, commercial or non-commercial, and by any
|
||||||
} else {
|
means.
|
||||||
$(".navbar-fixed-top").removeClass("top-nav-collapse");
|
|
||||||
}
|
In jurisdictions that recognize copyright laws, the author or authors
|
||||||
});
|
of this software dedicate any and all copyright interest in the
|
||||||
//jQuery for page scrolling feature - requires jQuery Easing plugin
|
software to the public domain. We make this dedication for the benefit
|
||||||
$('.page-scroll a').bind('click', function(event) {
|
of the public at large and to the detriment of our heirs and
|
||||||
var $anchor = $(this);
|
successors. We intend this dedication to be an overt act of
|
||||||
$('html, body').stop().animate({
|
relinquishment in perpetuity of all present and future rights to this
|
||||||
scrollTop: $($anchor.attr('href')).offset().top
|
software under copyright law.
|
||||||
}, 700, 'easeInOutExpo');
|
|
||||||
event.preventDefault();
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
});
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
})();
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||||
|
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||||
|
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||||
|
OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
For more information, please refer to <https://unlicense.org/>
|
||||||
|
@licend
|
||||||
|
*/
|
||||||
converse.initialize({
|
converse.initialize({
|
||||||
// Please use this connection manager only for testing purposes
|
// Please use this connection manager only for testing purposes
|
||||||
bosh_service_url: 'https://conversejs.org/http-bind/',
|
bosh_service_url: 'https://conversejs.org/http-bind/'
|
||||||
keepalive: true,
|
|
||||||
message_carbons: true,
|
|
||||||
play_sounds: true,
|
|
||||||
roster_groups: true,
|
|
||||||
show_controlbox_by_default: true,
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
</html>
|
</html>
|
||||||
|
45
dev.html
45
dev.html
@ -1,40 +1,49 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<title>Converse.js</title>
|
<title>Converse</title>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<meta name="description" content="Converse.js: A free chat client for your website" />
|
<meta name="description" content="Converse XMPP/Jabber Chat" />
|
||||||
<meta name="author" content="JC Brand" />
|
<meta name="author" content="JC Brand" />
|
||||||
<meta name="keywords" content="xmpp chat webchat converse.js" />
|
<meta name="keywords" content="xmpp chat webchat converse.js" />
|
||||||
|
<link rel="manifest" href="./manifest.json">
|
||||||
<link rel="shortcut icon" type="image/ico" href="images/favicon.ico"/>
|
<link rel="shortcut icon" type="image/ico" href="images/favicon.ico"/>
|
||||||
|
<link type="text/css" rel="stylesheet" media="screen" href="dist/website.css" />
|
||||||
<link type="text/css" rel="stylesheet" media="screen" href="dist/converse.css" />
|
<link type="text/css" rel="stylesheet" media="screen" href="dist/converse.css" />
|
||||||
<script src="3rdparty/libsignal-protocol.js"></script>
|
<script src="https://cdn.conversejs.org/3rdparty/libsignal-protocol.min.js"></script>
|
||||||
<script src="dist/converse.js"></script>
|
<script src="dist/converse.js"></script>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body class="reset">
|
<body class="reset" style="background-color: var(--global-background-color)">
|
||||||
<div id="conversejs-bg"></div>
|
<div id="conversejs-bg"></div>
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
|
converse.plugins.add('converse-debug', {
|
||||||
|
initialize () {
|
||||||
|
const { _converse } = this;
|
||||||
|
window._converse = _converse;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
converse.initialize({
|
converse.initialize({
|
||||||
auto_away: 300,
|
|
||||||
i18n: 'af',
|
i18n: 'af',
|
||||||
// auto_join_rooms: [
|
theme: 'dracula',
|
||||||
// 'discuss@conference.conversejs.org',
|
auto_away: 300,
|
||||||
// 'prosody@conference.prosody.im',
|
|
||||||
// 'jdev@conference.jabber.org'
|
|
||||||
// ],
|
|
||||||
websocket_url: 'wss://conversejs.org/xmpp-websocket',
|
|
||||||
bosh_service_url: 'https://conversejs.org/http-bind/', // Please use this connection manager only for testing purposes
|
|
||||||
view_mode: 'fullscreen',
|
|
||||||
notify_all_room_messages: [
|
|
||||||
'discuss@conference.conversejs.org'
|
|
||||||
],
|
|
||||||
enable_smacks: true,
|
enable_smacks: true,
|
||||||
muc_respect_autojoin: true,
|
loglevel: 'debug',
|
||||||
|
reuse_scram_keys: true,
|
||||||
|
prune_messages_above: 100,
|
||||||
message_archiving: 'always',
|
message_archiving: 'always',
|
||||||
debug: true
|
muc_respect_autojoin: true,
|
||||||
|
muc_show_logs_before_join: true,
|
||||||
|
notify_all_room_messages: ['discuss@conference.conversejs.org'],
|
||||||
|
view_mode: 'fullscreen',
|
||||||
|
// websocket_url: 'wss://conversejs.org/xmpp-websocket',
|
||||||
|
websocket_url: 'ws://chat.example.org:5380/xmpp-websocket',
|
||||||
|
whitelisted_plugins: ['converse-debug'],
|
||||||
|
// connection_options: { worker: '/dist/shared-connection-worker.js' }
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
|
@ -39,7 +39,7 @@ h5 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.sponsors-list {
|
.sponsors-list {
|
||||||
overflow-y: hidden !important;
|
overflow-y: auto !important;
|
||||||
overflow-x: hidden;
|
overflow-x: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,11 +6,9 @@
|
|||||||
<script src="scripts/prettify/prettify.js"></script>
|
<script src="scripts/prettify/prettify.js"></script>
|
||||||
<script src="scripts/prettify/lang-css.js"></script>
|
<script src="scripts/prettify/lang-css.js"></script>
|
||||||
<script src="./analytics.js"></script>
|
<script src="./analytics.js"></script>
|
||||||
<script src="/dist/converse.min.js"></script>
|
|
||||||
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
|
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
|
||||||
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
|
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
|
||||||
<link type="text/css" rel="stylesheet" href="/docs/source/_static/api.css">
|
<link type="text/css" rel="stylesheet" href="/docs/source/_static/api.css">
|
||||||
<link type="text/css" rel="stylesheet" href="/dist/converse.min.css">
|
|
||||||
<link rel="shortcut icon" href="/images/favicon.ico"/>
|
<link rel="shortcut icon" href="/images/favicon.ico"/>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
@ -61,6 +59,5 @@
|
|||||||
|
|
||||||
<script> prettyPrint(); </script>
|
<script> prettyPrint(); </script>
|
||||||
<script src="scripts/linenumber.js"> </script>
|
<script src="scripts/linenumber.js"> </script>
|
||||||
<script>converse.initialize({'bosh_service_url': 'https://conversejs.org/http-bind/'});</script>
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -2,15 +2,12 @@
|
|||||||
{% extends "!layout.html" %}
|
{% extends "!layout.html" %}
|
||||||
|
|
||||||
{# Custom CSS overrides #}
|
{# Custom CSS overrides #}
|
||||||
{% set css_files = css_files + ['_static/style.css', "../../dist/converse.min.css"] %}
|
{% set css_files = css_files + ['_static/style.css'] %}
|
||||||
{% set script_files = script_files + ["../../dist/converse.min.js", "../../analytics.js"] %}
|
{% set script_files = script_files + ["../../analytics.js"] %}
|
||||||
|
|
||||||
{# Add some extra stuff before and use existing with 'super()' call. #}
|
{# Add some extra stuff before and use existing with 'super()' call. #}
|
||||||
{% block footer %}
|
{% block footer %}
|
||||||
{{ super() }}
|
{{ super() }}
|
||||||
<script>
|
|
||||||
converse.initialize({'bosh_service_url': 'https://conversejs.org/http-bind/'});
|
|
||||||
</script>
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2,21 +2,21 @@
|
|||||||
<h4 class="sidebar-title">Sponsored by</h4>
|
<h4 class="sidebar-title">Sponsored by</h4>
|
||||||
</span>
|
</span>
|
||||||
<ul class="sponsors-list">
|
<ul class="sponsors-list">
|
||||||
<li><a href="https://www.keycdn.com/?utm_source=conversejs" target="_blank" rel="noopener">
|
<li><a href="https://bairesdev.com/sponsoring-open-source-projects/?utm_source=conversejs" target="_blank" rel="noopener">
|
||||||
<img style="height: 2em" src="/logo/keycdn.png" alt="KeyCDN">
|
<img style="width: 10em" src="/media/logos/bairesdev-primary.png" alt="BairesDev">
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li><a href="https://www.codefirst.co.uk/?utm_source=conversejs" target="_blank" rel="noopener">
|
|
||||||
<img style="width: 9em" src="/logo/codefirst.png" alt="Codefirst">
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li><a href="https://www.b1-systems.de/?utm_source=conversejs" target="_blank" rel="noopener">
|
|
||||||
<img style="height: 3em" src="/logo/b1-systems.svg" alt="B1 Systems">
|
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="https://blokt.com/?utm_source=conversejs" target="_blank" rel="noopener">
|
<li><a href="https://blokt.com/?utm_source=conversejs" target="_blank" rel="noopener">
|
||||||
<img style="width: 9em" src="/logo/blokt.png" alt="Blokt Crypto & Privacy">
|
<img style="width: 9em" src="/logo/blokt.png" alt="Blokt Crypto & Privacy">
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
<li><a href="https://primesound.org/?utm_source=conversejs" target="_blank" rel="noopener">
|
||||||
|
<img style="width: 9em" src="/media/logos/primesound.png" alt="Prime Sound">
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="https://www.keycdn.com/?utm_source=conversejs" target="_blank" rel="noopener">
|
||||||
|
<img style="height: 2.5em" src="/logo/keycdn.png" alt="KeyCDN">
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<span class="centered-text-container patreon-link-container"><a href="https://conversejs.org#sponsors">Become a sponsor</a></span>
|
<span class="centered-text-container patreon-link-container"><a href="https://conversejs.org#sponsors">Become a sponsor</a></span>
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
.. raw:: html
|
.. raw:: html
|
||||||
|
|
||||||
<div id="banner"><a href="https://github.com/jcbrand/converse.js/blob/master/docs/source/theming.rst">Edit me on GitHub</a></div>
|
<div id="banner"><a href="https://github.com/jcbrand/converse.js/blob/master/docs/source/api/index.rst">Edit me on GitHub</a></div>
|
||||||
|
|
||||||
============================================
|
============================================
|
||||||
The API documentation (generated with JSDoc)
|
The API documentation (generated with JSDoc)
|
||||||
|
@ -25,31 +25,16 @@ Generating builds
|
|||||||
Creating JavaScript and CSS bundles and distribution files
|
Creating JavaScript and CSS bundles and distribution files
|
||||||
==========================================================
|
==========================================================
|
||||||
|
|
||||||
Converse uses `webpack <https://webpack.js.org/>`_ to create bundles containing the
|
Converse uses `webpack <https://webpack.js.org/>`_ to create the final JavaScript and CSS distribution files.
|
||||||
core JavaScript code and all of the 3rd party dependencies.
|
|
||||||
|
|
||||||
Similarly, we use `Sass <http://sass-lang.com/>`_ to generate the CSS bundle
|
The generated distribution files are all placed in the ``./dist`` directory.
|
||||||
from ``.scss`` files in the ``sass`` directory.
|
The Converse repository does not include ``dist`` directory by default.
|
||||||
|
|
||||||
The generated JavaScript bundles are contained in the `dist <https://github.com/conversejs/converse.js/tree/master/dist>`_ directory
|
To generate the ``./dist`` directory and all CSS and JavaScript bundles, simply run ``make dist``.
|
||||||
and the generated CSS bundles in the `css <https://github.com/conversejs/converse.js/tree/master/css>`_ directory.
|
|
||||||
|
|
||||||
To generate a prticular bundle, for example the minified file ``converse.min.js``, you can run ``make dist/converse.min.js``.
|
|
||||||
This is also true for any of the other bundle files.
|
|
||||||
|
|
||||||
To generate all CSS and JavaScript bundles, you can run ``make dist``.
|
|
||||||
|
|
||||||
When you're developing, and constantly changing code, you can run ``make watch``
|
When you're developing, and constantly changing code, you can run ``make watch``
|
||||||
to let the bundles be automatically generated as soon as you edit a file.
|
to let the bundles be automatically generated as soon as you edit a file.
|
||||||
|
|
||||||
The Converse repository does not include the minified files in the ``dist`` or
|
|
||||||
``css`` directories. Before deployment, you'll want to generate them yourself.
|
|
||||||
|
|
||||||
To only generate the minified files, you can make them individually. ::
|
|
||||||
|
|
||||||
make dist/converse.min.js
|
|
||||||
make dist/converse.min.css
|
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
If you're on Windows or don't have GNU Make installed, you can run ``npm build``
|
If you're on Windows or don't have GNU Make installed, you can run ``npm build``
|
||||||
|
@ -48,9 +48,9 @@ copyright = u'2018, JC Brand'
|
|||||||
# built documents.
|
# built documents.
|
||||||
#
|
#
|
||||||
# The short X.Y version.
|
# The short X.Y version.
|
||||||
version = '5.0.0'
|
version = '10.1.6'
|
||||||
# The full version, including alpha/beta/rc tags.
|
# The full version, including alpha/beta/rc tags.
|
||||||
release = '5.0.0'
|
release = '10.1.6'
|
||||||
|
|
||||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||||
# for a list of supported languages.
|
# for a list of supported languages.
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,48 +1,57 @@
|
|||||||
.. raw:: html
|
.. raw:: html
|
||||||
|
|
||||||
<div id="banner"><a href="https://github.com/jcbrand/converse.js/blob/master/docs/source/theming.rst">Edit me on GitHub</a></div>
|
<div id="banner"><a href="https://github.com/jcbrand/converse.js/blob/master/docs/source/dependencies.rst">Edit me on GitHub</a></div>
|
||||||
|
|
||||||
============
|
.. _`development`:
|
||||||
Dependencies
|
|
||||||
============
|
============================
|
||||||
|
Setting up a dev environment
|
||||||
|
============================
|
||||||
|
|
||||||
Installing the 3rd party dependencies
|
Installing the 3rd party dependencies
|
||||||
=====================================
|
=====================================
|
||||||
|
|
||||||
We use development tools which depend on Node.js and npm (the Node package manager).
|
To develop and customize Converse, you'll first need to check out Converse's Git
|
||||||
|
repository:
|
||||||
If you don't have Node.js installed, you can download and install the latest
|
|
||||||
version `here <https://nodejs.org/download>`_.
|
|
||||||
|
|
||||||
Alternatively you can `use your operating system's package manager to install
|
|
||||||
Node.js <https://nodejs.org/en/download/package-manager/#debian-and-ubuntu-based-linux-distributions>`_.
|
|
||||||
|
|
||||||
Also make sure you have ``Git`` installed. `See here <http://git-scm.com/book/en/Getting-Started-Installing-Git>`_.
|
|
||||||
|
|
||||||
Now use ``git`` to check out the Converse repository:
|
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
git clone https://github.com/conversejs/converse.js.git
|
git clone https://github.com/conversejs/converse.js.git
|
||||||
|
cd converse.js
|
||||||
|
|
||||||
Now go into the repository checkout and run ``make dev`` in order to set up the
|
|
||||||
development environment.
|
We use development tools which depend on Node.js and NPM (the Node package manager).
|
||||||
|
|
||||||
|
It's recommended that you use `NVM <https://github.com/nvm-sh/nvm>`_ (the Node version manager)
|
||||||
|
to make sure you have the right version of Node.
|
||||||
|
|
||||||
|
Refer to the `NVM Github page <https://github.com/nvm-sh/nvm#install--update-script>`_ for instructions on how to install it.
|
||||||
|
|
||||||
|
Once NVM is installed, you can run the following inside your checkout of the Converse Git repository:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
nvm install
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
You will always have to first run ``nvm install`` in a new terminal session before working on Converse.
|
||||||
|
|
||||||
|
|
||||||
|
To set up the Converse development environment, you now run ``make dev``.
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
cd converse.js
|
|
||||||
make dev
|
make dev
|
||||||
|
|
||||||
If you're using Windows, or don't have GNU Make installed, you can run the
|
Alternatively, if you're using Windows, or don't have GNU Make installed, you can run the
|
||||||
following:
|
following:
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
cd converse.js
|
|
||||||
npm install
|
npm install
|
||||||
npm run lerna
|
npm run lerna
|
||||||
|
|
||||||
This will install the Node.js development tools and Converse's dependencies.
|
This will install the Node development tools and Converse's dependencies.
|
||||||
|
|
||||||
The front-end dependencies are those JavaScript files on which
|
The front-end dependencies are those JavaScript files on which
|
||||||
Converse directly depends and which will be loaded in the browser as part of
|
Converse directly depends and which will be loaded in the browser as part of
|
||||||
@ -64,37 +73,12 @@ the list under the ``devDependencies`` in `package.json <https://github.com/jcbr
|
|||||||
where you can log in and be taken directly to the chatroom.
|
where you can log in and be taken directly to the chatroom.
|
||||||
|
|
||||||
|
|
||||||
Brief description of Converse's dependencies
|
|
||||||
===============================================
|
|
||||||
|
|
||||||
Converse relies on the following dependencies:
|
|
||||||
|
|
||||||
* `DayJS <https://github.com/iamkun/dayjs>`_ provides a better API for handling dates and times.
|
|
||||||
* `Strophe.js <http://strophe.im/>`_ maintains the XMPP session, is used to
|
|
||||||
build XMPP stanzas, to send them, and to register handlers for received stanzas.
|
|
||||||
* `lodash <https://lodash.com/>`_ provides very useful utility functions.
|
|
||||||
* `Backbone <http://backbonejs.org/>`_ is used to model the data as Models and
|
|
||||||
Collections and to create Views that render the UI.
|
|
||||||
* `backbone.overview <http://github.com/jcbrand/backbone.overview>`_ provides
|
|
||||||
``Backbone.Overview``, which is to Views as Backbone Collection is to Models.
|
|
||||||
It also provides the ``Backbone.OrderedListView`` which is used to show
|
|
||||||
alphabetically sorted lists, such as your contacts roster.
|
|
||||||
* `backbone.vdomview <http://github.com/jcbrand/backbone.vdomview>`_ provides
|
|
||||||
``Backbone.VDOMView`` that uses the `Snabbdom <https://github.com/snabbdom/snabbdom>`_
|
|
||||||
virtual DOM for rendering DOM elements.
|
|
||||||
* `pluggable.js <https://github.com/jcbrand/pluggable.js>`_ provides the plugin
|
|
||||||
architecture for Converse. It registers and initializes plugins and
|
|
||||||
allows existing attributes, functions and objects on Converse to be
|
|
||||||
overridden inside plugins.
|
|
||||||
|
|
||||||
.. _`dependency-libsignal`:
|
.. _`dependency-libsignal`:
|
||||||
|
|
||||||
Libsignal
|
Libsignal
|
||||||
---------
|
---------
|
||||||
|
|
||||||
If you want OMEMO encryption, you need to load `libsignal
|
If you want OMEMO encryption, you need to load `libsignal <https://github.com/signalapp/libsignal-protocol-javascript>`_ separately in your page.
|
||||||
<https://github.com/signalapp/libsignal-protocol-javascript>`_ separately in
|
|
||||||
your page.
|
|
||||||
|
|
||||||
For example::
|
For example::
|
||||||
|
|
||||||
@ -105,3 +89,51 @@ under the `GPLv3 <https://github.com/signalapp/libsignal-protocol-javascript/blo
|
|||||||
which requires all other dependent JavaScript code to also be open sourced under the same
|
which requires all other dependent JavaScript code to also be open sourced under the same
|
||||||
license. You might not be willing to adhere to those terms, which is why you
|
license. You might not be willing to adhere to those terms, which is why you
|
||||||
need to decide for yourself whether you're going to load libsignal or not.
|
need to decide for yourself whether you're going to load libsignal or not.
|
||||||
|
|
||||||
|
|
||||||
|
.. _`webserver`:
|
||||||
|
|
||||||
|
Setting up a webserver
|
||||||
|
======================
|
||||||
|
|
||||||
|
When making changes to Converse, either development or theming changes,
|
||||||
|
you'll want to preview them in your browser.
|
||||||
|
|
||||||
|
For this, you'll need to serve the development files via a web server,
|
||||||
|
so that you can see your local changes in the browser.
|
||||||
|
|
||||||
|
Manually starting a web server
|
||||||
|
------------------------------
|
||||||
|
|
||||||
|
To both set up the development environment and also start up a web browser to
|
||||||
|
serve the files for you, you can run::
|
||||||
|
|
||||||
|
make serve
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
To run the "make" commands, you'll need `GNUMake <https://www.gnu.org/software/make>`_
|
||||||
|
installed on your computer. If you use GNU/Linux or \*BSD, it should be installed or
|
||||||
|
available via your package manager. For Mac, you'll need to install XCode and in
|
||||||
|
Windows you can use `Chocolatey <https://chocolatey.org/>`_.
|
||||||
|
|
||||||
|
After running ``make serve`` you can open http://localhost:8000 in your webbrowser to see the Converse website.
|
||||||
|
|
||||||
|
When developing or changing the theme, you'll want to load all the
|
||||||
|
unminified JS and CSS resources as separate files. To do this, open http://localhost:8000/dev.html instead.
|
||||||
|
|
||||||
|
You might want to open `dev.html <https://github.com/conversejs/converse.js/blob/master/dev.html>`_ in your text editor or IDE as well, to see
|
||||||
|
how ``converse.initialize`` is called and to potentially change any of the
|
||||||
|
settings.
|
||||||
|
|
||||||
|
Starting a web server with live reloading
|
||||||
|
-----------------------------------------
|
||||||
|
|
||||||
|
Alternatively, if you want to have live reloading whenever any of the source files change, you
|
||||||
|
can run ``make devserver`` (which will use `webpack-dev-server <https://github.com/webpack/webpack-dev-server>`_).
|
||||||
|
|
||||||
|
Instead of ``dev.html`` being used, `webpack.html <https://github.com/conversejs/converse.js/blob/master/webpack.html>`_
|
||||||
|
is now being used as the HTML template, and you'll need to modify that file if
|
||||||
|
you want to change the settings passed to ``converse.initialize``.
|
||||||
|
|
||||||
|
If you're running ``make devserver``, you need to open http://localhost:8080.
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
<div id="banner"><a href="https://github.com/jcbrand/converse.js/blob/master/docs/source/development.rst">Edit me on GitHub</a></div>
|
<div id="banner"><a href="https://github.com/jcbrand/converse.js/blob/master/docs/source/development.rst">Edit me on GitHub</a></div>
|
||||||
|
|
||||||
.. _development:
|
.. _`development`:
|
||||||
|
|
||||||
===========
|
===========
|
||||||
Development
|
Development
|
||||||
@ -23,10 +23,10 @@ to fix a bug or to add new functionality.
|
|||||||
.. toctree::
|
.. toctree::
|
||||||
:maxdepth: 2
|
:maxdepth: 2
|
||||||
|
|
||||||
dependencies
|
setup_dev_environment
|
||||||
style_guide
|
|
||||||
plugin_development
|
plugin_development
|
||||||
api/index
|
api/index
|
||||||
testing
|
testing
|
||||||
other_frameworks
|
other_frameworks
|
||||||
builds
|
builds
|
||||||
|
style_guide
|
||||||
|
@ -27,14 +27,20 @@ Converse.
|
|||||||
|
|
||||||
.. _`feature-omemo`:
|
.. _`feature-omemo`:
|
||||||
|
|
||||||
End to end message encryption (`XEP-0384 OMEMO <https://xmpp.org/extensions/xep-0363.html>`_)
|
End to end message encryption (`XEP-0384 OMEMO <https://xmpp.org/extensions/xep-0384.html>`_)
|
||||||
=============================================================================================
|
=============================================================================================
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
Converse.js (as of version 4.1.2) does NOT support encryption or decryption
|
Converse versions older than 8.0.0 do NOT support encryption or decryption
|
||||||
of uploaded files. Files will be uploaded WITHOUT ENCRYPTION, even when
|
of uploaded files. Files will be uploaded WITHOUT ENCRYPTION, even when
|
||||||
OMEMO is enabled.
|
OMEMO is enabled.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
For end-to-end encryption via OMEMO, you'll need to load `libsignal-protocol.js
|
||||||
|
<https://github.com/signalapp/libsignal-protocol-javascript>`_ separately in
|
||||||
|
your page. Take a look at the section on :ref:`libsignal <dependency-libsignal>` and the
|
||||||
|
:ref:`security considerations around OMEMO <feature-omemo>`.
|
||||||
|
|
||||||
Converse supports OMEMO encryption based on the
|
Converse supports OMEMO encryption based on the
|
||||||
`Signal Protocol <https://github.com/signalapp/libsignal-protocol-javascript>`_.
|
`Signal Protocol <https://github.com/signalapp/libsignal-protocol-javascript>`_.
|
||||||
|
|
||||||
@ -44,7 +50,9 @@ ever tear down a session once one has been established.
|
|||||||
|
|
||||||
This means that a session needs to be stored permanently after logging out.
|
This means that a session needs to be stored permanently after logging out.
|
||||||
|
|
||||||
Converse stores this session information in the browser's `localStorage <https://developer.mozilla.org/en-US/docs/Web/API/Storage/LocalStorage>`_.
|
Converse stores this session information in the browser's `IndexedDB <https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API>`_
|
||||||
|
or `localStorage <https://developer.mozilla.org/en-US/docs/Web/API/Storage/LocalStorage>`_
|
||||||
|
database, depending on the value provided to :ref:`persistent-store`.
|
||||||
|
|
||||||
If you've checked the "This is not a trusted device" checkbox when logging in,
|
If you've checked the "This is not a trusted device" checkbox when logging in,
|
||||||
then `sessionStorage <https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage>`_
|
then `sessionStorage <https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage>`_
|
||||||
@ -88,10 +96,7 @@ headers.
|
|||||||
Due to these reasons, it's NOT a good idea to use encrypted messaging with a
|
Due to these reasons, it's NOT a good idea to use encrypted messaging with a
|
||||||
browser-based solution in life-threatening situations.
|
browser-based solution in life-threatening situations.
|
||||||
|
|
||||||
Security can be increased by using an installable app (like one based on `Electron <https://electronjs.org/>`_)
|
Security can be increased by using an installable app (like `Converse Desktop <https://github.com/conversejs/converse-desktop>`_).
|
||||||
with a strict Content Security Policy.
|
|
||||||
|
|
||||||
Look out for an Electron based version of Converse coming in the following months.
|
|
||||||
|
|
||||||
For further reading on the challenges of web-based crypto, take a look at these
|
For further reading on the challenges of web-based crypto, take a look at these
|
||||||
articles:
|
articles:
|
||||||
@ -137,10 +142,13 @@ For more info, refer to the :ref:`show-desktop-notifications` configuration sett
|
|||||||
Multilingual Support
|
Multilingual Support
|
||||||
====================
|
====================
|
||||||
|
|
||||||
Converse is translated into multiple languages. Translations are supplied in
|
Converse is translated into over 30 languages. Translations can be added or
|
||||||
JSON format and are loaded on demand. Converse will expect to find the
|
updated on `Weblate <https://hosted.weblate.org/projects/conversejs/>`_.
|
||||||
translations in the ``/locales`` path of your site. This can be changed via the
|
|
||||||
:ref:`locales-url` configuration setting.
|
Translations are supplied in JSON format and are loaded on demand. Converse will expect to find the
|
||||||
|
translations in the ``/dist/locales`` path of your site. This path can be
|
||||||
|
changed via the :ref:`assets_path` configuration setting.
|
||||||
|
|
||||||
|
|
||||||
Moderating chatrooms
|
Moderating chatrooms
|
||||||
====================
|
====================
|
||||||
|
@ -44,10 +44,11 @@ Table of Contents
|
|||||||
quickstart
|
quickstart
|
||||||
features
|
features
|
||||||
setup
|
setup
|
||||||
|
session
|
||||||
configuration
|
configuration
|
||||||
development
|
development
|
||||||
security
|
|
||||||
theming
|
theming
|
||||||
|
security
|
||||||
translations
|
translations
|
||||||
troubleshooting
|
troubleshooting
|
||||||
documentation
|
documentation
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
.. raw:: html
|
.. raw:: html
|
||||||
|
|
||||||
<div id="banner"><a href="https://github.com/jcbrand/converse.js/blob/master/docs/source/theming.rst">Edit me on GitHub</a></div>
|
<div id="banner"><a href="https://github.com/jcbrand/converse.js/blob/master/docs/source/other_frameworks.rst">Edit me on GitHub</a></div>
|
||||||
|
|
||||||
Integrating converse.js into other frameworks
|
Integrating converse.js into other frameworks
|
||||||
=============================================
|
=============================================
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
.. raw:: html
|
.. raw:: html
|
||||||
|
|
||||||
<div id="banner"><a href="https://github.com/jcbrand/converse.js/blob/master/docs/source/theming.rst">Edit me on GitHub</a></div>
|
<div id="banner"><a href="https://github.com/jcbrand/converse.js/blob/master/docs/source/plugin_development.rst">Edit me on GitHub</a></div>
|
||||||
|
|
||||||
.. _`writing-a-plugin`:
|
.. _`writing-a-plugin`:
|
||||||
|
|
||||||
@ -16,7 +16,7 @@ and is itself composed out of plugins.
|
|||||||
There are only a few files that are included in the default build of Converse
|
There are only a few files that are included in the default build of Converse
|
||||||
which aren't plugins.
|
which aren't plugins.
|
||||||
|
|
||||||
An important one is `converse-core.js <https://github.com/conversejs/converse.js/blob/master/src/headless/converse-core.js>`_,
|
An important one is `core.js <https://github.com/conversejs/.js/blob/master/src/headless/core.js>`_,
|
||||||
which is responsible for bootstrapping the plugin architecture,
|
which is responsible for bootstrapping the plugin architecture,
|
||||||
setting up and maintaining the connection to the XMPP
|
setting up and maintaining the connection to the XMPP
|
||||||
server and declaring the public (`window.converse </docs/html/api/converse.html>`_) and protected (`_converse.api </docs/html/api/-_converse.api.html>`_) APIs.
|
server and declaring the public (`window.converse </docs/html/api/converse.html>`_) and protected (`_converse.api </docs/html/api/-_converse.api.html>`_) APIs.
|
||||||
@ -64,8 +64,8 @@ Each plugin comes in its own file, and Converse's plugin architecture,
|
|||||||
with the ability to "hook in" to the core code and other plugins.
|
with the ability to "hook in" to the core code and other plugins.
|
||||||
|
|
||||||
Plugins enable developers to extend and override existing objects,
|
Plugins enable developers to extend and override existing objects,
|
||||||
functions and the `Backbone <http://backbonejs.org/>`_ models and views that make up
|
functions and the models and views that make up
|
||||||
Converse. You can also create new Backbone (or other) models and views.
|
Converse. You can also create new models and views.
|
||||||
|
|
||||||
.. note:: **Trying out a plugin in JSFiddle**
|
.. note:: **Trying out a plugin in JSFiddle**
|
||||||
|
|
||||||
@ -151,7 +151,7 @@ The globally available ``converse`` object, which exposes the API methods, such
|
|||||||
as ``initialize`` and ``plugins.add``, is a wrapper that encloses and protects
|
as ``initialize`` and ``plugins.add``, is a wrapper that encloses and protects
|
||||||
a sensitive inner object, named ``_converse`` (not the underscore prefix).
|
a sensitive inner object, named ``_converse`` (not the underscore prefix).
|
||||||
|
|
||||||
This inner ``_converse`` object contains all the Backbone models and views,
|
This inner ``_converse`` object contains all the models and views,
|
||||||
as well as various other attributes and functions.
|
as well as various other attributes and functions.
|
||||||
|
|
||||||
Within a plugin, you will have access to this internal
|
Within a plugin, you will have access to this internal
|
||||||
@ -167,7 +167,7 @@ Accessing 3rd party libraries
|
|||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
Immediately inside the module shown above you can access 3rd party libraries (such
|
Immediately inside the module shown above you can access 3rd party libraries (such
|
||||||
dayjs and lodash) via the ``converse.env`` map.
|
dayjs) via the ``converse.env`` map.
|
||||||
|
|
||||||
The code for it could look something like this:
|
The code for it could look something like this:
|
||||||
|
|
||||||
@ -175,13 +175,61 @@ The code for it could look something like this:
|
|||||||
|
|
||||||
// Commonly used utilities and variables can be found under the "env"
|
// Commonly used utilities and variables can be found under the "env"
|
||||||
// namespace of the "converse" global.
|
// namespace of the "converse" global.
|
||||||
const { Backbone, Promise, Strophe, dayjs, sizzle, _, $build, $iq, $msg, $pres } = converse.env;
|
const { Promise, Strophe, dayjs, sizzle, $build, $iq, $msg, $pres } = converse.env;
|
||||||
|
|
||||||
These dependencies are closured so that they don't pollute the global
|
These dependencies are closured so that they don't pollute the global
|
||||||
namespace, that's why you need to access them in such a way inside the module.
|
namespace, that's why you need to access them in such a way inside the module.
|
||||||
|
|
||||||
Overrides
|
Overriding templates
|
||||||
---------
|
--------------------
|
||||||
|
|
||||||
|
Converse uses `lit-html <https://lit-html.polymer-project.org/guide>`_
|
||||||
|
templates and templates are imported as separate files.
|
||||||
|
|
||||||
|
It's possible to configure your module bundler (e.g. Webpack) in such as way that a
|
||||||
|
different file is loaded when a template is imported.
|
||||||
|
|
||||||
|
This allows you to create your own templates that are used instead of the ones
|
||||||
|
that would have originally been imported.
|
||||||
|
|
||||||
|
With Webpack (which Converse uses internally), you can specify an
|
||||||
|
``alias`` for the template you want to override. This alias then points to your
|
||||||
|
own custom template.
|
||||||
|
|
||||||
|
For example, in your webpack config file, you could add the following to the
|
||||||
|
``config`` object that gets exported:
|
||||||
|
|
||||||
|
.. code-block:: javascript
|
||||||
|
|
||||||
|
resolve: {
|
||||||
|
extensions: ['.js'],
|
||||||
|
modules: [
|
||||||
|
path.join(__dirname, 'node_modules'),
|
||||||
|
path.join(__dirname, 'node_modules/converse.js/src')
|
||||||
|
],
|
||||||
|
alias: {
|
||||||
|
'plugins/profile/templates/profile.js$': path.resolve(__dirname, 'templates/custom-profile.js')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
This will override the template that gets imported at the path ``plugins/profile/templates/profile.js``
|
||||||
|
with your own template at the path ``templates/custom-profile.js`` (relative to your webpack config file).
|
||||||
|
|
||||||
|
|
||||||
|
Object and class Overrides
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
.. note:: Using the `overrides` feature from pluggable.js is discouraged. It's
|
||||||
|
much better to use events, promises and `hooks`_ to modify the behaviour of
|
||||||
|
Converse.
|
||||||
|
|
||||||
|
The pluggable.js `overrides` will only work on objects and classes that are
|
||||||
|
set as attributes on the `_converse` object, which doesn't apply to many
|
||||||
|
newer classes and objects, such as the web components. For these clasess,
|
||||||
|
overrides won't work at all.
|
||||||
|
|
||||||
|
This section is left here for completeness, because in some special cases
|
||||||
|
overrides are still used.
|
||||||
|
|
||||||
Plugins can override core code or code from other plugins. You can specify
|
Plugins can override core code or code from other plugins. You can specify
|
||||||
overrides in the object passed to ``converse.plugins.add``.
|
overrides in the object passed to ``converse.plugins.add``.
|
||||||
@ -216,7 +264,7 @@ The following code snippet provides an example of two different overrides:
|
|||||||
// Your custom code can come here ...
|
// Your custom code can come here ...
|
||||||
},
|
},
|
||||||
|
|
||||||
/* On the XMPPStatus Backbone model is a method sendPresence.
|
/* On the XMPPStatus model is a method sendPresence.
|
||||||
* We can override is as follows:
|
* We can override is as follows:
|
||||||
*/
|
*/
|
||||||
XMPPStatus: {
|
XMPPStatus: {
|
||||||
@ -242,7 +290,7 @@ monkey patching which pollutes the call stack and can make your code fragile
|
|||||||
and prone to bugs when Converse gets updated. Too much use of ``overrides``
|
and prone to bugs when Converse gets updated. Too much use of ``overrides``
|
||||||
is therefore a "code smell" which should ideally be avoided.
|
is therefore a "code smell" which should ideally be avoided.
|
||||||
|
|
||||||
A better approach is to listen to the events emitted by Converse, and to add
|
A better approach is to use the events and `hooks`_ emitted by Converse, and to add
|
||||||
your code in event handlers. This is however not always possible, in which case
|
your code in event handlers. This is however not always possible, in which case
|
||||||
the overrides are a powerful tool.
|
the overrides are a powerful tool.
|
||||||
|
|
||||||
@ -260,63 +308,6 @@ For example:
|
|||||||
Object.assign(_converse.ChatBoxView.prototype, { doSomething });
|
Object.assign(_converse.ChatBoxView.prototype, { doSomething });
|
||||||
|
|
||||||
|
|
||||||
Overriding a template
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Converse uses various templates, loaded with lodash, to generate its HTML.
|
|
||||||
|
|
||||||
It's not possible to override a template with the plugin's ``overrides``
|
|
||||||
feature, instead you should configure a new path to your own template via your
|
|
||||||
module bundler.
|
|
||||||
|
|
||||||
For example, with Webpack (which Converse uses internall), you can specify an
|
|
||||||
``alias`` for the template you want to override. This alias then points to your
|
|
||||||
own custom template.
|
|
||||||
|
|
||||||
For example, in your webpack config file, you could add the following to the
|
|
||||||
``config`` object that gets exported:
|
|
||||||
|
|
||||||
.. code-block:: javascript
|
|
||||||
|
|
||||||
module: {
|
|
||||||
{
|
|
||||||
test: /templates\/.*\.(html|svg)$/,
|
|
||||||
use: [{
|
|
||||||
loader: 'lodash-template-webpack-loader',
|
|
||||||
options: {
|
|
||||||
escape: /\{\{\{([\s\S]+?)\}\}\}/g,
|
|
||||||
evaluate: /\{\[([\s\S]+?)\]\}/g,
|
|
||||||
interpolate: /\{\{([\s\S]+?)\}\}/g,
|
|
||||||
// By default, template places the values from your data in the
|
|
||||||
// local scope via the with statement. However, you can specify
|
|
||||||
// a single variable name with the variable setting. This can
|
|
||||||
// significantly improve the speed at which a template is able
|
|
||||||
// to render.
|
|
||||||
variable: 'o',
|
|
||||||
prependFilenameComment: __dirname
|
|
||||||
}
|
|
||||||
}]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
resolve: {
|
|
||||||
extensions: ['.js'],
|
|
||||||
modules: [
|
|
||||||
path.join(__dirname, 'node_modules'),
|
|
||||||
path.join(__dirname, 'node_modules/converse.js/src')
|
|
||||||
],
|
|
||||||
alias: {
|
|
||||||
'templates/profile_view.html$': path.resolve(__dirname, 'templates/profile_view.html')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
You'll need to install ``lodash-template-webpack-loader``.
|
|
||||||
|
|
||||||
Currently Converse uses a fork of `lodash-template-webpack-loader <https://github.com/jcbrand/lodash-template-webpack-loader>`_.
|
|
||||||
|
|
||||||
To install it, you can add ``"lodash-template-webpack-loader": "jcbrand/lodash-template-webpack-loader"``
|
|
||||||
to your package.json's ``devDependencies``.
|
|
||||||
|
|
||||||
|
|
||||||
.. _`dependencies`:
|
.. _`dependencies`:
|
||||||
|
|
||||||
@ -459,8 +450,87 @@ Please refer to the `API documentation </docs/html/api/http://localhost:8008/doc
|
|||||||
for an overview of what's available to you. If you need new events or promises, then
|
for an overview of what's available to you. If you need new events or promises, then
|
||||||
`please open an issue or make a pull request on Github <https://github.com/jcbrand/converse.js>`_
|
`please open an issue or make a pull request on Github <https://github.com/jcbrand/converse.js>`_
|
||||||
|
|
||||||
A full example plugin
|
|
||||||
---------------------
|
Hooks
|
||||||
|
-----
|
||||||
|
|
||||||
|
Converse has the concept of ``hooks``, which are special events that allow you
|
||||||
|
to modify it's behaviour at runtime.
|
||||||
|
|
||||||
|
A hook is similar to an event, but it differs in two meaningful ways:
|
||||||
|
|
||||||
|
1. Converse will wait for all handlers of a hook to finish before continuing inside the function from where the hook was triggered.
|
||||||
|
2. Each hook contains a payload, which the handlers can modify or extend, before returning it (either to the function that triggered the hook or to subsequent handlers).
|
||||||
|
|
||||||
|
These two properties of hooks makes it possible for 3rd party plugins to
|
||||||
|
intercept and update data, allowing them to modify Converse without the need of
|
||||||
|
resorting to `overrides`_.
|
||||||
|
|
||||||
|
A hook is triggered in the following way:
|
||||||
|
|
||||||
|
.. code-block:: javascript
|
||||||
|
|
||||||
|
async function hookTriggerExample () {
|
||||||
|
const payload = { foo: 'bar' };
|
||||||
|
const updated_payload = await api.hook('hookName', this, payload);
|
||||||
|
return updated_payload;
|
||||||
|
}
|
||||||
|
|
||||||
|
The above could be shortened:
|
||||||
|
|
||||||
|
.. code-block:: javascript
|
||||||
|
|
||||||
|
async function hookTriggerExample () {
|
||||||
|
return await api.hook('hookName', this, { foo: 'bar' });
|
||||||
|
}
|
||||||
|
|
||||||
|
The ``async/await`` syntax could also be removed, but then it's less clear to
|
||||||
|
the reader that this function returns a promise.
|
||||||
|
|
||||||
|
Let's assume that in a plugin somewhere a listener is registered for this hook:
|
||||||
|
|
||||||
|
.. code-block:: javascript
|
||||||
|
|
||||||
|
function hookListenerExample () {
|
||||||
|
|
||||||
|
api.listen.on('hookname', (context, payload) => {
|
||||||
|
return {...payload, 'baz': 'buzz'};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
The ``context`` parameter in our listener is usually the ``this`` of the function
|
||||||
|
that triggered the hook (as is the case in ``hookTriggerExample``),
|
||||||
|
but could also be a ``Model`` instance.
|
||||||
|
|
||||||
|
The ``payload`` parameter is the same payload that was passed in in
|
||||||
|
``hookTriggerExample``.
|
||||||
|
|
||||||
|
The ``hookListenerExample`` function accepts the payload and returns a new one
|
||||||
|
which contains the original payload together with a new key and value.
|
||||||
|
|
||||||
|
The ``updated_payload`` that is now returned from ``hookTriggerExample`` looks
|
||||||
|
as follows:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
{ foo: 'bar', bazz: 'buzz' }
|
||||||
|
|
||||||
|
Our plugin was able to add data to the payload without requiring any kind of
|
||||||
|
knowledge from ``hookTriggerExample`` about ``hookListenerExample`` and
|
||||||
|
without any kind of coupling betwee the code.
|
||||||
|
|
||||||
|
A good example of a real-world hook in Converse, is the
|
||||||
|
`getMessageActionButtons <https://conversejs.org/docs/html/api/-_converse.html#event:getMessageActionButtons>`_
|
||||||
|
which allows you to add, modify or delete the actions you can take on a message
|
||||||
|
in a chat.
|
||||||
|
|
||||||
|
The `Actions <https://github.com/conversejs/community-plugins/tree/master/packages/actions>`_
|
||||||
|
3rd party community plugin makes use of this hook to add extra actions such as
|
||||||
|
``like`` or ``dislike`` to chat messages.
|
||||||
|
|
||||||
|
|
||||||
|
An example plugin
|
||||||
|
-----------------
|
||||||
|
|
||||||
Below follows a documented example of a plugin. This is the same code that gets
|
Below follows a documented example of a plugin. This is the same code that gets
|
||||||
generated by `generator-conversejs <https://github.com/jcbrand/generator-conversejs>`_.
|
generated by `generator-conversejs <https://github.com/jcbrand/generator-conversejs>`_.
|
||||||
@ -471,7 +541,7 @@ generated by `generator-conversejs <https://github.com/jcbrand/generator-convers
|
|||||||
|
|
||||||
// Commonly used utilities and variables can be found under the "env"
|
// Commonly used utilities and variables can be found under the "env"
|
||||||
// namespace of the "converse" global.
|
// namespace of the "converse" global.
|
||||||
const { Backbone, Promise, Strophe, dayjs, sizzle, _, $build, $iq, $msg, $pres } = converse.env;
|
const { Promise, Strophe, dayjs, sizzle, _, $build, $iq, $msg, $pres } = converse.env;
|
||||||
|
|
||||||
// The following line registers your plugin.
|
// The following line registers your plugin.
|
||||||
converse.plugins.add("myplugin", {
|
converse.plugins.add("myplugin", {
|
||||||
@ -534,8 +604,8 @@ generated by `generator-conversejs <https://github.com/jcbrand/generator-convers
|
|||||||
* _converse.api.promises.add('myPromise');
|
* _converse.api.promises.add('myPromise');
|
||||||
*
|
*
|
||||||
* Your plugin should then, when appropriate, resolve the
|
* Your plugin should then, when appropriate, resolve the
|
||||||
* promise by calling `_converse.api.emit`, which will also
|
* promise by calling `_converse.api.trigger`, which will also
|
||||||
* emit an event with the same name as the promise.
|
* trigger an event with the same name as the promise.
|
||||||
* For example:
|
* For example:
|
||||||
*
|
*
|
||||||
* _converse.api.trigger('operationCompleted');
|
* _converse.api.trigger('operationCompleted');
|
||||||
@ -549,53 +619,22 @@ generated by `generator-conversejs <https://github.com/jcbrand/generator-convers
|
|||||||
*
|
*
|
||||||
* _converse.api.waitUntil('operationCompleted', function { ... });
|
* _converse.api.waitUntil('operationCompleted', function { ... });
|
||||||
*/
|
*/
|
||||||
},
|
|
||||||
|
|
||||||
/* If you want to override some function or a Backbone model or
|
|
||||||
* view defined elsewhere in Converse, then you do that under
|
/* In your plugin, you can also listen for hooks.
|
||||||
* the "overrides" namespace.
|
* Hooks allow you to add or modify data and properties used by
|
||||||
|
* Converse.
|
||||||
|
*
|
||||||
|
* For example, the getToolbarButtons hook allows you to add new buttons to the chat toolbar.
|
||||||
|
* https://conversejs.org/docs/html/api/-_converse.html#event:getToolbarButtons
|
||||||
*/
|
*/
|
||||||
overrides: {
|
api.listen.on('getToolbarButtons', (toolbar_el, buttons) => {
|
||||||
/* For example, the private *_converse* object has a
|
buttons.push(html`
|
||||||
* method "onConnected". You can override that method as follows:
|
<button class="my-button" @click=${alert('hello world!')}>
|
||||||
*/
|
<converse-icon class="fa fa-eye" size="1em" color="blue"></converse-icon>
|
||||||
onConnected: function () {
|
</button>
|
||||||
// Overrides the onConnected method in Converse
|
`);
|
||||||
|
return buttons;
|
||||||
// Top-level functions in "overrides" are bound to the
|
});
|
||||||
// inner "_converse" object.
|
|
||||||
const _converse = this;
|
|
||||||
|
|
||||||
// Your custom code can come here ...
|
|
||||||
|
|
||||||
// You can access the original function being overridden
|
|
||||||
// via the __super__ attribute.
|
|
||||||
// Make sure to pass on the arguments supplied to this
|
|
||||||
// function and also to apply the proper "this" object.
|
|
||||||
_converse.__super__.onConnected.apply(this, arguments);
|
|
||||||
|
|
||||||
// Your custom code can come here ...
|
|
||||||
},
|
|
||||||
|
|
||||||
/* Override Converse's XMPPStatus Backbone model so that we can override the
|
|
||||||
* function that sends out the presence stanza.
|
|
||||||
*/
|
|
||||||
XMPPStatus: {
|
|
||||||
sendPresence: function (type, status_message, jid) {
|
|
||||||
// The "_converse" object is available via the __super__
|
|
||||||
// attribute.
|
|
||||||
const _converse = this.__super__._converse;
|
|
||||||
|
|
||||||
// Custom code can come here ...
|
|
||||||
|
|
||||||
// You can call the original overridden method, by
|
|
||||||
// accessing it via the __super__ attribute.
|
|
||||||
// When calling it, you need to apply the proper
|
|
||||||
// context as reference by the "this" variable.
|
|
||||||
this.__super__.sendPresence.apply(this, arguments);
|
|
||||||
|
|
||||||
// Custom code can come here ...
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -9,36 +9,34 @@ Quickstart
|
|||||||
Getting a demo up and running
|
Getting a demo up and running
|
||||||
=============================
|
=============================
|
||||||
|
|
||||||
You can try out the latest version of Converse on `conversejs.org <https://conversejs.org>`_
|
You can try out the latest version of Converse at `conversejs.org <https://conversejs.org>`_
|
||||||
for the overlayed version and `conversejs.org/fullscreen.html <https://conversejs.org/fullscreen.html>`_
|
for the overlayed version and `conversejs.org/fullscreen.html <https://conversejs.org/fullscreen.html>`_
|
||||||
for the full page version.
|
for the full page version.
|
||||||
|
|
||||||
If you want to host Converse yourself, there are a few options available to
|
If you want to host and serve Converse yourself, there are a few options available.
|
||||||
you.
|
|
||||||
|
|
||||||
Let your XMPP server serve Converse for you
|
Let your XMPP server serve Converse for you
|
||||||
-------------------------------------------
|
-------------------------------------------
|
||||||
|
|
||||||
If you run your own XMPP server, you might first want to check whether it has
|
If you run your own XMPP server, you might first want to check whether it has
|
||||||
a plugin or module for hosting Converse for you.
|
a plugin or module for hosting Converse.
|
||||||
|
|
||||||
* OpenFire has the `inverse <https://www.igniterealtime.org/projects/openfire/plugin-archive.jsp?plugin=inverse>`_ plugin.
|
* `Openfire <http://www.igniterealtime.org/projects/openfire/>`_ has the `inverse <https://www.igniterealtime.org/projects/openfire/plugin-archive.jsp?plugin=inverse>`_ plugin.
|
||||||
* Prosody has `mod_conversejs <https://modules.prosody.im/mod_conversejs.html>`_.
|
* `Prosody <https://prosody.im/>`_ has `mod_conversejs <https://modules.prosody.im/mod_conversejs.html>`_.
|
||||||
|
* `ejabberd <http://www.ejabberd.im/>`_ has `mod_conversejs <https://docs.ejabberd.im/admin/configuration/modules/#mod-conversejs>`_.
|
||||||
|
|
||||||
|
|
||||||
Serving Converse yourself
|
Serving Converse yourself
|
||||||
-------------------------
|
-------------------------
|
||||||
|
|
||||||
Alternative you can serve only Converse without requiring any particular
|
Alternative you can serve only Converse without requiring any particular XMPP server.
|
||||||
XMPP server.
|
|
||||||
|
|
||||||
To do so, you'll need to get the right files to host, for which you have four
|
To do so, you'll need to get the right files to host, for which you have four options.
|
||||||
options.
|
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
Pro-tip, if you just want to quickly test things locally, you can quickly start
|
Pro-tip, if you just want to quickly test things locally, you can run ``make serve`` inside a checkout of the Converse repo.
|
||||||
up an HTTP server with Python by running ``python -m SimpleHTTPServer``
|
Converse is then hosted at http://localhost:8000
|
||||||
|
|
||||||
|
|
||||||
Option 1: Use the content delivery network
|
Option 1: Use the content delivery network
|
||||||
@ -58,16 +56,16 @@ might break when a new backwards-incompatible version of Converse is released.
|
|||||||
|
|
||||||
To load a specific version of Converse you can put the version in the URL:
|
To load a specific version of Converse you can put the version in the URL:
|
||||||
|
|
||||||
* https://cdn.conversejs.org/5.0.0/dist/converse.min.js
|
* https://cdn.conversejs.org/10.1.6/dist/converse.min.js
|
||||||
* https://cdn.conversejs.org/5.0.0/dist/converse.min.css
|
* https://cdn.conversejs.org/10.1.6/dist/converse.min.css
|
||||||
|
|
||||||
You can include these two URLs inside the *<head>* element of your website
|
You can include these two URLs inside the *<head>* element of your website
|
||||||
via the *script* and *link* tags:
|
via the *script* and *link* tags:
|
||||||
|
|
||||||
.. code-block:: html
|
.. code-block:: html
|
||||||
|
|
||||||
<link rel="stylesheet" type="text/css" media="screen" href="https://cdn.conversejs.org/5.0.0/dist/converse.min.css">
|
<link rel="stylesheet" type="text/css" media="screen" href="https://cdn.conversejs.org/10.1.6/dist/converse.min.css">
|
||||||
<script src="https://cdn.conversejs.org/5.0.0/dist/converse.min.js" charset="utf-8"></script>
|
<script src="https://cdn.conversejs.org/10.1.6/dist/converse.min.js" charset="utf-8"></script>
|
||||||
|
|
||||||
|
|
||||||
Option 2: Download the builds from Github
|
Option 2: Download the builds from Github
|
||||||
@ -91,13 +89,9 @@ Have a look at the :ref:`creating_builds` section on how to create your own buil
|
|||||||
In short, you should be able to do it by running ``make dist`` inside a
|
In short, you should be able to do it by running ``make dist`` inside a
|
||||||
checkout of the `Converse repo <http://github.com/conversejs/converse.js/>`_.
|
checkout of the `Converse repo <http://github.com/conversejs/converse.js/>`_.
|
||||||
|
|
||||||
.. note::
|
To build the files and also start an HTTP server, you can run ``make serve``.
|
||||||
|
|
||||||
When hosting Converse yourself without using the CDN (options 2 and 4),
|
|
||||||
you'll need to need to make sure that the ``webfonts`` directory is available in
|
|
||||||
the same location as ``converse.min.css``.
|
|
||||||
|
|
||||||
|
|
||||||
|
The distribution files will be added to the ``./dist`` folder inside the repo.
|
||||||
|
|
||||||
|
|
||||||
Initializing Converse
|
Initializing Converse
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
.. raw:: html
|
.. raw:: html
|
||||||
|
|
||||||
<div id="banner"><a href="https://github.com/jcbrand/converse.js/blob/master/docs/source/theming.rst">Edit me on GitHub</a></div>
|
<div id="banner"><a href="https://github.com/jcbrand/converse.js/blob/master/docs/source/security.rst">Edit me on GitHub</a></div>
|
||||||
|
|
||||||
=======================
|
=======================
|
||||||
Security considerations
|
Security considerations
|
||||||
@ -71,7 +71,7 @@ Other considerations
|
|||||||
Locally cached data
|
Locally cached data
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
Besides the "hot" data stored in Backbone models and collections, which are all
|
Besides the "hot" data stored in models and collections, which are all
|
||||||
encapsulated in the private ``_converse`` object, there is also the cached data
|
encapsulated in the private ``_converse`` object, there is also the cached data
|
||||||
stored in the browser's ``sessionStorage`` and ``localStorage`` stores.
|
stored in the browser's ``sessionStorage`` and ``localStorage`` stores.
|
||||||
|
|
||||||
|
205
docs/source/session.rst
Normal file
205
docs/source/session.rst
Normal file
@ -0,0 +1,205 @@
|
|||||||
|
.. raw:: html
|
||||||
|
|
||||||
|
<div id="banner"><a href="https://github.com/jcbrand/converse.js/blob/master/docs/source/session.rst">Edit me on GitHub</a></div>
|
||||||
|
|
||||||
|
==================
|
||||||
|
Session Management
|
||||||
|
==================
|
||||||
|
|
||||||
|
.. _`session-support`:
|
||||||
|
|
||||||
|
Shared Sessions
|
||||||
|
===============
|
||||||
|
|
||||||
|
It's possible to enable shared sessions whereby users already
|
||||||
|
logged in to your website will also automatically be logged in on the XMPP server,
|
||||||
|
|
||||||
|
Once a user is logged in, the session will be kept alive across page loads.
|
||||||
|
|
||||||
|
There are a few ways to let your users be automatically authenticated to an
|
||||||
|
XMPP server once they've logged in to your site.
|
||||||
|
|
||||||
|
|
||||||
|
Option 1). Server-side authentication via BOSH prebinding
|
||||||
|
---------------------------------------------------------
|
||||||
|
|
||||||
|
To **prebind** refers to a technique whereby your web application sets up an
|
||||||
|
authenticated BOSH session with the XMPP server or a standalone `BOSH <https://xmpp.org/about-xmpp/technology-overview/bosh/>`_
|
||||||
|
connection manager.
|
||||||
|
|
||||||
|
Once authenticated, it receives RID and SID tokens which need to be passed
|
||||||
|
on to Converse. Converse will then attach to that same session using
|
||||||
|
those tokens.
|
||||||
|
|
||||||
|
It's called "prebind" because you bind to the BOSH session beforehand, and then
|
||||||
|
later in the page you just attach to that session again.
|
||||||
|
|
||||||
|
The RID and SID tokens can be passed in manually when calling
|
||||||
|
`converse.initialize`, but a more convenient way is to pass Converse a :ref:`prebind_url`
|
||||||
|
which it will call when it needs the tokens. This way it will be able to
|
||||||
|
automatically reconnect whenever the connection drops, by simply calling that
|
||||||
|
URL again to fetch new tokens.
|
||||||
|
|
||||||
|
Prebinding reduces network traffic and also speeds up the startup time for
|
||||||
|
Converse. Additionally, because prebind works with tokens, it's not necessary
|
||||||
|
for the XMPP client to know or store users' passwords.
|
||||||
|
|
||||||
|
One potential drawback of using prebind is that in order to establish the
|
||||||
|
authenticated BOSH session server-side, you'll need to access and pass on the XMPP
|
||||||
|
credentials server-side, which, unless you're using tokens, means that you'll
|
||||||
|
need to store XMPP passwords in cleartext.
|
||||||
|
|
||||||
|
This is however not the case if you for example use LDAP or Active Directory as
|
||||||
|
your authentication backend, since you could then configure your XMPP server to
|
||||||
|
use that as well.
|
||||||
|
|
||||||
|
To prebind you will require a BOSH-enabled XMPP server for Converse to connect to
|
||||||
|
(see the :ref:`bosh-service-url` under :ref:`configuration-settings`)
|
||||||
|
as well as a BOSH client in your web application (written for example in
|
||||||
|
Python, Ruby or PHP) that will set up an authenticated BOSH session, which
|
||||||
|
Converse can then attach to.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
A BOSH server acts as a bridge between HTTP, the protocol of the web, and
|
||||||
|
XMPP, the instant messaging protocol.
|
||||||
|
|
||||||
|
Converse can only communicate via HTTP (or websocket, in which case BOSH can't be used).
|
||||||
|
It cannot open TCP sockets to communicate to an XMPP server directly.
|
||||||
|
|
||||||
|
So the BOSH server acts as a middle man, translating our HTTP requests into XMPP stanzas and vice versa.
|
||||||
|
|
||||||
|
Jack Moffitt has a great `blogpost <http://metajack.im/2008/10/03/getting-attached-to-strophe>`_
|
||||||
|
about this and even provides an
|
||||||
|
`example Django application <https://github.com/metajack/strophejs/tree/master/examples/attach>`_
|
||||||
|
to demonstrate it.
|
||||||
|
|
||||||
|
When you authenticate to the XMPP server on your backend application (for
|
||||||
|
example via a BOSH client in Django), you'll receive two tokens, RID (request ID) and SID (session ID).
|
||||||
|
|
||||||
|
The **Session ID (SID)** is a unique identifier for the current *session*. This
|
||||||
|
number stays constant for the entire session.
|
||||||
|
|
||||||
|
The **Request ID (RID)** is a unique identifier for the current *request* (i.e.
|
||||||
|
page load). Each page load is a new request which requires a new unique RID.
|
||||||
|
The best way to achieve this is to simply increment the RID with each page
|
||||||
|
load.
|
||||||
|
|
||||||
|
You'll need to configure Converse with the :ref:`prebind` :ref:`prebind_url` settings.
|
||||||
|
|
||||||
|
Please read the documentation on those settings for a fuller picture of what
|
||||||
|
needs to be done.
|
||||||
|
|
||||||
|
Example code for server-side prebinding
|
||||||
|
***************************************
|
||||||
|
|
||||||
|
* PHP:
|
||||||
|
See `xmpp-prebind-php <https://github.com/candy-chat/xmpp-prebind-php>`_ by
|
||||||
|
Michael Weibel and the folks from Candy chat.
|
||||||
|
|
||||||
|
* Python:
|
||||||
|
See this `example Django application`_ by Jack Moffitt.
|
||||||
|
|
||||||
|
|
||||||
|
Option 2). Delegated authentication, also called external authentication
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Delegated authentication refers to the usecase where the XMPP server delegates
|
||||||
|
authentication to some other service.
|
||||||
|
|
||||||
|
This could be to LDAP or Active Directory (as shown in the diagram at the top
|
||||||
|
of the page), or it could be to an OAuth provider, a SQL server to a specific
|
||||||
|
website.
|
||||||
|
|
||||||
|
The Prosody webserver has various user-contributed modules which delegate
|
||||||
|
authentication to external services. They are listed in the `Prosody community modules
|
||||||
|
page <https://modules.prosody.im/>`_. Other XMPP servers have similar plugin modules.
|
||||||
|
|
||||||
|
If your web-application has access to the same credentials, it can send those
|
||||||
|
credentials to Converse so that user's are automatically logged in when the
|
||||||
|
page loads.
|
||||||
|
|
||||||
|
This is can be done by setting :ref:`auto_login` to true and configuring the
|
||||||
|
the :ref:`credentials_url` setting.
|
||||||
|
|
||||||
|
Option 3). Temporary authentication tokens
|
||||||
|
------------------------------------------
|
||||||
|
|
||||||
|
The first option has the drawback that your web-application needs to know the
|
||||||
|
XMPP credentials of your users and that they need to be stored in the clear.
|
||||||
|
|
||||||
|
The second option has that same drawback and it also needs to pass those
|
||||||
|
credentials to Converse.
|
||||||
|
|
||||||
|
To avoid these drawbacks, you can instead let your backend web application
|
||||||
|
generate temporary authentication tokens which are then sent to the XMPP server
|
||||||
|
which in turn delegates authentication to an external authentication provider
|
||||||
|
(generally the same web-app that generated the tokens).
|
||||||
|
|
||||||
|
This can be combined with prebind or with the :ref:`credentials_url` setting.
|
||||||
|
|
||||||
|
Option 4). Cryptographically signed tokens
|
||||||
|
------------------------------------------
|
||||||
|
|
||||||
|
A third potential option is to generate cryptographically signed tokens (e.g.
|
||||||
|
HMAC tokens) which the XMPP server could authenticate by checking that they're
|
||||||
|
signed with the right key and that they conform to some kind of pre-arranged
|
||||||
|
format.
|
||||||
|
|
||||||
|
In this case, you would also use the :ref:`credentials_url` setting, to specify a
|
||||||
|
URL from which Converse should fetch the username and token.
|
||||||
|
|
||||||
|
|
||||||
|
Keeping users logged-in across page reloads
|
||||||
|
===========================================
|
||||||
|
|
||||||
|
If you've properly set up :ref:`shared session support <session-support>`, then
|
||||||
|
your users will stay logged-in to the XMPP server upon page reloads.
|
||||||
|
|
||||||
|
However, if users are logging in manually, then users might get logged out between requests.
|
||||||
|
|
||||||
|
Credential Management API
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
Users with modern browsers which properly support the
|
||||||
|
`Credential Management API <https://w3c.github.io/webappsec-credential-management>`_
|
||||||
|
should be automatically logged-in across page reloads and therefore maintain
|
||||||
|
their sessions.
|
||||||
|
|
||||||
|
Using a cookie
|
||||||
|
--------------
|
||||||
|
|
||||||
|
The main reason why users can get logged-out between page reloads is because we
|
||||||
|
don't (and can't) use cookies to maintain user sessions as is usually done with
|
||||||
|
websites.
|
||||||
|
|
||||||
|
This is because XMPP servers generally don't have support for logging in with a
|
||||||
|
cookie. It would be theoretically possible to login with SASL-EXTERNAL and a
|
||||||
|
cookie which the XMPP server looks up as part of the BOSH HTTP request or the
|
||||||
|
websocket connection, but no XMPP servers currently support this out of the
|
||||||
|
box.
|
||||||
|
|
||||||
|
Prosody does have a plugin called `mod_auth_http_cookie <https://modules.prosody.im/mod_auth_http_cookie.html>`_
|
||||||
|
which does the above. You'd have to `configure Converse.js to use SASL-EXTERNAL <https://opkode.com/blog/strophe_converse_sasl_external/>`_
|
||||||
|
and then set up Prosody with that plugin. (Note, I haven't yet tested this setup personally).
|
||||||
|
|
||||||
|
This is however not a cross-platform solution and won't work for hosters who
|
||||||
|
want to support all or multple XMPP servers.
|
||||||
|
|
||||||
|
Storing the password in localStorage
|
||||||
|
------------------------------------
|
||||||
|
|
||||||
|
Since cookies are usually not an option, people have suggested storing the
|
||||||
|
password in localStorage and logging in with it again when the user reloads the
|
||||||
|
page.
|
||||||
|
|
||||||
|
We've purposefully not put this functionality in Converse.js due to the
|
||||||
|
security implications of storing plaintext passwords in localStorage.
|
||||||
|
|
||||||
|
|
||||||
|
Storing the SASL SCRAM-SHA1 hash in IndexedDB
|
||||||
|
---------------------------------------------
|
||||||
|
|
||||||
|
Another suggestion that's been suggested is to store the SCRAM-SHA1 computed
|
||||||
|
``clientKey`` in localStorage and to use that upon page reload to log the user in again.
|
||||||
|
|
||||||
|
This has been implemented since version 10, see documentation on `reuse_scram_keys <https://conversejs.org/docs/html/configuration.html#reuse-scram-keys>`_
|
@ -282,146 +282,3 @@ Your ``nginx`` will look as follows:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.. _`session-support`:
|
|
||||||
|
|
||||||
Single Session Support
|
|
||||||
======================
|
|
||||||
|
|
||||||
It's possible to enable shared sessions whereby users already
|
|
||||||
logged in to your website will also automatically be logged in on the XMPP server,
|
|
||||||
|
|
||||||
Once a user is logged in, the session will be kept alive across page loads.
|
|
||||||
|
|
||||||
There are a few ways to let your users be automatically authenticated to an
|
|
||||||
XMPP server once they've logged in to your site.
|
|
||||||
|
|
||||||
|
|
||||||
Option 1). Server-side authentication via BOSH prebinding
|
|
||||||
---------------------------------------------------------
|
|
||||||
|
|
||||||
To **prebind** refers to a technique whereby your web application sets up an
|
|
||||||
authenticated BOSH session with the XMPP server or a standalone `BOSH <https://xmpp.org/about-xmpp/technology-overview/bosh/>`_
|
|
||||||
connection manager.
|
|
||||||
|
|
||||||
Once authenticated, it receives RID and SID tokens which need to be passed
|
|
||||||
on to Converse. Converse will then attach to that same session using
|
|
||||||
those tokens.
|
|
||||||
|
|
||||||
It's called "prebind" because you bind to the BOSH session beforehand, and then
|
|
||||||
later in the page you just attach to that session again.
|
|
||||||
|
|
||||||
The RID and SID tokens can be passed in manually when calling
|
|
||||||
`converse.initialize`, but a more convenient way is to pass Converse a :ref:`prebind_url`
|
|
||||||
which it will call when it needs the tokens. This way it will be able to
|
|
||||||
automatically reconnect whenever the connection drops, by simply calling that
|
|
||||||
URL again to fetch new tokens.
|
|
||||||
|
|
||||||
Prebinding reduces network traffic and also speeds up the startup time for
|
|
||||||
Converse. Additionally, because prebind works with tokens, it's not necessary
|
|
||||||
for the XMPP client to know or store users' passwords.
|
|
||||||
|
|
||||||
One potential drawback of using prebind is that in order to establish the
|
|
||||||
authenticated BOSH session server-side, you'll need to access and pass on the XMPP
|
|
||||||
credentials server-side, which, unless you're using tokens, means that you'll
|
|
||||||
need to store XMPP passwords in cleartext.
|
|
||||||
|
|
||||||
This is however not the case if you for example use LDAP or Active Directory as
|
|
||||||
your authentication backend, since you could then configure your XMPP server to
|
|
||||||
use that as well.
|
|
||||||
|
|
||||||
To prebind you will require a BOSH-enabled XMPP server for Converse to connect to
|
|
||||||
(see the :ref:`bosh-service-url` under :ref:`configuration-settings`)
|
|
||||||
as well as a BOSH client in your web application (written for example in
|
|
||||||
Python, Ruby or PHP) that will set up an authenticated BOSH session, which
|
|
||||||
Converse can then attach to.
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
A BOSH server acts as a bridge between HTTP, the protocol of the web, and
|
|
||||||
XMPP, the instant messaging protocol.
|
|
||||||
|
|
||||||
Converse can only communicate via HTTP (or websocket, in which case BOSH can't be used).
|
|
||||||
It cannot open TCP sockets to communicate to an XMPP server directly.
|
|
||||||
|
|
||||||
So the BOSH server acts as a middle man, translating our HTTP requests into XMPP stanzas and vice versa.
|
|
||||||
|
|
||||||
Jack Moffitt has a great `blogpost <http://metajack.im/2008/10/03/getting-attached-to-strophe>`_
|
|
||||||
about this and even provides an
|
|
||||||
`example Django application <https://github.com/metajack/strophejs/tree/master/examples/attach>`_
|
|
||||||
to demonstrate it.
|
|
||||||
|
|
||||||
When you authenticate to the XMPP server on your backend application (for
|
|
||||||
example via a BOSH client in Django), you'll receive two tokens, RID (request ID) and SID (session ID).
|
|
||||||
|
|
||||||
The **Session ID (SID)** is a unique identifier for the current *session*. This
|
|
||||||
number stays constant for the entire session.
|
|
||||||
|
|
||||||
The **Request ID (RID)** is a unique identifier for the current *request* (i.e.
|
|
||||||
page load). Each page load is a new request which requires a new unique RID.
|
|
||||||
The best way to achieve this is to simply increment the RID with each page
|
|
||||||
load.
|
|
||||||
|
|
||||||
You'll need to configure Converse with the :ref:`prebind` :ref:`prebind_url` settings.
|
|
||||||
|
|
||||||
Please read the documentation on those settings for a fuller picture of what
|
|
||||||
needs to be done.
|
|
||||||
|
|
||||||
Example code for server-side prebinding
|
|
||||||
***************************************
|
|
||||||
|
|
||||||
* PHP:
|
|
||||||
See `xmpp-prebind-php <https://github.com/candy-chat/xmpp-prebind-php>`_ by
|
|
||||||
Michael Weibel and the folks from Candy chat.
|
|
||||||
|
|
||||||
* Python:
|
|
||||||
See this `example Django application`_ by Jack Moffitt.
|
|
||||||
|
|
||||||
|
|
||||||
Option 2). Delegated authentication, also called external authentication
|
|
||||||
------------------------------------------------------------------------
|
|
||||||
|
|
||||||
Delegated authentication refers to the usecase where the XMPP server delegates
|
|
||||||
authentication to some other service.
|
|
||||||
|
|
||||||
This could be to LDAP or Active Directory (as shown in the diagram at the top
|
|
||||||
of the page), or it could be to an OAuth provider, a SQL server to a specific
|
|
||||||
website.
|
|
||||||
|
|
||||||
The Prosody webserver has various user-contributed modules which delegate
|
|
||||||
authentication to external services. They are listed in the `Prosody community modules
|
|
||||||
page <https://modules.prosody.im/>`_. Other XMPP servers have similar plugin modules.
|
|
||||||
|
|
||||||
If your web-application has access to the same credentials, it can send those
|
|
||||||
credentials to Converse so that user's are automatically logged in when the
|
|
||||||
page loads.
|
|
||||||
|
|
||||||
This is can be done by setting :ref:`auto_login` to true and configuring the
|
|
||||||
the :ref:`credentials_url` setting.
|
|
||||||
|
|
||||||
Option 3). Temporary authentication tokens
|
|
||||||
------------------------------------------
|
|
||||||
|
|
||||||
The first option has the drawback that your web-application needs to know the
|
|
||||||
XMPP credentials of your users and that they need to be stored in the clear.
|
|
||||||
|
|
||||||
The second option has that same drawback and it also needs to pass those
|
|
||||||
credentials to Converse.
|
|
||||||
|
|
||||||
To avoid these drawbacks, you can instead let your backend web application
|
|
||||||
generate temporary authentication tokens which are then sent to the XMPP server
|
|
||||||
which in turn delegates authentication to an external authentication provider
|
|
||||||
(generally the same web-app that generated the tokens).
|
|
||||||
|
|
||||||
This can be combined with prebind or with the :ref:`credentials_url` setting.
|
|
||||||
|
|
||||||
Option 4). Cryptographically signed tokens
|
|
||||||
------------------------------------------
|
|
||||||
|
|
||||||
A third potential option is to generate cryptographically signed tokens (e.g.
|
|
||||||
HMAC tokens) which the XMPP server could authenticate by checking that they're
|
|
||||||
signed with the right key and that they conform to some kind of pre-arranged
|
|
||||||
format.
|
|
||||||
|
|
||||||
In this case, you would also use the :ref:`credentials_url` setting, to specify a
|
|
||||||
URL from which Converse should fetch the username and token.
|
|
||||||
|
140
docs/source/setup_dev_environment.rst
Normal file
140
docs/source/setup_dev_environment.rst
Normal file
@ -0,0 +1,140 @@
|
|||||||
|
.. raw:: html
|
||||||
|
|
||||||
|
<div id="banner"><a href="https://github.com/jcbrand/converse.js/blob/master/docs/source/setup_dev_environment.rst">Edit me on GitHub</a></div>
|
||||||
|
|
||||||
|
.. _`setup_dev_environment`:
|
||||||
|
|
||||||
|
============================
|
||||||
|
Setting up a dev environment
|
||||||
|
============================
|
||||||
|
|
||||||
|
Installing the 3rd party dependencies
|
||||||
|
=====================================
|
||||||
|
|
||||||
|
To develop and customize Converse, you'll first need to check out Converse's Git
|
||||||
|
repository:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
git clone https://github.com/conversejs/converse.js.git
|
||||||
|
cd converse.js
|
||||||
|
|
||||||
|
|
||||||
|
We use development tools which depend on Node.js and NPM (the Node package manager).
|
||||||
|
|
||||||
|
It's recommended that you use `NVM <https://github.com/nvm-sh/nvm>`_ (the Node version manager)
|
||||||
|
to make sure you have the right version of Node.
|
||||||
|
|
||||||
|
Refer to the `NVM Github page <https://github.com/nvm-sh/nvm#install--update-script>`_ for instructions on how to install it.
|
||||||
|
|
||||||
|
Once NVM is installed, you can run the following inside your checkout of the Converse Git repository:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
nvm install
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
You will always have to first run ``nvm install`` in a new terminal session in order to use the
|
||||||
|
recommended version of Node before working on Converse.
|
||||||
|
|
||||||
|
|
||||||
|
To set up the Converse development environment, you now run ``make dev``.
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
make dev
|
||||||
|
|
||||||
|
Alternatively, if you're using Windows, or don't have GNU Make installed, you can run the
|
||||||
|
following:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
npm install
|
||||||
|
npm run lerna
|
||||||
|
|
||||||
|
This will install the Node development tools and Converse's dependencies.
|
||||||
|
|
||||||
|
The front-end dependencies are those JavaScript files on which
|
||||||
|
Converse directly depends and which will be loaded in the browser as part of
|
||||||
|
the bundle in ``dist/converse.js`` (or ``dist/converse.min.js``).
|
||||||
|
|
||||||
|
To see the 3rd party dependencies (not just the front-end dependencies, but
|
||||||
|
also ones necessary for development tasks like making builds), take a look at
|
||||||
|
the list under the ``devDependencies`` in `package.json <https://github.com/jcbrand/converse.js/blob/master/package.json>`_.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
After running ```make dev```, you should now have a new *node_modules* directory
|
||||||
|
which contains all the external dependencies of Converse.
|
||||||
|
If this directory does NOT exist, something must have gone wrong.
|
||||||
|
Double-check the output of ```make dev``` to see if there are any errors
|
||||||
|
listed. For support, you can ask in our chatroom: `dicuss@conference.conversejs.org <xmpp:discuss@conference.conversejs.org>`_.
|
||||||
|
|
||||||
|
If you don't have an XMPP client installed, follow this link to
|
||||||
|
`conversejs.org <https://conversejs.org/fullscreen#converse/room?jid=discuss@conference.conversejs.org>`_
|
||||||
|
where you can log in and be taken directly to the chatroom.
|
||||||
|
|
||||||
|
|
||||||
|
.. _`dependency-libsignal`:
|
||||||
|
|
||||||
|
Libsignal
|
||||||
|
---------
|
||||||
|
|
||||||
|
If you want OMEMO encryption, you need to load `libsignal <https://github.com/signalapp/libsignal-protocol-javascript>`_ separately in your page.
|
||||||
|
|
||||||
|
For example::
|
||||||
|
|
||||||
|
<script src="3rdparty/libsignal-protocol-javascript/dist/libsignal-protocol.js"></script>
|
||||||
|
|
||||||
|
The reason libsignal needs to be loaded separately is because it's released
|
||||||
|
under the `GPLv3 <https://github.com/signalapp/libsignal-protocol-javascript/blob/master/LICENSE>`_
|
||||||
|
which requires all other dependent JavaScript code to also be open sourced under the same
|
||||||
|
license. You might not be willing to adhere to those terms, which is why you
|
||||||
|
need to decide for yourself whether you're going to load libsignal or not.
|
||||||
|
|
||||||
|
|
||||||
|
.. _`webserver`:
|
||||||
|
|
||||||
|
Setting up a webserver
|
||||||
|
======================
|
||||||
|
|
||||||
|
When making changes to Converse, either development or theming changes,
|
||||||
|
you'll want to preview them in your browser.
|
||||||
|
|
||||||
|
For this, you'll need to serve the development files via a web server,
|
||||||
|
so that you can see your local changes in the browser.
|
||||||
|
|
||||||
|
Manually starting a web server
|
||||||
|
------------------------------
|
||||||
|
|
||||||
|
To both set up the development environment and also start up a web browser to
|
||||||
|
serve the files for you, you can run::
|
||||||
|
|
||||||
|
make serve
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
To run the "make" commands, you'll need `GNUMake <https://www.gnu.org/software/make>`_
|
||||||
|
installed on your computer. If you use GNU/Linux or \*BSD, it should be installed or
|
||||||
|
available via your package manager. For Mac, you'll need to install XCode and in
|
||||||
|
Windows you can use `Chocolatey <https://chocolatey.org/>`_.
|
||||||
|
|
||||||
|
After running ``make serve`` you can open http://localhost:8000 in your webbrowser to see the Converse website.
|
||||||
|
|
||||||
|
When developing or changing the theme, you'll want to load all the
|
||||||
|
unminified JS and CSS resources as separate files. To do this, open http://localhost:8000/dev.html instead.
|
||||||
|
|
||||||
|
You might want to open `dev.html <https://github.com/conversejs/converse.js/blob/master/dev.html>`_ in your text editor or IDE as well, to see
|
||||||
|
how ``converse.initialize`` is called and to potentially change any of the
|
||||||
|
settings.
|
||||||
|
|
||||||
|
Starting a web server with live reloading
|
||||||
|
-----------------------------------------
|
||||||
|
|
||||||
|
Alternatively, if you want to have live reloading whenever any of the source files change, you
|
||||||
|
can run ``make devserver`` (which will use `webpack-dev-server <https://github.com/webpack/webpack-dev-server>`_).
|
||||||
|
|
||||||
|
Instead of ``dev.html`` being used, `webpack.html <https://github.com/conversejs/converse.js/blob/master/webpack.html>`_
|
||||||
|
is now being used as the HTML template, and you'll need to modify that file if
|
||||||
|
you want to change the settings passed to ``converse.initialize``.
|
||||||
|
|
||||||
|
If you're running ``make devserver``, you need to open http://localhost:8080.
|
||||||
|
|
@ -1,6 +1,6 @@
|
|||||||
.. raw:: html
|
.. raw:: html
|
||||||
|
|
||||||
<div id="banner"><a href="https://github.com/jcbrand/converse.js/blob/master/docs/source/theming.rst">Edit me on GitHub</a></div>
|
<div id="banner"><a href="https://github.com/jcbrand/converse.js/blob/master/docs/source/style_guide.rst">Edit me on GitHub</a></div>
|
||||||
|
|
||||||
Software Style Guide
|
Software Style Guide
|
||||||
====================
|
====================
|
||||||
@ -11,7 +11,7 @@ Most of the style guide recommendations here come from Douglas Crockford's book
|
|||||||
Tabs or spaces?
|
Tabs or spaces?
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
We always indent 4 spaces. Proper indentation is important for readability.
|
We always indent 4 spaces.
|
||||||
|
|
||||||
Underscores or camelCase?
|
Underscores or camelCase?
|
||||||
-------------------------
|
-------------------------
|
||||||
@ -27,6 +27,12 @@ For example:
|
|||||||
...
|
...
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const versus let
|
||||||
|
----------------
|
||||||
|
|
||||||
|
Try to use `const` whenever possible. If a variable won't be reassigned, use
|
||||||
|
`const`, otherwise use `let`.
|
||||||
|
|
||||||
Spaces around operators
|
Spaces around operators
|
||||||
-----------------------
|
-----------------------
|
||||||
|
|
||||||
@ -51,6 +57,19 @@ An exception is when they appear inside for-loop expressions, for example:
|
|||||||
Generally though, rather err on the side of adding spaces, since they make the
|
Generally though, rather err on the side of adding spaces, since they make the
|
||||||
code much more readable.
|
code much more readable.
|
||||||
|
|
||||||
|
destructuring
|
||||||
|
-------------
|
||||||
|
|
||||||
|
When assigning to a variable via destructuring, add spaces between the curly
|
||||||
|
brackets.
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
.. code-block:: javascript
|
||||||
|
|
||||||
|
const { foo } = bar;
|
||||||
|
|
||||||
|
|
||||||
Global constants are written in ALL_CAPS
|
Global constants are written in ALL_CAPS
|
||||||
----------------------------------------
|
----------------------------------------
|
||||||
|
|
||||||
|
@ -1,24 +1,64 @@
|
|||||||
Automated tests
|
Automated tests
|
||||||
===============
|
===============
|
||||||
|
|
||||||
Converse uses the `Jasmine <https://jasmine.github.io/>`_ testing framework for
|
Converse uses the `Karma <https://karma-runner.github.io/latest/index.html>`_ test runner and
|
||||||
writing tests.
|
`Jasmine <https://jasmine.github.io/>`_ testing library for running tests.
|
||||||
|
|
||||||
Tests are run in a browser, either manually or automatically via Chrome
|
In addition, we use `ESlint <https://eslint.org/>`_ to run a static analysis (aka
|
||||||
headless.
|
linting) of the source files and report errors.
|
||||||
|
|
||||||
Adding tests for your bugfix or feature
|
Whenever a commit is pushed to the Converse Github repo, all ESlint checks and
|
||||||
----------------------------------------
|
Jasmine tests are run on `Travis CI <https://travis-ci.org/github/conversejs/converse.js>`_.
|
||||||
|
|
||||||
Take a look at `tests.html <https://github.com/jcbrand/converse.js/blob/master/tests.html>`_
|
|
||||||
and the `spec files <https://github.com/jcbrand/converse.js/blob/master/tests.html>`_
|
|
||||||
to see how tests are implemented.
|
|
||||||
|
|
||||||
Running tests
|
Running tests
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
Check that all tests complete sucessfully.
|
You can run ESlint by typing ``make eslint``. Similarly the tests can be run via ``make tests``.
|
||||||
|
|
||||||
Run ``make check`` in your terminal.
|
To run both eslint and the tests, you can use ``make check``.
|
||||||
|
|
||||||
To run the tests manually, run ``make serve`` and then open `http://localhost:8000/tests <https://github.com/jcbrand/converse.js/blob/master/tests.html>`_ in your browser.
|
When running ``make test`` or ``make check``, a browser will automatically
|
||||||
|
start up, open a tab at http://localhost:9876 and start running the tests.
|
||||||
|
|
||||||
|
You'll see a green bar at the top of the page, and on the right inside it is a ``Debug`` button.
|
||||||
|
|
||||||
|
It's often helpful to click that button and run the tests in debug mode. This
|
||||||
|
way, you see better error output for failed tests.
|
||||||
|
|
||||||
|
Automatically run tests on file changes
|
||||||
|
***************************************
|
||||||
|
|
||||||
|
To automatically run the tests whenever you make a change to any of the
|
||||||
|
Converse source code, you can run ``make watch`` in one terminal, and ``make tests`` in another.
|
||||||
|
|
||||||
|
``make watch`` will build development bundles of Converse (in ``dist/converse.js`` and ``dist/converse.css``)
|
||||||
|
and automatically rebuild them whenever a source file is modified.
|
||||||
|
|
||||||
|
Similarly, Karma will make sure that the tests are re-executed when the bundle files are rebuilt.
|
||||||
|
|
||||||
|
Running individual tests
|
||||||
|
************************
|
||||||
|
|
||||||
|
Converse has over 400 tests, and it can take a while to run through all of them.
|
||||||
|
|
||||||
|
When developing on Converse, it's often preferable to have a more rapid
|
||||||
|
turnaround time between editing a file and checking whether the most relevant
|
||||||
|
tests have passed.
|
||||||
|
|
||||||
|
Jasmine tests are described by `it` functions and the tests names are written to
|
||||||
|
be read as plain English sentences that start with the word ``it``.
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
.. code-block:: javascript
|
||||||
|
|
||||||
|
it("is rejected if it's an unencapsulated forwarded message",
|
||||||
|
|
||||||
|
Tests are grouped by `describe` functions, and contained in spec files inside
|
||||||
|
the `spec <https://github.com/jcbrand/converse.js/blob/master/spec/>`_ directory.
|
||||||
|
|
||||||
|
To run only a single test, you can replace ``it(`` with ``fit(`` for the particular
|
||||||
|
test that you want to run. You can also do this for multiple tests. All of them
|
||||||
|
will be run whenever ``make test`` executes.
|
||||||
|
|
||||||
|
To run only a group of tests, you can similarly replace ``describe(`` with ``fdescribe``.
|
||||||
|
@ -11,63 +11,135 @@ Theming
|
|||||||
Setting up your environment
|
Setting up your environment
|
||||||
===========================
|
===========================
|
||||||
|
|
||||||
In order to theme Converse, you first need to set up a :ref:`development` environment.
|
In order to theme Converse, you first need to follow the steps for :ref:`setup_dev_environment`, including :ref:`webserver`.
|
||||||
|
|
||||||
You'll also want to preview the changes you make in your browser, for which a
|
Creating a custom theme
|
||||||
webserver will be useful.
|
=======================
|
||||||
|
|
||||||
To both set up the development environment and also start up a web browser to
|
Converse can be themed via CSS custom properties (aka CSS variables) and it has
|
||||||
serve the files for you, simply run::
|
some themes available in its source repository.
|
||||||
|
|
||||||
make serve
|
A theme is a CSS file with a specific rule that defines the theme's CSS properties.
|
||||||
|
The rule has a specific selector that must include (and determines) the theme name.
|
||||||
|
|
||||||
.. note::
|
Inside this CSS rule, various CSS variables are assigned values.
|
||||||
To run the "make" commands, you'll need `GNUMake <https://www.gnu.org/software/make>`_
|
The CSS variables mainly refer to the colors that comprise the theme.
|
||||||
installed on your computer. If you use GNU/Linux or \*BSD, it should be installed or
|
If you don't specify a value for a specific CSS variable, then the value from
|
||||||
available via your package manager. For Mac, I think you need to install XCode and in
|
the ``classic`` theme is used, as defined in `classic.scss <https://github.com/conversejs/converse.js/tree/master/src/shared/styles/themes/classic.scss>`_.
|
||||||
Windows you can use `Chocolatey <https://chocolatey.org/>`_.
|
|
||||||
|
|
||||||
After running ``make serve`` you can open http://localhost:8000 in your webbrowser you'll
|
The native theme files can be found in `shared/styles/themes <https://github.com/conversejs/converse.js/tree/master/src/shared/styles/themes>`_.
|
||||||
see the Converse website.
|
|
||||||
|
|
||||||
However, when developing or changing the theme, you'll want to load all the
|
Note, the Converse theme files have a ``.scss`` extension because they are compiled
|
||||||
unminified JS and CSS resources as separate files. To do this, open http://localhost:8000/dev.html
|
by the Sass compiler into normal CSS files. It's however not necessary to use
|
||||||
instead.
|
Sass, basic CSS files will also suffice.
|
||||||
|
|
||||||
Mockups
|
The theme that Converse uses can be set via the :ref:`theme` configuration
|
||||||
=======
|
setting (and the :ref:`dark_theme` configuration setting for dark mode).
|
||||||
|
|
||||||
Converse contains some mockups in the ``./mockup`` directory against which you
|
How are themes applied?
|
||||||
can preview and tweak your changes.
|
-----------------------
|
||||||
|
|
||||||
The ``./mockup/index.html`` file contains the most comprehensive mockup, while
|
When you set a value for the :ref:`theme` configuration setting, Converse will add
|
||||||
the other files focus on particular UI aspects.
|
a class ``theme-${api.settings.get('theme')}`` on the ``converse-root`` DOM
|
||||||
|
element.
|
||||||
|
|
||||||
To see it in your browser, simply open: http://localhost:8000/mockup
|
So, for example, if you set the ``theme`` setting to ``"dracula"``, then the
|
||||||
|
``converse-root`` element will get the class ``theme-dracula``.
|
||||||
|
|
||||||
|
.. code-block:: javascript
|
||||||
|
|
||||||
|
converse.initialize({ theme: "dracula" });
|
||||||
|
|
||||||
|
|
||||||
Modifying the HTML templates of Converse
|
.. code-block:: html
|
||||||
========================================
|
|
||||||
|
|
||||||
The HTML markup of Converse is contained in small ``.html`` files in the
|
<converse-root class="conversejs theme-dracula"></converse-root>
|
||||||
``./src/templates`` directory.
|
|
||||||
|
|
||||||
You can modify HTML markup that Converse generates by modifying these files.
|
|
||||||
|
The apply a theme, there then needs to be a CSS rule with a selector that matches the
|
||||||
|
``theme-dracula`` class on the ``converse-root`` element.
|
||||||
|
|
||||||
|
If you take a look at the theme file `dracula.scss <https://github.com/conversejs/converse.js/tree/master/src/shared/styles/themes/dracula.scss>`_
|
||||||
|
you'll see that it defines a CSS rule with the selector
|
||||||
|
``.conversejs.theme-dracula``.
|
||||||
|
|
||||||
|
This selector matches any DOM element with both the classes ``.conversejs`` and
|
||||||
|
``.theme-dracula``. The ``converse-root`` element will already have the class
|
||||||
|
``.conversejs`` and it will have the class ``.theme-dracula`` if the ``theme``
|
||||||
|
(or ``dark_theme`` in dark mode) configuration setting is set to ``"dracula"``.
|
||||||
|
|
||||||
|
This is how themes are applied, by defining a CSS selector that matches the
|
||||||
|
class ``.theme-${name}`` (where ``name`` is a variable containing the name of
|
||||||
|
the theme), and then setting the ``theme`` (and/or ``dark_theme``) configuration
|
||||||
|
setting.
|
||||||
|
|
||||||
|
To create your own theme, you can create a similar CSS rule that matches
|
||||||
|
your theme's name and then you set the ``theme`` configuration setting to that
|
||||||
|
name. This CSS rule can be in any CSS file that is loaded in your website, or
|
||||||
|
you can even put it in the DOM as an inline style.
|
||||||
|
|
||||||
Modifying the CSS
|
Modifying the CSS
|
||||||
=================
|
=================
|
||||||
|
|
||||||
The CSS files are generated from `Sass <http://sass-lang.com>`_ files in the ``./sass`` directory.
|
To create a new theme with different colors, it should be enough to create a
|
||||||
|
theme file that sets the various CSS variables (as described above).
|
||||||
|
|
||||||
To generate the CSS you can run::
|
For other CSS-related changes, you can make a specific
|
||||||
|
CSS rule with that matches the element you want to change.
|
||||||
|
|
||||||
|
Sometimes it might however be neccessary to modify the core CSS files from
|
||||||
|
Converse, for example if you're developing new features or fixing styling bugs.
|
||||||
|
|
||||||
|
The CSS files are generated from `Sass <http://sass-lang.com>`_ files that end in ``.scss`` and
|
||||||
|
which are distributed throughout the source code.
|
||||||
|
|
||||||
|
The CSS that is relevant to a particular plugin
|
||||||
|
is usually inside the ``./styles`` directory inside the relevant plugin directory.
|
||||||
|
|
||||||
|
For example: `src/plugins/controlbox/styles <https://github.com/conversejs/converse.js/tree/master/src/plugins/controlbox/styles>`_.
|
||||||
|
|
||||||
|
If you're running ``make watch``, then the CSS will automatically be
|
||||||
|
regenerated when you've changed any of the ``.scss``.
|
||||||
|
|
||||||
|
You can also manually generate the CSS::
|
||||||
|
|
||||||
make css
|
make css
|
||||||
|
|
||||||
Creating dist files
|
Modifying the HTML templates of Converse
|
||||||
===================
|
========================================
|
||||||
|
|
||||||
Once you've themed Converse, you'll want to create new minified distribution
|
Converse uses `lit-html <https://lit.dev/docs/libraries/standalone-templates/>`_ as HTML
|
||||||
files of all the JavaScript and CSS.
|
templating library, and the HTML source code is contained in JavaScript ``.js``
|
||||||
|
files in various ``./template`` directories in the source code.
|
||||||
|
|
||||||
Please refer to the :doc:`builds` section for information on how this is done.
|
Some top-level templates are also in the ``./src/templates`` directory, but
|
||||||
|
the templates that are relevant to a specific plugin should be inside that plugin's subdirectory.
|
||||||
|
|
||||||
|
For example: `src/plugins/chatview/templates <https://github.com/conversejs/converse.js/tree/master/src/plugins/chatview/templates>`_.
|
||||||
|
|
||||||
|
You can modify HTML markup that Converse generates by modifying these files.
|
||||||
|
|
||||||
|
Use webpack aliases to modify templates without changing the original files
|
||||||
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Generally what I do when creating a modified version of Converse for a project
|
||||||
|
or customer, is that I create a new JavaScript package with its own
|
||||||
|
``package.json`` and I then add ``converse.js`` as a dependency (e.g. via ``npm
|
||||||
|
install --save converse.js``) to the ``package.json``.
|
||||||
|
|
||||||
|
Then I add a Webpack configuration and use `webpack aliases <https://webpack.js.org/configuration/resolve/#resolvealias>`_
|
||||||
|
to resolve template paths to my own modified files.
|
||||||
|
|
||||||
|
For example, in the webpack configuration snippet below, I add two aliases, so
|
||||||
|
that the ``message-body.js`` and ``message.js`` templates can be replaced with
|
||||||
|
two of my own custom templates.
|
||||||
|
|
||||||
|
.. code-block:: javascript
|
||||||
|
|
||||||
|
resolve: {
|
||||||
|
extensions: ['.js'],
|
||||||
|
alias: {
|
||||||
|
'./message-body.js': path.resolve(__dirname, 'path/to/my/custom/message-body.js'),
|
||||||
|
'./templates/message.js': path.resolve(__dirname, 'path/to/my/custom/chat_message.js'),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -18,14 +18,14 @@ directory, or through the web at `weblate <https://hosted.weblate.org/projects/c
|
|||||||
|
|
||||||
As of version 3.3.0, Converse no longer automatically bundles translations
|
As of version 3.3.0, Converse no longer automatically bundles translations
|
||||||
in its source file and instead fetches only the relevant locale for the current
|
in its source file and instead fetches only the relevant locale for the current
|
||||||
session from a URL as specified by the :ref:`locales-url` setting.
|
session from a URL as specified by the :ref:`assets_path` setting.
|
||||||
|
|
||||||
There are three configuration settings relevant to translations and
|
There are three configuration settings relevant to translations and
|
||||||
localisation. You're encouraged to read the documentation for each of them.
|
localisation. You're encouraged to read the documentation for each of them.
|
||||||
|
|
||||||
* :ref:`i18n`
|
* :ref:`i18n`
|
||||||
* :ref:`locales`
|
* :ref:`locales`
|
||||||
* :ref:`locales-url`
|
* :ref:`assets_path`
|
||||||
|
|
||||||
Manually updating translations
|
Manually updating translations
|
||||||
==============================
|
==============================
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
.. raw:: html
|
.. raw:: html
|
||||||
|
|
||||||
<div id="banner"><a href="https://github.com/jcbrand/converse.js/blob/master/docs/source/setup.rst">Edit me on GitHub</a></div>
|
<div id="banner"><a href="https://github.com/jcbrand/converse.js/blob/master/docs/source/troubleshooting.rst">Edit me on GitHub</a></div>
|
||||||
|
|
||||||
=============================
|
=============================
|
||||||
Troubleshooting and debugging
|
Troubleshooting and debugging
|
||||||
@ -12,7 +12,7 @@ General tips on debugging Converse
|
|||||||
Enabling debug output
|
Enabling debug output
|
||||||
---------------------
|
---------------------
|
||||||
|
|
||||||
Converse has a :ref:`debug` configuration setting which lets you to turn on
|
Converse has a :ref:`loglevel` configuration setting which lets you to turn on
|
||||||
debug logging in the browser's developer console.
|
debug logging in the browser's developer console.
|
||||||
|
|
||||||
When debugging, you always want to make sure that this setting is set to
|
When debugging, you always want to make sure that this setting is set to
|
||||||
@ -21,18 +21,18 @@ When debugging, you always want to make sure that this setting is set to
|
|||||||
You can also enable debug output via the URL, which is useful when you don't
|
You can also enable debug output via the URL, which is useful when you don't
|
||||||
have access to the server where Converse is hosted.
|
have access to the server where Converse is hosted.
|
||||||
|
|
||||||
To do so, add ``#converse?debug=true`` to the URL in the browser's address bar.
|
To do so, add ``#converse?loglevel=debug`` to the URL in the browser's address bar.
|
||||||
Make sure to first remove any already existing URL fragment (the URL fragment
|
Make sure to first remove any already existing URL fragment (the URL fragment
|
||||||
is the part that starts with a ``#``).
|
is the part that starts with a ``#``).
|
||||||
|
|
||||||
With debug mode on, you can open the browser's developer console and study the
|
With debug logging on, you can open the browser's developer console and study the
|
||||||
data that is logged to it.
|
data that is logged to it.
|
||||||
|
|
||||||
In Chrome you can right click in the developer console and save its contents to
|
In Chrome you can right click in the developer console and save its contents to
|
||||||
a file for later study.
|
a file for later study.
|
||||||
|
|
||||||
What is logged in debug mode?
|
What is logged at the debug loglevel?
|
||||||
-----------------------------
|
-------------------------------------
|
||||||
|
|
||||||
`Strope.js <http://strophe.im/>`_, the underlying XMPP library which Converse
|
`Strope.js <http://strophe.im/>`_, the underlying XMPP library which Converse
|
||||||
uses, swallows errors so that messaging can continue in cases where
|
uses, swallows errors so that messaging can continue in cases where
|
||||||
@ -50,7 +50,7 @@ Additionally, Converse will in debug mode also log all XMPP stanzas
|
|||||||
This is very useful for debugging issues relating to the XMPP protocol.
|
This is very useful for debugging issues relating to the XMPP protocol.
|
||||||
|
|
||||||
For example, if a message or presence update doesn't appear, one of the first
|
For example, if a message or presence update doesn't appear, one of the first
|
||||||
things you can do is to set ``debug: true`` and then to check in the console
|
things you can do is to set ``loglevel: debug`` and then to check in the console
|
||||||
whether the relevant XMPP stanzas are actually logged (which would mean that
|
whether the relevant XMPP stanzas are actually logged (which would mean that
|
||||||
they were received by Converse). If they're not logged, then the problem is
|
they were received by Converse). If they're not logged, then the problem is
|
||||||
more likely on the XMPP server's end (perhaps a misconfiguration?). If they
|
more likely on the XMPP server's end (perhaps a misconfiguration?). If they
|
||||||
@ -114,3 +114,111 @@ what you're using as the HTTP file server.
|
|||||||
CORS is enabled by adding an ``Access-Control-Allow-Origin`` header, so you'll
|
CORS is enabled by adding an ``Access-Control-Allow-Origin`` header, so you'll
|
||||||
have to configure your file server to add this header.
|
have to configure your file server to add this header.
|
||||||
|
|
||||||
|
Users don't stay logged in across page reloads
|
||||||
|
==============================================
|
||||||
|
|
||||||
|
A common complaint in the Converse chat room (`<xmpp:discuss@conference.conversejs.org?join>`_)
|
||||||
|
is that users are logged out when they reload the page.
|
||||||
|
|
||||||
|
The main way in which websites and web apps maintain a user's login session is via
|
||||||
|
authentication cookies, which are included in every HTTP request sent to the server.
|
||||||
|
|
||||||
|
XMPP is however not HTTP, cookies aren't automatically included in traffic to
|
||||||
|
the XMPP server and XMPP servers don't rely on cookies for authentication.
|
||||||
|
|
||||||
|
Instead, an XMPP client is expected to store the user credentials (username and
|
||||||
|
password, either plaintext or hashed and salted if
|
||||||
|
`SCRAM <https://en.wikipedia.org/wiki/Salted_Challenge_Response_Authentication_Mechanism>`_
|
||||||
|
is being used) and to then present those credentials to the XMPP server when authenticating.
|
||||||
|
|
||||||
|
This works well for non-web XMPP clients, but Converse has so far avoided
|
||||||
|
storing user credentials in browser storage, since they can then be accessed by
|
||||||
|
any scripts running in the browser under the same domain.
|
||||||
|
|
||||||
|
So what does Converse do to keep users logged in?
|
||||||
|
-------------------------------------------------
|
||||||
|
|
||||||
|
Use the Web Auth API
|
||||||
|
********************
|
||||||
|
|
||||||
|
Converse supports the `Web Authentication API <https://developer.mozilla.org/en-US/docs/Web/API/Web_Authentication_API>`_
|
||||||
|
which let's it use the secure credential management of the browser to get the
|
||||||
|
uesr credentials to automatically log the user in. This however requires that
|
||||||
|
the user saves his or her username and password in the browser. Often the user
|
||||||
|
is automatically asked by the browser whether he/she wants to store the
|
||||||
|
credentials. If that doesn't happen, the user has to do so manually, usually by
|
||||||
|
clicking the key icon in the address bar. This works well on most modern browsers,
|
||||||
|
but not on Firefox, which has insufficient support for the Web Authentication API.
|
||||||
|
|
||||||
|
What can users do to stay logged in?
|
||||||
|
------------------------------------
|
||||||
|
|
||||||
|
Outsource credential management to something else
|
||||||
|
*************************************************
|
||||||
|
|
||||||
|
The issues mentioned above mostly related to users logging in manually, and not
|
||||||
|
to integrations where Converse automatically fetches user credentials from the
|
||||||
|
backend via the :ref:`credentials_url` setting.
|
||||||
|
|
||||||
|
Use BOSH instead of websocket
|
||||||
|
*****************************
|
||||||
|
|
||||||
|
`BOSH <https://xmpp.org/extensions/xep-0206.html>`_ can be thought of
|
||||||
|
XMPP-over-HTTP and because HTTP is stateless, BOSH needs to maintain login
|
||||||
|
sessions for a certain amount of time (usually 60 seconds) even if there is no
|
||||||
|
HTTP traffic between the client and server. This means that if you have a BOSH
|
||||||
|
session running, you can reload the page and you will stay logged in.
|
||||||
|
|
||||||
|
Note, Websocket connections are however faster and have less overhead than BOSH.
|
||||||
|
|
||||||
|
User a browser with adequate support for the Web Auth API
|
||||||
|
*********************************************************
|
||||||
|
|
||||||
|
Another option is to only use a browser with proper support for the Web Auth
|
||||||
|
API (which mainly means avoiding Firefox) and then to save your credentials in the browser.
|
||||||
|
|
||||||
|
Use Converse Desktop
|
||||||
|
********************
|
||||||
|
|
||||||
|
The `desktop version of Converse <https://github.com/conversejs/converse-desktop>`_
|
||||||
|
also doesn't have this problem, since the credentials are stored in Electron
|
||||||
|
and there is no significant risk of other malicious scripts running.
|
||||||
|
|
||||||
|
What else can Converse do to keep users logged in?
|
||||||
|
--------------------------------------------------
|
||||||
|
|
||||||
|
This problem could also potentially be fixed by storing the
|
||||||
|
XMPP credentials securely with web crypto and IndexedDB. This could be done by
|
||||||
|
generating a private encryption key in non-exportable format, and then using that
|
||||||
|
to encrypt the credentials before storing them in IndexedDB.
|
||||||
|
|
||||||
|
This would protect the credentials from someone who has access to your
|
||||||
|
computer (or harddrive), but it still won't protect them from malicious scripts
|
||||||
|
running in the same domain as Converse is being hosted, since they would have the
|
||||||
|
same level of access as Converse itself (which legitimately needs access to the
|
||||||
|
credentials).
|
||||||
|
|
||||||
|
Common errors
|
||||||
|
=============
|
||||||
|
|
||||||
|
Error: A "url" property or function must be specified
|
||||||
|
-----------------------------------------------------
|
||||||
|
|
||||||
|
That's a relatively generic `Skeletor <https://github.com/conversejs/skeletor>`_ (or `Backbone <http://backbonejs.org/>_`)
|
||||||
|
error and by itself it usually doesn't give enough information to know how to fix the underlying issue.
|
||||||
|
|
||||||
|
Generally, this error happens when a Model is being persisted (e.g. when model.save() is called,
|
||||||
|
but there is no information specifying where/how it should be persisted.
|
||||||
|
|
||||||
|
The Converse models are persisted to browser storage (e.g. sessionStorage, localStorage or IndexedDB),
|
||||||
|
and this happens by adding a browserStorage attribute on the model, or on the collection containing the model.
|
||||||
|
|
||||||
|
See for example here: https://github.com/conversejs/converse.js/blob/395aa8cb959bbb7e26472ed3356160c8044be081/src/headless/converse-chat.js#L359
|
||||||
|
|
||||||
|
If this error occurs, it means that a model being persisted doesn't have the ``browserStorage`` attribute,
|
||||||
|
and it's containing collection (if there is one) also doesn't have that attribute.
|
||||||
|
|
||||||
|
This usually happens when a model has been removed from a collection, and then ``.save()`` is called on it.
|
||||||
|
|
||||||
|
In the context of Converse it might mean that there's an attempt to persist data before all models have been properly initialized,
|
||||||
|
or conversely after models have been removed from their containing collections.
|
||||||
|
@ -1,17 +1,24 @@
|
|||||||
<!doctype html>
|
<!doctype html>
|
||||||
<html class="no-js" lang="en">
|
<html class="no-js" lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8"/>
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
|
|
||||||
<title>Converse</title>
|
<title>Converse</title>
|
||||||
<link rel="shortcut icon" type="image/ico" href="images/favicon.ico"/>
|
<meta charset="utf-8"/>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
|
||||||
|
<meta name="description" content="Converse XMPP/Jabber Chat"/>
|
||||||
|
<meta name="author" content="JC Brand" />
|
||||||
|
<meta name="keywords" content="xmpp chat webchat converse.js" />
|
||||||
|
<link rel="shortcut icon" type="image/ico" href="/dist/favicon.ico"/>
|
||||||
<script type="text/javascript" src="inverse-analytics.js"></script>
|
<script type="text/javascript" src="inverse-analytics.js"></script>
|
||||||
<noscript><p><img src="//stats.opkode.com/piwik.php?idsite=5" style="border:0;" alt="" /></p></noscript>
|
<noscript><p><img src="//stats.opkode.com/piwik.php?idsite=5" style="border:0;" alt="" /></p></noscript>
|
||||||
<link type="text/css" rel="stylesheet" media="screen" href="https://cdn.conversejs.org/5.0.0/dist/converse.min.css" />
|
<link rel="manifest" href="./manifest.json">
|
||||||
|
<link type="text/css" rel="stylesheet" media="screen" href="/dist/converse.min.css" />
|
||||||
<script src="https://cdn.conversejs.org/3rdparty/libsignal-protocol.min.js"></script>
|
<script src="https://cdn.conversejs.org/3rdparty/libsignal-protocol.min.js"></script>
|
||||||
<script src="https://cdn.conversejs.org/5.0.0/dist/converse.min.js"></script>
|
<script src="/dist/converse.min.js"></script>
|
||||||
</head>
|
</head>
|
||||||
<body class="converse-fullscreen">
|
<body class="converse-fullscreen">
|
||||||
|
<noscript>You need to enable JavaScript to run the Converse.js chat app.</noscript>
|
||||||
<div id="conversejs-bg"></div>
|
<div id="conversejs-bg"></div>
|
||||||
<script>
|
<script>
|
||||||
/*
|
/*
|
||||||
|
26
images/bgbl.svg
Normal file
26
images/bgbl.svg
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
<!--
|
||||||
|
Tessellate 1.0 by HTML5 UP
|
||||||
|
html5up.net | @n33co
|
||||||
|
Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
|
||||||
|
-->
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1000px" height="1000px" viewBox="0 0 1000 1000" zoomAndPan="disable">
|
||||||
|
<style type="text/css"><![CDATA[
|
||||||
|
line
|
||||||
|
{
|
||||||
|
stroke: rgba(255,255,255,0.1);
|
||||||
|
stroke-width: 0.85px;
|
||||||
|
}
|
||||||
|
]]></style>
|
||||||
|
<line x1="-180" y1="0" x2="820" y2="1000" />
|
||||||
|
<line x1="-380" y1="0" x2="620" y2="1000" />
|
||||||
|
<line x1="-530" y1="0" x2="470" y2="1000" />
|
||||||
|
<line x1="-655" y1="0" x2="345" y2="1000" />
|
||||||
|
<line x1="-755" y1="0" x2="245" y2="1000" />
|
||||||
|
<line x1="-830" y1="0" x2="170" y2="1000" />
|
||||||
|
<line x1="-880" y1="0" x2="120" y2="1000" />
|
||||||
|
<line x1="-920" y1="0" x2="80" y2="1000" />
|
||||||
|
<line x1="-950" y1="0" x2="50" y2="1000" />
|
||||||
|
<line x1="-970" y1="0" x2="30" y2="1000" />
|
||||||
|
<line x1="-985" y1="0" x2="15" y2="1000" />
|
||||||
|
<line x1="-995" y1="0" x2="5" y2="1000" />
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1009 B |
26
images/bgtr.svg
Normal file
26
images/bgtr.svg
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
<!--
|
||||||
|
Tessellate 1.0 by HTML5 UP
|
||||||
|
html5up.net | @n33co
|
||||||
|
Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
|
||||||
|
-->
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1000px" height="1000px" viewBox="0 0 1000 1000" zoomAndPan="disable">
|
||||||
|
<style type="text/css"><![CDATA[
|
||||||
|
line
|
||||||
|
{
|
||||||
|
stroke: rgba(255,255,255,0.1);
|
||||||
|
stroke-width: 0.85px;
|
||||||
|
}
|
||||||
|
]]></style>
|
||||||
|
<line x1="180" y1="0" x2="1180" y2="1000" />
|
||||||
|
<line x1="380" y1="0" x2="1380" y2="1000" />
|
||||||
|
<line x1="530" y1="0" x2="1530" y2="1000" />
|
||||||
|
<line x1="655" y1="0" x2="1655" y2="1000" />
|
||||||
|
<line x1="755" y1="0" x2="1775" y2="1000" />
|
||||||
|
<line x1="830" y1="0" x2="1830" y2="1000" />
|
||||||
|
<line x1="880" y1="0" x2="1880" y2="1000" />
|
||||||
|
<line x1="920" y1="0" x2="1920" y2="1000" />
|
||||||
|
<line x1="950" y1="0" x2="1970" y2="1000" />
|
||||||
|
<line x1="970" y1="0" x2="1970" y2="1000" />
|
||||||
|
<line x1="985" y1="0" x2="1985" y2="1000" />
|
||||||
|
<line x1="995" y1="0" x2="1995" y2="1000" />
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1015 B |
BIN
images/custom_emojis/converse.png
Normal file
BIN
images/custom_emojis/converse.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.6 KiB |
BIN
images/custom_emojis/xmpp.png
Normal file
BIN
images/custom_emojis/xmpp.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 8.6 KiB |
BIN
images/header.jpg
Normal file
BIN
images/header.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 30 KiB |
BIN
images/overlay.png
Normal file
BIN
images/overlay.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 48 KiB |
114
index.html
114
index.html
@ -4,28 +4,26 @@
|
|||||||
<title>Converse</title>
|
<title>Converse</title>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<meta name="description" content="Converse: An XMPP chat client which can be integrated into any website" />
|
<meta name="description" content="Converse XMPP/Jabber Chat"/>
|
||||||
<meta name="author" content="JC Brand" />
|
<meta name="author" content="JC Brand" />
|
||||||
<meta name="keywords" content="xmpp chat webchat converse.js Converse" />
|
<meta name="keywords" content="xmpp chat webchat converse.js Converse" />
|
||||||
|
|
||||||
<!-- These files are NOT needed when using converse.js in your own project. -->
|
<!-- These files are NOT needed when using converse.js in your own project. -->
|
||||||
<link rel="shortcut icon" type="image/ico" href="images/favicon.ico"/>
|
<link rel="shortcut icon" type="image/ico" href="/dist/favicon.ico"/>
|
||||||
<link type="text/css" rel="stylesheet" media="screen" href="https://cdn.conversejs.org/5.0.0/dist/font-awesome.min.css" />
|
<link type="text/css" rel="stylesheet" media="screen" href="/dist/website.min.css" />
|
||||||
<link type="text/css" rel="stylesheet" media="screen" href="https://cdn.conversejs.org/5.0.0/dist/website.min.css" />
|
|
||||||
<noscript><p><img src="//stats.opkode.com/piwik.php?idsite=1" style="border:0;" alt="" /></p></noscript>
|
<noscript><p><img src="//stats.opkode.com/piwik.php?idsite=1" style="border:0;" alt="" /></p></noscript>
|
||||||
<script type="text/javascript" src="/src/website.js"></script>
|
|
||||||
<script type="text/javascript" src="analytics.js"></script>
|
<script type="text/javascript" src="analytics.js"></script>
|
||||||
<!-- *********************************************************************** -->
|
<!-- *********************************************************************** -->
|
||||||
|
|
||||||
<![if gte IE 11]>
|
<link rel="manifest" href="./manifest.json">
|
||||||
<link type="text/css" rel="stylesheet" media="screen" href="https://cdn.conversejs.org/5.0.0/dist/converse.min.css" />
|
<link type="text/css" rel="stylesheet" media="screen" href="/dist/converse.min.css" />
|
||||||
<script src="https://cdn.conversejs.org/3rdparty/libsignal-protocol.min.js"></script>
|
<script src="https://cdn.conversejs.org/3rdparty/libsignal-protocol.min.js"></script>
|
||||||
<script src="https://cdn.conversejs.org/5.0.0/dist/converse.min.js"></script>
|
<script src="/dist/converse.min.js"></script>
|
||||||
<![endif]>
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body id="page-top" data-spy="scroll">
|
<body id="page-top" data-spy="scroll" class="converse-website">
|
||||||
|
|
||||||
<section class="section-wrapper">
|
<section class="section-wrapper">
|
||||||
<nav class="navbar sticky-top navbar-expand-lg" role="navigation">
|
<nav class="navbar sticky-top navbar-expand-lg" role="navigation">
|
||||||
@ -56,6 +54,9 @@
|
|||||||
<li class="nav-item page-scroll">
|
<li class="nav-item page-scroll">
|
||||||
<a class="nav-link" href="#hosting">Hosting</a>
|
<a class="nav-link" href="#hosting">Hosting</a>
|
||||||
</li>
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link" href="https://github.com/conversejs/converse.js" target="_blank" rel="noopener">Github <i class="fa fa-external-link-alt"></i></a>
|
||||||
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link" href="/docs/html/index.html">Documentation <i class="fa fa-external-link-alt"></i></a>
|
<a class="nav-link" href="/docs/html/index.html">Documentation <i class="fa fa-external-link-alt"></i></a>
|
||||||
</li>
|
</li>
|
||||||
@ -96,25 +97,16 @@
|
|||||||
</h1>
|
</h1>
|
||||||
|
|
||||||
<p class="intro-text">A free and open-source XMPP chat client in your browser</p>
|
<p class="intro-text">A free and open-source XMPP chat client in your browser</p>
|
||||||
<p class="intro-text">Try the <a href="/fullscreen.html">fullpage</a> version</p>
|
<p class="intro-text">Try the <a href="/fullscreen.html">fullpage</a> and <a href="https://github.com/conversejs/converse-desktop/releases" target="_blank" rel="noopener">desktop</a> versions<p>
|
||||||
<p style="padding-top: 1.5em">
|
<p style="padding-top: 1.5em">
|
||||||
<a href="https://inverse.chat/#converse/room?jid=discuss@conference.conversejs.org"
|
<a href="https://inverse.chat/#converse/room?jid=discuss@conference.conversejs.org"
|
||||||
target="_blank" rel="noopener"><img src="https://inverse.chat/badge.svg?room=discuss@conference.conversejs.org"/></a>
|
target="_blank" rel="noopener"><img src="https://conference.conversejs.org/muc_badge/discuss@conference.conversejs.org"/></a>
|
||||||
</p>
|
</p>
|
||||||
<div class="page-scroll">
|
<div class="page-scroll">
|
||||||
<a href="#about" class="btn btn-default btn-lg"><span class="btn-text">Learn More</span></a>
|
<a href="#about" class="btn btn-default btn-lg"><span class="btn-text">Learn More</span></a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-12 col-md-offset-2 banner-social-buttons">
|
|
||||||
<ul class="list-inline">
|
|
||||||
<li class="list-inline-item"><a href="https://twitter.com/jcopkode" class="btn btn-circle btn-lg" title="Twitter" target="_blank" rel="noopener"><i class="fab fa-twitter"></i></a></li>
|
|
||||||
<li class="list-inline-item"><a href="https://mastodon.xyz/@jcbrand" class="btn btn-lg" title="Mastodon" target="_blank" rel="noopener"><img class="mastodon" src="/logo/mastodon.svg"/></a></li>
|
|
||||||
<li class="list-inline-item"><a href="https://github.com/jcbrand/converse.js" class="btn btn-circle btn-lg" title="GitHub" target="_blank" rel="noopener"><i class="fab fa-github"></i></a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section id="about" class="container content-section text-center">
|
<section id="about" class="container content-section text-center">
|
||||||
@ -144,66 +136,68 @@
|
|||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-lg-6">
|
<div class="col-lg-6">
|
||||||
<section>
|
|
||||||
<span class="feature-icon page-scroll"><a class="fa fa-globe" href="#features" title="Integration"></a></span>
|
|
||||||
<header>
|
<header>
|
||||||
<h2>Integration</h2>
|
<h2>Integration</h2>
|
||||||
</header>
|
</header>
|
||||||
<ul class="integration">
|
<ul class="integration">
|
||||||
<!-- xmpp server -->
|
<!-- xmpp server -->
|
||||||
|
<li style="list-style: none">XMPP Servers</li>
|
||||||
<li><a href="https://www.igniterealtime.org/projects/openfire/plugins.jsp" target="_blank" rel="noopener">Openfire</a></li>
|
<li><a href="https://www.igniterealtime.org/projects/openfire/plugins.jsp" target="_blank" rel="noopener">Openfire</a></li>
|
||||||
<li><a href="https://modules.prosody.im/mod_conversejs.html" target="_blank" rel="noopener">Prosody</a></li>
|
<li><a href="https://modules.prosody.im/mod_conversejs.html" target="_blank" rel="noopener">Prosody</a></li>
|
||||||
<!-- xmpp frameworks -->
|
<li><a href="https://docs.ejabberd.im/admin/configuration/modules/#mod-conversejs" target="_blank" rel="noopener">Ejabberd</a></li>
|
||||||
<li><a href="https://github.com/mikemarsian/conversejs-rails" target="_blank" rel="noopener">Ruby on Rails</a></li>
|
</ul>
|
||||||
<li><a href="https://pypi.python.org/pypi/django-conversejs" target="_blank" rel="noopener">Django (option 1)</a></li>
|
<ul class="integration">
|
||||||
<li><a href="https://github.com/fpytloun/django-xmpp" target="_blank" rel="noopener">Django (option 2)</a></li>
|
<li style="list-style: none">Frameworks</li>
|
||||||
<!-- xmpp as plugin -->
|
<li><a href="https://github.com/mikemarsian/conversejs-rails" target="_blank" rel="noopener">Ruby on Rails</a></li>
|
||||||
<li><a href="https://github.com/jcbrand/patterns.converse" target="_blank" rel="noopener">Patternslib</a></li>
|
<li>Django: <a href="https://pypi.python.org/pypi/django-conversejs" target="_blank" rel="noopener">option 1</a>, <a href="https://github.com/fpytloun/django-xmpp" target="_blank" rel="noopener">option 2</a></li>
|
||||||
<li><a href="https://github.com/devurandom/roundcube-converse.js-xmpp-plugin" target="_blank" rel="noopener">Roundcube</a></li>
|
</ul>
|
||||||
<li><a href="https://wordpress.org/plugins/conversejs/" target="_blank" rel="noopener">Wordpress</a></li>
|
<ul class="integration">
|
||||||
<li><a href="https://github.com/collective/collective.converse" target="_blank" rel="noopener">Plone</a></li>
|
<li style="list-style: none">Plugins</li>
|
||||||
<li><a href="https://github.com/keensoft/alfresco-js-chat-share" target="_blank" rel="noopener">Alfresco</a></li>
|
<li><a href="https://doc.tiki.org/xmpp" target="_blank" rel="noopener">Tiki Wiki CMS Groupware</a></li>
|
||||||
<li><a href="https://github.com/friendica/friendica-addons/tree/master/xmpp/converse" target="_blank" rel="noopener">Friendica</a></li>
|
<li><a href="https://elgg.org/plugins/2997196" target="_blank" rel="noopener">Elgg</a></li>
|
||||||
<li><a href="https://doc.tiki.org/xmpp" target="_blank" rel="noopener">Tiki Wiki CMS Groupware</a></li>
|
<li><a href="https://github.com/collective/collective.converse" target="_blank" rel="noopener">Plone</a></li>
|
||||||
|
<li><a href="https://github.com/devurandom/roundcube-converse.js-xmpp-plugin" target="_blank" rel="noopener">Roundcube</a></li>
|
||||||
|
<li><a href="https://github.com/friendica/friendica-addons/tree/master/xmpp/converse" target="_blank" rel="noopener">Friendica</a></li>
|
||||||
|
<li><a href="https://github.com/jcbrand/patterns.converse" target="_blank" rel="noopener">Patternslib</a></li>
|
||||||
|
<li><a href="https://github.com/keensoft/alfresco-js-chat-share" target="_blank" rel="noopener">Alfresco</a></li>
|
||||||
|
<li><a href="https://wordpress.org/plugins/conversejs/" target="_blank" rel="noopener">Wordpress</a></li>
|
||||||
|
</ul>
|
||||||
|
<header>
|
||||||
|
<h2>Applications</h2>
|
||||||
|
</header>
|
||||||
|
<ul class="integration">
|
||||||
|
<!-- xmpp stand alone apps -->
|
||||||
|
<li><a href="https://github.com/conversejs/converse-desktop" target="_blank" rel="noopener">Converse Desktop</a></li>
|
||||||
|
<li><a href="https://open-store.io/app/conversejs.povoq" target="_blank" rel="noopener">ConverseJS for Ubuntu-Touch</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</section>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-6">
|
<div class="col-lg-6">
|
||||||
<section>
|
|
||||||
<span class="feature-icon page-scroll"><a class="fa fa-check-square" href="#features" title="Features"></a></span>
|
|
||||||
</section>
|
|
||||||
<header>
|
<header>
|
||||||
<h2>Features</h2>
|
<h2>Features</h2>
|
||||||
</header>
|
</header>
|
||||||
<ul class="features">
|
<ul class="features">
|
||||||
<li>Available as overlayed chat boxes or as a fullscreen application.
|
<li>Converse supports many XMPP extensions.<br/>See here for a <a href="https://github.com/conversejs/converse.js#supported-xmpp-extensions" target="_blank" rel="noopener">list of supported XEPs</a>.</li>
|
||||||
See <a href="https://inverse.chat" target="_blank" rel="noopener">inverse.chat</a> for the fullscreen version.
|
<li>Available as overlayed chat boxes or as a full-page app. See <a href="https://conversejs.org/fullscreen.html" target="_blank" rel="noopener">here</a> for the fullscreen version. </li>
|
||||||
</li>
|
|
||||||
<li>A <a href="https://conversejs.org/docs/html/plugin_development.html" target="_blank" rel="noopener">plugin architecture</a> based on <a href="https://conversejs.github.io/pluggable.js/" target="_blank" rel="noopener">pluggable.js</a></li>
|
<li>A <a href="https://conversejs.org/docs/html/plugin_development.html" target="_blank" rel="noopener">plugin architecture</a> based on <a href="https://conversejs.github.io/pluggable.js/" target="_blank" rel="noopener">pluggable.js</a></li>
|
||||||
<li>Single-user and group chat</li>
|
<li>Chat statuses (online, busy, away, offline)</li>
|
||||||
<li>Contacts and groups</li>
|
<li>Desktop notifications</li>
|
||||||
|
<li>URL Previews (requires server support, for example <a href="https://modules.prosody.im/mod_ogp.html" target="_blank" rel="noopener">mod_ogp</a></li>
|
||||||
<li>Multi-user chatrooms (<a href="https://xmpp.org/extensions/xep-0045.html" target="_blank" rel="noopener">XEP 45</a>)</li>
|
<li>Multi-user chatrooms (<a href="https://xmpp.org/extensions/xep-0045.html" target="_blank" rel="noopener">XEP 45</a>)</li>
|
||||||
<li>Chatroom bookmarks (<a href="https://xmpp.org/extensions/xep-0048.html" target="_blank" rel="noopener">XEP 48</a>)</li>
|
<li>Chatroom bookmarks (<a href="https://xmpp.org/extensions/xep-0048.html" target="_blank" rel="noopener">XEP 48</a>)</li>
|
||||||
<li>Direct invitations to chat rooms (<a href="https://xmpp.org/extensions/xep-0249.html" target="_blank" rel="noopener">XEP 249</a>)</li>
|
<li>Direct invitations to chat rooms (<a href="https://xmpp.org/extensions/xep-0249.html" target="_blank" rel="noopener">XEP 249</a>)</li>
|
||||||
<li>vCard support (<a href="https://xmpp.org/extensions/xep-0054.html" target="_blank" rel="noopener">XEP 54</a>)</li>
|
<li>vCard support (<a href="https://xmpp.org/extensions/xep-0054.html" target="_blank" rel="noopener">XEP 54</a>)</li>
|
||||||
<li>Service discovery (<a href="https://xmpp.org/extensions/xep-0030.html" target="_blank" rel="noopener">XEP 30</a>)</li>
|
<li>Service discovery (<a href="https://xmpp.org/extensions/xep-0030.html" target="_blank" rel="noopener">XEP 30</a>)</li>
|
||||||
<li>In-band registration (<a href="https://xmpp.org/extensions/xep-0077.html" target="_blank" rel="noopener">XEP 77</a>)</li>
|
<li>In-band registration (<a href="https://xmpp.org/extensions/xep-0077.html" target="_blank" rel="noopener">XEP 77</a>)</li>
|
||||||
<li>Roster item exchange (<a href="https://xmpp.org/extensions/xep-0144.html" target="_blank" rel="noopener">XEP 144</a>)</li>
|
|
||||||
<li>Chat statuses (online, busy, away, offline)</li>
|
|
||||||
<li>Custom status messages</li>
|
|
||||||
<li>Typing and chat state notifications (<a href="https://xmpp.org/extensions/xep-0085.html" target="_blank" rel="noopener">XEP 85</a>)</li>
|
<li>Typing and chat state notifications (<a href="https://xmpp.org/extensions/xep-0085.html" target="_blank" rel="noopener">XEP 85</a>)</li>
|
||||||
<li>Desktop notifications</li>
|
|
||||||
<li>File sharing / HTTP File Upload (<a href="https://xmpp.org/extensions/xep-0363.html" target="_blank" rel="noopener">XEP 363</a>)</li>
|
<li>File sharing / HTTP File Upload (<a href="https://xmpp.org/extensions/xep-0363.html" target="_blank" rel="noopener">XEP 363</a>)</li>
|
||||||
<li>Messages appear in all connected chat clients / Message Carbons (<a href="https://xmpp.org/extensions/xep-0280.html" target="_blank" rel="noopener">XEP 280</a>)</li>
|
|
||||||
<li>Third person "/me" messages (<a href="https://xmpp.org/extensions/xep-0245.html" target="_blank" rel="noopener">XEP 245</a>)</li>
|
|
||||||
<li>XMPP Ping (<a href="https://xmpp.org/extensions/xep-0199.html" target="_blank" rel="noopener">XEP 199</a>)</li>
|
|
||||||
<li>Server-side archiving of messages (<a href="https://xmpp.org/extensions/xep-0313.html" target="_blank" rel="noopener">XEP 313</a>)</li>
|
<li>Server-side archiving of messages (<a href="https://xmpp.org/extensions/xep-0313.html" target="_blank" rel="noopener">XEP 313</a>)</li>
|
||||||
<li>Hidden messages (aka Spoilers) (<a href="https://xmpp.org/extensions/xep-0382.html" target="_blank" rel="noopener">XEP 382</a>)</li>
|
<li>Hidden messages (aka Spoilers) (<a href="https://xmpp.org/extensions/xep-0382.html" target="_blank" rel="noopener">XEP 382</a>)</li>
|
||||||
<li>Client state indication (<a href="https://xmpp.org/extensions/xep-0352.html" target="_blank" rel="noopener">XEP 352</a>)</li>
|
<li>Client state indication (<a href="https://xmpp.org/extensions/xep-0352.html" target="_blank" rel="noopener">XEP 352</a>)</li>
|
||||||
<li>Last Message Correction (<a href="https://xmpp.org/extensions/xep-0308.html" target="_blank" rel="noopener">XEP 308</a>)</li>
|
|
||||||
<li>OMEMO encrypted messaging (<a href="https://xmpp.org/extensions/xep-0384.html" target="_blank" rel="noopener">XEP 384</a>)</li>
|
<li>OMEMO encrypted messaging (<a href="https://xmpp.org/extensions/xep-0384.html" target="_blank" rel="noopener">XEP 384</a>)</li>
|
||||||
<li>Supports anonymous logins, see the <a href="https://conversejs.org/demo/anonymous.html" target="_blank" rel="noopener">anonymous login demo</a>.</li>
|
<li>Message Styling (<a href="https://xmpp.org/extensions/xep-0384.html" target="_blank" rel="noopener">XEP 393</a>)</li>
|
||||||
<li>Translated into 28 languages</li>
|
<li>Anonymous logins, see the <a href="/demo/anonymous.html" target="_blank" rel="noopener">anonymous login demo</a></li>
|
||||||
|
<li>Message corrections, retractions and moderation</li>
|
||||||
|
<li>Translated into over 30 languages</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -216,8 +210,7 @@
|
|||||||
<div class="col-lg-12 col-lg-offset-2">
|
<div class="col-lg-12 col-lg-offset-2">
|
||||||
<h2>Contact</h2>
|
<h2>Contact</h2>
|
||||||
<ul class="contact">
|
<ul class="contact">
|
||||||
<li>Follow on <a href="https://twitter.com/jcopkode" target="_blank" rel="noopener">Twitter</a>
|
<li>Follow on <a href="https://mastodon.xyz/@jcbrand" target="_blank" rel="noopener">the fediverse</a>
|
||||||
or <a href="https://mastodon.xyz/@jcbrand" target="_blank" rel="noopener">Mastodon</a>
|
|
||||||
<li>Chat via XMPP at <a href="xmpp:jc@opkode.com" class="xmpp JSnocheck" title="XMPP/Jabber">jc@opkode.com</a></li>
|
<li>Chat via XMPP at <a href="xmpp:jc@opkode.com" class="xmpp JSnocheck" title="XMPP/Jabber">jc@opkode.com</a></li>
|
||||||
<li>For technical support, you can ask on <a href="https://stackoverflow.com/questions/tagged/converse.js">Stack Overflow</a>
|
<li>For technical support, you can ask on <a href="https://stackoverflow.com/questions/tagged/converse.js">Stack Overflow</a>
|
||||||
<li>The Converse XMPP chatroom: <a href="xmpp:discuss@conference.conversejs.org?join" class="xmpp JSnocheck chatroom-name" title="Converse chat room">discuss@conference.conversejs.org</a></li>
|
<li>The Converse XMPP chatroom: <a href="xmpp:discuss@conference.conversejs.org?join" class="xmpp JSnocheck chatroom-name" title="Converse chat room">discuss@conference.conversejs.org</a></li>
|
||||||
@ -247,12 +240,11 @@
|
|||||||
<div class="sponsors">
|
<div class="sponsors">
|
||||||
<h2>Converse is supported by:</h2>
|
<h2>Converse is supported by:</h2>
|
||||||
<ul >
|
<ul >
|
||||||
<li><a href="https://www.keycdn.com?utm_source=conversejs" target="_blank" rel="noopener"><img style="height: 3em" src="/logo/keycdn.svg" alt="KeyCDN"></a></li>
|
<li><a href="https://bairesdev.com/sponsoring-open-source-projects/?utm_source=conversejs" target="_blank" rel="noopener"><img style="width: 13em" src="/media/logos/bairesdev-primary.png" alt="BairesDev"></a></li>
|
||||||
<li><a href="https://wikisuite.org/?utm_source=conversejs" target="_blank" rel="noopener"><img style="height: 4em" src="/logo/wikisuite-white.png" alt="WikiSuite"></a></li>
|
|
||||||
<li><a href="https://weblate.org?utm_source=conversejs" target="_blank" rel="noopener"><img style="height: 2.6em" src="/logo/weblate-button.svg" alt="Weblate"></a></li>
|
|
||||||
<li><a href="https://www.codefirst.co.uk?utm_source=conversejs" target="_blank" rel="noopener"><img style="width: 12em; padding-top: 0.5em" src="/logo/codefirst.png" alt="Codefirst"></a></li>
|
|
||||||
<li><a href="https://www.b1-systems.de?utm_source=conversejs" target="_blank" rel="noopener"><img style="height: 5em" src="/logo/b1-systems.svg" alt="B1 Systems"></a></li>
|
|
||||||
<li><a href="https://blokt.com?utm_source=conversejs" target="_blank" rel="noopener"><img style="width: 12em" src="/logo/blokt.png" alt="Blokt Crypto & Privacy"></a></li>
|
<li><a href="https://blokt.com?utm_source=conversejs" target="_blank" rel="noopener"><img style="width: 12em" src="/logo/blokt.png" alt="Blokt Crypto & Privacy"></a></li>
|
||||||
|
<li><a href="https://primesound.org/?utm_source=conversejs" target="_blank" rel="noopener"><img style="width: 10em" src="/media/logos/primesound.png" alt="Prime Sound"></a></li>
|
||||||
|
<li><a href="https://www.keycdn.com?utm_source=conversejs" target="_blank" rel="noopener"><img style="height: 3em" src="/logo/keycdn.svg" alt="KeyCDN"></a></li>
|
||||||
|
<li><a href="https://weblate.org?utm_source=conversejs" target="_blank" rel="noopener"><img style="height: 2.6em" src="/logo/weblate-button.svg" alt="Weblate"></a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -11,17 +11,17 @@
|
|||||||
|
|
||||||
<!-- These files are NOT needed when using converse.js in your own project. -->
|
<!-- These files are NOT needed when using converse.js in your own project. -->
|
||||||
<link rel="shortcut icon" type="image/ico" href="images/favicon.ico"/>
|
<link rel="shortcut icon" type="image/ico" href="images/favicon.ico"/>
|
||||||
<link type="text/css" rel="stylesheet" media="screen" href="https://cdn.conversejs.org/5.0.0/css/font-awesome.min.css" />
|
<link type="text/css" rel="stylesheet" media="screen" href="https://cdn.conversejs.org/10.1.6/css/font-awesome.min.css" />
|
||||||
<link type="text/css" rel="stylesheet" media="screen" href="https://cdn.conversejs.org/5.0.0/css/website.min.css" />
|
<link type="text/css" rel="stylesheet" media="screen" href="https://cdn.conversejs.org/10.1.6/css/website.min.css" />
|
||||||
<noscript><p><img src="//stats.opkode.com/piwik.php?idsite=1" style="border:0;" alt="" /></p></noscript>
|
<noscript><p><img src="//stats.opkode.com/piwik.php?idsite=1" style="border:0;" alt="" /></p></noscript>
|
||||||
<script type="text/javascript" src="/src/website.js"></script>
|
<script type="text/javascript" src="/src/website.js"></script>
|
||||||
<script type="text/javascript" src="analytics.js"></script>
|
<script type="text/javascript" src="analytics.js"></script>
|
||||||
<!-- *********************************************************************** -->
|
<!-- *********************************************************************** -->
|
||||||
|
|
||||||
<![if gte IE 11]>
|
<![if gte IE 11]>
|
||||||
<link type="text/css" rel="stylesheet" media="screen" href="https://cdn.conversejs.org/5.0.0/css/converse.min.css" />
|
<link type="text/css" rel="stylesheet" media="screen" href="https://cdn.conversejs.org/10.1.6/css/converse.min.css" />
|
||||||
<script src="https://cdn.conversejs.org/3rdparty/libsignal-protocol.min.js"></script>
|
<script src="https://cdn.conversejs.org/3rdparty/libsignal-protocol.min.js"></script>
|
||||||
<script src="https://cdn.conversejs.org/5.0.0/dist/converse.min.js"></script>
|
<script src="https://cdn.conversejs.org/10.1.6/dist/converse.min.js"></script>
|
||||||
<![endif]>
|
<![endif]>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
@ -66,7 +66,7 @@
|
|||||||
<table id="jslicense-labels1" style="width: 100%">
|
<table id="jslicense-labels1" style="width: 100%">
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<a href="https://cdn.conversejs.org/5.0.0/dist/converse.min.js">converse.min.js</a>
|
<a href="https://cdn.conversejs.org/10.1.6/dist/converse.min.js">converse.min.js</a>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<a href="https://www.mozilla.org/en-US/MPL/2.0/">MPL-2.0</a>
|
<a href="https://www.mozilla.org/en-US/MPL/2.0/">MPL-2.0</a>
|
||||||
|
182
karma.conf.js
Normal file
182
karma.conf.js
Normal file
@ -0,0 +1,182 @@
|
|||||||
|
/* global module */
|
||||||
|
const path = require('path');
|
||||||
|
|
||||||
|
module.exports = function(config) {
|
||||||
|
config.set({
|
||||||
|
|
||||||
|
// base path that will be used to resolve all patterns (eg. files, exclude)
|
||||||
|
basePath: '',
|
||||||
|
frameworks: ['jasmine'],
|
||||||
|
files: [
|
||||||
|
{ pattern: 'dist/*.js.map', included: false },
|
||||||
|
{ pattern: 'dist/*.css.map', included: false },
|
||||||
|
{ pattern: "dist/emojis.js", served: true },
|
||||||
|
"src/shared/tests/tests.css",
|
||||||
|
"node_modules/lodash/lodash.min.js",
|
||||||
|
"dist/converse.js",
|
||||||
|
"dist/converse.css",
|
||||||
|
{ pattern: "dist/images/**/*.*", included: false },
|
||||||
|
{ pattern: "dist/webfonts/**/*.*", included: false },
|
||||||
|
{ pattern: "dist/\@fortawesome/fontawesome-free/sprites/solid.svg",
|
||||||
|
watched: false,
|
||||||
|
included: false,
|
||||||
|
served: true,
|
||||||
|
nocache: false
|
||||||
|
},
|
||||||
|
{ pattern: "src/shared/tests/mock.js", type: 'module' },
|
||||||
|
|
||||||
|
{ pattern: "src/headless/plugins/caps/tests/caps.js", type: 'module' },
|
||||||
|
{ pattern: "src/headless/plugins/chat/tests/api.js", type: 'module' },
|
||||||
|
{ pattern: "src/headless/plugins/disco/tests/disco.js", type: 'module' },
|
||||||
|
{ pattern: "src/headless/plugins/muc/tests/affiliations.js", type: 'module' },
|
||||||
|
{ pattern: "src/headless/plugins/muc/tests/messages.js", type: 'module' },
|
||||||
|
{ pattern: "src/headless/plugins/muc/tests/muc.js", type: 'module' },
|
||||||
|
{ pattern: "src/headless/plugins/muc/tests/occupants.js", type: 'module' },
|
||||||
|
{ pattern: "src/headless/plugins/muc/tests/pruning.js", type: 'module' },
|
||||||
|
{ pattern: "src/headless/plugins/muc/tests/registration.js", type: 'module' },
|
||||||
|
{ pattern: "src/headless/plugins/ping/tests/ping.js", type: 'module' },
|
||||||
|
{ pattern: "src/headless/plugins/roster/tests/presence.js", type: 'module' },
|
||||||
|
{ pattern: "src/headless/plugins/smacks/tests/smacks.js", type: 'module' },
|
||||||
|
{ pattern: "src/headless/plugins/status/tests/status.js", type: 'module' },
|
||||||
|
{ pattern: "src/headless/shared/settings/tests/settings.js", type: 'module' },
|
||||||
|
{ pattern: "src/headless/tests/converse.js", type: 'module' },
|
||||||
|
{ pattern: "src/headless/tests/eventemitter.js", type: 'module' },
|
||||||
|
{ pattern: "src/modals/tests/user-details-modal.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/adhoc-views/tests/adhoc.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/bookmark-views/tests/bookmarks-list.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/bookmark-views/tests/bookmarks.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/chatview/tests/chatbox.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/chatview/tests/corrections.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/chatview/tests/emojis.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/chatview/tests/http-file-upload.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/chatview/tests/markers.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/chatview/tests/me-messages.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/chatview/tests/message-audio.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/chatview/tests/message-gifs.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/chatview/tests/message-images.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/chatview/tests/message-videos.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/chatview/tests/messages.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/chatview/tests/oob.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/chatview/tests/receipts.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/chatview/tests/spoilers.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/chatview/tests/styling.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/chatview/tests/unreads.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/chatview/tests/xss.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/controlbox/tests/controlbox.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/controlbox/tests/login.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/headlines-view/tests/headline.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/mam-views/tests/mam.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/mam-views/tests/placeholder.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/minimize/tests/minchats.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/muc-views/tests/autocomplete.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/muc-views/tests/component.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/muc-views/tests/corrections.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/muc-views/tests/disco.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/muc-views/tests/emojis.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/muc-views/tests/hats.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/muc-views/tests/http-file-upload.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/muc-views/tests/info-messages.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/muc-views/tests/mam.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/muc-views/tests/markers.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/muc-views/tests/me-messages.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/muc-views/tests/member-lists.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/muc-views/tests/mentions.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/muc-views/tests/mep.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/muc-views/tests/modtools.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/muc-views/tests/muc-add-modal.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/muc-views/tests/muc-api.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/muc-views/tests/muc-list-modal.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/muc-views/tests/muc-mentions.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/muc-views/tests/muc-messages.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/muc-views/tests/muc-registration.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/muc-views/tests/muc.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/muc-views/tests/nickname.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/muc-views/tests/occupants.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/muc-views/tests/rai.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/muc-views/tests/retractions.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/muc-views/tests/styling.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/muc-views/tests/toolbar.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/muc-views/tests/unfurls.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/muc-views/tests/xss.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/notifications/tests/notification.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/omemo/tests/corrections.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/omemo/tests/media-sharing.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/omemo/tests/muc.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/omemo/tests/omemo.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/profile/tests/password-reset.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/profile/tests/profile.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/profile/tests/status.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/push/tests/push.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/register/tests/register.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/roomslist/tests/roomslist.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/rootview/tests/root.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/rosterview/tests/add-contact-modal.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/rosterview/tests/presence.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/rosterview/tests/protocol.js", type: 'module' },
|
||||||
|
{ pattern: "src/plugins/rosterview/tests/roster.js", type: 'module' },
|
||||||
|
|
||||||
|
// For some reason this test causes issues when its run earlier
|
||||||
|
{ pattern: "src/headless/tests/persistence.js", type: 'module' },
|
||||||
|
],
|
||||||
|
|
||||||
|
proxies: {
|
||||||
|
"/dist/images/custom_emojis/": "/base/dist/images/custom_emojis/"
|
||||||
|
},
|
||||||
|
|
||||||
|
client: {
|
||||||
|
jasmine: {
|
||||||
|
random: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
exclude: ['**/*.sw?'],
|
||||||
|
|
||||||
|
// preprocess matching files before serving them to the browser
|
||||||
|
// available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
|
||||||
|
preprocessors: {},
|
||||||
|
|
||||||
|
// test results reporter to use
|
||||||
|
// possible values: 'dots', 'progress'
|
||||||
|
// available reporters: https://npmjs.org/browse/keyword/karma-reporter
|
||||||
|
reporters: ['progress', 'kjhtml'],
|
||||||
|
|
||||||
|
webpack: {
|
||||||
|
mode: 'development',
|
||||||
|
devtool: 'inline-source-map',
|
||||||
|
module: {
|
||||||
|
rules: [{
|
||||||
|
test: /\.js$/,
|
||||||
|
exclude: /(node_modules|test)/
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
output: {
|
||||||
|
path: path.resolve('test'),
|
||||||
|
filename: '[name].out.js',
|
||||||
|
chunkFilename: '[id].[chunkHash].js'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
port: 9876,
|
||||||
|
colors: true,
|
||||||
|
|
||||||
|
// level of logging
|
||||||
|
// possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
|
||||||
|
logLevel: config.LOG_INFO,
|
||||||
|
|
||||||
|
// enable / disable watching file and executing tests whenever any file changes
|
||||||
|
autoWatch: true,
|
||||||
|
|
||||||
|
// start these browsers
|
||||||
|
// available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
|
||||||
|
browsers: ['Chrome'],
|
||||||
|
|
||||||
|
// Continuous Integration mode
|
||||||
|
// if true, Karma captures browsers, runs the tests and exits
|
||||||
|
singleRun: false,
|
||||||
|
|
||||||
|
// Concurrency level
|
||||||
|
// how many browser should be started simultaneous
|
||||||
|
concurrency: Infinity
|
||||||
|
})
|
||||||
|
}
|
@ -1,7 +0,0 @@
|
|||||||
{
|
|
||||||
"packages": [
|
|
||||||
".",
|
|
||||||
"src/*"
|
|
||||||
],
|
|
||||||
"version": "4.0.3"
|
|
||||||
}
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
1814
locale/converse.pot
1814
locale/converse.pot
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user