Compare commits
436 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 27b87d4a8a | |||
| 6e90f5e681 | |||
| 9a82a28c8d | |||
| c44c259180 | |||
| 13c89279a2 | |||
| fcf685a4dc | |||
| 07580e6787 | |||
| 6ce687262e | |||
| 2c8156dcd0 | |||
| bb8d65b68a | |||
| c43b15b3cd | |||
| acc6beb3f3 | |||
| bf2692a710 | |||
| 42e5a443ed | |||
| c5221f9350 | |||
| 16739180f5 | |||
| 181465ea3e | |||
| 23a32cae1a | |||
| b2e2bd7ca8 | |||
| efdc90b7b8 | |||
| 010a6901b3 | |||
| 8fb6257388 | |||
| 2832c4f513 | |||
| 6022105f39 | |||
| 3a78d6cf2a | |||
| 975dcc1128 | |||
| 00e61dd816 | |||
| c0134fe820 | |||
| ab59302204 | |||
| 89b11829ce | |||
| 267d8ca124 | |||
| 427f68daa6 | |||
| b15bae267d | |||
| 6bbed5854a | |||
| 15661f16c4 | |||
| 54b30cf0c4 | |||
| b7940ba360 | |||
| ee2fd8446a | |||
| b41a8b0925 | |||
| 8603cd85db | |||
| 3a2d1bd12b | |||
| a04ed90e25 | |||
| 383b498fbb | |||
| af3987fc0a | |||
| 9fd1ed34ee | |||
| a9ae72ba9f | |||
| aa704c0d75 | |||
| bc48fa4c55 | |||
| 2251cb7547 | |||
| 15b51d7a7b | |||
| 5721f77d5a | |||
| fa32fecd97 | |||
| e291d84cf8 | |||
| 934fdcdc5d | |||
| eba6868a3f | |||
| 5bb989d998 | |||
| e9645ffec0 | |||
| 179c5c4cbb | |||
| f210803202 | |||
| 793855ad91 | |||
| 1a423743af | |||
| b8f20fb663 | |||
| 7b4338e7df | |||
| e6b1e55705 | |||
| eb784b4026 | |||
| 07d363ed0c | |||
| 8a7cf45d0b | |||
| d93ece6540 | |||
| 2a65a5001d | |||
| 1ffcd1ce6e | |||
| d5c14406db | |||
| 67b87ac892 | |||
| a44f865432 | |||
| a4ff3f3a65 | |||
| ca56f11dc6 | |||
| 1695385912 | |||
| b9e3841186 | |||
| 0680f6ac5e | |||
| ff15018b24 | |||
| 635054007d | |||
| f1527ba21e | |||
| 3b1a8a6c00 | |||
| c862f58c78 | |||
| 6e938dcc84 | |||
| ecb88d9ebc | |||
| b7464e19ff | |||
| 1bcd52300f | |||
| 0c55beff6e | |||
| 3adb30c859 | |||
| 5378d177e2 | |||
| 160cd976b4 | |||
| 95d8f6c531 | |||
| cdcf3ef1b9 | |||
| afd49b9847 | |||
| 5b89ee0fe8 | |||
| 4ce63d9a6c | |||
| 29ac776a98 | |||
| 8cf9a0b79b | |||
| d0d9b2f968 | |||
| 785412be5c | |||
| 3b05cb0700 | |||
| 1fc1626d3f | |||
| 56f47dbec7 | |||
| 05cd172b77 | |||
| 0876662a20 | |||
| 9402dbb16f | |||
| 99f9443ec8 | |||
| 84f698c489 | |||
| 274a5dfbc8 | |||
| 641aa88bbc | |||
| 029aa67ccf | |||
| 120973074a | |||
| 8138b48cad | |||
| 7de0afb613 | |||
| c407e87da3 | |||
| 2681f3b5d8 | |||
| f9a187c3aa | |||
| 40fffe6cf4 | |||
| 903943362e | |||
| e6120641f9 | |||
| 43f0b811f5 | |||
| bd61571ce5 | |||
| e06bdd6b30 | |||
| 75c66cba9c | |||
| 531d17ddb9 | |||
| 1aa2e75a21 | |||
| 416bee969f | |||
| fa75800ee1 | |||
| 5426358959 | |||
| 8e01c04e96 | |||
| 809d9d2d0f | |||
| 7c2db2aebb | |||
| 4f930cb94d | |||
| 9a48088d84 | |||
| 2e9b538c27 | |||
| 1a6d22615d | |||
| 97fc89bc7f | |||
| fbc3349e04 | |||
| 42122b7aa7 | |||
| ee05a863f7 | |||
| 44fa357534 | |||
| 354e4920b3 | |||
| 9bfdb2b8d4 | |||
| e31fced208 | |||
| f65903a181 | |||
| f21bd9b96e | |||
| 0647a23ea7 | |||
| 9b5ea84ee5 | |||
| 7732984133 | |||
| 6f59b7e63d | |||
| 40d6ef6156 | |||
| b5f8bc7c15 | |||
| 97e0530be1 | |||
| 3ab3c71cf6 | |||
| 7bc96ee464 | |||
| ca07b182c6 | |||
| 3ffe6383b2 | |||
| 47d898bb8b | |||
| 3a5f7e6cfe | |||
| c8ba793851 | |||
| d0646e8009 | |||
| d89da2d3eb | |||
| 99b54916f4 | |||
| d0437ab19a | |||
| 12910ed023 | |||
| ae5356b2a6 | |||
| f417b9f7c3 | |||
| bd3c805e67 | |||
| 0375cea2ce | |||
| 1d67918b8d | |||
| 3da3ced880 | |||
| 85ca3cbd1b | |||
| cef212145f | |||
| cf40d73f95 | |||
| 7df7c7664d | |||
| d0a91cc9de | |||
| a7a11ef287 | |||
| db924b488c | |||
| a213f6862d | |||
| b70337513c | |||
| 0a0bb72501 | |||
| 5cbe7ebf54 | |||
| 9f165996b7 | |||
| 56589d491f | |||
| 35d082da8c | |||
| 343f462ca5 | |||
| 87a6ab7aee | |||
| 6e4a8ae015 | |||
| b2c7929d23 | |||
| 956c0488c9 | |||
| 5f0a26cf08 | |||
| 5de8d8619f | |||
| eb46646eb1 | |||
| 6ce338e8e2 | |||
| 0bb0dcc6b1 | |||
| a315046af8 | |||
| 04946dbf74 | |||
| bb900099a7 | |||
| 903c48f3a5 | |||
| 41c8dbb135 | |||
| 47b419dd98 | |||
| 41e57f89c9 | |||
| 480c6e0995 | |||
| ca364541e7 | |||
| b71fcfc82f | |||
| 19a5edd63a | |||
| 330d513fe8 | |||
| f07e16a597 | |||
| 3c950fe65c | |||
| a7aa52fc9f | |||
| dd7f3033fc | |||
| cc7e50782e | |||
| 5fddf889e7 | |||
| bce68d52e7 | |||
| 2fac416520 | |||
| 1d2b0fc910 | |||
| 8ac3661bcf | |||
| bbcf0fa4f3 | |||
| c531936f83 | |||
| 6d74bef73b | |||
| 96a1b16099 | |||
| 40d86edbc2 | |||
| be56e1305b | |||
| a76a9fa6e6 | |||
| 75e9294033 | |||
| a864d89970 | |||
| 7bbea9e186 | |||
| 5f94b5252b | |||
| 2d16c7d1f4 | |||
| 8fddc9665f | |||
| 0d24869274 | |||
| d2fb995753 | |||
| 6c751b03c9 | |||
| 0e8e4579a6 | |||
| 937239e329 | |||
| 37f34924f5 | |||
| e66e495c22 | |||
| 124d3f3ab0 | |||
| ff31ef7f3d | |||
| 141dba70e5 | |||
| d532705d52 | |||
| d45c7e94ca | |||
| bea87c9f05 | |||
| 9101d7edf0 | |||
| d88da5717d | |||
| cf2962a359 | |||
| 0f5b61b096 | |||
| 5260597717 | |||
| 0a2a486c77 | |||
| 4944f77159 | |||
| e77bdf6e35 | |||
| 5d3b8010cd | |||
| 6f424ecd1a | |||
| 08b47e62ec | |||
| 6c20273ad1 | |||
| f9ed405118 | |||
| acd077c728 | |||
| c589cf68c2 | |||
| a824385424 | |||
| 46737b115d | |||
| b1ab2808bb | |||
| 849d239a79 | |||
| 96a8fc516d | |||
| a22c88a5c0 | |||
| c35605ecce | |||
| 6a598ee3cb | |||
| daab203ec0 | |||
| 7a5319251e | |||
| 6263a93f8f | |||
| 15fd7dc900 | |||
| 3758128e83 | |||
| cfd54fa9a2 | |||
| 538766bacf | |||
| e8eab55d4f | |||
| 525f8bac22 | |||
| 220eb98f2e | |||
| 7be6580b65 | |||
| 0d0b39c89f | |||
| 091e7e27d4 | |||
| 06a8994f24 | |||
| 905a433950 | |||
| b72b92cc46 | |||
| c9e3f0bcf6 | |||
| 434b0423e4 | |||
| e946d20bda | |||
| 3de7cceadc | |||
| 5b83603d51 | |||
| 03e535eac0 | |||
| c0de565d2c | |||
| 3e847f3302 | |||
| 23a3180862 | |||
| 12d85aef48 | |||
| 86fe0ff355 | |||
| dced4f4dac | |||
| bf46082c82 | |||
| e9b653e6da | |||
| 71dccedfc6 | |||
| b24230fe0a | |||
| edb9aa053d | |||
| b1bf769e59 | |||
| b315fe4770 | |||
| 026bd24a56 | |||
| ce500fa30e | |||
| 51081276c2 | |||
| 9b1c81829a | |||
| 7e1237bb0f | |||
| 80fd0e4b6d | |||
| 26875762b5 | |||
| ebfcf3b5db | |||
| c472aad566 | |||
| 59138d810c | |||
| 489b3fdfb5 | |||
| 4a225c0f4b | |||
| 997b32b46a | |||
| 5c1566ddb7 | |||
| 3f10994574 | |||
| 2dbd0795b9 | |||
| 55e1c5ef78 | |||
| c51d5e0416 | |||
| 2e41f64243 | |||
| 1b2a166693 | |||
| be30990d7f | |||
| 5219bf36a9 | |||
| 3182a3100c | |||
| 59f5621ffa | |||
| c4d9e536b6 | |||
| a97d8ab046 | |||
| f7e8d8f1c1 | |||
| 97aac8a446 | |||
| 3f391be8f0 | |||
| e86362bb2b | |||
| f17c5a3350 | |||
| b9a161bb1a | |||
| 18110f240b | |||
| 92c329912c | |||
| d97366fe74 | |||
| 0258195682 | |||
| 7805241296 | |||
| 33ea1823de | |||
| 038444773b | |||
| 85b614e77b | |||
| 02aa256c59 | |||
| 21c6cc8fd1 | |||
| 5728db746d | |||
| 5083217fce | |||
| 527c000441 | |||
| 48af6467ea | |||
| b051bcd983 | |||
| 11a6d3659e | |||
| 412489d31b | |||
| b75e08edf7 | |||
| ff83eb960a | |||
| 67208fad9d | |||
| e02864bf6c | |||
| 45abd38d09 | |||
| e7cf1d0b87 | |||
| b7aa7dc64c | |||
| d10d7aa8cc | |||
| 6b3333c3ff | |||
| 3ba6a8e039 | |||
| c27a3a02fe | |||
| ca05bbd652 | |||
| 357988b662 | |||
| c40df92263 | |||
| cbe30c1fcb | |||
| f77b55c073 | |||
| f9ab175a79 | |||
| fb0097a6e0 | |||
| d247003038 | |||
| 0f2d64c10d | |||
| d49ccbf031 | |||
| 6d5065ae3a | |||
| 803e6d743a | |||
| 2bf4a5970a | |||
| 9e985e3e79 | |||
| 72661acb43 | |||
| eace76b16e | |||
| ca03a97ca2 | |||
| 95d54f9568 | |||
| 62185c8d30 | |||
| ef94ee66fd | |||
| f666cd4643 | |||
| 12989ba5eb | |||
| 63f3b4f7af | |||
| 7a4ea0eba2 | |||
| ad4876821b | |||
| cf2b2d5e85 | |||
| a0c5df0c5b | |||
| ae36405466 | |||
| e7eb116d93 | |||
| 10a82afd46 | |||
| bba9563525 | |||
| 558cabd860 | |||
| 2118c3028f | |||
| 4a7238afea | |||
| 127c909f0f | |||
| 1a7c1c5c06 | |||
| dd5d2aeee0 | |||
| 1d99c5cb60 | |||
| b9e4bbc070 | |||
| 41fab88ee5 | |||
| 0ca877f925 | |||
| b480f125ee | |||
| 7ee5f81923 | |||
| 3d43b98d42 | |||
| 1636c202a7 | |||
| 060992bafa | |||
| c0c69394b9 | |||
| 2b7285e0b2 | |||
| c3a24ffdf8 | |||
| 48fb446f8c | |||
| 0283a501fa | |||
| fb572bf901 | |||
| 7eb09295a3 | |||
| e0eae52eae | |||
| dd270f99fc | |||
| 1472caab50 | |||
| ef2e62a01c | |||
| 4e909fc50d | |||
| 19b7106124 | |||
| ccd9fa6561 | |||
| 1ddd72ffe7 | |||
| b759acdcea | |||
| 4eee6d7cec | |||
| 5575d4e78e | |||
| 4dea2f1eb6 | |||
| 1d5b9bba15 | |||
| 2951281115 | |||
| fd8aba6d41 | |||
| 066e0a8101 | |||
| bf262a6051 | |||
| 7840924b17 | |||
| 60bdab4e52 | |||
| 5de3bacf35 | |||
| 8aae7424e9 | |||
| cda1d4ce7f |
@@ -0,0 +1,155 @@
|
||||
name: 'Manage Database'
|
||||
|
||||
inputs:
|
||||
for:
|
||||
default: ""
|
||||
description: 'One or more databases to manage:
|
||||
mysql, pgsql, redis, mssql'
|
||||
|
||||
do:
|
||||
default: ""
|
||||
description: 'One or more tasks to do:
|
||||
install, start, user, create, drop, dump'
|
||||
|
||||
dump-suffix:
|
||||
default: ""
|
||||
description: 'Suffix to append to the dump file name'
|
||||
|
||||
mssql-schema:
|
||||
default: ""
|
||||
description: 'SQL schema for the MSSQL database:
|
||||
singlehost or multihost'
|
||||
|
||||
runs:
|
||||
using: "composite"
|
||||
steps:
|
||||
|
||||
############################################################# Install #####
|
||||
|
||||
- if: contains(inputs.for, 'pgsql') && contains(inputs.do, 'install')
|
||||
shell: sh
|
||||
run: |
|
||||
sudo sed -i 's/yes/no/g' /etc/initramfs-tools/update-initramfs.conf
|
||||
sudo rm -f /var/lib/man-db/auto-update || echo ok
|
||||
sudo apt-get -q update
|
||||
sudo apt-get -q -y install postgresql
|
||||
|
||||
- if: contains(inputs.for, 'redis') && contains(inputs.do, 'install')
|
||||
shell: sh
|
||||
run: |
|
||||
sudo sed -i 's/yes/no/g' /etc/initramfs-tools/update-initramfs.conf
|
||||
sudo rm -f /var/lib/man-db/auto-update || echo ok
|
||||
sudo apt-get -q update
|
||||
sudo apt-get -q -y install redis-server
|
||||
|
||||
- if: contains(inputs.for, 'mssql') && contains(inputs.do, 'install')
|
||||
uses: awalsh128/cache-apt-pkgs-action@latest
|
||||
with:
|
||||
packages: tdsodbc
|
||||
|
||||
- if: contains(inputs.for, 'mssql') && contains(inputs.do, 'install')
|
||||
shell: sh
|
||||
run: |
|
||||
docker run -d -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=ejabberd_Test1" \
|
||||
-v $(pwd)/test/docker/db/mssql/initdb/initdb_mssql.sql:/initdb_mssql.sql:ro \
|
||||
-v $(pwd)/sql/mssql.sql:/mssql.sql:ro \
|
||||
-v $(pwd)/sql/mssql.new.sql:/mssql.new.sql:ro \
|
||||
-p 1433:1433 --name ejabberd-mssql \
|
||||
"mcr.microsoft.com/mssql/server:2019-latest"
|
||||
sleep 10
|
||||
docker exec ejabberd-mssql /opt/mssql-tools18/bin/sqlcmd \
|
||||
-C -U SA -P ejabberd_Test1 -S localhost -i /initdb_mssql.sql
|
||||
|
||||
- if: contains(inputs.for, 'mssql') && contains(inputs.do, 'install')
|
||||
&& inputs.mssql-schema == 'singlehost'
|
||||
shell: sh
|
||||
run: |
|
||||
docker exec ejabberd-mssql /opt/mssql-tools18/bin/sqlcmd \
|
||||
-C -U SA -P ejabberd_Test1 -S localhost -d ejabberd_test \
|
||||
-i /mssql.sql
|
||||
|
||||
- if: contains(inputs.for, 'mssql') && contains(inputs.do, 'install')
|
||||
&& inputs.mssql-schema == 'multihost'
|
||||
shell: sh
|
||||
run: |
|
||||
docker exec ejabberd-mssql /opt/mssql-tools18/bin/sqlcmd \
|
||||
-C -U SA -P ejabberd_Test1 -S localhost -d ejabberd_test \
|
||||
-i /mssql.new.sql
|
||||
|
||||
############################################################### Start #####
|
||||
|
||||
- if: contains(inputs.for, 'mysql') && contains(inputs.do, 'start')
|
||||
shell: sh
|
||||
run: |
|
||||
sudo systemctl start mysql.service
|
||||
|
||||
- if: contains(inputs.for, 'pgsql') && contains(inputs.do, 'start')
|
||||
shell: sh
|
||||
run: |
|
||||
sudo systemctl start postgresql.service
|
||||
pg_isready
|
||||
|
||||
################################################################ User #####
|
||||
|
||||
- if: contains(inputs.for, 'mysql') && contains(inputs.do, 'user')
|
||||
shell: sh
|
||||
run: |
|
||||
mysql -u root -proot -e "CREATE USER 'ejabberd_test'@'localhost'
|
||||
IDENTIFIED BY 'ejabberd_test';"
|
||||
|
||||
- if: contains(inputs.for, 'pgsql') && contains(inputs.do, 'user')
|
||||
shell: sh
|
||||
run: |
|
||||
sudo -u postgres psql -c "CREATE USER ejabberd_test
|
||||
WITH PASSWORD 'ejabberd_test';"
|
||||
|
||||
################################################################ Dump #####
|
||||
|
||||
- if: contains(inputs.for, 'mysql') && contains(inputs.do, 'dump')
|
||||
shell: sh
|
||||
run: |
|
||||
sudo mysqldump -u root -proot ejabberd_test \
|
||||
> mysql-${{ inputs.dump-suffix }}.sql
|
||||
|
||||
- if: contains(inputs.for, 'pgsql') && contains(inputs.do, 'dump')
|
||||
shell: sh
|
||||
run: |
|
||||
sudo -u postgres pg_dump ejabberd_test \
|
||||
> pgsql-${{ inputs.dump-suffix }}.sql
|
||||
|
||||
################################################################ Drop #####
|
||||
|
||||
- if: contains(inputs.for, 'mysql') && contains(inputs.do, 'drop')
|
||||
shell: sh
|
||||
run: |
|
||||
mysql -u root -proot -e "DROP DATABASE ejabberd_test;"
|
||||
|
||||
- if: contains(inputs.for, 'pgsql') && contains(inputs.do, 'drop')
|
||||
shell: sh
|
||||
run: |
|
||||
sudo -u postgres psql -c "DROP DATABASE ejabberd_test;"
|
||||
|
||||
############################################################## Create #####
|
||||
|
||||
- if: contains(inputs.for, 'mysql') && contains(inputs.do, 'create')
|
||||
shell: sh
|
||||
run: |
|
||||
mysql -u root -proot -e "CREATE DATABASE ejabberd_test;"
|
||||
mysql -u root -proot -e "GRANT ALL ON ejabberd_test.*
|
||||
TO 'ejabberd_test'@'localhost';"
|
||||
|
||||
- if: contains(inputs.for, 'pgsql') && contains(inputs.do, 'create')
|
||||
shell: sh
|
||||
run: |
|
||||
sudo -u postgres psql -c "CREATE DATABASE ejabberd_test;"
|
||||
sudo -u postgres psql -c "GRANT ALL PRIVILEGES
|
||||
ON DATABASE ejabberd_test TO ejabberd_test;"
|
||||
sudo -u postgres psql -c "GRANT ALL ON SCHEMA public TO ejabberd_test;"
|
||||
sudo -u postgres psql -c "ALTER DATABASE ejabberd_test
|
||||
OWNER TO ejabberd_test;"
|
||||
sudo -u postgres psql ejabberd_test -c "GRANT ALL PRIVILEGES ON ALL
|
||||
TABLES IN SCHEMA public
|
||||
TO ejabberd_test;"
|
||||
sudo -u postgres psql ejabberd_test -c "GRANT ALL PRIVILEGES ON ALL
|
||||
SEQUENCES IN SCHEMA public
|
||||
TO ejabberd_test;"
|
||||
@@ -0,0 +1,195 @@
|
||||
name: 'Manage ejabberd'
|
||||
|
||||
inputs:
|
||||
for:
|
||||
default: ""
|
||||
description: 'Release method, one of:
|
||||
prod, dev, install, run, deb'
|
||||
do:
|
||||
default: ""
|
||||
description: 'One or more tasks to perform:
|
||||
deploy, no_acme, no_tls,
|
||||
start, register, update_sql, stop,
|
||||
check, logs'
|
||||
username:
|
||||
default: "user1"
|
||||
description: 'Username part of the account JID'
|
||||
host:
|
||||
default: "localhost"
|
||||
description: 'Host part of the account JID'
|
||||
tool:
|
||||
default: "rebar3"
|
||||
description: 'Build tool to use:
|
||||
rebar or rebar3 (only relevant to make rebar2)'
|
||||
rel_name_vsn:
|
||||
default: ""
|
||||
description: 'Base name of installer files'
|
||||
configure:
|
||||
default: ""
|
||||
description: 'Options to append to ./configure'
|
||||
|
||||
runs:
|
||||
using: "composite"
|
||||
steps:
|
||||
|
||||
- name: Path Definitions
|
||||
id: path
|
||||
shell: bash
|
||||
run: |
|
||||
case ${{ inputs.for }} in
|
||||
'prod')
|
||||
BASE="_build/prod/rel/ejabberd"
|
||||
echo "conf=$BASE/conf" >> $GITHUB_OUTPUT
|
||||
echo "logs=$BASE/logs" >> $GITHUB_OUTPUT
|
||||
echo "ectl=$BASE/bin/ejabberdctl" >> $GITHUB_OUTPUT
|
||||
;;
|
||||
'dev')
|
||||
BASE="_build/dev/rel/ejabberd"
|
||||
echo "conf=$BASE/conf" >> $GITHUB_OUTPUT
|
||||
echo "logs=$BASE/logs" >> $GITHUB_OUTPUT
|
||||
echo "ectl=$BASE/bin/ejabberdctl" >> $GITHUB_OUTPUT
|
||||
;;
|
||||
'install')
|
||||
BASE="/tmp/ejabberd"
|
||||
echo "conf=$BASE/etc/ejabberd" >> $GITHUB_OUTPUT
|
||||
echo "logs=$BASE/var/log/ejabberd" >> $GITHUB_OUTPUT
|
||||
echo "ectl=$BASE/sbin/ejabberdctl" >> $GITHUB_OUTPUT
|
||||
;;
|
||||
'deb')
|
||||
BASE="/opt/ejabberd"
|
||||
echo "base=$BASE" >> $GITHUB_OUTPUT
|
||||
echo "conf=$BASE/conf" >> $GITHUB_OUTPUT
|
||||
echo "logs=$BASE/logs" >> $GITHUB_OUTPUT
|
||||
echo "ectl=sudo /opt/${{ inputs.rel_name_vsn }}/bin/ejabberdctl" >> $GITHUB_OUTPUT
|
||||
;;
|
||||
'run')
|
||||
BASE="$HOME/opt/ejabberd"
|
||||
echo "base=$BASE" >> $GITHUB_OUTPUT
|
||||
echo "conf=$BASE/conf" >> $GITHUB_OUTPUT
|
||||
echo "logs=$BASE/logs" >> $GITHUB_OUTPUT
|
||||
echo "ectl=$HOME/opt/${{ inputs.rel_name_vsn }}/bin/ejabberdctl" >> $GITHUB_OUTPUT
|
||||
;;
|
||||
esac
|
||||
|
||||
############################################################# Compile #####
|
||||
|
||||
- if: contains(inputs.do, 'compile')
|
||||
shell: sh
|
||||
run: |
|
||||
TOOL=${{ inputs.tool }}
|
||||
[ "${TOOL%3}" = "rebar" ] && TOOL="./$TOOL"
|
||||
./autogen.sh
|
||||
./configure --with-rebar=$TOOL \
|
||||
--prefix=/tmp/ejabberd \
|
||||
--enable-all ${{ inputs.configure }}
|
||||
sed -i 's|, syntax_tools||g' src/ejabberd.app.src.script
|
||||
REBAR_PROFILE=test make
|
||||
|
||||
############################################################## Deploy #####
|
||||
|
||||
- if: contains(inputs.do, 'deploy') &&
|
||||
inputs.for == 'prod' && inputs.tool == 'rebar'
|
||||
shell: sh
|
||||
run: |
|
||||
mkdir -p _build/prod && ln -s `pwd`/rel/ _build/prod/rel
|
||||
|
||||
- if: contains(inputs.do, 'deploy') &&
|
||||
inputs.for == 'dev' && inputs.tool == 'rebar'
|
||||
shell: sh
|
||||
run: |
|
||||
mkdir -p _build/dev && ln -s `pwd`/rel/ _build/dev/rel
|
||||
|
||||
- if: contains(inputs.do, 'deploy') &&
|
||||
(inputs.for == 'prod' ||
|
||||
inputs.for == 'dev' ||
|
||||
inputs.for == 'install')
|
||||
shell: sh
|
||||
run: |
|
||||
make ${{ inputs.for }}
|
||||
|
||||
- if: contains(inputs.do, 'deploy') &&
|
||||
inputs.for == 'deb'
|
||||
shell: sh
|
||||
run: |
|
||||
sudo dpkg -i $(ls -1 *.deb)
|
||||
|
||||
- if: contains(inputs.do, 'deploy') &&
|
||||
inputs.for == 'run'
|
||||
shell: sh
|
||||
run: |
|
||||
./$(ls -1 *.run)
|
||||
|
||||
################################################################ ACME #####
|
||||
|
||||
- if: contains(inputs.do, 'no_acme')
|
||||
shell: sh
|
||||
run: |
|
||||
sed -i 's/loglevel/acme:\n auto: false\nloglevel/g' \
|
||||
${{ steps.path.outputs.conf }}/ejabberd.yml
|
||||
|
||||
################################################################# TLS #####
|
||||
|
||||
- if: contains(inputs.do, 'no_tls') &&
|
||||
inputs.for == 'dev'
|
||||
shell: sh
|
||||
run: |
|
||||
sed -i 's/starttls_required: true/starttls_required: false/g' \
|
||||
${{ steps.path.outputs.conf }}/ejabberd.yml
|
||||
|
||||
############################################################### Start #####
|
||||
|
||||
- if: contains(inputs.do, 'start')
|
||||
shell: sh
|
||||
run: |
|
||||
${{ steps.path.outputs.ectl }} start
|
||||
${{ steps.path.outputs.ectl }} started
|
||||
|
||||
############################################################ Register #####
|
||||
|
||||
- if: contains(inputs.do, 'register')
|
||||
shell: sh
|
||||
run: |
|
||||
${{ steps.path.outputs.ectl }} \
|
||||
register ${{ inputs.username }} ${{ inputs.host }} s0mePass
|
||||
${{ steps.path.outputs.ectl }} \
|
||||
registered_users ${{ inputs.host }} >> registered.log
|
||||
grep -q '${{ inputs.username }}' registered.log
|
||||
|
||||
########################################################### UpdateSQL #####
|
||||
|
||||
- if: contains(inputs.do, 'update_sql')
|
||||
shell: sh
|
||||
run: |
|
||||
${{ steps.path.outputs.ectl }} \
|
||||
update_sql
|
||||
|
||||
################################################################ Stop #####
|
||||
|
||||
- if: contains(inputs.do, 'stop')
|
||||
shell: sh
|
||||
run: |
|
||||
${{ steps.path.outputs.ectl }} stop
|
||||
${{ steps.path.outputs.ectl }} stopped
|
||||
|
||||
############################################################### Check #####
|
||||
|
||||
- if: contains(inputs.do, 'check')
|
||||
shell: sh
|
||||
run: |
|
||||
grep -q 'is started' ${{ steps.path.outputs.logs }}/ejabberd.log
|
||||
grep -q 'is stopped' ${{ steps.path.outputs.logs }}/ejabberd.log
|
||||
test $(find ${{ steps.path.outputs.logs }}/ -empty -name error.log)
|
||||
|
||||
################################################################ Logs #####
|
||||
|
||||
- if: contains(inputs.do, 'logs') || failure()
|
||||
shell: sh
|
||||
run: |
|
||||
SUDO=sudo
|
||||
[ "${{ inputs.for }}" = "deb" ] || SUDO=""
|
||||
echo "::group::View ejabberd.log"
|
||||
$SUDO cat ${{ steps.path.outputs.logs }}/ejabberd.log
|
||||
echo "::endgroup::"
|
||||
echo "::group::View error.log"
|
||||
$SUDO cat ${{ steps.path.outputs.logs }}/error.log
|
||||
echo "::endgroup::"
|
||||
@@ -1,6 +1,6 @@
|
||||
#' Define default build variables
|
||||
ARG OTP_VSN='27.3.4.2'
|
||||
ARG ELIXIR_VSN='1.18.4'
|
||||
ARG OTP_VSN='28.4.1.0'
|
||||
ARG ELIXIR_VSN='1.19.5'
|
||||
ARG UID='9000'
|
||||
ARG USER='ejabberd'
|
||||
ARG HOME="opt/$USER"
|
||||
@@ -19,6 +19,7 @@ RUN go install -v \
|
||||
FROM docker.io/erlang:${OTP_VSN}-alpine AS ejabberd
|
||||
|
||||
RUN apk -U add --no-cache \
|
||||
ca-certificates \
|
||||
autoconf \
|
||||
automake \
|
||||
bash \
|
||||
@@ -32,6 +33,7 @@ RUN apk -U add --no-cache \
|
||||
libpng-dev \
|
||||
libwebp-dev \
|
||||
linux-pam-dev \
|
||||
npm \
|
||||
openssl-dev \
|
||||
sqlite-dev \
|
||||
yaml-dev \
|
||||
@@ -52,12 +54,13 @@ ARG BUILD_DIR
|
||||
COPY / $BUILD_DIR/
|
||||
|
||||
WORKDIR $BUILD_DIR
|
||||
|
||||
RUN mv .github/container/ejabberdctl.template . \
|
||||
&& mv .github/container/ejabberd.yml.example . \
|
||||
&& ./autogen.sh \
|
||||
&& ./configure --with-rebar=mix --enable-all \
|
||||
&& make deps \
|
||||
&& make rel
|
||||
&& make prod
|
||||
|
||||
WORKDIR /rootfs
|
||||
ARG VERSION
|
||||
@@ -165,11 +168,10 @@ RUN apk -U upgrade --available --no-cache \
|
||||
&& apk add --no-cache \
|
||||
$(cat /tmp/runDeps) \
|
||||
so:libcap.so.2 \
|
||||
so:libtdsodbc.so.0 \
|
||||
so:libtdsodbc.so \
|
||||
curl \
|
||||
tini \
|
||||
&& rm /tmp/runDeps \
|
||||
&& ln -fs /usr/lib/libtdsodbc.so.0 /usr/lib/libtdsodbc.so
|
||||
&& rm /tmp/runDeps
|
||||
|
||||
ARG USER
|
||||
ARG UID
|
||||
@@ -200,7 +202,7 @@ HEALTHCHECK \
|
||||
WORKDIR /$HOME
|
||||
USER $USER
|
||||
VOLUME ["/$HOME"]
|
||||
EXPOSE 1880 1883 4369-4399 5210 5222 5269 5280 5443
|
||||
EXPOSE 1880 1883 4369-4399 5210 5222 5269 5280 5443 5478 7777 50000-50099
|
||||
|
||||
ENTRYPOINT ["/sbin/tini","--","ejabberdctl"]
|
||||
CMD ["foreground"]
|
||||
|
||||
@@ -24,8 +24,11 @@ define_macro:
|
||||
PORT_HTTP: 5280
|
||||
PORT_BROWSER: 1880
|
||||
PORT_STUN: 5478
|
||||
PORT_TURN_MIN: 50000
|
||||
PORT_TURN_MAX: 50099
|
||||
PORT_MQTT: 1883
|
||||
PORT_PROXY65: 7777
|
||||
STARTTLS_REQUIRED: true
|
||||
|
||||
hosts:
|
||||
- HOST
|
||||
@@ -49,7 +52,7 @@ listen:
|
||||
max_stanza_size: 262144
|
||||
shaper: c2s_shaper
|
||||
access: c2s
|
||||
starttls_required: true
|
||||
starttls_required: STARTTLS_REQUIRED
|
||||
-
|
||||
port: PORT_C2S_TLS
|
||||
ip: "::"
|
||||
@@ -75,7 +78,7 @@ listen:
|
||||
/bosh: mod_bosh
|
||||
/captcha: ejabberd_captcha
|
||||
/upload: mod_http_upload
|
||||
/ws: ejabberd_http_ws
|
||||
/websocket: ejabberd_http_ws
|
||||
-
|
||||
port: PORT_HTTP
|
||||
ip: "::"
|
||||
@@ -102,6 +105,8 @@ listen:
|
||||
transport: udp
|
||||
module: ejabberd_stun
|
||||
use_turn: true
|
||||
turn_min_port: PORT_TURN_MIN
|
||||
turn_max_port: PORT_TURN_MAX
|
||||
## The server's public IPv4 address:
|
||||
# turn_ipv4_address: "203.0.113.3"
|
||||
## The server's public IPv6 address:
|
||||
@@ -151,7 +156,12 @@ api_permissions:
|
||||
from: ejabberd_web_admin
|
||||
who: admin
|
||||
what: "*"
|
||||
"admin access":
|
||||
"adhoc commands":
|
||||
from: mod_adhoc_api
|
||||
who: admin
|
||||
what: "*"
|
||||
"http access":
|
||||
from: mod_http_api
|
||||
who:
|
||||
access:
|
||||
allow:
|
||||
@@ -192,6 +202,7 @@ shaper_rules:
|
||||
|
||||
modules:
|
||||
mod_adhoc: {}
|
||||
mod_adhoc_api: {}
|
||||
mod_admin_extra: {}
|
||||
mod_announce:
|
||||
access: announce
|
||||
|
||||
@@ -67,6 +67,7 @@ done
|
||||
# shellcheck source=ejabberdctl.cfg.example
|
||||
[ -f "$EJABBERDCTL_CONFIG_PATH" ] && . "$EJABBERDCTL_CONFIG_PATH"
|
||||
[ -n "$ERLANG_NODE_ARG" ] && ERLANG_NODE="$ERLANG_NODE_ARG"
|
||||
[ "$ERLANG_NODE" = "${ERLANG_NODE%@*}" ] && ERLANG_NODE="$ERLANG_NODE@$(hostname -s)"
|
||||
[ "$ERLANG_NODE" = "${ERLANG_NODE%.*}" ] && S="-s"
|
||||
: "${SPOOL_DIR:="{{spool_dir}}"}"
|
||||
: "${EJABBERD_LOG_PATH:="$LOGS_DIR/ejabberd.log"}"
|
||||
@@ -121,6 +122,9 @@ export CONTRIB_MODULES_CONF_DIR
|
||||
export ERL_LIBS
|
||||
export SCRIPT_DIR
|
||||
|
||||
# Only required for Erlang/OTP 25:
|
||||
export ERL_FLAGS="$ERL_FLAGS -enable-feature maybe_expr"
|
||||
|
||||
set_dist_client()
|
||||
{
|
||||
[ -n "$ERL_DIST_PORT" ] && ERLANG_OPTS="$ERLANG_OPTS -dist_listen false"
|
||||
@@ -136,9 +140,19 @@ run_cmd()
|
||||
}
|
||||
exec_cmd()
|
||||
{
|
||||
case $EXEC_CMD in
|
||||
as_current_user) exec "$@" ;;
|
||||
as_install_user) su -s /bin/sh -c 'exec "$0" "$@"' "$INSTALLUSER" -- "$@" ;;
|
||||
case $EXEC_CMD,$(uname -s) in
|
||||
as_install_user,OpenBSD)
|
||||
su -s /bin/sh "$INSTALLUSER" -c 'exec "$0" "$@"' "$@"
|
||||
;;
|
||||
as_install_user,NetBSD)
|
||||
su "$INSTALLUSER" -c 'exec "$0" "$@"' -- "$@"
|
||||
;;
|
||||
as_install_user,*)
|
||||
su -s /bin/sh -c 'exec "$0" "$@"' "$INSTALLUSER" -- "$@"
|
||||
;;
|
||||
as_current_user,*)
|
||||
"$@"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
run_erl()
|
||||
@@ -313,7 +327,17 @@ check_start()
|
||||
{
|
||||
ECSIMAGE_DBPATH=$HOME/database/$ERLANG_NODE
|
||||
[ ! -d "$ECSIMAGE_DBPATH" ] && ln -s $HOME/database $HOME/database/$ERLANG_NODE
|
||||
[ -n "$ERL_DIST_PORT" ] && return
|
||||
[ -n "$ERL_DIST_PORT" ] && {
|
||||
netstat -nl | grep ":5210" >/dev/null && {
|
||||
echo "Error: The file ejabberdctl.cfg has configured ERL_DIST_PORT=$ERL_DIST_PORT"
|
||||
echo " but the port 5210 is already in use."
|
||||
echo " Stop that program or configure a different ERL_DIST_PORT"
|
||||
echo ""
|
||||
netstat -nlp | grep ":5210"
|
||||
echo ""
|
||||
}
|
||||
return
|
||||
}
|
||||
"$EPMD" -names 2>/dev/null | grep -q " ${ERLANG_NODE%@*} " && {
|
||||
pgrep -f "$ERLANG_NODE" >/dev/null && {
|
||||
echo "ERROR: The ejabberd node '$ERLANG_NODE' is already running."
|
||||
@@ -604,7 +628,8 @@ case $1 in
|
||||
-noinput -hidden \
|
||||
-eval 'net_kernel:connect_node('"'$PEER'"')' \
|
||||
-eval 'io:format("~p~n",[net_adm:ping('"'$PEER'"')])' \
|
||||
-s erlang halt -output text
|
||||
-eval 'halt(case net_adm:ping('"'$PEER'"') of pong -> 0; pang -> 1 end).' \
|
||||
-output text
|
||||
;;
|
||||
started)
|
||||
set_dist_client
|
||||
|
||||
@@ -4,7 +4,6 @@ on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- '.devcontainer/**'
|
||||
- 'examples/**'
|
||||
- 'lib/**'
|
||||
- 'man/**'
|
||||
- 'priv/**'
|
||||
@@ -12,168 +11,234 @@ on:
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- '.devcontainer/**'
|
||||
- 'examples/**'
|
||||
- 'lib/**'
|
||||
- 'man/**'
|
||||
- 'priv/**'
|
||||
- '**.md'
|
||||
|
||||
env:
|
||||
DEV: _build/dev/rel/ejabberd
|
||||
|
||||
jobs:
|
||||
|
||||
tests:
|
||||
name: Tests
|
||||
############################################################### Compile #####
|
||||
|
||||
compile:
|
||||
runs-on: ubuntu-24.04-arm
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
otp: ['25', '26', '27', '28']
|
||||
runs-on: ubuntu-24.04
|
||||
services:
|
||||
redis:
|
||||
image: public.ecr.aws/docker/library/redis
|
||||
ports:
|
||||
- 6379:6379
|
||||
otp: ['28']
|
||||
|
||||
steps:
|
||||
|
||||
- uses: actions/checkout@v5
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
- name: Test shell scripts
|
||||
if: matrix.otp == '27'
|
||||
run: |
|
||||
shellcheck test/ejabberd_SUITE_data/gencerts.sh
|
||||
shellcheck tools/captcha.sh
|
||||
shellcheck ejabberd.init.template
|
||||
shellcheck -x ejabberdctl.template
|
||||
|
||||
- name: Get specific Erlang/OTP
|
||||
uses: erlef/setup-beam@v1
|
||||
- uses: erlef/setup-beam@v1
|
||||
with:
|
||||
otp-version: ${{ matrix.otp }}
|
||||
|
||||
- name: Install MS SQL Server
|
||||
run: |
|
||||
docker run -d -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=ejabberd_Test1" \
|
||||
-v $(pwd)/test/docker/db/mssql/initdb/initdb_mssql.sql:/initdb_mssql.sql:ro \
|
||||
-v $(pwd)/sql/mssql.sql:/mssql.sql:ro \
|
||||
-v $(pwd)/sql/mssql.new.sql:/mssql.new.sql:ro \
|
||||
-p 1433:1433 --name ejabberd-mssql "mcr.microsoft.com/mssql/server:2019-latest"
|
||||
sleep 10
|
||||
- uses: awalsh128/cache-apt-pkgs-action@latest
|
||||
with:
|
||||
packages: libexpat1-dev libgd-dev libpam0g-dev
|
||||
libsqlite3-dev libwebp-dev libyaml-dev
|
||||
|
||||
- name: Prepare databases
|
||||
run: |
|
||||
docker exec ejabberd-mssql /opt/mssql-tools18/bin/sqlcmd -C -U SA -P ejabberd_Test1 -S localhost -i /initdb_mssql.sql
|
||||
docker exec ejabberd-mssql /opt/mssql-tools18/bin/sqlcmd -C -U SA -P ejabberd_Test1 -S localhost -d ejabberd_test -i /mssql.sql
|
||||
sudo systemctl start mysql.service
|
||||
sudo systemctl start postgresql.service
|
||||
mysql -u root -proot -e "CREATE DATABASE ejabberd_test;"
|
||||
mysql -u root -proot -e "CREATE USER 'ejabberd_test'@'localhost'
|
||||
IDENTIFIED BY 'ejabberd_test';"
|
||||
mysql -u root -proot -e "GRANT ALL ON ejabberd_test.*
|
||||
TO 'ejabberd_test'@'localhost';"
|
||||
pg_isready
|
||||
sudo -u postgres psql -c "CREATE DATABASE ejabberd_test;"
|
||||
sudo -u postgres psql -c "CREATE USER ejabberd_test
|
||||
WITH PASSWORD 'ejabberd_test';"
|
||||
sudo -u postgres psql -c "GRANT ALL PRIVILEGES
|
||||
ON DATABASE ejabberd_test TO ejabberd_test;"
|
||||
sudo -u postgres psql -c "GRANT ALL ON SCHEMA public TO ejabberd_test;"
|
||||
sudo -u postgres psql -c "ALTER DATABASE ejabberd_test OWNER TO ejabberd_test;"
|
||||
sudo -u postgres psql ejabberd_test -c "GRANT ALL PRIVILEGES ON ALL
|
||||
TABLES IN SCHEMA public
|
||||
TO ejabberd_test;"
|
||||
sudo -u postgres psql ejabberd_test -c "GRANT ALL PRIVILEGES ON ALL
|
||||
SEQUENCES IN SCHEMA public
|
||||
TO ejabberd_test;"
|
||||
|
||||
- name: Prepare libraries
|
||||
run: |
|
||||
sudo apt-get -qq update
|
||||
sudo apt-get -y purge libgd3 nginx
|
||||
sudo apt-get -qq install libexpat1-dev libgd-dev libpam0g-dev \
|
||||
libsqlite3-dev libwebp-dev libyaml-dev
|
||||
|
||||
- name: Remove syntax_tools from release
|
||||
run: sed -i 's|, syntax_tools||g' src/ejabberd.app.src.script
|
||||
|
||||
- name: Cache Hex.pm
|
||||
uses: actions/cache@v4
|
||||
- name: Cache rebar3
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: |
|
||||
~/.cache/rebar3/
|
||||
key: ${{matrix.otp}}-${{hashFiles('rebar.config')}}
|
||||
_build/default/lib/
|
||||
key: ci-${{ matrix.otp }}-${{hashFiles('rebar.*')}}
|
||||
|
||||
- name: Compile
|
||||
run: |
|
||||
./autogen.sh
|
||||
./configure --with-rebar=./rebar3 \
|
||||
--prefix=/tmp/ejabberd \
|
||||
--enable-all \
|
||||
--disable-elixir \
|
||||
--disable-mssql \
|
||||
--disable-odbc
|
||||
make
|
||||
uses: ./.github/actions/manage-ejabberd
|
||||
with:
|
||||
for: prod
|
||||
do: compile
|
||||
tool: rebar3
|
||||
configure: --disable-elixir
|
||||
|
||||
- name: Compress compiled.tar
|
||||
run: |
|
||||
tar -cvf /tmp/compiled.tar .
|
||||
|
||||
- uses: actions/upload-artifact@v6
|
||||
with:
|
||||
name: compiled-${{ matrix.otp }}
|
||||
path: /tmp/compiled.tar
|
||||
retention-days: 1
|
||||
|
||||
########################################################## Static Tests #####
|
||||
|
||||
static:
|
||||
needs: compile
|
||||
runs-on: ubuntu-24.04-arm
|
||||
strategy:
|
||||
matrix:
|
||||
otp: ['28']
|
||||
|
||||
steps:
|
||||
|
||||
- uses: erlef/setup-beam@v1
|
||||
with:
|
||||
otp-version: ${{ matrix.otp }}
|
||||
|
||||
- uses: actions/download-artifact@v7
|
||||
with:
|
||||
name: compiled-${{ matrix.otp }}
|
||||
- run: tar -xf compiled.tar
|
||||
|
||||
- name: Test shell scripts
|
||||
run: |
|
||||
shellcheck ejabberd.init.template
|
||||
shellcheck -x ejabberdctl.template
|
||||
shellcheck .vscode/relive.sh
|
||||
shellcheck rel/setup-dev.sh
|
||||
shellcheck rel/setup-relive.sh
|
||||
shellcheck test/ejabberd_SUITE_data/gencerts.sh
|
||||
shellcheck tools/captcha.sh
|
||||
shellcheck tools/emacs-indent.sh
|
||||
shellcheck tools/generate-doap.sh
|
||||
shellcheck tools/prepare-tr.sh
|
||||
shellcheck tools/rebar3-format.sh
|
||||
|
||||
- run: make install -s
|
||||
- run: make hooks
|
||||
- run: make options
|
||||
- run: make xref
|
||||
- run: make dialyzer
|
||||
- run: make test-eunit
|
||||
- run: make testeunit
|
||||
- run: make elvis
|
||||
if: matrix.otp >= '26'
|
||||
if: matrix.otp > '25'
|
||||
|
||||
- name: Check Production Release
|
||||
run: |
|
||||
make rel
|
||||
RE=_build/prod/rel/ejabberd
|
||||
$RE/bin/ejabberdctl start
|
||||
$RE/bin/ejabberdctl started
|
||||
$RE/bin/ejabberdctl stop
|
||||
$RE/bin/ejabberdctl stopped
|
||||
cat $RE/logs/ejabberd.log
|
||||
grep -q "is stopped in" $RE/logs/ejabberd.log
|
||||
- run: make install -s
|
||||
|
||||
- name: Start Development Release
|
||||
run: |
|
||||
make dev
|
||||
RE=_build/dev/rel/ejabberd
|
||||
sed -i 's/starttls_required: true/starttls_required: false/g' $RE/conf/ejabberd.yml
|
||||
$RE/bin/ejabberdctl start
|
||||
$RE/bin/ejabberdctl started
|
||||
$RE/bin/ejabberdctl register admin localhost admin
|
||||
grep -q "is started in" $RE/logs/ejabberd.log
|
||||
######################################################### Dynamic Tests #####
|
||||
|
||||
- name: Run XMPP Interoperability Tests against CI server.
|
||||
if: matrix.otp == '27'
|
||||
dynamic:
|
||||
needs: compile
|
||||
runs-on: ubuntu-24.04-arm
|
||||
strategy:
|
||||
matrix:
|
||||
otp: ['28']
|
||||
|
||||
steps:
|
||||
|
||||
- uses: erlef/setup-beam@v1
|
||||
with:
|
||||
otp-version: ${{ matrix.otp }}
|
||||
|
||||
- uses: awalsh128/cache-apt-pkgs-action@latest
|
||||
if: matrix.otp < '28'
|
||||
with:
|
||||
packages: libexpat1-dev libgd-dev libpam0g-dev
|
||||
libsqlite3-dev libwebp-dev libyaml-dev
|
||||
|
||||
- uses: actions/download-artifact@v7
|
||||
with:
|
||||
name: compiled-${{ matrix.otp }}
|
||||
- run: tar -xf compiled.tar
|
||||
|
||||
- name: Check production release
|
||||
uses: ./.github/actions/manage-ejabberd
|
||||
with:
|
||||
for: prod
|
||||
do: deploy, start, stop, check
|
||||
|
||||
- name: Start development release
|
||||
uses: ./.github/actions/manage-ejabberd
|
||||
with:
|
||||
for: dev
|
||||
do: deploy, no_tls, start, register
|
||||
username: user123
|
||||
|
||||
- name: Run XMPP Interoperability Tests against CI server
|
||||
if: matrix.otp == '28'
|
||||
continue-on-error: true
|
||||
uses: XMPP-Interop-Testing/xmpp-interop-tests-action@v1.6.0
|
||||
uses: XMPP-Interop-Testing/xmpp-interop-tests-action@v1.7.2
|
||||
with:
|
||||
domain: 'localhost'
|
||||
adminAccountUsername: 'admin'
|
||||
adminAccountPassword: 'admin'
|
||||
disabledSpecifications: RFC6121,XEP-0030,XEP-0045,XEP-0054,XEP-0060,XEP-0080,XEP-0115,XEP-0118,XEP-0215,XEP-0347,XEP-0363,XEP-0384
|
||||
adminAccountUsername: 'user123'
|
||||
adminAccountPassword: 's0mePass'
|
||||
disabledSpecifications: RFC6121,XEP-0030,XEP-0045,XEP-0054,XEP-0060,
|
||||
XEP-0080,XEP-0115,XEP-0118,XEP-0215,XEP-0347,
|
||||
XEP-0363,XEP-0384,XEP-0421
|
||||
|
||||
- name: Stop Development Release
|
||||
- name: Stop development release
|
||||
if: always()
|
||||
uses: ./.github/actions/manage-ejabberd
|
||||
with:
|
||||
for: dev
|
||||
do: stop, check
|
||||
|
||||
- name: View production logs
|
||||
if: always()
|
||||
uses: ./.github/actions/manage-ejabberd
|
||||
with:
|
||||
for: prod
|
||||
do: logs
|
||||
|
||||
- name: View development logs
|
||||
if: always()
|
||||
uses: ./.github/actions/manage-ejabberd
|
||||
with:
|
||||
for: dev
|
||||
do: logs
|
||||
|
||||
##################################################### Common Test Suite #####
|
||||
|
||||
ct:
|
||||
needs: compile
|
||||
runs-on: ubuntu-24.04-arm
|
||||
strategy:
|
||||
matrix:
|
||||
otp: ['28']
|
||||
backend: [agnostic, extauth, ldap, mnesia, mysql, pgsql, redis, sqlite]
|
||||
schema: [single, multi]
|
||||
exclude:
|
||||
- backend: agnostic
|
||||
schema: single
|
||||
- backend: extauth
|
||||
schema: single
|
||||
- backend: ldap
|
||||
schema: single
|
||||
- backend: mnesia
|
||||
schema: single
|
||||
- backend: redis
|
||||
schema: single
|
||||
|
||||
steps:
|
||||
|
||||
- uses: erlef/setup-beam@v1
|
||||
with:
|
||||
otp-version: ${{ matrix.otp }}
|
||||
|
||||
- uses: actions/download-artifact@v7
|
||||
with:
|
||||
name: compiled-${{ matrix.otp }}
|
||||
- run: tar -xf compiled.tar
|
||||
|
||||
- name: Prepare database
|
||||
uses: ./.github/actions/manage-database
|
||||
with:
|
||||
for: ${{ matrix.backend }}
|
||||
do: install, start, user, create
|
||||
|
||||
- name: Setup multihost SQL schema
|
||||
if: matrix.schema == 'multi'
|
||||
run: |
|
||||
RE=_build/dev/rel/ejabberd
|
||||
$RE/bin/ejabberdctl stop
|
||||
$RE/bin/ejabberdctl stopped
|
||||
cat $RE/logs/ejabberd.log
|
||||
grep -q "is stopped in" $RE/logs/ejabberd.log
|
||||
sed -i 's|multihost_schema, false|multihost_schema, true|g' \
|
||||
test/suite.erl
|
||||
|
||||
- name: Run tests
|
||||
id: ct
|
||||
run: CT_BACKENDS=${{ matrix.backend }} make test
|
||||
|
||||
- name: Send to coveralls
|
||||
continue-on-error: true
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
(cd priv && ln -sf ../sql)
|
||||
sed -i -e 's/ct:pal/ct:log/' test/suite.erl
|
||||
COMMIT=`echo $GITHUB_SHA | cut -c 1-7`
|
||||
DATE=`date +%s`
|
||||
REF_NAME=`echo $GITHUB_REF_NAME | tr "/" "_"`
|
||||
NODENAME=$DATE@$GITHUB_RUN_NUMBER-$GITHUB_ACTOR-$REF_NAME-$COMMIT
|
||||
LABEL=`git show -s --format=%s | cut -c 1-30`
|
||||
./rebar3 ct --name $NODENAME --label "$LABEL"
|
||||
./rebar3 cover
|
||||
DIAGNOSTIC=1 ./rebar3 as test coveralls send
|
||||
|
||||
- name: Check results
|
||||
if: always() && (steps.ct.outcome != 'skipped')
|
||||
@@ -185,20 +250,44 @@ jobs:
|
||||
grep -q 'TEST COMPLETE,.* 0 failed' logs/suite.log
|
||||
test $(find logs/ -empty -name error.log)
|
||||
|
||||
- name: View logs failures
|
||||
if: failure() && steps.ctresults.outcome == 'failure'
|
||||
- name: View logs
|
||||
if: always()
|
||||
run: |
|
||||
echo "::group::ejabberd.log"
|
||||
find logs/ -name ejabberd.log -exec cat '{}' ';'
|
||||
echo "::endgroup::"
|
||||
echo "::group::error.log"
|
||||
find logs/ -name error.log -exec cat '{}' ';'
|
||||
echo "::endgroup::"
|
||||
echo "::group::exunit.log"
|
||||
find logs/ -name exunit.log -exec cat '{}' ';'
|
||||
echo "::endgroup::"
|
||||
echo "::group::suite.log (only failures)"
|
||||
cat logs/suite.log | awk \
|
||||
'BEGIN{RS="\n=case";FS="\n"} /=result\s*failed/ {print "=case" $0}'
|
||||
find logs/ -name error.log -exec cat '{}' ';'
|
||||
find logs/ -name exunit.log -exec cat '{}' ';'
|
||||
echo "::endgroup::"
|
||||
echo "::group::suite.log (complete)"
|
||||
cat logs/suite.log
|
||||
echo "::endgroup::"
|
||||
|
||||
- name: Send to coveralls
|
||||
if: matrix.otp == '27'
|
||||
- name: Upload CT logs
|
||||
if: failure()
|
||||
uses: actions/upload-artifact@v6
|
||||
with:
|
||||
name: ct-logs-${{ matrix.otp }}-${{ matrix.backend }}-${{ matrix.schema }}
|
||||
path: _build/test/logs
|
||||
retention-days: 14
|
||||
|
||||
############################################################# Coveralls #####
|
||||
|
||||
cover:
|
||||
needs: ct
|
||||
runs-on: ubuntu-24.04-arm
|
||||
steps:
|
||||
- name: Finish parallel upload to coveralls
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
DIAGNOSTIC=1 ./rebar3 as test coveralls send
|
||||
curl -v -k https://coveralls.io/webhook \
|
||||
--header "Content-Type: application/json" \
|
||||
--data '{"repo_name":"$GITHUB_REPOSITORY",
|
||||
@@ -206,96 +295,123 @@ jobs:
|
||||
"payload":{"build_num":$GITHUB_RUN_ID,
|
||||
"status":"done"}}'
|
||||
|
||||
- name: Check for changes to trigger schema upgrade test
|
||||
uses: dorny/paths-filter@v3
|
||||
id: filter
|
||||
################################################################ Schema #####
|
||||
|
||||
schema:
|
||||
needs: compile
|
||||
runs-on: ubuntu-24.04-arm
|
||||
strategy:
|
||||
matrix:
|
||||
otp: ['28']
|
||||
|
||||
steps:
|
||||
|
||||
- uses: erlef/setup-beam@v1
|
||||
with:
|
||||
filters: |
|
||||
sql:
|
||||
- 'sql/**'
|
||||
- 'src/mod_admin_update_sql.erl'
|
||||
otp-version: ${{ matrix.otp }}
|
||||
|
||||
- name: Prepare for schema upgrade test
|
||||
id: prepupgradetest
|
||||
if: ${{ steps.filter.outputs.sql == 'true' }}
|
||||
run: |
|
||||
[[ -d logs ]] && rm -rf logs
|
||||
[[ -d _build/test/logs ]] && rm -rf _build/test/logs || true
|
||||
sed -i 's|update_sql, false|update_sql, true|g' test/suite.erl
|
||||
- name: Run DB tests on upgraded schema (mssql, mysql, pgsql)
|
||||
run: CT_BACKENDS=mssql,mysql,pgsql make test
|
||||
if: always() && steps.prepupgradetest.outcome != 'skipped'
|
||||
id: ctupgradedschema
|
||||
- name: Check results
|
||||
if: always() && steps.ctupgradedschema.outcome != 'skipped'
|
||||
run: |
|
||||
[[ -d _build ]] && ln -s _build/test/logs/last/ logs || true
|
||||
ln `find logs/ -name suite.log` logs/suite.log
|
||||
grep 'TEST COMPLETE' logs/suite.log
|
||||
grep -q 'TEST COMPLETE,.* 0 failed' logs/suite.log
|
||||
test $(find logs/ -empty -name error.log)
|
||||
- name: View logs failures
|
||||
if: failure() && steps.ctupgradedschema.outcome != 'skipped'
|
||||
run: |
|
||||
cat logs/suite.log | awk \
|
||||
'BEGIN{RS="\n=case";FS="\n"} /=result\s*failed/ {print "=case" $0}'
|
||||
find logs/ -name error.log -exec cat '{}' ';'
|
||||
find logs/ -name exunit.log -exec cat '{}' ';'
|
||||
|
||||
- name: Prepare new schema
|
||||
run: |
|
||||
[[ -d logs ]] && rm -rf logs
|
||||
[[ -d _build/test/logs ]] && rm -rf _build/test/logs || true
|
||||
docker exec ejabberd-mssql /opt/mssql-tools18/bin/sqlcmd -C -U SA -P ejabberd_Test1 -S localhost -Q "drop database [ejabberd_test];"
|
||||
docker exec ejabberd-mssql /opt/mssql-tools18/bin/sqlcmd -C -U SA -P ejabberd_Test1 -S localhost -Q "drop login [ejabberd_test];"
|
||||
mysql -u root -proot -e "DROP DATABASE ejabberd_test;"
|
||||
sudo -u postgres psql -c "DROP DATABASE ejabberd_test;"
|
||||
docker exec ejabberd-mssql /opt/mssql-tools18/bin/sqlcmd -C -U SA -P ejabberd_Test1 -S localhost -i /initdb_mssql.sql
|
||||
docker exec ejabberd-mssql /opt/mssql-tools18/bin/sqlcmd -C -U SA -P ejabberd_Test1 -S localhost -d ejabberd_test -i /mssql.new.sql
|
||||
mysql -u root -proot -e "CREATE DATABASE ejabberd_test;"
|
||||
mysql -u root -proot -e "GRANT ALL ON ejabberd_test.*
|
||||
TO 'ejabberd_test'@'localhost';"
|
||||
sudo -u postgres psql -c "CREATE DATABASE ejabberd_test;"
|
||||
sudo -u postgres psql -c "GRANT ALL PRIVILEGES
|
||||
ON DATABASE ejabberd_test TO ejabberd_test;"
|
||||
sudo -u postgres psql -c "GRANT ALL ON SCHEMA public TO ejabberd_test;"
|
||||
sudo -u postgres psql -c "ALTER DATABASE ejabberd_test OWNER TO ejabberd_test;"
|
||||
sudo -u postgres psql ejabberd_test -c "GRANT ALL PRIVILEGES ON ALL
|
||||
TABLES IN SCHEMA public
|
||||
TO ejabberd_test;"
|
||||
sudo -u postgres psql ejabberd_test -c "GRANT ALL PRIVILEGES ON ALL
|
||||
SEQUENCES IN SCHEMA public
|
||||
TO ejabberd_test;"
|
||||
sed -i 's|new_schema, false|new_schema, true|g' test/suite.erl
|
||||
- name: Run DB tests on new schema (mssql, mysql, pgsql)
|
||||
run: CT_BACKENDS=mssql,mysql,pgsql make test
|
||||
id: ctnewschema
|
||||
- name: Check results
|
||||
if: always() && steps.ctnewschema.outcome != 'skipped'
|
||||
run: |
|
||||
[[ -d _build ]] && ln -s _build/test/logs/last/ logs || true
|
||||
ln `find logs/ -name suite.log` logs/suite.log
|
||||
grep 'TEST COMPLETE' logs/suite.log
|
||||
grep -q 'TEST COMPLETE,.* 0 failed' logs/suite.log
|
||||
test $(find logs/ -empty -name error.log)
|
||||
- name: View logs failures
|
||||
if: failure() && steps.ctnewschema.outcome != 'skipped'
|
||||
run: |
|
||||
cat logs/suite.log | awk \
|
||||
'BEGIN{RS="\n=case";FS="\n"} /=result\s*failed/ {print "=case" $0}'
|
||||
find logs/ -name error.log -exec cat '{}' ';'
|
||||
find logs/ -name exunit.log -exec cat '{}' ';'
|
||||
|
||||
- name: Upload CT logs
|
||||
if: failure()
|
||||
uses: actions/upload-artifact@v4
|
||||
- uses: actions/download-artifact@v7
|
||||
with:
|
||||
name: ejabberd-ct-logs-${{matrix.otp}}
|
||||
#
|
||||
# Appending the wildcard character ("*") is a trick to make
|
||||
# "ejabberd-packages" the root directory of the uploaded ZIP file:
|
||||
#
|
||||
# https://github.com/actions/upload-artifact#upload-using-multiple-paths-and-exclusions
|
||||
#
|
||||
path: _build/test/logs
|
||||
retention-days: 14
|
||||
name: compiled-${{ matrix.otp }}
|
||||
- run: tar -xf compiled.tar
|
||||
|
||||
###################################### multi-changed ##
|
||||
|
||||
- name: Prepare databases
|
||||
uses: ./.github/actions/manage-database
|
||||
with:
|
||||
for: mysql, pgsql
|
||||
do: install, start, user, create
|
||||
|
||||
- name: Prepare configuration
|
||||
run: |
|
||||
CT_BACKENDS=mysql,pgsql ./rebar3 ct \
|
||||
--suite=test/ejabberd_SUITE --group=configtest_single
|
||||
make dev
|
||||
cp test/ejabberd_SUITE_data/ejabberd.yml ${{ env.DEV }}/conf/
|
||||
cp _build/test/logs/last/*.yml ${{ env.DEV }}/database/
|
||||
echo "define_macro: [CONFIGTEST_CONFIG: {modules: {mod_muc: {}}}]" \
|
||||
> ${{ env.DEV }}/database/configtest.yml
|
||||
cp _build/test/logs/last/*.pem ${{ env.DEV }}/conf/
|
||||
cp _build/test/logs/last/*.pem ${{ env.DEV }}/database/
|
||||
|
||||
- name: Run ejabberd
|
||||
uses: ./.github/actions/manage-ejabberd
|
||||
with:
|
||||
for: dev
|
||||
do: start, update_sql, stop, check, logs
|
||||
username: user2
|
||||
|
||||
- name: Dump multihost databases
|
||||
uses: ./.github/actions/manage-database
|
||||
with:
|
||||
for: mysql, pgsql
|
||||
do: dump
|
||||
dump-suffix: multi-changed
|
||||
|
||||
######################################### multi-auto ##
|
||||
|
||||
- name: Prepare databases
|
||||
uses: ./.github/actions/manage-database
|
||||
with:
|
||||
for: mysql, pgsql
|
||||
do: drop, create
|
||||
|
||||
- name: Configure multihost schema
|
||||
run: |
|
||||
sed -i 's|MULTIHOST_SCHEMA|true|g' ${{ env.DEV }}/conf/ejabberd.yml
|
||||
|
||||
- name: Run ejabberd for multihost
|
||||
uses: ./.github/actions/manage-ejabberd
|
||||
with:
|
||||
for: dev
|
||||
do: start, stop, check, logs
|
||||
username: user2
|
||||
|
||||
- name: Dump multihost databases
|
||||
uses: ./.github/actions/manage-database
|
||||
with:
|
||||
for: mysql, pgsql
|
||||
do: dump
|
||||
dump-suffix: multi-auto
|
||||
|
||||
############################################ compare ##
|
||||
|
||||
- name: View SQL schemas (mysql)
|
||||
run: |
|
||||
perl test/ejabberd_SUITE_data/sql_sort.pl \
|
||||
<mysql-multi-auto.sql >mysql-multi2.sql
|
||||
perl test/ejabberd_SUITE_data/sql_sort.pl \
|
||||
<mysql-multi-changed.sql >mysql-changed2.sql
|
||||
echo "::group::differences multi-auto > multi-changed"
|
||||
diff -u mysql-multi2.sql mysql-changed2.sql || echo ok
|
||||
echo "::endgroup::"
|
||||
echo "::group::multi-auto.sql"
|
||||
cat mysql-multi-auto.sql
|
||||
echo "::endgroup::"
|
||||
echo "::group::multi-changed.sql"
|
||||
cat mysql-multi-changed.sql
|
||||
echo "::endgroup::"
|
||||
|
||||
- name: View SQL schemas (pgsql)
|
||||
run: |
|
||||
perl test/ejabberd_SUITE_data/sql_sort.pl \
|
||||
<pgsql-multi-auto.sql >pgsql-multi2.sql
|
||||
perl test/ejabberd_SUITE_data/sql_sort.pl \
|
||||
<pgsql-multi-changed.sql >pgsql-changed2.sql
|
||||
echo "::group::differences (multi-auto > multi-changed)"
|
||||
diff -u pgsql-multi2.sql pgsql-changed2.sql || echo ok
|
||||
echo "::endgroup::"
|
||||
echo "::group::multi-auto.sql"
|
||||
cat pgsql-multi-auto.sql
|
||||
echo "::endgroup::"
|
||||
echo "::group::multi-changed.sql"
|
||||
cat pgsql-multi-changed.sql
|
||||
echo "::endgroup::"
|
||||
|
||||
- name: View ejabberd logs
|
||||
if: always()
|
||||
uses: ./.github/actions/manage-ejabberd
|
||||
with:
|
||||
for: dev
|
||||
do: logs
|
||||
|
||||
@@ -4,7 +4,6 @@ on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- '.devcontainer/**'
|
||||
- 'examples/**'
|
||||
- 'lib/**'
|
||||
- 'man/**'
|
||||
- 'priv/**'
|
||||
@@ -15,25 +14,32 @@ env:
|
||||
IMAGE_NAME: ${{ github.repository }}
|
||||
|
||||
jobs:
|
||||
container:
|
||||
name: Container
|
||||
runs-on: ubuntu-22.04
|
||||
|
||||
build:
|
||||
runs-on: ubuntu-24.04${{ matrix.suffix }}
|
||||
strategy:
|
||||
matrix:
|
||||
platform: [amd64, arm64]
|
||||
include:
|
||||
- platform: amd64
|
||||
suffix:
|
||||
- platform: arm64
|
||||
suffix: -arm
|
||||
permissions:
|
||||
packages: write
|
||||
steps:
|
||||
- name: Check out repository code
|
||||
uses: actions/checkout@v5
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Checkout ejabberd-contrib
|
||||
uses: actions/checkout@v5
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
repository: processone/ejabberd-contrib
|
||||
path: .ejabberd-modules/sources/ejabberd-contrib
|
||||
|
||||
- name: Log in to the Container registry
|
||||
uses: docker/login-action@v3
|
||||
- uses: docker/login-action@v3
|
||||
with:
|
||||
registry: ${{ env.REGISTRY }}
|
||||
username: ${{ github.actor }}
|
||||
@@ -43,24 +49,19 @@ jobs:
|
||||
id: gitdescribe
|
||||
run: echo "ver=$(git describe --tags)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Extract metadata (tags, labels) for Docker
|
||||
- uses: docker/metadata-action@v5
|
||||
id: meta
|
||||
uses: docker/metadata-action@v5
|
||||
with:
|
||||
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
||||
flavor: suffix=--${{ matrix.platform }}
|
||||
labels: |
|
||||
org.opencontainers.image.revision=${{ steps.gitdescribe.outputs.ver }}
|
||||
org.opencontainers.image.licenses=GPL-2.0
|
||||
org.opencontainers.image.vendor=ProcessOne
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3
|
||||
- uses: docker/setup-buildx-action@v3
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
- name: Build and push Docker image
|
||||
uses: docker/build-push-action@v6
|
||||
- uses: docker/build-push-action@v6
|
||||
with:
|
||||
build-args: |
|
||||
VERSION=${{ steps.gitdescribe.outputs.ver }}
|
||||
@@ -69,6 +70,50 @@ jobs:
|
||||
context: .
|
||||
file: .github/container/Dockerfile
|
||||
labels: ${{ steps.meta.outputs.labels }}
|
||||
platforms: linux/amd64,linux/arm64
|
||||
platforms: linux/${{ matrix.platform }}
|
||||
push: true
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
|
||||
merge:
|
||||
needs: [build]
|
||||
runs-on: ubuntu-24.04
|
||||
outputs:
|
||||
image-uri: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}@${{ steps.merge.outputs.digest }}
|
||||
steps:
|
||||
- uses: docker/login-action@v3
|
||||
with:
|
||||
registry: ${{ env.REGISTRY }}
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- uses: docker/metadata-action@v5
|
||||
id: meta-amd
|
||||
with:
|
||||
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
||||
flavor: suffix=--amd64
|
||||
- uses: docker/metadata-action@v5
|
||||
id: meta-arm
|
||||
with:
|
||||
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
||||
flavor: suffix=--arm64
|
||||
- uses: docker/metadata-action@v5
|
||||
id: meta-result
|
||||
with:
|
||||
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
||||
|
||||
- uses: int128/docker-manifest-create-action@v2
|
||||
id: merge
|
||||
with:
|
||||
index-annotations: ${{ steps.metadata.outputs.labels }}
|
||||
tags: ${{ steps.meta-result.outputs.tags }}
|
||||
sources: |
|
||||
${{ steps.meta-amd.outputs.tags }}
|
||||
${{ steps.meta-arm.outputs.tags }}
|
||||
#- uses: dataaxiom/ghcr-cleanup-action@v1
|
||||
# with:
|
||||
# dry-run: true
|
||||
# delete-tags: '*--a??64'
|
||||
# delete-untagged: true
|
||||
# delete-ghost-images: true
|
||||
# delete-partial-images: true
|
||||
# delete-orphaned-images: true
|
||||
|
||||
@@ -4,7 +4,6 @@ on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- '.devcontainer/**'
|
||||
- 'examples/**'
|
||||
- 'lib/**'
|
||||
- 'man/**'
|
||||
- 'priv/**'
|
||||
@@ -12,7 +11,6 @@ on:
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- '.devcontainer/**'
|
||||
- 'examples/**'
|
||||
- 'lib/**'
|
||||
- 'man/**'
|
||||
- 'priv/**'
|
||||
@@ -20,14 +18,25 @@ on:
|
||||
|
||||
jobs:
|
||||
binaries:
|
||||
name: Binaries
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-22.04${{ matrix.suffix }}
|
||||
strategy:
|
||||
matrix:
|
||||
platform: [amd64, arm64]
|
||||
include:
|
||||
- platform: amd64
|
||||
suffix:
|
||||
- platform: arm64
|
||||
suffix: -arm
|
||||
steps:
|
||||
- name: Check out repository code
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Cache build directory
|
||||
uses: actions/cache@v4
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: ~/build/
|
||||
key: ${{runner.os}}-ct-ng-1.27.0
|
||||
key: installers-ubuntu-22.04-${{runner.arch}}-${{hashFiles('tools/make-binaries')}}
|
||||
- name: Install prerequisites
|
||||
run: |
|
||||
sudo apt-get -qq update
|
||||
@@ -40,24 +49,40 @@ jobs:
|
||||
run: |
|
||||
gem install --no-document --user-install fpm
|
||||
echo $HOME/.local/share/gem/ruby/*/bin >> $GITHUB_PATH
|
||||
- name: Check out repository code
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Build binary archives
|
||||
run: CHECK_DEPS=false tools/make-binaries
|
||||
- name: Build DEB and RPM packages
|
||||
run: tools/make-packages
|
||||
- name: Build installers
|
||||
run: tools/make-installers
|
||||
|
||||
- run: echo "rel_name_vsn=$(ls *.run | sed 's/-1-linux.*//g')" >> $GITHUB_OUTPUT
|
||||
id: vsn
|
||||
- name: Test RUN
|
||||
uses: ./.github/actions/manage-ejabberd
|
||||
with:
|
||||
for: run
|
||||
do: deploy, no_acme, start, register, stop, check, logs
|
||||
username: user1
|
||||
host: $(hostname --fqdn)
|
||||
rel_name_vsn: ${{ steps.vsn.outputs.rel_name_vsn }}
|
||||
- name: Test DEB
|
||||
uses: ./.github/actions/manage-ejabberd
|
||||
with:
|
||||
for: deb
|
||||
do: deploy, register, stop, logs
|
||||
username: user1
|
||||
host: $(hostname --fqdn)
|
||||
rel_name_vsn: ${{ steps.vsn.outputs.rel_name_vsn }}
|
||||
|
||||
- name: Collect packages
|
||||
run: |
|
||||
mkdir ejabberd-packages
|
||||
mv ejabberd_*.deb ejabberd-*.rpm ejabberd-*.run ejabberd-packages
|
||||
- name: Upload packages
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v6
|
||||
with:
|
||||
name: ejabberd-packages
|
||||
name: ejabberd-packages-${{ matrix.platform }}
|
||||
#
|
||||
# Appending the wildcard character ("*") is a trick to make
|
||||
# "ejabberd-packages" the root directory of the uploaded ZIP file:
|
||||
@@ -74,9 +99,9 @@ jobs:
|
||||
if: github.ref_type == 'tag'
|
||||
steps:
|
||||
- name: Download packages
|
||||
uses: actions/download-artifact@v5
|
||||
uses: actions/download-artifact@v7
|
||||
with:
|
||||
name: ejabberd-packages
|
||||
merge-multiple: true
|
||||
- name: Draft Release
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
|
||||
@@ -26,299 +26,184 @@ on:
|
||||
|
||||
jobs:
|
||||
|
||||
################################################################ Rebars #####
|
||||
|
||||
rebars:
|
||||
name: Rebars
|
||||
runs-on: ubuntu-24.04-arm
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
otp: ['24', '25', '26', '27', '28']
|
||||
otp: ['25', '26', '27', '28', '29']
|
||||
rebar: ['rebar', 'rebar3']
|
||||
exclude:
|
||||
- otp: '24'
|
||||
rebar: 'rebar'
|
||||
- otp: '27'
|
||||
rebar: 'rebar'
|
||||
- otp: '28'
|
||||
rebar: 'rebar'
|
||||
runs-on: ubuntu-24.04
|
||||
- otp: '29'
|
||||
rebar: 'rebar'
|
||||
container:
|
||||
image: public.ecr.aws/docker/library/erlang:${{ matrix.otp }}
|
||||
|
||||
steps:
|
||||
|
||||
- uses: actions/checkout@v5
|
||||
|
||||
- name: Get old compatible Rebar binaries
|
||||
if: matrix.otp < 24
|
||||
run: |
|
||||
rm rebar
|
||||
rm rebar3
|
||||
wget https://github.com/processone/ejabberd/raw/21.12/rebar
|
||||
wget https://github.com/processone/ejabberd/raw/21.12/rebar3
|
||||
chmod +x rebar
|
||||
chmod +x rebar3
|
||||
|
||||
- name: Get recent compatible Rebar binaries
|
||||
if: matrix.otp > 23 && matrix.otp < 25
|
||||
run: |
|
||||
rm rebar
|
||||
rm rebar3
|
||||
wget https://github.com/processone/ejabberd/raw/24.12/rebar
|
||||
wget https://github.com/processone/ejabberd/raw/24.12/rebar3
|
||||
chmod +x rebar
|
||||
chmod +x rebar3
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
- name: Prepare libraries
|
||||
run: |
|
||||
apt-get -qq update
|
||||
apt-get purge -y libgd3 nginx
|
||||
apt-get -qq install libexpat1-dev libgd-dev libpam0g-dev \
|
||||
libsqlite3-dev libwebp-dev libyaml-dev
|
||||
apt-get -q -y install libexpat1-dev libgd-dev libpam0g-dev \
|
||||
libsqlite3-dev libwebp-dev libyaml-dev
|
||||
|
||||
- name: Cache Hex.pm
|
||||
uses: actions/cache@v4
|
||||
- name: Cache rebar3
|
||||
if: matrix.rebar == 'rebar3'
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: |
|
||||
~/.cache/rebar3/
|
||||
key: ${{matrix.otp}}-${{hashFiles('rebar.config')}}
|
||||
|
||||
- name: Unlock eredis dependency
|
||||
if: matrix.rebar == 'rebar3' && matrix.otp < 21
|
||||
run: rebar3 unlock eredis
|
||||
_build/default/lib/
|
||||
key: runtime-${{ matrix.otp }}-${{matrix.rebar}}-${{hashFiles('rebar.*')}}
|
||||
|
||||
- name: Compile
|
||||
run: |
|
||||
./autogen.sh
|
||||
./configure --with-rebar=./${{ matrix.rebar }} \
|
||||
--prefix=/tmp/ejabberd \
|
||||
--with-min-erlang=9.0.5 \
|
||||
--enable-all \
|
||||
--disable-elixir \
|
||||
--disable-tools \
|
||||
--disable-odbc
|
||||
make
|
||||
uses: ./.github/actions/manage-ejabberd
|
||||
with:
|
||||
for: prod
|
||||
do: compile
|
||||
tool: ${{ matrix.rebar }}
|
||||
configure: --disable-elixir
|
||||
|
||||
- run: make hooks
|
||||
- run: make options
|
||||
- run: make xref
|
||||
|
||||
- run: make dialyzer
|
||||
- run: make elvis
|
||||
if: matrix.otp > '25' && matrix.rebar == 'rebar3'
|
||||
|
||||
- name: Prepare rel (rebar2)
|
||||
if: matrix.rebar == 'rebar'
|
||||
run: |
|
||||
mkdir -p _build/prod && ln -s `pwd`/rel/ _build/prod/rel
|
||||
mkdir -p _build/dev && ln -s `pwd`/rel/ _build/dev/rel
|
||||
- name: Production
|
||||
uses: ./.github/actions/manage-ejabberd
|
||||
with:
|
||||
for: prod
|
||||
do: deploy, start, register, stop, check, logs
|
||||
tool: ${{ matrix.rebar }}
|
||||
username: user1
|
||||
|
||||
- name: Run rel
|
||||
run: |
|
||||
make rel
|
||||
_build/prod/rel/ejabberd/bin/ejabberdctl start \
|
||||
&& _build/prod/rel/ejabberd/bin/ejabberdctl started
|
||||
_build/prod/rel/ejabberd/bin/ejabberdctl register user1 localhost s0mePass
|
||||
_build/prod/rel/ejabberd/bin/ejabberdctl registered_users localhost > registered.log
|
||||
_build/prod/rel/ejabberd/bin/ejabberdctl stop \
|
||||
&& _build/prod/rel/ejabberd/bin/ejabberdctl stopped
|
||||
- name: Development
|
||||
uses: ./.github/actions/manage-ejabberd
|
||||
with:
|
||||
for: dev
|
||||
do: deploy, start, register, stop, check, logs
|
||||
tool: ${{ matrix.rebar }}
|
||||
username: user2
|
||||
|
||||
- name: Run dev
|
||||
run: |
|
||||
make dev
|
||||
_build/dev/rel/ejabberd/bin/ejabberdctl start \
|
||||
&& _build/dev/rel/ejabberd/bin/ejabberdctl started
|
||||
_build/dev/rel/ejabberd/bin/ejabberdctl register user2 localhost s0mePass
|
||||
_build/dev/rel/ejabberd/bin/ejabberdctl registered_users localhost >> registered.log
|
||||
_build/dev/rel/ejabberd/bin/ejabberdctl stop \
|
||||
&& _build/dev/rel/ejabberd/bin/ejabberdctl stopped
|
||||
- name: Installed
|
||||
uses: ./.github/actions/manage-ejabberd
|
||||
with:
|
||||
for: install
|
||||
do: deploy, start, register, stop, check, logs
|
||||
tool: ${{ matrix.rebar }}
|
||||
username: user3
|
||||
|
||||
- name: Run install
|
||||
run: |
|
||||
make install
|
||||
/tmp/ejabberd/sbin/ejabberdctl start \
|
||||
&& /tmp/ejabberd/sbin/ejabberdctl started
|
||||
/tmp/ejabberd/sbin/ejabberdctl register user3 localhost s0mePass
|
||||
/tmp/ejabberd/sbin/ejabberdctl registered_users localhost >> registered.log
|
||||
/tmp/ejabberd/sbin/ejabberdctl stop \
|
||||
&& /tmp/ejabberd/sbin/ejabberdctl stopped
|
||||
|
||||
- name: View logs
|
||||
run: |
|
||||
echo "===> Registered:"
|
||||
cat registered.log
|
||||
echo "===> Prod:"
|
||||
cat _build/prod/rel/ejabberd/logs/*
|
||||
echo "===> Dev:"
|
||||
cat _build/dev/rel/ejabberd/logs/*
|
||||
echo "===> Install:"
|
||||
cat /tmp/ejabberd/var/log/ejabberd/*
|
||||
|
||||
- name: Check logs
|
||||
run: |
|
||||
grep -q '^user1$' registered.log
|
||||
grep -q '^user2$' registered.log
|
||||
grep -q '^user3$' registered.log
|
||||
grep -q 'is started' _build/prod/rel/ejabberd/logs/ejabberd.log
|
||||
grep -q 'is stopped' _build/prod/rel/ejabberd/logs/ejabberd.log
|
||||
test $(find _build/prod/rel/ -empty -name error.log)
|
||||
grep -q 'is started' _build/dev/rel/ejabberd/logs/ejabberd.log
|
||||
grep -q 'is stopped' _build/dev/rel/ejabberd/logs/ejabberd.log
|
||||
test $(find _build/dev/rel/ -empty -name error.log)
|
||||
grep -q 'is started' /tmp/ejabberd/var/log/ejabberd/ejabberd.log
|
||||
grep -q 'is stopped' /tmp/ejabberd/var/log/ejabberd/ejabberd.log
|
||||
test $(find /tmp/ejabberd/var/log/ejabberd/ -empty -name error.log)
|
||||
|
||||
- name: View logs failures
|
||||
if: always()
|
||||
run: |
|
||||
cat _build/prod/rel/ejabberd/logs/ejabberd.log
|
||||
cat _build/prod/rel/ejabberd/logs/error.log
|
||||
cat _build/dev/rel/ejabberd/logs/ejabberd.log
|
||||
cat _build/dev/rel/ejabberd/logs/error.log
|
||||
cat /tmp/ejabberd/var/log/ejabberd/ejabberd.log
|
||||
cat /tmp/ejabberd/var/log/ejabberd/error.log
|
||||
####################################################### Rebar3 + Elixir #####
|
||||
|
||||
rebar3-elixir:
|
||||
name: Rebar3+Elixir
|
||||
runs-on: ubuntu-24.04-arm
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
elixir: ['1.14', '1.15', '1.16', '1.17', '1.18']
|
||||
runs-on: ubuntu-24.04
|
||||
elixir: ['1.14', '1.18', '1.19']
|
||||
container:
|
||||
image: public.ecr.aws/docker/library/elixir:${{ matrix.elixir }}
|
||||
|
||||
steps:
|
||||
|
||||
- uses: actions/checkout@v5
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
- name: Prepare libraries
|
||||
run: |
|
||||
apt-get -qq update
|
||||
apt-get -y purge libgd3 nginx
|
||||
apt-get -qq install libexpat1-dev libgd-dev libpam0g-dev \
|
||||
libsqlite3-dev libwebp-dev libyaml-dev
|
||||
apt-get -q -y install libexpat1-dev libgd-dev libpam0g-dev \
|
||||
libsqlite3-dev libwebp-dev libyaml-dev
|
||||
|
||||
- name: Enable Module.Example and an Elixir dependency
|
||||
run: |
|
||||
sed -i "s|^modules:|modules:\n 'Ejabberd.Module.Example': {}|g" ejabberd.yml.example
|
||||
sed -i "s|^modules:|modules:\n 'Ejabberd.Module.Example': {}|g" \
|
||||
ejabberd.yml.example
|
||||
cat ejabberd.yml.example
|
||||
sed -i 's|^{deps, \[\(.*\)|{deps, [{decimal, ".*", {git, "https://github.com/ericmj/decimal", {branch, "main"}}},\n \1|g' rebar.config
|
||||
cat rebar.config
|
||||
|
||||
- name: Cache Hex.pm
|
||||
uses: actions/cache@v4
|
||||
- name: Cache hex.pm
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: |
|
||||
~/.cache/rebar3/
|
||||
key: ${{matrix.elixir}}-${{hashFiles('rebar.config')}}
|
||||
key: runtime-${{matrix.elixir}}-${{hashFiles('rebar.*')}}
|
||||
|
||||
- name: Install Hex and Rebar3 manually on older Elixir
|
||||
if: matrix.elixir <= '1.14'
|
||||
if: matrix.elixir < '1.15'
|
||||
run: |
|
||||
mix local.hex --force
|
||||
mix local.rebar --force
|
||||
|
||||
- name: Compile
|
||||
run: |
|
||||
./autogen.sh
|
||||
./configure --with-rebar=./rebar3 \
|
||||
--prefix=/tmp/ejabberd \
|
||||
--enable-all \
|
||||
--disable-odbc
|
||||
make
|
||||
uses: ./.github/actions/manage-ejabberd
|
||||
with:
|
||||
for: prod
|
||||
do: compile
|
||||
tool: ./rebar3
|
||||
|
||||
- name: Test scripts, deps, eunit
|
||||
run: |
|
||||
make scripts deps
|
||||
./rebar3 eunit --verbose
|
||||
|
||||
- run: make hooks
|
||||
- run: make options
|
||||
- run: make xref
|
||||
#- run: make dialyzer
|
||||
- run: make elvis
|
||||
if: matrix.otp > '25'
|
||||
|
||||
- name: Run rel
|
||||
run: |
|
||||
make rel
|
||||
_build/prod/rel/ejabberd/bin/ejabberdctl start \
|
||||
&& _build/prod/rel/ejabberd/bin/ejabberdctl started
|
||||
_build/prod/rel/ejabberd/bin/ejabberdctl register user1 localhost s0mePass
|
||||
_build/prod/rel/ejabberd/bin/ejabberdctl registered_users localhost > registered.log
|
||||
_build/prod/rel/ejabberd/bin/ejabberdctl stop \
|
||||
&& _build/prod/rel/ejabberd/bin/ejabberdctl stopped
|
||||
- name: Production
|
||||
uses: ./.github/actions/manage-ejabberd
|
||||
with:
|
||||
for: prod
|
||||
do: deploy, start, register, stop, check, logs
|
||||
username: user1
|
||||
|
||||
- name: Run dev
|
||||
run: |
|
||||
make dev
|
||||
_build/dev/rel/ejabberd/bin/ejabberdctl start \
|
||||
&& _build/dev/rel/ejabberd/bin/ejabberdctl started
|
||||
_build/dev/rel/ejabberd/bin/ejabberdctl register user2 localhost s0mePass
|
||||
_build/dev/rel/ejabberd/bin/ejabberdctl registered_users localhost >> registered.log
|
||||
_build/dev/rel/ejabberd/bin/ejabberdctl stop \
|
||||
&& _build/dev/rel/ejabberd/bin/ejabberdctl stopped
|
||||
- name: Release
|
||||
uses: ./.github/actions/manage-ejabberd
|
||||
with:
|
||||
for: dev
|
||||
do: deploy, start, register, stop, check, logs
|
||||
username: user2
|
||||
|
||||
- name: Run install
|
||||
run: |
|
||||
make install
|
||||
/tmp/ejabberd/sbin/ejabberdctl start \
|
||||
&& /tmp/ejabberd/sbin/ejabberdctl started
|
||||
/tmp/ejabberd/sbin/ejabberdctl register user3 localhost s0mePass
|
||||
/tmp/ejabberd/sbin/ejabberdctl registered_users localhost >> registered.log
|
||||
/tmp/ejabberd/sbin/ejabberdctl stop \
|
||||
&& /tmp/ejabberd/sbin/ejabberdctl stopped
|
||||
- name: Installed
|
||||
uses: ./.github/actions/manage-ejabberd
|
||||
with:
|
||||
for: install
|
||||
do: deploy, start, register, stop, check, logs
|
||||
username: user3
|
||||
|
||||
- name: View logs
|
||||
if: always()
|
||||
run: |
|
||||
echo "===> Registered:"
|
||||
cat registered.log
|
||||
echo "===> Prod:"
|
||||
cat _build/prod/rel/ejabberd/logs/*
|
||||
echo "===> Dev:"
|
||||
cat _build/dev/rel/ejabberd/logs/*
|
||||
echo "===> Install:"
|
||||
cat /tmp/ejabberd/var/log/ejabberd/*
|
||||
|
||||
- name: Check logs
|
||||
if: always()
|
||||
run: |
|
||||
grep -q '^user1$' registered.log
|
||||
grep -q '^user2$' registered.log
|
||||
grep -q '^user3$' registered.log
|
||||
grep -q 'is started' _build/prod/rel/ejabberd/logs/ejabberd.log
|
||||
grep -q 'is stopped' _build/prod/rel/ejabberd/logs/ejabberd.log
|
||||
grep -q 'Stopping Ejabberd.Module.Example' _build/prod/rel/ejabberd/logs/ejabberd.log
|
||||
test $(find _build/prod/ -empty -name error.log)
|
||||
grep -q 'is started' _build/dev/rel/ejabberd/logs/ejabberd.log
|
||||
grep -q 'is stopped' _build/dev/rel/ejabberd/logs/ejabberd.log
|
||||
grep -q 'Stopping Ejabberd.Module.Example' _build/dev/rel/ejabberd/logs/ejabberd.log
|
||||
test $(find _build/dev/ -empty -name error.log)
|
||||
grep -q 'is started' /tmp/ejabberd/var/log/ejabberd/ejabberd.log
|
||||
grep -q 'is stopped' /tmp/ejabberd/var/log/ejabberd/ejabberd.log
|
||||
grep -q 'Stopping Ejabberd.Module.Example' /tmp/ejabberd/var/log/ejabberd/ejabberd.log
|
||||
test $(find /tmp/ejabberd/var/log/ejabberd/ -empty -name error.log)
|
||||
|
||||
- name: View logs failures
|
||||
if: failure()
|
||||
run: |
|
||||
cat _build/prod/rel/ejabberd/logs/ejabberd.log
|
||||
cat _build/prod/rel/ejabberd/logs/error.log
|
||||
cat _build/dev/rel/ejabberd/logs/ejabberd.log
|
||||
cat _build/dev/rel/ejabberd/logs/error.log
|
||||
cat /tmp/ejabberd/var/log/ejabberd/ejabberd.log
|
||||
cat /tmp/ejabberd/var/log/ejabberd/error.log
|
||||
################################################################### Mix #####
|
||||
|
||||
mix:
|
||||
name: Mix
|
||||
runs-on: ubuntu-24.04-arm
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
elixir: ['1.14', '1.15', '1.16', '1.17', '1.18']
|
||||
runs-on: ubuntu-24.04
|
||||
elixir: ['1.14', '1.18', '1.19']
|
||||
container:
|
||||
image: public.ecr.aws/docker/library/elixir:${{ matrix.elixir }}
|
||||
|
||||
steps:
|
||||
|
||||
- uses: actions/checkout@v5
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
- name: Prepare libraries
|
||||
run: |
|
||||
apt-get -qq update
|
||||
apt-get -y purge libgd3 nginx
|
||||
apt-get -qq install libexpat1-dev libgd-dev libpam0g-dev \
|
||||
libsqlite3-dev libwebp-dev libyaml-dev
|
||||
apt-get -q -y install libexpat1-dev libgd-dev libpam0g-dev \
|
||||
libsqlite3-dev libwebp-dev libyaml-dev
|
||||
|
||||
- name: Remove Elixir Matchers
|
||||
- name: Remove Elixir matchers
|
||||
run: |
|
||||
echo "::remove-matcher owner=elixir-mixCompileWarning::"
|
||||
echo "::remove-matcher owner=elixir-credoOutputDefault::"
|
||||
@@ -328,105 +213,58 @@ jobs:
|
||||
|
||||
- name: Enable Module.Example and an Elixir dependency
|
||||
run: |
|
||||
sed -i "s|^modules:|modules:\n 'Ejabberd.Module.Example': {}|g" ejabberd.yml.example
|
||||
sed -i "s|^modules:|modules:\n 'Ejabberd.Module.Example': {}|g" \
|
||||
ejabberd.yml.example
|
||||
cat ejabberd.yml.example
|
||||
sed -i 's|^{deps, \(.*\)|{deps, \1\n {decimal, ".*", {git, "https://github.com/ericmj/decimal", {branch, "main"}}}, |g' rebar.config
|
||||
cat rebar.config
|
||||
|
||||
- name: Cache Hex.pm
|
||||
uses: actions/cache@v4
|
||||
- name: Cache hex.pm
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: |
|
||||
~/.hex/
|
||||
key: ${{matrix.elixir}}-${{hashFiles('mix.exs')}}
|
||||
key: runtime-${{matrix.elixir}}-${{hashFiles('mix.*')}}
|
||||
|
||||
- name: Install Hex and Rebar3 manually on older Elixir
|
||||
if: matrix.elixir <= '1.14'
|
||||
if: matrix.elixir < '1.15'
|
||||
run: |
|
||||
mix local.hex --force
|
||||
mix local.rebar --force
|
||||
|
||||
- name: Compile
|
||||
run: |
|
||||
./autogen.sh
|
||||
./configure --with-rebar=mix \
|
||||
--prefix=/tmp/ejabberd \
|
||||
--enable-all
|
||||
make
|
||||
uses: ./.github/actions/manage-ejabberd
|
||||
with:
|
||||
for: prod
|
||||
do: compile
|
||||
tool: mix
|
||||
|
||||
- run: make hooks
|
||||
- run: make options
|
||||
- run: make xref
|
||||
|
||||
- run: make dialyzer
|
||||
- run: make elvis
|
||||
if: matrix.otp > '25'
|
||||
|
||||
- run: make edoc
|
||||
|
||||
- name: Run rel
|
||||
run: |
|
||||
make rel
|
||||
_build/prod/rel/ejabberd/bin/ejabberdctl start \
|
||||
&& _build/prod/rel/ejabberd/bin/ejabberdctl started
|
||||
_build/prod/rel/ejabberd/bin/ejabberdctl register user1 localhost s0mePass
|
||||
_build/prod/rel/ejabberd/bin/ejabberdctl registered_users localhost > registered.log
|
||||
_build/prod/rel/ejabberd/bin/ejabberdctl stop \
|
||||
&& _build/prod/rel/ejabberd/bin/ejabberdctl stopped
|
||||
- name: Production
|
||||
uses: ./.github/actions/manage-ejabberd
|
||||
with:
|
||||
for: prod
|
||||
do: deploy, start, register, stop, check, logs
|
||||
username: user1
|
||||
|
||||
- name: Run dev
|
||||
run: |
|
||||
make dev
|
||||
_build/dev/rel/ejabberd/bin/ejabberdctl start \
|
||||
&& _build/dev/rel/ejabberd/bin/ejabberdctl started
|
||||
_build/dev/rel/ejabberd/bin/ejabberdctl register user2 localhost s0mePass
|
||||
_build/dev/rel/ejabberd/bin/ejabberdctl registered_users localhost >> registered.log
|
||||
_build/dev/rel/ejabberd/bin/ejabberdctl stop \
|
||||
&& _build/dev/rel/ejabberd/bin/ejabberdctl stopped
|
||||
- name: Development
|
||||
uses: ./.github/actions/manage-ejabberd
|
||||
with:
|
||||
for: dev
|
||||
do: deploy, start, register, stop, check, logs
|
||||
username: user2
|
||||
|
||||
- name: Run install
|
||||
run: |
|
||||
make install
|
||||
/tmp/ejabberd/sbin/ejabberdctl start \
|
||||
&& /tmp/ejabberd/sbin/ejabberdctl started
|
||||
/tmp/ejabberd/sbin/ejabberdctl register user3 localhost s0mePass
|
||||
/tmp/ejabberd/sbin/ejabberdctl registered_users localhost >> registered.log
|
||||
/tmp/ejabberd/sbin/ejabberdctl stop \
|
||||
&& /tmp/ejabberd/sbin/ejabberdctl stopped
|
||||
|
||||
- name: View logs
|
||||
if: always()
|
||||
run: |
|
||||
echo "===> Registered:"
|
||||
cat registered.log
|
||||
echo "===> Prod:"
|
||||
cat _build/prod/rel/ejabberd/logs/*
|
||||
echo "===> Dev:"
|
||||
cat _build/dev/rel/ejabberd/logs/*
|
||||
echo "===> Install:"
|
||||
cat /tmp/ejabberd/var/log/ejabberd/*
|
||||
|
||||
- name: Check logs
|
||||
if: always()
|
||||
run: |
|
||||
grep -q '^user1$' registered.log
|
||||
grep -q '^user2$' registered.log
|
||||
grep -q '^user3$' registered.log
|
||||
grep -q 'is started' _build/prod/rel/ejabberd/logs/ejabberd.log
|
||||
grep -q 'is stopped' _build/prod/rel/ejabberd/logs/ejabberd.log
|
||||
grep -q 'Stopping Ejabberd.Module.Example' _build/prod/rel/ejabberd/logs/ejabberd.log
|
||||
test $(find _build/prod/ -empty -name error.log)
|
||||
grep -q 'is started' _build/dev/rel/ejabberd/logs/ejabberd.log
|
||||
grep -q 'is stopped' _build/dev/rel/ejabberd/logs/ejabberd.log
|
||||
grep -q 'Stopping Ejabberd.Module.Example' _build/dev/rel/ejabberd/logs/ejabberd.log
|
||||
test $(find _build/dev/ -empty -name error.log)
|
||||
grep -q 'is started' /tmp/ejabberd/var/log/ejabberd/ejabberd.log
|
||||
grep -q 'is stopped' /tmp/ejabberd/var/log/ejabberd/ejabberd.log
|
||||
grep -q 'Stopping Ejabberd.Module.Example' /tmp/ejabberd/var/log/ejabberd/ejabberd.log
|
||||
test $(find /tmp/ejabberd/var/log/ejabberd/ -empty -name error.log)
|
||||
|
||||
- name: View logs failures
|
||||
if: failure()
|
||||
run: |
|
||||
cat _build/prod/rel/ejabberd/logs/ejabberd.log
|
||||
cat _build/prod/rel/ejabberd/logs/error.log
|
||||
cat _build/dev/rel/ejabberd/logs/ejabberd.log
|
||||
cat _build/dev/rel/ejabberd/logs/error.log
|
||||
cat /tmp/ejabberd/var/log/ejabberd/ejabberd.log
|
||||
cat /tmp/ejabberd/var/log/ejabberd/error.log
|
||||
- name: Installed
|
||||
uses: ./.github/actions/manage-ejabberd
|
||||
with:
|
||||
for: install
|
||||
do: deploy, start, register, stop, check, logs
|
||||
username: user3
|
||||
|
||||
@@ -0,0 +1,177 @@
|
||||
name: Weekly
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: '30 9 * * 0'
|
||||
|
||||
jobs:
|
||||
|
||||
############################################################### Compile #####
|
||||
|
||||
test:
|
||||
runs-on: ubuntu-24.04-arm
|
||||
strategy:
|
||||
matrix:
|
||||
otp: ['25', '26', '27', '28', '29.0-rc1']
|
||||
|
||||
steps:
|
||||
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
- uses: erlef/setup-beam@v1
|
||||
with:
|
||||
otp-version: ${{ matrix.otp }}
|
||||
|
||||
- uses: awalsh128/cache-apt-pkgs-action@latest
|
||||
with:
|
||||
packages: libexpat1-dev libgd-dev libpam0g-dev
|
||||
libsqlite3-dev libwebp-dev libyaml-dev
|
||||
|
||||
- name: Compile
|
||||
uses: ./.github/actions/manage-ejabberd
|
||||
with:
|
||||
for: prod
|
||||
do: compile
|
||||
tool: rebar3
|
||||
configure: --disable-elixir --disable-mssql
|
||||
|
||||
########################################################## Static Tests #####
|
||||
|
||||
- name: Test shell scripts
|
||||
run: |
|
||||
shellcheck ejabberd.init.template
|
||||
shellcheck -x ejabberdctl.template
|
||||
shellcheck .vscode/relive.sh
|
||||
shellcheck rel/setup-dev.sh
|
||||
shellcheck rel/setup-relive.sh
|
||||
shellcheck test/ejabberd_SUITE_data/gencerts.sh
|
||||
shellcheck tools/captcha.sh
|
||||
shellcheck tools/emacs-indent.sh
|
||||
shellcheck tools/generate-doap.sh
|
||||
shellcheck tools/prepare-tr.sh
|
||||
shellcheck tools/rebar3-format.sh
|
||||
|
||||
- run: make hooks
|
||||
- run: make options
|
||||
- run: make xref
|
||||
- run: make dialyzer
|
||||
- run: make testeunit
|
||||
- run: make elvis
|
||||
if: matrix.otp > '25'
|
||||
|
||||
- run: make install -s
|
||||
|
||||
######################################################### Dynamic Tests #####
|
||||
|
||||
- name: Check production release
|
||||
uses: ./.github/actions/manage-ejabberd
|
||||
with:
|
||||
for: prod
|
||||
do: deploy, start, stop, check
|
||||
|
||||
- name: Start development release
|
||||
uses: ./.github/actions/manage-ejabberd
|
||||
with:
|
||||
for: dev
|
||||
do: deploy, no_tls, start, register
|
||||
username: user123
|
||||
|
||||
- name: Stop development release
|
||||
if: always()
|
||||
uses: ./.github/actions/manage-ejabberd
|
||||
with:
|
||||
for: dev
|
||||
do: stop, check
|
||||
|
||||
- name: View production logs
|
||||
if: always()
|
||||
uses: ./.github/actions/manage-ejabberd
|
||||
with:
|
||||
for: prod
|
||||
do: logs
|
||||
|
||||
- name: View development logs
|
||||
if: always()
|
||||
uses: ./.github/actions/manage-ejabberd
|
||||
with:
|
||||
for: dev
|
||||
do: logs
|
||||
|
||||
##################################################### Common Test Suite #####
|
||||
|
||||
- name: Prepare database
|
||||
uses: ./.github/actions/manage-database
|
||||
with:
|
||||
for: mysql, pgsql, redis
|
||||
do: install, start, user, create
|
||||
|
||||
- name: Setup multihost SQL schema
|
||||
run: |
|
||||
sed -i 's|new_schema, false|new_schema, true|g' test/suite.erl
|
||||
|
||||
- name: Run tests
|
||||
id: ct
|
||||
run: make test
|
||||
|
||||
- name: Send to coveralls
|
||||
continue-on-error: true
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
DIAGNOSTIC=1 ./rebar3 as test coveralls send
|
||||
|
||||
- name: Check results
|
||||
if: always() && (steps.ct.outcome != 'skipped')
|
||||
id: ctresults
|
||||
run: |
|
||||
[[ -d _build ]] && ln -s _build/test/logs/last/ logs || true
|
||||
ln `find logs/ -name suite.log` logs/suite.log
|
||||
grep 'TEST COMPLETE' logs/suite.log
|
||||
grep -q 'TEST COMPLETE,.* 0 failed' logs/suite.log
|
||||
test $(find logs/ -empty -name error.log)
|
||||
|
||||
- name: View logs
|
||||
if: always()
|
||||
run: |
|
||||
echo "::group::ejabberd.log"
|
||||
find logs/ -name ejabberd.log -exec cat '{}' ';'
|
||||
echo "::endgroup::"
|
||||
echo "::group::error.log"
|
||||
find logs/ -name error.log -exec cat '{}' ';'
|
||||
echo "::endgroup::"
|
||||
echo "::group::exunit.log"
|
||||
find logs/ -name exunit.log -exec cat '{}' ';'
|
||||
echo "::endgroup::"
|
||||
echo "::group::suite.log (only failures)"
|
||||
cat logs/suite.log | awk \
|
||||
'BEGIN{RS="\n=case";FS="\n"} /=result\s*failed/ {print "=case" $0}'
|
||||
echo "::endgroup::"
|
||||
echo "::group::suite.log (complete)"
|
||||
cat logs/suite.log
|
||||
echo "::endgroup::"
|
||||
|
||||
- name: Upload CT logs
|
||||
if: failure()
|
||||
uses: actions/upload-artifact@v6
|
||||
with:
|
||||
name: ct-logs-${{ matrix.otp }}
|
||||
path: _build/test/logs
|
||||
retention-days: 14
|
||||
|
||||
############################################################# Coveralls #####
|
||||
|
||||
cover:
|
||||
needs: test
|
||||
if: always()
|
||||
runs-on: ubuntu-24.04-arm
|
||||
steps:
|
||||
- name: Finish parallel upload to coveralls
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
curl -v -k https://coveralls.io/webhook \
|
||||
--header "Content-Type: application/json" \
|
||||
--data '{"repo_name":"$GITHUB_REPOSITORY",
|
||||
"repo_token":"$GITHUB_TOKEN",
|
||||
"payload":{"build_num":$GITHUB_RUN_ID,
|
||||
"status":"done"}}'
|
||||
@@ -47,3 +47,6 @@ Mnesia.nonode@nohost/
|
||||
/ejabberd-*.rpm
|
||||
/ejabberd-*.run
|
||||
/ejabberd-*.tar.gz
|
||||
/priv/mod_invites/static/bootstrap/
|
||||
/priv/mod_invites/static/jquery/
|
||||
/node_modules/
|
||||
|
||||
@@ -1,3 +1,256 @@
|
||||
## Version 26.03
|
||||
|
||||
#### Core
|
||||
|
||||
- Fix mysql authentication for tls connections that required auth plugin switch
|
||||
- Improve handling of scram "wanted to use channel-bindings but was not offered one" flag
|
||||
- Add ability for mod_options values to depend on other options
|
||||
- Don't fail to classify stand-alone chat states
|
||||
- Fix some warnings compiling with Erlang/OTP 29 ([#4527](https://github.com/processone/ejabberd/issues/4527))
|
||||
- `ejabberd_ctl`: Document how to set empty lists in ejabberdctl and WebAdmin
|
||||
- `ejabberd_http`: Add handling of `Etag` and `If-Modified-Since` headers to files served by `mod_http_upload`
|
||||
- `ejabberd_http`: Ignore whitespaces at end of host header
|
||||
- SQL: Add ability to mark that column can be null in e_sql_schema
|
||||
- Tests: Add tests for sasl2
|
||||
- Tests: Make table cleanup in test more robust
|
||||
|
||||
#### Modules
|
||||
|
||||
- `mod_fast_auth`: Offered methods are based on available channel bindings
|
||||
- `mod_http_api`: Always hide password in log entries
|
||||
- `mod_mam`: Call `store_mam_message` hook for messages that `user_mucsub_from_muc_archive` was filtering out
|
||||
- `mod_mam_sql`: Only provide the new XEP-0431 `fulltext` field, not old custom `withtext`
|
||||
- `mod_muc_room`: Fix duplicate stanza-id in muc mam responses generated from local history ([#4544](https://github.com/processone/ejabberd/issues/4544))
|
||||
- `mod_muc_room`: Fix hook name in commit 7732984 ([#4526](https://github.com/processone/ejabberd/issues/4526))
|
||||
- `mod_pubsub_serverinfo`: Don't use `gen_server:call` for resolving pubsub host
|
||||
- `mod_roster`: Add support for roster pre-approval ([#4512](https://github.com/processone/ejabberd/issues/4512))
|
||||
- `mod_roster`: Fix display of groups in WebAdmin when it's a list
|
||||
- `mod_roster`: in WebAdmin page, first execute SET actions, later GET
|
||||
- `mod_roster_mnesia`: Improve transformation code
|
||||
|
||||
#### mod_invites
|
||||
|
||||
- Makefile: Run invites-deps only when files are missing
|
||||
- Fix path to bootstrap files
|
||||
- Check at start time the syntax of landing_page option ([#4525](https://github.com/processone/ejabberd/issues/4525))
|
||||
- Send 'Link' http header ([#4531](https://github.com/processone/ejabberd/issues/4531))
|
||||
- Set meta.pre-auth to skip redirect_url if token validated ([#4535](https://github.com/processone/ejabberd/issues/4535))
|
||||
- Many security fixes ([#4539](https://github.com/processone/ejabberd/issues/4539))
|
||||
- Add favicon and change color to match ejabberd branding
|
||||
- Enable dark mode
|
||||
- Add support for webchat_url
|
||||
- Migrate to bootstrap5 and update jquery
|
||||
- No inline scripts
|
||||
- Make format csrf token
|
||||
- Add csrf token to failed post
|
||||
- Include js/css deps in static dir
|
||||
- Correct hashes for bootstrap 4.6.2
|
||||
- Hint at type for landing_page opt
|
||||
- Many more security fixes ([#4538](https://github.com/processone/ejabberd/issues/4538))
|
||||
- Check CSRF token in register form
|
||||
- Add integrity hashes to scripts and css
|
||||
- Comment unused resources
|
||||
- Add security headers
|
||||
- Remove debug log of whole query parameters (including pw)
|
||||
- Don't crash on unknown host from http host header
|
||||
- Make creating invite transactional
|
||||
- Set overuse limits ([#4540](https://github.com/processone/ejabberd/issues/4540))
|
||||
- Fix broken path when behind proxy with prefix ([#4547](https://github.com/processone/ejabberd/issues/4547))
|
||||
|
||||
#### Container and Installers
|
||||
|
||||
- Bump Erlang/OTP 28.4.1
|
||||
- `make-binaries`: Bump libexpat to 2.7.5
|
||||
- `make-binaries`: Bump zlib to 1.3.2
|
||||
- `make-binaries`: Enable missing crypto features ([#4542](https://github.com/processone/ejabberd/issues/4542))
|
||||
|
||||
#### Translations
|
||||
|
||||
- Update Bulgarian translation
|
||||
- Update Catalan and Spanish translations
|
||||
- Update Chinese Simplified translation
|
||||
- Update Czech translation
|
||||
- Update French translation
|
||||
- Update German translation
|
||||
|
||||
## Version 26.02
|
||||
|
||||
- Fixes issue with adding hats data in presences send by group chats ([#4516](https://github.com/processone/ejabberd/issues/4516))
|
||||
- Removes `mod_muc_occupantid` modules, and integrates its functionality directly into `mod_muc` ([#4521](https://github.com/processone/ejabberd/issues/4521))
|
||||
- Fixes issue with reset occupant-id values after restart of ejabberd ([#4521](https://github.com/processone/ejabberd/issues/4521))
|
||||
- Improves handling of mediated group chat invitations in `mod_block_stranger` ([#4523](https://github.com/processone/ejabberd/issues/4523))
|
||||
- Properly install `mod_invites` templates in `make install` call ([#4514](https://github.com/processone/ejabberd/issues/4514))
|
||||
- Better errors in `mod_invites` ([#4515](https://github.com/processone/ejabberd/issues/4515))
|
||||
- Accessibility improvements in `mod_invites` ([#4524](https://github.com/processone/ejabberd/issues/4524))
|
||||
- Improves handling of request with invalid url encoded values in request handled by `ejabberd_http`
|
||||
- Improves handling of invalid responses to disco queries in `mod_pubsub_serverinfo`
|
||||
- Fixes conversion of MUC room configs from ejabberd older than 21.12
|
||||
- Fixes to autologin in WebAdmin
|
||||
|
||||
## Version 26.01
|
||||
|
||||
#### Compile and Start
|
||||
|
||||
- Remove dependencies, macros and code for Erlang/OTP older than 25
|
||||
- Require Elixir 1.14 or higher, that's the lowest we can test automatically
|
||||
- `ejabberdctl`: Support NetBSD and OpenBSD `su` ([#4320](https://github.com/processone/ejabberd/issues/4320))
|
||||
- `ejabberdctl.template`: Show meaningful error when `ERL_DIST_PORT` is in use
|
||||
- `ejabberd_app`: Print address and port where listens for erlang node connections
|
||||
- `Makefile.in`: Add `make relivectl` similar to `relive` but using `ejabberdctl`
|
||||
|
||||
#### Databases
|
||||
|
||||
- Add db_serialize support in mnesia modules
|
||||
- Add db serialization to `mod_muc_sql`
|
||||
- New database export/import infrastructure
|
||||
- Add commands for new database export/import
|
||||
- Apply timestamp pass in `?SQL_INSERT` queries
|
||||
- Update p1_mysql to bring fix for timestamp decoding
|
||||
- Extend timestamp type handling in sql macros
|
||||
- Revert changes to conversion of pgsql `int` types
|
||||
|
||||
#### Installer and Container
|
||||
|
||||
- `make-binaries`: Bump Erlang/OTP 28.3.1 and Elixir 1.19.5
|
||||
- `Dockerfile`: Bump Erlang/OTP 28.3.1 and Elixir 1.19.5
|
||||
- `Dockerfile`: Expose also port 7777 for SOCKS5
|
||||
- `Dockerfile`: Configure TURN ports and expose 5478 50000-50099
|
||||
- `Dockerfile`: Try to fix error with recent `freetds` Alpine package
|
||||
- Container: Setup new macro `STARTTLS_REQUIRED` to allow easy disabling
|
||||
|
||||
#### MUC
|
||||
|
||||
- Add `muc_online_rooms_count` API command
|
||||
- Set `enable_hats` room option `true` by default
|
||||
- Allow vcard queries even when IQ queries are disabled ([#4489](https://github.com/processone/ejabberd/issues/4489))
|
||||
- Announce `stable-id` feature from XEP-0045 1.31, supported since long ago
|
||||
- Fix `preload_rooms` in case of SQL database ([#4476](https://github.com/processone/ejabberd/issues/4476))
|
||||
- Run new hooks: `registering_nickmuc` and `registered_nickmuc` ([#4478](https://github.com/processone/ejabberd/issues/4478))
|
||||
- When deleting account, unregister account's nicks in all MUC hosts ([#4478](https://github.com/processone/ejabberd/issues/4478))
|
||||
- `mod_muc_log`: Crash in `terminate/2` when stopping module ([#4486](https://github.com/processone/ejabberd/issues/4486))
|
||||
- `mod_muc_occupantid`: Keep salt per MUC service, not individual rooms
|
||||
- `mod_muc_room`: Rewrite hats code that gets xdata values
|
||||
- `mod_muc_room`: Handle hats without definition ([#4503](https://github.com/processone/ejabberd/issues/4503))
|
||||
- `mod_muc_room`: When user has no hats, don't store in hats_users
|
||||
|
||||
#### WebAdmin
|
||||
|
||||
- `ejabberd_http`: Run new `http_request_handlers_init` fold hook
|
||||
- `ejabberd_http`: Add helper `get_auto_urls/2` that returns all URLs and TLS
|
||||
- `ejabberd_web_admin`: Add helper functions `make_menu_system`
|
||||
- `ejabberd_web_admin`: Show menu system only when can view vhosts
|
||||
- `ejabberd_web_admin`: Pass Level in `webadmin_menu_system_post` and `inside` hooks
|
||||
- `mod_conversejs`: Improve link to conversejs in WebAdmin ([#4495](https://github.com/processone/ejabberd/issues/4495))
|
||||
- When epmd isn't running show explanation in Clustering WebAdmin page
|
||||
- Use improved WebAdmin menu system in more modules
|
||||
- When building WebAdmin menu system, `{URLPATH}` in link text is substituted
|
||||
|
||||
#### Web Services
|
||||
|
||||
- `rest`: Use separate `httpc` profile
|
||||
- `ejabberd_captcha`: Use `mod_host_meta:get_auto_url/2`
|
||||
- `ejabberd_http`: Support repeated module in request_handlers
|
||||
- `ejabberd_http`: Get back handling when BOSH or WS are disabled
|
||||
- `mod_host_meta`: Move `get_url` functions from `mod_host_meta` to `ejabberd_http`
|
||||
- `mod_host_meta`: Allow calling `get_url/2` for other modules, not only WebSocket
|
||||
- `mod_host_meta`: Cosmetic rename Module to Handler
|
||||
- `mod_http_upload`: New `content_type` option similar to `mod_http_fileserver` ([#4488](https://github.com/processone/ejabberd/issues/4488))
|
||||
- `mod_http_upload`: Pass ServerHost, not Host which may be `"upload.HOST"`
|
||||
- `mod_http_upload`: Amend the fix for #4450 to support IDNA correctly ([#3519](https://github.com/processone/ejabberd/issues/3519))
|
||||
- `mod_http_fileserver`: Support map of paths in `docroot` option
|
||||
- `mod_conversejs`: Add new Conversejs Paths and ContentTypes ([#4511](https://github.com/processone/ejabberd/issues/4511))
|
||||
- `mod_conversejs`: Use ContentType functions from `mod_http_fileserver` ([#4511](https://github.com/processone/ejabberd/issues/4511))
|
||||
- Use `/websocket` URL in default configuration like `mod_conversejs`, it's more meaningful
|
||||
|
||||
#### Core and Modules
|
||||
|
||||
- Add `replaced_connection_timeout` toplevel option
|
||||
- Fix nasty SSL warnings ([#4475](https://github.com/processon4475e/ejabberd/issues/))
|
||||
- `ejabberd_commands`: Show meaningul error message when problem executing command ([#4506](https://github.com/processone/ejabberd/issues/4506))
|
||||
- `ejabberd_logger`: Append "color clean" only in console template, not file
|
||||
- `ejabberd_oauth`: Log error if `oauth_list_tokens` executed with unsupported DB ([#4506](https://github.com/processone/ejabberd/issues/4506))
|
||||
- `misc`: Get back functions and mark them as deprecated
|
||||
- `mod_adhoc_api`: Show nice command name, as WebAdmin already does
|
||||
- `mod_pubsub`: Deliver pubsub notifications to remote servers for nodes with presence based delivery
|
||||
- `mod_scram_update`: Don't hard-code iteration count
|
||||
- Bump many XEPs versions that are already supported
|
||||
- Improve documentation of `install_contrib_modules` ([#4487](https://github.com/processone/ejabberd/issues/4487))
|
||||
|
||||
## Version 25.10
|
||||
|
||||
#### Ad-hoc Commands
|
||||
|
||||
- `mod_configure`: New ad-hoc commands that were missing from XEP-0133
|
||||
- `mod_adhoc_api`: Add support for asynchronous command calling
|
||||
- `mod_adhoc_api`: If argument is a list of jids, type is `jid-multi`
|
||||
- `mod_adhoc_api`: If field has several values, type is `text-multi`
|
||||
|
||||
#### API Commands
|
||||
|
||||
- Add commands argument type `binary_or_list`
|
||||
- `mod_http_api`: Format sub elements for tuples from maps
|
||||
- `mod_admin_extra`: Improve roster API commands documentation
|
||||
- `mod_announce`: New API commands, reusing existing ad-hoc functions
|
||||
- `ejabberd_admin`: New API command `restart_kindly`, improve `stop_kindly`
|
||||
- `mod_admin_extra`: New API commands `list_banned` and `count_banned`
|
||||
- `mod_admin_extra`: Improve API command `status_list`: support for status to be a list
|
||||
- `mod_muc_admin`: New API commands `muc_get_registered_nick` and nicks ([#4468](https://github.com/processone/ejabberd/issues/4468))
|
||||
- Use `mod_private:del_data` in `unban_account` API command
|
||||
|
||||
#### Configuration
|
||||
|
||||
- Rename `New` SQL schema to `Multihost`, and `Default` to `Singlehost` ([#4456](https://github.com/processone/ejabberd/issues/4456))
|
||||
- Add config transformer from `use_new_schema` -> `sql_multihost_schema`
|
||||
- `mod_sip`: Fix problem parsing `via` in `yconf` library ([#4444](https://github.com/processone/ejabberd/issues/4444))
|
||||
|
||||
#### Erlang/OTP support
|
||||
|
||||
- Enable feature `maybe_expr` in the compiler for Erlang/OTP 26 ([#4459](https://github.com/processone/ejabberd/issues/4459))
|
||||
- Enable feature `maybe_expr` also in the runtime for Erlang/OTP 25
|
||||
- Runtime: Remove Erlang 24 which won't work anymore with `maybe_expr`
|
||||
- Remove `EX_RULE` and `EX_STACK` macros only used with ancient erlang
|
||||
|
||||
#### GitHub Workflows
|
||||
|
||||
- CI: Bump XMPP-Interop-Testing/xmpp-interop-tests-action ([#4469](https://github.com/processone/ejabberd/issues/4469))
|
||||
- CI: Don't care to include commit details in the CT logs HTML page
|
||||
- CI and Runtime: Reorganize steps to run in parallel, and ARM runner ([#4460](https://github.com/processone/ejabberd/issues/4460))
|
||||
- Add local composite actions to manage ejabberd and databases
|
||||
- Container: Build ARM in native runner instead of QEMU, merge and clean
|
||||
- Installers: Generate ARM installers in native runner
|
||||
- Tests: Run agnostic-database tests only once, not for every backend
|
||||
- Tests: The odbc backend is not actually used in Commont Tests
|
||||
- Weekly: New workflow that condenses CI, test all erlang without caching
|
||||
|
||||
#### Installers and Container
|
||||
|
||||
- Bump Erlang/OTP version to 27.3.4.3 in installers and container
|
||||
- Bump Expat 2.7.3, OpenSSL 3.5.4, unixODBC 2.3.14 in installers
|
||||
|
||||
#### MUC
|
||||
|
||||
- `mod_mam`: New option `archive_muc_as_mucsub`
|
||||
- `mod_muc`: Check if room is hibernated before calling mod_muc process
|
||||
- `mod_muc`: Update implementation of XEP-0317 Hats to version 0.3.1 ([#4380](https://github.com/processone/ejabberd/issues/4380))
|
||||
- `mod_muc`: Make mod_muc_sql properly handle new hats data ([#4380](https://github.com/processone/ejabberd/issues/4380))
|
||||
- `mod_muc_room`: Don't require password if user is owner of room
|
||||
- `mod_muc_admin`: Use in WebAdmin the new API commands that get nick registers
|
||||
|
||||
#### Core and Modules
|
||||
|
||||
- `ejabberd_http_ws`: Pass HTTP headers from WS to C2S connection ([#4471](https://github.com/processone/ejabberd/issues/4471))
|
||||
- `ejabberd_listener`: Properly pass `send_timeout` option to listener sockets
|
||||
- `ejabberdctl`: When ping returns pang, return also status code 1 ([#4327](https://github.com/processone/ejabberd/issues/4327))
|
||||
- `ext_mod`: Print module status message after installation
|
||||
- `misc`: json_encode should always call json with our filter
|
||||
- `mod_admin_update_sql`: Use same index name than when creating database
|
||||
- `mod_block_strangers`: Clarify `access` and `captcha` documentation ([#4221](https://github.com/processone/ejabberd/issues/4221))
|
||||
- `mod_http_upload`: Encode URL before parsing, as done before `bba1a1e3c` ([#4450](https://github.com/processone/ejabberd/issues/4450))
|
||||
- `mod_private`: Add `del_data/3`, `get_users_with_data/2`, `count_users_with_data/2`
|
||||
- `mod_pubsub`: Don't catch `exit:{aborted, _}` inside mnesia transactions
|
||||
- `mod_push`: Run new hook `push_send_notification` ([#4383](https://github.com/processone/ejabberd/issues/4383))
|
||||
- WebAdmin: Respect newline and whitespace characters in results
|
||||
|
||||
## Version 25.08
|
||||
|
||||
#### API Commands
|
||||
|
||||
@@ -28,7 +28,7 @@ Other optional libraries are:
|
||||
- PAM library, for Pluggable Authentication Modules (PAM)
|
||||
- ImageMagick's Convert program and Ghostscript fonts, for CAPTCHA
|
||||
challenges
|
||||
- Elixir ≥ 1.10.3, for Elixir support. It is recommended Elixir 1.14.0 or higher
|
||||
- Elixir ≥ 1.14.0, for Elixir support
|
||||
|
||||
If your system splits packages in libraries and development headers,
|
||||
install the development packages too.
|
||||
|
||||
@@ -105,7 +105,7 @@ Next steps
|
||||
|
||||
### Register admin account
|
||||
|
||||
#### [](https://github.com/processone/ejabberd/pkgs/container/ejabberd) [:orange_circle:](#images-comparison)
|
||||
#### [](https://github.com/processone/ejabberd/pkgs/container/ejabberd) [🔅](#images-comparison)
|
||||
|
||||
If you set the `REGISTER_ADMIN_PASSWORD` environment variable,
|
||||
an account is automatically registered with that password,
|
||||
@@ -118,10 +118,19 @@ The account created depends on what variables you have set:
|
||||
|
||||
The account registration is shown in the container log:
|
||||
|
||||
```bash
|
||||
$ podman run -it \
|
||||
--env EJABBERD_MACRO_HOST=example.org \
|
||||
--env EJABBERD_MACRO_ADMIN=juliet@example.org \
|
||||
--env REGISTER_ADMIN_PASSWORD=somePassw0rd \
|
||||
ghcr.io/processone/ejabberd
|
||||
|
||||
:> ejabberdctl register juliet example.org somePassw0rd
|
||||
User juliet@example.org successfully registered
|
||||
```
|
||||
:> ejabberdctl register admin example.org somePassw0rd
|
||||
User admin@example.org successfully registered
|
||||
```
|
||||
|
||||
This is implemented internally by using
|
||||
[Commands on start](#commands-on-start).
|
||||
|
||||
Alternatively, you can register the account manually yourself
|
||||
and edit `conf/ejabberd.yml` and add the ACL as explained in
|
||||
@@ -207,20 +216,21 @@ documentation section.
|
||||
Advanced
|
||||
--------
|
||||
|
||||
### Ports
|
||||
|
||||
### Ports 🟠
|
||||
The container image exposes several ports
|
||||
(check also [Docs: Firewall Settings](https://docs.ejabberd.im/admin/guide/security/#firewall-settings)):
|
||||
|
||||
- `5222`: The default port for XMPP clients.
|
||||
- `5269`: For XMPP federation. Only needed if you want to communicate with users on other servers.
|
||||
- `5280`: For admin interface (URL is `admin/`).
|
||||
- `1880`: For admin interface (URL is `/`, useful for [podman-desktop](https://podman-desktop.io/) and [docker-desktop](https://www.docker.com/products/docker-desktop/)) [:orange_circle:](#images-comparison)
|
||||
- `5443`: With encryption, used for admin interface, API, CAPTCHA, OAuth, Websockets and XMPP BOSH.
|
||||
- `1880`: For admin interface (URL is `/`, useful for [podman-desktop](https://podman-desktop.io/) and [docker-desktop](https://www.docker.com/products/docker-desktop/)) [🔅](#images-comparison)
|
||||
- `1883`: Used for MQTT
|
||||
- `5478` UDP: STUN service 🟠
|
||||
- `50000-50099` UDP: TURN service 🟠
|
||||
- `7777`: SOCKS5 file transfer proxy 🟠
|
||||
- `5210`: Erlang connectivity when `ERL_DIST_PORT` is set, alternative to EPMD [🔅](#images-comparison)
|
||||
- `4369-4399`: EPMD and Erlang connectivity, used for `ejabberdctl` and clustering
|
||||
- `5210`: Erlang connectivity when `ERL_DIST_PORT` is set, alternative to EPMD [:orange_circle:](#images-comparison)
|
||||
|
||||
|
||||
### Volumes
|
||||
|
||||
@@ -270,7 +280,10 @@ If any of those commands returns a failure, the container starting gets aborted.
|
||||
If there is a command with a result that can be ignored,
|
||||
prefix that command with `!`
|
||||
|
||||
This example, registers an `admin@localhost` account when the container is first created.
|
||||
All this works when starting ejabberd with the default method `foreground`,
|
||||
not when using `live`, `iexlive`, ...
|
||||
|
||||
This example registers an `admin@localhost` account when the container is first created.
|
||||
Everytime the container starts, it shows the list of registered accounts,
|
||||
checks that the admin account exists and password is valid,
|
||||
changes the password of an account if it exists (ignoring any failure),
|
||||
@@ -284,8 +297,37 @@ and shows the ejabberd starts (check also the [full example](#customized-example
|
||||
status
|
||||
```
|
||||
|
||||
Same example using Podman:
|
||||
```bash
|
||||
$ podman run -it \
|
||||
--env CTL_ON_CREATE="register admin localhost asd" \
|
||||
--env CTL_ON_START="stats registeredusers ; \
|
||||
check_password admin localhost asd ; \
|
||||
! change_password bot123 localhost qqq ; \
|
||||
status" \
|
||||
ghcr.io/processone/ejabberd
|
||||
|
||||
### Macros in environment [:high_brightness:](#images-comparison)
|
||||
...
|
||||
|
||||
:> ejabberdctl register admin localhost asd
|
||||
User admin@localhost successfully registered
|
||||
|
||||
:> ejabberdctl stats registeredusers
|
||||
1
|
||||
|
||||
:> ejabberdctl check_password admin localhost asd
|
||||
|
||||
:> ejabberdctl change_password bot123 localhost qqq
|
||||
{not_found,"unknown_user"}
|
||||
:> FAILURE in command 'change_password bot123 localhost qqq' !!! Ignoring result
|
||||
|
||||
:> ejabberdctl status
|
||||
The node ejabberd@localhost is started. Status: started
|
||||
ejabberd 25.10.0 is running in that node
|
||||
```
|
||||
|
||||
|
||||
### Macros in environment
|
||||
|
||||
ejabberd reads `EJABBERD_MACRO_*` environment variables
|
||||
and uses them to define the corresponding
|
||||
@@ -721,11 +763,10 @@ docker buildx build \
|
||||
|
||||
#### Podman build
|
||||
|
||||
To build the image using Podman, please notice:
|
||||
Some minor remarks:
|
||||
|
||||
- `EXPOSE 4369-4399` port range is not supported, remove that in Dockerfile
|
||||
- It mentions that `healthcheck` is not supported by the Open Container Initiative image format
|
||||
- to start with command `live`, you may want to add environment variable `EJABBERD_BYPASS_WARNINGS=true`
|
||||
- When building, it mentions that `healthcheck` is not supported by the Open Container Initiative image format
|
||||
- To start with command `live`, you may want to add environment variable `EJABBERD_BYPASS_WARNINGS=true`
|
||||
|
||||
```bash
|
||||
podman build \
|
||||
@@ -1061,10 +1102,10 @@ Images Comparison
|
||||
|
||||
Let's summarize the differences between both container images. Legend:
|
||||
|
||||
- :sparkle: is the recommended alternative
|
||||
- :orange_circle: added in the latest release (ejabberd 25.03)
|
||||
- :high_brightness: added in the previous release (ejabberd 24.12)
|
||||
- :low_brightness: added in the pre-previous release (ejabberd 24.10)
|
||||
- ❇️: is the recommended alternative
|
||||
- 🟠: changed in ejabberd 26.01
|
||||
- 🔆: changed in ...
|
||||
- 🔅: changed in ejabberd 25.03
|
||||
|
||||
| | [](https://github.com/processone/ejabberd/pkgs/container/ejabberd) | [](https://hub.docker.com/r/ejabberd/ecs/) |
|
||||
|:----------------------|:------------------|:-----------------------|
|
||||
@@ -1072,24 +1113,24 @@ Let's summarize the differences between both container images. Legend:
|
||||
| Generated by | [container.yml](https://github.com/processone/ejabberd/blob/master/.github/workflows/container.yml) | [tests.yml](https://github.com/processone/docker-ejabberd/blob/master/.github/workflows/tests.yml) |
|
||||
| Built for | stable releases <br /> `master` branch | stable releases <br /> [`master` branch zip](https://github.com/processone/docker-ejabberd/actions/workflows/tests.yml) |
|
||||
| Architectures | `linux/amd64` <br /> `linux/arm64` | `linux/amd64` |
|
||||
| Software | Erlang/OTP 27.3.4.2-alpine <br /> Elixir 1.18.4 | Alpine 3.19 <br /> Erlang/OTP 26.2 <br /> Elixir 1.15.7 |
|
||||
| Software | Erlang/OTP 28.4.1.0-alpine 🟠 <br /> Elixir 1.19.5 🟠 | Alpine 3.22 <br /> Erlang/OTP 26.2 <br /> Elixir 1.18.3 |
|
||||
| Published in | [ghcr.io/processone/ejabberd](https://github.com/processone/ejabberd/pkgs/container/ejabberd) | [docker.io/ejabberd/ecs](https://hub.docker.com/r/ejabberd/ecs/) <br /> [ghcr.io/processone/ecs](https://github.com/processone/docker-ejabberd/pkgs/container/ecs) |
|
||||
| :black_square_button: **Additional content** |
|
||||
| [ejabberd-contrib](#ejabberd-contrib) | included | not included |
|
||||
| [ejabberdapi](#ejabberdapi) | included :orange_circle: | included |
|
||||
| [ejabberdapi](#ejabberdapi) | included 🔅 | included |
|
||||
| :black_square_button: **Ports** |
|
||||
| [1880](#ports) for WebAdmin | yes :orange_circle: | yes :orange_circle: |
|
||||
| [5210](#ports) for `ERL_DIST_PORT` | supported | supported :orange_circle: |
|
||||
| [1880](#ports) for WebAdmin | yes 🔅 | yes 🔅 |
|
||||
| [5210](#ports) for `ERL_DIST_PORT` | supported | supported 🔅 |
|
||||
| :black_square_button: **Paths** |
|
||||
| `$HOME` | `/opt/ejabberd/` | `/home/ejabberd/` |
|
||||
| User data | `$HOME` :sparkle: <br /> `/home/ejabberd/` :orange_circle: | `$HOME` <br /> `/opt/ejabberd/` :sparkle: :low_brightness: |
|
||||
| `ejabberdctl` | `ejabberdctl` :sparkle: <br /> `bin/ejabberdctl` :orange_circle: | `bin/ejabberdctl` <br /> `ejabberdctl` :sparkle: :low_brightness: |
|
||||
| [`captcha.sh`](#captcha) | `$HOME/bin/captcha.sh` :orange_circle: | `$HOME/bin/captcha.sh` :orange_circle: |
|
||||
| `*.sql` files | `$HOME/sql/*.sql` :sparkle: :orange_circle: <br /> `$HOME/database/*.sql` :orange_circle: | `$HOME/database/*.sql` <br /> `$HOME/sql/*.sql` :sparkle: :orange_circle: |
|
||||
| Mnesia spool files | `$HOME/database/` :sparkle: <br /> `$HOME/database/NODENAME/` :orange_circle: | `$HOME/database/NODENAME/` <br /> `$HOME/database/` :sparkle: :orange_circle: |
|
||||
| User data | `$HOME` ❇️ <br /> `/home/ejabberd/` 🔅 | `$HOME` <br /> `/opt/ejabberd/` ❇️ |
|
||||
| `ejabberdctl` | `ejabberdctl` ❇️ <br /> `bin/ejabberdctl` 🔅 | `bin/ejabberdctl` <br /> `ejabberdctl` ❇️ |
|
||||
| [`captcha.sh`](#captcha) | `$HOME/bin/captcha.sh` 🔅 | `$HOME/bin/captcha.sh` 🔅 |
|
||||
| `*.sql` files | `$HOME/sql/*.sql` ❇️ 🔅 <br /> `$HOME/database/*.sql` 🔅 | `$HOME/database/*.sql` <br /> `$HOME/sql/*.sql` ❇️ 🔅 |
|
||||
| Mnesia spool files | `$HOME/database/` ❇️ <br /> `$HOME/database/NODENAME/` 🔅 | `$HOME/database/NODENAME/` <br /> `$HOME/database/` ❇️ 🔅 |
|
||||
| :black_square_button: **Variables** |
|
||||
| [`EJABBERD_MACRO_*`](#macros-in-environment) | supported :high_brightness: | supported :high_brightness: |
|
||||
| Macros used in `ejabberd.yml` | yes :orange_circle: | yes :orange_circle: |
|
||||
| [`EJABBERD_MACRO_ADMIN`](#register-admin-account) | Grant admin rights :orange_circle: <br /> (default `admin@localhost`) <br /> | Hardcoded `admin@localhost` |
|
||||
| [`REGISTER_ADMIN_PASSWORD`](#register-admin-account) | Register admin account :orange_circle: | unsupported |
|
||||
| `CTL_OVER_HTTP` | enabled :orange_circle: | unsupported |
|
||||
| [`EJABBERD_MACRO_*`](#macros-in-environment) | supported | supported |
|
||||
| Macros used in `ejabberd.yml` | yes 🔅 | yes 🔅 |
|
||||
| [`EJABBERD_MACRO_ADMIN`](#register-admin-account) | Grant admin rights 🔅 <br /> (default `admin@localhost`) <br /> | Hardcoded `admin@localhost` |
|
||||
| [`REGISTER_ADMIN_PASSWORD`](#register-admin-account) | Register admin account 🔅 | unsupported |
|
||||
| `CTL_OVER_HTTP` | enabled 🔅 | unsupported |
|
||||
|
||||
@@ -26,6 +26,7 @@ We would like to thanks official ejabberd source code contributors:
|
||||
- Sonny Scroggin
|
||||
- Alexey Shchepin
|
||||
- Shelley Shyan
|
||||
- Stefan Strigler
|
||||
- Radoslaw Szymczyszyn
|
||||
- Stu Tomlinson
|
||||
- Christian Ulrich
|
||||
|
||||
@@ -2,8 +2,11 @@
|
||||
#' definitions
|
||||
#
|
||||
|
||||
# Only required for Erlang/OTP 25
|
||||
MAYBE=ERL_FLAGS="-enable-feature maybe_expr"
|
||||
|
||||
ESCRIPT = @ESCRIPT@
|
||||
REBAR = @rebar@ # rebar|rebar3|mix binary (or path to binary)
|
||||
REBAR = $(MAYBE) @rebar@ # rebar|rebar3|mix binary (or path to binary)
|
||||
REBAR3 = @REBAR3@ # path to rebar3 binary
|
||||
MIX = @rebar@
|
||||
AWK = @AWK@
|
||||
@@ -123,7 +126,7 @@ REBAR_VER_318:=$(shell $(REBAR) --version | $(AWK) -F '[ .]' '/rebar / {print ($
|
||||
endif
|
||||
|
||||
ifeq "$(REBAR_VER)" "6"
|
||||
REBAR=$(MIX)
|
||||
REBAR=$(MAYBE) $(MIX)
|
||||
SKIPDEPS=
|
||||
LISTDEPS=deps.tree
|
||||
UPDATEDEPS=deps.update
|
||||
@@ -141,7 +144,8 @@ ifeq "$(REBAR_VER)" "6"
|
||||
ELIXIR_LIBDIR=":$(ELIXIR_LIBDIR_RAW)"
|
||||
REBARREL=MIX_ENV=prod $(REBAR) release --overwrite
|
||||
REBARDEV=MIX_ENV=dev $(REBAR) release --overwrite
|
||||
RELIVECMD=$(ESCRIPT) rel/relive.escript && MIX_ENV=dev RELIVE=true $(IEX) --name ejabberd@localhost -S mix run
|
||||
RELIVECMD=$(ESCRIPT) rel/relive.escript && MIX_ENV=dev RELIVE=true $(MAYBE) $(IEX) --name ejabberd@localhost -S mix run
|
||||
RELIVECTLCMD=$(ESCRIPT) rel/relive.escript ctl && _build/relivectl/ejabberdctl live
|
||||
REL_LIB_DIR = _build/dev/rel/ejabberd/lib
|
||||
COPY_REL_TARGET = dev
|
||||
GET_DEPS_TRANSLATIONS=MIX_ENV=translations $(REBAR) $(GET_DEPS)
|
||||
@@ -173,6 +177,7 @@ endif
|
||||
REBARREL=$(REBAR) as prod tar
|
||||
REBARDEV=$(REBAR) as dev release
|
||||
RELIVECMD=$(REBAR) as dev relive
|
||||
RELIVECTLCMD=$(ESCRIPT) rel/relive.escript ctl && _build/relivectl/ejabberdctl live
|
||||
REL_LIB_DIR = _build/dev/rel/ejabberd/lib
|
||||
COPY_REL_TARGET = dev
|
||||
GET_DEPS_TRANSLATIONS=$(REBAR) as translations $(GET_DEPS)
|
||||
@@ -190,9 +195,12 @@ else
|
||||
XREFOPTIONS=
|
||||
CLEANARG=
|
||||
REBARREL=$(REBAR) generate
|
||||
REBARDEV=
|
||||
REBARDEV=@echo "Rebar2 detected... dev not supported.\
|
||||
\nTry: make prod, or: ./configure --with-rebar=rebar3 ; make dev"
|
||||
RELIVECMD=@echo "Rebar2 detected... relive not supported.\
|
||||
\nTry: ./configure --with-rebar=rebar3 ; make relive"
|
||||
\nTry: ./configure --with-rebar=rebar3 ; make relive"
|
||||
RELIVECTLCMD=@echo "Rebar2 detected... relivectl not supported.\
|
||||
\nTry: ./configure --with-rebar=rebar3 ; make relivectl"
|
||||
REL_LIB_DIR = rel/ejabberd/lib
|
||||
COPY_REL_TARGET = rel
|
||||
endif
|
||||
@@ -204,7 +212,7 @@ endif
|
||||
|
||||
all: scripts deps src
|
||||
|
||||
deps: $(DEPSDIR)/.got
|
||||
deps: $(DEPSDIR)/.got invites-deps
|
||||
|
||||
$(DEPSDIR)/.got:
|
||||
rm -rf $(DEPSDIR)/.got
|
||||
@@ -216,6 +224,19 @@ $(DEPSDIR)/.got:
|
||||
$(DEPSDIR)/.built: $(DEPSDIR)/.got
|
||||
$(REBAR) compile && :> $(DEPSDIR)/.built
|
||||
|
||||
ifeq (, $(shell which npm))
|
||||
INSTALL_INVITES_DEPS=tools/dl_invites_page_deps.sh priv/mod_invites/static
|
||||
else
|
||||
INSTALL_INVITES_DEPS=npm install
|
||||
endif
|
||||
|
||||
invites-deps: priv/mod_invites/static/bootstrap/ priv/mod_invites/static/jquery/
|
||||
|
||||
priv/mod_invites/static/bootstrap/:
|
||||
$(INSTALL_INVITES_DEPS)
|
||||
priv/mod_invites/static/jquery/:
|
||||
$(INSTALL_INVITES_DEPS)
|
||||
|
||||
src: $(DEPSDIR)/.built
|
||||
$(REBAR) $(SKIPDEPS) compile
|
||||
$(EXPLICIT_ELIXIR_COMPILE)
|
||||
@@ -226,13 +247,13 @@ update:
|
||||
$(REBAR) $(UPDATEDEPS) && :> $(DEPSDIR)/.got
|
||||
$(CONFIGURE_DEPS)
|
||||
|
||||
xref: all
|
||||
xref: src
|
||||
$(REBAR) $(SKIPDEPS) xref $(XREFOPTIONS)
|
||||
|
||||
hooks: all
|
||||
hooks: src
|
||||
tools/hook_deps.sh $(EBINDIR)
|
||||
|
||||
options: all
|
||||
options: src
|
||||
tools/opt_types.sh ejabberd_option $(EBINDIR)
|
||||
|
||||
translations:
|
||||
@@ -303,8 +324,9 @@ BINARIES=$(DEPSDIR)/epam/priv/bin/epam $(DEPSDIR)/eimp/priv/bin/eimp $(DEPSDIR)/
|
||||
DEPS_FILES_FILTERED=$(filter-out $(BINARIES) $(DEPSDIR)/elixir/ebin/elixir.app,$(DEPS_FILES))
|
||||
DEPS_DIRS=$(sort $(DEPSDIR)/ $(foreach DEP,$(DEPS),$(DEPSDIR)/$(DEP)/) $(dir $(DEPS_FILES)))
|
||||
|
||||
MAIN_FILES=$(filter-out %/configure.beam,$(call FILES_WILDCARD,$(EBINDIR)/*.beam $(EBINDIR)/*.app priv/msgs/*.msg priv/css/*.css priv/img/*.png priv/js/*.js priv/lib/* include/*.hrl COPYING))
|
||||
MAIN_DIRS=$(sort $(dir $(MAIN_FILES)) priv/bin priv/sql priv/lua)
|
||||
MAIN_FILES=$(filter-out %/configure.beam,$(call FILES_WILDCARD,$(EBINDIR)/*.beam $(EBINDIR)/*.app priv/msgs/*.msg priv/css/*.css priv/img/*.png priv/js/*.js priv/lib/* priv/mod_invites/* priv/mod_invites/static/* priv/mod_invites/static/bootstrap/css/bootstrap.min.css priv/mod_invites/static/bootstrap/js/bootstrap.min.js priv/mod_invites/static/jquery/jquery.min.js \
|
||||
priv/mod_invites/static/logos/* include/*.hrl COPYING))
|
||||
MAIN_DIRS=$(sort $(dir $(MAIN_FILES)) priv/bin priv/sql priv/lua priv/mod_invites)
|
||||
|
||||
define DEP_VERSION_template
|
||||
DEP_$(1)_VERSION:=$(shell $(SED) -e '/vsn/!d;s/.*, *"/$(1)-/;s/".*//' $(2) 2>/dev/null)
|
||||
@@ -392,28 +414,30 @@ relive:
|
||||
$(EXPLICIT_ELIXIR_COMPILE_DEV)
|
||||
$(RELIVECMD)
|
||||
|
||||
relivectl:
|
||||
$(EXPLICIT_ELIXIR_COMPILE_DEV)
|
||||
$(RELIVECTLCMD)
|
||||
|
||||
relivelibdir=$(shell pwd)/$(DEPSDIR)
|
||||
relivedir=$(shell pwd)/_build/relive
|
||||
CONFIG_DIR = ${relivedir}/conf
|
||||
SPOOL_DIR = ${relivedir}/database
|
||||
LOGS_DIR = ${relivedir}/logs
|
||||
relivebase=$(shell pwd)/$(DEPSBASE)
|
||||
|
||||
#.
|
||||
#' scripts
|
||||
#
|
||||
|
||||
ejabberdctl.relive:
|
||||
# Used for ejabberdctl.relive and ejabberdctl.relivectl
|
||||
ejabberdctl.re%:
|
||||
$(SED) -e "s*{{installuser}}*${INSTALLUSER}*g" \
|
||||
-e "s*{{config_dir}}*${CONFIG_DIR}*g" \
|
||||
-e "s*{{logs_dir}}*${LOGS_DIR}*g" \
|
||||
-e "s*{{spool_dir}}*${SPOOL_DIR}*g" \
|
||||
-e "s*{{config_dir}}*${relivebase}/re${*}/conf*g" \
|
||||
-e "s*{{logs_dir}}*${relivebase}/re${*}/logs*g" \
|
||||
-e "s*{{spool_dir}}*${relivebase}/re${*}/database*g" \
|
||||
-e "s*{{bindir}}*${BINDIR}*g" \
|
||||
-e "s*{{libdir}}*${relivelibdir}${ELIXIR_LIBDIR}*g" \
|
||||
-e "s*ERTS_VSN*# ERTS_VSN*g" \
|
||||
-e "s*{{iexpath}}*${IEX}*g" \
|
||||
-e "s*{{erl}}*${ERL}*g" \
|
||||
-e "s*{{epmd}}*${EPMD}*g" ejabberdctl.template \
|
||||
> ejabberdctl.relive
|
||||
> ejabberdctl.re${*}
|
||||
|
||||
ejabberd.init:
|
||||
$(SED) -e "s*@ctlscriptpath@*$(SBINDIR)*g" \
|
||||
@@ -543,6 +567,7 @@ clean:
|
||||
rm -rf test/*.beam
|
||||
rm -f rebar.lock
|
||||
rm -f ejabberdctl.example ejabberd.init ejabberd.service
|
||||
rm -rf priv/mod_invites/static/{jquery,bootstrap4}
|
||||
$(REBAR) clean $(CLEANARG)
|
||||
|
||||
clean-rel:
|
||||
@@ -672,7 +697,7 @@ group_to_test := $(patsubst test-%,%,$(filter test-%,$(MAKECMDGOALS)))
|
||||
$(eval $(call test-group-target,$(group_to_test)))
|
||||
endif
|
||||
|
||||
test-eunit:
|
||||
testeunit:
|
||||
$(REBAR) $(SKIPDEPS) eunit --verbose
|
||||
|
||||
#.
|
||||
@@ -680,7 +705,7 @@ test-eunit:
|
||||
#
|
||||
|
||||
.PHONY: src edoc dialyzer Makefile TAGS clean clean-rel distclean prod rel \
|
||||
install uninstall uninstall-binary uninstall-all translations deps test test-eunit \
|
||||
install uninstall uninstall-binary uninstall-all translations deps test testeunit \
|
||||
all dev doap help install-rel relive scripts uninstall-rel update \
|
||||
erlang_plt deps_plt ejabberd_plt xref hooks options format indent
|
||||
|
||||
@@ -706,7 +731,8 @@ help:
|
||||
@echo ""
|
||||
@echo " prod Build a production release"
|
||||
@echo " dev Build a development release"
|
||||
@echo " relive Start a live ejabberd in _build/relive/"
|
||||
@echo " relive Start live using rebar3/mix tools"
|
||||
@echo " relivectl Start live using ejabberdctl script"
|
||||
@echo ""
|
||||
@echo " doap Generate DOAP file"
|
||||
@echo " edoc Generate EDoc documentation [mix]"
|
||||
@@ -721,7 +747,7 @@ help:
|
||||
@echo " elvis Run Elvis source code style reviewer [rebar3]"
|
||||
@echo " hooks Run hooks validator"
|
||||
@echo " test Run Common Tests suite [rebar3]"
|
||||
@echo " test-eunit Run EUnit suite [rebar3]"
|
||||
@echo " testeunit Run EUnit suite [rebar3]"
|
||||
@echo " test-<group> Run Common Test suite for specific group only [rebar3]"
|
||||
@echo " xref Run cross reference analysis [rebar3]"
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
# Process this file with autoconf to produce a configure script.
|
||||
|
||||
AC_PREREQ(2.59)
|
||||
AC_INIT(ejabberd, m4_esyscmd([echo `git describe --tags 2>/dev/null || echo 25.08` | sed 's/-g.*//;s/-/./' | tr -d '\012']), [ejabberd@process-one.net], [ejabberd])
|
||||
AC_INIT(ejabberd, m4_esyscmd([echo `git describe --tags 2>/dev/null || echo 26.03` | sed 's/-g.*//;s/-/./' | tr -d '\012']), [ejabberd@process-one.net], [ejabberd])
|
||||
|
||||
AC_ARG_WITH(min-erlang,
|
||||
AS_HELP_STRING([--with-min-erlang=version],[set minimal required erlang version, default to OTP25]),
|
||||
@@ -192,12 +192,20 @@ AC_ARG_ENABLE(mysql,
|
||||
esac],[if test "x$mysql" = "x"; then mysql=false; fi])
|
||||
|
||||
AC_ARG_ENABLE(new_sql_schema,
|
||||
[AS_HELP_STRING([--enable-new-sql-schema],[use new SQL schema by default (default: no)])],
|
||||
[AS_HELP_STRING([--enable-new-sql-schema],[obsolete, use --enable-multihost-sql-schema instead (default: no)])],
|
||||
[case "${enableval}" in
|
||||
yes) new_sql_schema=true ;;
|
||||
no) new_sql_schema=false ;;
|
||||
yes) multihost_sql_schema=true ;;
|
||||
no) multihost_sql_schema=false ;;
|
||||
*) AC_MSG_ERROR(bad value ${enableval} for --enable-new-sql-schema) ;;
|
||||
esac],[new_sql_schema=false])
|
||||
esac],[multihost_sql_schema=false])
|
||||
|
||||
AC_ARG_ENABLE(multihost_sql_schema,
|
||||
[AS_HELP_STRING([--enable-multihost-sql-schema],[use multihost SQL schema by default (default: no)])],
|
||||
[case "${enableval}" in
|
||||
yes) multihost_sql_schema=true ;;
|
||||
no) multihost_sql_schema=false ;;
|
||||
*) AC_MSG_ERROR(bad value ${enableval} for --enable-multihost-sql-schema) ;;
|
||||
esac],[multihost_sql_schema=false])
|
||||
|
||||
AC_ARG_ENABLE(odbc,
|
||||
[AS_HELP_STRING([--enable-odbc],[enable pure ODBC support (default: no)])],
|
||||
@@ -318,7 +326,7 @@ esac
|
||||
AC_MSG_RESULT([build tool to use (change using --with-rebar): $rebar])
|
||||
|
||||
AC_SUBST(roster_gateway_workaround)
|
||||
AC_SUBST(new_sql_schema)
|
||||
AC_SUBST(multihost_sql_schema)
|
||||
AC_SUBST(full_xml)
|
||||
AC_SUBST(odbc)
|
||||
AC_SUBST(mssql)
|
||||
@@ -359,9 +367,7 @@ AS_CASE([$rebar],
|
||||
$rebar unlock "$deps"])
|
||||
deps=""
|
||||
ERLANG_VERSION=m4_esyscmd([erl -noinput -noshell -eval 'erlang:display(list_to_integer(erlang:system_info(otp_release))), halt().'])
|
||||
AS_IF([test "$ERLANG_VERSION" -lt "21"], [deps="luerl,$deps"])
|
||||
AS_IF([test "$ERLANG_VERSION" -lt "22"], [deps="lager,$deps"])
|
||||
AS_IF([test "$ERLANG_VERSION" -le "23"], [deps="jose,$deps"])
|
||||
AS_IF([test "$ERLANG_VERSION" -le "26"], [deps="jose,$deps"])
|
||||
AS_IF([test "$ERLANG_VERSION" -ge "27"], [deps="jiffy,$deps"])
|
||||
AS_IF([test "x$deps" = "x"], [],
|
||||
[AC_MSG_NOTICE([unlocking rebar3 dependencies for old Erlang/OTP: $deps])
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0004.html"/>
|
||||
<xmpp:version>2.9</xmpp:version>
|
||||
<xmpp:version>2.13.2</xmpp:version>
|
||||
<xmpp:since>0.5.0</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note></xmpp:note>
|
||||
@@ -65,7 +65,7 @@
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0013.html"/>
|
||||
<xmpp:version>1.2</xmpp:version>
|
||||
<xmpp:version>1.3</xmpp:version>
|
||||
<xmpp:since>16.02</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_offline</xmpp:note>
|
||||
@@ -74,7 +74,7 @@
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0016.html"/>
|
||||
<xmpp:version>1.6</xmpp:version>
|
||||
<xmpp:version>1.7</xmpp:version>
|
||||
<xmpp:since>0.5.0</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_privacy</xmpp:note>
|
||||
@@ -101,7 +101,7 @@
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0030.html"/>
|
||||
<xmpp:version>2.4</xmpp:version>
|
||||
<xmpp:version>2.5.0</xmpp:version>
|
||||
<xmpp:since>0.1.0</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_disco</xmpp:note>
|
||||
@@ -128,7 +128,7 @@
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0045.html"/>
|
||||
<xmpp:version>1.25</xmpp:version>
|
||||
<xmpp:version>1.35.3</xmpp:version>
|
||||
<xmpp:since>0.5.0</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_muc</xmpp:note>
|
||||
@@ -155,7 +155,7 @@
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0050.html"/>
|
||||
<xmpp:version>1.2</xmpp:version>
|
||||
<xmpp:version>1.3.0</xmpp:version>
|
||||
<xmpp:since>1.1.0</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_adhoc</xmpp:note>
|
||||
@@ -164,7 +164,7 @@
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0054.html"/>
|
||||
<xmpp:version>1.2</xmpp:version>
|
||||
<xmpp:version>1.3.0</xmpp:version>
|
||||
<xmpp:since>0.1.0</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_vcard</xmpp:note>
|
||||
@@ -200,7 +200,7 @@
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0065.html"/>
|
||||
<xmpp:version>1.8</xmpp:version>
|
||||
<xmpp:version>1.8.2</xmpp:version>
|
||||
<xmpp:since>2.0.0</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_proxy65</xmpp:note>
|
||||
@@ -263,7 +263,7 @@
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0106.html"/>
|
||||
<xmpp:version>1.1</xmpp:version>
|
||||
<xmpp:version>1.1.1</xmpp:version>
|
||||
<xmpp:since>0.5.0</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note></xmpp:note>
|
||||
@@ -281,7 +281,7 @@
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0115.html"/>
|
||||
<xmpp:version>1.5</xmpp:version>
|
||||
<xmpp:version>1.6.0</xmpp:version>
|
||||
<xmpp:since>2.1.4</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_caps</xmpp:note>
|
||||
@@ -290,7 +290,7 @@
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0124.html"/>
|
||||
<xmpp:version>1.11</xmpp:version>
|
||||
<xmpp:version>1.11.2</xmpp:version>
|
||||
<xmpp:since>16.12</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>ejabberd_bosh</xmpp:note>
|
||||
@@ -299,7 +299,7 @@
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0133.html"/>
|
||||
<xmpp:version>1.3.0</xmpp:version>
|
||||
<xmpp:version>1.3.1</xmpp:version>
|
||||
<xmpp:since>13.10</xmpp:since>
|
||||
<xmpp:status>partial</xmpp:status>
|
||||
<xmpp:note>mod_configure</xmpp:note>
|
||||
@@ -317,7 +317,7 @@
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0153.html"/>
|
||||
<xmpp:version>1.1</xmpp:version>
|
||||
<xmpp:version>1.1.1</xmpp:version>
|
||||
<xmpp:since>17.09</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_vcard</xmpp:note>
|
||||
@@ -335,7 +335,7 @@
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0157.html"/>
|
||||
<xmpp:version>1.0</xmpp:version>
|
||||
<xmpp:version>1.1.1</xmpp:version>
|
||||
<xmpp:since>2.1.0</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_disco</xmpp:note>
|
||||
@@ -344,7 +344,7 @@
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0158.html"/>
|
||||
<xmpp:version>1.0</xmpp:version>
|
||||
<xmpp:version>1.0.1</xmpp:version>
|
||||
<xmpp:since>2.1.0</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>ejabberd_captcha</xmpp:note>
|
||||
@@ -353,7 +353,7 @@
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0160.html"/>
|
||||
<xmpp:version>1.0</xmpp:version>
|
||||
<xmpp:version>1.0.1</xmpp:version>
|
||||
<xmpp:since>16.01</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_offline</xmpp:note>
|
||||
@@ -362,7 +362,7 @@
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0163.html"/>
|
||||
<xmpp:version>1.2</xmpp:version>
|
||||
<xmpp:version>1.2.2</xmpp:version>
|
||||
<xmpp:since>2.0.0</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_pubsub</xmpp:note>
|
||||
@@ -389,7 +389,7 @@
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0178.html"/>
|
||||
<xmpp:version>1.1</xmpp:version>
|
||||
<xmpp:version>1.2</xmpp:version>
|
||||
<xmpp:since>17.03</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note></xmpp:note>
|
||||
@@ -407,7 +407,7 @@
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0191.html"/>
|
||||
<xmpp:version>1.2</xmpp:version>
|
||||
<xmpp:version>1.3</xmpp:version>
|
||||
<xmpp:since>2.1.7</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_blocking</xmpp:note>
|
||||
@@ -425,7 +425,7 @@
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0199.html"/>
|
||||
<xmpp:version>2.0</xmpp:version>
|
||||
<xmpp:version>2.0.1</xmpp:version>
|
||||
<xmpp:since>2.1.0</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_ping</xmpp:note>
|
||||
@@ -452,7 +452,7 @@
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0205.html"/>
|
||||
<xmpp:version>1.0</xmpp:version>
|
||||
<xmpp:version>1.0.2</xmpp:version>
|
||||
<xmpp:since>1.1.2</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note></xmpp:note>
|
||||
@@ -470,7 +470,7 @@
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0215.html"/>
|
||||
<xmpp:version>0.7</xmpp:version>
|
||||
<xmpp:version>1.0.0</xmpp:version>
|
||||
<xmpp:since>20.04</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_stun_disco</xmpp:note>
|
||||
@@ -506,7 +506,7 @@
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0231.html"/>
|
||||
<xmpp:version>1.0</xmpp:version>
|
||||
<xmpp:version>1.1</xmpp:version>
|
||||
<xmpp:since>2.1.0</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>ejabberd_captcha</xmpp:note>
|
||||
@@ -578,10 +578,10 @@
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0317.html"/>
|
||||
<xmpp:version>0.2.0</xmpp:version>
|
||||
<xmpp:version>0.3.1</xmpp:version>
|
||||
<xmpp:since>21.12</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_muc_room, 0.2.0 since 25.03</xmpp:note>
|
||||
<xmpp:note>mod_muc_room, 0.3.1 since 25.10</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
@@ -596,7 +596,7 @@
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0334.html"/>
|
||||
<xmpp:version>0.2</xmpp:version>
|
||||
<xmpp:version>1.0.0</xmpp:version>
|
||||
<xmpp:since>16.01</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_mam, mod_muc_log, mod_offline</xmpp:note>
|
||||
@@ -632,7 +632,7 @@
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0357.html"/>
|
||||
<xmpp:version>0.2</xmpp:version>
|
||||
<xmpp:version>0.4.1</xmpp:version>
|
||||
<xmpp:since>17.08</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_push</xmpp:note>
|
||||
@@ -641,7 +641,7 @@
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0359.html"/>
|
||||
<xmpp:version>0.5.0</xmpp:version>
|
||||
<xmpp:version>0.7.0</xmpp:version>
|
||||
<xmpp:since>15.09</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_mam</xmpp:note>
|
||||
@@ -674,10 +674,19 @@
|
||||
<xmpp:note>mod_mix</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0379.html"/>
|
||||
<xmpp:version>0.3.3</xmpp:version>
|
||||
<xmpp:since>26.01</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_invites</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0384.html"/>
|
||||
<xmpp:version>0.8.3</xmpp:version>
|
||||
<xmpp:version>0.9.0</xmpp:version>
|
||||
<xmpp:since>21.12</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>node_pep</xmpp:note>
|
||||
@@ -695,7 +704,7 @@
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0388.html"/>
|
||||
<xmpp:version>0.4.0</xmpp:version>
|
||||
<xmpp:version>1.0.4</xmpp:version>
|
||||
<xmpp:since>24.02</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note></xmpp:note>
|
||||
@@ -704,16 +713,25 @@
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0398.html"/>
|
||||
<xmpp:version>0.2.0</xmpp:version>
|
||||
<xmpp:version>1.0.0</xmpp:version>
|
||||
<xmpp:since>18.03</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_avatar</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0401.html"/>
|
||||
<xmpp:version>0.5.0</xmpp:version>
|
||||
<xmpp:since>26.01</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_invites</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0402.html"/>
|
||||
<xmpp:version>1.1.3</xmpp:version>
|
||||
<xmpp:version>1.2.0</xmpp:version>
|
||||
<xmpp:since>23.10</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_private</xmpp:note>
|
||||
@@ -740,7 +758,7 @@
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0411.html"/>
|
||||
<xmpp:version>0.2.0</xmpp:version>
|
||||
<xmpp:version>1.1.0</xmpp:version>
|
||||
<xmpp:since>18.12</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_private</xmpp:note>
|
||||
@@ -749,10 +767,10 @@
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0421.html"/>
|
||||
<xmpp:version>0.1.0</xmpp:version>
|
||||
<xmpp:version>1.0.1</xmpp:version>
|
||||
<xmpp:since>23.10</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_muc_occupantid</xmpp:note>
|
||||
<xmpp:note>mod_muc</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
@@ -785,7 +803,7 @@
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0440.html"/>
|
||||
<xmpp:version>0.4.0</xmpp:version>
|
||||
<xmpp:version>1.0.0</xmpp:version>
|
||||
<xmpp:since>24.02</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note></xmpp:note>
|
||||
@@ -800,10 +818,19 @@
|
||||
<xmpp:note>mod_mam</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0445.html"/>
|
||||
<xmpp:version>0.2.0</xmpp:version>
|
||||
<xmpp:since>26.01</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_invites</xmpp:note>
|
||||
</xmpp:SupportedXep>
|
||||
</implements>
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0474.html"/>
|
||||
<xmpp:version>0.4.0</xmpp:version>
|
||||
<xmpp:version>0.5.0</xmpp:version>
|
||||
<xmpp:since>24.02</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>, 0.4.0 since 25.03</xmpp:note>
|
||||
@@ -830,7 +857,7 @@
|
||||
<implements>
|
||||
<xmpp:SupportedXep>
|
||||
<xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0485.html"/>
|
||||
<xmpp:version>0.1.1</xmpp:version>
|
||||
<xmpp:version>1.0.0</xmpp:version>
|
||||
<xmpp:since>25.07</xmpp:since>
|
||||
<xmpp:status>complete</xmpp:status>
|
||||
<xmpp:note>mod_pubsub_serverinfo</xmpp:note>
|
||||
|
||||
@@ -205,7 +205,6 @@ modules:
|
||||
default_room_options:
|
||||
mam: true
|
||||
mod_muc_admin: {}
|
||||
mod_muc_occupantid: {}
|
||||
mod_offline:
|
||||
access_max_user_messages: max_user_offline_messages
|
||||
mod_ping: {}
|
||||
|
||||
@@ -24,18 +24,6 @@
|
||||
#
|
||||
#ERL_MAX_PORTS=65536
|
||||
|
||||
#.
|
||||
#' FIREWALL_WINDOW: Range of allowed ports to pass through a firewall
|
||||
#
|
||||
# If ejabberd is configured to run in cluster, and a firewall is blocking ports,
|
||||
# it's possible to make Erlang use a defined range of port (instead of dynamic
|
||||
# ports) for node communication.
|
||||
#
|
||||
# Default: not defined
|
||||
# Example: 4200-4210
|
||||
#
|
||||
#FIREWALL_WINDOW=
|
||||
|
||||
#.
|
||||
#' INET_DIST_INTERFACE: IP address where this Erlang node listens other nodes
|
||||
#
|
||||
@@ -64,6 +52,18 @@
|
||||
#
|
||||
#ERL_DIST_PORT=5210
|
||||
|
||||
#.
|
||||
#' FIREWALL_WINDOW: Range of allowed ports to pass through a firewall
|
||||
#
|
||||
# If ejabberd is configured to run in cluster, and a firewall is blocking ports,
|
||||
# it's possible to make Erlang use a defined range of port (instead of dynamic
|
||||
# ports) for node communication.
|
||||
#
|
||||
# Default: not defined
|
||||
# Example: 4200-4210
|
||||
#
|
||||
#FIREWALL_WINDOW=
|
||||
|
||||
#.
|
||||
#' ERL_EPMD_ADDRESS: IP addresses where EPMD listens for connections
|
||||
#
|
||||
|
||||
@@ -121,6 +121,9 @@ export CONTRIB_MODULES_CONF_DIR
|
||||
export ERL_LIBS
|
||||
export SCRIPT_DIR
|
||||
|
||||
# Only required for Erlang/OTP 25:
|
||||
export ERL_FLAGS="$ERL_FLAGS -enable-feature maybe_expr"
|
||||
|
||||
set_dist_client()
|
||||
{
|
||||
[ -n "$ERL_DIST_PORT" ] && ERLANG_OPTS="$ERLANG_OPTS -dist_listen false"
|
||||
@@ -129,9 +132,19 @@ set_dist_client()
|
||||
# run command either directly or via su $INSTALLUSER
|
||||
exec_cmd()
|
||||
{
|
||||
case $EXEC_CMD in
|
||||
as_install_user) su -s /bin/sh -c 'exec "$0" "$@"' "$INSTALLUSER" -- "$@" ;;
|
||||
as_current_user) "$@" ;;
|
||||
case $EXEC_CMD,$(uname -s) in
|
||||
as_install_user,OpenBSD)
|
||||
su -s /bin/sh "$INSTALLUSER" -c 'exec "$0" "$@"' "$@"
|
||||
;;
|
||||
as_install_user,NetBSD)
|
||||
su "$INSTALLUSER" -c 'exec "$0" "$@"' -- "$@"
|
||||
;;
|
||||
as_install_user,*)
|
||||
su -s /bin/sh -c 'exec "$0" "$@"' "$INSTALLUSER" -- "$@"
|
||||
;;
|
||||
as_current_user,*)
|
||||
"$@"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
exec_erl()
|
||||
@@ -299,7 +312,20 @@ stop_epmd()
|
||||
# if all ok, ensure runtime directory exists and make it current directory
|
||||
check_start()
|
||||
{
|
||||
[ -n "$ERL_DIST_PORT" ] && return
|
||||
[ -n "$ERL_DIST_PORT" ] && {
|
||||
netstat -nl | grep ":$ERL_DIST_PORT" >/dev/null && {
|
||||
echo ""
|
||||
echo "NOTE: The file ejabberdctl.cfg has configured ERL_DIST_PORT=$ERL_DIST_PORT"
|
||||
echo " and the port 5210 is already in use."
|
||||
echo " If ejabberd fails to start with listen error eaddrinsuse,"
|
||||
echo " try configuring in ejabberdctl.cfg a different"
|
||||
echo " INET_DIST_INTERFACE, or different ERL_DIST_PORT"
|
||||
echo ""
|
||||
netstat -nlp 2>/dev/null | grep ":5210"
|
||||
echo ""
|
||||
}
|
||||
return
|
||||
}
|
||||
"$EPMD" -names 2>/dev/null | grep -q " ${ERLANG_NODE%@*} " && {
|
||||
pgrep -f "$ERLANG_NODE" >/dev/null && {
|
||||
echo "ERROR: The ejabberd node '$ERLANG_NODE' is already running."
|
||||
@@ -553,7 +579,8 @@ case $1 in
|
||||
-noinput -hidden \
|
||||
-eval 'net_kernel:connect_node('"'$PEER'"')' \
|
||||
-eval 'io:format("~p~n",[net_adm:ping('"'$PEER'"')])' \
|
||||
-s erlang halt -output text
|
||||
-eval 'halt(case net_adm:ping('"'$PEER'"') of pong -> 0; pang -> 1 end).' \
|
||||
-output text
|
||||
;;
|
||||
started)
|
||||
set_dist_client
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
{elvis_style, function_naming_convention, disable},
|
||||
{elvis_style, god_modules, #{limit => 300}},
|
||||
{elvis_style, invalid_dynamic_call, disable},
|
||||
{elvis_style, macro_names, disable},
|
||||
{elvis_style, max_function_arity, disable}, % #{max_arity => 15}},
|
||||
{elvis_style, nesting_level, disable},
|
||||
{elvis_style, no_author, disable},
|
||||
|
||||
@@ -11,9 +11,6 @@ include_dirs:
|
||||
- "_build/default/lib/*/include"
|
||||
- "include"
|
||||
macros:
|
||||
- name: DEPRECATED_GET_STACKTRACE
|
||||
- name: HAVE_ERL_ERROR
|
||||
- name: HAVE_URI_STRING
|
||||
- name: OTP_BELOW_27
|
||||
- name: SIP
|
||||
- name: STUN
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2025 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2026 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2025 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2026 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2025 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2026 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
@@ -27,10 +27,14 @@
|
||||
rescode | restuple.
|
||||
|
||||
%% The 'any' and 'atom' argument types and 'any' result type
|
||||
%% should only be used %% by commands with tag 'internal',
|
||||
%% should only be used by commands with tag 'internal',
|
||||
%% which are meant to be used only internally in ejabberd,
|
||||
%% and not called using external frontends.
|
||||
|
||||
%% When a command with tag 'async' is called by mod_adhoc_api,
|
||||
%% it is spawned in a new process for the command execution,
|
||||
%% and the command immediately returns success.
|
||||
|
||||
%% The purpose of a command can either be:
|
||||
%% - informative: its purpose is to obtain information
|
||||
%% - modifier: its purpose is to produce some change in the server
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2025 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2026 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2026 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
%%% published by the Free Software Foundation; either version 2 of the
|
||||
%%% License, or (at your option) any later version.
|
||||
%%%
|
||||
%%% This program is distributed in the hope that it will be useful,
|
||||
%%% but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
%%% General Public License for more details.
|
||||
%%%
|
||||
%%% You should have received a copy of the GNU General Public License along
|
||||
%%% with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
%%%
|
||||
%%%----------------------------------------------------------------------
|
||||
|
||||
-record(serialize_mam_v1, {
|
||||
serverhost :: binary(),
|
||||
username :: binary(),
|
||||
timestamp :: integer(),
|
||||
peer :: binary(),
|
||||
type :: chat | groupchat,
|
||||
nick :: binary(),
|
||||
origin_id :: binary(),
|
||||
packet :: binary()
|
||||
}).
|
||||
-record(serialize_mam_prefs_v1, {
|
||||
serverhost :: binary(),
|
||||
username :: binary(),
|
||||
default :: atom(),
|
||||
always :: term(),
|
||||
never :: term()
|
||||
}).
|
||||
|
||||
-record(serialize_roster_v1, {
|
||||
serverhost :: binary(),
|
||||
username :: binary(),
|
||||
version :: binary() | undefined,
|
||||
entries :: [{binary(),
|
||||
binary(),
|
||||
[binary()],
|
||||
both | from | to | none,
|
||||
boolean(),
|
||||
subscribe | unsubscribe | both | in | out | none,
|
||||
binary()}]
|
||||
}).
|
||||
|
||||
-record(serialize_auth_v1, {
|
||||
serverhost :: binary(),
|
||||
username :: binary(),
|
||||
passwords :: [binary() | {sha | sha256 | sha512, binary(), binary(), binary(), integer()}]
|
||||
}).
|
||||
|
||||
-record(serialize_muc_room_v1, {
|
||||
serverhost :: binary(),
|
||||
name :: binary(),
|
||||
host :: binary(),
|
||||
options:: [{atom(), term()}]
|
||||
}).
|
||||
|
||||
-record(serialize_muc_registrations_v1, {
|
||||
serverhost :: binary(),
|
||||
host :: binary(),
|
||||
jid :: binary(),
|
||||
nick :: binary()
|
||||
}).
|
||||
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2025 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2026 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2025 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2026 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2025 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2026 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2025 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2026 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
@@ -29,27 +29,21 @@
|
||||
-define(SQL_INSERT_MARK, sql_insert__mark_).
|
||||
-define(SQL_INSERT(Table, Fields), ?SQL_INSERT_MARK(Table, Fields)).
|
||||
|
||||
-ifdef(COMPILER_REPORTS_ONLY_LINES).
|
||||
-record(sql_query, {hash :: binary(),
|
||||
format_query :: fun(),
|
||||
format_res :: fun(),
|
||||
args :: fun(),
|
||||
flags :: non_neg_integer(),
|
||||
loc :: {module(), pos_integer()}}).
|
||||
-else.
|
||||
-record(sql_query, {hash :: binary(),
|
||||
format_query :: fun(),
|
||||
format_res :: fun(),
|
||||
args :: fun(),
|
||||
flags :: non_neg_integer(),
|
||||
loc :: {module(), {pos_integer(), pos_integer()}}}).
|
||||
-endif.
|
||||
|
||||
-record(sql_escape, {string :: fun((binary()) -> binary()),
|
||||
integer :: fun((integer()) -> binary()),
|
||||
boolean :: fun((boolean()) -> binary()),
|
||||
in_array_string :: fun((binary()) -> binary()),
|
||||
like_escape :: fun(() -> binary())}).
|
||||
-record(sql_escape, {
|
||||
string :: fun((binary()) -> binary() | atom()),
|
||||
integer :: fun((integer()) -> binary() | atom()),
|
||||
boolean :: fun((boolean()) -> binary() | atom()),
|
||||
timestamp :: fun((calendar:datetime()) -> binary() | atom()),
|
||||
in_array_string :: fun((binary()) -> binary() | atom()),
|
||||
like_escape :: fun(() -> binary() | atom())
|
||||
}).
|
||||
|
||||
|
||||
-record(sql_index, {columns,
|
||||
@@ -57,6 +51,7 @@
|
||||
meta = #{}}).
|
||||
-record(sql_column, {name :: binary(),
|
||||
type,
|
||||
nullable = false,
|
||||
default = false,
|
||||
opts = []}).
|
||||
-record(sql_table, {name :: binary(),
|
||||
@@ -72,4 +67,4 @@
|
||||
-record(sql_schema_info,
|
||||
{db_type :: pgsql | mysql | sqlite,
|
||||
db_version :: any(),
|
||||
new_schema = true :: boolean()}).
|
||||
multihost_schema = true :: boolean()}).
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2025 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2026 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2025 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2026 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2025 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2026 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2025 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2026 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2025 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2026 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
@@ -19,24 +19,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
-define(PRINT(Format, Args), io:format(Format, Args)).
|
||||
|
||||
-ifdef(LAGER).
|
||||
-compile([{parse_transform, lager_transform}]).
|
||||
|
||||
-define(DEBUG(Format, Args),
|
||||
begin lager:debug(Format, Args), ok end).
|
||||
|
||||
-define(INFO_MSG(Format, Args),
|
||||
begin lager:info(Format, Args), ok end).
|
||||
|
||||
-define(WARNING_MSG(Format, Args),
|
||||
begin lager:warning(Format, Args), ok end).
|
||||
|
||||
-define(ERROR_MSG(Format, Args),
|
||||
begin lager:error(Format, Args), ok end).
|
||||
|
||||
-define(CRITICAL_MSG(Format, Args),
|
||||
begin lager:critical(Format, Args), ok end).
|
||||
-else.
|
||||
-include_lib("kernel/include/logger.hrl").
|
||||
|
||||
-define(CLEAD, "\e[1"). % bold
|
||||
@@ -79,7 +61,6 @@
|
||||
#{clevel => ?CLEAD++ ?CCRITICAL,
|
||||
ctext => ?CMID ++ ?CCRITICAL}),
|
||||
ok end).
|
||||
-endif.
|
||||
|
||||
%% Use only when trying to troubleshoot test problem with ExUnit
|
||||
-define(EXUNIT_LOG(Format, Args),
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2025 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2026 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2025 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2026 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2025 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2026 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
-define(INVITE_TOKEN_EXPIRE_SECONDS_DEFAULT, 5*86400).
|
||||
-define(INVITE_TOKEN_LENGTH_DEFAULT, 24).
|
||||
|
||||
-define(NS_INVITE_INVITE, <<"urn:xmpp:invite#invite">>).
|
||||
-define(NS_INVITE_CREATE_ACCOUNT, <<"urn:xmpp:invite#create-account">>).
|
||||
|
||||
-define(OVERUSE_LIMIT, 1000).
|
||||
|
||||
-define(SPEEDY_GOAT_LEVELS, 2).
|
||||
-define(SPEEDY_GOAT_SECONDS, 300).
|
||||
|
||||
-record(invite_token, {token :: binary(),
|
||||
inviter :: {binary(), binary()},
|
||||
%% A non-empty value if `invitee` indicates the invite has been used.
|
||||
invitee = <<>> :: binary(),
|
||||
created_at = calendar:now_to_datetime(erlang:timestamp()) :: calendar:datetime(),
|
||||
expires = calendar:gregorian_seconds_to_datetime(calendar:datetime_to_gregorian_seconds(calendar:now_to_datetime(erlang:timestamp())) + ?INVITE_TOKEN_EXPIRE_SECONDS_DEFAULT) :: calendar:datetime(),
|
||||
type = roster_only :: roster_only | account_only | account_subscription,
|
||||
%% If type is 'roster_only' then we indicate a token has been used to create
|
||||
%% an account (if allowed) by setting `account_name` to the name of the user
|
||||
%% (which should match `invitee`).
|
||||
account_name = <<>> :: binary()
|
||||
}).
|
||||
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2025 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2026 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2025 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2026 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2025 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2026 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2025 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2026 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
@@ -23,8 +23,9 @@
|
||||
opts = [] :: list() | '_'}).
|
||||
|
||||
-record(muc_registered,
|
||||
{us_host = {{<<"">>, <<"">>}, <<"">>} :: {{binary(), binary()}, binary()} | '$1',
|
||||
nick = <<"">> :: binary()}).
|
||||
{us_host = {{<<"">>, <<"">>}, <<"">>} :: {{binary() | '$1', binary() | '$2'},
|
||||
binary() | '_'} | '$1',
|
||||
nick = <<"">> :: binary() | '$3'}).
|
||||
|
||||
-record(muc_online_room,
|
||||
{name_host :: {binary(), binary()} | '$1' | {'_', binary()} | '_',
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2025 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2026 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
@@ -65,7 +65,7 @@
|
||||
captcha_whitelist = (?SETS):empty() :: gb_sets:set(),
|
||||
mam = false :: boolean(),
|
||||
pubsub = <<"">> :: binary(),
|
||||
enable_hats = false :: boolean(),
|
||||
enable_hats = true :: boolean(),
|
||||
lang = ejabberd_option:language() :: binary()
|
||||
}).
|
||||
|
||||
@@ -81,7 +81,8 @@
|
||||
role :: role(),
|
||||
%%is_subscriber = false :: boolean(),
|
||||
%%subscriptions = [] :: [binary()],
|
||||
last_presence :: presence() | undefined
|
||||
last_presence :: presence() | undefined,
|
||||
occupant_id :: binary()
|
||||
}).
|
||||
|
||||
-record(subscriber, {jid :: jid(),
|
||||
@@ -126,12 +127,14 @@
|
||||
history = #lqueue{} :: lqueue(),
|
||||
subject = [] :: [text()],
|
||||
subject_author = {<<"">>, #jid{}} :: {binary(), jid()},
|
||||
hats_users = #{} :: map(), % FIXME on OTP 21+: #{ljid() => #{binary() => binary()}},
|
||||
hats_defs = #{} :: #{binary() => {binary(), binary()}},
|
||||
hats_users = #{} :: #{ljid() => [binary()]},
|
||||
just_created = erlang:system_time(microsecond) :: true | integer(),
|
||||
activity = treap:empty() :: treap:treap(),
|
||||
room_shaper = none :: ejabberd_shaper:shaper(),
|
||||
room_queue :: p1_queue:queue({message | presence, jid()}) | undefined,
|
||||
hibernate_timer = none :: reference() | none | hibernating
|
||||
hibernate_timer = none :: reference() | none | hibernating,
|
||||
salt = <<>> :: binary()
|
||||
}).
|
||||
|
||||
-type users() :: #{ljid() => #user{}}.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2025 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2026 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2025 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2026 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2025 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2026 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
@@ -19,6 +19,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
|
||||
-record(private_storage,
|
||||
{usns = {<<"">>, <<"">>, <<"">>} :: {binary(), binary(), binary() |
|
||||
{usns = {<<"">>, <<"">>, <<"">>} :: {binary() | '$1' | '_', binary(), binary() |
|
||||
'$1' | '_'},
|
||||
xml = #xmlel{} :: xmlel() | '_' | '$1'}).
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
%%% RFC 1928 constants.
|
||||
%%%
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2025 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2026 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%% ejabberd, Copyright (C) 2017-2025 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2017-2026 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2025 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2026 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
@@ -25,6 +25,7 @@
|
||||
jid = {<<>>, <<>>, <<>>} :: jid:ljid(),
|
||||
name = <<>> :: binary() | '_',
|
||||
subscription = none :: subscription() | '_',
|
||||
approved = false :: boolean() | '_',
|
||||
ask = none :: ask() | '_',
|
||||
groups = [] :: [binary()] | '_',
|
||||
askmessage = <<"">> :: binary() | '_',
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2025 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2026 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2025 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2026 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%%%-------------------------------------------------------------------
|
||||
%%% @author Evgeny Khramtsov <ekhramtsov@process-one.net>
|
||||
%%% @copyright (C) 2002-2025 ProcessOne, SARL. All Rights Reserved.
|
||||
%%% @copyright (C) 2002-2026 ProcessOne, SARL. All Rights Reserved.
|
||||
%%%
|
||||
%%% Licensed under the Apache License, Version 2.0 (the "License");
|
||||
%%% you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
%%%
|
||||
%%% ejabberd, Copyright (C) 2002-2025 ProcessOne
|
||||
%%% ejabberd, Copyright (C) 2002-2026 ProcessOne
|
||||
%%%
|
||||
%%% This program is free software; you can redistribute it and/or
|
||||
%%% modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -2,12 +2,12 @@
|
||||
.\" Title: ejabberd.yml
|
||||
.\" Author: [see the "AUTHOR" section]
|
||||
.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
|
||||
.\" Date: 08/22/2025
|
||||
.\" Date: 03/25/2026
|
||||
.\" Manual: \ \&
|
||||
.\" Source: \ \&
|
||||
.\" Language: English
|
||||
.\"
|
||||
.TH "EJABBERD\&.YML" "5" "08/22/2025" "\ \&" "\ \&"
|
||||
.TH "EJABBERD\&.YML" "5" "03/25/2026" "\ \&" "\ \&"
|
||||
.\" -----------------------------------------------------------------
|
||||
.\" * Define some portability stuff
|
||||
.\" -----------------------------------------------------------------
|
||||
@@ -82,12 +82,12 @@ All options can be changed in runtime by running \fIejabberdctl reload\-config\f
|
||||
.sp
|
||||
Some options can be specified for particular virtual host(s) only using \fIhost_config\fR or \fIappend_host_config\fR options\&. Such options are called \fIlocal\fR\&. Examples are \fImodules\fR, \fIauth_method\fR and \fIdefault_db\fR\&. The options that cannot be defined per virtual host are called \fIglobal\fR\&. Examples are \fIloglevel\fR, \fIcertfiles\fR and \fIlisten\fR\&. It is a configuration mistake to put \fIglobal\fR options under \fIhost_config\fR or \fIappend_host_config\fR section \- ejabberd will refuse to load such configuration\&.
|
||||
.sp
|
||||
It is not recommended to write ejabberd\&.yml from scratch\&. Instead it is better to start from "default" configuration file available at https://github\&.com/processone/ejabberd/blob/25\&.08/ejabberd\&.yml\&.example\&. Once you get ejabberd running you can start changing configuration options to meet your requirements\&.
|
||||
It is not recommended to write ejabberd\&.yml from scratch\&. Instead it is better to start from "default" configuration file available at https://github\&.com/processone/ejabberd/blob/26\&.03/ejabberd\&.yml\&.example\&. Once you get ejabberd running you can start changing configuration options to meet your requirements\&.
|
||||
.sp
|
||||
Note that this document is intended to provide comprehensive description of all configuration options that can be consulted to understand the meaning of a particular option, its format and possible values\&. It will be quite hard to understand how to configure ejabberd by reading this document only \- for this purpose the reader is recommended to read online Configuration Guide available at https://docs\&.ejabberd\&.im/admin/configuration\&.
|
||||
.SH "TOP LEVEL OPTIONS"
|
||||
.sp
|
||||
This section describes top level options of ejabberd 25\&.08\&. The options that changed in this version are marked with 🟤\&.
|
||||
This section describes top level options of ejabberd 26\&.03\&. The options that changed in this version are marked with 🟠\&.
|
||||
.PP
|
||||
\fBaccess_rules\fR: \fI{AccessName: {allow|deny: ACLName|ACLDefinition}}\fR
|
||||
.RS 4
|
||||
@@ -305,7 +305,7 @@ acme:
|
||||
\fBallow_contrib_modules\fR: \fItrue | false\fR
|
||||
.RS 4
|
||||
Whether to allow installation of third\-party modules or not\&. See
|
||||
\fI\&.\&./\&.\&./admin/guide/modules\&.md#ejabberd\-contrib|ejabberd\-contrib\fR
|
||||
\fI\&.\&./\&.\&./admin/guide/modules\&.md#ejabberd\-modules|ejabberd\-modules\fR
|
||||
documentation section\&. The default value is
|
||||
\fItrue\fR\&.
|
||||
.RE
|
||||
@@ -1018,10 +1018,26 @@ Disallows the usage of those options in the included file
|
||||
\fBinstall_contrib_modules\fR: \fI[Module, \&.\&.\&.]\fR
|
||||
.RS 4
|
||||
\fINote\fR
|
||||
about this option: added in 23\&.10\&. Modules to install from
|
||||
\fI\&.\&./\&.\&./admin/guide/modules\&.md#ejabberd\-contrib|ejabberd\-contrib\fR
|
||||
at start time\&. The default value is an empty list of modules:
|
||||
about this option: added in 23\&.10\&. Modules from
|
||||
\fI\&.\&./\&.\&./admin/guide/modules\&.md#ejabberd\-modules|ejabberd\-modules\fR
|
||||
to install automatically at start time\&. The default value is an empty list of modules:
|
||||
\fI[]\fR\&.
|
||||
.sp
|
||||
\fBExample\fR:
|
||||
.sp
|
||||
.if n \{\
|
||||
.RS 4
|
||||
.\}
|
||||
.nf
|
||||
install_contrib_modules:
|
||||
\- mod_tombstones
|
||||
|
||||
modules:
|
||||
mod_tombstones: {}
|
||||
.fi
|
||||
.if n \{\
|
||||
.RE
|
||||
.\}
|
||||
.RE
|
||||
.PP
|
||||
\fBjwt_auth_only_rule\fR: \fIAccessName\fR
|
||||
@@ -1284,15 +1300,10 @@ This option can be used to tune tick time parameter of
|
||||
.PP
|
||||
\fBnew_sql_schema\fR: \fItrue | false\fR
|
||||
.RS 4
|
||||
Whether to use the
|
||||
\fIdatabase\&.md#default\-and\-new\-schemas|new SQL schema\fR\&. All schemas are located at
|
||||
https://github\&.com/processone/ejabberd/tree/25\&.08/sql\&. There are two schemas available\&. The default legacy schema stores one XMPP domain into one ejabberd database\&. The
|
||||
\fInew\fR
|
||||
schema can handle several XMPP domains in a single ejabberd database\&. Using this
|
||||
\fInew\fR
|
||||
schema is best when serving several XMPP domains and/or changing domains from time to time\&. This avoid need to manage several databases and handle complex configuration changes\&. The default depends on configuration flag
|
||||
\fI\-\-enable\-new\-sql\-schema\fR
|
||||
which is set at compile time\&.
|
||||
\fINote\fR
|
||||
about this option: obsoleted in 25\&.10\&. This option was renamed to
|
||||
\fIsql_schema_multihost\fR
|
||||
in ejabberd 25\&.10\&. Please update your configuration to use the new option name
|
||||
.RE
|
||||
.PP
|
||||
\fBoauth_access\fR: \fIAccessName\fR
|
||||
@@ -1545,6 +1556,12 @@ This is a global option for module
|
||||
\fI600 seconds\fR\&.
|
||||
.RE
|
||||
.PP
|
||||
\fBreplaced_connection_timeout\fR: \fItimeout()\fR
|
||||
.RS 4
|
||||
\fINote\fR
|
||||
about this option: added in 26\&.01\&. Maximum time that new session will wait for termination of session that it\(cqs replacing\&. This allows old session to properly sends its unavailable presences, and helps with potetnial race conditions between old and new sessions presences\&.
|
||||
.RE
|
||||
.PP
|
||||
\fBresource_conflict\fR: \fIsetresource | closeold | closenew\fR
|
||||
.RS 4
|
||||
NOTE: this option is deprecated and may be removed anytime in the future versions\&. The possible values match exactly the three possibilities described in
|
||||
@@ -1958,6 +1975,24 @@ or
|
||||
if the latter is not set\&.
|
||||
.RE
|
||||
.PP
|
||||
\fBsql_schema_multihost\fR: \fItrue | false\fR
|
||||
.RS 4
|
||||
\fINote\fR
|
||||
about this option: renamed in 25\&.10\&. Whether to use the
|
||||
\fIdatabase\&.md#singlehost\-or\-multihost|multihost SQL schema\fR\&. All schemas are located at
|
||||
https://github\&.com/processone/ejabberd/tree/26\&.03/sql\&. There are two schemas available\&. The legacy
|
||||
\fIsinglehost\fR
|
||||
schema stores one XMPP domain into one ejabberd database\&. The
|
||||
\fImultihost\fR
|
||||
schema can handle several XMPP domains in a single ejabberd database\&. The
|
||||
\fImultihost\fR
|
||||
schema is preferable when serving several XMPP domains and/or changing domains from time to time\&. This avoid need to manage several databases and handle complex configuration changes\&. The default depends on
|
||||
\fI\&.\&./\&.\&./admin/install/source\&.md#configure|\&./configure\fR
|
||||
flag
|
||||
\fI\-\-enable\-sql\-schema\-multihost\fR
|
||||
which is set at compile time\&.
|
||||
.RE
|
||||
.PP
|
||||
\fBsql_server\fR: \fIHost | IP Address | ODBC Connection String | Unix Socket Path\fR
|
||||
.RS 4
|
||||
\fINote\fR
|
||||
@@ -2107,7 +2142,7 @@ seconds\&.
|
||||
.RE
|
||||
.SH "MODULES"
|
||||
.sp
|
||||
This section describes modules options of ejabberd 25\&.08\&. The modules that changed in this version are marked with 🟤\&.
|
||||
This section describes modules options of ejabberd 26\&.03\&. The modules that changed in this version are marked with 🟠\&.
|
||||
.SS "mod_adhoc"
|
||||
.sp
|
||||
def:ad\-hoc command
|
||||
@@ -2272,12 +2307,12 @@ ejabberdctl srg_create g1 example\&.org "\*(AqGroup number 1\*(Aq" this_is_g1 g1
|
||||
.RE
|
||||
.SS "mod_admin_update_sql"
|
||||
.sp
|
||||
This module can be used to update existing SQL database from the default to the new schema\&. Check the section \fIdatabase\&.md#default\-and\-new\-schemas|Default and New Schemas\fR for details\&. Please note that only MS SQL, MySQL, and PostgreSQL are supported\&. When the module is loaded use \fIupdate_sql\fR API\&.
|
||||
This module can be used to convert your existing SQL database from the singlehost to the multihost schema\&. Check the section \fIdatabase\&.md#singlehost\-or\-multihost|Singlehost or Multihost\fR for details\&. Please note that only MS SQL, MySQL, and PostgreSQL are supported\&. When the module is loaded use \fIupdate_sql\fR API\&.
|
||||
.sp
|
||||
The module has no options\&.
|
||||
.SS "mod_announce"
|
||||
.sp
|
||||
This module enables configured users to broadcast announcements and to set the message of the day (MOTD)\&. Configured users can perform these actions with an XMPP client either using Ad\-Hoc Commands or sending messages to specific JIDs\&.
|
||||
This module enables configured users to broadcast announcements and to set the message of the day (MOTD)\&. Configured users can perform these actions with an XMPP client either using Ad\-Hoc Commands or sending messages to specific JIDs\&. Equivalent API commands are also available\&.
|
||||
.if n \{\
|
||||
.sp
|
||||
.\}
|
||||
@@ -2462,6 +2497,8 @@ Same as top\-level
|
||||
\fIuse_cache\fR
|
||||
option, but applied to this module only\&.
|
||||
.RE
|
||||
.sp
|
||||
\fBAPI Tags:\fR \fI\&.\&./\&.\&./developer/ejabberd\-api/admin\-tags\&.md#announce|announce\fR
|
||||
.RE
|
||||
.SS "mod_antispam"
|
||||
.sp
|
||||
@@ -2708,9 +2745,11 @@ The option is supposed to be used when
|
||||
\fIallow_local_users\fR
|
||||
and
|
||||
\fIallow_transports\fR
|
||||
are not enough\&. It\(cqs an ACL where
|
||||
are not enough\&. It\(cqs an Access Rule where
|
||||
\fIdeny\fR
|
||||
means the message will be rejected (or a CAPTCHA would be generated for a presence, if configured), and
|
||||
means the stanza will be rejected; there\(cqs an exception if option
|
||||
\fIcaptcha\fR
|
||||
is configured\&. And
|
||||
\fIallow\fR
|
||||
means the sender is whitelisted and the stanza will pass through\&. The default value is
|
||||
\fInone\fR, which means nothing is whitelisted\&.
|
||||
@@ -2732,7 +2771,7 @@ and some server\(cqs JID is in user\(cqs roster, then messages from any user of
|
||||
.PP
|
||||
\fBcaptcha\fR: \fItrue | false\fR
|
||||
.RS 4
|
||||
Whether to generate CAPTCHA or not in response to messages from strangers\&. See also section
|
||||
Whether to generate CAPTCHA challenges in response to incoming presence subscription requests from strangers\&. See also section
|
||||
\fIbasic\&.md#captcha|CAPTCHA\fR
|
||||
of the Configuration Guide\&. The default value is
|
||||
\fIfalse\fR\&.
|
||||
@@ -2958,6 +2997,8 @@ While a client is inactive, queue presence stanzas that indicate (un)availabilit
|
||||
.RE
|
||||
.SS "mod_configure"
|
||||
.sp
|
||||
\fINote\fR about this option: improved in 25\&.10\&.
|
||||
.sp
|
||||
The module provides server configuration functionalities using XEP\-0030: Service Discovery and XEP\-0050: Ad\-Hoc Commands:
|
||||
.sp
|
||||
.RS 4
|
||||
@@ -2994,6 +3035,100 @@ XEP\-0133: Service Administration
|
||||
Additional custom ad\-hoc commands specific to ejabberd
|
||||
.RE
|
||||
.sp
|
||||
Ad\-hoc commands from XEP\-0133 that behave differently to the XEP:
|
||||
.sp
|
||||
.RS 4
|
||||
.ie n \{\
|
||||
\h'-04'\(bu\h'+03'\c
|
||||
.\}
|
||||
.el \{\
|
||||
.sp -1
|
||||
.IP \(bu 2.3
|
||||
.\}
|
||||
get\-user\-roster: returns standard fields instead of roster items that client cannot display
|
||||
.RE
|
||||
.sp
|
||||
Those ad\-hoc commands from XEP\-0133 do not include in the response the client that executed the command:
|
||||
.sp
|
||||
.RS 4
|
||||
.ie n \{\
|
||||
\h'-04'\(bu\h'+03'\c
|
||||
.\}
|
||||
.el \{\
|
||||
.sp -1
|
||||
.IP \(bu 2.3
|
||||
.\}
|
||||
get\-active\-users\-num
|
||||
.RE
|
||||
.sp
|
||||
.RS 4
|
||||
.ie n \{\
|
||||
\h'-04'\(bu\h'+03'\c
|
||||
.\}
|
||||
.el \{\
|
||||
.sp -1
|
||||
.IP \(bu 2.3
|
||||
.\}
|
||||
get\-idle\-users\-num
|
||||
.RE
|
||||
.sp
|
||||
.RS 4
|
||||
.ie n \{\
|
||||
\h'-04'\(bu\h'+03'\c
|
||||
.\}
|
||||
.el \{\
|
||||
.sp -1
|
||||
.IP \(bu 2.3
|
||||
.\}
|
||||
get\-active\-users
|
||||
.RE
|
||||
.sp
|
||||
.RS 4
|
||||
.ie n \{\
|
||||
\h'-04'\(bu\h'+03'\c
|
||||
.\}
|
||||
.el \{\
|
||||
.sp -1
|
||||
.IP \(bu 2.3
|
||||
.\}
|
||||
get\-idle\-users
|
||||
.RE
|
||||
.sp
|
||||
Those ad\-hoc commands from XEP\-0133 are not implemented:
|
||||
.sp
|
||||
.RS 4
|
||||
.ie n \{\
|
||||
\h'-04'\(bu\h'+03'\c
|
||||
.\}
|
||||
.el \{\
|
||||
.sp -1
|
||||
.IP \(bu 2.3
|
||||
.\}
|
||||
edit\-blacklist
|
||||
.RE
|
||||
.sp
|
||||
.RS 4
|
||||
.ie n \{\
|
||||
\h'-04'\(bu\h'+03'\c
|
||||
.\}
|
||||
.el \{\
|
||||
.sp -1
|
||||
.IP \(bu 2.3
|
||||
.\}
|
||||
edit\-whitelist
|
||||
.RE
|
||||
.sp
|
||||
.RS 4
|
||||
.ie n \{\
|
||||
\h'-04'\(bu\h'+03'\c
|
||||
.\}
|
||||
.el \{\
|
||||
.sp -1
|
||||
.IP \(bu 2.3
|
||||
.\}
|
||||
edit\-admin
|
||||
.RE
|
||||
.sp
|
||||
This module requires \fImod_adhoc\fR (to execute the commands), and recommends \fImod_disco\fR (to discover the commands)\&.
|
||||
.sp
|
||||
Please notice that all the ad\-hoc commands implemented by this module have an equivalent API Command that you can execute using \fImod_adhoc_api\fR or any other API frontend\&.
|
||||
@@ -3054,6 +3189,8 @@ Make sure either \fImod_bosh\fR or \fIlisten\&.md#ejabberd_http_ws|ejabberd_http
|
||||
.sp
|
||||
When \fIconversejs_css\fR and \fIconversejs_script\fR are \fIauto\fR, by default they point to the public Converse client\&.
|
||||
.sp
|
||||
When this module is enabled in \fImodules\fR, it adds automatically a requesthandler and link in WebAdmin\&. \&.
|
||||
.sp
|
||||
This module is available since ejabberd 21\&.12\&.
|
||||
.sp
|
||||
.it 1 an-trap
|
||||
@@ -3505,7 +3642,7 @@ listen:
|
||||
tls: true
|
||||
request_handlers:
|
||||
/bosh: mod_bosh
|
||||
/ws: ejabberd_http_ws
|
||||
/websocket: ejabberd_http_ws
|
||||
/\&.well\-known/host\-meta: mod_host_meta
|
||||
/\&.well\-known/host\-meta\&.json: mod_host_meta
|
||||
|
||||
@@ -3513,7 +3650,7 @@ modules:
|
||||
mod_bosh: {}
|
||||
mod_host_meta:
|
||||
bosh_service_url: "https://@HOST@:5443/bosh"
|
||||
websocket_url: "wss://@HOST@:5443/ws"
|
||||
websocket_url: "wss://@HOST@:5443/websocket"
|
||||
.fi
|
||||
.if n \{\
|
||||
.RE
|
||||
@@ -3576,6 +3713,8 @@ modules:
|
||||
.RE
|
||||
.SS "mod_http_fileserver"
|
||||
.sp
|
||||
\fINote\fR about this option: improved \fIdocroot\fR in 26\&.01\&.
|
||||
.sp
|
||||
This simple module serves files from the local disk over HTTP\&.
|
||||
.sp
|
||||
.it 1 an-trap
|
||||
@@ -3602,19 +3741,42 @@ Specify mappings of extension to content type\&. There are several content types
|
||||
.\}
|
||||
.nf
|
||||
content_types:
|
||||
\&.avi: video/avi
|
||||
\&.bmp: image/bmp
|
||||
\&.bz2: application/x\-bzip2
|
||||
\&.css: text/css
|
||||
\&.gif: image/gif
|
||||
\&.gz: application/x\-gzip
|
||||
\&.html: text/html
|
||||
\&.ico: image/vnd\&.microsoft\&.icon
|
||||
\&.jar: application/java\-archive
|
||||
\&.jpeg: image/jpeg
|
||||
\&.jpg: image/jpeg
|
||||
\&.js: text/javascript
|
||||
\&.json: application/json
|
||||
\&.m4a: audio/mp4
|
||||
\&.map: application/json
|
||||
\&.mp3: audio/mpeg
|
||||
\&.mp4: video/mp4
|
||||
\&.mpeg: video/mpeg
|
||||
\&.mpg: video/mpeg
|
||||
\&.ogg: application/ogg
|
||||
\&.pdf: application/pdf
|
||||
\&.png: image/png
|
||||
\&.rtf: application/rtf
|
||||
\&.svg: image/svg+xml
|
||||
\&.tiff: image/tiff
|
||||
\&.ttf: font/ttf
|
||||
\&.txt: text/plain
|
||||
\&.wav: audio/wav
|
||||
\&.webp: image/webp
|
||||
\&.woff: font/woff
|
||||
\&.woff2: font/woff2
|
||||
\&.xml: application/xml
|
||||
\&.xpi: application/x\-xpinstall
|
||||
\&.xul: application/vnd\&.mozilla\&.xul+xml
|
||||
\&.xz: application/x\-xz
|
||||
\&.zip: application/zip
|
||||
.fi
|
||||
.if n \{\
|
||||
.RE
|
||||
@@ -3639,9 +3801,36 @@ Indicate one or more directory index files, similarly to Apache\(cqs
|
||||
variable\&. When an HTTP request hits a directory instead of a regular file, those directory indices are looked in order, and the first one found is returned\&. The default value is an empty list\&.
|
||||
.RE
|
||||
.PP
|
||||
\fBdocroot\fR: \fIPath\fR
|
||||
\fBdocroot\fR: \fIPathDir | {PathURL, PathDir}\fR
|
||||
.RS 4
|
||||
Directory to serve the files from\&. This is a mandatory option\&.
|
||||
\fINote\fR
|
||||
about this option: improved in 26\&.01\&. Directory to serve the files from, or a map with several URL path (as specified in
|
||||
\fIlisten\-options\&.md#request_handlers|request_handlers\fR) and their corresponding directory\&. This is a mandatory option\&.
|
||||
.sp
|
||||
\fBExample\fR:
|
||||
.sp
|
||||
.if n \{\
|
||||
.RS 4
|
||||
.\}
|
||||
.nf
|
||||
listen:
|
||||
\-
|
||||
port: 5280
|
||||
module: ejabberd_http
|
||||
request_handlers:
|
||||
/pub/content: mod_http_fileserver
|
||||
/share: mod_http_fileserver
|
||||
/: mod_http_fileserver
|
||||
modules:
|
||||
mod_http_fileserver:
|
||||
docroot:
|
||||
/pub/content: /var/service/www
|
||||
/share: /usr/share/javascript
|
||||
/: /var/www
|
||||
.fi
|
||||
.if n \{\
|
||||
.RE
|
||||
.\}
|
||||
.RE
|
||||
.PP
|
||||
\fBmust_authenticate_with\fR: \fI[{Username, Hostname}, \&.\&.\&.]\fR
|
||||
@@ -3693,6 +3882,8 @@ modules:
|
||||
.RE
|
||||
.SS "mod_http_upload"
|
||||
.sp
|
||||
\fINote\fR about this option: added \fIcontent_types\fR in 26\&.01\&.
|
||||
.sp
|
||||
This module allows for requesting permissions to upload a file via HTTP as described in XEP\-0363: HTTP File Upload\&. If the request is accepted, the client receives a URL for uploading the file and another URL from which that file can later be downloaded\&.
|
||||
.sp
|
||||
In order to use this module, it must be enabled in \fIlisten\fR → \fIejabberd_http\fR → \fIlisten\-options\&.md#request_handlers|request_handlers\fR\&.
|
||||
@@ -3711,6 +3902,15 @@ This option defines the access rule to limit who is permitted to use the HTTP up
|
||||
\fIlocal\fR\&. If no access rule of that name exists, no user will be allowed to use the service\&.
|
||||
.RE
|
||||
.PP
|
||||
\fBcontent_types\fR: \fI{Extension: Type}\fR
|
||||
.RS 4
|
||||
\fINote\fR
|
||||
about this option: added in 26\&.01\&. Specify mappings of extension to content type, similarly to the option
|
||||
content_types
|
||||
of
|
||||
\fImod_http_fileserver\fR\&.
|
||||
.RE
|
||||
.PP
|
||||
\fBcustom_headers\fR: \fI{Name: Value}\fR
|
||||
.RS 4
|
||||
This option specifies additional header fields to be included in all HTTP responses\&. By default no custom headers are included\&.
|
||||
@@ -3971,6 +4171,199 @@ modules:
|
||||
.RE
|
||||
.\}
|
||||
.RE
|
||||
.SS "mod_invites 🟠"
|
||||
.sp
|
||||
\fINote\fR about this option: improved in 26\&.03\&.
|
||||
.sp
|
||||
Allow User Invitation and Account Creation to create out\-of\-band links to onboard others onto the XMPP network and establish a mutual subscription\&. This implements XEP\-0379: Pre\-Authenticated Roster Subscription, XEP\-0401: Ad\-hoc Account Invitation Generation, and XEP\-0445: Pre\-Authenticated In\-Band Registration\&.
|
||||
.sp
|
||||
These invitations are created as XMPP URIs either via ad\-hoc commands or via API commands (like \fIgenerate_invite\fR API and \fIgenerate_invite_with_username\fR API), are then meant to be sent out\-of\-band\&.
|
||||
.sp
|
||||
The receiving user should have installed a client that supports those invitations\&. Since this has proven to be a common obstacle for easy adoption, this module comes with an optional landing page parameter, that can either be some external service like an installation of easy\-xmpp\-invitation, a third\-party service like JoinJabber or for convenience a built\-in service\&. This landing page will then guide the recipient with setting up a client and creating an account if required\&.
|
||||
.sp
|
||||
In order to use the included landing page feature, you have to set landing_page to either auto or an URL template like https://{{ host }}/invites/{{ invite\&.token }} if your server setup includes a so called reverse proxy\&.
|
||||
.sp
|
||||
If you\(cqd rather want to use an external service, set landing_page to something like http://{{ host }}:8080/easy\-xmpp\-invites/#{{ invite\&.uri|strip_protocol }} or https://invites\&.joinjabber\&.org/#{{ invite\&.uri|strip_protocol }}\&.
|
||||
.sp
|
||||
.it 1 an-trap
|
||||
.nr an-no-space-flag 1
|
||||
.nr an-break-flag 1
|
||||
.br
|
||||
.ps +1
|
||||
\fBAvailable options:\fR
|
||||
.RS 4
|
||||
.PP
|
||||
\fBaccess_create_account\fR: \fIAccess Rule Name\fR
|
||||
.RS 4
|
||||
This is the name of an access rule that specifies who is allowed to create invites of
|
||||
create account\&. The default value is
|
||||
none, i\&.e\&. nobody is able to create such invites\&. Furthermore it applies to
|
||||
\fIroster invites\fR
|
||||
and allows to do in\-band registration (IBR) if the sending user is allowed by this rule\&. Users from the
|
||||
admin
|
||||
ACL are always allowed to create those invites\&.
|
||||
.sp
|
||||
\fBExample\fR:
|
||||
.sp
|
||||
.if n \{\
|
||||
.RS 4
|
||||
.\}
|
||||
.nf
|
||||
mod_invites:
|
||||
access_create_account: local
|
||||
.fi
|
||||
.if n \{\
|
||||
.RE
|
||||
.\}
|
||||
.RE
|
||||
.PP
|
||||
\fBdb_type\fR: \fImnesia | sql\fR
|
||||
.RS 4
|
||||
Same as top\-level
|
||||
\fIdefault_db\fR
|
||||
option, but applied to this module only\&.
|
||||
.RE
|
||||
.PP
|
||||
\fBlanding_page\fR: \fInone | auto | LandingPageURLTemplate\fR
|
||||
.RS 4
|
||||
Whether or not to use a landing page for the invites that are being created\&. If using a template URL this can be either be external or internal\&. Template variables include
|
||||
host,
|
||||
invite\&.token
|
||||
and
|
||||
invite\&.uri, there are also filters defined, most notably
|
||||
strip_protocol\&. Here\(cqs an example:
|
||||
http://{{ host }}:8080/easy\-xmpp\-invites/#{{ invite\&.uri|strip_protocol }}\&. For convenience you can choose
|
||||
auto
|
||||
here and the
|
||||
ejabberd_http
|
||||
handler for
|
||||
mod_invites
|
||||
will be used to construct the landing page URL\&. Default is
|
||||
none\&.
|
||||
.RE
|
||||
.PP
|
||||
\fBmax_invites\fR: \fIpos_integer() | infinity\fR
|
||||
.RS 4
|
||||
Maximum number of
|
||||
\fIcreate account\fR
|
||||
invites that can be created by an individual user\&. Users that match the
|
||||
admin
|
||||
ACL are exempt from this limitation\&. Furthermore it restricts the use of
|
||||
roster invites
|
||||
for account creation\&. Default is
|
||||
infinity\&.
|
||||
.RE
|
||||
.PP
|
||||
\fBsite_name\fR: \fISite Name\fR
|
||||
.RS 4
|
||||
A human readable name for your site\&. E\&.g\&.
|
||||
"My Beautiful Laundrette"\&. Used in landing page templates\&.
|
||||
.RE
|
||||
.PP
|
||||
\fBtemplates_dir\fR: \fIPath\fR
|
||||
.RS 4
|
||||
The directory containing templates and static files used for landing page and web registration form\&. Only needs to be set if you want to ship your own set of templates or list of recommended apps\&.
|
||||
.RE
|
||||
.PP
|
||||
\fBtoken_expire_seconds\fR: \fIpos_integer()\fR
|
||||
.RS 4
|
||||
Number of seconds until token expires\&. Default value is
|
||||
432000
|
||||
(that is five days:
|
||||
5 * 24 * 60 * 60)
|
||||
.RE
|
||||
.PP
|
||||
\fBwebchat_url 🟠\fR: \fInone | auto | Webchat URL\fR
|
||||
.RS 4
|
||||
\fINote\fR
|
||||
about this option: added in 26\&.03\&. URL to a webchat client\&. Upon manual registration through web\-form this will be recommended in order to get started\&. If
|
||||
auto
|
||||
is chosen, we pick the
|
||||
mod_conversejs
|
||||
from the listeners section\&. Default is
|
||||
auto\&.
|
||||
.RE
|
||||
.RE
|
||||
.sp
|
||||
.it 1 an-trap
|
||||
.nr an-no-space-flag 1
|
||||
.nr an-break-flag 1
|
||||
.br
|
||||
.ps +1
|
||||
\fBExamples:\fR
|
||||
.RS 4
|
||||
.sp
|
||||
Basic configuration with landing page but without creating accounts, just roster invites:
|
||||
.sp
|
||||
.if n \{\
|
||||
.RS 4
|
||||
.\}
|
||||
.nf
|
||||
listen:
|
||||
\-
|
||||
port: 5281
|
||||
module: ejabberd_http
|
||||
request_handlers:
|
||||
/invites: mod_invites
|
||||
# [\&.\&.\&.]
|
||||
modules:
|
||||
mod_invites:
|
||||
landing_page: auto
|
||||
.fi
|
||||
.if n \{\
|
||||
.RE
|
||||
.\}
|
||||
.sp
|
||||
To allow only admin users to create invites of \fIcreate account\fR and disable regular in\-band registration, you would have a config like this:
|
||||
.sp
|
||||
.if n \{\
|
||||
.RS 4
|
||||
.\}
|
||||
.nf
|
||||
acl:
|
||||
admin:
|
||||
\- user: "my_admin_user@example\&.com"
|
||||
|
||||
access_rules:
|
||||
register:
|
||||
allow: admin
|
||||
|
||||
modules:
|
||||
mod_invites:
|
||||
landing_page: auto
|
||||
mod_register:
|
||||
allow_modules:
|
||||
\- mod_invites
|
||||
.fi
|
||||
.if n \{\
|
||||
.RE
|
||||
.\}
|
||||
.sp
|
||||
If you want all your users to be able to send \fIcreate account\fR invites, you would configure your server like this instead\&. Note that the names of the access rules are just examples and you\(cqre free to change them\&.
|
||||
.sp
|
||||
.if n \{\
|
||||
.RS 4
|
||||
.\}
|
||||
.nf
|
||||
acl:
|
||||
local:
|
||||
user_regexp: ""
|
||||
access_rules:
|
||||
create_account_invite:
|
||||
allow: local
|
||||
|
||||
modules:
|
||||
mod_invites:
|
||||
access_create_account: create_account_invite
|
||||
landing_page: auto
|
||||
mod_register:
|
||||
allow_modules:
|
||||
\- mod_invites
|
||||
.fi
|
||||
.if n \{\
|
||||
.RE
|
||||
.\}
|
||||
.RE
|
||||
.SS "mod_jidprep"
|
||||
.sp
|
||||
This module allows XMPP clients to ask the server to normalize a JID as per the rules specified in RFC 6122: XMPP Address Format\&. This might be useful for clients in certain constrained environments, or for testing purposes\&.
|
||||
@@ -4091,6 +4484,13 @@ This access rule defines who is allowed to modify the MAM preferences\&. The def
|
||||
\fIall\fR\&.
|
||||
.RE
|
||||
.PP
|
||||
\fBarchive_muc_as_mucsub\fR: \fItrue | false\fR
|
||||
.RS 4
|
||||
\fINote\fR
|
||||
about this option: added in 25\&.10\&. When this option is enabled incoming groupchat messages for users that have mucsub subscription to a room from which message originated will have those messages archived after being converted to mucsub event messages\&.The default value is
|
||||
\fIfalse\fR\&.
|
||||
.RE
|
||||
.PP
|
||||
\fBassume_mam_usage\fR: \fItrue | false\fR
|
||||
.RS 4
|
||||
This option determines how ejabberd\(cqs stream management code (see
|
||||
@@ -4176,7 +4576,7 @@ When this option is disabled, for each individual subscriber a separate mucsub m
|
||||
.sp
|
||||
\fBAPI Tags:\fR \fI\&.\&./\&.\&./developer/ejabberd\-api/admin\-tags\&.md#mam|mam\fR, \fI\&.\&./\&.\&./developer/ejabberd\-api/admin\-tags\&.md#purge|purge\fR
|
||||
.RE
|
||||
.SS "mod_matrix_gw 🟤"
|
||||
.SS "mod_matrix_gw"
|
||||
.sp
|
||||
\fINote\fR about this option: improved in 25\&.08\&.
|
||||
.sp
|
||||
@@ -4709,7 +5109,66 @@ modules:
|
||||
.RE
|
||||
.SS "mod_muc"
|
||||
.sp
|
||||
This module provides support for XEP\-0045: Multi\-User Chat\&. Users can discover existing rooms, join or create them\&. Occupants of a room can chat in public or have private chats\&.
|
||||
\fINote\fR about this option: incorporated \fImod_muc_occupantid\fR in 26\&.02\&.
|
||||
.sp
|
||||
This module provides support for Multi\-User Chat (MUC)\&. Users can discover existing rooms, join or create them\&. Occupants of a room can chat in public or have private chats\&.
|
||||
.sp
|
||||
Protocols implemented in this module:
|
||||
.sp
|
||||
.RS 4
|
||||
.ie n \{\
|
||||
\h'-04'\(bu\h'+03'\c
|
||||
.\}
|
||||
.el \{\
|
||||
.sp -1
|
||||
.IP \(bu 2.3
|
||||
.\}
|
||||
XEP\-0045: Multi\-User Chat
|
||||
.RE
|
||||
.sp
|
||||
.RS 4
|
||||
.ie n \{\
|
||||
\h'-04'\(bu\h'+03'\c
|
||||
.\}
|
||||
.el \{\
|
||||
.sp -1
|
||||
.IP \(bu 2.3
|
||||
.\}
|
||||
XEP\-0249: Direct MUC Invitations
|
||||
.RE
|
||||
.sp
|
||||
.RS 4
|
||||
.ie n \{\
|
||||
\h'-04'\(bu\h'+03'\c
|
||||
.\}
|
||||
.el \{\
|
||||
.sp -1
|
||||
.IP \(bu 2.3
|
||||
.\}
|
||||
XEP\-0421: Occupant identifiers for semi\-anonymous MUCs
|
||||
.RE
|
||||
.sp
|
||||
.RS 4
|
||||
.ie n \{\
|
||||
\h'-04'\(bu\h'+03'\c
|
||||
.\}
|
||||
.el \{\
|
||||
.sp -1
|
||||
.IP \(bu 2.3
|
||||
.\}
|
||||
XEP\-0486: MUC Avatars
|
||||
.RE
|
||||
.sp
|
||||
.RS 4
|
||||
.ie n \{\
|
||||
\h'-04'\(bu\h'+03'\c
|
||||
.\}
|
||||
.el \{\
|
||||
.sp -1
|
||||
.IP \(bu 2.3
|
||||
.\}
|
||||
Muc/Sub: Multi\-User Chat Subscriptions
|
||||
.RE
|
||||
.sp
|
||||
The MUC service allows any Jabber ID to register a nickname, so nobody else can use that nickname in any room in the MUC service\&. To register a nickname, open the Service Discovery in your XMPP client and register in the MUC service\&.
|
||||
.sp
|
||||
@@ -4864,10 +5323,11 @@ Short description of the room\&. The default value is an empty string\&.
|
||||
\fBenable_hats\fR: \fItrue | false\fR
|
||||
.RS 4
|
||||
\fINote\fR
|
||||
about this option: improved in 25\&.03\&. Allow extended roles as defined in XEP\-0317 Hats\&. Check the
|
||||
about this option: improved in 25\&.10\&. Allow extended roles as defined in
|
||||
XEP\-0317: Hats\&. For ejabberd older than 25\&.10 see the
|
||||
\fI\&.\&./\&.\&./tutorials/muc\-hats\&.md|MUC Hats\fR
|
||||
tutorial\&. The default value is
|
||||
\fIfalse\fR\&.
|
||||
page\&. The default value is
|
||||
\fItrue\fR\&.
|
||||
.RE
|
||||
.PP
|
||||
\fBlang\fR: \fILanguage\fR
|
||||
@@ -5465,15 +5925,6 @@ or a conference JID is appended to the
|
||||
otherwise\&. There is no default value\&.
|
||||
.RE
|
||||
.RE
|
||||
.SS "mod_muc_occupantid"
|
||||
.sp
|
||||
\fINote\fR about this option: added in 23\&.10\&.
|
||||
.sp
|
||||
This module implements XEP\-0421: Anonymous unique occupant identifiers for MUCs\&.
|
||||
.sp
|
||||
When the module is enabled, the feature is enabled in all semi\-anonymous rooms\&.
|
||||
.sp
|
||||
The module has no options\&.
|
||||
.SS "mod_muc_rtbl"
|
||||
.sp
|
||||
\fINote\fR about this option: added in 23\&.04\&.
|
||||
@@ -6203,7 +6654,7 @@ modules:
|
||||
.RE
|
||||
.\}
|
||||
.RE
|
||||
.SS "mod_providers 🟤"
|
||||
.SS "mod_providers"
|
||||
.sp
|
||||
\fINote\fR about this option: added in 25\&.08\&.
|
||||
.sp
|
||||
@@ -7206,7 +7657,9 @@ This module supports \fIbasic\&.md#captcha|CAPTCHA\fR to register a new account\
|
||||
.sp
|
||||
As an example usage, the users of the host \fIlocalhost\fR can visit the page: \fIhttps://localhost:5280/register/\fR It is important to include the last / character in the URL, otherwise the subpages URL will be incorrect\&.
|
||||
.sp
|
||||
This module is enabled in \fIlisten\fR → \fIejabberd_http\fR → \fIlisten\-options\&.md#request_handlers|request_handlers\fR, no need to enable in \fImodules\fR\&. The module depends on \fImod_register\fR where all the configuration is performed\&.
|
||||
This module is enabled in \fIlisten\fR → \fIejabberd_http\fR → \fIlisten\-options\&.md#request_handlers|request_handlers\fR\&.
|
||||
.sp
|
||||
There is no need to enable this module in \fImodules\fR, but it adds a link to the register page in WebAdmin menu\&. The module depends on \fImod_register\fR where all the configuration is performed\&.
|
||||
.sp
|
||||
The module has no options\&.
|
||||
.sp
|
||||
@@ -8862,7 +9315,7 @@ Should the operating system be revealed or not\&. The default value is
|
||||
.RE
|
||||
.SH "LISTENERS"
|
||||
.sp
|
||||
This section describes listeners options of ejabberd 25\&.08\&.
|
||||
This section describes listeners options of ejabberd 26\&.03\&.
|
||||
.sp
|
||||
TODO
|
||||
.SH "AUTHOR"
|
||||
@@ -8870,13 +9323,13 @@ TODO
|
||||
ProcessOne\&.
|
||||
.SH "VERSION"
|
||||
.sp
|
||||
This document describes the configuration file of ejabberd 25\&.08\&. Configuration options of other ejabberd versions may differ significantly\&.
|
||||
This document describes the configuration file of ejabberd 26\&.03\&. Configuration options of other ejabberd versions may differ significantly\&.
|
||||
.SH "REPORTING BUGS"
|
||||
.sp
|
||||
Report bugs to https://github\&.com/processone/ejabberd/issues
|
||||
.SH "SEE ALSO"
|
||||
.sp
|
||||
Default configuration file: https://github\&.com/processone/ejabberd/blob/25\&.08/ejabberd\&.yml\&.example
|
||||
Default configuration file: https://github\&.com/processone/ejabberd/blob/26\&.03/ejabberd\&.yml\&.example
|
||||
.sp
|
||||
Main site: https://ejabberd\&.im
|
||||
.sp
|
||||
@@ -8887,4 +9340,4 @@ Configuration Guide: https://docs\&.ejabberd\&.im/admin/configuration
|
||||
Source code: https://github\&.com/processone/ejabberd
|
||||
.SH "COPYING"
|
||||
.sp
|
||||
Copyright (c) 2002\-2025 ProcessOne\&.
|
||||
Copyright (c) 2002\-2026 ProcessOne\&.
|
||||
|
||||
@@ -6,7 +6,7 @@ defmodule Ejabberd.MixProject do
|
||||
source_url: "https://github.com/processone/ejabberd",
|
||||
version: version(),
|
||||
description: description(),
|
||||
elixir: elixir_required_version(),
|
||||
elixir: "~> 1.14",
|
||||
elixirc_paths: ["lib"],
|
||||
compile_path: ".",
|
||||
compilers: [:asn1, :yecc] ++ Mix.compilers(),
|
||||
@@ -84,21 +84,11 @@ defmodule Ejabberd.MixProject do
|
||||
includes = ["include", deps_include()]
|
||||
result = [{:d, :ELIXIR_ENABLED}] ++
|
||||
cond_options() ++
|
||||
if Mix.env == :test do [{:d, :TEST}] else [] end ++
|
||||
Enum.map(includes, fn (path) -> {:i, path} end) ++
|
||||
if_version_above(~c"20", [{:d, :DEPRECATED_GET_STACKTRACE}]) ++
|
||||
if_version_above(~c"20", [{:d, :HAVE_URI_STRING}]) ++
|
||||
if_version_above(~c"20", [{:d, :HAVE_ERL_ERROR}]) ++
|
||||
if_version_below(~c"21", [{:d, :USE_OLD_HTTP_URI}]) ++
|
||||
if_version_below(~c"22", [{:d, :LAGER}]) ++
|
||||
if_version_below(~c"21", [{:d, :NO_CUSTOMIZE_HOSTNAME_CHECK}]) ++
|
||||
if_version_below(~c"23", [{:d, :USE_OLD_CRYPTO_HMAC}]) ++
|
||||
if_version_below(~c"23", [{:d, :USE_OLD_PG2}]) ++
|
||||
if_version_below(~c"24", [{:d, :COMPILER_REPORTS_ONLY_LINES}]) ++
|
||||
if_version_below(~c"24", [{:d, :SYSTOOLS_APP_DEF_WITHOUT_OPTIONAL}]) ++
|
||||
if_version_below(~c"24", [{:d, :OTP_BELOW_24}]) ++
|
||||
if_version_below(~c"25", [{:d, :OTP_BELOW_25}]) ++
|
||||
if_version_below(~c"26", [{:d, :OTP_BELOW_26}]) ++
|
||||
if_version_below(~c"27", [{:d, :OTP_BELOW_27}]) ++
|
||||
if_version_below(~c"27", [{:feature, :maybe_expr, :enable}]) ++
|
||||
if_version_below(~c"28", [{:d, :OTP_BELOW_28}])
|
||||
defines = for {:d, value} <- result, do: {:d, value}
|
||||
result ++ [{:d, :ALL_DEFS, defines}]
|
||||
@@ -110,7 +100,7 @@ defmodule Ejabberd.MixProject do
|
||||
{config(:debug), :debug_info},
|
||||
{not config(:debug), {:debug_info, false}},
|
||||
{config(:roster_gateway_workaround), {:d, :ROSTER_GATEWAY_WORKAROUND}},
|
||||
{config(:new_sql_schema), {:d, :NEW_SQL_SCHEMA}}
|
||||
{config(:multihost_sql_schema), {:d, :MULTIHOST_SQL_SCHEMA}}
|
||||
], do:
|
||||
option
|
||||
end
|
||||
@@ -119,19 +109,20 @@ defmodule Ejabberd.MixProject do
|
||||
[{:cache_tab, "~> 1.0"},
|
||||
{:dialyxir, "~> 1.2", only: [:test], runtime: false},
|
||||
{:eimp, "~> 1.0"},
|
||||
{:erlydtl, "~> 0.14.0"},
|
||||
{:ex_doc, "~> 0.31", only: [:edoc], runtime: false},
|
||||
{:fast_tls, "~> 1.1.24"},
|
||||
{:fast_xml, "~> 1.1.56"},
|
||||
{:fast_yaml, "~> 1.0"},
|
||||
{:idna, "~> 6.0"},
|
||||
{:idna, "~> 7.1"},
|
||||
{:mqtree, "~> 1.0"},
|
||||
{:p1_acme, ">= 1.0.28"},
|
||||
{:p1_oauth2, "~> 0.6"},
|
||||
{:p1_utils, "~> 1.0"},
|
||||
{:pkix, "~> 1.0"},
|
||||
{:stringprep, ">= 1.0.26"},
|
||||
{:xmpp, ">= 1.11.1"},
|
||||
{:yconf, ">= 1.0.21"}]
|
||||
{:xmpp, ">= 1.13.1"},
|
||||
{:yconf, ">= 1.0.22"}]
|
||||
++ cond_deps()
|
||||
end
|
||||
|
||||
@@ -155,13 +146,12 @@ defmodule Ejabberd.MixProject do
|
||||
{config(:redis), {:eredis, "~> 1.7.1"}},
|
||||
{config(:sip), {:esip, "~> 1.0"}},
|
||||
{config(:zlib), {:ezlib, "~> 1.0"}},
|
||||
{if_version_above(~c"23", true), {:jose, "~> 1.11.10"}},
|
||||
{if_version_below(~c"24", true), {:jose, "1.11.1", override: true}},
|
||||
{if_version_below(~c"27", true), {:jiffy, "~> 1.1.1"}},
|
||||
{if_version_below(~c"22", true), {:lager, "~> 3.9.1"}},
|
||||
{if_version_below(~c"26", true), {:jose, "1.11.10", override: true}},
|
||||
{if_version_above(~c"25", true), {:jose, "~> 1.11.12"}},
|
||||
{config(:lua), {:luerl, "~> 1.2.0"}},
|
||||
{config(:mysql), {:p1_mysql, ">= 1.0.24"}},
|
||||
{config(:pgsql), {:p1_pgsql, ">= 1.1.32"}},
|
||||
{config(:mysql), {:p1_mysql, ">= 1.0.28"}},
|
||||
{config(:pgsql), {:p1_pgsql, ">= 1.1.38"}},
|
||||
{config(:sqlite), {:sqlite3, "~> 1.1"}},
|
||||
{config(:stun), {:stun, "~> 1.0"}}], do:
|
||||
dep
|
||||
@@ -182,7 +172,6 @@ defmodule Ejabberd.MixProject do
|
||||
{config(:redis), :eredis},
|
||||
{Mix.env() == :edoc, :ex_doc},
|
||||
{Mix.env() == :test, :dialyxir},
|
||||
{if_version_below(~c"22", true), :lager},
|
||||
{config(:mysql), :p1_mysql},
|
||||
{config(:sip), :esip},
|
||||
{config(:odbc), :odbc},
|
||||
@@ -229,35 +218,6 @@ defmodule Ejabberd.MixProject do
|
||||
end
|
||||
end
|
||||
|
||||
defp elixir_required_version do
|
||||
case {Map.get(System.get_env(), "RELIVE", "false"),
|
||||
MapSet.member?(MapSet.new(System.argv()), "release")}
|
||||
do
|
||||
{"true", _} ->
|
||||
case Version.match?(System.version(), "~> 1.11") do
|
||||
false ->
|
||||
IO.puts("ERROR: To use 'make relive', Elixir 1.11.0 or higher is required.")
|
||||
_ -> :ok
|
||||
end
|
||||
"~> 1.11"
|
||||
{_, true} ->
|
||||
case Version.match?(System.version(), "~> 1.10") do
|
||||
false ->
|
||||
IO.puts("ERROR: To build releases, Elixir 1.10.0 or higher is required.")
|
||||
_ -> :ok
|
||||
end
|
||||
case Version.match?(System.version(), "< 1.11.4")
|
||||
and :erlang.system_info(:otp_release) > ~c"23" do
|
||||
true ->
|
||||
IO.puts("ERROR: To build releases with Elixir lower than 1.11.4, Erlang/OTP lower than 24 is required.")
|
||||
_ -> :ok
|
||||
end
|
||||
"~> 1.10"
|
||||
_ ->
|
||||
"~> 1.4"
|
||||
end
|
||||
end
|
||||
|
||||
defp releases do
|
||||
maybe_tar = case Mix.env() do
|
||||
:prod -> [:tar]
|
||||
@@ -296,22 +256,8 @@ defmodule Ejabberd.MixProject do
|
||||
ro = "rel/overlays"
|
||||
File.rm_rf(ro)
|
||||
|
||||
# Elixir lower than 1.12.0 don't have System.shell
|
||||
execute = fn(command) ->
|
||||
case function_exported?(System, :shell, 1) do
|
||||
true ->
|
||||
System.shell(command, into: IO.stream())
|
||||
false ->
|
||||
:os.cmd(to_charlist(command))
|
||||
end
|
||||
end
|
||||
|
||||
# Mix/Elixir lower than 1.11.0 use config/releases.exs instead of runtime.exs
|
||||
case Version.match?(System.version(), "~> 1.11") do
|
||||
true ->
|
||||
:ok
|
||||
false ->
|
||||
execute.("cp config/runtime.exs config/releases.exs")
|
||||
System.shell(command, into: IO.stream())
|
||||
end
|
||||
|
||||
execute.("sed -e 's|{{\\(\[_a-z\]*\\)}}|<%= @\\1 %>|g' ejabberdctl.template > ejabberdctl.example1")
|
||||
@@ -389,6 +335,7 @@ defmodule Ejabberd.MixProject do
|
||||
"CONTRIBUTORS.md": [title: "Contributors"],
|
||||
"CODE_OF_CONDUCT.md": [title: "Code of Conduct"],
|
||||
"CHANGELOG.md": [title: "ChangeLog"],
|
||||
"SECURITY.md": [title: "Security Policy"],
|
||||
"COPYING": [title: "Copying License"],
|
||||
"_build/edoc/docs.md": [title: "⟹ ejabberd Docs"]
|
||||
],
|
||||
|
||||
@@ -1,39 +1,34 @@
|
||||
%{
|
||||
"base64url": {:hex, :base64url, "1.0.1", "f8c7f2da04ca9a5d0f5f50258f055e1d699f0e8bf4cfdb30b750865368403cf6", [:rebar3], [], "hexpm", "f9b3add4731a02a9b0410398b475b33e7566a695365237a6bdee1bb447719f5c"},
|
||||
"cache_tab": {:hex, :cache_tab, "1.0.33", "e2542afb34f17ee3ca19d2b0f546a074922c2b99fb6b2acfb38160d7d0336ec3", [:rebar3], [{:p1_utils, "1.0.28", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "4258009eb050b22aabe0c848e230bba58401a6895c58c2ff74dfb635e3c35900"},
|
||||
"dialyxir": {:hex, :dialyxir, "1.4.6", "7cca478334bf8307e968664343cbdb432ee95b4b68a9cba95bdabb0ad5bdfd9a", [:mix], [{:erlex, ">= 0.2.7", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "8cf5615c5cd4c2da6c501faae642839c8405b49f8aa057ad4ae401cb808ef64d"},
|
||||
"cache_tab": {:hex, :cache_tab, "1.0.34", "935902ac8300d30f17c24f4d4056175f053ccc0572acab5fb4d1ce503831bee1", [:rebar3], [{:p1_utils, "1.0.29", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "0db9f317f3941c17c9f8ea8125e25efa27bbed4cbf24a42c426fada74c82b692"},
|
||||
"dialyxir": {:hex, :dialyxir, "1.4.7", "dda948fcee52962e4b6c5b4b16b2d8fa7d50d8645bbae8b8685c3f9ecb7f5f4d", [:mix], [{:erlex, ">= 0.2.8", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "b34527202e6eb8cee198efec110996c25c5898f43a4094df157f8d28f27d9efe"},
|
||||
"earmark_parser": {:hex, :earmark_parser, "1.4.44", "f20830dd6b5c77afe2b063777ddbbff09f9759396500cdbe7523efd58d7a339c", [:mix], [], "hexpm", "4778ac752b4701a5599215f7030989c989ffdc4f6df457c5f36938cc2d2a2750"},
|
||||
"eimp": {:hex, :eimp, "1.0.26", "c0b05f32e35629c4d9bcfb832ff879a92b0f92b19844bc7835e0a45635f2899a", [:rebar3], [{:p1_utils, "~> 1.0.25", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "d96d4e8572b9dfc40f271e47f0cb1d8849373bc98a21223268781765ed52044c"},
|
||||
"epam": {:hex, :epam, "1.0.14", "aa0b85d27f4ef3a756ae995179df952a0721237e83c6b79d644347b75016681a", [:rebar3], [], "hexpm", "2f3449e72885a72a6c2a843f561add0fc2f70d7a21f61456930a547473d4d989"},
|
||||
"eimp": {:hex, :eimp, "1.0.27", "14bf9e6fac791d0c098708cbc5a0928746ed575869f4ce42a266643947790a3a", [:rebar3], [{:p1_utils, "~> 1.0.25", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "3c7e83e293bcfaf50a1bf054fc4b62b7b8c484a6e4218e397709a4d0d857f3fc"},
|
||||
"eredis": {:hex, :eredis, "1.7.1", "39e31aa02adcd651c657f39aafd4d31a9b2f63c6c700dc9cece98d4bc3c897ab", [:mix, :rebar3], [], "hexpm", "7c2b54c566fed55feef3341ca79b0100a6348fd3f162184b7ed5118d258c3cc1"},
|
||||
"erlex": {:hex, :erlex, "0.2.7", "810e8725f96ab74d17aac676e748627a07bc87eb950d2b83acd29dc047a30595", [:mix], [], "hexpm", "3ed95f79d1a844c3f6bf0cea61e0d5612a42ce56da9c03f01df538685365efb0"},
|
||||
"esip": {:hex, :esip, "1.0.59", "eb202f8c62928193588091dfedbc545fe3274c34ecd209961f86dcb6c9ebce88", [:rebar3], [{:fast_tls, "1.1.25", [hex: :fast_tls, repo: "hexpm", optional: false]}, {:p1_utils, "1.0.28", [hex: :p1_utils, repo: "hexpm", optional: false]}, {:stun, "1.2.21", [hex: :stun, repo: "hexpm", optional: false]}], "hexpm", "0bdf2e3c349dc0b144f173150329e675c6a51ac473d7a0b2e362245faad3fbe6"},
|
||||
"ex_doc": {:hex, :ex_doc, "0.38.2", "504d25eef296b4dec3b8e33e810bc8b5344d565998cd83914ffe1b8503737c02", [:mix], [{:earmark_parser, "~> 1.4.44", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_c, ">= 0.1.0", [hex: :makeup_c, repo: "hexpm", optional: true]}, {:makeup_elixir, "~> 0.14 or ~> 1.0", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1 or ~> 1.0", [hex: :makeup_erlang, repo: "hexpm", optional: false]}, {:makeup_html, ">= 0.1.0", [hex: :makeup_html, repo: "hexpm", optional: true]}], "hexpm", "732f2d972e42c116a70802f9898c51b54916e542cc50968ac6980512ec90f42b"},
|
||||
"erlex": {:hex, :erlex, "0.2.8", "cd8116f20f3c0afe376d1e8d1f0ae2452337729f68be016ea544a72f767d9c12", [:mix], [], "hexpm", "9d66ff9fedf69e49dc3fd12831e12a8a37b76f8651dd21cd45fcf5561a8a7590"},
|
||||
"erlydtl": {:hex, :erlydtl, "0.14.0", "964b2dc84f8c17acfaa69c59ba129ef26ac45d2ba898c3c6ad9b5bdc8ba13ced", [:rebar3], [], "hexpm", "d80ec044cd8f58809c19d29ac5605be09e955040911b644505e31e9dd8143431"},
|
||||
"ex_doc": {:hex, :ex_doc, "0.40.1", "67542e4b6dde74811cfd580e2c0149b78010fd13001fda7cfeb2b2c2ffb1344d", [:mix], [{:earmark_parser, "~> 1.4.44", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_c, ">= 0.1.0", [hex: :makeup_c, repo: "hexpm", optional: true]}, {:makeup_elixir, "~> 0.14 or ~> 1.0", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1 or ~> 1.0", [hex: :makeup_erlang, repo: "hexpm", optional: false]}, {:makeup_html, ">= 0.1.0", [hex: :makeup_html, repo: "hexpm", optional: true]}], "hexpm", "bcef0e2d360d93ac19f01a85d58f91752d930c0a30e2681145feea6bd3516e00"},
|
||||
"exsync": {:hex, :exsync, "0.4.1", "0a14fe4bfcb80a509d8a0856be3dd070fffe619b9ba90fec13c58b316c176594", [:mix], [{:file_system, "~> 0.2 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}], "hexpm", "cefb22aa805ec97ffc5b75a4e1dc54bcaf781e8b32564bf74abbe5803d1b5178"},
|
||||
"ezlib": {:hex, :ezlib, "1.0.15", "d74f5df191784744726a5b1ae9062522c606334f11086363385eb3b772d91357", [:rebar3], [{:p1_utils, "1.0.28", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "dd14ba6c12521af5cfe6923e73e3d545f4a0897dc66bfab5287fbb7ae3962eab"},
|
||||
"fast_tls": {:hex, :fast_tls, "1.1.25", "da8ed6f05a2452121b087158b17234749f36704c1f2b74dc51db99a1e27ed5e8", [:rebar3], [{:p1_utils, "~> 1.0.26", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "59e183b5740e670e02b8aa6be673b5e7779e5fe5bfcc679fe2d4993d1949a821"},
|
||||
"fast_xml": {:hex, :fast_xml, "1.1.57", "31efc0f9bceda92069704f7a25830407da5dc3dad1272b810d6f2e13e73cc11a", [:rebar3], [{:p1_utils, "1.0.28", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "eec34e90adacafe467d5ddab635a014ded73b98b4061554b2d1972173d929c39"},
|
||||
"fast_yaml": {:hex, :fast_yaml, "1.0.39", "2e71168091949bab0e5f583b340a99072b4d22d93eb86624e7850a12b1517be4", [:rebar3], [{:p1_utils, "1.0.28", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "24c7b9ab9e2b9269d64e45f4a2a1280966adb17d31e63365cfd3ee277fb0a78d"},
|
||||
"file_system": {:hex, :file_system, "1.1.0", "08d232062284546c6c34426997dd7ef6ec9f8bbd090eb91780283c9016840e8f", [:mix], [], "hexpm", "bfcf81244f416871f2a2e15c1b515287faa5db9c6bcf290222206d120b3d43f6"},
|
||||
"idna": {:hex, :idna, "6.1.1", "8a63070e9f7d0c62eb9d9fcb360a7de382448200fbbd1b106cc96d3d8099df8d", [:rebar3], [{:unicode_util_compat, "~> 0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "92376eb7894412ed19ac475e4a86f7b413c1b9fbb5bd16dccd57934157944cea"},
|
||||
"jiffy": {:hex, :jiffy, "1.1.2", "a9b6c9a7ec268e7cf493d028f0a4c9144f59ccb878b1afe42841597800840a1b", [:rebar3], [], "hexpm", "bb61bc42a720bbd33cb09a410e48bb79a61012c74cb8b3e75f26d988485cf381"},
|
||||
"jose": {:hex, :jose, "1.11.10", "a903f5227417bd2a08c8a00a0cbcc458118be84480955e8d251297a425723f83", [:mix, :rebar3], [], "hexpm", "0d6cd36ff8ba174db29148fc112b5842186b68a90ce9fc2b3ec3afe76593e614"},
|
||||
"luerl": {:hex, :luerl, "1.2.3", "df25f41944e57a7c4d9ef09d238bc3e850276c46039cfc12b8bb42eccf36fcb1", [:rebar3], [], "hexpm", "1b4b9d0ca5d7d280d1d2787a6a5ee9f5a212641b62bff91556baa53805df3aed"},
|
||||
"ezlib": {:hex, :ezlib, "1.0.16", "8e0f209cb61db4034a3e7c920f21dd36330ba45884e707746898d5ee0db487c1", [:rebar3], [{:p1_utils, "1.0.29", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "b4819540403d1ecb7eae645fdff142a8db2b476d893288d39babb92922250405"},
|
||||
"fast_tls": {:hex, :fast_tls, "1.1.26", "5e46246020f9338c0661254eee0ff98e8b253a2331b3b51afb4eb8b0b3cf41ff", [:rebar3], [{:p1_utils, "~> 1.0.26", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "6b0d4dd2309037565ebaa9acf39f02808f5f8215a39101a1da33c2a5b1b59b3f"},
|
||||
"fast_xml": {:hex, :fast_xml, "1.1.58", "1fcfdfb58c4278dc1a163e68d1f83ba165553b1a68d48bf7e9954bb4fbf8571e", [:rebar3], [{:p1_utils, "1.0.29", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "a36d6e03a398c53ba189e912bf4c7559a3704ac63c5050f126d47414018b4ca0"},
|
||||
"fast_yaml": {:hex, :fast_yaml, "1.0.40", "053109abed40a80fb1e4a231ebfed39e93a4872d73e462fe9a2128503b6233d8", [:rebar3], [{:p1_utils, "1.0.29", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "27705c29902c1c6f3268ba9bf387d5fa928b2e655b53110fa47b8e476d32b386"},
|
||||
"file_system": {:hex, :file_system, "1.1.1", "31864f4685b0148f25bd3fbef2b1228457c0c89024ad67f7a81a3ffbc0bbad3a", [:mix], [], "hexpm", "7a15ff97dfe526aeefb090a7a9d3d03aa907e100e262a0f8f7746b78f8f87a5d"},
|
||||
"idna": {:hex, :idna, "7.1.0", "1067a13043538129602d2f2ce6899d8713125c7d19734aa557ce2e3ea55bd4f1", [:rebar3], [], "hexpm", "6ae959a025bf36df61a8cab8508d9654891b5426a84c44d82deaffd6ddf8c71f"},
|
||||
"jose": {:hex, :jose, "1.11.12", "06e62b467b61d3726cbc19e9b5489f7549c37993de846dfb3ee8259f9ed208b3", [:mix, :rebar3], [], "hexpm", "31e92b653e9210b696765cdd885437457de1add2a9011d92f8cf63e4641bab7b"},
|
||||
"makeup": {:hex, :makeup, "1.2.1", "e90ac1c65589ef354378def3ba19d401e739ee7ee06fb47f94c687016e3713d1", [:mix], [{:nimble_parsec, "~> 1.4", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "d36484867b0bae0fea568d10131197a4c2e47056a6fbe84922bf6ba71c8d17ce"},
|
||||
"makeup_elixir": {:hex, :makeup_elixir, "1.0.1", "e928a4f984e795e41e3abd27bfc09f51db16ab8ba1aebdba2b3a575437efafc2", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.2.3 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "7284900d412a3e5cfd97fdaed4f5ed389b8f2b4cb49efc0eb3bd10e2febf9507"},
|
||||
"makeup_erlang": {:hex, :makeup_erlang, "1.0.2", "03e1804074b3aa64d5fad7aa64601ed0fb395337b982d9bcf04029d68d51b6a7", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "af33ff7ef368d5893e4a267933e7744e46ce3cf1f61e2dccf53a111ed3aa3727"},
|
||||
"mqtree": {:hex, :mqtree, "1.0.19", "d769c25f898810725fc7db0dbffe5f72098647048b1be2e6d772f1c2f31d8476", [:rebar3], [{:p1_utils, "1.0.28", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "c81065715c49a1882812f80a5ae2d842e80dd3f2d130530df35990248bf8ce3c"},
|
||||
"makeup_erlang": {:hex, :makeup_erlang, "1.0.3", "4252d5d4098da7415c390e847c814bad3764c94a814a0b4245176215615e1035", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "953297c02582a33411ac6208f2c6e55f0e870df7f80da724ed613f10e6706afd"},
|
||||
"mqtree": {:hex, :mqtree, "1.0.20", "aec4b0299dfe3680014d32fd44069f8273867ce8c7d8f09492d2befdddd98598", [:rebar3], [{:p1_utils, "1.0.29", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "5ec0e07b9c48a7840649600bf96e140b4fbe9e5017e1ddd3e898e15c0a383ed0"},
|
||||
"nimble_parsec": {:hex, :nimble_parsec, "1.4.2", "8efba0122db06df95bfaa78f791344a89352ba04baedd3849593bfce4d0dc1c6", [:mix], [], "hexpm", "4b21398942dda052b403bbe1da991ccd03a053668d147d53fb8c4e0efe09c973"},
|
||||
"p1_acme": {:hex, :p1_acme, "1.0.28", "64d9c17f5412aa92d75b29206b2b984d734a4fe1b7eacb66c3d7a7c697ac612c", [:rebar3], [{:base64url, "~> 1.0", [hex: :base64url, repo: "hexpm", optional: false]}, {:idna, "~> 6.0", [hex: :idna, repo: "hexpm", optional: false]}, {:jiffy, "~> 1.1.1", [hex: :jiffy, repo: "hexpm", optional: false]}, {:jose, "~> 1.11.10", [hex: :jose, repo: "hexpm", optional: false]}, {:yconf, "~> 1.0.17", [hex: :yconf, repo: "hexpm", optional: false]}], "hexpm", "ce686986de3f9d5fd285afe87523cb45329a349c6c6be7acc1ed916725d46423"},
|
||||
"p1_mysql": {:hex, :p1_mysql, "1.0.26", "574d07c9936c53b1ec3556db3cf064cc14a6c39039835b3d940471bfa5ac8e2b", [:rebar3], [], "hexpm", "ea138083f2c54719b9cf549dbf5802a288b0019ea3e5449b354c74cc03fafdec"},
|
||||
"p1_acme": {:hex, :p1_acme, "1.0.31", "d504620b4cb3349c9389f169481c5d88a149a44def58f4b52c6f0036cac314d0", [:rebar3], [{:idna, "~> 7.1", [hex: :idna, repo: "hexpm", optional: false]}, {:jose, "~> 1.11.12", [hex: :jose, repo: "hexpm", optional: false]}, {:yconf, "~> 1.0.22", [hex: :yconf, repo: "hexpm", optional: false]}], "hexpm", "9b5922a90ab94da5889e64de5ccad3adc6e68a6d3c3fb708dd503757b232db1c"},
|
||||
"p1_mysql": {:hex, :p1_mysql, "1.0.28", "8cffdfae7b3341dcd808fb723a3fcaeee3e55b9c971b7f75f6b0d7af6a3151e6", [:rebar3], [], "hexpm", "6e4d00e8ece505ba5091c8dab3aefe415cf2d836ff39508344c3527b366d9919"},
|
||||
"p1_oauth2": {:hex, :p1_oauth2, "0.6.14", "1c5f82535574de87e2059695ac4b91f8f9aebacbc1c80287dae6f02552d47aea", [:rebar3], [], "hexpm", "1fd3ac474e43722d9d5a87c6df8d36f698ed87af7bb81cbbb66361451d99ae8f"},
|
||||
"p1_pgsql": {:hex, :p1_pgsql, "1.1.35", "e13d89f14d717553e85c88a152ce77461916b013d88fcb851e354a0b332d4218", [:rebar3], [{:xmpp, "~> 1.11.0", [hex: :xmpp, repo: "hexpm", optional: false]}], "hexpm", "e99594446c411c660696795b062336f5c4bd800451d8f620bb4d4ce304e255c2"},
|
||||
"p1_utils": {:hex, :p1_utils, "1.0.28", "9a7088a98d788b4c4880fd3c82d0c135650db13f2e4ef7e10db179791bc94d59", [:rebar3], [], "hexpm", "c49bd44bc4a40ad996691af826dd7e0aa56d4d0cd730817190a1f84d1a7f0033"},
|
||||
"p1_pgsql": {:hex, :p1_pgsql, "1.1.41", "b67cadb9079f809154d829a5eb5374619a60befd4da112ff59a759ea723548e1", [:rebar3], [{:stringprep, "~> 1.0.33", [hex: :stringprep, repo: "hexpm", optional: false]}], "hexpm", "26ee2aba3d450464edd4b3ff9dab2c6a53fc20bbfd330a6973982b906504a172"},
|
||||
"p1_utils": {:hex, :p1_utils, "1.0.29", "e3a8621c2cf5ecde52065b4c6650803e25fdd9462f92dec96f29032a163cbb0d", [:rebar3], [], "hexpm", "2071421cadb5b8fff114e91d4d944f14851c332391f6e93fc5011aad64abe1b9"},
|
||||
"pkix": {:hex, :pkix, "1.0.10", "d3bfadf7b7cfe2a3636f1b256c9cce5f646a07ce31e57ee527668502850765a0", [:rebar3], [], "hexpm", "e02164f83094cb124c41b1ab28988a615d54b9adc38575f00f19a597a3ac5d0e"},
|
||||
"sqlite3": {:hex, :sqlite3, "1.1.15", "e819defd280145c328457d7af897d2e45e8e5270e18812ee30b607c99cdd21af", [:rebar3], [], "hexpm", "3c0ba4e13322c2ad49de4e2ddd28311366adde54beae8dba9d9e3888f69d2857"},
|
||||
"stringprep": {:hex, :stringprep, "1.0.33", "22f42866b4f6f3c238ea2b9cb6241791184ddedbab55e94a025511f46325f3ca", [:rebar3], [{:p1_utils, "1.0.28", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "96f8b30bc50887f605b33b46bca1d248c19a879319b8c482790e3b4da5da98c0"},
|
||||
"stun": {:hex, :stun, "1.2.21", "735855314ad22cb7816b88597d2f5ca22e24aa5e4d6010a0ef3affb33ceed6a5", [:rebar3], [{:fast_tls, "1.1.25", [hex: :fast_tls, repo: "hexpm", optional: false]}, {:p1_utils, "1.0.28", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "3d7fe8efb9d05b240a6aa9a6bf8b8b7bff2d802895d170443c588987dc1e12d9"},
|
||||
"unicode_util_compat": {:hex, :unicode_util_compat, "0.7.1", "a48703a25c170eedadca83b11e88985af08d35f37c6f664d6dcfb106a97782fc", [:rebar3], [], "hexpm", "b3a917854ce3ae233619744ad1e0102e05673136776fb2fa76234f3e03b23642"},
|
||||
"xmpp": {:hex, :xmpp, "1.11.1", "60181e7d3e8e48aa3b23b2792075cda37e2e507ec152490b866e61e5320cb1da", [:rebar3], [{:ezlib, "~> 1.0.12", [hex: :ezlib, repo: "hexpm", optional: false]}, {:fast_tls, "~> 1.1.19", [hex: :fast_tls, repo: "hexpm", optional: false]}, {:fast_xml, "~> 1.1.51", [hex: :fast_xml, repo: "hexpm", optional: false]}, {:idna, "~> 6.0", [hex: :idna, repo: "hexpm", optional: false]}, {:p1_utils, "~> 1.0.26", [hex: :p1_utils, repo: "hexpm", optional: false]}, {:stringprep, "~> 1.0.29", [hex: :stringprep, repo: "hexpm", optional: false]}], "hexpm", "a5c933df904ab3cec15425da334e410ce84ec3ae7b81efe069e5db368a7b3716"},
|
||||
"yconf": {:hex, :yconf, "1.0.21", "dbae1589381e044529e112b7e0097c89d88df89e446ead53bd33e8d27e2bcc83", [:rebar3], [{:fast_yaml, "1.0.39", [hex: :fast_yaml, repo: "hexpm", optional: false]}], "hexpm", "c524a5f1fd86875d85b469cc2e368c204f97cca1c3918736e21f5001c01d096c"},
|
||||
"stringprep": {:hex, :stringprep, "1.0.34", "b9d592c684e540c4cb867485742635ebc4738925bc28f411302db883baf44a49", [:rebar3], [{:p1_utils, "1.0.29", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "27e78ea371881764e056fbe845d3ad304740ff5e3131bc1f38a66f0baa8c9b47"},
|
||||
"stun": {:hex, :stun, "1.2.22", "bfacc08bd3724968de6d2a4acfa9761232cebef9ff6bd9ff8b000e4bb4ce92a4", [:rebar3], [{:fast_tls, "1.1.26", [hex: :fast_tls, repo: "hexpm", optional: false]}, {:p1_utils, "1.0.29", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "3408b4b11d5237a088f53b260a06940c30b16f4a48094892d6a9204e1643188a"},
|
||||
"xmpp": {:hex, :xmpp, "1.13.1", "b75831a205a286478aa0dc122b91199ab125e14032e452d1aca4276ee4d44c42", [:rebar3], [{:ezlib, "~> 1.0.16", [hex: :ezlib, repo: "hexpm", optional: false]}, {:fast_tls, "~> 1.1.26", [hex: :fast_tls, repo: "hexpm", optional: false]}, {:fast_xml, "~> 1.1.58", [hex: :fast_xml, repo: "hexpm", optional: false]}, {:idna, "~> 7.1", [hex: :idna, repo: "hexpm", optional: false]}, {:p1_utils, "~> 1.0.29", [hex: :p1_utils, repo: "hexpm", optional: false]}, {:stringprep, "~> 1.0.34", [hex: :stringprep, repo: "hexpm", optional: false]}], "hexpm", "a024eef7ccb4f78b9fb52e37d6385a57bdd150be75e50d51bbcbaf39a9ab883d"},
|
||||
"yconf": {:hex, :yconf, "1.0.23", "1aa5ac72c007b80818ded5b65f76cfc98694b07b2da18202498ec4a4aefe191f", [:rebar3], [{:fast_yaml, "1.0.40", [hex: :fast_yaml, repo: "hexpm", optional: false]}], "hexpm", "25b4dfb75328026acaa774cf5c6fb87d48b55eebce630ddaa3362441dac31437"},
|
||||
}
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
{
|
||||
"name": "ejabberd",
|
||||
"version": "1.0.0",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "ejabberd",
|
||||
"version": "1.0.0",
|
||||
"hasInstallScript": true,
|
||||
"dependencies": {
|
||||
"bootstrap": "^5.3.8",
|
||||
"jquery": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@popperjs/core": {
|
||||
"version": "2.11.8",
|
||||
"resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
|
||||
"integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/popperjs"
|
||||
}
|
||||
},
|
||||
"node_modules/bootstrap": {
|
||||
"version": "5.3.8",
|
||||
"resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.8.tgz",
|
||||
"integrity": "sha512-HP1SZDqaLDPwsNiqRqi5NcP0SSXciX2s9E+RyqJIIqGo+vJeN5AJVM98CXmW/Wux0nQ5L7jeWUdplCEf0Ee+tg==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/twbs"
|
||||
},
|
||||
{
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/bootstrap"
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"peerDependencies": {
|
||||
"@popperjs/core": "^2.11.8"
|
||||
}
|
||||
},
|
||||
"node_modules/jquery": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/jquery/-/jquery-4.0.0.tgz",
|
||||
"integrity": "sha512-TXCHVR3Lb6TZdtw1l3RTLf8RBWVGexdxL6AC8/e0xZKEpBflBsjh9/8LXw+dkNFuOyW9B7iB3O1sP7hS0Kiacg==",
|
||||
"license": "MIT"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"name": "ejabberd",
|
||||
"version": "1.0.0",
|
||||
"dependencies": {
|
||||
"bootstrap": "^5.3.8",
|
||||
"jquery": "^4.0.0"
|
||||
},
|
||||
"scripts": {
|
||||
"postinstall": "npm run -s clean && npm run -s mkdir-jquery && npm run -s cp-jquery && npm run -s cp-bootstrap",
|
||||
"clean": "rm -rf priv/mod_invites/static/{jquery,bootstrap}",
|
||||
"mkdir-jquery": "mkdir -p priv/mod_invites/static/jquery",
|
||||
"cp-jquery": "cp node_modules/jquery/dist/jquery.min.js priv/mod_invites/static/jquery/jquery.min.js",
|
||||
"cp-bootstrap": "cp -r node_modules/bootstrap/dist priv/mod_invites/static/bootstrap"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
<div class="container mb-0">
|
||||
<div class="row">
|
||||
{% for item in apps %}
|
||||
<div class="card mx-0 mb-3 me-3 client-card {% for platform in item.platforms %}app-platform-{{ platform|lower }} {% endfor %}flex-wrap col-sm-12 col-md-8 col-lg-5">
|
||||
<div class="row no-gutters h-100">
|
||||
<div class="col-md-4 pt-2 mt-1">
|
||||
<img src="{{ static }}/{{ item.image }}" class="p-2 img-fluid" alt="{{ item.alttext }}">
|
||||
</div>
|
||||
<div class="col-md-8">
|
||||
<div class="card-body d-flex flex-column h-100">
|
||||
<h3 class="card-title text-nowrap mb-1 h5">{{ item.name }}</h3>
|
||||
<div>
|
||||
{% for platform in item.platforms %}<span class="badge text-bg-info client-platform-badge client-platform-badge-{{ platform|lower }} me-1 mb-3">{{ platform }}</span>{% endfor %}
|
||||
</div>
|
||||
<p class="card-text">{{ item.text }}</p>
|
||||
<a href="{{ item.proceed_url }}" class="btn btn-primary mt-md-auto" tabindex="{{ forloop.counter|add:2 }}">{% if item.select_text %}{{ item.select_text }}{% else %}{% trans "Select" %}{% endif %}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
<div id="show-all-clients-button-container" class="d-none alert alert-info mb-0">
|
||||
{% blocktrans with tabidx=apps|length|add:2 %}Showing apps for <span class='platform-name'>your current platform</span> only. You may also <a href='#' id='show-all-clients-button' tabindex="{{ tabidx }}">view all apps.</a>{% endblocktrans %}
|
||||
</div>
|
||||
@@ -0,0 +1,196 @@
|
||||
[
|
||||
{
|
||||
"download": {
|
||||
"buttons": [
|
||||
{
|
||||
"image": "{{ static }}/logos/google_ps.png",
|
||||
"alttext": "{% trans 'Google Play Store Logo' %}",
|
||||
"url": "https://play.google.com/store/apps/details?id=eu.siacs.conversations",
|
||||
"magic_link_format": "https://play.google.com/store/apps/details?id=eu.siacs.conversations&referrer={{ uri }}"
|
||||
},
|
||||
{
|
||||
"image": "{{ static }}/logos/fdroid.png",
|
||||
"alttext": "{% trans 'F-Droid Store Logo' %}",
|
||||
"url": "https://f-droid.org/en/packages/eu.siacs.conversations/",
|
||||
"magic_link_format": "https://f-droid.org/packages/eu.siacs.conversations/"
|
||||
}
|
||||
]
|
||||
},
|
||||
"image": "logos/conversations.svg",
|
||||
"alttext": "{% trans 'Conversations Logo' %}",
|
||||
"link": "https://play.google.com/store/apps/details?id=eu.siacs.conversations",
|
||||
"magic_link_format": "https://play.google.com/store/apps/details?id=eu.siacs.conversations&referrer={{ uri }}",
|
||||
"name": "Conversations",
|
||||
"platforms": [
|
||||
"Android"
|
||||
],
|
||||
"supports_preauth_uri": true,
|
||||
"text": "{% trans 'Conversations is a Jabber/XMPP client for Android 6.0+ smartphones that has been optimized to provide a unique mobile experience.' %}"
|
||||
},
|
||||
{
|
||||
"download": {
|
||||
"buttons": [
|
||||
{
|
||||
"image": "{{ static }}/logos/apple_as.svg",
|
||||
"alttext": "{% trans 'Apple Store Logo' %}",
|
||||
"target": "_blank",
|
||||
"url": "https://apps.apple.com/app/id317711500"
|
||||
}
|
||||
]
|
||||
},
|
||||
"image": "logos/monal-tmp.svg",
|
||||
"alttext": "{% trans 'Monal Logo' %}",
|
||||
"link": "https://monal-im.org/",
|
||||
"name": "Monal",
|
||||
"platforms": [
|
||||
"iOS", "iPadOS"
|
||||
],
|
||||
"supports_preauth_uri": true,
|
||||
"text": "{% trans 'A modern open-source chat client for iPhone and iPad. It is easy to use and has a clean user interface.' %}"
|
||||
},
|
||||
{
|
||||
"download": {
|
||||
"buttons": [
|
||||
{
|
||||
"image": "{{ static }}/logos/apple_as.svg",
|
||||
"alttext": "{% trans 'Apple Store Logo' %}",
|
||||
"target": "_blank",
|
||||
"url": "https://apps.apple.com/app/id1637078500"
|
||||
}
|
||||
]
|
||||
},
|
||||
"image": "logos/monal-tmp.svg",
|
||||
"alttext": "{% trans 'Monal Logo' %}",
|
||||
"link": "https://monal-im.org/",
|
||||
"name": "Monal (macOS)",
|
||||
"platforms": [
|
||||
"macOS"
|
||||
],
|
||||
"supports_preauth_uri": true,
|
||||
"text": "{% trans 'A modern open-source chat client for Mac. It is easy to use and has a clean user interface.' %}"
|
||||
},
|
||||
{
|
||||
"download": {
|
||||
"buttons": [
|
||||
{
|
||||
"image": "{{ static }}/logos/google_ps.png",
|
||||
"alttext": "{% trans 'Google Play Store Logo' %}",
|
||||
"url": "https://play.google.com/store/apps/details?id=org.yaxim.androidclient",
|
||||
"magic_link_format": "https://play.google.com/store/apps/details?id=org.yaxim.androidclient&referrer={{ uri }}"
|
||||
}
|
||||
]
|
||||
},
|
||||
"image": "logos/yaxim.svg",
|
||||
"link": "https://play.google.com/store/apps/details?id=org.yaxim.androidclient",
|
||||
"magic_link_format": "https://play.google.com/store/apps/details?id=org.yaxim.androidclient&referrer={{ uri }}",
|
||||
"name": "yaxim",
|
||||
"platforms": [
|
||||
"Android"
|
||||
],
|
||||
"supports_preauth_uri": true,
|
||||
"text": "{% trans 'A lean Jabber/XMPP client for Android. It aims at usability, low overhead and security, and works on low-end Android devices starting with Android 4.0.' %}"
|
||||
},
|
||||
{
|
||||
"download": {
|
||||
"buttons": [
|
||||
{
|
||||
"image": "{{ static }}/logos/apple_as.svg",
|
||||
"alttext": "{% trans 'Apple Store Logo' %}",
|
||||
"target": "_blank",
|
||||
"url": "https://apps.apple.com/us/app/siskin-im/id1153516838"
|
||||
}
|
||||
]
|
||||
},
|
||||
"image": "logos/siskin-im.svg",
|
||||
"alttext": "{% trans 'Siskin IM Logo' %}",
|
||||
"link": "https://apps.apple.com/us/app/siskin-im/id1153516838",
|
||||
"name": "Siskin IM",
|
||||
"platforms": [
|
||||
"iOS", "iPadOS"
|
||||
],
|
||||
"supports_preauth_uri": true,
|
||||
"text": "{% trans 'A lightweight and powerful XMPP client for iPhone and iPad. It provides an easy way to talk and share moments with your friends.' %}"
|
||||
},
|
||||
{
|
||||
"download": {
|
||||
"buttons": [
|
||||
{
|
||||
"target": "_blank",
|
||||
"text": "{% trans 'Download from Mac App Store' %}",
|
||||
"url": "https://apps.apple.com/us/app/beagle-im/id1445349494"
|
||||
}
|
||||
]
|
||||
},
|
||||
"image": "logos/beagle-im.svg",
|
||||
"alttext": "{% trans 'Beagle IM Logo' %}",
|
||||
"link": "https://apps.apple.com/us/app/beagle-im/id1445349494",
|
||||
"name": "Beagle IM",
|
||||
"platforms": [
|
||||
"macOS"
|
||||
],
|
||||
"setup": {
|
||||
"text": "{% trans 'Launch Beagle IM, and select \'Yes\' to add a new account. Click the \'+\' button under the empty account list and then enter your credentials.' %}"
|
||||
},
|
||||
"text": "{% trans 'Beagle IM by Tigase, Inc. is a lightweight and powerful XMPP client for macOS.' %}"
|
||||
},
|
||||
{
|
||||
"download": {
|
||||
"buttons": [
|
||||
{
|
||||
"target": "_blank",
|
||||
"text": "{% trans 'Download Dino for Linux' %}",
|
||||
"url": "https://dino.im/#download"
|
||||
}
|
||||
],
|
||||
"text": "{% trans 'Click the button to open the Dino website where you can download and install it on your PC.' %}"
|
||||
},
|
||||
"image": "logos/dino.svg",
|
||||
"alttext": "{% trans 'Dino Logo' %}",
|
||||
"link": "https://dino.im/",
|
||||
"name": "Dino",
|
||||
"platforms": [
|
||||
"Linux"
|
||||
],
|
||||
"text": "{% trans 'A modern open-source chat client for the desktop. It focuses on providing a clean and reliable Jabber/XMPP experience while having your privacy in mind.' %}"
|
||||
},
|
||||
{
|
||||
"download": {
|
||||
"buttons": [
|
||||
{
|
||||
"target": "_blank",
|
||||
"text": "{% trans 'Download Gajim' %}",
|
||||
"url": "https://gajim.org/download/"
|
||||
}
|
||||
]
|
||||
},
|
||||
"image": "logos/gajim.svg",
|
||||
"alttext": "{% trans 'Gajim Logo' %}",
|
||||
"link": "https://gajim.org/",
|
||||
"name": "Gajim",
|
||||
"platforms": [
|
||||
"Windows",
|
||||
"Linux",
|
||||
"macOS"
|
||||
],
|
||||
"text": "{% trans 'A fully-featured desktop chat client for Windows and Linux.' %}"
|
||||
},
|
||||
{
|
||||
"download": {
|
||||
"buttons": [
|
||||
{
|
||||
"target": "_blank",
|
||||
"text": "{% trans 'Download Renga for Haiku' %}",
|
||||
"url": "https://depot.haiku-os.org/#!/pkg/renga?bcguid=bc233-PQIA"
|
||||
}
|
||||
]
|
||||
},
|
||||
"image": "logos/renga.svg",
|
||||
"alttext": "{% trans 'Renga Logo' %}",
|
||||
"link": "https://pulkomandy.tk/projects/renga",
|
||||
"name": "Renga",
|
||||
"platforms": [
|
||||
"Haiku"
|
||||
],
|
||||
"text": "{% trans 'XMPP client for Haiku' %}"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,41 @@
|
||||
{% extends "base_min.html" %}
|
||||
|
||||
{% block rel_alternate %}<link rel="alternate" href="{{ uri }}">{% endblock %}
|
||||
|
||||
{% block qr_button %}
|
||||
<div id="qr-button-container" class="float-end w-25 border border-info p-3 ms-3 d-none">
|
||||
{% trans "<strong>Tip:</strong> You can open this invite on your mobile device by scanning a barcode with your camera." %}
|
||||
<button id="qr-modal-show" class="mt-2 mx-auto d-block btn btn-info" title="{% trans "Send this invite to your device" %}"
|
||||
data-bs-toggle="modal" data-bs-target="#qr-modal" tabindex="1">
|
||||
{% trans "Scan with mobile device" %}
|
||||
</button>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block qr_code %}
|
||||
<div class="modal" tabindex="-1" role="dialog" id="qr-modal">
|
||||
<div class="modal-dialog" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h1 class="modal-title h5">{% trans "Scan invite code" %}</h1>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p>{% trans "You can transfer this invite to your mobile device by scanning a code with your camera." %}</p>
|
||||
<div id="qr-info-url" class="tab-pane show active">
|
||||
<p>{% trans "Use a <em>QR code</em> scanner on your mobile device to scan the code below:" %}</p>
|
||||
<div id="qr-invite-page" class="bg-light mx-auto"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-primary" data-bs-dismiss="modal" tabindex="2">{% trans "Close" %}</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block extra_scripts %}
|
||||
<script src="{{ static }}/qrcode.min.js" integrity="sha384-XfbBihCQqSDyejklP5yun2CbVxqR+2eNfx0Fhx5pQAfN5ypWGhSBjXaXr5g6X4DE"></script>
|
||||
<script src="{{ static }}/platform.min.js" integrity="sha384-nziKWRrD67nso9WErLVLhgT7AobHh6aYfNgqgINmJrtZ92V9aNTaOpvDFkcneToL"></script>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,30 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="{{ lang }}">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{% block title %}{% trans "Invite" %} | {{ site_name }}{% endblock %}</title>
|
||||
{% block rel_alternate %}{% endblock %}
|
||||
<link rel="stylesheet" href="{{ static }}/bootstrap/css/bootstrap.min.css" integrity="sha384-sRIl4kxILFvY47J16cr9ZwB07vP4J8+LH7qKQnuqkuIAvNWLzeN8tE5YBujZqJLB">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="{{ static }}/favicon.png">
|
||||
<meta name="msapplication-TileColor" content="#4acac3">
|
||||
<meta name="theme-color" content="#4acac3">
|
||||
<link rel="stylesheet" href="{{ static }}/invite.css" integrity="sha384-k6usDEL8f5OYugdzmHwAlWjdQA/YkOZre60c604zXvE9fSJpptDg2jzE2PaQ5/c+">
|
||||
</head>
|
||||
<body>
|
||||
<div id="form" class="{% block form_class %}container col-md-10 col-md-offset-1 col-sm-8 col-sm-offset-2 col-lg-10 col-lg-offset-1 my-3 mt-md-5{% endblock %}">
|
||||
<div class="card rounded-2 shadow">
|
||||
<h1 class="card-header">{%block h1 %}{% blocktrans %}Invite to {{ site_name }}{% endblocktrans %}{% endblock %}</h1>
|
||||
<div class="card-body">
|
||||
{% block qr_button %}{% endblock %}
|
||||
{% block content %}{% endblock %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% block qr_code %}{% endblock %}
|
||||
{% block extra_scripts %}{% endblock %}
|
||||
<script src="{{ static }}/jquery/jquery.min.js" integrity="sha384-fgGyf7Mo7DURSOMnOy7ed+dkq5Job205Gnzu6QIg0BOHKaqt4D76Dt8VlDCzcMHV"></script>
|
||||
<script src="{{ static }}/bootstrap/js/bootstrap.min.js" integrity="sha384-G/EV+4j2dNv+tEPo3++6LCgdCROaejBqfUeNjuKAiuXbjrxilcCdDz6ZAVfHWe1Y"></script>
|
||||
<script src="{{ static }}/invite.js" integrity="sha384-ov8LmXw6nEmT+QvXBRPMol0e90WFX9ZysvQudQ7H+nYDyolH4K/+GKJhq7qmTk4T"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,72 @@
|
||||
{% extends "base.html" %}
|
||||
{% block title %}{% trans "Create Account" %} | {{ app.name }} | {{ site_name }}{% endblock %}
|
||||
{% block h1 %}{% blocktrans with app_name=app.name %}Join {{ site_name }} with {{ app_name }}{% endblocktrans %}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<p>{% if invite.inviter|user %}
|
||||
{% blocktrans with inviter=invite.inviter|user %}You have been invited to chat with <strong>{{ inviter }}</strong> on {{ site_name }}, part of the XMPP secure and decentralized messaging network.{% endblocktrans %}
|
||||
{% else %}
|
||||
{% blocktrans %}You have been invited to chat on {{ site_name }}, part of the XMPP secure and decentralized messaging network.{% endblocktrans %}
|
||||
{% endif %}</p>
|
||||
|
||||
<div class="bd-callout bd-callout-info col-12 col-md-8">
|
||||
<svg class="svg-inline--fa fa-lightbulb fa-w-11 text-warning" aria-hidden="true" focusable="false" data-prefix="fas" data-icon="lightbulb" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 352 512" data-fa-i2svg=""><path fill="currentColor" d="M96.06 454.35c.01 6.29 1.87 12.45 5.36 17.69l17.09 25.69a31.99 31.99 0 0 0 26.64 14.28h61.71a31.99 31.99 0 0 0 26.64-14.28l17.09-25.69a31.989 31.989 0 0 0 5.36-17.69l.04-38.35H96.01l.05 38.35zM0 176c0 44.37 16.45 84.85 43.56 115.78 16.52 18.85 42.36 58.23 52.21 91.45.04.26.07.52.11.78h160.24c.04-.26.07-.51.11-.78 9.85-33.22 35.69-72.6 52.21-91.45C335.55 260.85 352 220.37 352 176 352 78.61 272.91-.3 175.45 0 73.44.31 0 82.97 0 176zm176-80c-44.11 0-80 35.89-80 80 0 8.84-7.16 16-16 16s-16-7.16-16-16c0-61.76 50.24-112 112-112 8.84 0 16 7.16 16 16s-7.16 16-16 16z"></path></svg>
|
||||
{% blocktrans with app_name=app.name %}You can start chatting right away with {{ app_name }}. Let's get started!{% endblocktrans %}
|
||||
</div>
|
||||
|
||||
<div class="card client-card {% for item in app.platforms %}app-platform-{{ item|lower }} {% endfor %} flex-wrap col-sm-12 col-md-8 col-lg-5 p-3 my-3">
|
||||
<div class="row no-gutters h-100">
|
||||
<div class="col-md-4">
|
||||
<img src="{{ static }}/{{ app.image }}" class="img-fluid" alt="{{ app.alttext }}">
|
||||
</div>
|
||||
<div class="col-md-8 h-100 ps-md-1">
|
||||
<div class="card-body d-flex flex-column h-100 pb-0 p-md-0">
|
||||
<h3 class="card-title text-nowrap mb-1 h5">{{ app.name }}</h3>
|
||||
<div>
|
||||
{% for item in app.platforms %}<span class="badge text-bg-info client-platform-badge client-platform-badge-{{ item|lower }} me-1 mb-3">{{ item }}</span> {% endfor %}
|
||||
</div>
|
||||
<p class="card-text">{{ app.text }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h2 class="h3 alert alert-info p-2" clear-both">{% blocktrans with app_name=app.name %}Step 1: Install {{ app_name }}{% endblocktrans %}</h2>
|
||||
|
||||
<p>{% if app.download.text %}{{ app.download.text }}{% else %}{% blocktrans with app_name=app.name %}Download and install {{ app_name }} below:{% endblocktrans %}{% endif %}</p>
|
||||
|
||||
<div class="ms-5">
|
||||
{% for button in app.download.buttons %}
|
||||
{% if button.image %}
|
||||
<a href="{% if button.magic_link %}{{ button.magic_link }}{% else %}{{ button.url }}{% endif %}" {% if button.target %}target="{{ button.target }}"{% endif %} rel="noopener" tabindex="3">
|
||||
<img src="{{ button.image }}" {% if button.alttext %}alt="{{ button.alttext }}"{% endif %} class="invite-download-button">
|
||||
</a>
|
||||
{% endif %}
|
||||
{% if button.text %}
|
||||
<a href="{{ button.url }}" {% if button.target %}target="{{ button.target }}"{% endif %} class="btn btn-primary" rel="noopener" tabindex="4">
|
||||
{{ button.text }}
|
||||
</a>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
<p class="mt-3">{% blocktrans with app_name=app.name %}After successfully installing {{ app_name }}, come back to this page and <strong>continue with Step 2</strong>.{% endblocktrans %}</p>
|
||||
|
||||
<h2 class="h3 alert alert-info p-2">{% trans "Step 2: Activate your account" %}</h2>
|
||||
|
||||
<p>{% trans "Installed ok? Great! <strong>Click or tap the button below</strong> to accept your invite and continue with your account setup:" %}</p>
|
||||
|
||||
<div class="w-100 text-center text-md-start">
|
||||
<a href="{{ uri }}" id="uri-cta" class="btn btn-success ms-md-5 mt-1 mb-3" tabindex="5">{% blocktrans with app_name=app.name %}Accept invite using {{ app_name }}{% endblocktrans %}</a><br/>
|
||||
</div>
|
||||
|
||||
<p>{% blocktrans with app_name=app.name %}After clicking the button you will be taken to {{ app_name }} to finish setting up your new {{ site_name }} account.{% endblocktrans %}</p>
|
||||
<nav aria-label="{% trans 'Page navigation' %}">
|
||||
<ul class="pagination mb-0">
|
||||
<li class="page-item"><a tabindex="6" class="page-link" href="/{{ base }}/{{ token }}" aria-label="{% trans 'Previous' %}">
|
||||
<span aria-hidden="true">«</span>
|
||||
<span>{% trans "Previous" %}</span>
|
||||
</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,19 @@
|
||||
The file static/illus-empty.svg is included under the following
|
||||
license:
|
||||
|
||||
Copyright 2020 Katerina Limpitsouni
|
||||
|
||||
All images, assets and vectors published on unDraw can be used for free.
|
||||
You can use them for noncommercial and commercial purposes. You do not
|
||||
need to ask permission from or provide credit to the creator or unDraw.
|
||||
|
||||
More precisely, unDraw grants you an nonexclusive, worldwide copyright
|
||||
license to download, copy, modify, distribute, perform, and use the
|
||||
assets provided from unDraw for free, including for commercial purposes,
|
||||
without permission from or attributing the creator or unDraw. This
|
||||
license does not include the right to compile assets, vectors or images
|
||||
from unDraw to replicate a similar or competing service, in any form or
|
||||
distribute the assets in packs or otherwise. This extends to automated
|
||||
and non-automated ways to link, embed, scrape, search or download the
|
||||
assets included on the website without our consent.
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
{% extends "base.html" %}
|
||||
{% block title %}{% trans "Create Account" %} | {{ site_name }}{% endblock %}
|
||||
{% block content %}
|
||||
<p>{% if invite.inviter|user %}
|
||||
{% blocktrans with inviter=invite.inviter|user %}You have been invited to chat with <strong>{{ inviter }}</strong> on <strong>{{ site_name }}</strong>, part of the XMPP secure and decentralized messaging network.{% endblocktrans %}
|
||||
{% else %}
|
||||
{% blocktrans %}You have been invited to chat on <strong>{{ site_name }}</strong>, part of the XMPP secure and decentralized messaging network.{% endblocktrans %}
|
||||
{% endif %}</p>
|
||||
<h2 class="card-title h5 clear-both">{% trans "Get started" %}</h2>
|
||||
<p>{% trans "To get started, you need to install an app for your platform:" %}</p>
|
||||
|
||||
{% include "apps.html" %}
|
||||
|
||||
<h2 class="h5 mt-3">{% trans "Other software" %}</h2>
|
||||
<p id="other-software" class="mb-0">{% blocktrans with tabidx=apps|length|add:3 %}You can connect to {{ site_name }} using any XMPP-compatible software. If your preferred software is not listed above, you may still <a href="{{ registration_url }}" tabindex='{{ tabidx }}'>register an account manually</a>.{% endblocktrans %}</p>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,10 @@
|
||||
{% extends "base_min.html" %}
|
||||
{% block title %}{% trans "Invite Expired" %} | {{ site_name }}{% endblock %}
|
||||
{% block form_class %}container col-md-8 col-md-offset-2 col-sm-8 cold-sm-offset-2 col-lg-6 col-lg-offset-3 my-3 mt-md-5{% endblock %}
|
||||
{% block content %}
|
||||
<h2 class="card-title h5">{% trans "Invite expired" %}</h2>
|
||||
|
||||
<p>{% trans "Sorry, it looks like this invite code has expired!" %}</p>
|
||||
|
||||
<img class="w-100" alt="{% trans "Sad person holding empty box" %}" src="{{ static }}/illus-empty.svg">
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,72 @@
|
||||
{% extends "base_min.html" %}
|
||||
|
||||
{% block title %}{% if error %}{% trans "Registration Error" %}{% else %}{% trans "Registration Form" %}{% endif %} | {{ site_name }}{% endblock %}
|
||||
{% block h1 %}{% if error %}{% trans "Registration Error" %}{% else %}{% blocktrans %}Register on {{ site_name }}{% endblocktrans %}{% endif %}{% endblock %}
|
||||
|
||||
{% block form_class %}container col-md-8 col-md-offset-2 col-sm-8 cold-sm-offset-2 col-lg-6 col-lg-offset-3 my-3 mt-md-5{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<p>{% if app %}{% blocktrans with app_name=app.name %}<strong>{{ site_name }}</strong> is part of XMPP, a secure and decentralized messaging network. To begin chatting using <strong>{{ app_name }}</strong> you need to first register an account.{% endblocktrans %}{% else %}{% blocktrans %}<strong>{{ site_name }}</strong> is part of XMPP, a secure and decentralized messaging network. To begin chatting you need to first register an account.{% endblocktrans %}{% endif %}</p>
|
||||
|
||||
<p>{%if invite.inviter %}{% blocktrans with inviter=invite.inviter|user %}Creating an account will allow to communicate with <strong>{{ inviter }}</strong> and other people on <strong>{{ site_name }}</strong> and other services on the XMPP network.{% endblocktrans %}{% else %}{% blocktrans %}Creating an account will allow to communicate with other people on <strong>{{ site_name }}</strong> and other services on the XMPP network.{% endblocktrans %}{% endif %}</p>
|
||||
|
||||
{% if app %}{% if app.supports_preauth_uri %}
|
||||
<div class="alert alert-info">
|
||||
<p>{% blocktrans with app_name=app.name %}If you already have {{ app_name }} installed, we recommend that you continue the account creation process using the app by clicking on the button below:{% endblocktrans %}</p>
|
||||
<p class="text-center h6">{% blocktrans with app_name=app.name %}{{ app_name }} already installed?{% endblocktrans %}</p>
|
||||
<div class="text-center">
|
||||
<a href="{{ uri }}"><button class="btn btn-secondary btn-sm">{% trans "Open the app" %}</button></a><br/>
|
||||
<small class="text-muted">{% trans "This button works only if you have the app installed already!" %}</small>
|
||||
</div>
|
||||
<br/>
|
||||
</div>
|
||||
{% endif %}{% endif %}
|
||||
<h2 class="card-title h5">{% trans "Create an account" %}</h2>
|
||||
{%if error and error.class == 'undefined' %}<div class="alert alert-danger" role="alert">{{ error.text }}</div>{% endif %}
|
||||
<form method="post" class="needs-validation" novalidate>
|
||||
<div class="input-group mb-3">
|
||||
<label for="user" class="col-md-4 col-lg-12 form-label fw-bold">{% trans "Username" %}:</label>
|
||||
<div class="col-md-8 col-lg-12">
|
||||
<div class="input-group">
|
||||
<input
|
||||
type="text" name="user" class="form-control {% if error.class == 'username' %}is-invalid{% endif %}" aria-describedby="usernameHelp" tabindex="1"
|
||||
required autofocus minlength="1" maxlength="30" length="30"{% if username %} value="{{ username }}"{% endif %}>
|
||||
<div class="input-group-append">
|
||||
<span class="input-group-text">@{{ domain }}</span>
|
||||
</div>
|
||||
<div class="invalid-feedback">
|
||||
{% if error.class == 'username' %}{{ error.text }}{% else %}
|
||||
{% blocktrans %}Please provide a valid username!{% endblocktrans %}{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<small id="usernameHelp" class="d-block form-text text-muted">{% trans "Choose a username, this will become the first part of your new chat address." %}</small>
|
||||
</div>
|
||||
</div>
|
||||
<div class="input-group mb-3">
|
||||
<label for="password" class="col-md-4 col-lg-12 form-label col-form-label fw-bold">{% trans "Password" %}:</label>
|
||||
<div class="col-md-8 col-lg-12">
|
||||
<input type="password" name="password" class="form-control {% if error.class == 'password' %}is-invalid{% endif %}" aria-describedby="passwordHelp" tabindex="2"
|
||||
autocomplete="new-password" required minlength="{{ password_min_length }}">
|
||||
<div class="invalid-feedback">
|
||||
{% if error.class == 'password' %}{{ error.text }}{% else %}
|
||||
{% blocktrans %}Please provide a password! Minimum length: {{ password_min_length }}{% endblocktrans %}{% endif %}
|
||||
</div>
|
||||
<small id="passwordHelp" class="form-text text-muted">{% trans "Enter a secure password that you do not use anywhere else." %}</small>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<input type="hidden" name="token" value="{{ token }}">
|
||||
<input type="hidden" name="csrf_token" value="{{ csrf_token }}">
|
||||
{% if app %}<input type="hidden" name="app_id" value="{{ app.id }}">{% endif %}
|
||||
<button type="submit" tabindex="3" class="btn btn-primary float-end">{% trans "Submit" %}</button>
|
||||
</div>
|
||||
</form>
|
||||
<nav aria-label="{% trans 'Page navigation' %}">
|
||||
<ul class="pagination mt-3 mb-0">
|
||||
<li class="page-item"><a tabindex="4" class="page-link" href="/{{ base }}/{{ token }}" aria-label="{% trans 'Previous' %}">
|
||||
<span aria-hidden="true">«</span>
|
||||
<span>{% trans "Previous" %}</span>
|
||||
</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,7 @@
|
||||
{% extends "base_min.html" %}
|
||||
{% block form_class %}container col-md-8 col-md-offset-2 col-sm-8 cold-sm-offset-2 col-lg-6 col-lg-offset-3 my-3 mt-md-5{% endblock %}
|
||||
{% block content %}
|
||||
<h2 class="card-title h5">{% trans "Registration error" %}</h2>
|
||||
|
||||
<p>{% if message %}{{ message }}{% else %}{% trans "Sorry, there was a problem registering your account." %}{% endif %}</p>
|
||||
{% endblock%}
|
||||
@@ -0,0 +1,84 @@
|
||||
{% extends "base_min.html" %}
|
||||
{% block form_class %}container col-md-8 col-md-offset-2 col-sm-8 cold-sm-offset-2 col-lg-6 col-lg-offset-3 my-3 mt-md-5{% endblock %}
|
||||
{% block title %}{% trans "Registration Success" %} | {{site_name}}{% endblock %}
|
||||
{% block h1 %}{{site_name}}{% endblock %}
|
||||
{% block content %}
|
||||
<h2 class="card-title h5">{% trans "Congratulations!" %}</h2>
|
||||
|
||||
<p>{% blocktrans %}You have created an account on <strong>{{ site_name }}</strong>.{% endblocktrans %}</p>
|
||||
|
||||
<p>{% trans "To start chatting, you need to enter your new account credentials into your chosen XMPP software." %}</p>
|
||||
|
||||
{% if webchat_url %}
|
||||
<div class="bd-callout bd-callout-info col-12">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-12 col-md-9">
|
||||
<svg class="svg-inline--fa fa-lightbulb fa-w-11 text-warning" aria-hidden="true" focusable="false" data-prefix="fas" data-icon="lightbulb" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 352 512" data-fa-i2svg=""><path fill="currentColor" d="M96.06 454.35c.01 6.29 1.87 12.45 5.36 17.69l17.09 25.69a31.99 31.99 0 0 0 26.64 14.28h61.71a31.99 31.99 0 0 0 26.64-14.28l17.09-25.69a31.989 31.989 0 0 0 5.36-17.69l.04-38.35H96.01l.05 38.35zM0 176c0 44.37 16.45 84.85 43.56 115.78 16.52 18.85 42.36 58.23 52.21 91.45.04.26.07.52.11.78h160.24c.04-.26.07-.51.11-.78 9.85-33.22 35.69-72.6 52.21-91.45C335.55 260.85 352 220.37 352 176 352 78.61 272.91-.3 175.45 0 73.44.31 0 82.97 0 176zm176-80c-44.11 0-80 35.89-80 80 0 8.84-7.16 16-16 16s-16-7.16-16-16c0-61.76 50.24-112 112-112 8.84 0 16 7.16 16 16s-7.16 16-16 16z"></path></svg> {% trans "<strong>No suitable software installed right now?</strong> You can also log in to your account through our online web chat!" %}
|
||||
</div>
|
||||
<div class="col text-end mt-3 mt-md-0">
|
||||
<a class="btn btn-primary" href="{{ webchat_url }}" target="_blank" noopener>{% trans "Log in via web" %}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if app %}
|
||||
<p>{% blocktrans with app_name=app.name %}You can now set up {{ app_name }} and connect it to your new account.{% endblocktrans %}</p>
|
||||
|
||||
<h2 class="h5 alert alert-info p-2">{% blocktrans with app_name=app.name %}Step 1: Download and install {{ app_name }}{% endblocktrans %}</h2>
|
||||
|
||||
<p>{% if app.download.text %}{{ app.download.text }}{% else %}{% blocktrans with app_name=app.name %}Download and install {{ app_name }} below:{% endblocktrans %}{% endif %}</p>
|
||||
|
||||
<div class="ms-5 mb-3">
|
||||
{% for item in app.download.buttons %}
|
||||
{% if item.image %}
|
||||
<a href="{{ item.url }}" {%if item.target %}target="{{ item.target }}"{% endif %} rel="noopener">
|
||||
<img src="{{ item.image }}" {% if item.alttext %}alt="{{ item.alttext }}"{% endif %}>
|
||||
</a>
|
||||
{% endif %}
|
||||
{%if item.text %}
|
||||
<a href="{{item.url}}" {% if item.target %}target="{{ item.target }}"{% endif %} rel="noopener">
|
||||
<button class="btn btn-primary">
|
||||
{{ item.text }}
|
||||
</button>
|
||||
</a>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
<h2 class="h5 alert alert-info p-2">{% blocktrans with app_name=app.name %}Step 2: Connect {{ app_name }} to your new account{% endblocktrans %}</h2>
|
||||
|
||||
<p>{% if app.setup.text %}{{ app.setup.text }}{% else %}{% blocktrans with app_name=app.name %}Launch {{ app_name }} and sign in using your account credentials.{% endblocktrans %}{% endif %}</p>
|
||||
{% endif %}
|
||||
|
||||
<p>{% trans "As a final reminder, your account details are shown below:" %}</p>
|
||||
|
||||
<form class="account-details col-12 mx-auto">
|
||||
<div class="input-group">
|
||||
<label for="user" class="col-md-4 col-form-label fw-bold">{% trans "Chat address (JID)" %}:</label>
|
||||
<div class="col-md-8 col-12">
|
||||
<input type="text" class="form-control-plaintext" readonly value="{{ username }}@{{ domain }}">
|
||||
</div>
|
||||
</div>
|
||||
{% if password %}
|
||||
<div class="input-group">
|
||||
<label for="password" class="col-md-4 col-12 col-form-label fw-bold">{% trans "Password" %}:</label>
|
||||
<div class="col-md-8 col-12">
|
||||
<div class="input-group">
|
||||
<input type="password" readonly disabled aria-label="{% trans "Password" %}" class="form-control" value="{{ password }}">
|
||||
<div class="input-group-append">
|
||||
<button id="toggle-pw-button" class="btn btn-outline-secondary rounded-start-0" type="button"
|
||||
data-text-show="{% trans "Show" %}" data-text-hide="{% trans "Hide" %}">{% trans "Show" %}</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</form>
|
||||
|
||||
{% if password %}
|
||||
<p class="mt-3">{% trans "Your password is stored encrypted on the server and will not be accessible after you close this page. Keep it safe and never share it with anyone." %}</p>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,18 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block title %}{% trans "Add Contact" %} | {{ site_name }}{% endblock %}
|
||||
{% block h1 %}{% blocktrans with inviter=invite.inviter|user %}{{ inviter }} has invited you to connect!{% endblocktrans %}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="col-12 col-md-8">
|
||||
{% blocktrans with inviter=invite.inviter|jid %}This is an invite from <strong>{{ inviter }}</strong> to connect and chat on the XMPP network. If you already have an XMPP client installed just press the button below!{% endblocktrans %}
|
||||
<div class="text-center">
|
||||
<a href="{{ invite.uri }}" class="btn btn-success my-3" tabindex="3">{% blocktrans with inviter=invite.inviter|user %}Add {{ inviter }} to your contact list{% endblocktrans %}</a><br/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="bd-callout bd-callout-info col-12 col-md-8 mb-3">
|
||||
<svg class="svg-inline--fa fa-lightbulb fa-w-11 text-warning" aria-hidden="true" focusable="false" data-prefix="fas" data-icon="lightbulb" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 352 512" data-fa-i2svg=""><path fill="currentColor" d="M96.06 454.35c.01 6.29 1.87 12.45 5.36 17.69l17.09 25.69a31.99 31.99 0 0 0 26.64 14.28h61.71a31.99 31.99 0 0 0 26.64-14.28l17.09-25.69a31.989 31.989 0 0 0 5.36-17.69l.04-38.35H96.01l.05 38.35zM0 176c0 44.37 16.45 84.85 43.56 115.78 16.52 18.85 42.36 58.23 52.21 91.45.04.26.07.52.11.78h160.24c.04-.26.07-.51.11-.78 9.85-33.22 35.69-72.6 52.21-91.45C335.55 260.85 352 220.37 352 176 352 78.61 272.91-.3 175.45 0 73.44.31 0 82.97 0 176zm176-80c-44.11 0-80 35.89-80 80 0 8.84-7.16 16-16 16s-16-7.16-16-16c0-61.76 50.24-112 112-112 8.84 0 16 7.16 16 16s-7.16 16-16 16z"></path></svg>
|
||||
<strong class="text-warning-emphasis">{% trans 'Hint' %}:</strong> {% trans "If you don't have an XMPP client installed yet, here's a list of suitable clients for your platform." %}
|
||||
</div>
|
||||
{% include "apps.html" %}
|
||||
{% endblock %}
|
||||
|
After Width: | Height: | Size: 395 B |
|
After Width: | Height: | Size: 34 KiB |
@@ -0,0 +1,53 @@
|
||||
#qr-invite-page{
|
||||
width: 256px;
|
||||
}
|
||||
.invite-download-button {
|
||||
max-width: 160px;
|
||||
}
|
||||
.clear-both {
|
||||
clear: both;
|
||||
}
|
||||
.bd-callout {
|
||||
padding: 1.25rem;
|
||||
margin-top: 1.25rem;
|
||||
margin-bottom: 1.25rem;
|
||||
background-color: var(--bd-callout-bg, var(--bs-gray-100));
|
||||
border-left:0.25rem solid var(--bd-callout-border, var(--bs-gray-300))
|
||||
}
|
||||
.bd-callout h4 {
|
||||
margin-bottom:.25rem
|
||||
}
|
||||
.bd-callout > :last-child {
|
||||
margin-bottom:0
|
||||
}
|
||||
.bd-callout + .bd-callout {
|
||||
margin-top:-.25rem
|
||||
}
|
||||
.bd-callout .highlight {
|
||||
background-color:rgba(0, 0, 0, 0.05)
|
||||
}
|
||||
.bd-callout-info {
|
||||
--bd-callout-bg: rgba(var(--bs-info-rgb), .075);
|
||||
--bd-callout-border: rgba(var(--bs-info-rgb), .5)
|
||||
}
|
||||
.bd-callout-warning {
|
||||
--bd-callout-bg: rgba(var(--bs-warning-rgb), .075);
|
||||
--bd-callout-border: rgba(var(--bs-warning-rgb), .5)
|
||||
}
|
||||
.bd-callout-danger {
|
||||
--bd-callout-bg: rgba(var(--bs-danger-rgb), .075);
|
||||
--bd-callout-border: rgba(var(--bs-danger-rgb), .5)
|
||||
}
|
||||
.fa-w-11 {
|
||||
width: .6875em;
|
||||
}
|
||||
.fa-w-16 {
|
||||
widht: 1em;
|
||||
}
|
||||
.svg-inline--fa {
|
||||
display: inline-block;
|
||||
font-size: inherit;
|
||||
height: 1em;
|
||||
overflow: visible;
|
||||
vertical-align: -.125em;
|
||||
}
|
||||
@@ -0,0 +1,141 @@
|
||||
(function () {
|
||||
document.documentElement.setAttribute('data-bs-theme', (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'));
|
||||
|
||||
// If QR lib loaded ok, show QR button on desktop devices
|
||||
if (window.QRCode) {
|
||||
const qrcode_opts = {
|
||||
text: document.location.href,
|
||||
addQuietZone: true
|
||||
};
|
||||
new QRCode(document.getElementById("qr-invite-page"), qrcode_opts);
|
||||
document.getElementById('qr-button-container').classList.add("d-md-block");
|
||||
}
|
||||
|
||||
const toggle_pw_button = document.getElementById('toggle-pw-button');
|
||||
if (toggle_pw_button)
|
||||
toggle_pw_button.addEventListener('click', toggle_password);
|
||||
|
||||
// Detect current platform and show/hide appropriate clients
|
||||
if (window.platform) {
|
||||
let platform_friendly = null;
|
||||
let platform_classname = null;
|
||||
switch (platform.os.family) {
|
||||
case "Ubuntu":
|
||||
case "Linux":
|
||||
case "Fedora":
|
||||
case "Red Hat":
|
||||
case "SuSE":
|
||||
platform_friendly = platform.os.family + " (Linux)";
|
||||
platform_classname = "linux";
|
||||
break;
|
||||
case "Linux aarch64":
|
||||
platform_friendly = "Linux mobile";
|
||||
platform_classname = "linux";
|
||||
break;
|
||||
case "Haiku R1":
|
||||
platform_friendly = "Haiku";
|
||||
platform_classname = "haiku";
|
||||
break;
|
||||
case "Windows Phone":
|
||||
platform_friendly = "Windows Phone";
|
||||
platform_classname = "windows-phone";
|
||||
break;
|
||||
case "OS X":
|
||||
if (navigator.maxTouchPoints > 1) {
|
||||
// looks like iPad to me!
|
||||
platform_friendly = "iPadOS";
|
||||
platform_classname = "ipados";
|
||||
} else {
|
||||
platform_friendly = "macOS";
|
||||
platform_classname = "macos";
|
||||
}
|
||||
break;
|
||||
default:
|
||||
if (platform.os.family.startsWith("Windows")) {
|
||||
platform_friendly = "Windows";
|
||||
platform_classname = "windows";
|
||||
} else {
|
||||
platform_friendly = platform.os.family;
|
||||
platform_classname = platform_friendly.toLowerCase();
|
||||
}
|
||||
}
|
||||
|
||||
if (platform_friendly && platform_classname) {
|
||||
if (document.querySelectorAll('.client-card .client-platform-badge-' + platform_classname).length == 0) {
|
||||
const badges = document.querySelectorAll('.client-card .client-platform-badge');
|
||||
for (let badge of badges) {
|
||||
badge.classList.add("text-bg-secondary");
|
||||
badge.classList.remove("text-bg-info");
|
||||
}
|
||||
// No clients recognised for this platform, do nothing
|
||||
return;
|
||||
}
|
||||
// Hide clients not for this platform
|
||||
const client_cards = document.getElementsByClassName('client-card');
|
||||
for (let card of client_cards) {
|
||||
if (card.classList.contains('app-platform-' + platform_classname))
|
||||
card.classList.add('supported-platform');
|
||||
else if (!card.classList.contains('app-platform-web'))
|
||||
card.hidden = true;
|
||||
const badges = card.querySelectorAll('.client-platform-badge');
|
||||
let has_platform = false;
|
||||
for (let badge of badges) {
|
||||
if (badge.classList.contains('client-platform-badge-' + platform_classname)) {
|
||||
badge.classList.add("text-bg-success");
|
||||
badge.classList.remove("text-bg-info");
|
||||
has_platform = true;
|
||||
} else {
|
||||
badge.classList.add("text-bg-secondary");
|
||||
badge.classList.remove("text-bg-info");
|
||||
}
|
||||
}
|
||||
if (!has_platform)
|
||||
$(card).find("a.btn").removeClass("btn-primary").addClass("btn-secondary");
|
||||
}
|
||||
const show_all_clients_button_container = document.getElementById('show-all-clients-button-container');
|
||||
if (show_all_clients_button_container) {
|
||||
show_all_clients_button_container.querySelector('.platform-name').innerHTML = platform_friendly;
|
||||
show_all_clients_button_container.classList.remove("d-none");
|
||||
document.getElementById('show-all-clients-button').addEventListener('click', function (e) {
|
||||
for (let card of client_cards)
|
||||
card.hidden = false;
|
||||
show_all_clients_button_container.hidden = true;
|
||||
e.preventDefault();
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
})();
|
||||
|
||||
function toggle_password(e) {
|
||||
var button = e.target;
|
||||
var input = button.parentNode.parentNode.querySelector("input");
|
||||
switch (input.attributes.type.value) {
|
||||
case "password":
|
||||
input.attributes.type.value = "text";
|
||||
button.innerText = button.getAttribute('data-text-hide');
|
||||
break;
|
||||
case "text":
|
||||
input.attributes.type.value = "password";
|
||||
button.innerText = button.getAttribute('data-text-show');
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
(function () {
|
||||
'use strict';
|
||||
window.addEventListener('load', function () {
|
||||
// Fetch all the forms we want to apply custom Bootstrap validation styles to
|
||||
var forms = document.getElementsByClassName('needs-validation');
|
||||
// Loop over them and prevent submission
|
||||
var validation = Array.prototype.filter.call(forms, function (form) {
|
||||
form.addEventListener('submit', function (event) {
|
||||
if (form.checkValidity() === false) {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
}
|
||||
form.classList.add('was-validated');
|
||||
}, false);
|
||||
});
|
||||
}, false);
|
||||
})();
|
||||
@@ -0,0 +1,46 @@
|
||||
<svg id="livetype" xmlns="http://www.w3.org/2000/svg" width="119.66407" height="40" viewBox="0 0 119.66407 40">
|
||||
<title>Download_on_the_App_Store_Badge_US-UK_RGB_blk_4SVG_092917</title>
|
||||
<g>
|
||||
<g>
|
||||
<g>
|
||||
<path d="M110.13477,0H9.53468c-.3667,0-.729,0-1.09473.002-.30615.002-.60986.00781-.91895.0127A13.21476,13.21476,0,0,0,5.5171.19141a6.66509,6.66509,0,0,0-1.90088.627A6.43779,6.43779,0,0,0,1.99757,1.99707,6.25844,6.25844,0,0,0,.81935,3.61816a6.60119,6.60119,0,0,0-.625,1.90332,12.993,12.993,0,0,0-.1792,2.002C.00587,7.83008.00489,8.1377,0,8.44434V31.5586c.00489.3105.00587.6113.01515.9219a12.99232,12.99232,0,0,0,.1792,2.0019,6.58756,6.58756,0,0,0,.625,1.9043A6.20778,6.20778,0,0,0,1.99757,38.001a6.27445,6.27445,0,0,0,1.61865,1.1787,6.70082,6.70082,0,0,0,1.90088.6308,13.45514,13.45514,0,0,0,2.0039.1768c.30909.0068.6128.0107.91895.0107C8.80567,40,9.168,40,9.53468,40H110.13477c.3594,0,.7246,0,1.084-.002.3047,0,.6172-.0039.9219-.0107a13.279,13.279,0,0,0,2-.1768,6.80432,6.80432,0,0,0,1.9082-.6308,6.27742,6.27742,0,0,0,1.6172-1.1787,6.39482,6.39482,0,0,0,1.1816-1.6143,6.60413,6.60413,0,0,0,.6191-1.9043,13.50643,13.50643,0,0,0,.1856-2.0019c.0039-.3106.0039-.6114.0039-.9219.0078-.3633.0078-.7246.0078-1.0938V9.53613c0-.36621,0-.72949-.0078-1.09179,0-.30664,0-.61426-.0039-.9209a13.5071,13.5071,0,0,0-.1856-2.002,6.6177,6.6177,0,0,0-.6191-1.90332,6.46619,6.46619,0,0,0-2.7988-2.7998,6.76754,6.76754,0,0,0-1.9082-.627,13.04394,13.04394,0,0,0-2-.17676c-.3047-.00488-.6172-.01074-.9219-.01269-.3594-.002-.7246-.002-1.084-.002Z" style="fill: #a6a6a6"/>
|
||||
<path d="M8.44483,39.125c-.30468,0-.602-.0039-.90429-.0107a12.68714,12.68714,0,0,1-1.86914-.1631,5.88381,5.88381,0,0,1-1.65674-.5479,5.40573,5.40573,0,0,1-1.397-1.0166,5.32082,5.32082,0,0,1-1.02051-1.3965,5.72186,5.72186,0,0,1-.543-1.6572,12.41351,12.41351,0,0,1-.1665-1.875c-.00634-.2109-.01464-.9131-.01464-.9131V8.44434S.88185,7.75293.8877,7.5498a12.37039,12.37039,0,0,1,.16553-1.87207,5.7555,5.7555,0,0,1,.54346-1.6621A5.37349,5.37349,0,0,1,2.61183,2.61768,5.56543,5.56543,0,0,1,4.01417,1.59521a5.82309,5.82309,0,0,1,1.65332-.54394A12.58589,12.58589,0,0,1,7.543.88721L8.44532.875H111.21387l.9131.0127a12.38493,12.38493,0,0,1,1.8584.16259,5.93833,5.93833,0,0,1,1.6709.54785,5.59374,5.59374,0,0,1,2.415,2.41993,5.76267,5.76267,0,0,1,.5352,1.64892,12.995,12.995,0,0,1,.1738,1.88721c.0029.2832.0029.5874.0029.89014.0079.375.0079.73193.0079,1.09179V30.4648c0,.3633,0,.7178-.0079,1.0752,0,.3252,0,.6231-.0039.9297a12.73126,12.73126,0,0,1-.1709,1.8535,5.739,5.739,0,0,1-.54,1.67,5.48029,5.48029,0,0,1-1.0156,1.3857,5.4129,5.4129,0,0,1-1.3994,1.0225,5.86168,5.86168,0,0,1-1.668.5498,12.54218,12.54218,0,0,1-1.8692.1631c-.2929.0068-.5996.0107-.8974.0107l-1.084.002Z"/>
|
||||
</g>
|
||||
<g id="_Group_" data-name="<Group>">
|
||||
<g id="_Group_2" data-name="<Group>">
|
||||
<g id="_Group_3" data-name="<Group>">
|
||||
<path id="_Path_" data-name="<Path>" d="M24.76888,20.30068a4.94881,4.94881,0,0,1,2.35656-4.15206,5.06566,5.06566,0,0,0-3.99116-2.15768c-1.67924-.17626-3.30719,1.00483-4.1629,1.00483-.87227,0-2.18977-.98733-3.6085-.95814a5.31529,5.31529,0,0,0-4.47292,2.72787c-1.934,3.34842-.49141,8.26947,1.3612,10.97608.9269,1.32535,2.01018,2.8058,3.42763,2.7533,1.38706-.05753,1.9051-.88448,3.5794-.88448,1.65876,0,2.14479.88448,3.591.8511,1.48838-.02416,2.42613-1.33124,3.32051-2.66914a10.962,10.962,0,0,0,1.51842-3.09251A4.78205,4.78205,0,0,1,24.76888,20.30068Z" style="fill: #fff"/>
|
||||
<path id="_Path_2" data-name="<Path>" d="M22.03725,12.21089a4.87248,4.87248,0,0,0,1.11452-3.49062,4.95746,4.95746,0,0,0-3.20758,1.65961,4.63634,4.63634,0,0,0-1.14371,3.36139A4.09905,4.09905,0,0,0,22.03725,12.21089Z" style="fill: #fff"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<path d="M42.30227,27.13965h-4.7334l-1.13672,3.35645H34.42727l4.4834-12.418h2.083l4.4834,12.418H43.438ZM38.0591,25.59082h3.752l-1.84961-5.44727h-.05176Z" style="fill: #fff"/>
|
||||
<path d="M55.15969,25.96973c0,2.81348-1.50586,4.62109-3.77832,4.62109a3.0693,3.0693,0,0,1-2.84863-1.584h-.043v4.48438h-1.8584V21.44238H48.4302v1.50586h.03418a3.21162,3.21162,0,0,1,2.88281-1.60059C53.645,21.34766,55.15969,23.16406,55.15969,25.96973Zm-1.91016,0c0-1.833-.94727-3.03809-2.39258-3.03809-1.41992,0-2.375,1.23047-2.375,3.03809,0,1.82422.95508,3.0459,2.375,3.0459C52.30227,29.01563,53.24953,27.81934,53.24953,25.96973Z" style="fill: #fff"/>
|
||||
<path d="M65.12453,25.96973c0,2.81348-1.50586,4.62109-3.77832,4.62109a3.0693,3.0693,0,0,1-2.84863-1.584h-.043v4.48438h-1.8584V21.44238H58.395v1.50586h.03418A3.21162,3.21162,0,0,1,61.312,21.34766C63.60988,21.34766,65.12453,23.16406,65.12453,25.96973Zm-1.91016,0c0-1.833-.94727-3.03809-2.39258-3.03809-1.41992,0-2.375,1.23047-2.375,3.03809,0,1.82422.95508,3.0459,2.375,3.0459C62.26711,29.01563,63.21438,27.81934,63.21438,25.96973Z" style="fill: #fff"/>
|
||||
<path d="M71.71047,27.03613c.1377,1.23145,1.334,2.04,2.96875,2.04,1.56641,0,2.69336-.80859,2.69336-1.91895,0-.96387-.67969-1.541-2.28906-1.93652l-1.60937-.3877c-2.28027-.55078-3.33887-1.61719-3.33887-3.34766,0-2.14258,1.86719-3.61426,4.51855-3.61426,2.624,0,4.42285,1.47168,4.4834,3.61426h-1.876c-.1123-1.23926-1.13672-1.9873-2.63379-1.9873s-2.52148.75684-2.52148,1.8584c0,.87793.6543,1.39453,2.25488,1.79l1.36816.33594c2.54785.60254,3.60645,1.626,3.60645,3.44238,0,2.32324-1.85059,3.77832-4.79395,3.77832-2.75391,0-4.61328-1.4209-4.7334-3.667Z" style="fill: #fff"/>
|
||||
<path d="M83.34621,19.2998v2.14258h1.72168v1.47168H83.34621v4.99121c0,.77539.34473,1.13672,1.10156,1.13672a5.80752,5.80752,0,0,0,.61133-.043v1.46289a5.10351,5.10351,0,0,1-1.03223.08594c-1.833,0-2.54785-.68848-2.54785-2.44434V22.91406H80.16262V21.44238H81.479V19.2998Z" style="fill: #fff"/>
|
||||
<path d="M86.065,25.96973c0-2.84863,1.67773-4.63867,4.29395-4.63867,2.625,0,4.29492,1.79,4.29492,4.63867,0,2.85645-1.66113,4.63867-4.29492,4.63867C87.72609,30.6084,86.065,28.82617,86.065,25.96973Zm6.69531,0c0-1.9541-.89551-3.10742-2.40137-3.10742s-2.40039,1.16211-2.40039,3.10742c0,1.96191.89453,3.10645,2.40039,3.10645S92.76027,27.93164,92.76027,25.96973Z" style="fill: #fff"/>
|
||||
<path d="M96.18606,21.44238h1.77246v1.541h.043a2.1594,2.1594,0,0,1,2.17773-1.63574,2.86616,2.86616,0,0,1,.63672.06934v1.73828a2.59794,2.59794,0,0,0-.835-.1123,1.87264,1.87264,0,0,0-1.93652,2.083v5.37012h-1.8584Z" style="fill: #fff"/>
|
||||
<path d="M109.3843,27.83691c-.25,1.64355-1.85059,2.77148-3.89844,2.77148-2.63379,0-4.26855-1.76465-4.26855-4.5957,0-2.83984,1.64355-4.68164,4.19043-4.68164,2.50488,0,4.08008,1.7207,4.08008,4.46582v.63672h-6.39453v.1123a2.358,2.358,0,0,0,2.43555,2.56445,2.04834,2.04834,0,0,0,2.09082-1.27344Zm-6.28223-2.70215h4.52637a2.1773,2.1773,0,0,0-2.2207-2.29785A2.292,2.292,0,0,0,103.10207,25.13477Z" style="fill: #fff"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="_Group_4" data-name="<Group>">
|
||||
<g>
|
||||
<path d="M37.82619,8.731a2.63964,2.63964,0,0,1,2.80762,2.96484c0,1.90625-1.03027,3.002-2.80762,3.002H35.67092V8.731Zm-1.22852,5.123h1.125a1.87588,1.87588,0,0,0,1.96777-2.146,1.881,1.881,0,0,0-1.96777-2.13379h-1.125Z" style="fill: #fff"/>
|
||||
<path d="M41.68068,12.44434a2.13323,2.13323,0,1,1,4.24707,0,2.13358,2.13358,0,1,1-4.24707,0Zm3.333,0c0-.97607-.43848-1.54687-1.208-1.54687-.77246,0-1.207.5708-1.207,1.54688,0,.98389.43457,1.55029,1.207,1.55029C44.57522,13.99463,45.01369,13.42432,45.01369,12.44434Z" style="fill: #fff"/>
|
||||
<path d="M51.57326,14.69775h-.92187l-.93066-3.31641h-.07031l-.92676,3.31641h-.91309l-1.24121-4.50293h.90137l.80664,3.436h.06641l.92578-3.436h.85254l.92578,3.436h.07031l.80273-3.436h.88867Z" style="fill: #fff"/>
|
||||
<path d="M53.85354,10.19482H54.709v.71533h.06641a1.348,1.348,0,0,1,1.34375-.80225,1.46456,1.46456,0,0,1,1.55859,1.6748v2.915h-.88867V12.00586c0-.72363-.31445-1.0835-.97168-1.0835a1.03294,1.03294,0,0,0-1.0752,1.14111v2.63428h-.88867Z" style="fill: #fff"/>
|
||||
<path d="M59.09377,8.437h.88867v6.26074h-.88867Z" style="fill: #fff"/>
|
||||
<path d="M61.21779,12.44434a2.13346,2.13346,0,1,1,4.24756,0,2.1338,2.1338,0,1,1-4.24756,0Zm3.333,0c0-.97607-.43848-1.54687-1.208-1.54687-.77246,0-1.207.5708-1.207,1.54688,0,.98389.43457,1.55029,1.207,1.55029C64.11232,13.99463,64.5508,13.42432,64.5508,12.44434Z" style="fill: #fff"/>
|
||||
<path d="M66.4009,13.42432c0-.81055.60352-1.27783,1.6748-1.34424l1.21973-.07031v-.38867c0-.47559-.31445-.74414-.92187-.74414-.49609,0-.83984.18213-.93848.50049h-.86035c.09082-.77344.81836-1.26953,1.83984-1.26953,1.12891,0,1.76563.562,1.76563,1.51318v3.07666h-.85547v-.63281h-.07031a1.515,1.515,0,0,1-1.35254.707A1.36026,1.36026,0,0,1,66.4009,13.42432Zm2.89453-.38477v-.37646l-1.09961.07031c-.62012.0415-.90137.25244-.90137.64941,0,.40527.35156.64111.835.64111A1.0615,1.0615,0,0,0,69.29543,13.03955Z" style="fill: #fff"/>
|
||||
<path d="M71.34816,12.44434c0-1.42285.73145-2.32422,1.86914-2.32422a1.484,1.484,0,0,1,1.38086.79h.06641V8.437h.88867v6.26074h-.85156v-.71143h-.07031a1.56284,1.56284,0,0,1-1.41406.78564C72.0718,14.772,71.34816,13.87061,71.34816,12.44434Zm.918,0c0,.95508.4502,1.52979,1.20313,1.52979.749,0,1.21191-.583,1.21191-1.52588,0-.93848-.46777-1.52979-1.21191-1.52979C72.72121,10.91846,72.26613,11.49707,72.26613,12.44434Z" style="fill: #fff"/>
|
||||
<path d="M79.23,12.44434a2.13323,2.13323,0,1,1,4.24707,0,2.13358,2.13358,0,1,1-4.24707,0Zm3.333,0c0-.97607-.43848-1.54687-1.208-1.54687-.77246,0-1.207.5708-1.207,1.54688,0,.98389.43457,1.55029,1.207,1.55029C82.12453,13.99463,82.563,13.42432,82.563,12.44434Z" style="fill: #fff"/>
|
||||
<path d="M84.66945,10.19482h.85547v.71533h.06641a1.348,1.348,0,0,1,1.34375-.80225,1.46456,1.46456,0,0,1,1.55859,1.6748v2.915H87.605V12.00586c0-.72363-.31445-1.0835-.97168-1.0835a1.03294,1.03294,0,0,0-1.0752,1.14111v2.63428h-.88867Z" style="fill: #fff"/>
|
||||
<path d="M93.51516,9.07373v1.1416h.97559v.74854h-.97559V13.2793c0,.47168.19434.67822.63672.67822a2.96657,2.96657,0,0,0,.33887-.02051v.74023a2.9155,2.9155,0,0,1-.4834.04541c-.98828,0-1.38184-.34766-1.38184-1.21582v-2.543h-.71484v-.74854h.71484V9.07373Z" style="fill: #fff"/>
|
||||
<path d="M95.70461,8.437h.88086v2.48145h.07031a1.3856,1.3856,0,0,1,1.373-.80664,1.48339,1.48339,0,0,1,1.55078,1.67871v2.90723H98.69v-2.688c0-.71924-.335-1.0835-.96289-1.0835a1.05194,1.05194,0,0,0-1.13379,1.1416v2.62988h-.88867Z" style="fill: #fff"/>
|
||||
<path d="M104.76125,13.48193a1.828,1.828,0,0,1-1.95117,1.30273A2.04531,2.04531,0,0,1,100.73,12.46045a2.07685,2.07685,0,0,1,2.07617-2.35254c1.25293,0,2.00879.856,2.00879,2.27V12.688h-3.17969v.0498a1.1902,1.1902,0,0,0,1.19922,1.29,1.07934,1.07934,0,0,0,1.07129-.5459Zm-3.126-1.45117h2.27441a1.08647,1.08647,0,0,0-1.1084-1.1665A1.15162,1.15162,0,0,0,101.63527,12.03076Z" style="fill: #fff"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 12 KiB |
@@ -0,0 +1,105 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg xmlns:osb="http://www.openswatchbook.org/uri/2009/osb" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" viewBox="0 0 201.96849 201.96849" id="svg4211" version="1.1" inkscape:version="0.91 r13725" sodipodi:docname="conversations_baloon.svg">
|
||||
<sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" showgrid="false" fit-margin-top="0" fit-margin-left="0" fit-margin-right="0" fit-margin-bottom="0" showguides="false" inkscape:zoom="2.2196812" inkscape:cx="39.109276" inkscape:cy="132.27753" inkscape:window-width="1600" inkscape:window-height="836" inkscape:window-x="0" inkscape:window-y="27" inkscape:window-maximized="1" inkscape:current-layer="layer8"/>
|
||||
<defs id="defs4213">
|
||||
<linearGradient osb:paint="solid" id="linearGradient5393">
|
||||
<stop id="stop5395" offset="0" style="stop-color:#ffffff;stop-opacity:1;"/>
|
||||
</linearGradient>
|
||||
<clipPath id="clipPath4831" clipPathUnits="userSpaceOnUse">
|
||||
<circle style="display:inline;opacity:1;fill:#a00e00;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="circle4833" cx="883.16943" cy="677.19611" r="229.80969"/>
|
||||
</clipPath>
|
||||
<clipPath id="clipPath4859" clipPathUnits="userSpaceOnUse">
|
||||
<circle style="display:inline;opacity:1;fill:#a00e00;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="circle4861" cx="883.16943" cy="677.19611" r="229.80969"/>
|
||||
</clipPath>
|
||||
<clipPath id="clipPath5624" clipPathUnits="userSpaceOnUse">
|
||||
<g style="display:inline" id="g5626" transform="matrix(0.3835576,0,0,0.3835576,-250.60108,-156.11014)">
|
||||
<path sodipodi:nodetypes="ccsssc" inkscape:connector-curvature="0" id="path5628" d="m 1120.8042,772.36056 -118.0025,103.66316 118.5792,46.01918 c 8.4859,3.29325 19.6524,7.94481 27.2622,0.71376 7.3868,-7.01907 5.6502,-14.13839 3.0935,-24.54095 z" style="display:inline;fill:#4caf50;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"/>
|
||||
<circle transform="matrix(1.0878566,0,0,1.0878566,-57.401992,-79.686482)" clip-path="url(#clipPath4859)" r="229.80969" cy="677.19611" cx="883.16943" id="circle5630" style="display:inline;opacity:1;fill:#4caf50;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"/>
|
||||
</g>
|
||||
</clipPath>
|
||||
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath10653">
|
||||
<g style="display:inline" id="g10655" transform="matrix(0.3835576,0,0,0.3835576,-250.60108,-156.11015)" inkscape:export-xdpi="100" inkscape:export-ydpi="100">
|
||||
<path sodipodi:nodetypes="ccsssc" inkscape:connector-curvature="0" id="path10657" d="m 1120.8042,772.36056 -118.0025,103.66316 118.5792,46.01918 c 8.4859,3.29325 19.6524,7.94481 27.2622,0.71376 7.3868,-7.01907 5.6502,-14.13839 3.0935,-24.54095 z" style="display:inline;fill:#4caf50;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"/>
|
||||
<circle transform="matrix(1.0878566,0,0,1.0878566,-57.401992,-79.686482)" clip-path="url(#clipPath4859)" r="229.80969" cy="677.19611" cx="883.16943" id="circle10659" style="display:inline;opacity:1;fill:#4caf50;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"/>
|
||||
</g>
|
||||
</clipPath>
|
||||
<radialGradient inkscape:collect="always" xlink:href="#linearGradient3913" id="radialGradient3883" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.68662089,-0.30388739,0.24146012,0.54605188,-300.74233,-264.46964)" cx="262.33273" cy="945.23846" fx="262.33273" fy="945.23846" r="185.49754"/>
|
||||
<linearGradient inkscape:collect="always" id="linearGradient3913">
|
||||
<stop style="stop-color:#ffffff;stop-opacity:1;" offset="0" id="stop3915"/>
|
||||
<stop style="stop-color:#ffffff;stop-opacity:0;" offset="1" id="stop3917"/>
|
||||
</linearGradient>
|
||||
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath5315">
|
||||
<g inkscape:export-ydpi="100" inkscape:export-xdpi="100" transform="matrix(0.3835576,0,0,0.3835576,-246.60108,-156.11013)" id="g5317" style="display:inline;fill:#00a000;fill-opacity:1">
|
||||
<path style="display:inline;fill:#00a000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="m 1120.8042,772.36056 -118.0025,103.66316 118.5792,46.01918 c 8.4859,3.29325 19.6524,7.94481 27.2622,0.71376 7.3868,-7.01907 5.6502,-14.13839 3.0935,-24.54095 z" id="path5319" inkscape:connector-curvature="0" sodipodi:nodetypes="ccsssc"/>
|
||||
<circle style="display:inline;opacity:1;fill:#00a000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="circle5321" cx="883.16943" cy="677.19611" r="229.80969" clip-path="url(#clipPath4859)" transform="matrix(1.0878566,0,0,1.0878566,-57.401992,-79.686482)"/>
|
||||
</g>
|
||||
</clipPath>
|
||||
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath6882">
|
||||
<path inkscape:connector-curvature="0" id="path6884" d="M 99.88867,-2.3837657e-4 A 95.889392,95.889392 0 0 0 4,95.888436 95.889392,95.889392 0 0 0 99.88867,191.77906 95.889392,95.889392 0 0 0 142.59375,181.70093 l 0.12695,0.0137 40.79297,15.83204 c 3.25479,1.26313 7.53628,3.04697 10.45508,0.27343 2.83326,-2.69222 2.16811,-5.42213 1.1875,-9.41211 l -11.34766,-46.16797 a 95.889392,95.889392 0 0 1 -0.002,0.002 l 0,-0.008 0.002,0.006 A 95.889392,95.889392 0 0 0 195.7793,95.888466 95.889392,95.889392 0 0 0 99.88867,-2.0837657e-4 Z" style="display:inline;opacity:1;fill:#00a000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"/>
|
||||
</clipPath>
|
||||
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath6886">
|
||||
<path inkscape:connector-curvature="0" id="path6888" d="M 99.88867,-2.3837657e-4 A 95.889392,95.889392 0 0 0 4,95.888436 95.889392,95.889392 0 0 0 99.88867,191.77906 95.889392,95.889392 0 0 0 142.59375,181.70093 l 0.12695,0.0137 40.79297,15.83204 c 3.25479,1.26313 7.53628,3.04697 10.45508,0.27343 2.83326,-2.69222 2.16811,-5.42213 1.1875,-9.41211 l -11.34766,-46.16797 a 95.889392,95.889392 0 0 1 -0.002,0.002 l 0,-0.008 0.002,0.006 A 95.889392,95.889392 0 0 0 195.7793,95.888466 95.889392,95.889392 0 0 0 99.88867,-2.0837657e-4 Z" style="display:inline;opacity:1;fill:#00a000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"/>
|
||||
</clipPath>
|
||||
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath6890">
|
||||
<path inkscape:connector-curvature="0" id="path6892" d="M 99.88867,-2.3837657e-4 A 95.889392,95.889392 0 0 0 4,95.888436 95.889392,95.889392 0 0 0 99.88867,191.77906 95.889392,95.889392 0 0 0 142.59375,181.70093 l 0.12695,0.0137 40.79297,15.83204 c 3.25479,1.26313 7.53628,3.04697 10.45508,0.27343 2.83326,-2.69222 2.16811,-5.42213 1.1875,-9.41211 l -11.34766,-46.16797 a 95.889392,95.889392 0 0 1 -0.002,0.002 l 0,-0.008 0.002,0.006 A 95.889392,95.889392 0 0 0 195.7793,95.888466 95.889392,95.889392 0 0 0 99.88867,-2.0837657e-4 Z" style="display:inline;opacity:1;fill:#00a000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"/>
|
||||
</clipPath>
|
||||
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath6894">
|
||||
<path inkscape:connector-curvature="0" id="path6896" d="M 99.88867,-2.3837657e-4 A 95.889392,95.889392 0 0 0 4,95.888436 95.889392,95.889392 0 0 0 99.88867,191.77906 95.889392,95.889392 0 0 0 142.59375,181.70093 l 0.12695,0.0137 40.79297,15.83204 c 3.25479,1.26313 7.53628,3.04697 10.45508,0.27343 2.83326,-2.69222 2.16811,-5.42213 1.1875,-9.41211 l -11.34766,-46.16797 a 95.889392,95.889392 0 0 1 -0.002,0.002 l 0,-0.008 0.002,0.006 A 95.889392,95.889392 0 0 0 195.7793,95.888466 95.889392,95.889392 0 0 0 99.88867,-2.0837657e-4 Z" style="display:inline;opacity:1;fill:#00a000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"/>
|
||||
</clipPath>
|
||||
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath6898">
|
||||
<path inkscape:connector-curvature="0" id="path6900" d="M 99.88867,-2.3837657e-4 A 95.889392,95.889392 0 0 0 4,95.888436 95.889392,95.889392 0 0 0 99.88867,191.77906 95.889392,95.889392 0 0 0 142.59375,181.70093 l 0.12695,0.0137 40.79297,15.83204 c 3.25479,1.26313 7.53628,3.04697 10.45508,0.27343 2.83326,-2.69222 2.16811,-5.42213 1.1875,-9.41211 l -11.34766,-46.16797 a 95.889392,95.889392 0 0 1 -0.002,0.002 l 0,-0.008 0.002,0.006 A 95.889392,95.889392 0 0 0 195.7793,95.888466 95.889392,95.889392 0 0 0 99.88867,-2.0837657e-4 Z" style="display:inline;opacity:1;fill:#00a000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"/>
|
||||
</clipPath>
|
||||
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath6902">
|
||||
<path inkscape:connector-curvature="0" id="path6904" d="M 99.88867,-2.3837657e-4 A 95.889392,95.889392 0 0 0 4,95.888436 95.889392,95.889392 0 0 0 99.88867,191.77906 95.889392,95.889392 0 0 0 142.59375,181.70093 l 0.12695,0.0137 40.79297,15.83204 c 3.25479,1.26313 7.53628,3.04697 10.45508,0.27343 2.83326,-2.69222 2.16811,-5.42213 1.1875,-9.41211 l -11.34766,-46.16797 a 95.889392,95.889392 0 0 1 -0.002,0.002 l 0,-0.008 0.002,0.006 A 95.889392,95.889392 0 0 0 195.7793,95.888466 95.889392,95.889392 0 0 0 99.88867,-2.0837657e-4 Z" style="display:inline;opacity:1;fill:#00a000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"/>
|
||||
</clipPath>
|
||||
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath6906">
|
||||
<path inkscape:connector-curvature="0" id="path6908" d="M 99.88867,-2.3837657e-4 A 95.889392,95.889392 0 0 0 4,95.888436 95.889392,95.889392 0 0 0 99.88867,191.77906 95.889392,95.889392 0 0 0 142.59375,181.70093 l 0.12695,0.0137 40.79297,15.83204 c 3.25479,1.26313 7.53628,3.04697 10.45508,0.27343 2.83326,-2.69222 2.16811,-5.42213 1.1875,-9.41211 l -11.34766,-46.16797 a 95.889392,95.889392 0 0 1 -0.002,0.002 l 0,-0.008 0.002,0.006 A 95.889392,95.889392 0 0 0 195.7793,95.888466 95.889392,95.889392 0 0 0 99.88867,-2.0837657e-4 Z" style="display:inline;opacity:1;fill:#00a000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"/>
|
||||
</clipPath>
|
||||
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath6910">
|
||||
<path inkscape:connector-curvature="0" id="path6912" d="M 99.88867,-2.3837657e-4 A 95.889392,95.889392 0 0 0 4,95.888436 95.889392,95.889392 0 0 0 99.88867,191.77906 95.889392,95.889392 0 0 0 142.59375,181.70093 l 0.12695,0.0137 40.79297,15.83204 c 3.25479,1.26313 7.53628,3.04697 10.45508,0.27343 2.83326,-2.69222 2.16811,-5.42213 1.1875,-9.41211 l -11.34766,-46.16797 a 95.889392,95.889392 0 0 1 -0.002,0.002 l 0,-0.008 0.002,0.006 A 95.889392,95.889392 0 0 0 195.7793,95.888466 95.889392,95.889392 0 0 0 99.88867,-2.0837657e-4 Z" style="display:inline;opacity:1;fill:#00a000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"/>
|
||||
</clipPath>
|
||||
<filter inkscape:collect="always" style="color-interpolation-filters:sRGB" id="filter5640" x="-0.012227737" width="1.0244555" y="-0.011780591" height="1.0235612">
|
||||
<feGaussianBlur inkscape:collect="always" stdDeviation="0.9782166" id="feGaussianBlur5642"/>
|
||||
</filter>
|
||||
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath5745">
|
||||
<path inkscape:connector-curvature="0" id="path5747" d="M 99.908581,-2.3831968e-4 A 95.889392,95.889392 0 0 0 4.0199102,95.888436 95.889392,95.889392 0 0 0 99.908581,191.77906 95.889392,95.889392 0 0 0 142.61366,181.70093 l 0.12695,0.0137 40.79297,15.83204 c 3.25479,1.26313 7.53628,3.04697 10.45508,0.27343 2.83326,-2.69222 2.16811,-5.42213 1.1875,-9.41211 L 183.8285,142.24002 a 95.889392,95.889392 0 0 1 -0.002,0.002 l 0,-0.008 0.002,0.006 A 95.889392,95.889392 0 0 0 195.79921,95.888466 95.889392,95.889392 0 0 0 99.908581,-2.0831968e-4 Z" style="display:inline;opacity:1;fill:#00a000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
<metadata id="metadata4216">
|
||||
<rdf:RDF>
|
||||
<cc:Work rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
||||
<dc:title/>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g inkscape:groupmode="layer" id="layer9" inkscape:label="shaddow" transform="translate(-4,2.6816164)" style="display:inline">
|
||||
<path inkscape:connector-curvature="0" id="path6914" d="M 104.88867,0.06226191 A 95.889392,95.889392 0 0 0 8.9999996,95.950936 95.889392,95.889392 0 0 0 104.88867,191.84156 95.889392,95.889392 0 0 0 147.59375,181.76343 l 0.12695,0.0137 40.79297,15.83204 c 3.25479,1.26313 7.53628,3.04697 10.45508,0.27343 2.83326,-2.69222 2.16811,-5.42213 1.1875,-9.41211 l -11.34766,-46.16797 a 95.889392,95.889392 0 0 1 -0.002,0.002 l 0,-0.008 0.002,0.006 A 95.889392,95.889392 0 0 0 200.7793,95.950966 95.889392,95.889392 0 0 0 104.88867,0.06229191 Z" style="display:inline;opacity:0.4;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter5640)"/>
|
||||
</g>
|
||||
<g style="display:inline" inkscape:label="bubble" id="layer4" inkscape:groupmode="layer" transform="translate(-4,2.6816348)">
|
||||
<path style="display:inline;opacity:1;fill:#00a000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" d="M 104.88867,-1.9377566 A 95.889392,95.889392 0 0 0 8.9999996,93.950918 95.889392,95.889392 0 0 0 104.88867,189.84154 95.889392,95.889392 0 0 0 147.59375,179.76341 l 0.12695,0.0137 40.79297,15.83204 c 3.25479,1.26313 7.53628,3.04697 10.45508,0.27343 2.83326,-2.69222 2.16811,-5.42213 1.1875,-9.41211 L 188.80859,140.3025 a 95.889392,95.889392 0 0 1 -0.002,0.002 l 0,-0.008 0.002,0.006 A 95.889392,95.889392 0 0 0 200.7793,93.950948 95.889392,95.889392 0 0 0 104.88867,-1.9377266 Z" id="circle6661" inkscape:connector-curvature="0"/>
|
||||
<text xml:space="preserve" style="font-style:normal;font-weight:normal;font-size:125px;line-height:1000%;font-family:Sans;letter-spacing:-10.89000034px;word-spacing:5px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" x="85.862968" y="-55.271603" id="text6634" sodipodi:linespacing="1000%"><tspan sodipodi:role="line" id="tspan6636" x="85.862968" y="-55.271603"/></text>
|
||||
</g>
|
||||
<g inkscape:groupmode="layer" id="layer8" inkscape:label="dotted line" style="display:inline" transform="translate(-4,2.6816164)">
|
||||
<path style="opacity:1;fill:#80d080;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" clip-path="url(#clipPath6910)" d="m 145.16406,11.183594 -5.13232,9.649402 c -0.77924,1.465076 -0.65974,2.41396 0.66876,3.18097 9.66686,5.488467 18.12303,12.874168 24.86104,21.711122 1.05534,1.616079 2.08054,1.713076 3.67763,0.571565 L 178.04883,40 C 169.45271,27.990203 158.19857,18.128379 145.16406,11.183594 Z" id="path7364" inkscape:connector-curvature="0" sodipodi:nodetypes="csccscc" transform="translate(4.9999996,-1.9374999)"/>
|
||||
<path style="opacity:1;fill:#80d080;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" clip-path="url(#clipPath6906)" d="m 193.80469,75.615234 -9.62713,2.062751 c -2.66266,0.570512 -3.40763,1.172953 -2.90593,3.917433 0.85823,4.714633 1.30424,9.497137 1.33189,14.293254 -0.028,5.578758 -0.62194,11.137108 -1.77093,16.589918 -0.86591,3.23162 0.13682,3.77092 3.16149,4.58138 l 8.98639,2.30136 c 1.98177,-7.66828 3.00584,-15.55255 3.04883,-23.472658 -0.0187,-6.817681 -0.76446,-13.613926 -2.22461,-20.273438 z" id="path7366" inkscape:connector-curvature="0" sodipodi:nodetypes="csccccccc" transform="translate(4.9999996,-1.9374999)"/>
|
||||
<path style="opacity:1;fill:#80d080;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" clip-path="url(#clipPath6902)" d="m 14.264281,102.76512 -10.2076406,0.87943 c 1.2093798,14.83154 5.8540346,29.17808 13.5664056,41.90429 l 8.544301,-5.23239 c 2.394983,-1.46665 1.895406,-3.37834 0.986202,-5.04513 -5.118253,-9.40257 -8.359018,-19.71635 -9.536202,-30.36553 0,-2.09418 -1.881577,-2.26744 -3.353066,-2.14067 z" id="path7372" inkscape:connector-curvature="0" sodipodi:nodetypes="sccsccs" transform="translate(4.9999996,-1.9374999)"/>
|
||||
<path style="opacity:1;fill:#80d080;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" clip-path="url(#clipPath6898)" d="m 51.504371,166.60235 -5.82273,8.50898 c 12.710503,8.71282 27.333669,14.23394 42.630859,16.0957 l 1.220329,-9.90843 c 0.355066,-2.88295 -1.085712,-3.52946 -3.332252,-3.90256 -10.402329,-1.73697 -20.373956,-5.45322 -29.373754,-10.94516 -1.647505,-1.06744 -3.639993,-2.30718 -5.322452,0.15147 z" id="path7370" inkscape:connector-curvature="0" sodipodi:nodetypes="sccsccs" transform="translate(4.9999996,-1.9374999)"/>
|
||||
<path style="opacity:1;fill:#80d080;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" clip-path="url(#clipPath6894)" d="M 32.208984,27.683594 C 21.779177,38.079001 13.883707,50.736882 9.1347656,64.675781 L 19.33617,68.090365 c 1.658147,0.55501 2.832564,-0.120955 3.374272,-1.591979 3.777598,-10.021698 9.470788,-19.210103 16.759132,-27.052307 1.561136,-1.561136 1.567283,-2.960058 0.447507,-4.076606 z" id="path7374" inkscape:connector-curvature="0" sodipodi:nodetypes="ccsccsc" transform="translate(4.9999996,-1.9374999)"/>
|
||||
<path style="opacity:1;fill:#80d080;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" clip-path="url(#clipPath6890)" d="M 99.888672,-0.25 C 87.701045,-0.2239408 75.630114,2.1252837 64.322266,6.671875 l 3.530435,8.74898 c 1.063314,2.635062 1.616754,3.526314 4.973913,2.352259 8.692057,-3.031338 17.839027,-4.588849 27.062058,-4.599286 5.555828,0 6.486278,0.350026 6.780788,-3.4460223 l 0.74851,-9.64772758 C 104.9135,-0.12857239 102.40179,-0.23868346 99.888672,-0.25 Z" id="path7376" inkscape:connector-curvature="0" sodipodi:nodetypes="ccsccscc" transform="translate(4.9999996,-1.9374999)"/>
|
||||
<path style="display:inline;fill:#80d080;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" clip-path="url(#clipPath6886)" d="m 138.72416,168.48439 c -4.17634,2.25458 -8.55959,4.09055 -13.0504,5.63418 -1.00363,0.34498 -1.20742,1.18222 -0.8682,2.27372 l 3.44056,11.0706 c 4.92985,-1.53124 9.72799,-3.45808 14.34766,-5.76172 l 0.12695,0.0137 14.0293,5.44532 4.12174,-10.20577 c 0.7548,-1.86894 -0.0184,-2.7016 -1.59462,-3.31324 l -14.72114,-5.71251 c -1.86679,-0.7244 -3.68834,-0.60144 -5.83185,0.55572 z" id="path5005" inkscape:connector-curvature="0" sodipodi:nodetypes="cssccccsssc" transform="translate(4.9999996,-1.9374999)"/>
|
||||
<path style="display:inline;fill:#80d080;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" clip-path="url(#clipPath6882)" d="m 186.53125,152.80469 -10.6386,2.70888 c -0.78879,0.20085 -1.67397,1.02386 -1.35494,2.33801 l 9.75918,40.15428 c 8.56713,5.97538 15.30408,3.06731 11.01563,-9.47266 z" id="path5071" inkscape:connector-curvature="0" sodipodi:nodetypes="cssccc" transform="translate(4.9999996,-1.9374999)"/>
|
||||
</g>
|
||||
<g style="display:inline" inkscape:label="dots" id="layer2" inkscape:groupmode="layer" transform="translate(-4,2.6816348)">
|
||||
<g inkscape:export-ydpi="100" inkscape:export-xdpi="100" style="fill:#f5f5f5;fill-opacity:1" transform="matrix(0.3835576,0,0,0.3835576,-248.17635,-138.86977)" id="g5126">
|
||||
<circle r="27.299093" style="opacity:1;fill:#f5f5f5;fill-opacity:1;fill-rule:evenodd;stroke:none" id="path3047-4" cx="799.11273" cy="609.86285"/>
|
||||
<circle r="27.299093" style="opacity:1;fill:#f5f5f5;fill-opacity:1;fill-rule:evenodd;stroke:none" id="path3047-1-2" cx="918.91962" cy="609.86285"/>
|
||||
<circle r="27.299093" style="opacity:1;fill:#f5f5f5;fill-opacity:1;fill-rule:evenodd;stroke:none" id="path3047-1-8-6" cx="1039.0352" cy="609.86285"/>
|
||||
</g>
|
||||
</g>
|
||||
<g inkscape:groupmode="layer" id="layer1" inkscape:label="light" style="display:inline" transform="translate(-4,2.6816164)">
|
||||
<path style="display:inline;opacity:0.19211821;fill:url(#radialGradient3883);fill-opacity:1;stroke:none" d="m 192.44891,47.715674 c -61.69765,0 -111.704333,49.103472 -111.704333,109.668976 0,12.77573 2.228815,25.0414 6.321575,36.4393 5.069139,0.70557 10.251828,1.06876 15.514978,1.06876 18.80489,0 30.91434,7.28449 47.46533,1.26909 l 54.00234,6.06606 c 5.24363,2.11897 11.63381,1.37954 10.27166,-4.11162 l -14.23663,-57.56735 c 9.15073,-16.06873 12.27539,-34.36633 12.27539,-53.240271 0,-13.72556 -2.63167,-26.842322 -7.42478,-38.909717 -4.09925,-0.447474 -8.2658,-0.683228 -12.48553,-0.683228 z" id="path3878" inkscape:connector-curvature="0" clip-path="url(#clipPath5745)" transform="translate(4.9800894,-1.9374999)" sodipodi:nodetypes="sscsccccscs"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 23 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" class="converse-svg-logo" viewBox="0 0 364 364"><g data-name="Layer 2" fill="#fff"><g data-name="Layer 7"><path d="M179.9 4.15c-70.975 0-134.962 42.755-162.121 108.326-27.16 65.57-12.142 141.044 38.044 191.23 50.187 50.187 125.66 65.205 191.231 38.045 65.571-27.16 108.326-91.146 108.326-162.121 0-96.915-78.565-175.48-175.48-175.48z" class="cls-4"/><path d="M221.46 103.71c0 18.83-29.36 18.83-29.12 0-.24-18.83 29.12-18.83 29.12 0z" class="cls-3"/></g></g><g data-name="Layer 2"><g data-name="Layer 7"><path class="cls-3" d="M221.46 103.71c0 18.83-29.36 18.83-29.12 0-.24-18.83 29.12-18.83 29.12 0z"/><path class="cls-4" d="M179.9 4.15a175.48 175.48 0 1 0 175.48 175.48A175.48 175.48 0 0 0 179.9 4.15zm-40.79 264.5c-.23-17.82 27.58-17.82 27.58 0s-27.81 17.83-27.58 0zm79.49-100.41a79.65 79.65 0 0 1-13.45 5.76 12.76 12.76 0 0 0-6.29 4.65L167.54 222a1.36 1.36 0 0 1-2.46-.8v-35.8a2.58 2.58 0 0 0-3.06-2.53c-15.43 3-30.23 7.7-42.73 19.94-38.8 38-29.42 105.69 16.09 133.16a162.25 162.25 0 0 1-91.47-67.27C-3.86 182.26 34.5 47.25 138.37 25.66c46.89-9.75 118.25 5.16 123.73 62.83 3.05 32.15-15.54 64.4-43.5 79.75z"/></g></g></svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 5.6 KiB |
|
After Width: | Height: | Size: 29 KiB |
@@ -0,0 +1,78 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 128 128" version="1.1">
|
||||
<defs>
|
||||
<radialGradient id="radial0" gradientUnits="userSpaceOnUse" cx="16.488304" cy="23.537582" fx="16.488304" fy="23.537582" r="19" gradientTransform="matrix(5.830516,0,0,5.186123,-57.136612,106.88559)">
|
||||
<stop offset="0" style="stop-color:rgb(45.09804%,82.352942%,8.627451%);stop-opacity:1;"/>
|
||||
<stop offset="1" style="stop-color:rgb(30.588236%,60.392159%,2.352941%);stop-opacity:1;"/>
|
||||
</radialGradient>
|
||||
<filter id="alpha" filterUnits="objectBoundingBox" x="0%" y="0%" width="100%" height="100%">
|
||||
<feColorMatrix type="matrix" in="SourceGraphic" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/>
|
||||
</filter>
|
||||
<mask id="mask0">
|
||||
<g filter="url(#alpha)">
|
||||
<rect x="0" y="0" width="128" height="128" style="fill:rgb(0%,0%,0%);fill-opacity:0.137778;stroke:none;"/>
|
||||
</g>
|
||||
</mask>
|
||||
<linearGradient id="linear0" gradientUnits="userSpaceOnUse" x1="15.571428" y1="29.99917" x2="15.571428" y2="42.285942" gradientTransform="matrix(2.931288,0,0,2.931288,-1.412986,2.510315)">
|
||||
<stop offset="0" style="stop-color:rgb(0%,0%,0%);stop-opacity:1;"/>
|
||||
<stop offset="1" style="stop-color:rgb(0%,0%,0%);stop-opacity:0;"/>
|
||||
</linearGradient>
|
||||
<clipPath id="clip1">
|
||||
<rect x="0" y="0" width="192" height="152"/>
|
||||
</clipPath>
|
||||
<g id="surface511779" clip-path="url(#clip1)">
|
||||
<path style=" stroke:none;fill-rule:evenodd;fill:url(#linear0);" d="M 36.695312 90.449219 C 39.863281 90.667969 45.804688 93.007812 48.417969 90.449219 C 42.980469 93.910156 45.859375 116.472656 43.183594 127.925781 C 41.019531 115.433594 39.433594 94.847656 36.695312 90.449219 Z M 36.695312 90.449219 "/>
|
||||
</g>
|
||||
<mask id="mask1">
|
||||
<g filter="url(#alpha)">
|
||||
<rect x="0" y="0" width="128" height="128" style="fill:rgb(0%,0%,0%);fill-opacity:0.137778;stroke:none;"/>
|
||||
</g>
|
||||
</mask>
|
||||
<linearGradient id="linear1" gradientUnits="userSpaceOnUse" x1="15.571428" y1="29.99917" x2="15.571428" y2="42.285942" gradientTransform="matrix(2.931288,0,0,2.931288,4.44959,2.510315)">
|
||||
<stop offset="0" style="stop-color:rgb(0%,0%,0%);stop-opacity:1;"/>
|
||||
<stop offset="1" style="stop-color:rgb(0%,0%,0%);stop-opacity:0;"/>
|
||||
</linearGradient>
|
||||
<clipPath id="clip2">
|
||||
<rect x="0" y="0" width="192" height="152"/>
|
||||
</clipPath>
|
||||
<g id="surface511782" clip-path="url(#clip2)">
|
||||
<path style=" stroke:none;fill-rule:evenodd;fill:url(#linear1);" d="M 107.042969 90.449219 C 103.875 90.667969 97.933594 93.007812 95.320312 90.449219 C 100.757812 93.910156 97.878906 116.472656 100.554688 127.925781 C 102.71875 115.433594 104.304688 94.847656 107.042969 90.449219 Z M 107.042969 90.449219 "/>
|
||||
</g>
|
||||
<linearGradient id="linear2" gradientUnits="userSpaceOnUse" x1="16" y1="2" x2="38.465416" y2="42.405006" gradientTransform="matrix(3.689005,0,0,3.693769,-24.666805,156.809784)">
|
||||
<stop offset="0" style="stop-color:rgb(100%,100%,100%);stop-opacity:1;"/>
|
||||
<stop offset="1" style="stop-color:rgb(100%,100%,100%);stop-opacity:0;"/>
|
||||
</linearGradient>
|
||||
<radialGradient id="radial1" gradientUnits="userSpaceOnUse" cx="21.142859" cy="22.17857" fx="21.142859" fy="22.17857" r="9" gradientTransform="matrix(2.931285,0,0,2.932291,-6.481694,134.102966)">
|
||||
<stop offset="0" style="stop-color:rgb(99.607843%,94.901961%,56.862748%);stop-opacity:1;"/>
|
||||
<stop offset="1" style="stop-color:rgb(92.941177%,83.137256%,0%);stop-opacity:1;"/>
|
||||
</radialGradient>
|
||||
<linearGradient id="linear3" gradientUnits="userSpaceOnUse" x1="24.260687" y1="2.533504" x2="24.832115" y2="22.012075" gradientTransform="matrix(1.342451,0,-0.837372,1.723858,33.163297,2.90654)">
|
||||
<stop offset="0" style="stop-color:rgb(100%,100%,100%);stop-opacity:1;"/>
|
||||
<stop offset="1" style="stop-color:rgb(100%,100%,100%);stop-opacity:0;"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="linear4" gradientUnits="userSpaceOnUse" x1="16" y1="2" x2="32.927006" y2="31.587952" gradientTransform="matrix(2.912369,0,0,2.925584,-6.027668,173.323547)">
|
||||
<stop offset="0" style="stop-color:rgb(100%,100%,100%);stop-opacity:1;"/>
|
||||
<stop offset="1" style="stop-color:rgb(100%,100%,100%);stop-opacity:0;"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="linear5" gradientUnits="userSpaceOnUse" x1="24.000008" y1="31.785711" x2="30.00001" y2="38.499996" gradientTransform="matrix(1.993,0,0,2.079344,16.040779,163.224747)">
|
||||
<stop offset="0" style="stop-color:rgb(44.705883%,62.352943%,81.176472%);stop-opacity:1;"/>
|
||||
<stop offset="1" style="stop-color:rgb(22.352941%,43.137255%,65.490198%);stop-opacity:1;"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="linear6" gradientUnits="userSpaceOnUse" x1="17.725422" y1="3.860764" x2="27.055439" y2="24.431168" gradientTransform="matrix(2.912369,0,0,2.925584,-6.027668,173.323547)">
|
||||
<stop offset="0" style="stop-color:rgb(100%,100%,100%);stop-opacity:1;"/>
|
||||
<stop offset="1" style="stop-color:rgb(100%,100%,100%);stop-opacity:0;"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g id="surface511761">
|
||||
<path style="fill-rule:nonzero;fill:url(#radial0);stroke-width:2.931288;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(30.588236%,60.392159%,2.352941%);stroke-opacity:1;stroke-miterlimit:4;" d="M 63.871094 218.601562 C 35.554688 218.601562 9.640625 233.59375 9.640625 243.296875 C 9.640625 247.816406 28.058594 245.226562 28.695312 249.191406 L 33.273438 280.140625 C 33.273438 283.101562 34.832031 285.421875 36.847656 285.421875 C 55.203125 290.164062 73.234375 290.09375 90.800781 285.421875 C 92.8125 285.421875 94.464844 283.101562 94.464844 280.140625 L 99.042969 249.191406 C 99.890625 245.851562 118.097656 247.816406 118.097656 243.296875 C 118.097656 233.59375 92.183594 218.601562 63.871094 218.601562 Z M 63.871094 218.601562 " transform="matrix(1,0,0,1,0,-172)"/>
|
||||
<use xlink:href="#surface511779" transform="matrix(1,0,0,1,-8,-16)" mask="url(#mask0)"/>
|
||||
<use xlink:href="#surface511782" transform="matrix(1,0,0,1,-8,-16)" mask="url(#mask1)"/>
|
||||
<path style="fill:none;stroke-width:2.93129;stroke-linecap:butt;stroke-linejoin:miter;stroke:url(#linear2);stroke-miterlimit:4;" d="M 63.871094 221.53125 C 37.082031 221.53125 11.375 237.507812 13.199219 242.46875 C 13.453125 243.152344 30.621094 243.289062 31.222656 247.117188 L 36.183594 277.121094 C 36.183594 279.984375 36.402344 283.0625 38.308594 283.0625 C 56.125 287.078125 73.109375 286.9375 89.34375 283.0625 C 91.25 283.0625 91.554688 280.820312 91.554688 277.960938 L 96.304688 247.324219 C 97.105469 244.101562 113.710938 244.800781 114.121094 241.632812 C 114.886719 235.6875 90.65625 221.53125 63.871094 221.53125 Z M 63.871094 221.53125 " transform="matrix(1,0,0,1,0,-172)"/>
|
||||
<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:0.0593608;stroke-width:2.931289;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(100%,100%,100%);stroke-opacity:0.423529;stroke-miterlimit:4;" d="M 79.992188 233.257812 C 79.992188 239.734375 72.773438 244.984375 63.871094 244.984375 C 54.964844 244.984375 47.746094 239.734375 47.746094 233.257812 C 47.746094 226.78125 54.964844 221.53125 63.871094 221.53125 C 72.773438 221.53125 79.992188 226.78125 79.992188 233.257812 Z M 79.992188 233.257812 " transform="matrix(1,0,0,1,0,-172)"/>
|
||||
<path style="fill-rule:nonzero;fill:url(#radial1);stroke-width:2.931289;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(76.862746%,62.7451%,0%);stroke-opacity:1;stroke-miterlimit:4;" d="M 63.871094 177.5625 C 50.109375 177.5625 38.953125 188.730469 38.953125 202.488281 C 38.953125 211.28125 43.503906 219.019531 50.382812 223.457031 C 54.878906 228.578125 52.875 226.90625 53.609375 233.1875 C 53.609375 234.851562 54.96875 236.210938 56.632812 236.210938 C 61.96875 240.304688 66.722656 239.871094 71.105469 236.210938 C 72.769531 236.210938 74.128906 234.851562 74.128906 233.1875 C 75 227.039062 73.738281 227.816406 76.945312 223.714844 C 84.054688 219.320312 88.785156 211.453125 88.785156 202.488281 C 88.785156 188.730469 77.628906 177.5625 63.871094 177.5625 Z M 63.871094 177.5625 " transform="matrix(1,0,0,1,0,-172)"/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear3);" d="M 59.097656 24.617188 C 56.738281 29.472656 52.273438 33.410156 49.128906 33.410156 C 45.984375 33.410156 45.34375 29.472656 47.703125 24.617188 C 50.0625 19.761719 54.527344 15.824219 57.671875 15.824219 C 60.816406 15.824219 61.453125 19.761719 59.097656 24.617188 Z M 59.097656 24.617188 "/>
|
||||
<path style="fill:none;stroke-width:2.931289;stroke-linecap:butt;stroke-linejoin:miter;stroke:url(#linear4);stroke-miterlimit:4;" d="M 63.871094 180.496094 C 51.726562 180.496094 41.882812 190.714844 41.882812 203.304688 C 41.882812 211.351562 46.273438 217.214844 53.070312 222.492188 C 57.035156 227.183594 55.574219 226.542969 55.875 231.449219 C 55.875 232.972656 56.378906 233.441406 57.847656 233.441406 C 61.960938 237.171875 66.179688 237.078125 70.132812 233.320312 C 71.601562 233.320312 71.738281 232.636719 71.738281 231.113281 C 72.25 224.757812 72.535156 225.519531 75.367188 221.765625 C 81.640625 217.746094 85.855469 211.511719 85.855469 203.304688 C 85.855469 190.714844 76.011719 180.496094 63.871094 180.496094 Z M 63.871094 180.496094 " transform="matrix(1,0,0,1,0,-172)"/>
|
||||
<path style="fill-rule:nonzero;fill:url(#linear5);stroke-width:2.931288;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(20.392157%,39.607844%,64.313728%);stroke-opacity:1;stroke-miterlimit:4;" d="M 52.171875 225.542969 C 53.09375 227.152344 53.101562 228.8125 53.605469 233.160156 C 53.605469 234.832031 54.9375 236.195312 56.589844 236.195312 C 61.890625 240.308594 66.640625 239.875 70.992188 236.195312 C 72.648438 236.195312 74.191406 234.882812 74.191406 233.210938 C 74.757812 229.15625 74.984375 226.558594 75.582031 225.144531 L 71.519531 227.507812 L 56.171875 227.507812 Z M 52.171875 225.542969 " transform="matrix(1,0,0,1,0,-172)"/>
|
||||
<path style="fill:none;stroke-width:2.931289;stroke-linecap:butt;stroke-linejoin:miter;stroke:url(#linear6);stroke-miterlimit:4;" d="M 56.4375 230.328125 L 56.59375 233.285156 L 58.058594 233.285156 C 63.382812 237.972656 66.652344 235.839844 69.785156 233.265625 L 70.925781 233.265625 L 71.300781 230.328125 Z M 56.4375 230.328125 " transform="matrix(1,0,0,1,0,-172)"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 9.9 KiB |
@@ -0,0 +1,267 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
xml:space="preserve"
|
||||
viewBox="0 0 200 200"
|
||||
enable-background="new 0 0 200 200"
|
||||
id="svg36"
|
||||
sodipodi:docname="xmpp.svg"
|
||||
inkscape:version="0.92.3 (2405546, 2018-03-11)"><metadata
|
||||
id="metadata42"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs40"><filter
|
||||
style="color-interpolation-filters:sRGB;"
|
||||
inkscape:label="Greyscale"
|
||||
id="filter1291"><feColorMatrix
|
||||
values="0.05 2.57 0.072 -1.41 0 0.05 2.57 0.072 -1.41 0 0.05 2.57 0.072 -1.41 0 0 0 0 1 0 "
|
||||
id="feColorMatrix1289"
|
||||
result="fbSourceGraphic" /><feColorMatrix
|
||||
result="fbSourceGraphicAlpha"
|
||||
in="fbSourceGraphic"
|
||||
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
|
||||
id="feColorMatrix1329" /><feColorMatrix
|
||||
id="feColorMatrix1331"
|
||||
values="0.05 2.57 0.072 -1.41 0 0.05 2.57 0.072 -1.41 0 0.05 2.57 0.072 -1.41 0 0 0 0 1 0 "
|
||||
in="fbSourceGraphic" /></filter><filter
|
||||
style="color-interpolation-filters:sRGB;"
|
||||
inkscape:label="Greyscale"
|
||||
id="filter1295"><feColorMatrix
|
||||
values="0.05 2.57 0.072 -1.41 0 0.05 2.57 0.072 -1.41 0 0.05 2.57 0.072 -1.41 0 0 0 0 1 0 "
|
||||
id="feColorMatrix1293"
|
||||
result="fbSourceGraphic" /><feColorMatrix
|
||||
result="fbSourceGraphicAlpha"
|
||||
in="fbSourceGraphic"
|
||||
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
|
||||
id="feColorMatrix1333" /><feColorMatrix
|
||||
id="feColorMatrix1335"
|
||||
values="0.05 2.57 0.072 -1.41 0 0.05 2.57 0.072 -1.41 0 0.05 2.57 0.072 -1.41 0 0 0 0 1 0 "
|
||||
in="fbSourceGraphic" /></filter><filter
|
||||
style="color-interpolation-filters:sRGB;"
|
||||
inkscape:label="Greyscale"
|
||||
id="filter1299"><feColorMatrix
|
||||
values="0.05 2.57 0.072 -1.41 0 0.05 2.57 0.072 -1.41 0 0.05 2.57 0.072 -1.41 0 0 0 0 1 0 "
|
||||
id="feColorMatrix1297"
|
||||
result="fbSourceGraphic" /><feColorMatrix
|
||||
result="fbSourceGraphicAlpha"
|
||||
in="fbSourceGraphic"
|
||||
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
|
||||
id="feColorMatrix1337" /><feColorMatrix
|
||||
id="feColorMatrix1339"
|
||||
values="0.05 2.57 0.072 -1.41 0 0.05 2.57 0.072 -1.41 0 0.05 2.57 0.072 -1.41 0 0 0 0 1 0 "
|
||||
in="fbSourceGraphic" /></filter><filter
|
||||
style="color-interpolation-filters:sRGB;"
|
||||
inkscape:label="Greyscale"
|
||||
id="filter1303"><feColorMatrix
|
||||
values="0.05 2.57 0.072 -1.41 0 0.05 2.57 0.072 -1.41 0 0.05 2.57 0.072 -1.41 0 0 0 0 1 0 "
|
||||
id="feColorMatrix1301"
|
||||
result="fbSourceGraphic" /><feColorMatrix
|
||||
result="fbSourceGraphicAlpha"
|
||||
in="fbSourceGraphic"
|
||||
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
|
||||
id="feColorMatrix1341" /><feColorMatrix
|
||||
id="feColorMatrix1343"
|
||||
values="0.05 2.57 0.072 -1.41 0 0.05 2.57 0.072 -1.41 0 0.05 2.57 0.072 -1.41 0 0 0 0 1 0 "
|
||||
in="fbSourceGraphic" /></filter><filter
|
||||
style="color-interpolation-filters:sRGB;"
|
||||
inkscape:label="Greyscale"
|
||||
id="filter1307"><feColorMatrix
|
||||
values="0.05 2.57 0.072 -1.41 0 0.05 2.57 0.072 -1.41 0 0.05 2.57 0.072 -1.41 0 0 0 0 1 0 "
|
||||
id="feColorMatrix1305"
|
||||
result="fbSourceGraphic" /><feColorMatrix
|
||||
result="fbSourceGraphicAlpha"
|
||||
in="fbSourceGraphic"
|
||||
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
|
||||
id="feColorMatrix1345" /><feColorMatrix
|
||||
id="feColorMatrix1347"
|
||||
values="0.05 2.57 0.072 -1.41 0 0.05 2.57 0.072 -1.41 0 0.05 2.57 0.072 -1.41 0 0 0 0 1 0 "
|
||||
in="fbSourceGraphic" /></filter><filter
|
||||
style="color-interpolation-filters:sRGB;"
|
||||
inkscape:label="Greyscale"
|
||||
id="filter1311"><feColorMatrix
|
||||
values="0.05 2.57 0.072 -1.41 0 0.05 2.57 0.072 -1.41 0 0.05 2.57 0.072 -1.41 0 0 0 0 1 0 "
|
||||
id="feColorMatrix1309"
|
||||
result="fbSourceGraphic" /><feColorMatrix
|
||||
result="fbSourceGraphicAlpha"
|
||||
in="fbSourceGraphic"
|
||||
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
|
||||
id="feColorMatrix1349" /><feColorMatrix
|
||||
id="feColorMatrix1351"
|
||||
values="0.05 2.57 0.072 -1.41 0 0.05 2.57 0.072 -1.41 0 0.05 2.57 0.072 -1.41 0 0 0 0 1 0 "
|
||||
in="fbSourceGraphic" /></filter><filter
|
||||
style="color-interpolation-filters:sRGB;"
|
||||
inkscape:label="Greyscale"
|
||||
id="filter1315"><feColorMatrix
|
||||
values="0.05 2.57 0.072 -1.41 0 0.05 2.57 0.072 -1.41 0 0.05 2.57 0.072 -1.41 0 0 0 0 1 0 "
|
||||
id="feColorMatrix1313"
|
||||
result="fbSourceGraphic" /><feColorMatrix
|
||||
result="fbSourceGraphicAlpha"
|
||||
in="fbSourceGraphic"
|
||||
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
|
||||
id="feColorMatrix1353" /><feColorMatrix
|
||||
id="feColorMatrix1355"
|
||||
values="0.05 2.57 0.072 -1.41 0 0.05 2.57 0.072 -1.41 0 0.05 2.57 0.072 -1.41 0 0 0 0 1 0 "
|
||||
in="fbSourceGraphic" /></filter><filter
|
||||
style="color-interpolation-filters:sRGB;"
|
||||
inkscape:label="Greyscale"
|
||||
id="filter1319"><feColorMatrix
|
||||
values="0.05 2.57 0.072 -1.41 0 0.05 2.57 0.072 -1.41 0 0.05 2.57 0.072 -1.41 0 0 0 0 1 0 "
|
||||
id="feColorMatrix1317"
|
||||
result="fbSourceGraphic" /><feColorMatrix
|
||||
result="fbSourceGraphicAlpha"
|
||||
in="fbSourceGraphic"
|
||||
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
|
||||
id="feColorMatrix1357" /><feColorMatrix
|
||||
id="feColorMatrix1359"
|
||||
values="0.05 2.57 0.072 -1.41 0 0.05 2.57 0.072 -1.41 0 0.05 2.57 0.072 -1.41 0 0 0 0 1 0 "
|
||||
in="fbSourceGraphic" /></filter><filter
|
||||
style="color-interpolation-filters:sRGB;"
|
||||
inkscape:label="Greyscale"
|
||||
id="filter1323"><feColorMatrix
|
||||
values="0.05 2.57 0.072 -1.41 0 0.05 2.57 0.072 -1.41 0 0.05 2.57 0.072 -1.41 0 0 0 0 1 0 "
|
||||
id="feColorMatrix1321"
|
||||
result="fbSourceGraphic" /><feColorMatrix
|
||||
result="fbSourceGraphicAlpha"
|
||||
in="fbSourceGraphic"
|
||||
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
|
||||
id="feColorMatrix1361" /><feColorMatrix
|
||||
id="feColorMatrix1363"
|
||||
values="0.05 2.57 0.072 -1.41 0 0.05 2.57 0.072 -1.41 0 0.05 2.57 0.072 -1.41 0 0 0 0 1 0 "
|
||||
in="fbSourceGraphic" /></filter><filter
|
||||
style="color-interpolation-filters:sRGB;"
|
||||
inkscape:label="Greyscale"
|
||||
id="filter1327"><feColorMatrix
|
||||
values="0.05 2.57 0.072 -1.41 0 0.05 2.57 0.072 -1.41 0 0.05 2.57 0.072 -1.41 0 0 0 0 1 0 "
|
||||
id="feColorMatrix1325"
|
||||
result="fbSourceGraphic" /><feColorMatrix
|
||||
result="fbSourceGraphicAlpha"
|
||||
in="fbSourceGraphic"
|
||||
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
|
||||
id="feColorMatrix1365" /><feColorMatrix
|
||||
id="feColorMatrix1367"
|
||||
values="0.05 2.57 0.072 -1.41 0 0.05 2.57 0.072 -1.41 0 0.05 2.57 0.072 -1.41 0 0 0 0 1 0 "
|
||||
in="fbSourceGraphic" /></filter></defs><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1918"
|
||||
inkscape:window-height="1126"
|
||||
id="namedview38"
|
||||
showgrid="false"
|
||||
inkscape:zoom="1.18"
|
||||
inkscape:cx="-83.898305"
|
||||
inkscape:cy="100"
|
||||
inkscape:window-x="1200"
|
||||
inkscape:window-y="744"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg36" />
|
||||
|
||||
<linearGradient
|
||||
id="SVGID_right_"
|
||||
y2="1.279e-13"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x2="-1073.2"
|
||||
gradientTransform="translate(1196.604,15.368977)"
|
||||
y1="126.85"
|
||||
x1="-1073.2">
|
||||
<stop
|
||||
stop-color="#1b3967"
|
||||
offset=".011"
|
||||
id="stop2" />
|
||||
<stop
|
||||
stop-color="#13b5ea"
|
||||
offset=".467"
|
||||
id="stop4" />
|
||||
<stop
|
||||
stop-color="#002b5c"
|
||||
offset=".9945"
|
||||
id="stop6" />
|
||||
</linearGradient>
|
||||
|
||||
<linearGradient
|
||||
id="SVGID_left_"
|
||||
y2="1.279e-13"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x2="-1073.2"
|
||||
gradientTransform="matrix(-1,0,0,1,-994.78801,15.367977)"
|
||||
y1="126.85"
|
||||
x1="-1073.2">
|
||||
<stop
|
||||
stop-color="#1b3967"
|
||||
offset=".011"
|
||||
id="stop9" />
|
||||
<stop
|
||||
stop-color="#13b5ea"
|
||||
offset=".467"
|
||||
id="stop11" />
|
||||
<stop
|
||||
stop-color="#002b5c"
|
||||
offset=".9945"
|
||||
id="stop13" />
|
||||
</linearGradient>
|
||||
|
||||
<rect
|
||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.29300005;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.77952766;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||
id="rect1369"
|
||||
width="191.52542"
|
||||
height="191.52542"
|
||||
x="4.2372894"
|
||||
y="4.2372894"
|
||||
rx="13.4362"
|
||||
ry="13.435" /><path
|
||||
d="m 151.80512,29.557978 c 0.077,1.313 -1.787,0.968 -1.787,2.293 0,38.551 -46.558,97.366012 -91.687985,108.730012 v 1.639 C 118.28313,136.69999 186.89012,74.419978 188.40012,15.369977 l -36.599,14.189001 z"
|
||||
style="fill:url(#SVGID_right_);opacity:0.293;filter:url(#filter1327)"
|
||||
id="path16" />
|
||||
<path
|
||||
d="m 133.67312,34.300978 c 0.076,1.313 0.12,2.63 0.12,3.957 0,38.551 -30.69898,90.497012 -75.826985,101.860012 v 1.639 c 59.044005,-2.79 105.809995,-63.024012 105.809995,-109.200012 0,-2.375 -0.128,-4.729 -0.371,-7.056 l -29.73,8.798 z"
|
||||
style="fill:#e96d1f;opacity:0.293;filter:url(#filter1323)"
|
||||
id="path18" />
|
||||
<path
|
||||
d="m 163.69112,24.951978 -7.61699,2.722 c 0.041,0.962 0.066,2.254 0.066,3.225 0,41.219 -37.271,98.204012 -87.271995,107.120012 -3.24501,1.088 -7.53801,2.077 -10.932,2.931 v 1.638 C 123.19013,137.02799 169.03613,70.721978 163.69612,24.947978 Z"
|
||||
style="fill:#d9541e;opacity:0.293;filter:url(#filter1319)"
|
||||
id="path20" />
|
||||
|
||||
<path
|
||||
d="m 50.011,29.556978 c -0.077,1.313 1.787,0.968 1.787,2.293 0,38.551 46.558007,97.366012 91.68799,108.730012 v 1.639 C 83.533,136.69899 14.926,74.418978 13.416,15.368977 l 36.599,14.189001 z"
|
||||
style="fill:url(#SVGID_left_);opacity:0.293;filter:url(#filter1315)"
|
||||
id="path22" />
|
||||
<path
|
||||
d="m 68.143,34.299978 c -0.076,1.313 -0.12,2.63 -0.12,3.957 0,38.551 30.698995,90.497012 75.82699,101.860012 v 1.639 C 84.806,138.96599 38.04,78.731978 38.04,32.555978 c 0,-2.375 0.128,-4.729 0.371,-7.056 l 29.73,8.798 z"
|
||||
style="fill:#a0ce67;opacity:0.293;filter:url(#filter1311)"
|
||||
id="path24" />
|
||||
<path
|
||||
d="m 38.125,24.950978 7.617,2.722 c -0.041,0.962 -0.066,2.254 -0.066,3.225 0,41.219 37.271,98.204012 87.27199,107.120012 3.245,1.088 7.538,2.077 10.932,2.931 v 1.638 C 78.626,137.02699 32.78,70.720978 38.12,24.946978 Z"
|
||||
style="fill:#439639;opacity:0.293;filter:url(#filter1307)"
|
||||
id="path26" />
|
||||
|
||||
<path
|
||||
d="m 25.988,172.07799 -13.388,-14.65 h 11.643 l 9.127,10.268 9.129,-10.268 h 11.643 l -13.387,14.646 14.401,14.728 h -12.09 l -9.697,-10.67 -9.693,10.67 H 11.584 l 14.404,-14.73 z"
|
||||
id="path28"
|
||||
style="opacity:0.293;filter:url(#filter1303)" />
|
||||
<path
|
||||
d="m 58.508,157.42799 h 13.836 l 10.183,18.905 10.183,-18.905 h 13.83199 v 29.374 h -8.761983 v -21.096 h -0.08 L 85.893,186.80199 H 79.16 l -11.807,-21.096 h -0.082 v 21.096 h -8.764 v -29.37 z"
|
||||
id="path30"
|
||||
style="opacity:0.293;filter:url(#filter1299)" />
|
||||
<path
|
||||
d="m 112.66199,157.42799 h 24.546 c 8.559,0 10.628,4.302 10.628,10.063 v 2.516 c 0,4.381 -1.908,9.41 -8.275,9.41 h -17.894 v 7.385 h -9.005 v -29.38 z m 9,14.69 h 13.997 c 2.10901,0 2.92401,-1.377 2.92401,-3.123 v -1.135 c 0,-1.99 -0.976,-3.127 -3.694,-3.127 h -13.227 v 7.38 z"
|
||||
id="path32"
|
||||
style="opacity:0.293;filter:url(#filter1295)" />
|
||||
<path
|
||||
d="m 152.72199,157.42799 h 24.546 c 8.561,0 10.63,4.302 10.63,10.063 v 2.516 c 0,4.381 -1.907,9.41 -8.275,9.41 h -17.893 v 7.385 h -9.008 v -29.38 z m 9.01,14.69 h 13.996 c 2.11,0 2.922,-1.377 2.922,-3.123 v -1.135 c 0,-1.99 -0.974,-3.127 -3.693,-3.127 h -13.225 v 7.38 z"
|
||||
id="path34"
|
||||
style="opacity:0.293;filter:url(#filter1291)" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 4.8 KiB |
@@ -0,0 +1,28 @@
|
||||
<svg width="1920" height="1920" viewBox="0 0 1920 1920" xmlns="http://www.w3.org/2000/svg">
|
||||
<clipPath id="a">
|
||||
<path id="b" fill="#2cd3e3" d="m1334.5488 1582.1247c-28.4552-23.0252-43.2128-44.8707-64.5988-95.6247-25.3093-60.0651-47.8839-87.6239-87.964-107.3859-19.9998-9.8611-40.1173-15.0444-66.3812-17.1032-18.9074-1.4822-86.6304-.5278-105.3003-2.0652-69.92737-5.7579-123.90089-26.1169-173.47181-65.4343-33.41312-26.5017-70.02913-69.9082-94.99294-112.5114-59.79603-102.0478-81.37876-198.78271-213.27375-277.5941 12.39924-21.70183 34.09241-35.09759 55.52244-46.62618 20.4843-40.74139 42.32638-74.39974 95.91156-90.58542 12.92189-3.90313 19.90689-4.69554 41-4.65128 19.70006.0414 20.96826.16562 32.5 3.18481 21.18287 5.546 34.31788 11.45635 53.38893 24.02338 19.97173 13.16053 31.44414 24.26503 56.13281 54.33267 17.87816 21.77332 20.10026 24.33205 29.31923 33.76085 38.65972 39.53961 73.34668 36.56267 77.81969 36.14929-3.67291-7.73135-7.29364-23.38307-9.10389-39.62667-1.95764-17.56621-3.46012-42.21303-.95323-62.86735 2.58304-21.28177 9.83227-48.31061 17.50821-65.27964 1.31354-2.90379 2.38825-5.54332 2.38825-5.86561 0-1.65552 15.0061-30.21565 21.1639-40.27977 15.3858-25.14644 47.5329-70.83509 57.3361-81.48827.55-.59769 3.6688-4.42585 6.9307-8.50703 20.0294-25.06008 61.3537-67.08217 85.5693-87.01412 4.125-3.3953 9.7022-8.06154 12.3937-10.36942s5.8415-4.84506 7-5.63818 2.3313-1.72317 2.6063-2.06678c.8826-1.1028 27.1338-20.41419 38.5-28.32203 6.05-4.2092 11.45-8.01486 12-8.45702.55-.44217 7.525-4.99177 15.5-10.11024s16.3-10.54797 18.5-12.06558c2.2-1.5176 6.25-3.99698 9-5.50973s7.925-4.47099 11.5-6.57386c13.4478-7.91025 40.507-21.75211 58.5406-29.94597 3.8277-1.73914 8.3094-3.83676 9.9594-4.66137s8.6073-3.99308 15.4606-7.04105c10.2629-4.56435 23.0544-10.9269 35.5224-17.66911 11.2219-6.06834 23.0076-14.83706 33.267-24.75094 3.9875-3.85322 7.25-7.2074 7.25-7.45373 0-.41324 3.9579-5.11446 6.6475-7.896 13.3625-17.52378 25.7406-36.11072 37.3525-54.41717 2.8879-6.21005 7.1747-10.94806 10.9967-16.61738 14.2693-21.35936 38.3987-46.12055 52.8954-54.28053 6.5625-3.69394 6.6868-3.71947 18.1079-3.71947h11.5l7.072 4.76366c7.5209 5.06596 10.2495 8.10481 12.3342 13.73634.7126 1.925 1.8127 4.58582 2.4447 5.91293.6555 1.3765 1.0922 6.59185 1.0166 12.142-.1294 9.49449-1.9623 17.67936-5.9561 26.5962-.7763 1.73312-1.4114 3.46586-1.4114 3.85053 0 1.64538-11.5429 23.35454-16.3963 30.83705-5.0777 7.82835-16.4697 23.23766-22.6523 30.64036-5.262 6.30047-11.3563 14.48273-16.0682 21.57342-8.8399 13.3025-15.6286 24.4666-16.5854 26.0786 10.8788-1.30869 21.897-1.65453 32.6366 1.10818 1.2886.4184 2.1768.98674 3.669 1.86853 4.1956 2.47926 11.6427 7.2794 15.4941 12.3922 1.8644 2.475 3.6551 4.725 3.9794 5 .3242.275 1.8996 3.2 3.5007 6.5 2.6871 5.53821 2.9707 9.13322 3.1386 18.60473.189 10.66226-.9846 16.29074-1.191 19.75385 6.6399-3.85785 68.2097-48.67035 101.9748-81.25338 11.0808-10.69288 36.2578-31.38092 45-37.25385 7.9297-5.32709 19.7095-10.85876 26.3612-12.37894 7.6088-1.73891 17.6682-.79227 24.418 2.29787 5.7726 2.64277 12.1294 8.29114 13.2286 11.75417.3448 1.08655 1.0105 1.97555 1.4792 1.97555 1.8172 0 4.2605 10.38748 4.1748 17.7484-.1093 9.39437-2.037 16.08622-7.322 25.41898-3.6169 6.38689-11.1266 16.63906-12.7836 18.83262-1.5504 2.05248-40.135 48.18251-56.9886 65.86569 30.3686 14.93501 32.4554 41.18744 24.255 71.63431-3.1937 10.14275-18.2308 38.01159-25.8091 53-20.1691 39.89035-69.5128 84.65212-89.0886 100 21.0212 8.92454 30.5113 33.51052 28.588 60.4132-1.4231 19.90537-12.2817 36.97875-37.1412 66.76616-33.7924 40.49125-49.7967 56.06859-72.5779 70.64162-20.2524 12.9553-43.9723 19.71177-43.9723 19.71177l2.0507 5.73362c2.7125 7.58411 2.9095 26.06285.3634 34.10628-2.032 6.41958-7.4973 16.55768-13.0067 24.12735-14.0923 19.36253-57.6985 53.0432-84.2781 65.095-23.5526 10.6791-38.5513 11.0799-38.5513 11.0799s4.4828 17.4333 4.5366 32.3251c.062 17.2547-1.6171 24.9745-8.4225 38.7141-13.1955 27.7415-40.4507 43.1189-64.2219 60.6872.624 1.5922 14.0082 16.3275 33.214 33.2719 24.8978 21.9664 46.1991 38.8539 58.1406 46.0936 2.9445 1.7851 7.3787 4.6388 9.8537 6.3416 6.9336 4.77 23.2748 13.4845 35.5 18.9314 6.9705 3.1057 26.8466 10.3458 30.5 11.1099 1.375.2876 4.525 1.143 7 1.9009 6.4625 1.9791 28.7403 5.8808 57 9.9829 44.0448 6.3935 66.3152 13.2318 83.5 25.6391 6.0801 4.3899 18.6026 18.1866 21.9348 24.1668 1.888 3.3883 4.6832 9.7606 6.2116 14.1606 2.5802 7.4282 2.7815 9.1436 2.8162 24 .042 17.9653-1.0805 23.8424-6.9121 36.1911-19.8567 42.0471-55.5096 46.1675-56.5901 47.4421l.2016 18.8668c.1149 10.7554-.309 15.0482-1.9509 21.116-7.88 29.1225-30.5077 51.5014-60.7111 60.0436-6.468 1.8294-10.5853 2.7691-21.5 2.8332-4.0173.024-17.2994-.6829-19.9921-1.4742 0 3.326-10.1664 20.2644-14.9191 25.1952-11.8393 12.2831-25.5479 18.2905-43.0888 18.8825-38.6908 1.3062-77.5246-27.63-88.4512-36.4716z"/>
|
||||
</clipPath>
|
||||
<path d="m0 0h1920v1920h-1920z" fill="#99eaff"/>
|
||||
<path d="m-44.254722 682.91057c195.353132-132.92976 351.447222-98.86848 466.022032-48.80765 204.35207-329.62316 703.72149-387.88427 998.49769-44.04599 161.505-107.80619 371.353-50.80746 513.0074 52.62089v1277.32218h-1933.2724z" fill="#ccf4fe"/>
|
||||
<path d="m-31.628257 1167.2235c141.494017-53.3934 359.227947-17.1959 518.575047 66.9771 65.06772-453.22794 741.28201-465.29026 983.71021-104.8824 63.4716-32.6017 324.2921-63.3571 474.0492 90.6289v700.0529h-1944.7062z" fill="#fff"/>
|
||||
<g fill="none" stroke="#24a8b5" stroke-width="54" transform="rotate(19,563,-133)">
|
||||
<rect fill="#fff" height="291.04729" rx="6" width="465.78566" x="658.32253" y="885.69167"/>
|
||||
<path d="m679.21967 898.18315 135.36056 123.54005c52.5322 47.9448 95.48415 41.0626 142.69405 2.6219l160.20842-128.62378"/>
|
||||
<path d="m660.09283 1167.9354 165.27316-150.8431"/>
|
||||
<path d="m1120.3373 1163.3457-172.18298-144.7062"/>
|
||||
</g>
|
||||
<g clip-path="url(#a)">
|
||||
<use href="#b"/>
|
||||
<g fill="#86dae2">
|
||||
<path d="m1233.1711 1089.7708c74.3447 200.172 163.4242 242.1899 428.0614 258.5212z"/>
|
||||
<path d="m953.96862 900.02607c87.31948-193.16064 157.28438-342.38841 439.70248-467.33639 138.8966-73.9092 194.465-250.8988 206.6771-310.43615-821.074 333.68623-646.37958 777.77254-646.37958 777.77254z"/>
|
||||
<path d="m1304.4521 518.42089c-3.1972 24.87639 8.6381 41.59821 36.7513 33.28049 71.1957-54.02509 205.5464-129.071 264.9326-160.18902l-42.9959-39.98576c-86.0448 61.38901-171.0257 114.41378-258.688 166.89429z"/>
|
||||
</g>
|
||||
<g fill="#24a8b5">
|
||||
<path d="m650.66153 1043.6358c35.84819-7.7967 100.70568 99.4805 195.35014 170.7051 87.87216 66.1281 182.82513 122.737 315.04673 156.9323h-400z"/>
|
||||
<path d="m1512.902 1589.2508c-18.6453-5.0324-36.0134-17.755-46.902-25.6075-22.5409-16.2558-34.9983-29.0675-52.526-54.0201-3.983-5.6702-4.909-7.824-5.2782-12.2758-.8038-9.6922 5.4325-20.9839 14.1406-25.6039 6.403-3.397 18.5519-3.1944 24.6636.4113 2.475 1.4602 5.5452 3.774 6.8227 5.1419 2.3601 2.527 14.1773 22.3559 14.1773 23.789 0 .4308 2.6168 4.0753 5.8152 8.0988 6.3214 7.9525 13.6647 12.5624 21.6158 13.57 2.2379.2836 4.519.8656 5.069 1.2934 3.0571 2.3778 21.7976 11.5654 28.8134 14.1258 9.3454 3.4107 38.4695 11.239 52.0269 8.325zm56.098-117.9241c-25.6398-4.1122-45.313-11.2939-63.4578-23.1654-3.8732-2.5342-7.5463-5.0916-8.1625-5.6833-2.4442-2.347-4.6232-8.0813-5.0882-13.3901-1.3041-14.888 10.8462-28.0084 25.9906-28.0659 6.9742-.026 10.3204 1.2892 21.0182 8.2643 18.1237 11.8168 18.9424 12.0203 43.3285 10.77 15.5849-.7991 21.9984-1.5668 29.7328-3.5589 11.2454-2.8964 32.7607-14.8363 39.8916-19.9593 29.3594-21.0928-4.3677 60.6463-51.7667 74.4379-5.2291 1.5215-24.7641 1.4288-31.4865.3507z"/>
|
||||
<path d="m1288.7736 1166.6709c-14.4841-7.4689-27.8659-16.0015-33.595-21.4209-.7268-.6875-1.6268-1.2572-2-1.266-.3732-.01-2.0891-1.2463-3.813-2.75-5.0574-4.4113-7.6001-6.5206-12.3365-10.234-6.9934-5.4829-12.4377-11.2687-23.5562-25.0336-5.6703-7.0198-11.3497-14.0465-12.6208-15.6149-3.9429-4.8645-30.0607-30.7167-35.7676-35.4038-2.9785-2.4462-5.9035-4.8977-6.5-5.4477-2.7209-2.5089-16.3102-13.0809-29.0845-22.6268-7.7-5.754-14.9-11.191-16-12.0823-27.8685-22.57972-50.2047-44.82165-64.5636-64.2909-2.4337-3.3-4.7044-6.225-5.0459-6.5-1.3255-1.0675-11.6505-19.90497-15.073-27.5-4.9158-10.90894-5.9546-16.35613-5.9937-16.35734-.039-.001 14.657-10.58109 22.2869-17.87067 12.9353-12.35828 24.2378-27.46964 34.609-46.27199 1.6686-3.025 5.4172-9.775 8.3303-15 5.3314-9.56273 10.95-20.60836 10.95-21.52683 0-.92199 4.2808-9.89307 18.1199-37.97317 20.0968-40.77691 24.0013-47.37572 43.194-73 9.0207-12.0435 34.4314-36.74541 48.7689-47.40861 6.8295-5.07924 13.0922-9.77542 13.9172-10.43596 2.2846-1.82914 24.9623-16.08734 29.5-18.54758 2.2-1.19279 6.25-3.51776 9-5.16659s5.9-3.43407 7-3.96718c1.1-.53312 2.675-1.41859 3.5-1.96772 1.7622-1.17296 38.3689-20.45569 65.5-34.50245 22.871-11.84113 62.7539-31.79659 74.5-37.27615 4.675-2.18089 11.4789-5.35569 15.1197-7.05511 8.3699-3.90673 18.5224-7.94846 36.8803-14.6821 52.0745-19.10082 82.1244-35.88524 114.5663-57.93548 56.591-54.73241 114.6827-143.77442 204.8677-130.93094.4589.34691-2.9044 5.47537-4.6891 7.43032-1.7847 1.95494-6.6199 7.34971-10.7449 11.98838-8.3713 9.41369-67.4215 68.80341-76 76.43687-3.025 2.69177-8.659 7.84751-12.5201 11.45721-3.861 3.6097-9.8916 9.03809-13.4014 12.06309-3.5097 3.025-7.3257 6.41342-8.4799 7.52983s-3.0471 2.69141-4.2064 3.5-5.3858 4.39517-9.3922 7.97017-8.2329 7.15658-9.3922 7.95908c-1.1593.80249-2.7345 2.07205-3.5005 2.82124-3.4044 3.32982-22.146 18.12892-39.1073 30.88055-6.325 4.75519-13.3 10.33063-15.5 12.38986-2.2 2.05924-7.8659 6.82773-12.5909 10.59667-9.2341 7.36566-10.9713 8.69193-20.8478 15.91646-7.6025 5.56117-7.5357 5.50965-12.1933 9.40136-1.9976 1.66913-3.9297 3.03478-4.2936 3.03478-.6844 0-6.3395 4.98978-12.3271 10.87699-7.8164 7.68525-12.2473 18.09358-12.2473 28.76916 0 8.24671 6.7852 19.31415 14.2501 23.24339 2.4436 1.28622 3.0344 1.14175 7.9449-1.9428 7.2368-4.54577 43.0629-28.18107 44.305-29.22898.55-.46402 5.725-4.17698 11.5-8.25104 18.3873-12.9716 54.7069-39.83495 56-41.41971.275-.33703 7.25-5.97722 15.5-12.53373 8.25-6.55652 17.6892-14.19172 20.9759-16.96711 6.676-5.63736 6.714-5.67032 12.142-10.54617 2.143-1.925 8.6181-7.53436 14.3892-12.46525 5.7711-4.93088 17.3806-16.47746 19.8378-18.83408 14.1473-13.56818 40.9289 20.21634 34.0829 48.6802-1.6566 6.88714-41.7247 48.98956-68.8345 72.61913-13.0542 11.37834-36.8282 28.85402-55.0933 40.49771-6.875 4.38271-12.725 8.20114-13 8.48542s-3.425 2.05594-7 3.93703-10.1306 5.81859-14.568 8.75c-4.4375 2.93141-8.5625 5.32984-9.1667 5.32984-.6043 0-1.2486.39679-1.432.88177-1.0625 2.81072-34.9649 17.57585-55.1028 23.9983-7.528 2.40085-41.1813 10.90498-55.418 14.00404-9.5115 2.07045-13.3542 3.61322-16.8639 6.77047-14.14 12.72-10.9471 36.08206 6.0105 43.97855 8.3843 3.90423 14.5044 3.25572 44.5409-4.71974 23.2114-6.16323 55.8635-17.70206 77.5-27.38751 13.773-6.1654 45.7416-23.08079 46.4986-23.4063 19.2912-8.29473 50.8351 37.4702 31.0473 65.79168-4.7798 6.84129-28.1452 30.01453-37.0459 37.42496-4.675 3.89223-8.725 7.32249-9 7.62281-2.5034 2.73388-26.6145 19.2044-35 23.90891-8.1316 4.56204-27.8123 13.8933-36.1821 17.15511-15.8184 6.16462-25.8704 9.06135-57.3179 16.51751-14.6692 3.47805-24.5121 4.58773-41.5 4.67865-16.4011.0878-22.6551-.4613-48.1926-4.23122-3.681-.5434-9.531-.98359-13-.97822-19.6876.0305-32.571 19.93082-24.267 37.48403 4.1799 8.8356 7.3725 10.90357 20.5966 13.34134 15.9836 2.94647 23.909 3.8949 43.5059 5.20641 19.4217 1.29976 44.5016.15505 66.2442-3.02356 6.9371-1.01416 16.7595-2.20862 16.9641-2.00613 7.0343 17.98197 15.4318 34.89104-.5251 46.85513-7.6975 5.77148-20.0799 12.38579-30.8261 18.09216-5.7335 3.04459-19.9844 8.87616-29.5 12.07162-26.6188 8.93895-53.585 12.08754-86.5 10.09981-15.4676-.93409-20.3213-1.66343-34.5-5.18412-12.6562-3.14267-17.8977-4.00843-22.5-3.71645-10.3873.659-17.7758 5.84336-22.2827 15.63534-2.1083 4.58065-2.3966 6.38465-1.9709 12.33435.4327 6.047 1.0116 7.7078 4.3761 12.553l3.8775 5.584 11 3.3669c24.2908 7.4351 57.1068 13.2823 75.8676 12.9354 17.3135-.3202 26.4227 119.255-72.197 130.361-.6139.069-6.6465-2.8481-13.397-6.3291z"/>
|
||||
</g>
|
||||
<circle cx="708.6" cy="879.6" fill="#fff" r="26"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 32 KiB |
@@ -0,0 +1,39 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<svg version="1.1" width="512" height="512" viewBox="0 0 64 64" color-interpolation="linearRGB"
|
||||
xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg">
|
||||
<g>
|
||||
<path style="fill:#000000; fill-opacity:0.4"
|
||||
d="M20.99 2C10.5 2 1.99 9.15 1.99 18C1.99 26.82 10.5 34 20.99 34C31.47 34 40 26.82 40 18C40 9.15 31.47 2 20.99 2z
|
||||
M40 36C37 33 36 26 36 26L28 32C28 32 36 36 40 36z"
|
||||
transform="matrix(1.4544,0,0,1.4544,2.9135,6.9089)"
|
||||
/>
|
||||
<path style="fill:none; stroke:#000000; stroke-width:4; stroke-linecap:round; stroke-linejoin:round"
|
||||
d="M20.99 2C10.5 2 1.99 9.15 1.99 18C1.99 26.82 10.5 34 20.99 34C31.47 34 40 26.82 40 18C40 9.15 31.47 2 20.99 2z
|
||||
M40 36C37 33 36 26 36 26L28 32C28 32 36 36 40 36z"
|
||||
transform="matrix(1.4544,0,0,1.4544,0.0047,4)"
|
||||
/>
|
||||
<linearGradient id="gradient0" gradientUnits="userSpaceOnUse" x1="128" y1="1.99" x2="128" y2="40">
|
||||
<stop offset="0" stop-color="#ffffff"/>
|
||||
<stop offset="1" stop-color="#e5e5e5"/>
|
||||
</linearGradient>
|
||||
<path style="fill:url(#gradient0)"
|
||||
d="M20.99 2C10.5 2 1.99 9.15 1.99 18C1.99 26.82 10.5 34 20.99 34C31.47 34 40 26.82 40 18C40 9.15 31.47 2 20.99 2z
|
||||
M40 36C37 33 36 26 36 26L28 32C28 32 36 36 40 36z"
|
||||
transform="matrix(1.4544,0,0,1.4544,0.0047,4)"
|
||||
/>
|
||||
<path style="fill:#000000"
|
||||
d="M22.48 26.76H26.1V28.82H22.48
|
||||
M26.1 21.75V23.99H22.48V21.75
|
||||
M34.03 23.99H30.29V21.75H34.03
|
||||
M30.29 28.82V26.76H34.03V28.82
|
||||
M30.29 40.24V36.75H40.15V33.27H30.29V31.75H38.14V18.77H30.29V17.75H39.71V14.3H30.29V11.57H26.1V14.3H17.15V17.75H26.1V18.77H18.59V31.75H26.1V33.27H16.71V36.75H26.1V40.24
|
||||
M15.39 16.61C12.9 14.22 10.89 12.49 10.89 12.49L7.6 15.07C7.6 15.07 7.6 15.07 9.62 16.79C12 18.82 13.01 20.57 13.01 20.57L16.53 18.16
|
||||
M7.46 25.83V29.75H11.5V37.75C11.5 37.75 11.5 37.75 10.06 39C8.43 40.21 7.03 41.13 7.03 41.13L9.04 45.46C9.04 45.46 9.04 45.46 10.89 43.82C12.35 42.46 13.79 41.05 15.96 43.82C18.84 44.86 23.12 45.07 27.51 45.29C35.15 45.19 39.6 44.94 39.82 43.76C40.43 41.77 40.93 40.75 35.96 41.16C27.48 41.27 23.15 41.08 19.48 40.94C16.96 39.93 15.56 37.46 15.56 37.46V25.83H7.46z
|
||||
M51.62 40.02H48.67V37.75H51.62
|
||||
M54.73 34.99H45.57V44.55H48.67V42.75H54.73
|
||||
M48.82 24.18V21.75H51.59V24.18
|
||||
M73.48 22.75C73.48 22.75 73.48 22.75 73.23 25.18C72.93 27.24 72.65 28.75 72.65 28.75L76.07 29.55C76.07 29.55 76.07 29.55 76.75 26.88C77.4 22.66 77.82 19.35 77.82 19.35L75.03 18.77L74.37 18.88H67.43C67.43 18.88 67.43 18.88 67.82 17.15C68.18 15.21 68.48 13.22 68.48 13.22L64.34 12.61C64.34 12.61 64.34 12.61 63.71 17.93C62.46 23.02 60.26 26.69 60.31 26.47C60.31 26.19 60.31 25.9 60.31 25.9V17.75H62.5V14.3H44.57V17.75H56.53V25.79C56.53 25.79 56.53 25.79 56.53 26.15C56.37 26.25 56.01 26.25 56.01 26.25H54.68V19.21H45.73V28H48.82V26.75H53.39C53.39 26.75 53.39 26.75 53.75 28C54.1 28.97 54.26 29.75 56.34 29.75C57.82 29.72 58.93 29.25 59.62 28.9C59.98 28.47 60.15 27.79 61.2 28.32C62.82 29.33 63.46 29.93 64.59 28.21C65.56 25.88 66.35 22.75 66.35 22.75H66.92V28.07C66.92 28.07 66.92 28.07 66.92 31.43C65.78 38.38 60.34 42.61 60.34 42.61V33.75H62.82V30.27H44.18V33.75H56.53V42.69C56.53 42.69 56.53 42.69 56.53 43.19C56.42 43.29 55.98 43.35 55.65 43.38C54.32 43.38 53.07 43.35 53.53 44.29C54.04 45.72 54.18 46.75 56.28 46.75C57.78 46.72 58.93 46.15 59.79 45.68C60.15 45.04 60.31 43.96 60.98 44.9C61.78 46.11 62.1 46.9 66.46 43.85C68.57 37.88 69.09 34.85 69.51 37.72C71.46 43.96 75.64 46.85 76.25 45.83C77.43 44.02 78.2 42.97 72.4 38.79C71.1 31.49 71.1 27.75 71.1 27.75V22.75H73.48z"
|
||||
transform="matrix(0.6943,0,0,0.669,0.986,10.1795)"
|
||||
/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.7 KiB |
@@ -0,0 +1,136 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg id="Layer_2" data-name="Layer 2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 484.03 474.84">
|
||||
<defs>
|
||||
<style>
|
||||
.cls-1 {
|
||||
fill: #e5cf62;
|
||||
}
|
||||
|
||||
.cls-2 {
|
||||
fill: #392e1f;
|
||||
}
|
||||
|
||||
.cls-3 {
|
||||
fill: #feffff;
|
||||
}
|
||||
|
||||
.cls-4 {
|
||||
fill: #c4b62f;
|
||||
}
|
||||
|
||||
.cls-5 {
|
||||
fill: #baab9a;
|
||||
}
|
||||
|
||||
.cls-6 {
|
||||
clip-path: url(#clippath-1);
|
||||
}
|
||||
|
||||
.cls-7 {
|
||||
stroke: url(#linear-gradient-2);
|
||||
}
|
||||
|
||||
.cls-7, .cls-8, .cls-9, .cls-10 {
|
||||
fill: none;
|
||||
}
|
||||
|
||||
.cls-7, .cls-8, .cls-10 {
|
||||
stroke-miterlimit: 10;
|
||||
stroke-width: 4px;
|
||||
}
|
||||
|
||||
.cls-11 {
|
||||
fill: #c1b66e;
|
||||
}
|
||||
|
||||
.cls-12 {
|
||||
fill: #2e2130;
|
||||
}
|
||||
|
||||
.cls-13 {
|
||||
fill: #cab01c;
|
||||
}
|
||||
|
||||
.cls-8 {
|
||||
stroke: url(#linear-gradient-3);
|
||||
}
|
||||
|
||||
.cls-14 {
|
||||
fill: #212121;
|
||||
}
|
||||
|
||||
.cls-15 {
|
||||
clip-path: url(#clippath);
|
||||
}
|
||||
|
||||
.cls-16 {
|
||||
fill: #000805;
|
||||
}
|
||||
|
||||
.cls-10 {
|
||||
stroke: url(#linear-gradient);
|
||||
}
|
||||
|
||||
.cls-17 {
|
||||
fill: #a19a42;
|
||||
}
|
||||
|
||||
.cls-18 {
|
||||
fill: #e8d96d;
|
||||
}
|
||||
</style>
|
||||
<clipPath id="clippath">
|
||||
<path class="cls-9" d="m155.97,474.84c7.81-22.57,14.87-41.17,20.32-55,7.75-19.68,11.14-26.91,14.04-32.69,5.91-11.79,5.69-9.39,18.17-32.42,0,0,6.98-12.89,12.99-21.62,3.1-4.5,6.45-8.9,6.45-8.9,0,0,1.62-2.13,3.39-4.34,19.7-24.71,37.39-42.47,37.39-42.47,16.07-16.13,29.3-26.98,33.86-30.66,1.39-1.13,2.09-1.69,3.04-2.43,10.94-8.46,23.07-17.66,41.13-23.66,16.54-5.49,32.93-11.11,47.57-2.97,15.11,8.4,23.96,26.19,22.79,45.59,2.7,2.4,8.44,8.2,11.15,17.59,1.82,6.32,1.55,11.79,1.11,15.11-5.31-2.37-9.53-4.76-12.64-6.69-3.8-2.36-4.42-2.86-6.57-3.96-7.69-3.97-15.14-4.23-17.15-4.25-4-.05-12.02.48-20.11,5.4-1.81,1.1-5.49,3.55-9.89,8.76-7.98,9.47-6.36,13.87-12.6,24.54-8.59,14.68-22.3,24.5-30.92,30.71-.42.3-.95.68-1.6,1.13-6.32,4.37-21.12,13.79-47.95,21.66-28.58,8.38-56.07,10.71-69.13,11.48,20.68-10.52,48.58-28.44,72.96-58.1,7.25-8.82,28.21-35.77,35.57-69.33,2.12-9.69,2.61-17.76,1.49-26.01-2.16-15.83-9.62-27.43-15.61-35.43-35.45-47.32-79.28-74.32-79.28-74.32-33.41-20.09-41.33-16.6-86.45-39.71-29.69-15.21-52.46-30.15-66.66-40.06,3.77,5.61,10.25,14.8,19.32,25.27,8.86,10.23,29.39,32.29,98.99,76.27,9.78,6.18,24.06,15.02,41.73,25.3-4.86-1.48-11.52-3.61-19.32-6.44-37.63-13.67-64.07-30-72.96-35.68-16.44-10.5-36.81-25.42-57.85-46.08,8.9,21.52,24.08,48.86,51.16,70.98,16.71,13.65,41.42,24.83,60.29,34.01,11.17,5.43,20.63,9.61,27.28,12.44-5.29.29-10.84.29-16.62-.08-38.61-2.48-68.4-20.46-86.56-34.48,5.64,10.12,18.27,29.63,41.99,45.34,23.61,15.63,46.4,19.67,57.9,20.93-6.41,1.48-14.13,2.62-22.87,2.6-23.51-.03-41.67-8.36-51.64-14,8.02,9.49,21.04,22.6,40.13,33.69,14.6,8.48,28.24,13.17,38.65,15.86-4.31,1.64-9.74,3.15-16.1,3.72-18.09,1.61-32.18-5.49-38.4-9.17,6.82,8.07,17.07,18.41,31.46,27.75,10.85,7.04,21.12,11.61,29.48,14.62-3.65,1.16-8.12,2.17-13.25,2.48-14.71.89-26.17-4.48-31.83-7.68,5.49,8.3,17.27,23.2,37.16,29.98,3.91,1.33,7.68,2.2,11.2,2.73"/>
|
||||
</clipPath>
|
||||
<clipPath id="clippath-1">
|
||||
<path class="cls-9" d="m357.86,36.48c-3.83,12.38-7.82,30.95-5.23,52.83,1.84,15.53,6.17,25.77,8.37,32.3,6.36,18.9,9.05,48.9-9.42,96.51-13.39,7.26-26.79,14.51-40.18,21.77-.76-6.82-2.35-16.97-6.11-28.83-3.27-10.29-5.94-14.51-7.76-20.37-2.96-9.53-4.54-24.24,3.06-45.93,1.02,8.26,3.21,14.35,4.97,18.31,2.64,5.95,6.03,9.15,8.63,16.74,1.41,4.12,2.03,7.66,2.33,9.92,1.58-1.71,3.98-4.69,5.61-8.9,5.91-15.24-5.9-28.41-8.98-46.27-1.6-9.27-1.41-22.94,7.51-41.1-1.47,14.83,1.32,25.22,4.26,32.08,3.33,7.76,7.48,12.45,10.98,23.41,2.38,7.44,3.23,13.91,3.56,18.27,2-2.59,4.64-6.62,6.38-11.99,2.75-8.52,1.31-14.53-2.48-34-4.61-23.65-5.96-32.74-4.4-44.61.21-1.59.46-4.02,1.27-7.18,3.85-15.02,11.71-26.05,17.65-32.95Z"/>
|
||||
</clipPath>
|
||||
<linearGradient id="linear-gradient" x1="268.88" y1="386.34" x2="283.69" y2="386.34" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0" stop-color="#000"/>
|
||||
<stop offset="1" stop-color="#000"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="linear-gradient-2" x1="287.9" y1="375.66" x2="304.37" y2="375.66" xlink:href="#linear-gradient"/>
|
||||
<linearGradient id="linear-gradient-3" x1="268.98" y1="393.87" x2="313.02" y2="393.87" xlink:href="#linear-gradient"/>
|
||||
</defs>
|
||||
<g id="Layer_1-2" data-name="Layer 1">
|
||||
<g>
|
||||
<g class="cls-15">
|
||||
<g>
|
||||
<ellipse class="cls-11" cx="227.21" cy="287.64" rx="167.4" ry="77.79" transform="translate(-56.17 55.13) rotate(-12.33)"/>
|
||||
<path class="cls-1" d="m354.43,167.55c6.99,35.51-67.81,92.56-136.54,95.53-17.09.74-17.95-2.55-61.92-8.64-94.28-13.06-122.42-2.73-128.62-15.42-9.38-19.19,56.45-91.96,146.94-111.73,76.91-16.81,172.92,3.53,180.15,40.26Z"/>
|
||||
<path class="cls-12" d="m337.67,94.75c1.22,12.05-13.76,14.9-65.79,63.92-40.48,38.14-42.7,47.05-61.28,52.98-22.89,7.3-36.62-.78-91.72-15.39-85.29-22.61-103.83-16.89-108.29-30.04C.98,137.94,73.66,72.89,157.53,54.49c84.57-18.55,177.19,11.07,180.15,40.26Z"/>
|
||||
<path class="cls-4" d="m327.83,45.82c.9,16.43-34.14,17.8-65.3,61.01-27.45,38.08-15.85,58.66-37.44,73.44-14.79,10.13-31.85,8.42-145.44-28.08C11.15,130.18,3.22,126.27.75,117.29-8.33,84.38,66.87,23,147.68,5.56c87.18-18.81,178.72,13.99,180.15,40.26Z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g class="cls-6">
|
||||
<g>
|
||||
<ellipse class="cls-1" cx="290.17" cy="178.71" rx="167.4" ry="77.79" transform="translate(-31.46 66.06) rotate(-12.33)"/>
|
||||
<path class="cls-11" d="m483.71,246.33c6.16,46.65-77.97,96.66-146.94,111.73-90.32,19.74-170.98,1.71-180.15-40.26-6.6-30.21,59.19-64.87,146.94-111.73,32.11-17.15,48.95-23.4,69.92-23.91,48.33-1.18,105.51,28.42,110.23,64.17Z"/>
|
||||
<path class="cls-12" d="m413.75,76.82c.88,8.85-6.55,14.86-38.83,41.98-95.16,79.97-93.16,80.38-101.76,84-70.46,29.68-179.32-8.41-186.5-54.51-6.75-43.37,76.07-96.53,146.94-111.73,82.85-17.77,177.17,10.38,180.15,40.26Z"/>
|
||||
<path class="cls-4" d="m400,50.06c-.01,5.23-5.62,6.9-22.68,29.86-9.98,13.43-15.61,23.03-18.34,27.27-12.89,20.03-54.43,65.83-96.38,82.17-72.52,28.25-183.99-16.79-189.69-67.83-5.23-46.94,79.17-97.42,146.94-111.73,89.76-18.96,180.2,19.23,180.15,40.26Z"/>
|
||||
</g>
|
||||
</g>
|
||||
<path class="cls-17" d="m311.4,239.89c0,1.34-.06,3.35-.27,5.78-.61,6.93-2.12,12.06-3,15-5.05,16.86-7.57,25.29-9.24,29.4-8.68,21.31-26.85,39.38-39.61,51.89-12.6,12.35-30.87,28.2-55.49,43.57l-4.44.41c-11.98,16.33-23.96,32.65-35.94,48.97-2.88,1.6-5.76,3.2-8.64,4.8,18.15-21.67,29.13-40.12,35.86-53.17,4.42-8.57,11.41-23.36,24-42.96,4.75-7.39,8.79-13.14,11-16.26,10.43-14.78,17.15-24.27,27.06-34.49,4.43-4.56,12.89-12.78,18.34-17.89.6-.56,1.8-1.68,3.76-3.53,7.29-6.85,8.62-8.17,11.03-10.39,4.23-3.9,7.45-6.58,11.37-9.85,3.91-3.25,8.67-7.09,14.21-11.28Z"/>
|
||||
<path class="cls-13" d="m203.79,385.53c7.63-4.77,17.18-11.19,27.69-19.44,19.05-14.95,31.58-28.32,34.68-31.66,9.56-10.33,21.21-24.49,32.51-42.78-.36,1.86-3.26,18.24,8.62,31.6,11.6,13.03,27.67,12.39,29.67,12.27-9.99,8.22-22.35,16.91-37.24,24.73-37.49,19.69-73.05,24.38-95.93,25.29Z"/>
|
||||
<path class="cls-18" d="m402.98,282.1c2.27-1.04,6-3.11,9.44-6.97,2.93-3.28,4.51-6.58,5.36-8.78.33-7.5.2-27.92-13.42-40.77-19.36-18.27-60.49-16.06-92.97,14.31-4.47,17.97-8.94,35.94-13.4,53.92-.36,2.45-2.1,16.03,7.25,27.94,11.64,14.84,30.11,13.87,31.71,13.76,11.2-10.91,17.72-21.2,21.66-28.85,4.02-7.79,4.71-11.59,8.74-15.84,8.97-9.45,23.88-9.96,35.62-8.72Z"/>
|
||||
<g>
|
||||
<path class="cls-14" d="m417.86,264.27c-5.99,1.04-11.99,2.08-17.98,3.12-8.69,0-25.87-.87-28.93-8.82-1.6-4.15.11-11.62-1.98-16.77-.18-.44-1.07-2.55-.4-4.78.16-.54.49-1.57,1.4-1.97,1-.44,2.22.1,2.9.69,1.22,1.05.81,2.26,1.56,2.86,1.68,1.34,8.04-1.25,8.71-5,.72-4.07-5.47-8.43-10.07-10.04-1.26-.44-3.77-.7-8.74-1.22-6.26-.65-9.4-1.07-10.73-.93-.16.02-.3.03-.44.05-1.49.2-2.56.42-2.88.48-2.63.52-4.95.15-4.95.15-.38-.04-.84-.12-1.35-.3-1.16-.42-1.91-1.15-2.29-1.59,1.54-.63,3.82-1.52,6.62-2.44,11.95-3.91,25.14-8.22,39.06-3.42,9.13,3.15,16,9.33,19.68,13.85,1.79,2.19,3.18,4.43,3.37,4.73,3.59,5.81,4.92,10.95,5.74,14.12,1.79,7,1.93,13.06,1.71,17.22Z"/>
|
||||
<path class="cls-14" d="m372.89,286.46c1.28-3.15,3.24-7,6.31-10.92,6.75-8.6,15.04-12.64,19.56-14.43l5.1,7.48c2.04,5.7,1.91,11.31-.89,13.51-3.01,2.38-10.22.91-12.52.46-.52-.1-1.88-.41-3.72-.39-1.62.02-2.99.28-4.51.68-3.78,1.01-7.23,2.56-9.33,3.6Z"/>
|
||||
</g>
|
||||
<g>
|
||||
<circle class="cls-16" cx="385.54" cy="247.87" r="7.95"/>
|
||||
<circle class="cls-3" cx="387.05" cy="245.08" r="2.79"/>
|
||||
</g>
|
||||
<path class="cls-5" d="m426.99,293.81c.88-2.4,2.22-7.14,1.25-12.95-1.64-9.81-8.66-15.31-10.38-16.59-1.51,3.49-3.02,6.97-4.54,10.46-3.89,2.17-7.77,4.35-11.66,6.52,8.44,4.19,16.88,8.37,25.33,12.56Z"/>
|
||||
<g>
|
||||
<path class="cls-5" d="m417.86,264.27c3.09,4.69,6.52,10.91,9.19,18.6,1.51,4.35,2.51,8.41,3.19,12.04-1.07-.34-2.38-.8-3.86-1.43,0,0-1.62-.69-3.2-1.52-3.71-1.94-7.24-4.8-9.36-6.21-2.26-1.5-5.74-3.24-10.95-4.02-.48-1.16-.93-2.54-1.22-4.12-.64-3.57-.19-6.73.45-9.09.27-1,.58-1.85.85-2.53,1.77-.38,3.66-.72,5.66-1,3.33-.46,6.43-.67,9.25-.73Z"/>
|
||||
<path class="cls-2" d="m402.95,266c-.18.49-.36.98-.53,1.47,3.49,2.64,7.32,5.87,11.23,9.79,4.24,4.25,7.69,8.41,10.46,12.15,1.18,1.21,2.36,2.42,3.54,3.63-3.27-4.91-7.48-10.45-12.84-16.11-4.09-4.32-8.13-7.93-11.86-10.94Z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="cls-10" d="m270.73,372.87l11.11,26.94"/>
|
||||
<path class="cls-7" d="m289.62,364.79c4.34,7.25,8.69,14.5,13.03,21.75"/>
|
||||
<line class="cls-8" x1="269.93" y1="405.27" x2="312.07" y2="382.47"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 9.5 KiB |
@@ -0,0 +1,65 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" viewBox="0 0 240 240" id="svg2" version="1.1" inkscape:version="0.91 r13725" sodipodi:docname="icon.svg" inkscape:export-filename="/usr/src/G1/yaxim/asset-graphics/yak-grass.png" inkscape:export-xdpi="100.07505" inkscape:export-ydpi="100.07505">
|
||||
<defs id="defs4">
|
||||
<linearGradient inkscape:collect="always" id="hair-3">
|
||||
<stop style="stop-color:#803300;stop-opacity:1;" offset="0" id="stop4211"/>
|
||||
<stop style="stop-color:#632800;stop-opacity:1" offset="1" id="stop4213"/>
|
||||
</linearGradient>
|
||||
<linearGradient inkscape:collect="always" id="face-4">
|
||||
<stop style="stop-color:#7d5d5d;stop-opacity:1" offset="0" id="stop4187"/>
|
||||
<stop style="stop-color:#653a3a;stop-opacity:1" offset="1" id="stop4189"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="horn-6-7" inkscape:collect="always">
|
||||
<stop id="stop4173" offset="0" style="stop-color:#c8b7b7;stop-opacity:1;"/>
|
||||
<stop id="stop4175" offset="1" style="stop-color:#916f6f;stop-opacity:1"/>
|
||||
</linearGradient>
|
||||
<linearGradient inkscape:collect="always" xlink:href="#horn-6-7" id="linearGradient4169" x1="163.93039" y1="136.61838" x2="221.33586" y2="103.28334" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.43084117,0,0,0.43178741,-32.504638,816.95133)"/>
|
||||
<linearGradient inkscape:collect="always" xlink:href="#horn-6-7" id="linearGradient4183" x1="485.88913" y1="130.25711" x2="531.94739" y2="162.58197" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.43084117,0,0,0.43178741,-32.504638,816.95133)"/>
|
||||
<linearGradient inkscape:collect="always" xlink:href="#face-4" id="linearGradient4191" x1="374.63556" y1="428.83673" x2="371.53345" y2="297.51688" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.43084117,0,0,0.43178741,-32.504638,816.95133)"/>
|
||||
<linearGradient inkscape:collect="always" xlink:href="#face-4" id="linearGradient4199" x1="476.2699" y1="351.55411" x2="494.49133" y2="344.48303" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.43084117,0,0,0.43178741,-32.504638,816.95133)"/>
|
||||
<linearGradient inkscape:collect="always" xlink:href="#face-4" id="linearGradient4207" x1="267.55359" y1="363.70987" x2="243.70245" y2="356.63879" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.43084117,0,0,0.43178741,-32.504638,816.95133)"/>
|
||||
<radialGradient inkscape:collect="always" xlink:href="#hair-3" id="radialGradient4217" cx="374.30594" cy="290.83109" fx="374.30594" fy="290.83109" r="110.27738" gradientTransform="matrix(0.51642294,-0.00883784,0.00347391,0.20388409,-65.930166,877.32132)" gradientUnits="userSpaceOnUse"/>
|
||||
</defs>
|
||||
<sodipodi:namedview id="base" pagecolor="#494745" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:zoom="2.8284271" inkscape:cx="28.129339" inkscape:cy="114.93147" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="true" inkscape:window-width="1920" inkscape:window-height="1029" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" units="px" showguides="false">
|
||||
<inkscape:grid type="xygrid" id="grid5353" originx="20" originy="20" spacingx="10" spacingy="10"/>
|
||||
</sodipodi:namedview>
|
||||
<metadata id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
||||
<dc:title/>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" transform="translate(0,-812.36216)">
|
||||
<path style="fill:#99cc33;fill-opacity:1;stroke:#669900;stroke-width:4.86499977;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="m 53.269531,845.17578 c -10.266673,0.27991 -19.576776,9.05841 -20.373047,19.375 -0.26138,20.53097 -0.03593,41.07704 -0.111328,61.61377 0.05527,24.53746 -0.11011,49.08127 0.0819,73.61482 0.621828,10.71753 10.383803,19.87393 21.128864,19.78623 44.355126,-0.013 88.714509,0.078 133.067589,-0.045 10.73105,-0.4371 20.03681,-10.06 20.13139,-20.79981 0.009,-44.47334 0.0809,-88.95148 -0.0357,-133.42297 -0.42153,-10.46516 -9.65497,-19.63915 -20.03422,-20.0919 -44.6149,-0.11601 -89.238883,-0.0556 -133.855489,-0.0301 z" id="rect3450-3" inkscape:connector-curvature="0"/>
|
||||
<path style="fill:#669900;fill-opacity:1;fill-rule:evenodd;stroke:#669900;stroke-width:1.19520223px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="m 38.515721,918.34836 c 10.153917,-33.55991 1.580157,-9.90509 18.878429,16.61745 2.012347,-8.48401 0.912034,-11.20893 3.728838,-27.27196 2.379487,10.84674 6.650859,27.91872 13.044822,34.69493 6.400509,-4.36969 11.61382,-12.34846 17.248541,-18.62057 3.295109,-4.28321 10.061749,-18.57227 9.496769,-4.33479 0.82159,6.10771 2.27229,20.6289 6.22927,19.60063 4.72677,-11.44421 3.29557,-46.95893 10.61584,-55.94089 2.59523,29.15561 12.24177,39.269 21.03786,5.12515 1.20391,14.14385 7.17312,22.32945 11.5106,32.74898 1.02162,3.02994 3.98033,14.80846 3.30568,5.2513 3.112,-14.57771 5.72674,13.26446 10.19135,8.38642 3.23087,-9.85848 3.38164,-13.10423 7.14522,-22.69087 4.36856,-26.44247 -1.00942,-3.47087 12.66614,20.55863 9.83166,-23.16191 6.30039,-52.63407 11.75854,6.50228 2.73098,-8.50802 4.24473,-23.67634 5.87972,-27.20895 3.0054,10.94164 6.25616,17.73384 5.94973,30.15986 0.55323,12.4288 -0.0479,24.91693 0.44471,37.3202 -1.65107,12.07059 -1.53944,26.25464 -9.9972,32.92814 -7.39708,9.6221 -17.81944,4.4354 -26.71442,6.6529 -12.35655,3.5218 -25.10876,1.3684 -37.6455,1.9068 -14.93086,0.8338 -29.80367,-2.4911 -44.743153,-1.5038 -14.698821,-0.2743 -29.669186,1.7255 -44.010515,-3.8641 -8.413667,-6.1703 -11.741297,-21.52304 -12.078954,-34.33751 -2.350132,-29.67846 0.341394,-36.69079 6.057683,-62.68023 z" id="path4197" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccccccccccccccccccccccc"/>
|
||||
<path style="fill:#4c7800;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="m 38.183767,974.46578 c 1.125388,-3.25592 3.691308,-13.922 4.520832,-5.10924 3.528397,6.00636 1.465648,13.15556 2.587646,19.71831 3.229295,-0.37355 5.346597,-9.99777 6.32655,-14.43519 1.85021,7.02583 3.854887,14.1364 8.724737,19.79695 2.497566,-3.42027 2.926958,-9.49874 5.154944,-13.80332 1.075234,-3.49721 4.319041,-6.99851 5.090463,-1.32089 2.409525,7.63579 3.680854,16.14546 9.170615,22.3859 6.365047,0.6367 7.544458,-9.3862 10.056699,-13.84277 4.197301,-10.36624 11.092337,-19.38831 15.597357,-29.58218 4.83312,-5.07432 4.81333,6.60783 7.08119,9.34229 3.58646,9.94509 6.22094,20.35999 11.03628,29.7711 5.30954,6.17606 6.01006,-8.29794 9.88477,-10.69399 3.51571,1.7617 3.40407,12.27625 7.25147,10.95891 2.58805,-6.44985 4.92169,-12.96839 6.43875,-19.74445 2.51003,-2.80506 2.90985,12.35197 8.78685,7.29604 2.58121,-5.29019 4.70103,-11.80212 10.21325,-14.79395 6.14772,1.22743 2.97818,10.85611 7.03881,15.00086 3.33086,9.11976 6.63837,-3.03364 9.63101,-5.88045 1.61196,-3.07383 3.85618,-7.28598 4.22063,-1.64528 1.11168,3.26036 0.84743,13.56286 5.19729,11.20021 2.8324,-5.41483 2.92539,-10.20999 9.34521,-19.35545 5.06547,12.33161 8.87029,26.05954 2.96798,37.76131 -1.26925,9.0966 -11.14031,10.2574 -18.41187,12.2102 -8.52172,1.09 -17.24804,0.2031 -25.85201,0.504 -14.29863,0.067 -28.57511,-0.1857 -42.86349,0.3377 -6.03701,-0.6015 -12.10213,-0.5491 -18.114569,-0.3437 -7.030939,-0.8427 -14.137698,0.8658 -21.114055,-0.7193 -6.148516,-0.2699 -12.455199,-2.2202 -18.425624,0.2232 -18.523823,2.33 -29.725482,-7.2061 -29.01334,-23.34892 -0.793226,-3.96804 5.573212,-17.68678 7.471625,-21.8879 z" id="path4174" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccccccccccccccccccccccccccccc"/>
|
||||
<rect ry="21.962282" rx="21.962288" y="844.79456" x="32.43243" height="175.13513" width="175.13513" id="rect3450" style="fill:none;fill-opacity:1;stroke:#669900;stroke-width:4.865;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/>
|
||||
<g id="g4262" transform="translate(-4.8361402,0)">
|
||||
<path sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" inkscape:connector-curvature="0" id="path4272" d="m 126.58306,1042.1389 c -7.09035,0.1774 -13.66992,-2.7851 -18.75841,-7.5104 -5.88417,-4.2836 -9.381015,-10.8254 -12.749868,-17.1103 -4.208493,-8.5784 -9.094199,-16.9566 -10.92662,-26.51907 -1.803917,-5.76691 0.331622,-4.9829 -6.286858,-6.52366 -2.3545,-0.6022 -2.933021,-0.65562 -5.127509,-1.49781 -3.307555,-1.66113 -6.82072,-4.90316 -6.026895,-9.14553 0.08147,-3.34016 2.748025,-9.29511 3.97469,-12.04361 0.91534,-1.65692 3.058877,-3.12108 2.201741,-5.09228 0.528801,-4.64531 1.345241,-9.54102 3.378281,-13.64115 1.236436,-2.65573 3.147097,-5.53074 4.609704,-8.02095 -2.195938,-0.96604 -5.210293,2.93179 -6.487379,0.82212 -0.05406,-2.05336 1.505113,-4.40962 2.594297,-6.2735 1.73941,-2.94874 7.683875,-3.44611 1.047935,-5.04802 -5.486425,-2.00028 -9.771628,-5.95319 -14.096424,-9.8264 -2.303704,-3.44345 -6.15485,-5.84069 -8.525329,-9.37725 -2.884844,-3.50736 -6.066033,-7.57438 -7.448098,-11.71551 -2.096051,-4.05535 -4.085075,-8.10164 -6.226413,-12.065 -2.121078,-4.13334 -3.183825,-8.15761 -3.862042,-12.64611 -0.06224,-2.65508 -0.532585,-6.54839 -0.815643,-8.27126 0.146292,-4.44179 0.668419,-9.14264 1.83774,-13.69518 0.496324,-2.98753 1.323428,-6.24528 1.353207,-8.70666 0.302197,-6.21234 4.301217,-11.87896 9.239082,-15.46794 0.379912,5.04446 0.214517,10.87118 0.867348,15.306 0.285403,3.27095 1.176012,5.65808 2.405197,8.49605 1.690048,2.85054 3.807757,6.79173 5.929922,10.01148 3.585485,4.56445 7.808228,9.47947 11.02808,14.55661 1.598335,2.04308 3.157992,4.77727 5.234862,6.7205 1.494321,2.05329 3.399273,3.43578 4.942179,4.93772 2.983537,3.21707 6.504731,5.61338 9.541551,8.54921 1.606526,1.5923 3.269674,2.74249 4.456728,3.85064 2.857588,2.65316 4.760789,3.96737 9.665604,8.18004 1.89317,1.33926 3.9661,3.22774 4.83934,2.24536 4.5159,-1.78631 10.39091,-1.34346 15.34674,0.41505 1.55667,0.69093 3.27329,2.71745 4.68732,2.1484 3.76411,-3.51423 9.3342,-4.94278 14.37801,-4.82612 3.05916,0.33108 3.99723,-3.05457 6.18447,-4.5005 5.01848,-6.46319 11.4081,-11.62361 17.09092,-17.33168 1.36158,-2.02375 4.40218,-5.33511 6.04822,-7.83666 1.81188,-2.27416 3.88026,-6.43952 5.52961,-8.21422 3.55278,-5.41595 7.22461,-11.1506 9.7389,-16.74806 2.53507,-6.56673 5.91343,-12.68945 7.94775,-18.97709 0.5899,-1.78877 1.77538,-3.52089 2.06935,-5.44175 1.69184,-2.13109 3.95725,1.31247 4.91473,2.71372 3.44757,6.2125 4.5866,12.96437 6.71963,19.50302 2.04198,8.06207 0.6828,16.88473 -1.69602,24.90312 -1.00747,6.46671 -3.55283,13.37555 -5.51135,19.26871 -0.26761,1.80626 -2.05447,4.9708 -3.18281,6.58997 -2.77196,5.62244 -6.87337,10.26188 -10.77642,15.01436 -3.91191,4.20367 -8.16947,8.32363 -13.11539,10.98009 -1.3679,0.0317 -4.20256,1.85775 -1.70564,3.43976 1.08194,1.47816 3.06663,4.95188 -0.13991,4.60357 -3.22443,-0.54393 -6.79533,-0.15054 -2.64276,2.96154 3.23213,3.91664 3.4291,10.06727 2.59427,14.83218 1.43984,0.7415 4.8641,1.57501 5.2188,4.62545 2.63582,6.29969 7.64664,11.96238 9.0529,18.41008 0.17894,2.944 -1.38965,4.87826 -2.79168,6.78295 -2.79418,2.67527 -7.15063,3.8727 -11.17285,2.61969 -2.78489,-1.28268 -1.52093,3.80886 -2.36034,5.22389 -1.20787,6.5517 -3.81355,12.30606 -7.1399,17.90839 -2.94235,6.1633 -6.02787,12.0681 -9.82112,17.7466 -2.21619,2.6131 -4.44333,5.2258 -6.85245,7.6824 -7.05077,7.3235 -11.24756,12.073 -20.42298,12.025 z" style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.43099999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/>
|
||||
<path sodipodi:nodetypes="ccccccccccccccc" inkscape:connector-curvature="0" id="path4270" d="m 124.94764,1039.4395 c 0.45196,-5.4315 2.23538,-13.306 -4.43943,-14.0383 -2.36257,-1.1866 -2.18981,-4.3763 0.35274,-5.2857 3.61766,-2.0579 7.58221,-3.6452 11.57249,-1.6342 3.6779,1.8919 2.40163,7.901 -1.82318,7.5412 -3.54555,-0.4379 -2.81783,2.8858 -2.88188,4.5135 0.0932,3.4069 0.46995,10.8351 5.66537,7.4806 4.83252,-2.1883 8.82018,-6.011 12.19586,-10.561 3.25582,-3.3427 6.73813,-7.1379 9.41477,-11.5532 2.40167,-3.1021 -2.18401,-4.8065 -2.18401,-4.8065 -11.22713,-6.5688 -24.74797,-9.3533 -37.52649,-6.6627 -4.89674,1.8141 -9.9689,3.4359 -14.59616,5.7852 -3.735505,1.4671 -5.812815,3.9107 -2.377214,7.6579 3.544274,6.2296 7.527934,12.4324 13.657084,16.4724 3.59928,2.9931 8.22809,5.2943 12.97005,5.0908 z" style="fill:#ffccaa;fill-opacity:1;stroke:#000000;stroke-width:0.43131402;stroke-opacity:1"/>
|
||||
<path inkscape:connector-curvature="0" id="path4268" d="m 127.77864,1028.5536 c -0.33143,-0.8631 -0.24671,0.764 0,0 z" style="fill:#ff8080;fill-opacity:1;stroke:#000000;stroke-width:0.43131402;stroke-opacity:1"/>
|
||||
<path inkscape:connector-curvature="0" id="path4266" d="m 95.110116,1009.9642 c 6.192304,-5.004 14.119014,-7.0315 21.552834,-9.4869 9.08852,-1.25252 18.93599,-0.63338 27.72462,2.8106 4.74516,1.6946 9.05975,4.2725 13.38615,6.7895 3.13085,-6.5983 7.19946,-12.69759 9.14372,-19.6641 1.67898,-9.12788 2.87027,-18.79835 3.24203,-27.77863 1.53706,-4.32197 -3.75501,-3.65998 -3.47044,-7.73059 -1.44979,-6.71739 -7.96946,-10.61799 -12.6846,-15.02827 -1.55845,-1.15439 -4.14997,-4.49449 -5.25038,-1.18211 -2.40033,3.80647 -3.79028,7.11535 -6.00666,11.28136 -1.30501,1.78827 -1.81869,3.89215 -3.05086,5.17836 -0.5988,2.77893 -4.94597,3.73813 -5.68516,0.5474 -2.49235,-3.2659 -5.10802,-6.44695 -7.22391,-10.03014 -1.90244,-2.6233 -4.22002,-4.87591 -5.57647,-7.80881 -3.00792,5.05715 -6.55362,9.70305 -9.49124,14.75691 -0.60225,1.41966 -5.62843,5.42602 -1.34103,4.74166 3.66716,0.75186 6.89516,3.76168 8.67136,6.9249 0.81715,2.15796 2.76089,5.04151 1.42371,8.05265 -1.46661,4.72243 -3.65888,9.56592 -8.52601,11.30075 -1.60292,0.77239 -4.76075,0.47482 -6.73336,-0.58595 -5.260678,-3.75463 -6.028115,-11.55234 -5.243684,-16.73457 1.044694,-3.26092 2.599224,-6.24966 5.441354,-8.22714 1.20609,-0.66012 -1.40213,-2.00638 -1.9847,-2.89876 -3.18084,-1.26913 -7.97928,-13.18968 -9.545105,-6.40156 -0.916812,3.77918 -1.658102,8.16512 -1.785957,11.76495 1.056162,2.38327 -2.268368,4.18328 -3.999083,-0.0136 -1.211268,-4.84004 -5.132394,-12.13358 -3.989331,-2.39447 -1.400776,8.53844 -1.840117,17.37535 0.774106,25.67913 1.079416,3.56658 1.605863,7.08664 3.054079,10.30129 1.777301,5.55088 3.68378,11.15954 6.85241,16.05254 l 0.32238,-0.2167 -8.61e-4,3e-4 z" style="fill:url(#linearGradient4191);fill-opacity:1;stroke:#000000;stroke-width:0.43131402;stroke-opacity:1"/>
|
||||
<path inkscape:connector-curvature="0" id="path4264" d="m 144.75917,985.10612 c -5.00323,-0.74681 -5.72318,-6.80041 -7.3575,-10.81229 -1.24824,-5.51939 -2.30247,-12.69374 3.16981,-16.22504 4.08828,-3.257 10.85078,-3.87544 14.41456,0.61584 2.91703,4.09468 3.1902,10.22 2.49912,15.16856 -1.43353,5.62842 -6.08105,11.95636 -12.72599,11.25293 z" style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.43131402;stroke-opacity:1"/>
|
||||
<path inkscape:connector-curvature="0" id="path4262" d="m 146.49725,982.37512 c 7.49728,-2.18714 9.9371,-11.63828 7.74831,-18.50959 -0.39137,-4.62761 -5.17127,-7.51551 -9.27625,-5.40849 -4.20824,1.23546 -6.89632,6.00195 -5.81471,10.41253 0.63271,4.5578 1.74702,9.53483 4.7217,13.0716 0.74176,0.51785 1.77674,0.67856 2.62095,0.43395 z" style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.43131402;stroke-opacity:1"/>
|
||||
<path sodipodi:nodetypes="ccc" inkscape:connector-curvature="0" id="path4260" d="m 148.64583,963.35949 c 5.70461,2.5998 3.15538,13.82318 0.29976,15.25607 -6.93873,3.76236 -6.10181,-15.13758 -0.29976,-15.25607 z" style="fill:#2b1100;fill-opacity:1;stroke:none;stroke-width:0.43131402;stroke-opacity:1"/>
|
||||
<path inkscape:connector-curvature="0" id="path4258" d="m 145.85926,972.31023 c 4.59816,-4.00808 -4.89135,-2.59786 0,0 z" style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.43131402;stroke-opacity:1"/>
|
||||
<path inkscape:connector-curvature="0" id="path4256" d="m 81.053927,982.22661 c 0.561925,-2.45753 -0.06169,-6.15944 -0.137593,-8.63166 -1.094328,-4.78181 0.299555,-9.22834 -0.122532,-14.11748 0.161803,-2.50547 0.891665,-4.76478 1.021637,-7.25404 -3.121039,4.12073 -7.144058,8.16819 -9.543605,13.01839 -0.87811,3.60041 -2.021231,6.12013 -2.776901,9.66665 -0.162836,5.82203 6.924755,7.75301 11.558994,7.31814 z" style="fill:url(#linearGradient4207);fill-opacity:1;stroke:#000000;stroke-width:0.43131402;stroke-opacity:1"/>
|
||||
<path inkscape:connector-curvature="0" id="path4254" d="m 108.90781,981.26062 c 1.92403,-0.0999 3.36222,-0.88527 5.10546,-2.74132 3.47829,-3.71814 4.96745,-9.54241 2.11005,-13.86037 -1.66599,-4.28446 -8.7801,-6.84792 -11.25498,-1.94187 -3.51007,5.32384 -3.07282,13.3211 1.21849,18.09334 l 1.52844,0.51677 1.29252,-0.0666 z" style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.43131402;stroke-opacity:1"/>
|
||||
<path inkscape:connector-curvature="0" id="path4252" d="m 108.8755,978.71903 c -6.60916,-2.24108 -2.27162,-19.00122 4.29366,-13.12054 2.50053,3.91366 2.75349,14.36784 -4.29366,13.12054 z" style="fill:#2b1100;fill-opacity:1;stroke:none;stroke-width:0.43131402;stroke-opacity:1"/>
|
||||
<path inkscape:connector-curvature="0" id="path4250" d="m 108.47887,974.48353 c 4.49073,-4.73386 -5.62263,-2.69987 0,0 z" style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.43131402;stroke-opacity:1"/>
|
||||
<path inkscape:connector-curvature="0" id="path4248" d="m 176.60372,979.50001 c 5.4633,-0.0564 9.99716,-6.9663 6.29891,-11.66927 -2.65752,-5.03255 -5.58145,-10.36989 -8.44524,-15.06528 -4.38273,0.14275 -0.35238,6.60365 -1.17551,9.59416 -0.0721,5.26761 -1.07664,10.66993 -1.24098,16.24966 1.37488,0.72275 3.19541,0.52242 4.56282,0.89073 z" style="fill:url(#linearGradient4199);fill-opacity:1;stroke:#000000;stroke-width:0.43131402;stroke-opacity:1"/>
|
||||
<path inkscape:connector-curvature="0" id="path4246" d="m 89.731453,956.60697 c 0.173568,-5.32519 -0.180447,-12.28655 5.590404,-15.12102 3.150277,4.44276 6.829553,8.58454 10.641823,12.51176 1.78954,-0.74636 1.51349,-0.69393 2.26558,-2.042 3.43702,-5.55328 7.52336,-10.67604 10.35257,-16.57298 3.69459,-3.67658 6.25146,1.55308 7.91672,4.53411 3.388,3.53988 5.66824,8.0974 8.45311,11.82223 1.24654,2.14342 2.68433,1.81345 3.26416,-0.6616 2.25969,-3.77661 3.65235,-7.0567 5.58798,-10.58719 1.59373,-2.35421 3.20008,-8.23864 6.75011,-6.10697 6.559,3.57532 11.6129,9.23252 16.74379,14.60182 1.62457,4.57232 3.12993,-0.021 2.91127,-2.8438 0.95345,-5.01345 -0.92851,-9.47647 -4.50774,-13.06986 -1.39257,-1.62992 -5.63419,-4.54815 -2.31103,-6.30336 1.2542,1.08333 6.39428,3.0371 6.33144,0.26069 -3.04194,-4.9365 -7.15441,-9.72873 -12.75704,-11.84722 -4.15491,-2.52854 -14.9926,-0.15831 -16.21165,-2.76621 2.66453,-2.53008 7.20354,-4.15112 9.82517,-5.49947 -6.38683,-0.74863 -13.1544,-1.07072 -18.77168,2.71324 -3.12054,3.87803 -6.69441,0.41676 -10.15969,-0.76382 -6.5254,-1.4538 -13.70751,-1.06917 -19.3361,3.10596 -2.653329,2.48141 12.14927,4.1582 3.87421,6.51493 -6.03041,2.69933 -12.782689,3.78789 -17.92203,7.95704 -3.678534,2.50206 -9.002231,2.69938 -11.516492,6.77552 2.305328,0.54308 12.505332,-2.07178 6.860956,3.89175 -2.831323,5.15423 -7.162303,10.01721 -7.691565,16.00843 4.312504,-4.6541 11.665769,-10.9461 11.934718,0.74294 -0.03555,0.94448 0.609548,3.29376 1.881006,2.74508 z" style="fill:url(#radialGradient4217);fill-opacity:1;stroke:#000000;stroke-width:0.43131402;stroke-opacity:1"/>
|
||||
<path inkscape:connector-curvature="0" id="path4242" d="m 86.145969,923.85117 c 4.587176,-3.61061 10.154469,-5.93937 15.853441,-6.68536 -1.53265,-1.9481 -12.18342,-0.70676 -3.956101,-5.25409 1.536719,-1.6878 8.365841,-3.87014 5.046641,-5.70064 -4.789838,-3.50948 -9.025174,-8.27479 -14.230512,-11.85683 -3.045864,-2.47926 -5.577902,-5.43696 -8.580939,-7.64059 -0.572717,1.68718 -1.717362,1.45856 -3.152146,3.13608 -1.628709,1.50462 -4.094887,3.57826 -5.733969,3.78124 -2.408785,-1.53229 -0.5903,-3.93488 1.734893,-4.71833 1.722184,-0.81617 3.098347,-2.50094 3.926406,-3.56869 2.085069,-0.62836 -0.840701,-2.62968 -1.788628,-3.61902 -0.804505,-1.19274 -2.714621,-2.21899 -2.372178,-3.07321 -2.251751,-0.82342 -3.142816,-3.71537 -4.765386,-5.31631 -4.036603,-5.53463 -7.522991,-11.09371 -12.125029,-16.01425 -2.306047,0.69273 -3.96513,2.78847 -6.60286,2.17672 -2.497742,0.26259 -4.396942,-5.17935 -0.778906,-3.24898 2.145206,0.19025 6.888711,-1.44907 4.292002,-4.09223 -1.298724,-2.40367 -3.449949,-6.20431 -4.204114,-7.77215 -1.964442,-2.47961 -0.393332,-8.17203 -0.909231,-11.5122 0.365733,-8.32558 -2.299744,-1.45835 -3.420584,1.47812 -1.561137,6.63686 -1.820903,13.26144 -3.671306,19.85281 -0.403021,6.52554 -0.243852,12.32979 1.15104,18.6792 0.819796,3.20877 1.959534,6.37947 3.571534,9.26185 2.901689,0.23343 5.415028,-1.88815 7.559153,-3.88609 1.571984,-2.16599 4.304249,1.54186 2.017856,2.57414 -2.001222,2.21812 -4.954513,5.07688 -7.913833,4.35006 3.365297,6.99412 6.403429,14.19299 11.861699,19.90966 3.409578,3.99881 7.238373,7.53105 10.661436,11.05544 2.123897,0.87931 3.677617,4.50276 6.073495,2.53301 2.127989,-1.58334 13.3692,-8.10752 7.831136,-2.27185 -2.387397,1.82721 -4.572762,3.34597 -6.893467,4.68476 1.774778,1.09113 4.136502,1.85865 6.389633,2.56233 1.198958,-0.66097 2.022411,0.0783 3.128824,0.1954 z" style="fill:url(#linearGradient4169);fill-opacity:1;stroke:#000000;stroke-width:0.43131402;stroke-opacity:1"/>
|
||||
<path inkscape:connector-curvature="0" id="path4240" d="m 170.16763,922.04792 c 4.16178,-1.02835 7.67158,-4.26231 11.00661,-7.07162 4.41106,-4.53441 8.35929,-9.01617 11.86917,-14.50443 1.05207,-1.02203 2.83507,-3.00253 1.80989,-4.10513 -3.24255,0.32116 -6.40267,-2.60384 -6.78757,-5.6632 2.76236,-1.78156 5.37447,5.65599 9.2717,2.49561 2.00989,-4.28631 3.27652,-8.97751 4.8138,-13.1922 1.57418,-5.20838 2.43067,-10.50309 3.8092,-15.47958 0.45775,-2.46254 1.10234,-3.96741 1.10565,-6.94924 0.74471,-3.36167 0.14202,-5.69807 -3.93393,-4.56689 -5.85517,-1.3395 -0.73417,-4.04059 2.95664,-2.87549 1.75194,-1.82696 -0.90112,-5.48718 -1.17947,-8.04915 -0.90657,-2.14667 -1.04157,-4.40977 -1.93894,-6.381 -0.66906,-3.06039 -1.99643,-6.05579 -3.84838,-8.53548 -1.81396,5.14469 -3.99616,10.13578 -6.10508,15.18764 -1.32168,4.53232 -3.81415,8.67942 -5.53444,12.68826 -2.85204,5.36797 -6.04907,9.77903 -9.20999,14.90104 5.11484,0.0256 10.90093,-0.37726 14.67172,-4.20549 2.1993,-0.23438 2.71951,2.16469 1.04341,3.09553 -2.22942,2.40289 -5.129,2.96104 -8.07984,3.91843 -3.68442,1.51983 -8.72364,-2.48989 -10.24859,1.02972 -3.12732,4.63718 -6.28503,8.77715 -10.23307,12.91915 -4.60723,4.39994 -9.8012,8.68205 -13.47735,13.68076 2.9809,2.50887 8.47607,2.87451 12.04683,0.91128 2.94045,4.77113 -12.66012,2.01493 -14.97059,1.80235 4.41884,0.88877 15.86554,9.28826 4.34515,7.36554 -7.84996,1.32913 2.89574,1.19752 5.46354,2.64387 4.4323,2.02212 8.34712,5.55519 11.33393,8.93972 z" style="fill:url(#linearGradient4183);fill-opacity:1;stroke:#000000;stroke-width:0.43131402;stroke-opacity:1"/>
|
||||
<path inkscape:connector-curvature="0" id="path4238" d="m 186.4269,913.81595 c -0.79257,-0.24807 -0.13619,0.26364 0,0 z" style="fill:#ff8080;fill-opacity:1;stroke:#000000;stroke-width:0.43131402;stroke-opacity:1"/>
|
||||
<path inkscape:connector-curvature="0" id="path4236" d="m 207.6889,869.52893 c -0.47547,-0.49648 -0.62037,0.19284 0,0 z" style="fill:#ff8080;fill-opacity:1;stroke:#000000;stroke-width:0.43131402;stroke-opacity:1"/>
|
||||
<path inkscape:connector-curvature="0" id="path4234" d="m 51.535953,858.9088 c -0.109095,-0.29681 -0.559784,0.29265 0,0 z" style="fill:#ff8080;fill-opacity:1;stroke:#000000;stroke-width:0.43131402;stroke-opacity:1"/>
|
||||
<path inkscape:connector-curvature="0" id="path3429" d="m 55.041894,857.36439 c -1.179898,-0.26619 -0.275201,0.27547 0,0 z" style="fill:#ff8080;fill-opacity:1;stroke:#000000;stroke-width:0.43131402;stroke-opacity:1"/>
|
||||
</g>
|
||||
<path style="fill:#000000;stroke:#000000;stroke-opacity:1" d="" id="path3427" inkscape:connector-curvature="0"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 24 KiB |
@@ -0,0 +1,100 @@
|
||||
/*!* Platform.js <https://mths.be/platform>
|
||||
* Copyright 2014-2018 Benjamin Tan <https://bnjmnt4n.now.sh/>
|
||||
* Copyright 2011-2013 John-David Dalton <http://allyoucanleet.com/>
|
||||
* Available under MIT license <https://mths.be/mit>*/;(function(){'use strict';var objectTypes={'function':true,'object':true};var root=(objectTypes[typeof window]&&window)||this;var oldRoot=root;var freeExports=objectTypes[typeof exports]&&exports;var freeModule=objectTypes[typeof module]&&module&&!module.nodeType&&module;var freeGlobal=freeExports&&freeModule&&typeof global=='object'&&global;if(freeGlobal&&(freeGlobal.global===freeGlobal||freeGlobal.window===freeGlobal||freeGlobal.self===freeGlobal)){root=freeGlobal;}
|
||||
var maxSafeInteger=Math.pow(2,53)-1;var reOpera=/\bOpera/;var thisBinding=this;var objectProto=Object.prototype;var hasOwnProperty=objectProto.hasOwnProperty;var toString=objectProto.toString;function capitalize(string){string=String(string);return string.charAt(0).toUpperCase()+string.slice(1);}
|
||||
function cleanupOS(os,pattern,label){var data={'10.0':'10','6.4':'10 Technical Preview','6.3':'8.1','6.2':'8','6.1':'Server 2008 R2 / 7','6.0':'Server 2008 / Vista','5.2':'Server 2003 / XP 64-bit','5.1':'XP','5.01':'2000 SP1','5.0':'2000','4.0':'NT','4.90':'ME'};if(pattern&&label&&/^Win/i.test(os)&&!/^Windows Phone /i.test(os)&&(data=data[/[\d.]+$/.exec(os)])){os='Windows '+data;}
|
||||
os=String(os);if(pattern&&label){os=os.replace(RegExp(pattern,'i'),label);}
|
||||
os=format(os.replace(/ ce$/i,' CE').replace(/\bhpw/i,'web').replace(/\bMacintosh\b/,'Mac OS').replace(/_PowerPC\b/i,' OS').replace(/\b(OS X) [^ \d]+/i,'$1').replace(/\bMac (OS X)\b/,'$1').replace(/\/(\d)/,' $1').replace(/_/g,'.').replace(/(?: BePC|[ .]*fc[ \d.]+)$/i,'').replace(/\bx86\.64\b/gi,'x86_64').replace(/\b(Windows Phone) OS\b/,'$1').replace(/\b(Chrome OS \w+) [\d.]+\b/,'$1').split(' on ')[0]);return os;}
|
||||
function each(object,callback){var index=-1,length=object?object.length:0;if(typeof length=='number'&&length>-1&&length<=maxSafeInteger){while(++index<length){callback(object[index],index,object);}}else{forOwn(object,callback);}}
|
||||
function format(string){string=trim(string);return /^(?:webOS|i(?:OS|P))/.test(string)?string:capitalize(string);}
|
||||
function forOwn(object,callback){for(var key in object){if(hasOwnProperty.call(object,key)){callback(object[key],key,object);}}}
|
||||
function getClassOf(value){return value==null?capitalize(value):toString.call(value).slice(8,-1);}
|
||||
function isHostType(object,property){var type=object!=null?typeof object[property]:'number';return!/^(?:boolean|number|string|undefined)$/.test(type)&&(type=='object'?!!object[property]:true);}
|
||||
function qualify(string){return String(string).replace(/([ -])(?!$)/g,'$1?');}
|
||||
function reduce(array,callback){var accumulator=null;each(array,function(value,index){accumulator=callback(accumulator,value,index,array);});return accumulator;}
|
||||
function trim(string){return String(string).replace(/^ +| +$/g,'');}
|
||||
function parse(ua){var context=root;var isCustomContext=ua&&typeof ua=='object'&&getClassOf(ua)!='String';if(isCustomContext){context=ua;ua=null;}
|
||||
var nav=context.navigator||{};var userAgent=nav.userAgent||'';ua||(ua=userAgent);var isModuleScope=isCustomContext||thisBinding==oldRoot;var likeChrome=isCustomContext?!!nav.likeChrome:/\bChrome\b/.test(ua)&&!/internal|\n/i.test(toString.toString());var objectClass='Object',airRuntimeClass=isCustomContext?objectClass:'ScriptBridgingProxyObject',enviroClass=isCustomContext?objectClass:'Environment',javaClass=(isCustomContext&&context.java)?'JavaPackage':getClassOf(context.java),phantomClass=isCustomContext?objectClass:'RuntimeObject';var java=/\bJava/.test(javaClass)&&context.java;var rhino=java&&getClassOf(context.environment)==enviroClass;var alpha=java?'a':'\u03b1';var beta=java?'b':'\u03b2';var doc=context.document||{};var opera=context.operamini||context.opera;var operaClass=reOpera.test(operaClass=(isCustomContext&&opera)?opera['[[Class]]']:getClassOf(opera))?operaClass:(opera=null);var data;var arch=ua;var description=[];var prerelease=null;var useFeatures=ua==userAgent;var version=useFeatures&&opera&&typeof opera.version=='function'&&opera.version();var isSpecialCasedOS;var layout=getLayout([{'label':'EdgeHTML','pattern':'Edge'},'Trident',{'label':'WebKit','pattern':'AppleWebKit'},'iCab','Presto','NetFront','Tasman','KHTML','Gecko']);var name=getName(['Adobe AIR','Arora','Avant Browser','Breach','Camino','Electron','Epiphany','Fennec','Flock','Galeon','GreenBrowser','iCab','Iceweasel','K-Meleon','Konqueror','Lunascape','Maxthon',{'label':'Microsoft Edge','pattern':'Edge'},'Midori','Nook Browser','PaleMoon','PhantomJS','Raven','Rekonq','RockMelt',{'label':'Samsung Internet','pattern':'SamsungBrowser'},'SeaMonkey',{'label':'Silk','pattern':'(?:Cloud9|Silk-Accelerated)'},'Sleipnir','SlimBrowser',{'label':'SRWare Iron','pattern':'Iron'},'Sunrise','Swiftfox','Waterfox','WebPositive','Opera Mini',{'label':'Opera Mini','pattern':'OPiOS'},'Opera',{'label':'Opera','pattern':'OPR'},'Chrome',{'label':'Chrome Mobile','pattern':'(?:CriOS|CrMo)'},{'label':'Firefox','pattern':'(?:Firefox|Minefield)'},{'label':'Firefox for iOS','pattern':'FxiOS'},{'label':'IE','pattern':'IEMobile'},{'label':'IE','pattern':'MSIE'},'Safari']);var product=getProduct([{'label':'BlackBerry','pattern':'BB10'},'BlackBerry',{'label':'Galaxy S','pattern':'GT-I9000'},{'label':'Galaxy S2','pattern':'GT-I9100'},{'label':'Galaxy S3','pattern':'GT-I9300'},{'label':'Galaxy S4','pattern':'GT-I9500'},{'label':'Galaxy S5','pattern':'SM-G900'},{'label':'Galaxy S6','pattern':'SM-G920'},{'label':'Galaxy S6 Edge','pattern':'SM-G925'},{'label':'Galaxy S7','pattern':'SM-G930'},{'label':'Galaxy S7 Edge','pattern':'SM-G935'},'Google TV','Lumia','iPad','iPod','iPhone','Kindle',{'label':'Kindle Fire','pattern':'(?:Cloud9|Silk-Accelerated)'},'Nexus','Nook','PlayBook','PlayStation Vita','PlayStation','TouchPad','Transformer',{'label':'Wii U','pattern':'WiiU'},'Wii','Xbox One',{'label':'Xbox 360','pattern':'Xbox'},'Xoom']);var manufacturer=getManufacturer({'Apple':{'iPad':1,'iPhone':1,'iPod':1},'Archos':{},'Amazon':{'Kindle':1,'Kindle Fire':1},'Asus':{'Transformer':1},'Barnes & Noble':{'Nook':1},'BlackBerry':{'PlayBook':1},'Google':{'Google TV':1,'Nexus':1},'HP':{'TouchPad':1},'HTC':{},'LG':{},'Microsoft':{'Xbox':1,'Xbox One':1},'Motorola':{'Xoom':1},'Nintendo':{'Wii U':1,'Wii':1},'Nokia':{'Lumia':1},'Samsung':{'Galaxy S':1,'Galaxy S2':1,'Galaxy S3':1,'Galaxy S4':1},'Sony':{'PlayStation':1,'PlayStation Vita':1}});var os=getOS(['Windows Phone','Android','CentOS',{'label':'Chrome OS','pattern':'CrOS'},'Debian','Fedora','FreeBSD','Gentoo','Haiku','Kubuntu','Linux Mint','OpenBSD','Red Hat','SuSE','Ubuntu','Xubuntu','Cygwin','Symbian OS','hpwOS','webOS ','webOS','Tablet OS','Tizen','Linux','Mac OS X','Macintosh','Mac','Windows 98;','Windows ']);function getLayout(guesses){return reduce(guesses,function(result,guess){return result||RegExp('\\b'+(guess.pattern||qualify(guess))+'\\b','i').exec(ua)&&(guess.label||guess);});}
|
||||
function getManufacturer(guesses){return reduce(guesses,function(result,value,key){return result||(value[product]||value[/^[a-z]+(?: +[a-z]+\b)*/i.exec(product)]||RegExp('\\b'+qualify(key)+'(?:\\b|\\w*\\d)','i').exec(ua))&&key;});}
|
||||
function getName(guesses){return reduce(guesses,function(result,guess){return result||RegExp('\\b'+(guess.pattern||qualify(guess))+'\\b','i').exec(ua)&&(guess.label||guess);});}
|
||||
function getOS(guesses){return reduce(guesses,function(result,guess){var pattern=guess.pattern||qualify(guess);if(!result&&(result=RegExp('\\b'+pattern+'(?:/[\\d.]+|[ \\w.]*)','i').exec(ua))){result=cleanupOS(result,pattern,guess.label||guess);}
|
||||
return result;});}
|
||||
function getProduct(guesses){return reduce(guesses,function(result,guess){var pattern=guess.pattern||qualify(guess);if(!result&&(result=RegExp('\\b'+pattern+' *\\d+[.\\w_]*','i').exec(ua)||RegExp('\\b'+pattern+' *\\w+-[\\w]*','i').exec(ua)||RegExp('\\b'+pattern+'(?:; *(?:[a-z]+[_-])?[a-z]+\\d+|[^ ();-]*)','i').exec(ua))){if((result=String((guess.label&&!RegExp(pattern,'i').test(guess.label))?guess.label:result).split('/'))[1]&&!/[\d.]+/.test(result[0])){result[0]+=' '+result[1];}
|
||||
guess=guess.label||guess;result=format(result[0].replace(RegExp(pattern,'i'),guess).replace(RegExp('; *(?:'+guess+'[_-])?','i'),' ').replace(RegExp('('+guess+')[-_.]?(\\w)','i'),'$1 $2'));}
|
||||
return result;});}
|
||||
function getVersion(patterns){return reduce(patterns,function(result,pattern){return result||(RegExp(pattern+
|
||||
'(?:-[\\d.]+/|(?: for [\\w-]+)?[ /-])([\\d.]+[^ ();/_-]*)','i').exec(ua)||0)[1]||null;});}
|
||||
function toStringPlatform(){return this.description||'';}
|
||||
layout&&(layout=[layout]);if(manufacturer&&!product){product=getProduct([manufacturer]);}
|
||||
if((data=/\bGoogle TV\b/.exec(product))){product=data[0];}
|
||||
if(/\bSimulator\b/i.test(ua)){product=(product?product+' ':'')+'Simulator';}
|
||||
if(name=='Opera Mini'&&/\bOPiOS\b/.test(ua)){description.push('running in Turbo/Uncompressed mode');}
|
||||
if(name=='IE'&&/\blike iPhone OS\b/.test(ua)){data=parse(ua.replace(/like iPhone OS/,''));manufacturer=data.manufacturer;product=data.product;}
|
||||
else if(/^iP/.test(product)){name||(name='Safari');os='iOS'+((data=/ OS ([\d_]+)/i.exec(ua))?' '+data[1].replace(/_/g,'.'):'');}
|
||||
else if(name=='Konqueror'&&!/buntu/i.test(os)){os='Kubuntu';}
|
||||
else if((manufacturer&&manufacturer!='Google'&&((/Chrome/.test(name)&&!/\bMobile Safari\b/i.test(ua))||/\bVita\b/.test(product)))||(/\bAndroid\b/.test(os)&&/^Chrome/.test(name)&&/\bVersion\//i.test(ua))){name='Android Browser';os=/\bAndroid\b/.test(os)?os:'Android';}
|
||||
else if(name=='Silk'){if(!/\bMobi/i.test(ua)){os='Android';description.unshift('desktop mode');}
|
||||
if(/Accelerated *= *true/i.test(ua)){description.unshift('accelerated');}}
|
||||
else if(name=='PaleMoon'&&(data=/\bFirefox\/([\d.]+)\b/.exec(ua))){description.push('identifying as Firefox '+data[1]);}
|
||||
else if(name=='Firefox'&&(data=/\b(Mobile|Tablet|TV)\b/i.exec(ua))){os||(os='Firefox OS');product||(product=data[1]);}
|
||||
else if(!name||(data=!/\bMinefield\b/i.test(ua)&&/\b(?:Firefox|Safari)\b/.exec(name))){if(name&&!product&&/[\/,]|^[^(]+?\)/.test(ua.slice(ua.indexOf(data+'/')+8))){name=null;}
|
||||
if((data=product||manufacturer||os)&&(product||manufacturer||/\b(?:Android|Symbian OS|Tablet OS|webOS)\b/.test(os))){name=/[a-z]+(?: Hat)?/i.exec(/\bAndroid\b/.test(os)?os:data)+' Browser';}}
|
||||
else if(name=='Electron'&&(data=(/\bChrome\/([\d.]+)\b/.exec(ua)||0)[1])){description.push('Chromium '+data);}
|
||||
if(!version){version=getVersion(['(?:Cloud9|CriOS|CrMo|Edge|FxiOS|IEMobile|Iron|Opera ?Mini|OPiOS|OPR|Raven|SamsungBrowser|Silk(?!/[\\d.]+$))','Version',qualify(name),'(?:Firefox|Minefield|NetFront)']);}
|
||||
if((data=layout=='iCab'&&parseFloat(version)>3&&'WebKit'||/\bOpera\b/.test(name)&&(/\bOPR\b/.test(ua)?'Blink':'Presto')||/\b(?:Midori|Nook|Safari)\b/i.test(ua)&&!/^(?:Trident|EdgeHTML)$/.test(layout)&&'WebKit'||!layout&&/\bMSIE\b/i.test(ua)&&(os=='Mac OS'?'Tasman':'Trident')||layout=='WebKit'&&/\bPlayStation\b(?! Vita\b)/i.test(name)&&'NetFront')){layout=[data];}
|
||||
if(name=='IE'&&(data=(/; *(?:XBLWP|ZuneWP)(\d+)/i.exec(ua)||0)[1])){name+=' Mobile';os='Windows Phone '+(/\+$/.test(data)?data:data+'.x');description.unshift('desktop mode');}
|
||||
else if(/\bWPDesktop\b/i.test(ua)){name='IE Mobile';os='Windows Phone 8.x';description.unshift('desktop mode');version||(version=(/\brv:([\d.]+)/.exec(ua)||0)[1]);}
|
||||
else if(name!='IE'&&layout=='Trident'&&(data=/\brv:([\d.]+)/.exec(ua))){if(name){description.push('identifying as '+name+(version?' '+version:''));}
|
||||
name='IE';version=data[1];}
|
||||
if(useFeatures){if(isHostType(context,'global')){if(java){data=java.lang.System;arch=data.getProperty('os.arch');os=os||data.getProperty('os.name')+' '+data.getProperty('os.version');}
|
||||
if(rhino){try{version=context.require('ringo/engine').version.join('.');name='RingoJS';}catch(e){if((data=context.system)&&data.global.system==context.system){name='Narwhal';os||(os=data[0].os||null);}}
|
||||
if(!name){name='Rhino';}}
|
||||
else if(typeof context.process=='object'&&!context.process.browser&&(data=context.process)){if(typeof data.versions=='object'){if(typeof data.versions.electron=='string'){description.push('Node '+data.versions.node);name='Electron';version=data.versions.electron;}else if(typeof data.versions.nw=='string'){description.push('Chromium '+version,'Node '+data.versions.node);name='NW.js';version=data.versions.nw;}}
|
||||
if(!name){name='Node.js';arch=data.arch;os=data.platform;version=/[\d.]+/.exec(data.version);version=version?version[0]:null;}}}
|
||||
else if(getClassOf((data=context.runtime))==airRuntimeClass){name='Adobe AIR';os=data.flash.system.Capabilities.os;}
|
||||
else if(getClassOf((data=context.phantom))==phantomClass){name='PhantomJS';version=(data=data.version||null)&&(data.major+'.'+data.minor+'.'+data.patch);}
|
||||
else if(typeof doc.documentMode=='number'&&(data=/\bTrident\/(\d+)/i.exec(ua))){version=[version,doc.documentMode];if((data=+data[1]+4)!=version[1]){description.push('IE '+version[1]+' mode');layout&&(layout[1]='');version[1]=data;}
|
||||
version=name=='IE'?String(version[1].toFixed(1)):version[0];}
|
||||
else if(typeof doc.documentMode=='number'&&/^(?:Chrome|Firefox)\b/.test(name)){description.push('masking as '+name+' '+version);name='IE';version='11.0';layout=['Trident'];os='Windows';}
|
||||
os=os&&format(os);}
|
||||
if(version&&(data=/(?:[ab]|dp|pre|[ab]\d+pre)(?:\d+\+?)?$/i.exec(version)||/(?:alpha|beta)(?: ?\d)?/i.exec(ua+';'+(useFeatures&&nav.appMinorVersion))||/\bMinefield\b/i.test(ua)&&'a')){prerelease=/b/i.test(data)?'beta':'alpha';version=version.replace(RegExp(data+'\\+?$'),'')+
|
||||
(prerelease=='beta'?beta:alpha)+(/\d+\+?/.exec(data)||'');}
|
||||
if(name=='Fennec'||name=='Firefox'&&/\b(?:Android|Firefox OS)\b/.test(os)){name='Firefox Mobile';}
|
||||
else if(name=='Maxthon'&&version){version=version.replace(/\.[\d.]+/,'.x');}
|
||||
else if(/\bXbox\b/i.test(product)){if(product=='Xbox 360'){os=null;}
|
||||
if(product=='Xbox 360'&&/\bIEMobile\b/.test(ua)){description.unshift('mobile mode');}}
|
||||
else if((/^(?:Chrome|IE|Opera)$/.test(name)||name&&!product&&!/Browser|Mobi/.test(name))&&(os=='Windows CE'||/Mobi/i.test(ua))){name+=' Mobile';}
|
||||
else if(name=='IE'&&useFeatures){try{if(context.external===null){description.unshift('platform preview');}}catch(e){description.unshift('embedded');}}
|
||||
else if((/\bBlackBerry\b/.test(product)||/\bBB10\b/.test(ua))&&(data=(RegExp(product.replace(/ +/g,' *')+'/([.\\d]+)','i').exec(ua)||0)[1]||version)){data=[data,/BB10/.test(ua)];os=(data[1]?(product=null,manufacturer='BlackBerry'):'Device Software')+' '+data[0];version=null;}
|
||||
else if(this!=forOwn&&product!='Wii'&&((useFeatures&&opera)||(/Opera/.test(name)&&/\b(?:MSIE|Firefox)\b/i.test(ua))||(name=='Firefox'&&/\bOS X (?:\d+\.){2,}/.test(os))||(name=='IE'&&((os&&!/^Win/.test(os)&&version>5.5)||/\bWindows XP\b/.test(os)&&version>8||version==8&&!/\bTrident\b/.test(ua))))&&!reOpera.test((data=parse.call(forOwn,ua.replace(reOpera,'')+';')))&&data.name){data='ing as '+data.name+((data=data.version)?' '+data:'');if(reOpera.test(name)){if(/\bIE\b/.test(data)&&os=='Mac OS'){os=null;}
|
||||
data='identify'+data;}
|
||||
else{data='mask'+data;if(operaClass){name=format(operaClass.replace(/([a-z])([A-Z])/g,'$1 $2'));}else{name='Opera';}
|
||||
if(/\bIE\b/.test(data)){os=null;}
|
||||
if(!useFeatures){version=null;}}
|
||||
layout=['Presto'];description.push(data);}
|
||||
if((data=(/\bAppleWebKit\/([\d.]+\+?)/i.exec(ua)||0)[1])){data=[parseFloat(data.replace(/\.(\d)$/,'.0$1')),data];if(name=='Safari'&&data[1].slice(-1)=='+'){name='WebKit Nightly';prerelease='alpha';version=data[1].slice(0,-1);}
|
||||
else if(version==data[1]||version==(data[2]=(/\bSafari\/([\d.]+\+?)/i.exec(ua)||0)[1])){version=null;}
|
||||
data[1]=(/\bChrome\/([\d.]+)/i.exec(ua)||0)[1];if(data[0]==537.36&&data[2]==537.36&&parseFloat(data[1])>=28&&layout=='WebKit'){layout=['Blink'];}
|
||||
if(!useFeatures||(!likeChrome&&!data[1])){layout&&(layout[1]='like Safari');data=(data=data[0],data<400?1:data<500?2:data<526?3:data<533?4:data<534?'4+':data<535?5:data<537?6:data<538?7:data<601?8:'8');}else{layout&&(layout[1]='like Chrome');data=data[1]||(data=data[0],data<530?1:data<532?2:data<532.05?3:data<533?4:data<534.03?5:data<534.07?6:data<534.10?7:data<534.13?8:data<534.16?9:data<534.24?10:data<534.30?11:data<535.01?12:data<535.02?'13+':data<535.07?15:data<535.11?16:data<535.19?17:data<536.05?18:data<536.10?19:data<537.01?20:data<537.11?'21+':data<537.13?23:data<537.18?24:data<537.24?25:data<537.36?26:layout!='Blink'?'27':'28');}
|
||||
layout&&(layout[1]+=' '+(data+=typeof data=='number'?'.x':/[.+]/.test(data)?'':'+'));if(name=='Safari'&&(!version||parseInt(version)>45)){version=data;}}
|
||||
if(name=='Opera'&&(data=/\bzbov|zvav$/.exec(os))){name+=' ';description.unshift('desktop mode');if(data=='zvav'){name+='Mini';version=null;}else{name+='Mobile';}
|
||||
os=os.replace(RegExp(' *'+data+'$'),'');}
|
||||
else if(name=='Safari'&&/\bChrome\b/.exec(layout&&layout[1])){description.unshift('desktop mode');name='Chrome Mobile';version=null;if(/\bOS X\b/.test(os)){manufacturer='Apple';os='iOS 4.3+';}else{os=null;}}
|
||||
if(version&&version.indexOf((data=/[\d.]+$/.exec(os)))==0&&ua.indexOf('/'+data+'-')>-1){os=trim(os.replace(data,''));}
|
||||
if(layout&&!/\b(?:Avant|Nook)\b/.test(name)&&(/Browser|Lunascape|Maxthon/.test(name)||name!='Safari'&&/^iOS/.test(os)&&/\bSafari\b/.test(layout[1])||/^(?:Adobe|Arora|Breach|Midori|Opera|Phantom|Rekonq|Rock|Samsung Internet|Sleipnir|Web)/.test(name)&&layout[1])){(data=layout[layout.length-1])&&description.push(data);}
|
||||
if(description.length){description=['('+description.join('; ')+')'];}
|
||||
if(manufacturer&&product&&product.indexOf(manufacturer)<0){description.push('on '+manufacturer);}
|
||||
if(product){description.push((/^on /.test(description[description.length-1])?'':'on ')+product);}
|
||||
if(os){data=/ ([\d.+]+)$/.exec(os);isSpecialCasedOS=data&&os.charAt(os.length-data[0].length-1)=='/';os={'architecture':32,'family':(data&&!isSpecialCasedOS)?os.replace(data[0],''):os,'version':data?data[1]:null,'toString':function(){var version=this.version;return this.family+((version&&!isSpecialCasedOS)?' '+version:'')+(this.architecture==64?' 64-bit':'');}};}
|
||||
if((data=/\b(?:AMD|IA|Win|WOW|x86_|x)64\b/i.exec(arch))&&!/\bi686\b/i.test(arch)){if(os){os.architecture=64;os.family=os.family.replace(RegExp(' *'+data),'');}
|
||||
if(name&&(/\bWOW64\b/i.test(ua)||(useFeatures&&/\w(?:86|32)$/.test(nav.cpuClass||nav.platform)&&!/\bWin64; x64\b/i.test(ua)))){description.unshift('32-bit');}}
|
||||
else if(os&&/^OS X/.test(os.family)&&name=='Chrome'&&parseFloat(version)>=39){os.architecture=64;}
|
||||
ua||(ua=null);var platform={};platform.description=ua;platform.layout=layout&&layout[0];platform.manufacturer=manufacturer;platform.name=name;platform.prerelease=prerelease;platform.product=product;platform.ua=ua;platform.version=name&&version;platform.os=os||{'architecture':null,'family':null,'version':null,'toString':function(){return 'null';}};platform.parse=parse;platform.toString=toStringPlatform;if(platform.version){description.unshift(version);}
|
||||
if(platform.name){description.unshift(name);}
|
||||
if(os&&name&&!(os==String(os).split(' ')[0]&&(os==name.split(' ')[0]||product))){description.push(product?'('+os+')':'on '+os);}
|
||||
if(description.length){platform.description=description.join(' ');}
|
||||
return platform;}
|
||||
var platform=parse();if(typeof define=='function'&&typeof define.amd=='object'&&define.amd){root.platform=platform;define(function(){return platform;});}
|
||||
else if(freeExports&&freeModule){forOwn(platform,function(value,key){freeExports[key]=value;});}
|
||||
else{root.platform=platform;}}.call(this));
|
||||
@@ -4,22 +4,34 @@
|
||||
%% https://docs.ejabberd.im/developer/extending-ejabberd/localization/
|
||||
|
||||
{" (Add * to the end of field to match substring)"," (Добавете * в края на полето, за да съответства на подниза)"}.
|
||||
{"{{ app_name }} already installed?","{{ app_name }} инсталиран ли е?"}.
|
||||
{" has set the subject to: "," е задал темата на: "}.
|
||||
{"{{ inviter }} has invited you to connect!","{{ inviter }} ви покани да се свържете!"}.
|
||||
{"# participants","# участници"}.
|
||||
{"A description of the node","Описание на нода"}.
|
||||
{"A friendly name for the node","Удобно име на нода"}.
|
||||
{"A fully-featured desktop chat client for Windows and Linux.","Пълнофункционален чат клиент за Windows и Linux."}.
|
||||
{"A lean Jabber/XMPP client for Android. It aims at usability, low overhead and security, and works on low-end Android devices starting with Android 4.0.","Изчистен Jabber/XMPP клиент за Android. Насочен е към функционалност, лек и сигурен. Работи на устройства с Android от нисък клас, започвайки с Android 4.0."}.
|
||||
{"A lightweight and powerful XMPP client for iPhone and iPad. It provides an easy way to talk and share moments with your friends.","Лек и мощен XMPP клиент за iPhone и iPad. Предоставя лесен начин да говорите и споделяте моменти с приятелите си."}.
|
||||
{"A modern open-source chat client for iPhone and iPad. It is easy to use and has a clean user interface.","Модерен чат клиент с отворен код за iPhone и iPad. Лесен за използване, с изчистен потребителски интерфейс."}.
|
||||
{"A modern open-source chat client for Mac. It is easy to use and has a clean user interface.","Модерен чат клиент с отворен код за Mac. Лесен за използване, с изчистен потребителски интерфейс."}.
|
||||
{"A modern open-source chat client for the desktop. It focuses on providing a clean and reliable Jabber/XMPP experience while having your privacy in mind.","Модерен клиент за чат с отворен код за настолни компютри. Фокусира се върху предоставянето на чисто и надеждно Jabber/XMPP изживяване, като същевременно се грижи за вашата поверителност."}.
|
||||
{"A password is required to enter this room","Необходима е парола за влизане в тази стая"}.
|
||||
{"A Web Page","Уеб страница"}.
|
||||
{"Accept invite using {{ app_name }}","Приемете поканата, използвайки {{ app_name }}"}.
|
||||
{"Accept","Приемам"}.
|
||||
{"Access denied by service policy","Достъпът е отказан спрямо политиката на услугата"}.
|
||||
{"Access model","Модел на достъп"}.
|
||||
{"Account doesn't exist","Профилът не съществува"}.
|
||||
{"Action on user","Действие върху потребител"}.
|
||||
{"Add a hat to a user","Добави шапка към потребител"}.
|
||||
{"Add {{ inviter }} to your contact list","Добавете {{ inviter }} към вашия списък с контакти"}.
|
||||
{"Add Contact","Добавете контакти"}.
|
||||
{"Add User","Добави потребител"}.
|
||||
{"Administration of ","Администриране на "}.
|
||||
{"Administration","Администриране"}.
|
||||
{"Administrator privileges required","Изискватт се администраторски права"}.
|
||||
{"After clicking the button you will be taken to {{ app_name }} to finish setting up your new {{ site_name }} account.","След като щракнете върху бутона, ще бъдете пренасочени към {{ app_name }}, за да завършите настройката на новия вашия нов {{ site_name }} профил."}.
|
||||
{"After successfully installing {{ app_name }}, come back to this page and <strong>continue with Step 2</strong>.","След като инсталирате успешно {{ app_name }}, върнете се на тази страница и <strong>продължете със стъпка 2</strong>."}.
|
||||
{"All activity","Цялата статистика"}.
|
||||
{"All Users","Всички потребители"}.
|
||||
{"Allow subscription","Разреши абониране"}.
|
||||
@@ -46,8 +58,13 @@
|
||||
{"Anyone with a presence subscription of both or from may subscribe and retrieve items","Всеки, който има абонамент за присъствие на двете или от: може да се абонира и да извлича елементи"}.
|
||||
{"Anyone with Voice","Всеки, с възможност за гласово обаждане"}.
|
||||
{"Anyone","Всеки"}.
|
||||
{"API Commands","API Команди"}.
|
||||
{"Apple Store Logo","Apple Store лого"}.
|
||||
{"April","Април"}.
|
||||
{"Attribute 'channel' is required for this request","Атрибутът 'канал' е задължителен за тази заявка"}.
|
||||
{"Arguments","Аргументи"}.
|
||||
{"As a final reminder, your account details are shown below:","Като последно напомняне, данните за вашия профил са показани по-долу:"}.
|
||||
{"Assign a hat to a user","Присвои шапка към потребител"}.
|
||||
{"Attribute 'channel' is required for this request","Изисква се атрибут 'канал' за тази заявка"}.
|
||||
{"Attribute 'id' is mandatory for MIX messages","Атрибутът 'id' е задължителен за MIX съобщения"}.
|
||||
{"Attribute 'jid' is not allowed here","Атрибутът 'jid' не е разрешен тук"}.
|
||||
{"Attribute 'node' is not allowed here","Атрибутът 'нод' не е разрешен тук"}.
|
||||
@@ -59,6 +76,9 @@
|
||||
{"Backup to File at ","Архивиране във файл на "}.
|
||||
{"Backup","Резервно копие"}.
|
||||
{"Bad format","Лош формат"}.
|
||||
{"BAD REQUEST","BAD REQUEST"}.
|
||||
{"Beagle IM by Tigase, Inc. is a lightweight and powerful XMPP client for macOS.","Beagle IM от Tigase, Inc. е лек и мощен XMPP клиент за macOS."}.
|
||||
{"Beagle IM Logo","Beagle IM лого"}.
|
||||
{"Birthday","Рожден ден"}.
|
||||
{"Both the username and the resource are required","Изискват се потребителското име и ресурсът"}.
|
||||
{"Bytestream already activated","Bytestream вече е активиран"}.
|
||||
@@ -75,6 +95,7 @@
|
||||
{"Channel JID","JID на канал"}.
|
||||
{"Channels","Канали"}.
|
||||
{"Characters not allowed:","Неразрешени символи:"}.
|
||||
{"Chat address (JID)","Чат адрес (JID)"}.
|
||||
{"Chatroom configuration modified","Конфигурацията на стаята за чат е променена"}.
|
||||
{"Chatroom is created","Стаята за чат е създадена"}.
|
||||
{"Chatroom is destroyed","Стаята за чат е унищожена"}.
|
||||
@@ -82,16 +103,29 @@
|
||||
{"Chatroom is stopped","Стаята за чат е спряна"}.
|
||||
{"Chatrooms","Чат стаи"}.
|
||||
{"Choose a username and password to register with this server","Изберете потребителско име и парола, за да се регистрирате на този сървър"}.
|
||||
{"Choose a username, this will become the first part of your new chat address.","Изберете потребителско име, то ще стане първата част от новия ви чат адрес."}.
|
||||
{"Choose storage type of tables","Изберете тип за съхранение на таблици"}.
|
||||
{"Choose whether to approve this entity's subscription.","Изберете дали да одобрите абонамента на този субект."}.
|
||||
{"City","Град"}.
|
||||
{"Click the button to open the Dino website where you can download and install it on your PC.","Щракнете върху бутона, за да отворите уебсайта на Dino, където можете да го изтеглите и инсталирате на вашия компютър."}.
|
||||
{"Client acknowledged more stanzas than sent by server","Клиентът потвърди повече строфи от изпратените от сървъра"}.
|
||||
{"Close","Затвори"}.
|
||||
{"Clustering","Клъстеризация"}.
|
||||
{"Commands","Команди"}.
|
||||
{"Conference room does not exist","Конферентната стая не съществува"}.
|
||||
{"Configuration of room ~s","Конфигурация на стая ~s"}.
|
||||
{"Configuration","Конфигурация"}.
|
||||
{"Congratulations!","Поздравления!"}.
|
||||
{"Contact Addresses (normally, room owner or owners)","Адреси за контакт (обикновено собственик или собственици на стая)"}.
|
||||
{"Contacts","Контакти"}.
|
||||
{"Conversations is a Jabber/XMPP client for Android 6.0+ smartphones that has been optimized to provide a unique mobile experience.","Conversations е Jabber/XMPP клиент за смартфони с Android 6.0+, оптимизиран да осигури уникално мобилно изживяване."}.
|
||||
{"Conversations Logo","Conversations лого"}.
|
||||
{"Country","Държава"}.
|
||||
{"Create a Hat","Създай Шапка"}.
|
||||
{"Create Account","Създай профил"}.
|
||||
{"Create an account","Създайте профил"}.
|
||||
{"Creating an account will allow to communicate with other people on <strong>{{ site_name }}</strong> and other services on the XMPP network.","Създаването на профил, ще Ви позволи да комуникирате с други хора в <strong>{{ site_name }}</strong> и други услуги в мрежата XMPP."}.
|
||||
{"Creating an account will allow to communicate with <strong>{{ inviter }}</strong> and other people on <strong>{{ site_name }}</strong> and other services on the XMPP network.","Създаването на профил, ще ви позволи да комуникирате с <strong>{{ inviter }}</strong>, други хора в <strong>{{ site_name }}</strong> и други услуги в мрежата XMPP."}.
|
||||
{"Current Discussion Topic","Текуща тема на дискусита"}.
|
||||
{"Database failure","Грешка в базата данни"}.
|
||||
{"Database Tables Configuration at ","Конфигурация на таблиците в базата данни при "}.
|
||||
@@ -103,8 +137,16 @@
|
||||
{"Delete User","Изтрий потребителя"}.
|
||||
{"Deliver event notifications","Достави известията за събития"}.
|
||||
{"Deliver payloads with event notifications","Достави прикачените обекти с известията за събития"}.
|
||||
{"Destroy a Hat","Разруши Шапка"}.
|
||||
{"Dino Logo","Dino лого"}.
|
||||
{"Disable User","Деактивирай потребителя"}.
|
||||
{"Disc only copy","Копие само на диска"}.
|
||||
{"Don't tell your password to anybody, not even the administrators of the XMPP server.","Не казвайте паролата си на никого, дори на администраторите на XMPP сървъра."}.
|
||||
{"Download and install {{ app_name }} below:","Изтеглете и инсталирайте {{ app_name }} по-долу:"}.
|
||||
{"Download Dino for Linux","Свалете Dino за Linux"}.
|
||||
{"Download from Mac App Store","Изтегляне от Mac App Store"}.
|
||||
{"Download Gajim","Свалете Gajim"}.
|
||||
{"Download Renga for Haiku","Свалете Renga за Haiku"}.
|
||||
{"Dump Backup to Text File at ","Архивиране в текстов файл при "}.
|
||||
{"Dump to Text File","Архивиране в текстов файл"}.
|
||||
{"Duplicated groups are not allowed by RFC6121","Дублирани групи не са разрешени от RFC6121"}.
|
||||
@@ -126,6 +168,7 @@
|
||||
{"Enable message archiving","Активирай архивиране на съобщенията"}.
|
||||
{"Enabling push without 'node' attribute is not supported","Активиране на известията без атрибут 'нод' не се поддържа"}.
|
||||
{"End User Session","Прекрати сесията на потребителя"}.
|
||||
{"Enter a secure password that you do not use anywhere else.","Въведете сигурна парола, която не използвате на друго място."}.
|
||||
{"Enter nickname you want to register","Въведете псевдонима, който желаете да регистрирате"}.
|
||||
{"Enter path to backup file","Въведете пътя към архивния файл"}.
|
||||
{"Enter path to jabberd14 spool dir","Въведете пътя към jabberd14 spool директорията"}.
|
||||
@@ -146,6 +189,7 @@
|
||||
{"Failed to process option '~s'","Неуспешо обработена опция '~s'"}.
|
||||
{"Family Name","Фамилно име"}.
|
||||
{"FAQ Entry","Въвеждане на ЧЗВ"}.
|
||||
{"F-Droid Store Logo","F-Droid Store лого"}.
|
||||
{"February","Февруари"}.
|
||||
{"File larger than ~w bytes","Файлът е по-голям от ~w байта"}.
|
||||
{"Fill in the form to search for any matching XMPP User","Попълнете формата, за да търсите съвпадащ XMPP потребител"}.
|
||||
@@ -154,27 +198,44 @@
|
||||
{"Full List of Room Admins","Пълен списък на администраторите на стаята"}.
|
||||
{"Full List of Room Owners","Пълен списък на собствениците на стаята"}.
|
||||
{"Full Name","Пълно име"}.
|
||||
{"Get List of Online Users","Списък на онлайн потребителите"}.
|
||||
{"Gajim Logo","Gajim лого"}.
|
||||
{"Get List of Active Users","Списък с активни потребители"}.
|
||||
{"Get List of Disabled Users","Списък на деактивираните потребители"}.
|
||||
{"Get List of Idle Users","Списък на неактивните потребители"}.
|
||||
{"Get List of Online Users","Списък на онлайн потребители"}.
|
||||
{"Get List of Registered Users","Списък на регистрираните потребители"}.
|
||||
{"Get Number of Active Users","Брой на активните потребители"}.
|
||||
{"Get Number of Disabled Users","Брой на деактивираните потребители"}.
|
||||
{"Get Number of Idle Users","Брой на неактивните потребители"}.
|
||||
{"Get Number of Online Users","Брой на онлайн потребителите"}.
|
||||
{"Get Number of Registered Users","Брой на регистрираните потребители"}.
|
||||
{"Get Pending","Виж чакащи"}.
|
||||
{"Get started","Започнете"}.
|
||||
{"Get User Last Login Time","Покажи времето, когато потребителят е влязъл за последно"}.
|
||||
{"Get User Roster","Списък с потребители"}.
|
||||
{"Get User Statistics","Покажи статистика за потребителя"}.
|
||||
{"Given Name","Наименование"}.
|
||||
{"Google Play Store Logo","Google Play Store лого"}.
|
||||
{"Grant voice to this person?","Предоставяне на глас за потребителя?"}.
|
||||
{"has been banned","е със забранен достъп"}.
|
||||
{"has been kicked because of a system shutdown","е отстранен поради изключване на системата"}.
|
||||
{"has been kicked because of an affiliation change","е отстранен поради промяна на принадлежността"}.
|
||||
{"has been kicked because the room has been changed to members-only","е изгонен, защото стаята е променена и е само за членове"}.
|
||||
{"has been kicked","е отстранен"}.
|
||||
{"Hash computed from the list of hats available in a room","Хеш стойност на листа от шапки налични в стаята"}.
|
||||
{"Hash of the vCard-temp avatar of this room","Хеш на временния vCard аватар на тази стая"}.
|
||||
{"Hat hue","Цвят на шапката"}.
|
||||
{"Hat title","Заглавие на шапката"}.
|
||||
{"Hat URI","URI адрес за шапка"}.
|
||||
{"Hats limit exceeded","Превишен е лимитът за шапка"}.
|
||||
{"Hide","Скрий"}.
|
||||
{"Hint","Подсказка"}.
|
||||
{"Host unknown","Неизвестен хост"}.
|
||||
{"Hostname invalid","Невалидно име за хост"}.
|
||||
{"HTTP File Upload","Качване на файл по HTTP"}.
|
||||
{"Idle connection","Неактивна връзка"}.
|
||||
{"If you already have {{ app_name }} installed, we recommend that you continue the account creation process using the app by clicking on the button below:","Ако вече сте инсталирали {{ app_name }}, препоръчваме Ви да продължите процеса на създаване на профил, използвайки приложението, като кликнете върху бутона по-долу:"}.
|
||||
{"If you don't have an XMPP client installed yet, here's a list of suitable clients for your platform.","Ако все още нямате инсталиран XMPP клиент, ето списък с подходящи клиенти за вашата платформа."}.
|
||||
{"If you don't see the CAPTCHA image here, visit the web page.","Ако не виждате CAPTCHA изображението, посетете уеб страницата."}.
|
||||
{"Import Directory","Импорт на директория"}.
|
||||
{"Import File","Импорт на файл"}.
|
||||
@@ -193,6 +254,7 @@
|
||||
{"Incorrect value of 'action' in data form","Неправилна стойност на 'action' във формата за данни"}.
|
||||
{"Incorrect value of 'path' in data form","Неправилна стойност на 'path' във формата за данни"}.
|
||||
{"Installed Modules:","Инсталирани модули:"}.
|
||||
{"Installed ok? Great! <strong>Click or tap the button below</strong> to accept your invite and continue with your account setup:","Инсталира ли се нормално? Чудесно! <strong>Кликнете или докоснете бутона по-долу</strong>, за да приемете поканата си и да продължите с настройката на вашия профил:"}.
|
||||
{"Install","Инсталирай"}.
|
||||
{"Insufficient privilege","Недостатъчни права"}.
|
||||
{"Internal server error","Вътрешна сървърна грешка"}.
|
||||
@@ -200,6 +262,11 @@
|
||||
{"Invalid node name","Невалидно име на нода"}.
|
||||
{"Invalid 'previd' value","Невалидна стойност на 'previd'"}.
|
||||
{"Invitations are not allowed in this conference","Поканите не са разрешени в тази конференция"}.
|
||||
{"Invite Expired","Изтекла покана"}.
|
||||
{"Invite expired","Поканата е изтекла"}.
|
||||
{"Invite to {{ site_name }}","Покани в {{ site_name }}"}.
|
||||
{"Invite User","Покани потребител"}.
|
||||
{"Invite","Покани"}.
|
||||
{"IP addresses","IP адреси"}.
|
||||
{"is now known as","е известен като"}.
|
||||
{"It is not allowed to send error messages to the room. The participant (~s) has sent an error message (~s) and got kicked from the room","Не е позволено да изпращате съобщения за грешки в стаята. Участникът (~s) е изпратил съобщение за грешка (~s) и е бил отстранен от стаята"}.
|
||||
@@ -209,6 +276,7 @@
|
||||
{"January","Януари"}.
|
||||
{"JID normalization denied by service policy","Политиката на услугата не допуска нормализирането на JID"}.
|
||||
{"JID normalization failed","Нормализирането на JID е неуспешно"}.
|
||||
{"Join {{ site_name }} with {{ app_name }}","Присъединете се към {{ site_name }} с {{ app_name }}"}.
|
||||
{"Joined MIX channels of ~ts","Свързани MIX канали на ~ts"}.
|
||||
{"Joined MIX channels:","Свързани MIX канали:"}.
|
||||
{"joins the room","се присъединява към стаята"}.
|
||||
@@ -220,10 +288,13 @@
|
||||
{"Last message","Последно съобщение"}.
|
||||
{"Last month","Миналия месец"}.
|
||||
{"Last year","Миналата година"}.
|
||||
{"Launch {{ app_name }} and sign in using your account credentials.","Стартирайте {{ app_name }} и влезте, използвайки данни за вашия профил."}.
|
||||
{"Launch Beagle IM, and select \\'Yes\\' to add a new account. Click the \\'+\\' button under the empty account list and then enter your credentials.","Стартирайте Beagle IM и изберете \\'Да\\', за да добавите нов профил. Кликнете върху бутона \\'+\\' под празния списък с профили и след това въведете вашите идентификационни данни."}.
|
||||
{"Least significant bits of SHA-256 hash of text should equal hexadecimal label","Най-малко значимите битове SHA-256 хеш на текст трябва да са равни на шестнайсетичния етикет"}.
|
||||
{"leaves the room","напуска стаята"}.
|
||||
{"List of users with hats","Списък на потребителите с шапки"}.
|
||||
{"List of Hats","Списък с шапки"}.
|
||||
{"List users with hats","Избройте потребителите с шапки"}.
|
||||
{"Log in via web","Влезте през уеб"}.
|
||||
{"Logged Out","Излязъл"}.
|
||||
{"Logging","Регистриране на събития"}.
|
||||
{"Make participants list public","Направи списъка с участниците публичен"}.
|
||||
@@ -240,9 +311,11 @@
|
||||
{"Max payload size in bytes","Максимален размер на прикачения обект в байтове"}.
|
||||
{"Maximum file size","Максимален размер на файла"}.
|
||||
{"Maximum Number of History Messages Returned by Room","Максимален брой съобщения от хронологията, върнати от стая"}.
|
||||
{"Maximum number of invites reached","Максималният брой покани е достигнат"}.
|
||||
{"Maximum number of items to persist","Максимален брой елементи за запазване"}.
|
||||
{"Maximum Number of Occupants","Максимален брой участници"}.
|
||||
{"May","Май"}.
|
||||
{"Members are allowed to invite others","Участниците могат да канят други"}.
|
||||
{"Membership is required to enter this room","Изисква се членство, за вход в тази стая"}.
|
||||
{"Memorize your password, or write it in a paper placed in a safe place. In XMPP there isn't an automated way to recover your password if you forget it.","Запомнете паролата си или я запишете на лист хартия, поставен на сигурно място. В XMPP няма автоматичен начин за възстановяване на паролата в случай, че я забравите."}.
|
||||
{"Mere Availability in XMPP (No Show Value)","Наличност в XMPP (Не показвай стойност)"}.
|
||||
@@ -257,6 +330,7 @@
|
||||
{"Moderators Only","Само модератори"}.
|
||||
{"Moderator","Модератор"}.
|
||||
{"Module failed to handle the query","Модулът не успя да обработи заявката"}.
|
||||
{"Monal Logo","Monal лого"}.
|
||||
{"Monday","Понеделник"}.
|
||||
{"Multicast","Мултикаст"}.
|
||||
{"Multiple <item/> elements are not allowed by RFC6121","Повече от един <item/> елемента не се разрешават от RFC6121"}.
|
||||
@@ -310,19 +384,22 @@
|
||||
{"Node","Нод"}.
|
||||
{"None","Нито един"}.
|
||||
{"Not allowed","Не е разрешено"}.
|
||||
{"NOT FOUND","NOT FOUND"}.
|
||||
{"Not Found","Не е намерен"}.
|
||||
{"Not subscribed","Няма абонамент"}.
|
||||
{"Notify subscribers when items are removed from the node","Уведоми абонатите, когато елементите бъдат премахнати от нода"}.
|
||||
{"Notify subscribers when the node configuration changes","Уведоми абонатите, когато конфигурацията на нода се промени"}.
|
||||
{"Notify subscribers when the node is deleted","Уведоми абонатите, когато нодът бъде изтрит"}.
|
||||
{"November","Ноември"}.
|
||||
{"Number of active users","Брой активни потребители"}.
|
||||
{"Number of answers required","Брой на необходимите отговори"}.
|
||||
{"Number of disabled users","Брой деактивирани потребители"}.
|
||||
{"Number of idle users","Брой неактивни потребители"}.
|
||||
{"Number of occupants","Брой участници"}.
|
||||
{"Number of Offline Messages","Брой офлайн съобщения"}.
|
||||
{"Number of online users","Брой онлайн потребители"}.
|
||||
{"Number of registered users","Брой регистрирани потребители"}.
|
||||
{"Number of seconds after which to automatically purge items, or `max` for no specific limit other than a server imposed maximum","Брой секунди, след които автоматично да се изчистят елементите, или `max` за липса на конкретно ограничение, различно от наложения от сървъра максимум"}.
|
||||
{"Occupants are allowed to invite others","На участниците е позволено да канят други"}.
|
||||
{"Occupants are allowed to query others","Участниците могат да отправят заявки към други лица"}.
|
||||
{"Occupants May Change the Subject","Участниците могат да променят темата"}.
|
||||
{"October","Октомври"}.
|
||||
@@ -345,12 +422,15 @@
|
||||
{"Only service administrators are allowed to send service messages","Само администраторите на услуги имат право да изпращат системни съобщения"}.
|
||||
{"Only those on a whitelist may associate leaf nodes with the collection","Само тези от списъка с позволени могат да свързват листови нодове с колекцията"}.
|
||||
{"Only those on a whitelist may subscribe and retrieve items","Само тези от списъка с позволени могат да се абонират и да извличат елементи"}.
|
||||
{"Open the app","Отворете приложението"}.
|
||||
{"Organization Name","Име на организацията"}.
|
||||
{"Organization Unit","Отдел"}.
|
||||
{"Other Modules Available:","Други налични модули:"}.
|
||||
{"Other software","Друг софтуер"}.
|
||||
{"Outgoing s2s Connections","Изходящи s2s връзки"}.
|
||||
{"Owner privileges required","Изискват се привилегии на собственик"}.
|
||||
{"Packet relay is denied by service policy","Предаването на пакети е отказано от политиката на услугата"}.
|
||||
{"Page navigation","Навигация по страниците"}.
|
||||
{"Participant ID","ID на участник"}.
|
||||
{"Participant","Участник"}.
|
||||
{"Password Verification","Проверка на паролата"}.
|
||||
@@ -366,6 +446,8 @@
|
||||
{"Ping query is incorrect","Заявката за пинг е неправилна"}.
|
||||
{"Ping","Пинг"}.
|
||||
{"Please note that these options will only backup the builtin Mnesia database. If you are using the ODBC module, you also need to backup your SQL database separately.","Обърнете внимание, че тези опции ще направят резервно копие само на вградената (Mnesia) база данни. Ако използвате модула ODBC, трябва да направите резервно копие на SQL базата данни отделно."}.
|
||||
{"Please provide a password! Minimum length: {{ password_min_length }}","Моля, въведете парола! Минимална дължина: {{ password_min_length }}"}.
|
||||
{"Please provide a valid username!","Моля, въведете валидно потребителско име!"}.
|
||||
{"Please, wait for a while before sending new voice request","Моля, изчакайте известно време, преди да изпратите нова заявка за гласова връзка"}.
|
||||
{"Pong","Понг"}.
|
||||
{"Possessing 'ask' attribute is not allowed by RFC6121","Притежаването на атрибут 'ask' не е разрешено от RFC6121"}.
|
||||
@@ -375,6 +457,7 @@
|
||||
{"Previous session PID has exited","Предишният PID на сесията е излязъл"}.
|
||||
{"Previous session PID is dead","PID от предишната сесия не съществува"}.
|
||||
{"Previous session timed out","Времето на предишната сесия изтече"}.
|
||||
{"Previous","Предишен"}.
|
||||
{"private, ","частна, "}.
|
||||
{"Public","Публичен"}.
|
||||
{"Publish model","Модел за публикуване"}.
|
||||
@@ -392,11 +475,18 @@
|
||||
{"Receive notification of new items only","Получаване на известия само за нови елементи"}.
|
||||
{"Receive notification of new nodes only","Получаване на известия само за нови нодове"}.
|
||||
{"Recipient is not in the conference room","Получателят не е в конферентната стая"}.
|
||||
{"Register an XMPP account","Регистрирай XMPP акаунт"}.
|
||||
{"Re-Enable User","Активиране на потребител"}.
|
||||
{"Register an XMPP account","Регистрирай XMPP профил"}.
|
||||
{"Register on {{ site_name }}","Регистрирайте се на {{ site_name }}"}.
|
||||
{"Register","Регистрирай"}.
|
||||
{"Registration Error","Грешка при регистрация"}.
|
||||
{"Registration error","Грешка при регистриране"}.
|
||||
{"Registration Form","Форма за регистрация"}.
|
||||
{"Registration Success","Успешна регистрация"}.
|
||||
{"Remote copy","Отдалечено копие"}.
|
||||
{"Remove a hat from a user","Премахни шапка от потребител"}.
|
||||
{"Remove User","Премахни потребител"}.
|
||||
{"Renga Logo","Renga лого"}.
|
||||
{"Replaced by new connection","Заменен от нова връзка"}.
|
||||
{"Request has timed out","Времето за заявка изтече"}.
|
||||
{"Request is ignored","Заявката е игнорирано"}.
|
||||
@@ -408,6 +498,7 @@
|
||||
{"Restore binary backup immediately:","Възстанови незабавно двоично копие:"}.
|
||||
{"Restore plain text backup immediately:","Възстановете незабавно копие от обикновен текст:"}.
|
||||
{"Restore","Възстанови"}.
|
||||
{"Result","Резултат"}.
|
||||
{"Roles and Affiliations that May Retrieve Member List","Роли и принадлежности, които могат да извличат списък с членове"}.
|
||||
{"Roles for which Presence is Broadcasted","Роли, за които се излъчва присъствие"}.
|
||||
{"Roles that May Send Private Messages","Роли, които могат да изпращат лични съобщения"}.
|
||||
@@ -421,16 +512,21 @@
|
||||
{"Roster size","Размер на списъка с контакти"}.
|
||||
{"Running Nodes","Работещи нодове"}.
|
||||
{"~s invites you to the room ~s","~s ви кани в стая ~s"}.
|
||||
{"Sad person holding empty box","Тъжен човек, държащ празна кутия"}.
|
||||
{"Saturday","Събота"}.
|
||||
{"Scan invite code","Сканирайте код за покана"}.
|
||||
{"Scan with mobile device","Сканиране с мобилно устройство"}.
|
||||
{"Search from the date","Търси от дата"}.
|
||||
{"Search Results for ","Резултати от търсенето за "}.
|
||||
{"Search the text","Търси текста"}.
|
||||
{"Search until the date","Търси до дата"}.
|
||||
{"Search users in ","Търси потребители в "}.
|
||||
{"Select","Избери"}.
|
||||
{"Send announcement to all online users on all hosts","Изпрати съобщение до всички онлайн потребители на всички хостове"}.
|
||||
{"Send announcement to all online users","Изпрати съобщение до всички онлайн потребители"}.
|
||||
{"Send announcement to all users on all hosts","Изпрати съобщение до всички потребители на всички хостове"}.
|
||||
{"Send announcement to all users","Изпрати съобщение до всички потребители"}.
|
||||
{"Send this invite to your device","Изпратете тази покана до вашето устройство"}.
|
||||
{"September","Септември"}.
|
||||
{"Server:","Сървър:"}.
|
||||
{"Service list retrieval timed out","Времето за изчакване на извличането на списъка с услуги изтече"}.
|
||||
@@ -441,9 +537,14 @@
|
||||
{"Show Integral Table","Покажи интегрална таблица"}.
|
||||
{"Show Occupants Join/Leave","Покажи участници Влязъл/Напускнал"}.
|
||||
{"Show Ordinary Table","Покажи обикновена таблица"}.
|
||||
{"Showing apps for <span class='platform-name'>your current platform</span> only. You may also <a href='#' id='show-all-clients-button' tabindex=\"{{ tabidx }}\">view all apps.</a>","Показват се приложения само за <span class='platform-name'>текущата ви платформа</span>. Можете също да <a href='#' id='show-all-clients-button' tabindex=\"{{ tabidx }}\">прегледате всички приложения.</a>"}.
|
||||
{"Show","Покажи"}.
|
||||
{"Shut Down Service","Изключи услугата"}.
|
||||
{"Siskin IM Logo","Siskin IM лого"}.
|
||||
{"SOCKS5 Bytestreams","SOCKS5 байтови потоци"}.
|
||||
{"Some XMPP clients can store your password in the computer, but you should do this only in your personal computer for safety reasons.","Някои XMPP клиенти могат да съхраняват паролата Ви в компютъра, но от съображения за сигурност трябва да го правите само на личния си компютър."}.
|
||||
{"Sorry, it looks like this invite code has expired!","Съжалявам, изглежда, че този код за покана е изтекъл!"}.
|
||||
{"Sorry, there was a problem registering your account.","За съжаление, възникна проблем с регистрацията на вашия профил."}.
|
||||
{"Sources Specs:","Спецификации на източниците:"}.
|
||||
{"Specify the access model","Задай модела за достъп"}.
|
||||
{"Specify the event message type","Задай типа на съобщението за събитие"}.
|
||||
@@ -451,13 +552,22 @@
|
||||
{"Stanza id is not valid","Невалидно ID на строфата"}.
|
||||
{"Stanza ID","ID на строфа"}.
|
||||
{"Statically specify a replyto of the node owner(s)","Статично задаване на replyto на собственика(ците) на нода"}.
|
||||
{"Step 1: Download and install {{ app_name }}","Стъпка 1: Изтеглете и инсталирайте {{ app_name }}"}.
|
||||
{"Step 1: Install {{ app_name }}","Стъпка 1: Инсталирайте {{ app_name }}"}.
|
||||
{"Step 2: Activate your account","Стъпка 2: Активирайте профила си"}.
|
||||
{"Step 2: Connect {{ app_name }} to your new account","Стъпка 2: Свържете {{ app_name }} с новия си профил"}.
|
||||
{"Stopped Nodes","Спрени нодове"}.
|
||||
{"Store binary backup:","Запази бинарен архив:"}.
|
||||
{"Store plain text backup:","Запази архив като обикновен текст:"}.
|
||||
{"Stream management is already enabled","Управлението на потока вече е активирано"}.
|
||||
{"Stream management is not enabled","Управлението на потока не е активирано"}.
|
||||
{"<strong>{{ site_name }}</strong> is part of XMPP, a secure and decentralized messaging network. To begin chatting using <strong>{{ app_name }}</strong> you need to first register an account.","<strong>{{ site_name }}</strong> е част от XMPP, сигурна и децентрализирана мрежа за съобщения. За да започнете да чатите, използвайки <strong>{{ app_name }}</strong>, първо трябва да регистрирате профил."}.
|
||||
{"<strong>{{ site_name }}</strong> is part of XMPP, a secure and decentralized messaging network. To begin chatting you need to first register an account.","<strong>{{ site_name }}</strong> е част от XMPP, сигурна и децентрализирана мрежа за съобщения. За да започнете да чатите, първо трябва да регистрирате профил."}.
|
||||
{"<strong>No suitable software installed right now?</strong> You can also log in to your account through our online web chat!","<strong>В момента нямате инсталиран подходящ софтуер?</strong> Можете, също да влезете в профила си чрез нашия онлайн уеб чат!"}.
|
||||
{"<strong>Tip:</strong> You can open this invite on your mobile device by scanning a barcode with your camera.","<strong>Съвет:</strong> Можете да отворите тази покана на мобилното си устройство, като сканирате баркод с камерата."}.
|
||||
{"Subject","Тема"}.
|
||||
{"Submitted","Изпратено"}.
|
||||
{"Submit","Изпрати"}.
|
||||
{"Subscriber Address","Адрес на абоната"}.
|
||||
{"Subscribers may publish","Абонатите могат да публикуват"}.
|
||||
{"Subscription requests must be approved and only subscribers may retrieve items","Заявките за абонамент трябва да бъдат одобрени и само абонатите могат да извличат елементи"}.
|
||||
@@ -485,6 +595,9 @@
|
||||
{"The JIDs of those to contact with questions","JID на лицата, с които да се свържете при въпроси"}.
|
||||
{"The JIDs of those with an affiliation of owner","JID на лицата с принадлежност на собственик"}.
|
||||
{"The JIDs of those with an affiliation of publisher","JID-та на лица с принадлежност към публикуващи"}.
|
||||
{"The list of all active users","Списъкът на всички активни потребители"}.
|
||||
{"The list of all disabled users","Списък на всички деактвирани потребители"}.
|
||||
{"The list of all idle users","Списък на всички неактивни потребители"}.
|
||||
{"The list of all online users","Списък на всички онлайн потребители"}.
|
||||
{"The list of all users","Списък на всички потребители"}.
|
||||
{"The list of JIDs that may associate leaf nodes with a collection","Списъкът с JID, които могат да асоциират листови нодове с колекция"}.
|
||||
@@ -506,16 +619,20 @@
|
||||
{"The presence states for which an entity wants to receive notifications","Състояния на присъствие, за които даден субект желае да получава известия"}.
|
||||
{"The query is only allowed from local users","Заявката е разрешена само за локални потребители"}.
|
||||
{"The query must not contain <item/> elements","Заявката не може да съдържа елементи <item/>"}.
|
||||
{"The role","Ролята"}.
|
||||
{"The room subject can be modified by participants","Темата на стаята може да бъде променяна от участниците"}.
|
||||
{"The semantic type information of data in the node, usually specified by the namespace of the payload (if any)","Информацията за семантичния тип данни на нода, обикновено зададена от пространството на имената на прикачените данни (ако има такива)"}.
|
||||
{"The sender of the last received message","Подателят на последното получено съобщение"}.
|
||||
{"The stanza MUST contain only one <active/> element, one <default/> element, or one <list/> element","Строфата ТРЯБВА да съдържа само един <active/> елемент, един <default/> елемент или един <list/> елемент"}.
|
||||
{"The subscription identifier associated with the subscription request","Идентификаторът на абонамента, свързан със заявката за абонамент"}.
|
||||
{"The token provided is either invalid or expired.","Предоставеният токен код е невалиден или изтекъл."}.
|
||||
{"The URL of an XSL transformation which can be applied to payloads in order to generate an appropriate message body element.","URL адрес на XSL трансформацията, която може да се приложи към прикачените данни, за да се генерира подходящ елемент от тялото на съобщението."}.
|
||||
{"The URL of an XSL transformation which can be applied to the payload format in order to generate a valid Data Forms result that the client could display using a generic Data Forms rendering engine","URL адрес на XSL трансформацията, която може да се приложи към формата на прикачените данни, за да се генерира валиден резултат от Data Forms, който клиентът може да покаже с помощта на общ механизъм за визуализация на Data Forms"}.
|
||||
{"There was an error changing the password: ","Възникна грешка при промяна на паролата: "}.
|
||||
{"There was an error creating the account: ","Възникна грешка при създаването на профила: "}.
|
||||
{"There was an error deleting the account: ","Възникна грешка при изтриването на профила: "}.
|
||||
{"This button works only if you have the app installed already!","Този бутон работи, само ако вече имате инсталирано приложението!"}.
|
||||
{"This is an invite from <strong>{{ inviter }}</strong> to connect and chat on the XMPP network. If you already have an XMPP client installed just press the button below!","Това е покана от <strong>{{ inviter }}</strong> за свързване и чат в XMPP мрежата. Ако вече имате инсталиран XMPP клиент, просто натиснете бутона по-долу!"}.
|
||||
{"This is case insensitive: macbeth is the same that MacBeth and Macbeth.","Не е чувствително към регистъра (главни и малки букви): \"macbeth\"е същото като \"MacBeth\"и \"Macbeth\"."}.
|
||||
{"This page allows to register an XMPP account in this XMPP server. Your JID (Jabber ID) will be of the form: username@server. Please read carefully the instructions to fill correctly the fields.","Тази страница позволява регистриране на XMPP профил на този сървър. Вашият JID (Jabber ID) ще бъде във формата: username@server. Моля, прочетете внимателно инструкциите, за да попълните правилно полетата."}.
|
||||
{"This page allows to unregister an XMPP account in this XMPP server.","Тази страница позволява премахване на XMPP профил от този сървър."}.
|
||||
@@ -524,7 +641,9 @@
|
||||
{"Thursday","Четвъртък"}.
|
||||
{"Time delay","Закъснение"}.
|
||||
{"Timed out waiting for stream resumption","Времето за изчакване за възобновяване на потока изтече"}.
|
||||
{"To get started, you need to install an app for your platform:","За да започнете, трябва да инсталирате приложение за вашата платформа:"}.
|
||||
{"To register, visit ~s","За да се регистрирате, посетете ~s"}.
|
||||
{"To start chatting, you need to enter your new account credentials into your chosen XMPP software.","За да започнете чат, трябва да въведете новите си идентификационни данни в избрания от вас XMPP софтуер."}.
|
||||
{"To ~ts","До ~ts"}.
|
||||
{"Token TTL","Токен TTL"}.
|
||||
{"Too many active bytestreams","Твърде много активни \"bytestreams\" потоци"}.
|
||||
@@ -557,6 +676,7 @@
|
||||
{"Updating the vCard is not supported by the vCard storage backend","Актуализирането на vCard не се поддържа от настройката за съхранение на vCard"}.
|
||||
{"Upgrade","Обнови"}.
|
||||
{"URL for Archived Discussion Logs","URL адрес за дневници на архивирани дискусии"}.
|
||||
{"Use a <em>QR code</em> scanner on your mobile device to scan the code below:","Използвайте скенер за <em>QR код</em> на вашето мобилно устройство, за да сканирате кода по-долу:"}.
|
||||
{"User already exists","Потребителят вече съществува"}.
|
||||
{"User (jid)","Потребител (jid)"}.
|
||||
{"User JID","Потребител JID"}.
|
||||
@@ -566,6 +686,9 @@
|
||||
{"User session not found","Потребителската сесия не е намерена"}.
|
||||
{"User session terminated","Потребителската сесия е прекратена"}.
|
||||
{"User ~ts","Потребител ~ts"}.
|
||||
{"Username invalid","Невалидно потребителско име"}.
|
||||
{"Username is reserved","Потребителското име е резервирано"}.
|
||||
{"Username","Потребителско име"}.
|
||||
{"Username:","Потребителско име:"}.
|
||||
{"Users are not allowed to register accounts so quickly","Не е разрешено потребителите да регистрират профили толкова бързо"}.
|
||||
{"Users Last Activity","Последна активност на потребителите"}.
|
||||
@@ -584,6 +707,7 @@
|
||||
{"Visitor","Посетител"}.
|
||||
{"Voice requests are disabled in this conference","Гласовите обаждания са деактивирани в тази конференция"}.
|
||||
{"Voice request","Заявка за гласово обаждане"}.
|
||||
{"Web client which allows to join the room anonymously","Уеб клиентът, който позволява анонимно свързване със стаята"}.
|
||||
{"Wednesday","Сряда"}.
|
||||
{"When a new subscription is processed and whenever a subscriber comes online","Когато се обработва нов абонамент и всеки път, когато абонат се появи онлайн"}.
|
||||
{"When a new subscription is processed","Когато се обработва нов абонамент"}.
|
||||
@@ -601,6 +725,7 @@
|
||||
{"Wrong parameters in the web formulary","Грешни параметри в уеб формуляра"}.
|
||||
{"Wrong xmlns","Грешен xmlns"}.
|
||||
{"XMPP Account Registration","Регистриране на XMPP профил"}.
|
||||
{"XMPP client for Haiku","XMPP клиент за Haiku"}.
|
||||
{"XMPP Domains","XMPP домейни"}.
|
||||
{"XMPP Show Value of Away","XMPP покажи стойност на Отсъства"}.
|
||||
{"XMPP Show Value of Chat","XMPP покажи стойност на Чат"}.
|
||||
@@ -610,8 +735,17 @@
|
||||
{"You are being removed from the room because of a system shutdown","Премахнати сте от стаята поради изключване на системата"}.
|
||||
{"You are not allowed to send private messages","Нямате право да изпращате лични съобщения"}.
|
||||
{"You are not joined to the channel","Не сте присъединени към канала"}.
|
||||
{"You can connect to {{ site_name }} using any XMPP-compatible software. If your preferred software is not listed above, you may still <a href=\"{{ registration_url }}\" tabindex='{{ tabidx }}'>register an account manually</a>.","Можете да се свържете с {{ site_name }}, използвайки всеки XMPP-съвместим софтуер. Ако предпочитаният от вас софтуер не е посочен по-горе, все още можете <a href=\"{{ registration_url }}\" tabindex='{{ tabidx }}'>да регистрирате акаунт ръчно</a>."}.
|
||||
{"You can later change your password using an XMPP client.","По-късно можете да промените паролата си с помощта на XMPP клиент."}.
|
||||
{"You can now set up {{ app_name }} and connect it to your new account.","Вече можете да настроите {{ app_name }} и да го свържете с вашия нов профил."}.
|
||||
{"You can start chatting right away with {{ app_name }}. Let's get started!","Можете да започнете да чатите веднага с {{ app_name }}. Да започваме!"}.
|
||||
{"You can transfer this invite to your mobile device by scanning a code with your camera.","Можете да прехвърлите тази покана на мобилното си устройство, като сканирате код с камерата на вашето устройство."}.
|
||||
{"You have been banned from this room","Достъпът ви до тази стая е забранен"}.
|
||||
{"You have been invited to chat on {{ site_name }}, part of the XMPP secure and decentralized messaging network.","Поканени сте да чатите в {{ site_name }}, част от защитената и децентрализирана мрежа за съобщения XMPP."}.
|
||||
{"You have been invited to chat on <strong>{{ site_name }}</strong>, part of the XMPP secure and decentralized messaging network.","Поканени сте да чатите в <strong>{{ site_name }}</strong>, част от защитената и децентрализирана мрежа за съобщения XMPP."}.
|
||||
{"You have been invited to chat with <strong>{{ inviter }}</strong> on {{ site_name }}, part of the XMPP secure and decentralized messaging network.","Поканени сте да чатите с <strong>{{ inviter }}</strong> на {{ site_name }}, част от защитената и децентрализирана мрежа за съобщения XMPP."}.
|
||||
{"You have been invited to chat with <strong>{{ inviter }}</strong> on <strong>{{ site_name }}</strong>, part of the XMPP secure and decentralized messaging network.","Поканени сте да чатите с <strong>{{ inviter }}</strong>на <strong>{{ site_name }}</strong>, част от защитената и децентрализирана мрежа за съобщения XMPP."}.
|
||||
{"You have created an account on <strong>{{ site_name }}</strong>.","Създадохте профил в <strong>{{ site_name }}</strong>."}.
|
||||
{"You have joined too many conferences","Присъединили сте се към твърде много конференции"}.
|
||||
{"You must fill in field \"Nickname\" in the form","Трябва да попълните полето \"Псевдоним\" във формата"}.
|
||||
{"You need a client that supports x:data and CAPTCHA to register","За да се регистрирате Ви е нужен клиент, който поддържа x:data и CAPTCHA"}.
|
||||
@@ -619,7 +753,8 @@
|
||||
{"You need an x:data capable client to search","За да търсите, Ви е нужен клиент, който поддържа x:data"}.
|
||||
{"Your active privacy list has denied the routing of this stanza.","Вашият активен списък за поверителност отказа маршрутизирането на тази строфа."}.
|
||||
{"Your contact offline message queue is full. The message has been discarded.","Достигнат е максималният брой офлайн съобщения за вашия контакт. Съобщението е отхвърлено."}.
|
||||
{"Your password is stored encrypted on the server and will not be accessible after you close this page. Keep it safe and never share it with anyone.","Вашата парола се съхранява криптирана на сървъра и няма да бъде достъпна, след като затворите тази страница. Пазете я в безопасност и не я споделяйте с никого."}.
|
||||
{"Your subscription request and/or messages to ~s have been blocked. To unblock your subscription request, visit ~s","Вашата заявка за абонамент и/или съобщения до ~s са блокирани. За да отблокирате заявката си за абонамент, посетете ~s"}.
|
||||
{"Your XMPP account was successfully registered.","Вашият XMPP акаунт, беше регистриран успешно."}.
|
||||
{"Your XMPP account was successfully unregistered.","Вашият XMPP акаунт, беше успешно дерегистриран."}.
|
||||
{"Your XMPP account was successfully registered.","Вашият XMPP профил, беше регистриран успешно."}.
|
||||
{"Your XMPP account was successfully unregistered.","Вашият XMPP профил, беше успешно премахнат."}.
|
||||
{"You're not allowed to create nodes","Нямате право да създавате нодове"}.
|
||||
|
||||
@@ -4,22 +4,34 @@
|
||||
%% https://docs.ejabberd.im/developer/extending-ejabberd/localization/
|
||||
|
||||
{" (Add * to the end of field to match substring)"," (Afegix * al final d'un camp per a buscar subcadenes)"}.
|
||||
{"{{ app_name }} already installed?","Ja està instal·lat {{ app_name }}?"}.
|
||||
{" has set the subject to: "," ha posat el tema: "}.
|
||||
{"{{ inviter }} has invited you to connect!","{{ inviter }} t'ha invitat a connectar-te!"}.
|
||||
{"# participants","# participants"}.
|
||||
{"A description of the node","Una descripció del node"}.
|
||||
{"A friendly name for the node","Un nom per al node"}.
|
||||
{"A fully-featured desktop chat client for Windows and Linux.","Un client de xat molt complet d'escriptori per a Windows i Linux."}.
|
||||
{"A lean Jabber/XMPP client for Android. It aims at usability, low overhead and security, and works on low-end Android devices starting with Android 4.0.","Un client Jabber/XMPP lleuger per a Android. Està orientat a la usabilitat, la seguretat i el baix consum, i funciona en aparats Android antics a partir de Android 4.0."}.
|
||||
{"A lightweight and powerful XMPP client for iPhone and iPad. It provides an easy way to talk and share moments with your friends.","Un client XMPP lleuger i potent per a iPhone e iPad. Proporciona una forma senzilla de xarrar i compartir moments amb les teues amistats."}.
|
||||
{"A modern open-source chat client for iPhone and iPad. It is easy to use and has a clean user interface.","Un client de xat modern i de software lliure per a iPhone i iPad. Es simple d'usar i te una interfície d'usuari neta."}.
|
||||
{"A modern open-source chat client for Mac. It is easy to use and has a clean user interface.","Un client de xat modern i de software lliure per a Mac. Es simple d'usar i te una interfície d'usuari neta."}.
|
||||
{"A modern open-source chat client for the desktop. It focuses on providing a clean and reliable Jabber/XMPP experience while having your privacy in mind.","Un client de xat modern i de software lliure per a l'escriptori. Està enfocat en proporcionar una experiència Jabber/XMPP neta i comfiable, mentre mantenes la teva privacitat en ment."}.
|
||||
{"A password is required to enter this room","Es necessita contrasenya per a entrar en aquesta sala"}.
|
||||
{"A Web Page","Una Pàgina Web"}.
|
||||
{"Accept invite using {{ app_name }}","Accepta la invitació usant {{ app_name }}"}.
|
||||
{"Accept","Acceptar"}.
|
||||
{"Access denied by service policy","Accés denegat per la política del servei"}.
|
||||
{"Access model","Model d'Accés"}.
|
||||
{"Account doesn't exist","El compte no existeix"}.
|
||||
{"Action on user","Acció en l'usuari"}.
|
||||
{"Add a hat to a user","Afegir un barret a un usuari"}.
|
||||
{"Add {{ inviter }} to your contact list","Afegir {{ inviter }} a la teua llista de contactes"}.
|
||||
{"Add Contact","Afegir Contacte"}.
|
||||
{"Add User","Afegir usuari"}.
|
||||
{"Administration of ","Administració de "}.
|
||||
{"Administration","Administració"}.
|
||||
{"Administrator privileges required","Es necessita tenir privilegis d'administrador"}.
|
||||
{"After clicking the button you will be taken to {{ app_name }} to finish setting up your new {{ site_name }} account.","Al polsar el boto, s'obrirà {{ app_name }} per a terminar de configurar el teu compte a {{ site_name }}."}.
|
||||
{"After successfully installing {{ app_name }}, come back to this page and <strong>continue with Step 2</strong>.","Després d'instal·lar correctament {{ app_name }}, torna ací i <strong>continua amb el Pas 2</strong>."}.
|
||||
{"All activity","Tota l'activitat"}.
|
||||
{"All Users","Tots els usuaris"}.
|
||||
{"Allow subscription","Permetre subscripció"}.
|
||||
@@ -47,8 +59,11 @@
|
||||
{"Anyone with Voice","Qualsevol amb Veu"}.
|
||||
{"Anyone","Qualsevol"}.
|
||||
{"API Commands","Comandaments API"}.
|
||||
{"Apple Store Logo","Logo de la Apple Store"}.
|
||||
{"April","Abril"}.
|
||||
{"Arguments","Arguments"}.
|
||||
{"As a final reminder, your account details are shown below:","Com a recordatori final, el detalls del teu compte es mostren ací:"}.
|
||||
{"Assign a hat to a user","Asignar un barret a un usuari"}.
|
||||
{"Attribute 'channel' is required for this request","L'atribut 'channel' és necessari per a aquesta petició"}.
|
||||
{"Attribute 'id' is mandatory for MIX messages","L'atribut 'id' es necessari per a missatges MIX"}.
|
||||
{"Attribute 'jid' is not allowed here","L'atribut 'jid' no està permès ací"}.
|
||||
@@ -61,6 +76,9 @@
|
||||
{"Backup to File at ","Desar còpia de seguretat a fitxer en "}.
|
||||
{"Backup","Guardar còpia de seguretat"}.
|
||||
{"Bad format","Format erroni"}.
|
||||
{"BAD REQUEST","MALA PETICIÓ"}.
|
||||
{"Beagle IM by Tigase, Inc. is a lightweight and powerful XMPP client for macOS.","Beagle IM de Tigase, Inc. es un client XMPP lleuger i poderós per a macOS."}.
|
||||
{"Beagle IM Logo","Logo de Beagle IM"}.
|
||||
{"Birthday","Aniversari"}.
|
||||
{"Both the username and the resource are required","Es requereixen tant el nom d'usuari com el recurs"}.
|
||||
{"Bytestream already activated","El Bytestream ja està activat"}.
|
||||
@@ -77,6 +95,7 @@
|
||||
{"Channel JID","JID del Canal"}.
|
||||
{"Channels","Canals"}.
|
||||
{"Characters not allowed:","Caràcters no permesos:"}.
|
||||
{"Chat address (JID)","Direcció de xarrar (JID)"}.
|
||||
{"Chatroom configuration modified","Configuració de la sala de xat modificada"}.
|
||||
{"Chatroom is created","La sala s'ha creat"}.
|
||||
{"Chatroom is destroyed","La sala s'ha destruït"}.
|
||||
@@ -84,30 +103,50 @@
|
||||
{"Chatroom is stopped","La sala s'ha aturat"}.
|
||||
{"Chatrooms","Sales de xat"}.
|
||||
{"Choose a username and password to register with this server","Tria nom d'usuari i contrasenya per a registrar-te en aquest servidor"}.
|
||||
{"Choose a username, this will become the first part of your new chat address.","Elegeix un nom de compte, que serà la primera part de la direcció del teu compte."}.
|
||||
{"Choose storage type of tables","Selecciona el tipus d'almacenament de les taules"}.
|
||||
{"Choose whether to approve this entity's subscription.","Tria si aproves aquesta entitat de subscripció."}.
|
||||
{"City","Ciutat"}.
|
||||
{"Click the button to open the Dino website where you can download and install it on your PC.","Polsa el botó per a obrir la pàgina web de Dino on podràs descarregar el programa per a instalarlo al teu ordinador."}.
|
||||
{"Client acknowledged more stanzas than sent by server","El client ha reconegut més paquets dels que ha enviat el servidor"}.
|
||||
{"Close","Tancar"}.
|
||||
{"Clustering","Clustering"}.
|
||||
{"Commands","Comandaments"}.
|
||||
{"Conference room does not exist","La sala de conferències no existeix"}.
|
||||
{"Configuration of room ~s","Configuració de la sala ~s"}.
|
||||
{"Configuration","Configuració"}.
|
||||
{"Congratulations!","Enhorabona!"}.
|
||||
{"Contact Addresses (normally, room owner or owners)","Adreces de contacte (normalment, propietaris de la sala)"}.
|
||||
{"Contacts","Contactes"}.
|
||||
{"Conversations is a Jabber/XMPP client for Android 6.0+ smartphones that has been optimized to provide a unique mobile experience.","Conversations es un client Jabber/XMPP per a mòbils Android 6.0+ que ha sigut optimitzat per a proporcionar una experiència mòbil unica."}.
|
||||
{"Conversations Logo","Logo de Conversations"}.
|
||||
{"Country","Pais"}.
|
||||
{"Create a Hat","Crear un barret"}.
|
||||
{"Create Account","Crear un Compte"}.
|
||||
{"Create an account","Crear un compte"}.
|
||||
{"Creating an account will allow to communicate with other people on <strong>{{ site_name }}</strong> and other services on the XMPP network.","Crear un compte et permetrà comunicar-te amb altra gent a <strong>{{ site_name }}</strong> i a altres serveis de la xarxa XMPP."}.
|
||||
{"Creating an account will allow to communicate with <strong>{{ inviter }}</strong> and other people on <strong>{{ site_name }}</strong> and other services on the XMPP network.","Crear un compte e permetrà comunicar-te amb <strong>{{ inviter }}</strong> i altra gent a <strong>{{ site_name }}</strong> i a altres serveis de la xarxa XMPP."}.
|
||||
{"Current Discussion Topic","Assumpte de discussió actual"}.
|
||||
{"Database failure","Error a la base de dades"}.
|
||||
{"Database Tables Configuration at ","Configuració de la base de dades en "}.
|
||||
{"Database","Base de dades"}.
|
||||
{"December","Decembre"}.
|
||||
{"Default users as participants","Els usuaris són participants per defecte"}.
|
||||
{"Delete message of the day on all hosts","Elimina el missatge del dis de tots els hosts"}.
|
||||
{"Delete message of the day on all hosts","Elimina el missatge del dia de tots els dominis"}.
|
||||
{"Delete message of the day","Eliminar el missatge del dia"}.
|
||||
{"Delete User","Eliminar Usuari"}.
|
||||
{"Deliver event notifications","Entrega de notificacions d'events"}.
|
||||
{"Deliver payloads with event notifications","Enviar payloads junt a les notificacions d'events"}.
|
||||
{"Destroy a Hat","Destruir un barret"}.
|
||||
{"Dino Logo","Logo de Dino"}.
|
||||
{"Disable User","Deshabilitar un Usuari"}.
|
||||
{"Disc only copy","Còpia sols en disc"}.
|
||||
{"Don't tell your password to anybody, not even the administrators of the XMPP server.","No li donis la teva contrasenya a ningú, ni tan sols als administradors del servidor XMPP."}.
|
||||
{"Download and install {{ app_name }} below:","Descarrega e instal·la {{ app_name }} ací baix:"}.
|
||||
{"Download Dino for Linux","Descarrega Dino per a Linux"}.
|
||||
{"Download from Mac App Store","Descarrega de la Tenda d'Apps de Mac"}.
|
||||
{"Download Gajim","Descarregar Gajim"}.
|
||||
{"Download Renga for Haiku","Descarrega Renga per a Haiku"}.
|
||||
{"Dump Backup to Text File at ","Exporta còpia de seguretat a fitxer de text en "}.
|
||||
{"Dump to Text File","Exportar a fitxer de text"}.
|
||||
{"Duplicated groups are not allowed by RFC6121","No estan permesos els grups duplicats al RFC6121"}.
|
||||
@@ -129,6 +168,7 @@
|
||||
{"Enable message archiving","Activar l'emmagatzematge de missatges"}.
|
||||
{"Enabling push without 'node' attribute is not supported","No està suportat activar Push sense l'atribut 'node'"}.
|
||||
{"End User Session","Finalitzar Sesió d'Usuari"}.
|
||||
{"Enter a secure password that you do not use anywhere else.","Introdueix una contrasenya segura que no estiguis usant en cap altre lloc."}.
|
||||
{"Enter nickname you want to register","Introdueix el sobrenom que vols registrar"}.
|
||||
{"Enter path to backup file","Introdueix ruta al fitxer de còpia de seguretat"}.
|
||||
{"Enter path to jabberd14 spool dir","Introdueix la ruta al directori de jabberd14 spools"}.
|
||||
@@ -139,7 +179,7 @@
|
||||
{"Exclude Jabber IDs from CAPTCHA challenge","Excloure Jabber IDs de la comprovació CAPTCHA"}.
|
||||
{"Export all tables as SQL queries to a file:","Exporta totes les taules a un fitxer SQL:"}.
|
||||
{"Export data of all users in the server to PIEFXIS files (XEP-0227):","Exportar dades de tots els usuaris del servidor a arxius PIEFXIS (XEP-0227):"}.
|
||||
{"Export data of users in a host to PIEFXIS files (XEP-0227):","Exportar dades d'usuaris d'un host a arxius PIEFXIS (XEP-0227):"}.
|
||||
{"Export data of users in a host to PIEFXIS files (XEP-0227):","Exportar dades d'usuaris d'un domini a arxius PIEFXIS (XEP-0227):"}.
|
||||
{"External component failure","Error al component extern"}.
|
||||
{"External component timeout","Temps esgotat al component extern"}.
|
||||
{"Failed to activate bytestream","Errada al activar bytestream"}.
|
||||
@@ -149,6 +189,7 @@
|
||||
{"Failed to process option '~s'","Ha fallat el processat de la opció '~s'"}.
|
||||
{"Family Name","Cognom"}.
|
||||
{"FAQ Entry","Entrada a la FAQ"}.
|
||||
{"F-Droid Store Logo","Logo de la F-Droid Store"}.
|
||||
{"February","Febrer"}.
|
||||
{"File larger than ~w bytes","El fitxer es més gran que ~w bytes"}.
|
||||
{"Fill in the form to search for any matching XMPP User","Emplena camps per a buscar usuaris XMPP que concorden"}.
|
||||
@@ -157,27 +198,44 @@
|
||||
{"Full List of Room Admins","Llista completa de administradors de la sala"}.
|
||||
{"Full List of Room Owners","Llista completa de propietaris de la sala"}.
|
||||
{"Full Name","Nom complet"}.
|
||||
{"Gajim Logo","Logo de Gajim"}.
|
||||
{"Get List of Active Users","Obté la llista d'usuaris actius"}.
|
||||
{"Get List of Disabled Users","Obté la llista d'usuaris deshabilitats"}.
|
||||
{"Get List of Idle Users","Obté la llista d'usuaris inactius"}.
|
||||
{"Get List of Online Users","Obté la llista d'usuaris en línia"}.
|
||||
{"Get List of Registered Users","Obté la llista d'usuaris registrats"}.
|
||||
{"Get Number of Active Users","Obtenir Número d'Usuaris Actius"}.
|
||||
{"Get Number of Disabled Users","Obtenir Número d'Usuaris Deshabilitats"}.
|
||||
{"Get Number of Idle Users","Obtenir Número d'Usuaris Inactius"}.
|
||||
{"Get Number of Online Users","Obtenir Número d'Usuaris Connectats"}.
|
||||
{"Get Number of Registered Users","Obtenir Número d'Usuaris Registrats"}.
|
||||
{"Get Pending","Obtenir Pendents"}.
|
||||
{"Get started","Comencem"}.
|
||||
{"Get User Last Login Time","Obtenir la última connexió d'Usuari"}.
|
||||
{"Get User Roster","Obtenir llista de contactes de l'usuari"}.
|
||||
{"Get User Statistics","Obtenir Estadístiques d'Usuari"}.
|
||||
{"Given Name","Nom propi"}.
|
||||
{"Google Play Store Logo","Logo de la Google Play Store"}.
|
||||
{"Grant voice to this person?","Concedir veu a aquesta persona?"}.
|
||||
{"has been banned","ha sigut bloquejat"}.
|
||||
{"has been kicked because of a system shutdown","ha sigut expulsat perquè el sistema va a apagar-se"}.
|
||||
{"has been kicked because of an affiliation change","ha sigut expulsat a causa d'un canvi d'afiliació"}.
|
||||
{"has been kicked because the room has been changed to members-only","ha sigut expulsat perquè la sala ara és només per a membres"}.
|
||||
{"has been kicked","ha sigut expulsat"}.
|
||||
{"Hash computed from the list of hats available in a room","Hash computat de la llista de barrets disponibles a una sala"}.
|
||||
{"Hash of the vCard-temp avatar of this room","Hash del avatar a vCard-temp d'esta sala"}.
|
||||
{"Hat hue","To de color del barret"}.
|
||||
{"Hat title","Títol del barret"}.
|
||||
{"Hat URI","URI del barret"}.
|
||||
{"Hats limit exceeded","El límit de tràfic ha sigut sobrepassat"}.
|
||||
{"Host unknown","Host desconegut"}.
|
||||
{"Hide","Amagar"}.
|
||||
{"Hint","Sugeriment"}.
|
||||
{"Host unknown","Domini desconegut"}.
|
||||
{"Hostname invalid","Nom de domini no vàlid"}.
|
||||
{"HTTP File Upload","HTTP File Upload"}.
|
||||
{"Idle connection","Connexió sense us"}.
|
||||
{"If you already have {{ app_name }} installed, we recommend that you continue the account creation process using the app by clicking on the button below:","Si ja tens instal·lat {{ app_name }}, et recomanem que continues la creació del teu compte usant eixa app, polsa el boto:"}.
|
||||
{"If you don't have an XMPP client installed yet, here's a list of suitable clients for your platform.","Si encara no tens un client XMPP instal·lat, mira esta llista de clients disponibles per a la teva plataforma."}.
|
||||
{"If you don't see the CAPTCHA image here, visit the web page.","Si no veus la imatge CAPTCHA açí, visita la pàgina web."}.
|
||||
{"Import Directory","Importar directori"}.
|
||||
{"Import File","Importar fitxer"}.
|
||||
@@ -196,6 +254,7 @@
|
||||
{"Incorrect value of 'action' in data form","Valor incorrecte de 'action' al formulari de dades"}.
|
||||
{"Incorrect value of 'path' in data form","Valor incorrecte de 'path' al formulari de dades"}.
|
||||
{"Installed Modules:","Mòduls instal·lats:"}.
|
||||
{"Installed ok? Great! <strong>Click or tap the button below</strong> to accept your invite and continue with your account setup:","S'ha instal·lat correctament? Perfecte! <strong>Polsa en el següent boto</strong> per a acceptar l'invitació i continuar preparant el teu compte:"}.
|
||||
{"Install","Instal·lar"}.
|
||||
{"Insufficient privilege","Privilegi insuficient"}.
|
||||
{"Internal server error","Error intern del servidor"}.
|
||||
@@ -203,6 +262,11 @@
|
||||
{"Invalid node name","Nom de node no vàlid"}.
|
||||
{"Invalid 'previd' value","Valor no vàlid de 'previd'"}.
|
||||
{"Invitations are not allowed in this conference","Les invitacions no estan permeses en aquesta sala de conferència"}.
|
||||
{"Invite expired","La invitació ha expirat"}.
|
||||
{"Invite Expired","La Invitació ha Expirat"}.
|
||||
{"Invite to {{ site_name }}","Invitació a {{ site_name }}"}.
|
||||
{"Invite User","Invitar Usuari"}.
|
||||
{"Invite","Invitar"}.
|
||||
{"IP addresses","Adreça IP"}.
|
||||
{"is now known as","ara es conegut com"}.
|
||||
{"It is not allowed to send error messages to the room. The participant (~s) has sent an error message (~s) and got kicked from the room","No està permés enviar missatges d'error a la sala. El participant (~s) ha enviat un missatge d'error (~s) i ha sigut expulsat de la sala"}.
|
||||
@@ -212,6 +276,7 @@
|
||||
{"January","Gener"}.
|
||||
{"JID normalization denied by service policy","S'ha denegat la normalització del JID per política del servei"}.
|
||||
{"JID normalization failed","Ha fallat la normalització del JID"}.
|
||||
{"Join {{ site_name }} with {{ app_name }}","Uneix-te a {{ site_name }} amb {{ app_name }}"}.
|
||||
{"Joined MIX channels of ~ts","Canals MIX units de ~ts"}.
|
||||
{"Joined MIX channels:","Canals MIX units:"}.
|
||||
{"joins the room","entra a la sala"}.
|
||||
@@ -223,10 +288,13 @@
|
||||
{"Last message","Últim missatge"}.
|
||||
{"Last month","Últim mes"}.
|
||||
{"Last year","Últim any"}.
|
||||
{"Launch {{ app_name }} and sign in using your account credentials.","Inicia {{ app_name }} i entra al compte usant les teves credencials."}.
|
||||
{"Launch Beagle IM, and select \\'Yes\\' to add a new account. Click the \\'+\\' button under the empty account list and then enter your credentials.","Inicia Beagle IM, i selecciona \\'Sí\\' per a afegir un nou compte. Polsa el botó \\'+\\' baix la llista de comptes buida i ja podràs introduir les teues credencials."}.
|
||||
{"Least significant bits of SHA-256 hash of text should equal hexadecimal label","Els bits menys significants del hash SHA-256 del text deurien ser iguals a l'etiqueta hexadecimal"}.
|
||||
{"leaves the room","surt de la sala"}.
|
||||
{"List of users with hats","Llista d'usuaris amb barrets"}.
|
||||
{"List of Hats","Llista de barrets"}.
|
||||
{"List users with hats","Llista d'usuaris amb barrets"}.
|
||||
{"Log in via web","Entrar usant la web"}.
|
||||
{"Logged Out","Desconectat"}.
|
||||
{"Logging","Registre"}.
|
||||
{"Make participants list public","Crear una llista de participants pública"}.
|
||||
@@ -243,9 +311,11 @@
|
||||
{"Max payload size in bytes","Màxim tamany del payload en bytes"}.
|
||||
{"Maximum file size","Mida màxima de fitxer"}.
|
||||
{"Maximum Number of History Messages Returned by Room","Numero màxim de missatges de l'historia que retorna la sala"}.
|
||||
{"Maximum number of invites reached","Ja has arribat al número màxim d'invitacions"}.
|
||||
{"Maximum number of items to persist","Número màxim d'elements que persistixen"}.
|
||||
{"Maximum Number of Occupants","Número màxim d'ocupants"}.
|
||||
{"May","Maig"}.
|
||||
{"Members are allowed to invite others","Els membres poden invitar a altres"}.
|
||||
{"Membership is required to enter this room","Necessites ser membre d'aquesta sala per a poder entrar"}.
|
||||
{"Memorize your password, or write it in a paper placed in a safe place. In XMPP there isn't an automated way to recover your password if you forget it.","Memoritza la teva contrasenya, o escriu-la en un paper guardat a un lloc segur. A XMPP no hi ha una forma automatitzada de recuperar la teva contrasenya si la oblides."}.
|
||||
{"Mere Availability in XMPP (No Show Value)","Simplement disponibilitat a XMPP (sense valor de 'show')"}.
|
||||
@@ -260,6 +330,7 @@
|
||||
{"Moderator","Moderador"}.
|
||||
{"Moderators Only","Només moderadors"}.
|
||||
{"Module failed to handle the query","El modul ha fallat al gestionar la petició"}.
|
||||
{"Monal Logo","Logo de Monal"}.
|
||||
{"Monday","Dilluns"}.
|
||||
{"Multicast","Multicast"}.
|
||||
{"Multiple <item/> elements are not allowed by RFC6121","No estan permesos múltiples elements <item/> per RFC6121"}.
|
||||
@@ -314,18 +385,21 @@
|
||||
{"None","Cap"}.
|
||||
{"Not allowed","No permès"}.
|
||||
{"Not Found","No Trobat"}.
|
||||
{"NOT FOUND","NO TROBAT"}.
|
||||
{"Not subscribed","No subscrit"}.
|
||||
{"Notify subscribers when items are removed from the node","Notificar subscriptors quan els elements són eliminats del node"}.
|
||||
{"Notify subscribers when the node configuration changes","Notificar subscriptors quan canvia la configuració del node"}.
|
||||
{"Notify subscribers when the node is deleted","Notificar subscriptors quan el node és eliminat"}.
|
||||
{"November","Novembre"}.
|
||||
{"Number of active users","Número d'usuaris actius"}.
|
||||
{"Number of answers required","Número de respostes requerides"}.
|
||||
{"Number of disabled users","Número d'Usuaris Deshabilitats"}.
|
||||
{"Number of idle users","Número d'usuaris inactius"}.
|
||||
{"Number of occupants","Número d'ocupants"}.
|
||||
{"Number of Offline Messages","Número de missatges offline"}.
|
||||
{"Number of online users","Número d'usuaris connectats"}.
|
||||
{"Number of registered users","Número d'Usuaris Registrats"}.
|
||||
{"Number of seconds after which to automatically purge items, or `max` for no specific limit other than a server imposed maximum","Número de segons després dels quals es purgaran automàticament elements, o `max` per a no tindre altre límit més que el màxim imposat pel servidor"}.
|
||||
{"Occupants are allowed to invite others","Els ocupants poden invitar a altres"}.
|
||||
{"Occupants are allowed to query others","Els ocupants poden enviar peticions a altres"}.
|
||||
{"Occupants May Change the Subject","Els ocupants poden canviar el Tema"}.
|
||||
{"October","Octubre"}.
|
||||
@@ -348,12 +422,15 @@
|
||||
{"Only service administrators are allowed to send service messages","Sols els administradors del servei tenen permís per a enviar missatges de servei"}.
|
||||
{"Only those on a whitelist may associate leaf nodes with the collection","Només qui estiga a una llista blanca pot associar nodes fulla amb la col·lecció"}.
|
||||
{"Only those on a whitelist may subscribe and retrieve items","Només qui estiga a una llista blanca pot subscriure's i recuperar elements"}.
|
||||
{"Open the app","Obrir l'app"}.
|
||||
{"Organization Name","Nom de la organizació"}.
|
||||
{"Organization Unit","Unitat de la organizació"}.
|
||||
{"Other Modules Available:","Altres mòduls disponibles:"}.
|
||||
{"Other software","Altres programes"}.
|
||||
{"Outgoing s2s Connections","Connexions s2s d'eixida"}.
|
||||
{"Owner privileges required","Es requerixen privilegis de propietari de la sala"}.
|
||||
{"Packet relay is denied by service policy","S'ha denegat el reenviament del paquet per política del servei"}.
|
||||
{"Page navigation","Navegació de pàgina"}.
|
||||
{"Participant ID","ID del Participant"}.
|
||||
{"Participant","Participant"}.
|
||||
{"Password Verification","Verificació de la Contrasenya"}.
|
||||
@@ -369,6 +446,8 @@
|
||||
{"Ping query is incorrect","La petició de Ping es incorrecta"}.
|
||||
{"Ping","Ping"}.
|
||||
{"Please note that these options will only backup the builtin Mnesia database. If you are using the ODBC module, you also need to backup your SQL database separately.","Recorda que aquestes opcions només fan còpia de seguretat de la base de dades Mnesia. Si estàs utilitzant el mòdul d'ODBC també deus de fer una còpia de seguretat de la base de dades de SQL a part."}.
|
||||
{"Please provide a password! Minimum length: {{ password_min_length }}","Per favor proporciona una contrasenya ! Llargària minima: {{ password_min_length }}"}.
|
||||
{"Please provide a valid username!","Per favor proporciona un nom vàlid per al teu compte!"}.
|
||||
{"Please, wait for a while before sending new voice request","Si us plau, espera una mica abans d'enviar una nova petició de veu"}.
|
||||
{"Pong","Pong"}.
|
||||
{"Possessing 'ask' attribute is not allowed by RFC6121","Posseir l'atribut 'ask' no està permès per RFC6121"}.
|
||||
@@ -378,6 +457,7 @@
|
||||
{"Previous session PID has exited","El procés de la sessió prèvia ha sortit"}.
|
||||
{"Previous session PID is dead","El procés de la sessió prèvia està mort"}.
|
||||
{"Previous session timed out","La sessió prèvia ha caducat"}.
|
||||
{"Previous","Anterior"}.
|
||||
{"private, ","privat, "}.
|
||||
{"Public","Public"}.
|
||||
{"Publish model","Model de publicació"}.
|
||||
@@ -395,11 +475,18 @@
|
||||
{"Receive notification of new items only","Rebre notificació només de nous elements"}.
|
||||
{"Receive notification of new nodes only","Rebre notificació només de nous nodes"}.
|
||||
{"Recipient is not in the conference room","El receptor no està en la sala de conferència"}.
|
||||
{"Re-Enable User","Rehabilitar usuari"}.
|
||||
{"Register an XMPP account","Registrar un compte XMPP"}.
|
||||
{"Register on {{ site_name }}","Registrar a {{ site_name }}"}.
|
||||
{"Register","Registrar"}.
|
||||
{"Registration error","Error al fer el registre"}.
|
||||
{"Registration Error","Error al fer el Registre"}.
|
||||
{"Registration Form","Formulari de Registre"}.
|
||||
{"Registration Success","Registre completat correctament"}.
|
||||
{"Remote copy","Còpia remota"}.
|
||||
{"Remove a hat from a user","Eliminar un barret d'un usuari"}.
|
||||
{"Remove User","Eliminar usuari"}.
|
||||
{"Renga Logo","Logo de Renga"}.
|
||||
{"Replaced by new connection","Reemplaçat per una nova connexió"}.
|
||||
{"Request has timed out","La petició ha caducat"}.
|
||||
{"Request is ignored","La petició ha sigut ignorada"}.
|
||||
@@ -425,29 +512,39 @@
|
||||
{"Roster size","Mida de la llista"}.
|
||||
{"Running Nodes","Nodes funcionant"}.
|
||||
{"~s invites you to the room ~s","~s et convida a la sala ~s"}.
|
||||
{"Sad person holding empty box","Persona trista agafant una caixa buida"}.
|
||||
{"Saturday","Dissabte"}.
|
||||
{"Scan invite code","Escaneja el codi d'invitació"}.
|
||||
{"Scan with mobile device","Escanejar amb el mòbil"}.
|
||||
{"Search from the date","Buscar des de la data"}.
|
||||
{"Search Results for ","Resultats de la búsqueda "}.
|
||||
{"Search the text","Buscar el text"}.
|
||||
{"Search until the date","Buscar fins la data"}.
|
||||
{"Search users in ","Cerca usuaris en "}.
|
||||
{"Send announcement to all online users on all hosts","Enviar anunci a tots els usuaris connectats a tots els hosts"}.
|
||||
{"Select","Seleccionar"}.
|
||||
{"Send announcement to all online users on all hosts","Enviar anunci a tots els usuaris connectats a tots els dominis"}.
|
||||
{"Send announcement to all online users","Enviar anunci a tots els usuaris connectats"}.
|
||||
{"Send announcement to all users on all hosts","Enviar anunci a tots els usuaris de tots els hosts"}.
|
||||
{"Send announcement to all users on all hosts","Enviar anunci a tots els usuaris de tots els dominis"}.
|
||||
{"Send announcement to all users","Enviar anunci a tots els usuaris"}.
|
||||
{"Send this invite to your device","Envia esta invitació al teu dispositiu"}.
|
||||
{"September","Setembre"}.
|
||||
{"Server:","Servidor:"}.
|
||||
{"Service list retrieval timed out","L'intent de recuperar la llista de serveis ha caducat"}.
|
||||
{"Session state copying timed out","La copia del estat de la sessió ha caducat"}.
|
||||
{"Set message of the day and send to online users","Configurar el missatge del dia i enviar a tots els usuaris"}.
|
||||
{"Set message of the day on all hosts and send to online users","Escriure missatge del dia en tots els hosts i enviar-ho als usuaris connectats"}.
|
||||
{"Set message of the day on all hosts and send to online users","Escriure missatge del dia en tots els dominis i enviar-ho als usuaris connectats"}.
|
||||
{"Shared Roster Groups","Grups de contactes compartits"}.
|
||||
{"Show Integral Table","Mostrar Taula Integral"}.
|
||||
{"Show Occupants Join/Leave","Mostrar Entrades/Eixides dels Ocupants"}.
|
||||
{"Show Ordinary Table","Mostrar Taula Ordinaria"}.
|
||||
{"Showing apps for <span class='platform-name'>your current platform</span> only. You may also <a href='#' id='show-all-clients-button' tabindex=\"{{ tabidx }}\">view all apps.</a>","Mostrant apps només per a <span class='platform-name'>la teua plataforma actual</span>. Tambè pots <a href='#' id='show-all-clients-button' tabindex=\"{{ tabidx }}\">vore totes les apps.</a>"}.
|
||||
{"Show","Mostrar"}.
|
||||
{"Shut Down Service","Apager el Servei"}.
|
||||
{"Siskin IM Logo","Logo de Siskin IM"}.
|
||||
{"SOCKS5 Bytestreams","SOCKS5 Bytestreams"}.
|
||||
{"Some XMPP clients can store your password in the computer, but you should do this only in your personal computer for safety reasons.","Alguns clients XMPP poden emmagatzemar la teva contrasenya al ordinador, però només hauries de fer això al teu ordinador personal, per raons de seguretat."}.
|
||||
{"Sorry, it looks like this invite code has expired!","Perdona, però pareix que esta invitació ja ha expirat!"}.
|
||||
{"Sorry, there was a problem registering your account.","Perdona, però hi ha hagut un error creant el compte."}.
|
||||
{"Sources Specs:","Especificacions de Codi Font:"}.
|
||||
{"Specify the access model","Especificar el model d'accés"}.
|
||||
{"Specify the event message type","Especifica el tipus de missatge d'event"}.
|
||||
@@ -455,12 +552,21 @@
|
||||
{"Stanza id is not valid","L'identificador del paquet no es vàlid"}.
|
||||
{"Stanza ID","ID del paquet"}.
|
||||
{"Statically specify a replyto of the node owner(s)","Especifica estaticament una adreça on respondre al propietari del node"}.
|
||||
{"Step 1: Download and install {{ app_name }}","Pas 1: Descarrega e instal·la {{ app_name }}"}.
|
||||
{"Step 1: Install {{ app_name }}","Pas 1: Instal·la {{ app_name }}"}.
|
||||
{"Step 2: Activate your account","Pas 2: Activa el teu compte"}.
|
||||
{"Step 2: Connect {{ app_name }} to your new account","Pas 2: Connecta {{ app_name }} al teu nou compte"}.
|
||||
{"Stopped Nodes","Nodes parats"}.
|
||||
{"Store binary backup:","Guardar una còpia de seguretat binària:"}.
|
||||
{"Store plain text backup:","Guardar una còpia de seguretat en format de text pla:"}.
|
||||
{"Stream management is already enabled","L'administració de la connexió (stream management) ja està activada"}.
|
||||
{"Stream management is not enabled","L'administració de la conexió (stream management) no està activada"}.
|
||||
{"<strong>{{ site_name }}</strong> is part of XMPP, a secure and decentralized messaging network. To begin chatting using <strong>{{ app_name }}</strong> you need to first register an account.","<strong>{{ site_name }}</strong> és part de XMPP, una xarxa de missatgeria segura i descentralitzada. Per a començar a xarrar usant <strong>{{ app_name }}</strong> primer tens que registrar un compte."}.
|
||||
{"<strong>{{ site_name }}</strong> is part of XMPP, a secure and decentralized messaging network. To begin chatting you need to first register an account.","<strong>{{ site_name }}</strong> és part de la xarxa XMPP de missatgeria segura i descentralitzada. Per a començar a xarrar, primer tindries que crear-te un compte."}.
|
||||
{"<strong>No suitable software installed right now?</strong> You can also log in to your account through our online web chat!","<strong>No tens instal·lat cap programa compatible?</strong> També pots connectarte al teu compte amb el nostre xat web en linia!"}.
|
||||
{"<strong>Tip:</strong> You can open this invite on your mobile device by scanning a barcode with your camera.","<strong>Truquet:</strong> Pots obrir esta invitació al teu mòbil escanejant el codi amb la camera de fotos."}.
|
||||
{"Subject","Tema"}.
|
||||
{"Submit","Enviar"}.
|
||||
{"Submitted","Enviat"}.
|
||||
{"Subscriber Address","Adreça del Subscriptor"}.
|
||||
{"Subscribers may publish","Els subscriptors poden publicar"}.
|
||||
@@ -478,7 +584,7 @@
|
||||
{"The body text of the last received message","El contingut del text de l'ultim missatge rebut"}.
|
||||
{"The CAPTCHA is valid.","El CAPTCHA es vàlid."}.
|
||||
{"The CAPTCHA verification has failed","La verificació CAPTCHA ha fallat"}.
|
||||
{"The captcha you entered is wrong","El CAPTCHA que has proporcionat és incorrecte"}.
|
||||
{"The captcha you entered is wrong","El captcha que has proporcionat és incorrecte"}.
|
||||
{"The child nodes (leaf or collection) associated with a collection","El nodes fills (fulla o col·leccions) associats amb una col·lecció"}.
|
||||
{"The collections with which a node is affiliated","Les col.leccions amb les que un node està afiliat"}.
|
||||
{"The DateTime at which a leased subscription will end or has ended","La Data i Hora a la que una subscripció prestada terminarà o ha terminat"}.
|
||||
@@ -489,6 +595,9 @@
|
||||
{"The JIDs of those to contact with questions","Els JIDs a qui contactar amb preguntes"}.
|
||||
{"The JIDs of those with an affiliation of owner","Els JIDs de qui tenen una afiliació de propietaris"}.
|
||||
{"The JIDs of those with an affiliation of publisher","Els JIDs de qui tenen una afiliació de publicadors"}.
|
||||
{"The list of all active users","La llista de tots els usuaris actius"}.
|
||||
{"The list of all disabled users","La llista de tots els usuaris deshabilitats"}.
|
||||
{"The list of all idle users","La llista de tots els usuaris inactius"}.
|
||||
{"The list of all online users","La llista de tots els usuaris en línia"}.
|
||||
{"The list of all users","La llista de tots els usuaris"}.
|
||||
{"The list of JIDs that may associate leaf nodes with a collection","La llista de JIDs que poden associar nodes fulla amb una col·lecció"}.
|
||||
@@ -510,16 +619,20 @@
|
||||
{"The presence states for which an entity wants to receive notifications","El estats de presencia per als quals una entitat vol rebre notificacions"}.
|
||||
{"The query is only allowed from local users","La petició està permesa només d'usuaris locals"}.
|
||||
{"The query must not contain <item/> elements","La petició no pot contenir elements <item/>"}.
|
||||
{"The role","El rol"}.
|
||||
{"The room subject can be modified by participants","El tema de la sala pot modificar-lo els participants"}.
|
||||
{"The semantic type information of data in the node, usually specified by the namespace of the payload (if any)","La informació semàntica de les dades al node, usualment especificat pel espai de noms de la càrrega util (si n'hi ha)"}.
|
||||
{"The sender of the last received message","Qui ha enviat l'ultim missatge rebut"}.
|
||||
{"The stanza MUST contain only one <active/> element, one <default/> element, or one <list/> element","El paquet DEU contindre només un element <active/>, un element <default/>, o un element <list/>"}.
|
||||
{"The subscription identifier associated with the subscription request","L'identificador de subscripció associat amb la petició de subscripció"}.
|
||||
{"The token provided is either invalid or expired.","El token proporcionat no es vàlid o ja ha expirat."}.
|
||||
{"The URL of an XSL transformation which can be applied to payloads in order to generate an appropriate message body element.","La URL de uns transformació XSL que pot ser aplicada als payloads per a generar un element apropiat de contingut de missatge."}.
|
||||
{"The URL of an XSL transformation which can be applied to the payload format in order to generate a valid Data Forms result that the client could display using a generic Data Forms rendering engine","La URL de una transformació XSL que pot ser aplicada al format de payload per a generar un resultat valid de Data Forms, que el client puga mostrar usant un métode generic de Data Forms"}.
|
||||
{"There was an error changing the password: ","Hi ha hagut un error canviant la contrasenya: "}.
|
||||
{"There was an error creating the account: ","Hi ha hagut un error creant el compte: "}.
|
||||
{"There was an error deleting the account: ","Hi ha hagut un error esborrant el compte: "}.
|
||||
{"This button works only if you have the app installed already!","Aquest botó funciona només si ja tens la app instal·lada!"}.
|
||||
{"This is an invite from <strong>{{ inviter }}</strong> to connect and chat on the XMPP network. If you already have an XMPP client installed just press the button below!","Esta es una invitació de <strong>{{ inviter }}</strong> per a connectar i xarrar en la xarxa XMPP. Si ja tens un client XMPP instal·lat, ja pots polsar el boto de baix!"}.
|
||||
{"This is case insensitive: macbeth is the same that MacBeth and Macbeth.","Això no distingeix majúscules de minúscules: macbeth es el mateix que MacBeth i Macbeth."}.
|
||||
{"This page allows to register an XMPP account in this XMPP server. Your JID (Jabber ID) will be of the form: username@server. Please read carefully the instructions to fill correctly the fields.","Aquesta pàgina permet crear un compte XMPP en aquest servidor XMPP. El teu JID (Jabber ID; Identificador Jabber) tindrà aquesta forma: usuari@servidor. Si us plau, llegeix amb cura les instruccions per emplenar correctament els camps."}.
|
||||
{"This page allows to unregister an XMPP account in this XMPP server.","Aquesta pàgina permet esborrar un compte XMPP en aquest servidor XMPP."}.
|
||||
@@ -528,7 +641,9 @@
|
||||
{"Thursday","Dijous"}.
|
||||
{"Time delay","Temps de retard"}.
|
||||
{"Timed out waiting for stream resumption","Massa temps esperant que es resumisca la connexió"}.
|
||||
{"To get started, you need to install an app for your platform:","Per a començar, tens que instal·lar alguna app:"}.
|
||||
{"To register, visit ~s","Per a registrar-te, visita ~s"}.
|
||||
{"To start chatting, you need to enter your new account credentials into your chosen XMPP software.","Per a començar a xarrar, tens que proporcionar les credencials del teu no compte al programa XMPP escollit."}.
|
||||
{"To ~ts","A ~ts"}.
|
||||
{"Token TTL","Token TTL"}.
|
||||
{"Too many active bytestreams","N'hi ha massa Bytestreams actius"}.
|
||||
@@ -555,12 +670,13 @@
|
||||
{"Unsupported <index/> element","Element <index/> no soportat"}.
|
||||
{"Unsupported version","Versió no suportada"}.
|
||||
{"Update message of the day (don't send)","Actualitzar el missatge del dia (no enviar)"}.
|
||||
{"Update message of the day on all hosts (don't send)","Actualitza el missatge del dia en tots els hosts (no enviar)"}.
|
||||
{"Update message of the day on all hosts (don't send)","Actualitza el missatge del dia en tots els dominis (no enviar)"}.
|
||||
{"Update specs to get modules source, then install desired ones.","Actualitza les especificacions per obtindre el codi font dels mòduls, després instal·la els que vulgues."}.
|
||||
{"Update Specs","Actualitzar Especificacions"}.
|
||||
{"Updating the vCard is not supported by the vCard storage backend","El sistema d'almacenament de vCard no te capacitat per a actualitzar la vCard"}.
|
||||
{"Upgrade","Actualitza"}.
|
||||
{"URL for Archived Discussion Logs","URL dels Arxius de Discussions"}.
|
||||
{"Use a <em>QR code</em> scanner on your mobile device to scan the code below:","Usa un escanejador de <em>codis QR</em> al te mòbil per a escanejar aquest codi:"}.
|
||||
{"User already exists","El usuari ja existeix"}.
|
||||
{"User JID","JID del usuari"}.
|
||||
{"User (jid)","Usuari (jid)"}.
|
||||
@@ -570,6 +686,9 @@
|
||||
{"User session not found","Sessió d'usuari no trobada"}.
|
||||
{"User session terminated","Sessió d'usuari terminada"}.
|
||||
{"User ~ts","Usuari ~ts"}.
|
||||
{"Username invalid","El nom d'usuari no es vàlid"}.
|
||||
{"Username is reserved","El nom d'usuari està reservat"}.
|
||||
{"Username","Nom d'usuari"}.
|
||||
{"Username:","Nom d'usuari:"}.
|
||||
{"Users are not allowed to register accounts so quickly","Els usuaris no tenen permís per a crear comptes tan depresa"}.
|
||||
{"Users Last Activity","Última activitat d'usuari"}.
|
||||
@@ -582,7 +701,7 @@
|
||||
{"Value 'set' of 'type' attribute is not allowed","El valor 'set' a l'atribut 'type' no és permès"}.
|
||||
{"vCard User Search","vCard recerca d'usuari"}.
|
||||
{"View joined MIX channels","Vore els canals MIX units"}.
|
||||
{"Virtual Hosts","Hosts virtuals"}.
|
||||
{"Virtual Hosts","Dominis Virtuals"}.
|
||||
{"Visitors are not allowed to change their nicknames in this room","Els visitants no tenen permés canviar el seus Nicknames en esta sala"}.
|
||||
{"Visitors are not allowed to send messages to all occupants","Els visitants no poden enviar missatges a tots els ocupants"}.
|
||||
{"Visitor","Visitant"}.
|
||||
@@ -606,6 +725,7 @@
|
||||
{"Wrong parameters in the web formulary","Paràmetres incorrectes en el formulari web"}.
|
||||
{"Wrong xmlns","El xmlns ès incorrecte"}.
|
||||
{"XMPP Account Registration","Registre de compte XMPP"}.
|
||||
{"XMPP client for Haiku","Client XMPP per a Haiku"}.
|
||||
{"XMPP Domains","Dominis XMPP"}.
|
||||
{"XMPP Show Value of Away","Valor 'show' de XMPP: Ausent"}.
|
||||
{"XMPP Show Value of Chat","Valor 'show' de XMPP: Disposat per a xarrar"}.
|
||||
@@ -615,8 +735,17 @@
|
||||
{"You are being removed from the room because of a system shutdown","Has sigut expulsat de la sala perquè el sistema va a apagar-se"}.
|
||||
{"You are not allowed to send private messages","No tens permés enviar missatges privats"}.
|
||||
{"You are not joined to the channel","No t'has unit al canal"}.
|
||||
{"You can connect to {{ site_name }} using any XMPP-compatible software. If your preferred software is not listed above, you may still <a href=\"{{ registration_url }}\" tabindex='{{ tabidx }}'>register an account manually</a>.","Pots connectar-te a {{ site_name }} usant qualsevol programa compatible amb XMPP. Si el teu programa preferit no està en esta llista, pots <a href=\"{{ registration_url }}\" tabindex='{{ tabidx }}'>registrarte el teu compte manualment</a>."}.
|
||||
{"You can later change your password using an XMPP client.","Podràs canviar la teva contrasenya més endavant utilitzant un client XMPP."}.
|
||||
{"You can now set up {{ app_name }} and connect it to your new account.","Ara pots configurar {{ app_name }} i connectar al teu nou compte."}.
|
||||
{"You can start chatting right away with {{ app_name }}. Let's get started!","Ja pots començar a xarrar usant {{ app_name }}. Comencem!"}.
|
||||
{"You can transfer this invite to your mobile device by scanning a code with your camera.","Pots transferir esta invitació al teu mòbil si escanejes el codi amb la càmera de fotos."}.
|
||||
{"You have been banned from this room","Has sigut bloquejat en aquesta sala"}.
|
||||
{"You have been invited to chat on {{ site_name }}, part of the XMPP secure and decentralized messaging network.","Has rebut una invitació per a xarrar a {{ site_name }}, que és part de la xarxa XMPP de missatgeria segura i descentralitzada."}.
|
||||
{"You have been invited to chat on <strong>{{ site_name }}</strong>, part of the XMPP secure and decentralized messaging network.","Has rebut una invitació per a xarrar a <strong>{{ site_name }}</strong>, que és part de la xarxa XMPP de missatgeria segura i descentralitzada."}.
|
||||
{"You have been invited to chat with <strong>{{ inviter }}</strong> on {{ site_name }}, part of the XMPP secure and decentralized messaging network.","Has rebut una invitació a xarrar amb <strong>{{ inviter }}</strong> a {{ site_name }}, que és part de la xarxa XMPP de missatgeria segura i descentralitzada."}.
|
||||
{"You have been invited to chat with <strong>{{ inviter }}</strong> on <strong>{{ site_name }}</strong>, part of the XMPP secure and decentralized messaging network.","T'han invitat a xarrar amb <strong>{{ inviter }}</strong> a <strong>{{ site_name }}</strong>, que és part de la xarxa XMPP de missatgeria segura i descentralitzada."}.
|
||||
{"You have created an account on <strong>{{ site_name }}</strong>.","Has creat un compte en <strong>{{ site_name }}</strong>."}.
|
||||
{"You have joined too many conferences","Has entrat en massa sales de conferència"}.
|
||||
{"You must fill in field \"Nickname\" in the form","Deus d'omplir el camp \"Nickname\" al formulari"}.
|
||||
{"You need a client that supports x:data and CAPTCHA to register","Necessites un client amb suport x:data i de CAPTCHA para poder registrar-te"}.
|
||||
@@ -624,6 +753,7 @@
|
||||
{"You need an x:data capable client to search","Necessites un client amb suport x:data per a poder buscar"}.
|
||||
{"Your active privacy list has denied the routing of this stanza.","La teva llista de privacitat activa ha denegat l'encaminament d'aquesta stanza."}.
|
||||
{"Your contact offline message queue is full. The message has been discarded.","La teua cua de missatges offline és plena. El missatge ha sigut descartat."}.
|
||||
{"Your password is stored encrypted on the server and will not be accessible after you close this page. Keep it safe and never share it with anyone.","La teva contrasenya es guardarà xifrada al servidor, i no serà accessible una vegada que tanques esta pàgina. Mantin la contrasenya segura i no la compartis amb ningú mes."}.
|
||||
{"Your subscription request and/or messages to ~s have been blocked. To unblock your subscription request, visit ~s","La teua petició de subscripció i/o missatges a ~s han sigut bloquejats. Per a desbloquejar-los, visita ~s"}.
|
||||
{"Your XMPP account was successfully registered.","El teu compte XMPP ha sigut creat correctament."}.
|
||||
{"Your XMPP account was successfully unregistered.","El teu compte XMPP ha sigut esborrat correctament."}.
|
||||
|
||||
@@ -4,15 +4,24 @@
|
||||
%% https://docs.ejabberd.im/developer/extending-ejabberd/localization/
|
||||
|
||||
{" has set the subject to: "," změnil(a) téma na: "}.
|
||||
{"A description of the node","Popis uzlu"}.
|
||||
{"A friendly name for the node","Přívětivé jméno pro uzel"}.
|
||||
{"A fully-featured desktop chat client for Windows and Linux.","Plně funkční desktopový chatovací klient pro Windows a Linux."}.
|
||||
{"A lightweight and powerful XMPP client for iPhone and iPad. It provides an easy way to talk and share moments with your friends.","Lehký a výkonný XMPP klient pro iPhone a iPad. Nabízí snadný způsob, jak komunikovat a sdílet okamžiky s přáteli."}.
|
||||
{"A modern open-source chat client for iPhone and iPad. It is easy to use and has a clean user interface.","Moderní chatovací klient s otevřeným zdrojovým kódem pro iPhone a iPad. Snadno se používá a má čisté uživatelské rozhraní."}.
|
||||
{"A modern open-source chat client for Mac. It is easy to use and has a clean user interface.","Moderní chatovací klient s otevřeným zdrojovým kódem pro Mac. Snadno se používá a má čisté uživatelské rozhraní."}.
|
||||
{"A password is required to enter this room","Pro vstup do místnosti musíte zadat heslo"}.
|
||||
{"Accept invite using {{ app_name }}","Přijmout pozvánku pomocí {{ app_name }}"}.
|
||||
{"Accept","Přijmout"}.
|
||||
{"Access denied by service policy","Přístup byl zamítnut nastavením služby"}.
|
||||
{"Action on user","Akce aplikovaná na uživatele"}.
|
||||
{"Add Contact","Přidat kontakt"}.
|
||||
{"Add User","Přidat uživatele"}.
|
||||
{"Administration of ","Administrace "}.
|
||||
{"Administration","Administrace"}.
|
||||
{"Administrator privileges required","Potřebujete práva administrátora"}.
|
||||
{"After clicking the button you will be taken to {{ app_name }} to finish setting up your new {{ site_name }} account.","Po kliknutí na tlačítko budete přesměrováni do {{ app_name }}, kde dokončíte nastavení svého nového účtu na {{ site_name }}."}.
|
||||
{"After successfully installing {{ app_name }}, come back to this page and <strong>continue with Step 2</strong>.","Po úspěšné instalaci {{ app_name }} se vraťte na tuto stránku a <strong>pokračujte krokem 2</strong>."}.
|
||||
{"All activity","Všechny aktivity"}.
|
||||
{"All Users","Všichni uživatelé"}.
|
||||
{"Allow this Jabber ID to subscribe to this pubsub node?","Povolit tomuto Jabber ID odebírat tento pubsub uzel?"}.
|
||||
@@ -25,7 +34,9 @@
|
||||
{"Allow visitors to send status text in presence updates","Povolit návštěvníkům posílat stavové zprávy ve statusu"}.
|
||||
{"Allow visitors to send voice requests","Povolit uživatelům posílat žádosti o voice práva"}.
|
||||
{"Announcements","Oznámení"}.
|
||||
{"API Commands","API příkazy"}.
|
||||
{"April",". dubna"}.
|
||||
{"As a final reminder, your account details are shown below:","Pro připomenutí, níže jsou uvedeny údaje o vašem účtu:"}.
|
||||
{"August",". srpna"}.
|
||||
{"Automatic node creation is not enabled","Automatické vytváření uzlů není povoleno"}.
|
||||
{"Backup Management","Správa zálohování"}.
|
||||
@@ -33,6 +44,7 @@
|
||||
{"Backup to File at ","Záloha do souboru na "}.
|
||||
{"Backup","Zálohovat"}.
|
||||
{"Bad format","Nesprávný formát"}.
|
||||
{"Beagle IM by Tigase, Inc. is a lightweight and powerful XMPP client for macOS.","Beagle IM od Tigase, Inc. je lehký a výkonný klient pro macOS."}.
|
||||
{"Birthday","Datum narození"}.
|
||||
{"Both the username and the resource are required","Uživatelské jméno i zdroj jsou požadované položky"}.
|
||||
{"Bytestream already activated","Bytestream již byl aktivován"}.
|
||||
@@ -51,14 +63,18 @@
|
||||
{"Chatroom is stopped","Místnost zastavena"}.
|
||||
{"Chatrooms","Místnosti"}.
|
||||
{"Choose a username and password to register with this server","Zadejte jméno uživatele a heslo pro registraci na tomto serveru"}.
|
||||
{"Choose a username, this will become the first part of your new chat address.","Zvolte si uživatelské jméno, to se stane první částí Vaší chatovací adresy."}.
|
||||
{"Choose storage type of tables","Vyberte typ úložiště pro tabulky"}.
|
||||
{"Choose whether to approve this entity's subscription.","Zvolte, zda chcete schválit odebírání touto entitou."}.
|
||||
{"City","Město"}.
|
||||
{"Click the button to open the Dino website where you can download and install it on your PC.","Kliknutím na tlačítko se otevře webová stránka, odkud si můžete stáhnout aplikaci Dino a nainstalovat ji na svůj počítač."}.
|
||||
{"Close","Zavřít"}.
|
||||
{"Commands","Příkazy"}.
|
||||
{"Conference room does not exist","Místnost neexistuje"}.
|
||||
{"Configuration of room ~s","Konfigurace místnosti ~s"}.
|
||||
{"Configuration","Konfigurace"}.
|
||||
{"Country","Země"}.
|
||||
{"Creating an account will allow to communicate with other people on <strong>{{ site_name }}</strong> and other services on the XMPP network.","Vytvořením účtu budete moci komunikovat s ostatními lidmi na serveru <strong>{{ site_name }}</strong> i na ostatních serverech v rámci sítě XMPP."}.
|
||||
{"Database failure","Chyba databáze"}.
|
||||
{"Database Tables Configuration at ","Konfigurace databázových tabulek "}.
|
||||
{"Database","Databáze"}.
|
||||
@@ -70,6 +86,10 @@
|
||||
{"Deliver event notifications","Doručovat upozornění na události"}.
|
||||
{"Deliver payloads with event notifications","Doručovat náklad s upozorněním na událost"}.
|
||||
{"Disc only copy","Jen kopie disku"}.
|
||||
{"Download and install {{ app_name }} below:","Stáhněte a nainstalujte {{ app_name }}:"}.
|
||||
{"Download Dino for Linux","Stáhnout Dino pro Linux"}.
|
||||
{"Download Gajim","Stahnout Gajim"}.
|
||||
{"Download Renga for Haiku","Stáhnout Renga pro Haiku"}.
|
||||
{"Dump Backup to Text File at ","Uložit zálohu do textového souboru na "}.
|
||||
{"Dump to Text File","Uložit do textového souboru"}.
|
||||
{"Edit Properties","Upravit vlastnosti"}.
|
||||
@@ -85,6 +105,7 @@
|
||||
{"Enable message archiving","Povolit ukládání historie zpráv"}.
|
||||
{"Enabling push without 'node' attribute is not supported","Aktivováno push bez atributu 'node' není podporováno"}.
|
||||
{"End User Session","Ukončit sezení uživatele"}.
|
||||
{"Enter a secure password that you do not use anywhere else.","Zadejte bezpečné heslo, které nikde jinde nepoužíváte."}.
|
||||
{"Enter nickname you want to register","Zadejte přezdívku, kterou chcete zaregistrovat"}.
|
||||
{"Enter path to backup file","Zadajte cestu k souboru se zálohou"}.
|
||||
{"Enter path to jabberd14 spool dir","Zadejte cestu k jabberd14 spool adresáři"}.
|
||||
@@ -117,9 +138,11 @@
|
||||
{"has been banned","byl(a) zablokován(a)"}.
|
||||
{"has been kicked because of a system shutdown","byl(a) vyhozen(a), protože dojde k vypnutí systému"}.
|
||||
{"has been kicked because of an affiliation change","byl(a) vyhozen(a) kvůli změně přiřazení"}.
|
||||
{"has been kicked because the room has been changed to members-only","byl(a) vyhozen(a), protože mísnost je nyní pouze pro členy"}.
|
||||
{"has been kicked because the room has been changed to members-only","byl(a) vyhozen(a), protože místnost je nyní pouze pro členy"}.
|
||||
{"has been kicked","byl(a) vyhozen(a) z místnosti"}.
|
||||
{"Hide","Skrýt"}.
|
||||
{"Host unknown","Neznámý hostitel"}.
|
||||
{"If you don't have an XMPP client installed yet, here's a list of suitable clients for your platform.","Pokud ještě nemáte nainstalovaného klienta XMPP, zde je seznam vhodných klientů pro vaši platformu."}.
|
||||
{"If you don't see the CAPTCHA image here, visit the web page.","Pokud zde nevidíte obrázek CAPTCHA, přejděte na webovou stránku."}.
|
||||
{"Import Directory","Import adresáře"}.
|
||||
{"Import File","Import souboru"}.
|
||||
@@ -141,6 +164,7 @@
|
||||
{"Insufficient privilege","Nedostatečné oprávnění"}.
|
||||
{"Invalid 'from' attribute in forwarded message","Nesprávný atribut 'from' v přeposlané zprávě"}.
|
||||
{"Invitations are not allowed in this conference","Pozvánky nejsou povoleny v této místnosti"}.
|
||||
{"Invite expired","Platnost pozvánky vypršela"}.
|
||||
{"IP addresses","IP adresy"}.
|
||||
{"is now known as","se přejmenoval(a) na"}.
|
||||
{"It is not allowed to send error messages to the room. The participant (~s) has sent an error message (~s) and got kicked from the room","Není povoleno posílat chybové zprávy do místnosti. Účastník (~s) odeslal chybovou zprávu (~s) a byl vyhozen z místnosti"}.
|
||||
@@ -152,21 +176,24 @@
|
||||
{"joins the room","vstoupil(a) do místnosti"}.
|
||||
{"July",". července"}.
|
||||
{"June",". června"}.
|
||||
{"Just created","Právě vytvořen"}.
|
||||
{"Last Activity","Poslední aktivita"}.
|
||||
{"Last login","Poslední přihlášení"}.
|
||||
{"Last message","Poslední zpráva"}.
|
||||
{"Last month","Poslední měsíc"}.
|
||||
{"Last year","Poslední rok"}.
|
||||
{"Launch {{ app_name }} and sign in using your account credentials.","Spusťte {{ app_name }} a přihlaste se pomocí Vašich přihlašovacích údajů."}.
|
||||
{"leaves the room","opustil(a) místnost"}.
|
||||
{"Logged Out","Odhlášen"}.
|
||||
{"Make participants list public","Nastavit seznam účastníků jako veřejný"}.
|
||||
{"Make room CAPTCHA protected","Chránit místnost pomocí CAPTCHA"}.
|
||||
{"Make room members-only","Zpřístupnit místnost jen členům"}.
|
||||
{"Make room moderated","Nastavit místnost jako moderovanou"}.
|
||||
{"Make room password protected","Chránit místnost heslem"}.
|
||||
{"Make room persistent","Nastavit místnost jako stálou"}.
|
||||
{"Make room public searchable","Nastavit místnost jako veřejnou"}.
|
||||
{"Malformed username","Chybně formátováné jméno uživatele"}.
|
||||
{"March",". března"}.
|
||||
{"Max payload size in bytes","Maximální náklad v bajtech"}.
|
||||
{"Maximum file size","Maximální velikost souboru"}.
|
||||
{"Maximum Number of Occupants","Maximální počet účastníků"}.
|
||||
{"May",". května"}.
|
||||
{"Membership is required to enter this room","Pro vstup do místnosti musíte být členem"}.
|
||||
@@ -193,7 +220,7 @@
|
||||
{"No body provided for announce message","Zpráva neobsahuje text"}.
|
||||
{"No data form found","Nebyl nalezen datový formulář"}.
|
||||
{"No Data","Žádná data"}.
|
||||
{"No features available","Žádné funce nejsou dostupné"}.
|
||||
{"No features available","Žádné funkce nejsou dostupné"}.
|
||||
{"No hook has processed this command","Žádný hook nebyl zpracován tímto příkazem"}.
|
||||
{"No info about last activity found","Nebyla žádná informace o poslední aktivitě"}.
|
||||
{"No 'item' element found","Element 'item' nebyl nalezen"}.
|
||||
@@ -219,6 +246,7 @@
|
||||
{"Nodeprep has failed","Nodeprep chyboval"}.
|
||||
{"Nodes","Uzly"}.
|
||||
{"None","Nic"}.
|
||||
{"Not allowed","Nepovoleno"}.
|
||||
{"Not Found","Nenalezeno"}.
|
||||
{"Not subscribed","Není odebíráno"}.
|
||||
{"Notify subscribers when items are removed from the node","Upozornit odběratele na odstranění položek z uzlu"}.
|
||||
@@ -236,14 +264,13 @@
|
||||
{"Only deliver notifications to available users","Doručovat upozornění jen právě přihlášeným uživatelům"}.
|
||||
{"Only <enable/> or <disable/> tags are allowed","Pouze značky <enable/> nebo <disable/>jsou povoleny"}.
|
||||
{"Only <list/> element is allowed in this query","Pouze element <list/> je povolen v tomto dotazu"}.
|
||||
{"Only members may query archives of this room","Pouze moderátoři mají povoleno měnit téma místnosti"}.
|
||||
{"Only moderators and participants are allowed to change the subject in this room","Jen moderátoři a účastníci mají povoleno měnit téma této místnosti"}.
|
||||
{"Only moderators are allowed to change the subject in this room","Jen moderátoři mají povoleno měnit téma místnosti"}.
|
||||
{"Only moderators can approve voice requests","Pouze moderátoři mohou schválit žádosti o voice práva"}.
|
||||
{"Only occupants are allowed to send messages to the conference","Jen členové mají povolené zasílat zprávy do místnosti"}.
|
||||
{"Only occupants are allowed to send queries to the conference","Jen členové mohou odesílat požadavky (query) do místnosti"}.
|
||||
{"Only occupants are allowed to send messages to the conference","Pouze členové mají povolené zasílat zprávy do místnosti"}.
|
||||
{"Only occupants are allowed to send queries to the conference","Pouze členové mohou odesílat požadavky (query) do místnosti"}.
|
||||
{"Only service administrators are allowed to send service messages","Pouze správci služby smí odesílat servisní zprávy"}.
|
||||
{"Organization Name","Název firmy"}.
|
||||
{"Organization Name","Název organizace"}.
|
||||
{"Organization Unit","Oddělení"}.
|
||||
{"Other Modules Available:","Ostatní dostupné moduly:"}.
|
||||
{"Outgoing s2s Connections","Odchozí s2s spojení"}.
|
||||
@@ -260,10 +287,14 @@
|
||||
{"Ping query is incorrect","Ping dotaz je nesprávný"}.
|
||||
{"Ping","Ping"}.
|
||||
{"Please note that these options will only backup the builtin Mnesia database. If you are using the ODBC module, you also need to backup your SQL database separately.","Podotýkáme, že tato nastavení budou zálohována do zabudované databáze Mnesia. Pokud používáte ODBC modul, musíte zálohovat svoji SQL databázi samostatně."}.
|
||||
{"Please provide a password! Minimum length: {{ password_min_length }}","Prosím vyplňte heslo! Minimální délka hesla: {{ password_min_length }}"}.
|
||||
{"Please provide a valid username!","Prosím, zadejte platné uživatelské jméno!"}.
|
||||
{"Please, wait for a while before sending new voice request","Prosím, počkejte chvíli před posláním nové žádosti o voice práva"}.
|
||||
{"Pong","Pong"}.
|
||||
{"Present real Jabber IDs to","Odhalovat skutečná Jabber ID"}.
|
||||
{"Previous","Předchozí"}.
|
||||
{"private, ","soukromá, "}.
|
||||
{"Public","Veřejný"}.
|
||||
{"Publish-Subscribe","Publish-Subscribe"}.
|
||||
{"PubSub subscriber request","Žádost odběratele PubSub"}.
|
||||
{"Purge all items when the relevant publisher goes offline","Smazat všechny položky, pokud se příslušný poskytovatel odpojí"}.
|
||||
@@ -273,10 +304,13 @@
|
||||
{"RAM copy","Kopie RAM"}.
|
||||
{"Really delete message of the day?","Skutečně smazat zprávu dne?"}.
|
||||
{"Recipient is not in the conference room","Příjemce se nenachází v místnosti"}.
|
||||
{"Re-Enable User","Znovu povolit uživatele"}.
|
||||
{"Register on {{ site_name }}","Registrovat se na {{ site_name }}"}.
|
||||
{"Register","Zaregistrovat se"}.
|
||||
{"Remote copy","Vzdálená kopie"}.
|
||||
{"Remove User","Odstranit uživatele"}.
|
||||
{"Replaced by new connection","Nahrazeno novým spojením"}.
|
||||
{"Request has timed out","Časový limit požadavku vypršel"}.
|
||||
{"Resources","Zdroje"}.
|
||||
{"Restart Service","Restartovat službu"}.
|
||||
{"Restore Backup from File at ","Obnovit zálohu ze souboru na "}.
|
||||
@@ -284,6 +318,7 @@
|
||||
{"Restore binary backup immediately:","Okamžitě obnovit binární zálohu:"}.
|
||||
{"Restore plain text backup immediately:","Okamžitě obnovit zálohu z textového souboru:"}.
|
||||
{"Restore","Obnovit"}.
|
||||
{"Result","Výsledek"}.
|
||||
{"Roles for which Presence is Broadcasted","Role, pro které je zpráva o stavu šířena"}.
|
||||
{"Room Configuration","Nastavení místnosti"}.
|
||||
{"Room creation is denied by service policy","Pravidla služby nepovolují vytvořit místnost"}.
|
||||
@@ -293,49 +328,77 @@
|
||||
{"Roster groups allowed to subscribe","Skupiny kontaktů, které mohou odebírat"}.
|
||||
{"Roster size","Velikost seznamu kontaktů"}.
|
||||
{"Running Nodes","Běžící uzly"}.
|
||||
{"Sad person holding empty box","Smutný člověk držící prázdnou krabici"}.
|
||||
{"Saturday","Sobota"}.
|
||||
{"Scan invite code","Naskenovat kód pozvánky"}.
|
||||
{"Scan with mobile device","Skenovat pomocí mobilního zařízení"}.
|
||||
{"Search from the date","Hledat od data"}.
|
||||
{"Search Results for ","Výsledky hledání pro "}.
|
||||
{"Search the text","Hledat text"}.
|
||||
{"Search until the date","Hledat do data"}.
|
||||
{"Search users in ","Hledat uživatele v "}.
|
||||
{"Select","Vybrat"}.
|
||||
{"Send announcement to all online users on all hosts","Odeslat oznámení všem online uživatelům na všech hostitelích"}.
|
||||
{"Send announcement to all online users","Odeslat oznámení všem online uživatelům"}.
|
||||
{"Send announcement to all users on all hosts","Odeslat oznámení všem uživatelům na všech hostitelích"}.
|
||||
{"Send announcement to all users","Odeslat oznámení všem uživatelům"}.
|
||||
{"Send this invite to your device","Zaslat tuto pozvánku na Vaše zařízení"}.
|
||||
{"September",". září"}.
|
||||
{"Server:","Server:"}.
|
||||
{"Service list retrieval timed out","Časový limit pro načtení seznamu služeb vypršel"}.
|
||||
{"Set message of the day and send to online users","Nastavit zprávu dne a odeslat ji online uživatelům"}.
|
||||
{"Set message of the day on all hosts and send to online users","Nastavit zprávu dne na všech hostitelích a odeslat ji online uživatelům"}.
|
||||
{"Shared Roster Groups","Skupiny pro sdílený seznam kontaktů"}.
|
||||
{"Show Integral Table","Zobrazit kompletní tabulku"}.
|
||||
{"Show Ordinary Table","Zobrazit běžnou tabulku"}.
|
||||
{"Shut Down Service","Vypnout službu"}.
|
||||
{"Sorry, it looks like this invite code has expired!","Je nám líto, ale zdá se, že platnost pozvánky vypršela!"}.
|
||||
{"Specify the access model","Uveďte přístupový model"}.
|
||||
{"Specify the event message type","Zvolte typ zpráv pro události"}.
|
||||
{"Specify the publisher model","Specifikovat model pro publikování"}.
|
||||
{"Step 1: Download and install {{ app_name }}","Krok 1: Stáhněte si a nainstalujte {{ app_name }}"}.
|
||||
{"Step 1: Install {{ app_name }}","Krok 1: Instalace {{ app_name }}"}.
|
||||
{"Step 2: Activate your account","Krok 2: Aktivujte svůj účet"}.
|
||||
{"Step 2: Connect {{ app_name }} to your new account","Step 2: Připojte se pomocí {{ app_name }} k Vašemu novému účtu"}.
|
||||
{"Stopped Nodes","Zastavené uzly"}.
|
||||
{"Store binary backup:","Uložit binární zálohu:"}.
|
||||
{"Store plain text backup:","Uložit zálohu do textového souboru:"}.
|
||||
{"<strong>{{ site_name }}</strong> is part of XMPP, a secure and decentralized messaging network. To begin chatting using <strong>{{ app_name }}</strong> you need to first register an account.","<strong>{{ site_name }}</strong> je součástí XMPP, bezpečné a decentralizované sítě pro zasílání zpráv. Abyste mohli začít chatovat pomocí aplikace <strong>{{ app_name }}</strong>, musíte se nejprve registrovat."}.
|
||||
{"<strong>Tip:</strong> You can open this invite on your mobile device by scanning a barcode with your camera.","<strong>Tip:</strong> Tuto pozvánku můžete otevřít na svém mobilním zařízení naskenováním kódu fotoaparátem."}.
|
||||
{"Subject","Předmět"}.
|
||||
{"Submit","Odeslat"}.
|
||||
{"Submitted","Odeslané"}.
|
||||
{"Subscriber Address","Adresa odběratele"}.
|
||||
{"Subscriptions are not allowed","Předplatné není povoleno"}.
|
||||
{"Sunday","Neděle"}.
|
||||
{"That nickname is already in use by another occupant","Přezdívka je již používána jiným členem"}.
|
||||
{"That nickname is registered by another person","Přezdívka je zaregistrována jinou osobou"}.
|
||||
{"The account already exists","Účet již existuje"}.
|
||||
{"The account was not unregistered","Účet nebyl smazán"}.
|
||||
{"The CAPTCHA is valid.","CAPTCHA souhlasí."}.
|
||||
{"The CAPTCHA verification has failed","Ověření CAPTCHA se nezdařilo"}.
|
||||
{"The collections with which a node is affiliated","Kolekce, se kterými je uzel spřízněn"}.
|
||||
{"The datetime when the node was created","Datum a čas vytvoření uzlu"}.
|
||||
{"The default language of the node","Výchozí jazyk uzlu"}.
|
||||
{"The feature requested is not supported by the conference","Požadovaná vlastnost není podporována touto místností"}.
|
||||
{"The list of all online users","Seznam všech online uživatelů"}.
|
||||
{"The list of all users","Seznam všech uživatelů"}.
|
||||
{"The NodeID of the relevant node","NodeID příslušného uzlu"}.
|
||||
{"The number of subscribers to the node","Počet odběratelů uzlu"}.
|
||||
{"The number of unread or undelivered messages","Počet nepřečtených nebo nedoručených zpráv"}.
|
||||
{"The password contains unacceptable characters","Heslo obsahuje nepovolené znaky"}.
|
||||
{"The password is too weak","Heslo je příliš slabé"}.
|
||||
{"the password is","heslo je"}.
|
||||
{"The passwords are different","Hesla nejsou stejná"}.
|
||||
{"The query is only allowed from local users","Dotaz je povolen pouze pro místní uživatele"}.
|
||||
{"The query must not contain <item/> elements","Dotaz nesmí obsahovat elementy <item/>"}.
|
||||
{"The role","Role"}.
|
||||
{"The sender of the last received message","Odesílatel poslední doručené zprávy"}.
|
||||
{"The stanza MUST contain only one <active/> element, one <default/> element, or one <list/> element","Stanza MUSÍ obsahovat pouze jeden element <active/>, jeden element <default/> nebo jeden element <list/>"}.
|
||||
{"There was an error changing the password: ","Při změně hesla došlo k chybě: "}.
|
||||
{"There was an error creating the account: ","Při vytváření účtu došlo k chybě: "}.
|
||||
{"There was an error deleting the account: ","Při mazání účtu došlo k chybě: "}.
|
||||
{"This button works only if you have the app installed already!","Toto tlačítko funguje pouze v případě, že máte nainstalovanou vhodnou aplikaci!"}.
|
||||
{"This room is not anonymous","Tato místnost není anonymní"}.
|
||||
{"Thursday","Čtvrtek"}.
|
||||
{"Time delay","Časový posun"}.
|
||||
@@ -358,10 +421,12 @@
|
||||
{"Unsupported <index/> element","Nepodporovaný <index/> element"}.
|
||||
{"Update message of the day (don't send)","Aktualizovat zprávu dne (neodesílat)"}.
|
||||
{"Update message of the day on all hosts (don't send)","Aktualizovat zprávu dne pro všechny hostitele (neodesílat)"}.
|
||||
{"Use a <em>QR code</em> scanner on your mobile device to scan the code below:","Naskenujte kód níže pomocí skeneru <em>QR kódů</em> na Vašem mobilním zařízení:"}.
|
||||
{"User already exists","Uživatel již existuje"}.
|
||||
{"User JID","Jabber ID uživatele"}.
|
||||
{"User (jid)","Uživatel (JID)"}.
|
||||
{"User Management","Správa uživatelů"}.
|
||||
{"User removed","Uživatel odstraněn"}.
|
||||
{"User session not found","Sezení uživatele nebylo nalezeno"}.
|
||||
{"User session terminated","Sezení uživatele bylo ukončeno"}.
|
||||
{"Username:","Uživatelské jméno:"}.
|
||||
@@ -384,13 +449,22 @@
|
||||
{"Wednesday","Středa"}.
|
||||
{"When to send the last published item","Kdy odeslat poslední publikovanou položku"}.
|
||||
{"Whether to allow subscriptions","Povolit odebírání"}.
|
||||
{"Wrong xmlns","Chybné xmlns"}.
|
||||
{"XMPP client for Haiku","XMPP klient pro Haiku"}.
|
||||
{"XMPP Domains","XMPP domény"}.
|
||||
{"You are being removed from the room because of a system shutdown","Budete vyloučeni z místnosti kvůli vypnutí systému"}.
|
||||
{"You are not allowed to send private messages","Nemáte povoleno posílat soukromé zprávy"}.
|
||||
{"You can transfer this invite to your mobile device by scanning a code with your camera.","Tuto pozvánku můžete přenést do svého mobilního zařízení naskenováním kódu pomocí fotoaparátu."}.
|
||||
{"You have been banned from this room","Byl jste vyloučen z této místnosti"}.
|
||||
{"You have joined too many conferences","Vstoupil jste do příliš velkého množství místností"}.
|
||||
{"You have been invited to chat with <strong>{{ inviter }}</strong> on <strong>{{ site_name }}</strong>, part of the XMPP secure and decentralized messaging network.","Byli jste pozváni do chatu s <strong>{{ inviter }}</strong> na serveru <strong>{{ site_name }}</strong>, který je součástí XMPP - bezpečné a decentralizované sítě pro zasílání zpráv."}.
|
||||
{"You have joined too many conferences","Vstoupili jste do příliš velkého množství místností"}.
|
||||
{"You must fill in field \"Nickname\" in the form","Musíte vyplnit políčko \"Přezdívka\" ve formuláři"}.
|
||||
{"You need a client that supports x:data and CAPTCHA to register","Pro registraci potřebujete klienta s podporou x:data a CAPTCHA"}.
|
||||
{"You need a client that supports x:data to register the nickname","Pro registraci přezdívky potřebujete klienta s podporou x:data"}.
|
||||
{"You need an x:data capable client to search","K vyhledávání potřebujete klienta podporujícího x:data"}.
|
||||
{"Your active privacy list has denied the routing of this stanza.","Vaše nastavení soukromí znemožnilo směrování této stance."}.
|
||||
{"Your contact offline message queue is full. The message has been discarded.","Fronta offline zpráv pro váš kontakt je plná. Zpráva byla zahozena."}.
|
||||
{"Your password is stored encrypted on the server and will not be accessible after you close this page. Keep it safe and never share it with anyone.","Vaše heslo je zašifrováno a uloženo na serveru a až zavřete tuto stránku, nebude již dostupné. Uložte si ho do bezpečí a nikdy ho s nikým nesdílejte."}.
|
||||
{"Your subscription request and/or messages to ~s have been blocked. To unblock your subscription request, visit ~s","Nesmíte posílat zprávy na ~s. Pro povolení navštivte ~s"}.
|
||||
{"Your XMPP account was successfully registered.","Váš účet XMPP byl úspěšně zaregistrován."}.
|
||||
{"You're not allowed to create nodes","Nemáte povoleno vytvářet uzly"}.
|
||||
|
||||
@@ -4,22 +4,34 @@
|
||||
%% https://docs.ejabberd.im/developer/extending-ejabberd/localization/
|
||||
|
||||
{" (Add * to the end of field to match substring)"," (Fügen Sie * am Ende des Feldes hinzu um nach Teilzeichenketten zu suchen)"}.
|
||||
{"{{ app_name }} already installed?","{{ app_name }} bereits installiert?"}.
|
||||
{" has set the subject to: "," hat das Thema geändert auf: "}.
|
||||
{"{{ inviter }} has invited you to connect!","{{ inviter }} will sich mit dir verbinden!"}.
|
||||
{"# participants","# Teilnehmer"}.
|
||||
{"A description of the node","Eine Beschreibung des Knotens"}.
|
||||
{"A friendly name for the node","Ein benutzerfreundlicher Name für den Knoten"}.
|
||||
{"A fully-featured desktop chat client for Windows and Linux.","Ein funktionsreicher Desktop-Client für Windows und Linux."}.
|
||||
{"A lean Jabber/XMPP client for Android. It aims at usability, low overhead and security, and works on low-end Android devices starting with Android 4.0.","Ein schlanker Jabber/XMPP-Client für Android mit Fokus Benutzerfreundlichkeit und Sicherheit. Er funktioniert auch mit langsameren Android-Geräten mit Android 4.0 oder neuer."}.
|
||||
{"A lightweight and powerful XMPP client for iPhone and iPad. It provides an easy way to talk and share moments with your friends.","Ein schlanker aber funktionsreicher XMPP-Client für iPhone und iPad. Ein einfacher Weg um mit Deinen Freunden zu kommunizieren und Erinnerungen zu teilen."}.
|
||||
{"A modern open-source chat client for iPhone and iPad. It is easy to use and has a clean user interface.","Ein moderner open-source Chatclient für iPhone und iPad mit einfacher und übersichtlicher Benutzeroberfläche."}.
|
||||
{"A modern open-source chat client for Mac. It is easy to use and has a clean user interface.","Ein moderner open-source Chatclient für Mac mit einfacher und übersichtlicher Benutzeroberfläche."}.
|
||||
{"A modern open-source chat client for the desktop. It focuses on providing a clean and reliable Jabber/XMPP experience while having your privacy in mind.","Ein moderner open-source Jabber/XMPP Chatclient für den Desktop mit Fokus auf Einfachheit und Zuverlässigkeit, aber auch Schutz deiner Privatsphäre."}.
|
||||
{"A password is required to enter this room","Ein Passwort ist erforderlich um diesen Raum zu betreten"}.
|
||||
{"A Web Page","Eine Webseite"}.
|
||||
{"Accept invite using {{ app_name }}","Einladung mittels {{ app_name }} annehmen"}.
|
||||
{"Accept","Akzeptieren"}.
|
||||
{"Access denied by service policy","Zugriff aufgrund der Dienstrichtlinien verweigert"}.
|
||||
{"Access model","Zugriffsmodell"}.
|
||||
{"Account doesn't exist","Konto existiert nicht"}.
|
||||
{"Action on user","Aktion auf Benutzer"}.
|
||||
{"Add a hat to a user","Funktion zu einem Benutzer hinzufügen"}.
|
||||
{"Add {{ inviter }} to your contact list","Füge {{ inviter }} zu deiner Kontaktliste hinzu"}.
|
||||
{"Add Contact","Kontakt hinzufügen"}.
|
||||
{"Add User","Benutzer hinzufügen"}.
|
||||
{"Administration of ","Administration von "}.
|
||||
{"Administration","Verwaltung"}.
|
||||
{"Administrator privileges required","Administratorrechte erforderlich"}.
|
||||
{"After clicking the button you will be taken to {{ app_name }} to finish setting up your new {{ site_name }} account.","Nach dem Drücken des Buttons wirst du nach {{ app_name }} umgeleitet um dort die Einrichtung deines neuen Kontos auf {{ site_name }} fertigzustellen."}.
|
||||
{"After successfully installing {{ app_name }}, come back to this page and <strong>continue with Step 2</strong>.","Nachdem du {{ app_name }} erfolgreich installiert hast, komme zu dieser Seite zurück und <strong>fahre mit Schritt 2 fort</strong>!"}.
|
||||
{"All activity","Alle Aktivitäten"}.
|
||||
{"All Users","Alle Benutzer"}.
|
||||
{"Allow subscription","Abonnement erlauben"}.
|
||||
@@ -47,8 +59,11 @@
|
||||
{"Anyone with Voice","Jeder mit Stimme"}.
|
||||
{"Anyone","Jeder"}.
|
||||
{"API Commands","API Befehle"}.
|
||||
{"Apple Store Logo","Apple Store Logo"}.
|
||||
{"April","April"}.
|
||||
{"Arguments","Argumente"}.
|
||||
{"As a final reminder, your account details are shown below:","Zur Erinnerung hier nochmal deine Kontodetails:"}.
|
||||
{"Assign a hat to a user","Hut zu einem Benutzer hinzufügen"}.
|
||||
{"Attribute 'channel' is required for this request","Attribut 'channel' ist für diese Anforderung erforderlich"}.
|
||||
{"Attribute 'id' is mandatory for MIX messages","Attribut 'id' ist verpflichtend für MIX-Nachrichten"}.
|
||||
{"Attribute 'jid' is not allowed here","Attribut 'jid' ist hier nicht erlaubt"}.
|
||||
@@ -61,6 +76,9 @@
|
||||
{"Backup to File at ","Backup in Datei bei "}.
|
||||
{"Backup","Backup"}.
|
||||
{"Bad format","Ungültiges Format"}.
|
||||
{"BAD REQUEST","UNGÜLTIGE ANFRAGE"}.
|
||||
{"Beagle IM by Tigase, Inc. is a lightweight and powerful XMPP client for macOS.","Beagle IM von Tigase Inc. ist eine schlanker aber funktionsreicher XMPP-Client für macOS."}.
|
||||
{"Beagle IM Logo","Beagle IM Logo"}.
|
||||
{"Birthday","Geburtsdatum"}.
|
||||
{"Both the username and the resource are required","Sowohl der Benutzername als auch die Ressource sind erforderlich"}.
|
||||
{"Bytestream already activated","Bytestream bereits aktiviert"}.
|
||||
@@ -77,6 +95,7 @@
|
||||
{"Channel JID","Kanal-JID"}.
|
||||
{"Channels","Kanäle"}.
|
||||
{"Characters not allowed:","Nicht erlaubte Zeichen:"}.
|
||||
{"Chat address (JID)","Chat-Adresse (JID)"}.
|
||||
{"Chatroom configuration modified","Chatraum-Konfiguration geändert"}.
|
||||
{"Chatroom is created","Chatraum ist erstellt"}.
|
||||
{"Chatroom is destroyed","Chatraum ist entfernt"}.
|
||||
@@ -84,16 +103,29 @@
|
||||
{"Chatroom is stopped","Chatraum ist beendet"}.
|
||||
{"Chatrooms","Chaträume"}.
|
||||
{"Choose a username and password to register with this server","Wählen Sie zum Registrieren auf diesem Server einen Benutzernamen und ein Passwort"}.
|
||||
{"Choose a username, this will become the first part of your new chat address.","Wähle eine Benutzernamen! Dies wird zum ersten Teil deiner neuen Chat-Adresse."}.
|
||||
{"Choose storage type of tables","Wähle Speichertyp der Tabellen"}.
|
||||
{"Choose whether to approve this entity's subscription.","Wählen Sie, ob das Abonnement dieser Entität genehmigt werden soll."}.
|
||||
{"City","Stadt"}.
|
||||
{"Click the button to open the Dino website where you can download and install it on your PC.","Klicke auf den Button um Dino's Webseite zu öffnen, wo du ihn für deinen PC herunterladen und installieren kannst."}.
|
||||
{"Client acknowledged more stanzas than sent by server","Client bestätigte mehr Stanzas als vom Server gesendet"}.
|
||||
{"Close","Schließen"}.
|
||||
{"Clustering","Clustering"}.
|
||||
{"Commands","Befehle"}.
|
||||
{"Conference room does not exist","Konferenzraum existiert nicht"}.
|
||||
{"Configuration of room ~s","Konfiguration des Raumes ~s"}.
|
||||
{"Configuration","Konfiguration"}.
|
||||
{"Congratulations!","Gratuliere!"}.
|
||||
{"Contact Addresses (normally, room owner or owners)","Kontaktadresse (normalerweise Raumbesitzer)"}.
|
||||
{"Contacts","Kontakte"}.
|
||||
{"Conversations is a Jabber/XMPP client for Android 6.0+ smartphones that has been optimized to provide a unique mobile experience.","Conversations ist ein Jabber/XMPP-Client für Android 6.0+, der für mobile Endgeräte optimiert wurde."}.
|
||||
{"Conversations Logo","Conversations Logo"}.
|
||||
{"Country","Land"}.
|
||||
{"Create a Hat","Einen Hut erstellen"}.
|
||||
{"Create Account","Konto anlegen"}.
|
||||
{"Create an account","Konto anlegen"}.
|
||||
{"Creating an account will allow to communicate with other people on <strong>{{ site_name }}</strong> and other services on the XMPP network.","Ein Konto erlaubt es dir mit anderen Leuten auf <strong>{{ site_name }}</strong> und anderen Diensten des XMPP-Netwerkes zu kommunizieren."}.
|
||||
{"Creating an account will allow to communicate with <strong>{{ inviter }}</strong> and other people on <strong>{{ site_name }}</strong> and other services on the XMPP network.","Ein Konto erlaubt es dir mit <strong>{{ inviter }}</strong> und anderen Leuten auf <strong>{{ site_name }}</strong> und anderen Diensten des XMPP-Netwerkes zu kommunizieren."}.
|
||||
{"Current Discussion Topic","Aktuelles Diskussionsthema"}.
|
||||
{"Database failure","Datenbankfehler"}.
|
||||
{"Database Tables Configuration at ","Datenbanktabellen-Konfiguration bei "}.
|
||||
@@ -105,8 +137,16 @@
|
||||
{"Delete User","Benutzer löschen"}.
|
||||
{"Deliver event notifications","Ereignisbenachrichtigungen zustellen"}.
|
||||
{"Deliver payloads with event notifications","Nutzdaten mit Ereignisbenachrichtigungen zustellen"}.
|
||||
{"Destroy a Hat","Einen Hut zerstören"}.
|
||||
{"Dino Logo","Dino Logo"}.
|
||||
{"Disable User","Benutzer deaktivieren"}.
|
||||
{"Disc only copy","Nur auf Festplatte"}.
|
||||
{"Don't tell your password to anybody, not even the administrators of the XMPP server.","Geben Sie niemandem Ihr Passwort, auch nicht den Administratoren des XMPP-Servers."}.
|
||||
{"Download and install {{ app_name }} below:","Herunterladen und Installieren von {{ app_name }}:"}.
|
||||
{"Download Dino for Linux","Dino für Linux herunterladen"}.
|
||||
{"Download from Mac App Store","Vom Mac App Store herunterladen"}.
|
||||
{"Download Gajim","Gajim herunterladen"}.
|
||||
{"Download Renga for Haiku","Renga für Haiku herunterladen"}.
|
||||
{"Dump Backup to Text File at ","Gib Backup in Textdatei aus bei "}.
|
||||
{"Dump to Text File","Ausgabe in Textdatei"}.
|
||||
{"Duplicated groups are not allowed by RFC6121","Doppelte Gruppen sind laut RFC6121 nicht erlaubt"}.
|
||||
@@ -123,11 +163,12 @@
|
||||
{"ejabberd","ejabberd"}.
|
||||
{"Email Address","E-Mail-Adresse"}.
|
||||
{"Email","E-Mail"}.
|
||||
{"Enable hats","Funktion einschalten"}.
|
||||
{"Enable hats","Hüte Funktion einschalten"}.
|
||||
{"Enable logging","Protokollierung aktivieren"}.
|
||||
{"Enable message archiving","Nachrichtenarchivierung aktivieren"}.
|
||||
{"Enabling push without 'node' attribute is not supported","push ohne 'node'-Attribut zu aktivieren wird nicht unterstützt"}.
|
||||
{"End User Session","Benutzersitzung beenden"}.
|
||||
{"Enter a secure password that you do not use anywhere else.","Gib bitte ein sicheres Passwort ein, das du nirgends sonst verwendest!"}.
|
||||
{"Enter nickname you want to register","Geben Sie den Spitznamen ein den Sie registrieren wollen"}.
|
||||
{"Enter path to backup file","Geben Sie den Pfad zur Backupdatei ein"}.
|
||||
{"Enter path to jabberd14 spool dir","Geben Sie den Pfad zum jabberd14-Spoolverzeichnis ein"}.
|
||||
@@ -148,6 +189,7 @@
|
||||
{"Failed to process option '~s'","Konnte Option '~s' nicht verarbeiten"}.
|
||||
{"Family Name","Nachname"}.
|
||||
{"FAQ Entry","FAQ-Eintrag"}.
|
||||
{"F-Droid Store Logo","F-Droid Store Logo"}.
|
||||
{"February","Februar"}.
|
||||
{"File larger than ~w bytes","Datei größer als ~w Bytes"}.
|
||||
{"Fill in the form to search for any matching XMPP User","Füllen Sie das Formular aus, um nach jeglichen passenden XMPP-Benutzern zu suchen"}.
|
||||
@@ -156,27 +198,44 @@
|
||||
{"Full List of Room Admins","Vollständige Liste der Raumadmins"}.
|
||||
{"Full List of Room Owners","Vollständige Liste der Raumbesitzer"}.
|
||||
{"Full Name","Vollständiger Name"}.
|
||||
{"Gajim Logo","Gajim Logo"}.
|
||||
{"Get List of Active Users","Liste der aktiven Benutzer abrufen"}.
|
||||
{"Get List of Disabled Users","Liste der deaktivierten Benutzer abrufen"}.
|
||||
{"Get List of Idle Users","Liste der inaktiven Benutzer abrufen"}.
|
||||
{"Get List of Online Users","Liste der angemeldeten Benutzer abrufen"}.
|
||||
{"Get List of Registered Users","Liste der registrierten Benutzer abrufen"}.
|
||||
{"Get Number of Active Users","Anzahl der aktiven Benutzer abrufen"}.
|
||||
{"Get Number of Disabled Users","Anzahl der deaktivierten Benutzer abrufen"}.
|
||||
{"Get Number of Idle Users","Anzahl der inaktiven Benutzer abrufen"}.
|
||||
{"Get Number of Online Users","Anzahl der angemeldeten Benutzer abrufen"}.
|
||||
{"Get Number of Registered Users","Anzahl der registrierten Benutzer abrufen"}.
|
||||
{"Get Pending","Ausstehende abrufen"}.
|
||||
{"Get started","Leg los!"}.
|
||||
{"Get User Last Login Time","letzte Anmeldezeit des Benutzers abrufen"}.
|
||||
{"Get User Roster","Kontaktliste abrufen"}.
|
||||
{"Get User Statistics","Benutzerstatistiken abrufen"}.
|
||||
{"Given Name","Vorname"}.
|
||||
{"Google Play Store Logo","Google Play Store Logo"}.
|
||||
{"Grant voice to this person?","Dieser Person Sprachrechte erteilen?"}.
|
||||
{"has been banned","wurde gebannt"}.
|
||||
{"has been kicked because of a system shutdown","wurde wegen einer Systemabschaltung hinausgeworfen"}.
|
||||
{"has been kicked because of an affiliation change","wurde wegen einer Änderung der Zugehörigkeit hinausgeworfen"}.
|
||||
{"has been kicked because the room has been changed to members-only","wurde hinausgeworfen weil der Raum zu Nur-Mitglieder geändert wurde"}.
|
||||
{"has been kicked","wurde hinausgeworfen"}.
|
||||
{"Hash computed from the list of hats available in a room","Hash wurde von der Liste der Hüte im Raum berechnet"}.
|
||||
{"Hash of the vCard-temp avatar of this room","Hash des vCard-temp Avatars dieses Raums"}.
|
||||
{"Hat title","Funktionstitel"}.
|
||||
{"Hat URI","Funktions-URI"}.
|
||||
{"Hats limit exceeded","Funktionslimit wurde überschritten"}.
|
||||
{"Hat hue","Hutfarbe"}.
|
||||
{"Hat title","Huttitle"}.
|
||||
{"Hat URI","Hüte Funktions-URI"}.
|
||||
{"Hats limit exceeded","Hütelimit wurde überschritten"}.
|
||||
{"Hide","Verbergen"}.
|
||||
{"Hint","Hinweis"}.
|
||||
{"Host unknown","Host unbekannt"}.
|
||||
{"Hostname invalid","Hostname unbekannt"}.
|
||||
{"HTTP File Upload","HTTP-Dateiupload"}.
|
||||
{"Idle connection","Inaktive Verbindung"}.
|
||||
{"If you already have {{ app_name }} installed, we recommend that you continue the account creation process using the app by clicking on the button below:","Solltest du {{ app_name }} bereits installiert haben, empfehlen wir dir die Einrichtung des Kontos mittels dieser App durchzuführen indem du auf den Button unten klickst:"}.
|
||||
{"If you don't have an XMPP client installed yet, here's a list of suitable clients for your platform.","Solltest du noch keinen XMPP-Client installiert haben, haben wir hier eine Liste geeigneter Clients für deine Platform."}.
|
||||
{"If you don't see the CAPTCHA image here, visit the web page.","Wenn Sie das CAPTCHA-Bild nicht sehen, besuchen Sie die Webseite."}.
|
||||
{"Import Directory","Verzeichnis importieren"}.
|
||||
{"Import File","Datei importieren"}.
|
||||
@@ -195,6 +254,7 @@
|
||||
{"Incorrect value of 'action' in data form","Falscher Wert von 'action' in Datenformular"}.
|
||||
{"Incorrect value of 'path' in data form","Falscher Wert von 'path' in Datenformular"}.
|
||||
{"Installed Modules:","Installierte Module:"}.
|
||||
{"Installed ok? Great! <strong>Click or tap the button below</strong> to accept your invite and continue with your account setup:","Fertig mit der Installation? Prima! <strong>Drück auf den Button unten</strong> um deine Einaldung anzunehmen und mit der Einrichtung deines Kontos fortzufahren:"}.
|
||||
{"Install","Installieren"}.
|
||||
{"Insufficient privilege","Unzureichende Privilegien"}.
|
||||
{"Internal server error","Interner Serverfehler"}.
|
||||
@@ -202,6 +262,11 @@
|
||||
{"Invalid node name","Ungültiger Knotenname"}.
|
||||
{"Invalid 'previd' value","Ungültiger 'previd'-Wert"}.
|
||||
{"Invitations are not allowed in this conference","Einladungen sind in dieser Konferenz nicht erlaubt"}.
|
||||
{"Invite expired","Die Einladung ist abgelaufen"}.
|
||||
{"Invite Expired","Die Einladung ist abgelaufen"}.
|
||||
{"Invite to {{ site_name }}","Einladung für {{ site_name }}"}.
|
||||
{"Invite User","Person einladen"}.
|
||||
{"Invite","Einladung"}.
|
||||
{"IP addresses","IP-Adressen"}.
|
||||
{"is now known as","ist nun bekannt als"}.
|
||||
{"It is not allowed to send error messages to the room. The participant (~s) has sent an error message (~s) and got kicked from the room","Es ist nicht erlaubt Fehlermeldungen an den Raum zu senden. Der Teilnehmer (~s) hat eine Fehlermeldung (~s) gesendet und wurde aus dem Raum geworfen"}.
|
||||
@@ -211,6 +276,7 @@
|
||||
{"January","Januar"}.
|
||||
{"JID normalization denied by service policy","JID-Normalisierung aufgrund der Dienstrichtlinien verweigert"}.
|
||||
{"JID normalization failed","JID-Normalisierung fehlgeschlagen"}.
|
||||
{"Join {{ site_name }} with {{ app_name }}","Konto auf {{ site_name }} mittels {{ app_name }} anlegen"}.
|
||||
{"Joined MIX channels of ~ts","Beigetretene MIX-Channels von ~ts"}.
|
||||
{"Joined MIX channels:","Beigetretene MIX-Channels:"}.
|
||||
{"joins the room","betritt den Raum"}.
|
||||
@@ -222,10 +288,13 @@
|
||||
{"Last message","Letzte Nachricht"}.
|
||||
{"Last month","Letzter Monat"}.
|
||||
{"Last year","Letztes Jahr"}.
|
||||
{"Launch {{ app_name }} and sign in using your account credentials.","Starte {{ app_name }} und logge dich mit deinen Anmeldedaten ein."}.
|
||||
{"Launch Beagle IM, and select \\'Yes\\' to add a new account. Click the \\'+\\' button under the empty account list and then enter your credentials.","Starte Beagle IM und wähle \\'Yes\\' um ein neues Konto hinzuzufügen. Drücke auf das \\'+\\' unter der leeren Account-Liste und gib dann deine Anmeldedaten ein."}.
|
||||
{"Least significant bits of SHA-256 hash of text should equal hexadecimal label","Niederwertigstes Bit des SHA-256-Hashes des Textes sollte hexadezimalem Label gleichen"}.
|
||||
{"leaves the room","verlässt den Raum"}.
|
||||
{"List of users with hats","Liste der Benutzer mit Funktionen"}.
|
||||
{"List of Hats","Liste aller Hüte"}.
|
||||
{"List users with hats","Benutzer mit Funktionen auflisten"}.
|
||||
{"Log in via web","Via Web anmelden"}.
|
||||
{"Logged Out","Abgemeldet"}.
|
||||
{"Logging","Protokollierung"}.
|
||||
{"Make participants list public","Teilnehmerliste öffentlich machen"}.
|
||||
@@ -242,9 +311,11 @@
|
||||
{"Max payload size in bytes","Maximale Nutzdatengröße in Bytes"}.
|
||||
{"Maximum file size","Maximale Dateigröße"}.
|
||||
{"Maximum Number of History Messages Returned by Room","Maximale Anzahl der vom Raum zurückgegebenen History-Nachrichten"}.
|
||||
{"Maximum number of invites reached","Maximale Anzahl all Einladungen erreicht"}.
|
||||
{"Maximum number of items to persist","Maximale Anzahl persistenter Items"}.
|
||||
{"Maximum Number of Occupants","Maximale Anzahl der Teilnehmer"}.
|
||||
{"May","Mai"}.
|
||||
{"Members are allowed to invite others","Mitglieder dürfen andere einladen"}.
|
||||
{"Membership is required to enter this room","Mitgliedschaft ist erforderlich um diesen Raum zu betreten"}.
|
||||
{"Memorize your password, or write it in a paper placed in a safe place. In XMPP there isn't an automated way to recover your password if you forget it.","Merken Sie sich Ihr Passwort, oder schreiben Sie es auf einen Zettel den Sie sicher verwahren. Bei XMPP gibt es keine automatische Möglichkeit, das Passwort wiederherzustellen falls Sie es vergessen."}.
|
||||
{"Mere Availability in XMPP (No Show Value)","Bloße Verfügbarkeit in XMPP (kein Anzeigewert)"}.
|
||||
@@ -259,6 +330,7 @@
|
||||
{"Moderator","Moderator"}.
|
||||
{"Moderators Only","nur Moderatoren"}.
|
||||
{"Module failed to handle the query","Modul konnte die Anfrage nicht verarbeiten"}.
|
||||
{"Monal Logo","Monal Logo"}.
|
||||
{"Monday","Montag"}.
|
||||
{"Multicast","Multicast"}.
|
||||
{"Multiple <item/> elements are not allowed by RFC6121","Mehrere <item/>-Elemente sind laut RFC6121 nicht erlaubt"}.
|
||||
@@ -313,18 +385,21 @@
|
||||
{"None","Keine"}.
|
||||
{"Not allowed","Nicht erlaubt"}.
|
||||
{"Not Found","Nicht gefunden"}.
|
||||
{"NOT FOUND","NICHT GEFUNDEN"}.
|
||||
{"Not subscribed","Nicht abonniert"}.
|
||||
{"Notify subscribers when items are removed from the node","Abonnenten benachrichtigen, wenn Items vom Knoten entfernt werden"}.
|
||||
{"Notify subscribers when the node configuration changes","Abonnenten benachrichtigen, wenn sich die Knotenkonfiguration ändert"}.
|
||||
{"Notify subscribers when the node is deleted","Abonnenten benachrichtigen, wenn der Knoten gelöscht wird"}.
|
||||
{"November","November"}.
|
||||
{"Number of active users","Anzahl der aktiven Benutzer"}.
|
||||
{"Number of answers required","Anzahl der erforderlichen Antworten"}.
|
||||
{"Number of disabled users","Anzahl der deaktivierten Benutzer"}.
|
||||
{"Number of idle users","Anzahl der inaktiven Benutzer"}.
|
||||
{"Number of occupants","Anzahl der Teilnehmer"}.
|
||||
{"Number of Offline Messages","Anzahl der Offline-Nachrichten"}.
|
||||
{"Number of online users","Anzahl der angemeldeten Benutzer"}.
|
||||
{"Number of registered users","Anzahl der registrierten Benutzer"}.
|
||||
{"Number of seconds after which to automatically purge items, or `max` for no specific limit other than a server imposed maximum","Anzahl der Sekunden, nach denen Elemente automatisch gelöscht werden sollen, oder `max`, wenn es keine spezifische Grenze gibt, außer einer vom Server festgelegten Höchstgrenze"}.
|
||||
{"Occupants are allowed to invite others","Teilnehmer dürfen andere einladen"}.
|
||||
{"Occupants are allowed to query others","Teilnehmer dürfen andere abfragen"}.
|
||||
{"Occupants May Change the Subject","Teilnehmer dürfen das Thema ändern"}.
|
||||
{"October","Oktober"}.
|
||||
@@ -347,12 +422,15 @@
|
||||
{"Only service administrators are allowed to send service messages","Nur Service-Administratoren dürfen Servicenachrichten senden"}.
|
||||
{"Only those on a whitelist may associate leaf nodes with the collection","Nur jemand auf einer Whitelist darf Blattknoten mit der Sammlung verknüpfen"}.
|
||||
{"Only those on a whitelist may subscribe and retrieve items","Nur jemand auf einer Whitelist darf Items abonnieren und abrufen"}.
|
||||
{"Open the app","App öffnen"}.
|
||||
{"Organization Name","Name der Organisation"}.
|
||||
{"Organization Unit","Abteilung"}.
|
||||
{"Other Modules Available:","Andere Module verfügbar:"}.
|
||||
{"Other software","Andere Software"}.
|
||||
{"Outgoing s2s Connections","Ausgehende s2s-Verbindungen"}.
|
||||
{"Owner privileges required","Besitzerrechte erforderlich"}.
|
||||
{"Packet relay is denied by service policy","Paket-Relay aufgrund der Dienstrichtlinien verweigert"}.
|
||||
{"Page navigation","Seiten-Navigation"}.
|
||||
{"Participant ID","Teilnehmer-ID"}.
|
||||
{"Participant","Teilnehmer"}.
|
||||
{"Password Verification","Passwort bestätigen"}.
|
||||
@@ -361,12 +439,15 @@
|
||||
{"Password:","Passwort:"}.
|
||||
{"Path to Dir","Pfad zum Verzeichnis"}.
|
||||
{"Path to File","Pfad zur Datei"}.
|
||||
{"Payload semantic type information","Semantische Typinformation des Payloads"}.
|
||||
{"Period: ","Zeitraum: "}.
|
||||
{"Persist items to storage","Items dauerhaft speichern"}.
|
||||
{"Persistent","Persistent"}.
|
||||
{"Ping query is incorrect","Ping-Anfrage ist falsch"}.
|
||||
{"Ping","Ping"}.
|
||||
{"Please note that these options will only backup the builtin Mnesia database. If you are using the ODBC module, you also need to backup your SQL database separately.","Beachten Sie, dass diese Optionen nur die eingebaute Mnesia-Datenbank sichern. Wenn Sie das ODBC-Modul verwenden, müssen Sie auch Ihre SQL-Datenbank separat sichern."}.
|
||||
{"Please provide a password! Minimum length: {{ password_min_length }}","Bitte gibt ein Passwort ein! Mindestens {{ password_min_length }} Zeichen."}.
|
||||
{"Please provide a valid username!","Bitte gib einen gültigen Benutzernamen ein!"}.
|
||||
{"Please, wait for a while before sending new voice request","Bitte warten Sie ein wenig, bevor Sie eine weitere Sprachrecht-Anforderung senden"}.
|
||||
{"Pong","Pong"}.
|
||||
{"Possessing 'ask' attribute is not allowed by RFC6121","Ein 'ask'-Attribut zu besitzen ist laut RFC6121 nicht erlaubt"}.
|
||||
@@ -376,6 +457,7 @@
|
||||
{"Previous session PID has exited","Vorherige Sitzungs-PID wurde beendet"}.
|
||||
{"Previous session PID is dead","Vorherige Sitzungs-PID ist tot"}.
|
||||
{"Previous session timed out","Zeitüberschreitung bei vorheriger Sitzung"}.
|
||||
{"Previous","Zurück"}.
|
||||
{"private, ","privat, "}.
|
||||
{"Public","Öffentlich"}.
|
||||
{"Publish model","Veröffentlichungsmodell"}.
|
||||
@@ -393,11 +475,18 @@
|
||||
{"Receive notification of new items only","Benachrichtigung nur von neuen Items erhalten"}.
|
||||
{"Receive notification of new nodes only","Benachrichtigung nur von neuen Knoten erhalten"}.
|
||||
{"Recipient is not in the conference room","Empfänger ist nicht im Konferenzraum"}.
|
||||
{"Re-Enable User","Benutzer wieder aktivieren"}.
|
||||
{"Register an XMPP account","Ein XMPP-Konto registrieren"}.
|
||||
{"Register on {{ site_name }}","Registriere dich auf {{ site_name }}"}.
|
||||
{"Register","Anmelden"}.
|
||||
{"Registration error","Fehler beim registrieren"}.
|
||||
{"Registration Error","Fehler beim Registrieren"}.
|
||||
{"Registration Form","Registrierungsformular"}.
|
||||
{"Registration Success","Registrierung erfolgreich"}.
|
||||
{"Remote copy","Fernkopie"}.
|
||||
{"Remove a hat from a user","Eine Funktion bei einem Benutzer entfernen"}.
|
||||
{"Remove User","Benutzer löschen"}.
|
||||
{"Renga Logo","Renga Logo"}.
|
||||
{"Replaced by new connection","Durch neue Verbindung ersetzt"}.
|
||||
{"Request has timed out","Zeitüberschreitung bei Anforderung"}.
|
||||
{"Request is ignored","Anforderung wird ignoriert"}.
|
||||
@@ -423,16 +512,21 @@
|
||||
{"Roster size","Kontaktlistengröße"}.
|
||||
{"Running Nodes","Laufende Knoten"}.
|
||||
{"~s invites you to the room ~s","~s lädt Sie in den Raum ~s ein"}.
|
||||
{"Sad person holding empty box","Eine traurige Person mit einer leeren Schachtel"}.
|
||||
{"Saturday","Samstag"}.
|
||||
{"Scan invite code","Einladungscode einscannen"}.
|
||||
{"Scan with mobile device","Mit Mobilgerät einscannen"}.
|
||||
{"Search from the date","Suche ab Datum"}.
|
||||
{"Search Results for ","Suchergebnisse für "}.
|
||||
{"Search the text","Text durchsuchen"}.
|
||||
{"Search until the date","Suche bis Datum"}.
|
||||
{"Search users in ","Suche Benutzer in "}.
|
||||
{"Select","Auswählen"}.
|
||||
{"Send announcement to all online users on all hosts","Ankündigung an alle angemeldeten Benutzer auf allen Hosts senden"}.
|
||||
{"Send announcement to all online users","Ankündigung an alle angemeldeten Benutzer senden"}.
|
||||
{"Send announcement to all users on all hosts","Ankündigung an alle Benutzer auf allen Hosts senden"}.
|
||||
{"Send announcement to all users","Ankündigung an alle Benutzer senden"}.
|
||||
{"Send this invite to your device","Sende diese Einladung auf dein Gerät"}.
|
||||
{"September","September"}.
|
||||
{"Server:","Server:"}.
|
||||
{"Service list retrieval timed out","Zeitüberschreitung bei Abfrage der Serviceliste"}.
|
||||
@@ -441,10 +535,16 @@
|
||||
{"Set message of the day on all hosts and send to online users","Nachricht des Tages auf allen Hosts setzen und an alle angemeldeten Benutzer senden"}.
|
||||
{"Shared Roster Groups","Gruppen der gemeinsamen Kontaktliste"}.
|
||||
{"Show Integral Table","Integral-Tabelle anzeigen"}.
|
||||
{"Show Occupants Join/Leave","Betreten und Verlassen von Teilnehmern anzeigen"}.
|
||||
{"Show Ordinary Table","Gewöhnliche Tabelle anzeigen"}.
|
||||
{"Show","Anzeigen"}.
|
||||
{"Showing apps for <span class='platform-name'>your current platform</span> only. You may also <a href='#' id='show-all-clients-button' tabindex=\"{{ tabidx }}\">view all apps.</a>","Wir zeigen dir nur Apps für <span class='platform-name'>deine aktuelle Platform</span> an. Du kannst dir gerne auch <a href='#' id='show-all-clients-button' tabindex=\"{{ tabidx }}\">sämtliche Apps anzeigen lassen</a>."}.
|
||||
{"Shut Down Service","Dienst herunterfahren"}.
|
||||
{"Siskin IM Logo","Siskin IM Logo"}.
|
||||
{"SOCKS5 Bytestreams","SOCKS5-Bytestreams"}.
|
||||
{"Some XMPP clients can store your password in the computer, but you should do this only in your personal computer for safety reasons.","Einige XMPP-Clients speichern Ihr Passwort auf dem Computer. Aus Sicherheitsgründen sollten Sie das nur auf Ihrem persönlichen Computer tun."}.
|
||||
{"Sorry, it looks like this invite code has expired!","Entschuldigung, es sieht so aus als wäre diese Einladung abgelaufen!"}.
|
||||
{"Sorry, there was a problem registering your account.","Es trat leider ein Fehler beim Erstellen des Kontos auf."}.
|
||||
{"Sources Specs:","Quellenspezifikationen:"}.
|
||||
{"Specify the access model","Geben Sie das Zugangsmodell an"}.
|
||||
{"Specify the event message type","Geben Sie den Ereignisnachrichtentyp an"}.
|
||||
@@ -452,12 +552,21 @@
|
||||
{"Stanza id is not valid","Stanza-ID ist ungültig"}.
|
||||
{"Stanza ID","Stanza-ID"}.
|
||||
{"Statically specify a replyto of the node owner(s)","Ein 'replyto' des/der Nodebesitzer(s) statisch angeben"}.
|
||||
{"Step 1: Download and install {{ app_name }}","Schritt 1: {{ app_name }} herunterladen und installieren"}.
|
||||
{"Step 1: Install {{ app_name }}","Schritt 1: Installiere {{ app_name }}"}.
|
||||
{"Step 2: Activate your account","Schritt 2: Konto aktivieren"}.
|
||||
{"Step 2: Connect {{ app_name }} to your new account","Schritt 2: Verbinde {{ app_name }} mit deinem neuen Konto"}.
|
||||
{"Stopped Nodes","Angehaltene Knoten"}.
|
||||
{"Store binary backup:","Speichere binäres Backup:"}.
|
||||
{"Store plain text backup:","Speichere Klartext-Backup:"}.
|
||||
{"Stream management is already enabled","Stream-Verwaltung ist bereits aktiviert"}.
|
||||
{"Stream management is not enabled","Stream-Verwaltung ist nicht aktiviert"}.
|
||||
{"<strong>{{ site_name }}</strong> is part of XMPP, a secure and decentralized messaging network. To begin chatting using <strong>{{ app_name }}</strong> you need to first register an account.","<strong>{{ site_name }}</strong> ist Teil von XMPP, ein sicheres und dezentrales Sofortnachrichten-Netzwerk. Um mittels <strong>{{ app_name }}</strong> chatten zu können musst du zunächst ein Konto anlegen."}.
|
||||
{"<strong>{{ site_name }}</strong> is part of XMPP, a secure and decentralized messaging network. To begin chatting you need to first register an account.","<strong>{{ site_name }}</strong> is Teil von XMPP, ein sicheres und dezentrales Sofortnachrichten-Netzwerk. Um chatten zu können musst du zunächst ein Konto anlegen."}.
|
||||
{"<strong>No suitable software installed right now?</strong> You can also log in to your account through our online web chat!","<strong>Du hast keine passende Software zur Hand im Moment?</strong> Du kannst dich auch mit unserem online Webchat anmelden!"}.
|
||||
{"<strong>Tip:</strong> You can open this invite on your mobile device by scanning a barcode with your camera.","<strong>Tipp:</strong> du kannst diese Einladung auf deinem mobilen Endgerät öffnen indem du einen Barcode mit deiner Kamera scannst."}.
|
||||
{"Subject","Betreff"}.
|
||||
{"Submit","Senden"}.
|
||||
{"Submitted","Gesendet"}.
|
||||
{"Subscriber Address","Abonnenten-Adresse"}.
|
||||
{"Subscribers may publish","Abonnenten dürfen veröffentlichen"}.
|
||||
@@ -486,6 +595,9 @@
|
||||
{"The JIDs of those to contact with questions","Die JIDs jener, die bei Fragen zu kontaktieren sind"}.
|
||||
{"The JIDs of those with an affiliation of owner","Die JIDs jener mit einer Zugehörigkeit von Besitzer"}.
|
||||
{"The JIDs of those with an affiliation of publisher","Die JIDs jener mit einer Zugehörigkeit von Veröffentlicher"}.
|
||||
{"The list of all active users","Die Liste aller aktiven Benutzer"}.
|
||||
{"The list of all disabled users","Die Liste aller deaktivierten Benutzer"}.
|
||||
{"The list of all idle users","Die Liste aller inaktiven Benutzer"}.
|
||||
{"The list of all online users","Die Liste aller angemeldeter Benutzer"}.
|
||||
{"The list of all users","Die Liste aller Benutzer"}.
|
||||
{"The list of JIDs that may associate leaf nodes with a collection","Die Liste der JIDs die Blattknoten mit einer Sammlung verknüpfen dürfen"}.
|
||||
@@ -507,15 +619,20 @@
|
||||
{"The presence states for which an entity wants to receive notifications","Die Präsenzzustände für welche eine Entität Benachrichtigungen erhalten will"}.
|
||||
{"The query is only allowed from local users","Die Anfrage ist nur von lokalen Benutzern erlaubt"}.
|
||||
{"The query must not contain <item/> elements","Die Anfrage darf keine <item/>-Elemente enthalten"}.
|
||||
{"The role","Die Rolle"}.
|
||||
{"The room subject can be modified by participants","Das Raum-Thema kann von Teilnehmern geändert werden"}.
|
||||
{"The semantic type information of data in the node, usually specified by the namespace of the payload (if any)","Die Art der Knotendaten, üblicherweise durch den Namespace der Nutzdaten angegeben (falls vorhanden)"}.
|
||||
{"The sender of the last received message","Der Absender der letzten erhaltenen Nachricht"}.
|
||||
{"The stanza MUST contain only one <active/> element, one <default/> element, or one <list/> element","Das Stanza darf nur ein <active/>-Element, ein <default/>-Element oder ein <list/>-Element enthalten"}.
|
||||
{"The subscription identifier associated with the subscription request","Die mit der Abonnement-Anforderung verknüpfte Abonnement-Bezeichnung"}.
|
||||
{"The token provided is either invalid or expired.","Der Einladungscode ist entweder ungültig oder abgelaufen."}.
|
||||
{"The URL of an XSL transformation which can be applied to payloads in order to generate an appropriate message body element.","Die URL einer XSL-Transformation welche auf Nutzdaten angewendet werden kann, um ein geeignetes Nachrichtenkörper-Element zu generieren."}.
|
||||
{"The URL of an XSL transformation which can be applied to the payload format in order to generate a valid Data Forms result that the client could display using a generic Data Forms rendering engine","Die URL einer XSL-Transformation welche auf das Nutzdaten-Format angewendet werden kann, um ein gültiges Data Forms-Ergebnis zu generieren das der Client mit Hilfe einer generischen Data Forms-Rendering-Engine anzeigen könnte"}.
|
||||
{"There was an error changing the password: ","Es trat ein Fehler beim Ändern des Passwortes auf: "}.
|
||||
{"There was an error creating the account: ","Es trat ein Fehler beim Erstellen des Kontos auf: "}.
|
||||
{"There was an error deleting the account: ","Es trat ein Fehler beim Löschen des Kontos auf: "}.
|
||||
{"This button works only if you have the app installed already!","Dieser Button funktioniert nur, wenn du die App bereits installiert hast!"}.
|
||||
{"This is an invite from <strong>{{ inviter }}</strong> to connect and chat on the XMPP network. If you already have an XMPP client installed just press the button below!","Dies ist eine Kontakt-Einladung von <strong>{{ inviter }}</strong> um miteinander über XMPP zu chatten. Solltest du bereits einen XMPP-Client haben, so drücke einfach auf den Button hier unten!"}.
|
||||
{"This is case insensitive: macbeth is the same that MacBeth and Macbeth.","Dies ist schreibungsunabhängig: macbeth ist gleich MacBeth und Macbeth."}.
|
||||
{"This page allows to register an XMPP account in this XMPP server. Your JID (Jabber ID) will be of the form: username@server. Please read carefully the instructions to fill correctly the fields.","Diese Seite erlaubt das Anlegen eines XMPP-Kontos auf diesem XMPP-Server. Ihre JID (Jabber-ID) wird diese Form aufweisen: benutzername@server. Bitte lesen Sie die Anweisungen genau durch, um die Felder korrekt auszufüllen."}.
|
||||
{"This page allows to unregister an XMPP account in this XMPP server.","Diese Seite erlaubt es, ein XMPP-Konto von diesem XMPP-Server zu entfernen."}.
|
||||
@@ -524,7 +641,9 @@
|
||||
{"Thursday","Donnerstag"}.
|
||||
{"Time delay","Zeitverzögerung"}.
|
||||
{"Timed out waiting for stream resumption","Zeitüberschreitung beim Warten auf Streamfortsetzung"}.
|
||||
{"To get started, you need to install an app for your platform:","Um loszulegen musst du eine App für deine Platform installieren:"}.
|
||||
{"To register, visit ~s","Um sich zu registrieren, besuchen Sie ~s"}.
|
||||
{"To start chatting, you need to enter your new account credentials into your chosen XMPP software.","Um mit dem Chatten zu beginnen, musst du deine neuen Anmeldedaten in der XMPP Software deiner Wahl eintragen."}.
|
||||
{"To ~ts","An ~ts"}.
|
||||
{"Token TTL","Token-TTL"}.
|
||||
{"Too many active bytestreams","Zu viele aktive Bytestreams"}.
|
||||
@@ -557,15 +676,20 @@
|
||||
{"Updating the vCard is not supported by the vCard storage backend","Aktualisierung der vCard wird vom vCard-Speicher-Backend nicht unterstützt"}.
|
||||
{"Upgrade","Upgrade"}.
|
||||
{"URL for Archived Discussion Logs","URL für archivierte Diskussionsprotokolle"}.
|
||||
{"Use a <em>QR code</em> scanner on your mobile device to scan the code below:","Benutze einen <em>QR-Code</em> Scanner auf deinem mobilen Endgerät um den Code hier unten zu scannen:"}.
|
||||
{"User already exists","Benutzer existiert bereits"}.
|
||||
{"User (jid)","Benutzer (JID)"}.
|
||||
{"User JID","Benutzer-JID"}.
|
||||
{"User Management","Benutzerverwaltung"}.
|
||||
{"User not allowed to perform an IQ set on another user's vCard.","Benutzer darf kein IQ-set auf die vCard eines anderen ausführen."}.
|
||||
{"User removed","Benutzer entfernt"}.
|
||||
{"User session not found","Benutzersitzung nicht gefunden"}.
|
||||
{"User session terminated","Benutzersitzung beendet"}.
|
||||
{"User ~ts","Benutzer ~ts"}.
|
||||
{"User","Benutzer"}.
|
||||
{"Username invalid","Benutzername ungültig"}.
|
||||
{"Username is reserved","Benutzername ist reserviert"}.
|
||||
{"Username","Benutzername"}.
|
||||
{"Username:","Benutzername:"}.
|
||||
{"Users are not allowed to register accounts so quickly","Benutzer dürfen Konten nicht so schnell registrieren"}.
|
||||
{"Users Last Activity","Letzte Benutzeraktivität"}.
|
||||
@@ -601,6 +725,7 @@
|
||||
{"Wrong parameters in the web formulary","Falsche Parameter im Webformular"}.
|
||||
{"Wrong xmlns","Falscher xmlns"}.
|
||||
{"XMPP Account Registration","XMPP-Konto-Registrierung"}.
|
||||
{"XMPP client for Haiku","XMPP-Client für Haiku"}.
|
||||
{"XMPP Domains","XMPP-Domänen"}.
|
||||
{"XMPP Show Value of Away","XMPP-Anzeigewert von Abwesend"}.
|
||||
{"XMPP Show Value of Chat","XMPP-Anzeigewert von Chat"}.
|
||||
@@ -610,8 +735,17 @@
|
||||
{"You are being removed from the room because of a system shutdown","Sie werden wegen einer Systemabschaltung aus dem Raum entfernt"}.
|
||||
{"You are not allowed to send private messages","Sie dürfen keine privaten Nachrichten senden"}.
|
||||
{"You are not joined to the channel","Sie sind dem Raum nicht beigetreten"}.
|
||||
{"You can connect to {{ site_name }} using any XMPP-compatible software. If your preferred software is not listed above, you may still <a href=\"{{ registration_url }}\" tabindex='{{ tabidx }}'>register an account manually</a>.","Du kannst dich mit {{ site_name }} über jede XMPP-kompatible Software verbinden. Sollte deine gewünschte Software hier oben nicht aufgeführt sein, so kannst du zumindest <a href=\"{{ registration_url }}\" tabindex='{{ tabidx }}'>einen Account manuell anlegen</a>."}.
|
||||
{"You can later change your password using an XMPP client.","Sie können Ihr Passwort später mit einem XMPP-Client ändern."}.
|
||||
{"You can now set up {{ app_name }} and connect it to your new account.","Jetzt kannst du {{ app_name }} einrichten und mit deinem neuen Konto verknüpfen."}.
|
||||
{"You can start chatting right away with {{ app_name }}. Let's get started!","Mittels {{ app_name }} kannst du direkt mit dem Chatten loslegen. Auf geht's!"}.
|
||||
{"You can transfer this invite to your mobile device by scanning a code with your camera.","Du kannst diese Einladung auf dein Mobilgerät übertragen indem du den Code mit Deiner Kamera einscannst."}.
|
||||
{"You have been banned from this room","Sie wurden aus diesem Raum verbannt"}.
|
||||
{"You have been invited to chat on {{ site_name }}, part of the XMPP secure and decentralized messaging network.","Du wurdest auf <strong>{{ site_name }}</strong> zum Chat eingeladen, Teil des sicheren und dezentralen XMPP-Sofortnachrichten-Netzwerkes."}.
|
||||
{"You have been invited to chat on <strong>{{ site_name }}</strong>, part of the XMPP secure and decentralized messaging network.","Du wurdest auf <strong>{{ site_name }}</strong> zum Chat eingeladen. <strong>{{ site_name }}</strong> ist Teil des sicheren und dezentralen XMPP-Sofortnachrichten-Netzwerkes."}.
|
||||
{"You have been invited to chat with <strong>{{ inviter }}</strong> on {{ site_name }}, part of the XMPP secure and decentralized messaging network.","Du wurdest von <strong>{{ inviter }}</strong> auf {{ site_name }} zum Chat eingeladen. {{ site_name }} ist Teil des sicheren und dezentralen XMPP-Sofortnachrichten-Netzwerkes."}.
|
||||
{"You have been invited to chat with <strong>{{ inviter }}</strong> on <strong>{{ site_name }}</strong>, part of the XMPP secure and decentralized messaging network.","Du wurdest von <strong>{{ inviter }}</strong> auf <strong>{{ site_name }}</strong> zum Chat eingeladen. <strong>{{ site_name }}</strong> ist Teil des sicheren und dezentralen XMPP-Sofortnachrichten-Netzwerkes."}.
|
||||
{"You have created an account on <strong>{{ site_name }}</strong>.","Du hast ein Konto auf <strong>{{ site_name }}</strong> angelegt."}.
|
||||
{"You have joined too many conferences","Sie sind zu vielen Konferenzen beigetreten"}.
|
||||
{"You must fill in field \"Nickname\" in the form","Sie müssen das Feld \"Spitzname\" im Formular ausfüllen"}.
|
||||
{"You need a client that supports x:data and CAPTCHA to register","Sie benötigen einen Client der x:data und CAPTCHA unterstützt, um sich zu registrieren"}.
|
||||
@@ -619,6 +753,7 @@
|
||||
{"You need an x:data capable client to search","Sie benötigen einen Client der x:data unterstützt, um zu suchen"}.
|
||||
{"Your active privacy list has denied the routing of this stanza.","Ihre aktive Privacy-Liste hat das Routing dieses Stanzas verweigert."}.
|
||||
{"Your contact offline message queue is full. The message has been discarded.","Die Offline-Nachrichten-Warteschlange Ihres Kontaktes ist voll. Die Nachricht wurde verworfen."}.
|
||||
{"Your password is stored encrypted on the server and will not be accessible after you close this page. Keep it safe and never share it with anyone.","Dein Passwort wird verschlüsselt auf dem Server gespeichert und wird nicht mehr im Klartext verfügbar sein, nachdem du diese Seite geschlossen hast. Verwahre es an einem sicheren Ort und teile es mit niemandem!"}.
|
||||
{"Your subscription request and/or messages to ~s have been blocked. To unblock your subscription request, visit ~s","Ihre Abonnement-Anforderung und/oder Nachrichten an ~s wurden blockiert. Um Ihre Abonnement-Anforderungen freizugeben, besuchen Sie ~s"}.
|
||||
{"Your XMPP account was successfully registered.","Ihr XMPP-Konto wurde erfolgreich registriert."}.
|
||||
{"Your XMPP account was successfully unregistered.","Ihr XMPP-Konto wurde erfolgreich entfernt."}.
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
{"Access model","Μοντέλο πρόσβασης"}.
|
||||
{"Account doesn't exist","Ο λογαριασμός δεν υπάρχει"}.
|
||||
{"Action on user","Eνέργεια για το χρήστη"}.
|
||||
{"Add a hat to a user","Προσθέστε ένα καπέλο σε έναν χρήστη"}.
|
||||
{"Add User","Προσθήκη Χρήστη"}.
|
||||
{"Administration of ","Διαχείριση του "}.
|
||||
{"Administration","Διαχείριση"}.
|
||||
@@ -225,7 +224,6 @@
|
||||
{"Last year","Πέρυσι"}.
|
||||
{"Least significant bits of SHA-256 hash of text should equal hexadecimal label","Τα ψηφία μικρότερης αξίας του αθροίσματος SHA-256 του κειμένου θα έπρεπε να ισούνται με την δεκαεξαδική ετικέτα"}.
|
||||
{"leaves the room","εγκαταλείπει την αίθουσα"}.
|
||||
{"List of users with hats","Λίστα των χρηστών με καπέλα"}.
|
||||
{"List users with hats","Λίστα χρηστών με καπέλα"}.
|
||||
{"Logged Out","Αποσυνδεδεμένος"}.
|
||||
{"Logging","Καταγραφή"}.
|
||||
@@ -325,7 +323,6 @@
|
||||
{"Number of online users","Αριθμός συνδεδεμένων χρηστών"}.
|
||||
{"Number of registered users","Αριθμός εγγεγραμμένων χρηστών"}.
|
||||
{"Number of seconds after which to automatically purge items, or `max` for no specific limit other than a server imposed maximum","Αριθμός δευτερολέπτων μετά από τα οποία θα καθαρίζονται αυτόματα τα στοιχεία, ή `max` για κανένα συγκεκριμένο όριο εκτός από το μέγιστο που επιβάλλει ο διακομιστής"}.
|
||||
{"Occupants are allowed to invite others","Οι συμμετέχοντες μπορούν να προσκαλέσουν και άλλους"}.
|
||||
{"Occupants are allowed to query others","Οι κάτοικοι επιτρέπεται να ρωτούν άλλους"}.
|
||||
{"Occupants May Change the Subject","Επιτρέψτε στους χρήστες να αλλάζουν το Θέμα"}.
|
||||
{"October","Οκτώβριος"}.
|
||||
@@ -462,6 +459,7 @@
|
||||
{"Stream management is not enabled","Η διαχείριση Ροών δεν είναι ενεργοποιημένη"}.
|
||||
{"Subject","Θέμα"}.
|
||||
{"Submitted","Υποβλήθηκε"}.
|
||||
{"Submit","Υποβολή"}.
|
||||
{"Subscriber Address","Διεύθυνση Συνδρομητή"}.
|
||||
{"Subscribers may publish","Οι συνδρομητές μπορούν να δημοσιεύσουν"}.
|
||||
{"Subscription requests must be approved and only subscribers may retrieve items","Τα αιτήματα για συνδρομή πρέπει να εγκριθούν και μόνο οι συνδρομητές μπορούν να λάβουν αντικείμενα"}.
|
||||
|
||||
@@ -295,6 +295,7 @@
|
||||
{"Store binary backup:","Konservu duuman sekurkopion:"}.
|
||||
{"Store plain text backup:","Skribu sekurkopion en plata tekstdosiero"}.
|
||||
{"Subject","Temo"}.
|
||||
{"Submit","Sendu"}.
|
||||
{"Submitted","Sendita"}.
|
||||
{"Subscriber Address","Abonanta adreso"}.
|
||||
{"Subscribers may publish","Abonantoj rajtas publici"}.
|
||||
|
||||
@@ -4,22 +4,34 @@
|
||||
%% https://docs.ejabberd.im/developer/extending-ejabberd/localization/
|
||||
|
||||
{" (Add * to the end of field to match substring)"," (Añade * al final del campo para buscar subcadenas)"}.
|
||||
{"{{ app_name }} already installed?","¿Ya está instalado {{ app_name }}?"}.
|
||||
{" has set the subject to: "," ha puesto el asunto: "}.
|
||||
{"{{ inviter }} has invited you to connect!","¡{{ inviter }} te ha invitado a conectarte!"}.
|
||||
{"# participants","# participantes"}.
|
||||
{"A description of the node","Una descripción del nodo"}.
|
||||
{"A friendly name for the node","Un nombre sencillo para el nodo"}.
|
||||
{"A fully-featured desktop chat client for Windows and Linux.","Un cliente de charla con muchas posibilidades para Windows y Linux."}.
|
||||
{"A lean Jabber/XMPP client for Android. It aims at usability, low overhead and security, and works on low-end Android devices starting with Android 4.0.","Un cliente Jabber/XMPP ligero para Android. Está orientado a la usabilidad, seguridad y bajo consumo, y funciona en aparatos Android antiguos a partir de Android 4.0."}.
|
||||
{"A lightweight and powerful XMPP client for iPhone and iPad. It provides an easy way to talk and share moments with your friends.","Un cliente XMPP ligero y potente para iPhone e iPad. Proporciona una forma sencilla de charlar y compartir momentos con tus amistades."}.
|
||||
{"A modern open-source chat client for iPhone and iPad. It is easy to use and has a clean user interface.","Un cliente de charla moderno y de software libre para iPhone e iPad. Es simple de usar y tiene una interface de usuario limpia."}.
|
||||
{"A modern open-source chat client for Mac. It is easy to use and has a clean user interface.","Un cliente de charla moderno y de software libre para Mac. Es simple de usar y tiene una interface de usuario limpia."}.
|
||||
{"A modern open-source chat client for the desktop. It focuses on providing a clean and reliable Jabber/XMPP experience while having your privacy in mind.","Un cliente de charla moderno y de software libre para el escritorio. Está enfocado en proporcionar una experiencia Jabber/XMPP limpia y confiable, mientras mantienes tu privacidad en mente."}.
|
||||
{"A password is required to enter this room","(Añade * al final del campo para buscar subcadenas)"}.
|
||||
{"A Web Page","Una página web"}.
|
||||
{"Accept invite using {{ app_name }}","Aceptar la invitación usando {{ app_name }}"}.
|
||||
{"Accept","Aceptar"}.
|
||||
{"Access denied by service policy","Acceso denegado por la política del servicio"}.
|
||||
{"Access model","Modelo de Acceso"}.
|
||||
{"Account doesn't exist","La cuenta no existe"}.
|
||||
{"Action on user","Acción en el usuario"}.
|
||||
{"Add a hat to a user","Añade un sombrero a un usuario"}.
|
||||
{"Add {{ inviter }} to your contact list","Añade {{ inviter }} a tu lista de contactos"}.
|
||||
{"Add Contact","Añadir Contacto"}.
|
||||
{"Add User","Añadir usuario"}.
|
||||
{"Administration of ","Administración de "}.
|
||||
{"Administration","Administración"}.
|
||||
{"Administrator privileges required","Se necesita privilegios de administrador"}.
|
||||
{"After clicking the button you will be taken to {{ app_name }} to finish setting up your new {{ site_name }} account.","Después de pulsar el botón, se te llevará a {{ app_name }} para completar la preparación de tu nueva cuenta en {{ site_name }}."}.
|
||||
{"After successfully installing {{ app_name }}, come back to this page and <strong>continue with Step 2</strong>.","Después de haber instalado {{ app_name }}, regresa a esta página para <strong>continuar con el Paso 2</strong>."}.
|
||||
{"All activity","Toda la actividad"}.
|
||||
{"All Users","Todos los usuarios"}.
|
||||
{"Allow subscription","Permitir la subscripción"}.
|
||||
@@ -47,8 +59,11 @@
|
||||
{"Anyone with Voice","Cualquiera con Voz"}.
|
||||
{"Anyone","Cualquiera"}.
|
||||
{"API Commands","Comandos API"}.
|
||||
{"Apple Store Logo","Logo de la Apple Store"}.
|
||||
{"April","Abril"}.
|
||||
{"Arguments","Argumentos"}.
|
||||
{"As a final reminder, your account details are shown below:","Como último recordatorio, los detalles de tu cuenta se muestran aquí:"}.
|
||||
{"Assign a hat to a user","Asigna un sombrero a un usuario"}.
|
||||
{"Attribute 'channel' is required for this request","El atributo 'channel' es necesario para esta petición"}.
|
||||
{"Attribute 'id' is mandatory for MIX messages","El atributo 'id' es necesario para mensajes MIX"}.
|
||||
{"Attribute 'jid' is not allowed here","El atributo 'jid' no está permitido aqui"}.
|
||||
@@ -61,6 +76,9 @@
|
||||
{"Backup to File at ","Guardar copia de seguridad en fichero en "}.
|
||||
{"Backup","Guardar copia de seguridad"}.
|
||||
{"Bad format","Mal formato"}.
|
||||
{"BAD REQUEST","MALA PETICIÓN"}.
|
||||
{"Beagle IM by Tigase, Inc. is a lightweight and powerful XMPP client for macOS.","Beagle IM de Tigase, Inc. es un cliente XMPP ligero y potente para macOS."}.
|
||||
{"Beagle IM Logo","Logo de Beagle IM"}.
|
||||
{"Birthday","Cumpleaños"}.
|
||||
{"Both the username and the resource are required","Se requiere tanto el nombre de usuario como el recurso"}.
|
||||
{"Bytestream already activated","Bytestream ya está activado"}.
|
||||
@@ -77,24 +95,37 @@
|
||||
{"Channel JID","JID del Canal"}.
|
||||
{"Channels","Canales"}.
|
||||
{"Characters not allowed:","Caracteres no permitidos:"}.
|
||||
{"Chat address (JID)","Dirección de charla (JID)"}.
|
||||
{"Chatroom configuration modified","Configuración de la sala modificada"}.
|
||||
{"Chatroom is created","Se ha creado la sala"}.
|
||||
{"Chatroom is destroyed","Se ha destruido la sala"}.
|
||||
{"Chatroom is started","Se ha iniciado la sala"}.
|
||||
{"Chatroom is stopped","Se ha detenido la sala"}.
|
||||
{"Chatrooms","Salas de charla"}.
|
||||
{"Choose a username and password to register with this server","Escoge un nombre de usuario y contraseña para registrarte en este servidor"}.
|
||||
{"Choose a username and password to register with this server","Escoge un nombre de cuenta y contraseña para registrarte en este servidor"}.
|
||||
{"Choose a username, this will become the first part of your new chat address.","Escoge un nombre para tu cuenta, este será la primera parte de tu nueva dirección de charla."}.
|
||||
{"Choose storage type of tables","Selecciona tipo de almacenamiento de las tablas"}.
|
||||
{"Choose whether to approve this entity's subscription.","Decidir si aprobar la subscripción de esta entidad."}.
|
||||
{"City","Ciudad"}.
|
||||
{"Click the button to open the Dino website where you can download and install it on your PC.","Pulsa en el botón para abrir la página de Dino donde podrás descargarlo e instalarlo."}.
|
||||
{"Client acknowledged more stanzas than sent by server","El cliente ha reconocido más paquetes de los que el servidor ha enviado"}.
|
||||
{"Close","Cerrar"}.
|
||||
{"Clustering","Clustering"}.
|
||||
{"Commands","Comandos"}.
|
||||
{"Conference room does not exist","La sala de conferencias no existe"}.
|
||||
{"Configuration of room ~s","Configuración para la sala ~s"}.
|
||||
{"Configuration","Configuración"}.
|
||||
{"Congratulations!","¡Enhorabuena!"}.
|
||||
{"Contact Addresses (normally, room owner or owners)","Direcciones de contacto (normalmente la del dueño o dueños de la sala)"}.
|
||||
{"Contacts","Contactos"}.
|
||||
{"Conversations is a Jabber/XMPP client for Android 6.0+ smartphones that has been optimized to provide a unique mobile experience.","Conversations es un cliente Jabber/XMPP para móviles Android 6.0+ optimizado para proporcionar una experiencia móvil única."}.
|
||||
{"Conversations Logo","Logo de Conversations"}.
|
||||
{"Country","País"}.
|
||||
{"Create a Hat","Crear un sombrero"}.
|
||||
{"Create Account","Crear Cuenta"}.
|
||||
{"Create an account","Crear una cuenta"}.
|
||||
{"Creating an account will allow to communicate with other people on <strong>{{ site_name }}</strong> and other services on the XMPP network.","Crear una cuenta te permitirá comunicarte con otra gente en <strong>{{ site_name }}</strong> y en otros servidores de la red XMPP."}.
|
||||
{"Creating an account will allow to communicate with <strong>{{ inviter }}</strong> and other people on <strong>{{ site_name }}</strong> and other services on the XMPP network.","Crear una cuenta te permitirá comunicarte con <strong>{{ inviter }}</strong> y otras personas en <strong>{{ site_name }}</strong> y en otros servicios de la red XMPP."}.
|
||||
{"Current Discussion Topic","Tema de discusión actual"}.
|
||||
{"Database failure","Error en la base de datos"}.
|
||||
{"Database Tables Configuration at ","Configuración de tablas de la base de datos en "}.
|
||||
@@ -106,8 +137,16 @@
|
||||
{"Delete User","Borrar usuario"}.
|
||||
{"Deliver event notifications","Entregar notificaciones de eventos"}.
|
||||
{"Deliver payloads with event notifications","Enviar contenidos junto con las notificaciones de eventos"}.
|
||||
{"Destroy a Hat","Destruir un sombrero"}.
|
||||
{"Dino Logo","Logo de Dino"}.
|
||||
{"Disable User","Deshabilitar un usuario"}.
|
||||
{"Disc only copy","Copia en disco solamente"}.
|
||||
{"Don't tell your password to anybody, not even the administrators of the XMPP server.","No le digas tu contraseña a nadie, ni siquiera a los administradores del servidor XMPP."}.
|
||||
{"Download and install {{ app_name }} below:","Descarga e instala {{ app_name }} aquí abajo:"}.
|
||||
{"Download Dino for Linux","Descarga Dino para Linux"}.
|
||||
{"Download from Mac App Store","Descargar de la Tienda de Aplicaciones Mac"}.
|
||||
{"Download Gajim","Descargar Gajim"}.
|
||||
{"Download Renga for Haiku","Descargar Renga para Haiku"}.
|
||||
{"Dump Backup to Text File at ","Exporta copia de seguridad a fichero de texto en "}.
|
||||
{"Dump to Text File","Exportar a fichero de texto"}.
|
||||
{"Duplicated groups are not allowed by RFC6121","Los grupos duplicados no están permitidos por RFC6121"}.
|
||||
@@ -129,6 +168,7 @@
|
||||
{"Enable message archiving","Activar el almacenamiento de mensajes"}.
|
||||
{"Enabling push without 'node' attribute is not supported","No está soportado activar Push sin el atributo 'node'"}.
|
||||
{"End User Session","Cerrar sesión de usuario"}.
|
||||
{"Enter a secure password that you do not use anywhere else.","Introduce una contraseña segura que no estés usando en ningún otro sitio."}.
|
||||
{"Enter nickname you want to register","Introduce el apodo que quieras registrar"}.
|
||||
{"Enter path to backup file","Introduce ruta al fichero de copia de seguridad"}.
|
||||
{"Enter path to jabberd14 spool dir","Introduce la ruta al directorio de jabberd14 spools"}.
|
||||
@@ -149,6 +189,7 @@
|
||||
{"Failed to process option '~s'","Falló el procesado de la opción '~s'"}.
|
||||
{"Family Name","Apellido"}.
|
||||
{"FAQ Entry","Apunte en la FAQ"}.
|
||||
{"F-Droid Store Logo","Logo de la F-Droid Store"}.
|
||||
{"February","Febrero"}.
|
||||
{"File larger than ~w bytes","El fichero es más grande que ~w bytes"}.
|
||||
{"Fill in the form to search for any matching XMPP User","Rellena campos para buscar usuarios XMPP que concuerden"}.
|
||||
@@ -157,27 +198,44 @@
|
||||
{"Full List of Room Admins","Lista completa de administradores de la sala"}.
|
||||
{"Full List of Room Owners","Lista completa de dueños de la sala"}.
|
||||
{"Full Name","Nombre completo"}.
|
||||
{"Gajim Logo","Logo de Gajim"}.
|
||||
{"Get List of Active Users","Ver lista de usuarios activos"}.
|
||||
{"Get List of Disabled Users","Ver lista de usuarios deshabilitados"}.
|
||||
{"Get List of Idle Users","Ver lista de usuarios inactivos"}.
|
||||
{"Get List of Online Users","Ver lista de usuarios conectados"}.
|
||||
{"Get List of Registered Users","Ver lista de usuarios registrados"}.
|
||||
{"Get Number of Active Users","Ver número de usuarios activos"}.
|
||||
{"Get Number of Disabled Users","Ver número de usuarios deshabilitados"}.
|
||||
{"Get Number of Idle Users","Ver número de usuarios inactivos"}.
|
||||
{"Get Number of Online Users","Ver número de usuarios conectados"}.
|
||||
{"Get Number of Registered Users","Ver número de usuarios registrados"}.
|
||||
{"Get Pending","Obtener pendientes"}.
|
||||
{"Get started","Empecemos"}.
|
||||
{"Get User Last Login Time","Ver fecha de la última conexión de usuario"}.
|
||||
{"Get User Roster","Ver lista de contactos del usuario"}.
|
||||
{"Get User Statistics","Ver estadísticas de usuario"}.
|
||||
{"Given Name","Nombre de pila"}.
|
||||
{"Google Play Store Logo","Logo de la Google Play Store"}.
|
||||
{"Grant voice to this person?","¿Conceder voz a esta persona?"}.
|
||||
{"has been banned","ha sido bloqueado"}.
|
||||
{"has been kicked because of a system shutdown","ha sido expulsado porque el sistema se va a detener"}.
|
||||
{"has been kicked because of an affiliation change","ha sido expulsado por un cambio de su afiliación"}.
|
||||
{"has been kicked because the room has been changed to members-only","ha sido expulsado porque la sala es ahora solo para miembros"}.
|
||||
{"has been kicked","ha sido expulsado"}.
|
||||
{"Hash computed from the list of hats available in a room","Hash computado a partir de la lista de sombreros disponibles en una sala"}.
|
||||
{"Hash of the vCard-temp avatar of this room","Hash del avatar vCard-temp de esta sala"}.
|
||||
{"Hat hue","Tono de color del sombrero"}.
|
||||
{"Hat title","Título del sombrero"}.
|
||||
{"Hat URI","Dirección del sombrero"}.
|
||||
{"Hats limit exceeded","Se ha excedido el límite de sombreros"}.
|
||||
{"Hide","Ocultar"}.
|
||||
{"Hint","Consejo"}.
|
||||
{"Host unknown","Dominio desconocido"}.
|
||||
{"Hostname invalid","Dominio no válido"}.
|
||||
{"HTTP File Upload","Subir fichero por HTTP"}.
|
||||
{"Idle connection","Conexión sin uso"}.
|
||||
{"If you already have {{ app_name }} installed, we recommend that you continue the account creation process using the app by clicking on the button below:","Si ya tienes {{ app_name }} instalado, te recomendamos que continúes la creación de tu cuenta usando esa aplicación, para ello pulsa el botón:"}.
|
||||
{"If you don't have an XMPP client installed yet, here's a list of suitable clients for your platform.","Si no tienes ningún cliente XMPP instalado aún, aquí hay una lista de clientes disponibles para tu plataforma."}.
|
||||
{"If you don't see the CAPTCHA image here, visit the web page.","Si no ves la imagen CAPTCHA aquí, visita la página web."}.
|
||||
{"Import Directory","Importar directorio"}.
|
||||
{"Import File","Importar fichero"}.
|
||||
@@ -196,6 +254,7 @@
|
||||
{"Incorrect value of 'action' in data form","Valor incorrecto de 'action' en el formulario de datos"}.
|
||||
{"Incorrect value of 'path' in data form","Valor incorrecto de 'path' en el formulario de datos"}.
|
||||
{"Installed Modules:","Módulos Instalados:"}.
|
||||
{"Installed ok? Great! <strong>Click or tap the button below</strong> to accept your invite and continue with your account setup:","¿Se ha instalado bien? ¡Genial! <strong>Pulsa el siguiente botón</strong> para aceptar tu invitación y continuar con la preparación de tu cuenta:"}.
|
||||
{"Install","Instalar"}.
|
||||
{"Insufficient privilege","Privilegio insuficiente"}.
|
||||
{"Internal server error","Error interno en el servidor"}.
|
||||
@@ -203,6 +262,11 @@
|
||||
{"Invalid node name","Nombre de nodo no válido"}.
|
||||
{"Invalid 'previd' value","Valor de 'previd' no válido"}.
|
||||
{"Invitations are not allowed in this conference","Las invitaciones no están permitidas en esta sala"}.
|
||||
{"Invite expired","Invitación caducada"}.
|
||||
{"Invite Expired","Invitación Caducada"}.
|
||||
{"Invite to {{ site_name }}","Invitación a {{ site_name }}"}.
|
||||
{"Invite User","Invitar Usuario"}.
|
||||
{"Invite","Invitar"}.
|
||||
{"IP addresses","Direcciones IP"}.
|
||||
{"is now known as","se cambia el nombre a"}.
|
||||
{"It is not allowed to send error messages to the room. The participant (~s) has sent an error message (~s) and got kicked from the room","No está permitido enviar mensajes de error a la sala. Este participante (~s) ha enviado un mensaje de error (~s) y fue expulsado de la sala"}.
|
||||
@@ -212,6 +276,7 @@
|
||||
{"January","Enero"}.
|
||||
{"JID normalization denied by service policy","Se ha denegado la normalización del JID por política del servicio"}.
|
||||
{"JID normalization failed","Ha fallado la normalización del JID"}.
|
||||
{"Join {{ site_name }} with {{ app_name }}","Únete a {{ site_name }} con {{ app_name }}"}.
|
||||
{"Joined MIX channels of ~ts","Canales MIX unidos de ~ts"}.
|
||||
{"Joined MIX channels:","Canales MIX unidos:"}.
|
||||
{"joins the room","entra en la sala"}.
|
||||
@@ -223,10 +288,13 @@
|
||||
{"Last message","Último mensaje"}.
|
||||
{"Last month","Último mes"}.
|
||||
{"Last year","Último año"}.
|
||||
{"Launch {{ app_name }} and sign in using your account credentials.","Lanza {{ app_name }} y entra en la cuenta usando tus credenciales."}.
|
||||
{"Launch Beagle IM, and select \\'Yes\\' to add a new account. Click the \\'+\\' button under the empty account list and then enter your credentials.","Inicia Beagle IM, y pulsa \\'Sí\\' para añadir una nueva cuenta. Pulsa el botón \\'+\\' debajo de la lista de cuentas vacía e introduce tus credenciales."}.
|
||||
{"Least significant bits of SHA-256 hash of text should equal hexadecimal label","Los bits menos significativos del hash SHA-256 del texto deberían ser iguales a la etiqueta hexadecimal"}.
|
||||
{"leaves the room","sale de la sala"}.
|
||||
{"List of users with hats","Lista de usuarios con sombreros"}.
|
||||
{"List of Hats","Lista de sombreros"}.
|
||||
{"List users with hats","Listar usuarios con sombreros"}.
|
||||
{"Log in via web","Entrar usando la web"}.
|
||||
{"Logged Out","Desconectad@"}.
|
||||
{"Logging","Histórico de mensajes"}.
|
||||
{"Make participants list public","La lista de participantes es pública"}.
|
||||
@@ -243,9 +311,11 @@
|
||||
{"Max payload size in bytes","Máximo tamaño del contenido en bytes"}.
|
||||
{"Maximum file size","Tamaño máximo de fichero"}.
|
||||
{"Maximum Number of History Messages Returned by Room","Máximo número de mensajes del historial devueltos por la sala"}.
|
||||
{"Maximum number of invites reached","Alcanzado el máximo número de invitaciones"}.
|
||||
{"Maximum number of items to persist","Máximo número de elementos que persisten"}.
|
||||
{"Maximum Number of Occupants","Número máximo de ocupantes"}.
|
||||
{"May","Mayo"}.
|
||||
{"Members are allowed to invite others","Los miembros puede invitar a otras personas"}.
|
||||
{"Membership is required to enter this room","Necesitas ser miembro de esta sala para poder entrar"}.
|
||||
{"Memorize your password, or write it in a paper placed in a safe place. In XMPP there isn't an automated way to recover your password if you forget it.","Memoriza tu contraseña, o apúntala en un papel en un lugar seguro. En XMPP no hay un método automatizado para recuperar la contraseña si la olvidas."}.
|
||||
{"Mere Availability in XMPP (No Show Value)","Disponible en XMPP (sin valor de Mostrado)"}.
|
||||
@@ -260,6 +330,7 @@
|
||||
{"Moderator","Moderador"}.
|
||||
{"Moderators Only","Solo moderadores"}.
|
||||
{"Module failed to handle the query","El módulo falló al gestionar la petición"}.
|
||||
{"Monal Logo","Logo de Monal"}.
|
||||
{"Monday","Lunes"}.
|
||||
{"Multicast","Multidifusión"}.
|
||||
{"Multiple <item/> elements are not allowed by RFC6121","No se permiten múltiples elementos <item/> en RFC6121"}.
|
||||
@@ -314,18 +385,21 @@
|
||||
{"None","Ninguno"}.
|
||||
{"Not allowed","No permitido"}.
|
||||
{"Not Found","No encontrado"}.
|
||||
{"NOT FOUND","NO ENCONTRADO"}.
|
||||
{"Not subscribed","No suscrito"}.
|
||||
{"Notify subscribers when items are removed from the node","Notificar subscriptores cuando los elementos se borran del nodo"}.
|
||||
{"Notify subscribers when the node configuration changes","Notificar subscriptores cuando cambia la configuración del nodo"}.
|
||||
{"Notify subscribers when the node is deleted","Notificar subscriptores cuando el nodo se borra"}.
|
||||
{"November","Noviembre"}.
|
||||
{"Number of active users","Número de usuarios activos"}.
|
||||
{"Number of answers required","Número de respuestas necesarias"}.
|
||||
{"Number of disabled users","Número de usuarios deshabilitados"}.
|
||||
{"Number of idle users","Número de usuarios inactivos"}.
|
||||
{"Number of occupants","Número de ocupantes"}.
|
||||
{"Number of Offline Messages","Número de mensajes diferidos"}.
|
||||
{"Number of online users","Número de usuarios conectados"}.
|
||||
{"Number of registered users","Número de usuarios registrados"}.
|
||||
{"Number of seconds after which to automatically purge items, or `max` for no specific limit other than a server imposed maximum","Número de segundos después de los cuales se purgarán elementos automáticamente, o `max` para no especificar un límite, más que el máximo impuesto por el servidor"}.
|
||||
{"Occupants are allowed to invite others","Los ocupantes pueden invitar a otras personas"}.
|
||||
{"Occupants are allowed to query others","Los ocupantes pueden enviar peticiones a otros"}.
|
||||
{"Occupants May Change the Subject","Los ocupantes pueden cambiar el Asunto"}.
|
||||
{"October","Octubre"}.
|
||||
@@ -348,12 +422,15 @@
|
||||
{"Only service administrators are allowed to send service messages","Solo los administradores del servicio tienen permiso para enviar mensajes de servicio"}.
|
||||
{"Only those on a whitelist may associate leaf nodes with the collection","Solo quienes están en una lista blanca pueden asociar nodos hoja a la colección"}.
|
||||
{"Only those on a whitelist may subscribe and retrieve items","Solo quienes están en una lista blanca pueden suscribirse y recibir elementos"}.
|
||||
{"Open the app","Abrir la aplicación"}.
|
||||
{"Organization Name","Nombre de la organización"}.
|
||||
{"Organization Unit","Unidad de la organización"}.
|
||||
{"Other Modules Available:","Otros módulos disponibles:"}.
|
||||
{"Other software","Otros programas"}.
|
||||
{"Outgoing s2s Connections","Conexiones S2S salientes"}.
|
||||
{"Owner privileges required","Se requieren privilegios de propietario de la sala"}.
|
||||
{"Packet relay is denied by service policy","Se ha denegado el reenvío del paquete por política del servicio"}.
|
||||
{"Page navigation","Navegación de Página"}.
|
||||
{"Participant ID","ID del Participante"}.
|
||||
{"Participant","Participante"}.
|
||||
{"Password Verification","Verificación de la contraseña"}.
|
||||
@@ -369,6 +446,8 @@
|
||||
{"Ping query is incorrect","La petición de Ping es incorrecta"}.
|
||||
{"Ping","Ping"}.
|
||||
{"Please note that these options will only backup the builtin Mnesia database. If you are using the ODBC module, you also need to backup your SQL database separately.","Ten en cuenta que estas opciones solo harán copia de seguridad de la base de datos Mnesia embebida. Si estás usando ODBC tendrás que hacer también copia de seguridad de tu base de datos SQL."}.
|
||||
{"Please provide a password! Minimum length: {{ password_min_length }}","¡Por favor proporciona una contraseña! Longitud mínima: {{ password_min_length }}"}.
|
||||
{"Please provide a valid username!","¡Por favor proporciona un nombre de usuario válido!"}.
|
||||
{"Please, wait for a while before sending new voice request","Por favor, espera un poco antes de enviar otra petición de voz"}.
|
||||
{"Pong","Pong"}.
|
||||
{"Possessing 'ask' attribute is not allowed by RFC6121","Poseer el atributo 'ask' no está permitido por RFC6121"}.
|
||||
@@ -378,6 +457,7 @@
|
||||
{"Previous session PID has exited","El proceso de la sesión previa ha terminado"}.
|
||||
{"Previous session PID is dead","El proceso de la sesión previa está muerto"}.
|
||||
{"Previous session timed out","La sesión previa ha caducado"}.
|
||||
{"Previous","Previo"}.
|
||||
{"private, ","privado, "}.
|
||||
{"Public","Público"}.
|
||||
{"Publish model","Modelo de publicación"}.
|
||||
@@ -395,11 +475,18 @@
|
||||
{"Receive notification of new items only","Recibir notificaciones solo de nuevos elementos"}.
|
||||
{"Receive notification of new nodes only","Recibir notificaciones solo de nuevos nodos"}.
|
||||
{"Recipient is not in the conference room","El receptor no está en la sala de conferencia"}.
|
||||
{"Re-Enable User","Rehabilitar usuario"}.
|
||||
{"Register an XMPP account","Registrar una cuenta XMPP"}.
|
||||
{"Register on {{ site_name }}","Registrar en {{ site_name }}"}.
|
||||
{"Register","Registrar"}.
|
||||
{"Registration Error","Error al Registrar"}.
|
||||
{"Registration error","Error en el registro"}.
|
||||
{"Registration Form","Formulario de Registro"}.
|
||||
{"Registration Success","Registro completado correctamente"}.
|
||||
{"Remote copy","Copia remota"}.
|
||||
{"Remove a hat from a user","Quitarle un sombrero a un usuario"}.
|
||||
{"Remove User","Eliminar usuario"}.
|
||||
{"Renga Logo","Logo de Renga"}.
|
||||
{"Replaced by new connection","Reemplazado por una nueva conexión"}.
|
||||
{"Request has timed out","La petición ha caducado"}.
|
||||
{"Request is ignored","La petición ha sido ignorada"}.
|
||||
@@ -425,16 +512,21 @@
|
||||
{"Roster size","Tamaño de la lista de contactos"}.
|
||||
{"Running Nodes","Nodos funcionando"}.
|
||||
{"~s invites you to the room ~s","~s te invita a la sala ~s"}.
|
||||
{"Sad person holding empty box","Persona triste sujetando una caja vacía"}.
|
||||
{"Saturday","Sábado"}.
|
||||
{"Scan invite code","Escanear el código de invitación"}.
|
||||
{"Scan with mobile device","Escanear (fotografiar) con el móvil"}.
|
||||
{"Search from the date","Buscar desde la fecha"}.
|
||||
{"Search Results for ","Buscar resultados por "}.
|
||||
{"Search the text","Buscar el texto"}.
|
||||
{"Search until the date","Buscar hasta la fecha"}.
|
||||
{"Search users in ","Buscar usuarios en "}.
|
||||
{"Select","Seleccionar"}.
|
||||
{"Send announcement to all online users on all hosts","Enviar anuncio a todos los usuarios conectados en todos los dominios"}.
|
||||
{"Send announcement to all online users","Enviar anuncio a todos los usuarios conectados"}.
|
||||
{"Send announcement to all users on all hosts","Enviar anuncio a todos los usuarios en todos los dominios"}.
|
||||
{"Send announcement to all users","Enviar anuncio a todos los usuarios"}.
|
||||
{"Send this invite to your device","Enviar esta invitación a tu dispositivo"}.
|
||||
{"September","Septiembre"}.
|
||||
{"Server:","Servidor:"}.
|
||||
{"Service list retrieval timed out","Ha caducado la obtención de la lista de servicio"}.
|
||||
@@ -445,9 +537,14 @@
|
||||
{"Show Integral Table","Mostrar Tabla Integral"}.
|
||||
{"Show Occupants Join/Leave","Mostrar personas activas Entrar/Salir"}.
|
||||
{"Show Ordinary Table","Mostrar Tabla Ordinaria"}.
|
||||
{"Showing apps for <span class='platform-name'>your current platform</span> only. You may also <a href='#' id='show-all-clients-button' tabindex=\"{{ tabidx }}\">view all apps.</a>","Mostrando aplicaciones para <span class='platform-name'>tu plataforma actual</span> nada más. También puedes <a href='#' id='show-all-clients-button' tabindex=\"{{ tabidx }}\">mostrar todas las aplicaciones.</a>"}.
|
||||
{"Show","Mostrar"}.
|
||||
{"Shut Down Service","Detener el servicio"}.
|
||||
{"Siskin IM Logo","Logo de Siskin IM"}.
|
||||
{"SOCKS5 Bytestreams","SOCKS5 Bytestreams"}.
|
||||
{"Some XMPP clients can store your password in the computer, but you should do this only in your personal computer for safety reasons.","Algunos clientes XMPP pueden guardar tu contraseña en la máquina, pero solo deberías hacer esto en tu propia máquina personal, por razones de seguridad."}.
|
||||
{"Sorry, it looks like this invite code has expired!","Lo siento ¡parece que este código de invitación ha caducado!"}.
|
||||
{"Sorry, there was a problem registering your account.","Lo siento, ha habido un problema durante el registro de tu cuenta."}.
|
||||
{"Sources Specs:","Especificaciones de Códigos Fuente:"}.
|
||||
{"Specify the access model","Especifica el modelo de acceso"}.
|
||||
{"Specify the event message type","Especifica el tipo del mensaje de evento"}.
|
||||
@@ -455,12 +552,21 @@
|
||||
{"Stanza id is not valid","El identificador de la estrofa no es válido"}.
|
||||
{"Stanza ID","ID del paquete"}.
|
||||
{"Statically specify a replyto of the node owner(s)","Especificar de forma estática un 'replyto' de dueño(s) del nodo"}.
|
||||
{"Step 1: Download and install {{ app_name }}","Paso 1: Descarga e instala {{ app_name }}"}.
|
||||
{"Step 1: Install {{ app_name }}","Paso 1: Instala {{ app_name }}"}.
|
||||
{"Step 2: Activate your account","Paso 2: Activar tu cuenta"}.
|
||||
{"Step 2: Connect {{ app_name }} to your new account","Paso 2: Conectar {{ app_name }} a tu nueva cuenta"}.
|
||||
{"Stopped Nodes","Nodos detenidos"}.
|
||||
{"Store binary backup:","Guardar copia de seguridad binaria:"}.
|
||||
{"Store plain text backup:","Guardar copia de seguridad en texto plano:"}.
|
||||
{"Stream management is already enabled","Ya está activada la administración de la conexión"}.
|
||||
{"Stream management is not enabled","No está activada la administración de la conexión"}.
|
||||
{"<strong>{{ site_name }}</strong> is part of XMPP, a secure and decentralized messaging network. To begin chatting using <strong>{{ app_name }}</strong> you need to first register an account.","<strong>{{ site_name }}</strong> es parte de XMPP, una red de mensajería segura y decentralizada. Para comenzar a charlar usando <strong>{{ app_name }}</strong>, primero créate una cuenta."}.
|
||||
{"<strong>{{ site_name }}</strong> is part of XMPP, a secure and decentralized messaging network. To begin chatting you need to first register an account.","<strong>{{ site_name }}</strong> es parte de XMPP, una red de mensajería segura y decentralizada. Para comenzar a charlar, primero has de registrar una cuenta."}.
|
||||
{"<strong>No suitable software installed right now?</strong> You can also log in to your account through our online web chat!","<strong>¿No tienes instalada ninguna aplicación ahora mismo?</strong> También puedes entrar en tu cuenta ¡usando el chat web en linea!"}.
|
||||
{"<strong>Tip:</strong> You can open this invite on your mobile device by scanning a barcode with your camera.","<strong>Truco:</strong> Puedes abrir esta invitación en tu móvil escaneando el código con la cámara de fotos."}.
|
||||
{"Subject","Asunto"}.
|
||||
{"Submit","Enviar"}.
|
||||
{"Submitted","Enviado"}.
|
||||
{"Subscriber Address","Dirección del subscriptor"}.
|
||||
{"Subscribers may publish","Los suscriptores pueden publicar"}.
|
||||
@@ -478,7 +584,7 @@
|
||||
{"The body text of the last received message","El contenido de texto del último mensaje recibido"}.
|
||||
{"The CAPTCHA is valid.","El CAPTCHA es válido."}.
|
||||
{"The CAPTCHA verification has failed","La verificación de CAPTCHA ha fallado"}.
|
||||
{"The captcha you entered is wrong","El CAPTCHA que has introducido es erróneo"}.
|
||||
{"The captcha you entered is wrong","El captcha que has introducido es erróneo"}.
|
||||
{"The child nodes (leaf or collection) associated with a collection","Los nodos hijos (ya sean hojas o colecciones) asociados con una colección"}.
|
||||
{"The collections with which a node is affiliated","Las colecciones a las que un nodo está afiliado"}.
|
||||
{"The DateTime at which a leased subscription will end or has ended","La FechayHora en la que una suscripción prestada acabará o ha terminado"}.
|
||||
@@ -489,6 +595,9 @@
|
||||
{"The JIDs of those to contact with questions","Los JIDs a quienes contactar con preguntas"}.
|
||||
{"The JIDs of those with an affiliation of owner","Los JIDs de quienes tienen una afiliación de dueños"}.
|
||||
{"The JIDs of those with an affiliation of publisher","Los JIDs de quienes tienen una afiliación de publicadores"}.
|
||||
{"The list of all active users","La lista de todos los usuarios activos"}.
|
||||
{"The list of all disabled users","La lista de todos los usuarios deshabilitados"}.
|
||||
{"The list of all idle users","La lista de todos los usuarios inactivos"}.
|
||||
{"The list of all online users","La lista de todos los usuarios conectados"}.
|
||||
{"The list of all users","La lista de todos los usuarios"}.
|
||||
{"The list of JIDs that may associate leaf nodes with a collection","La lista de JIDs que pueden asociar nodos hijo con una colección"}.
|
||||
@@ -510,16 +619,20 @@
|
||||
{"The presence states for which an entity wants to receive notifications","Los estados de presencia para los cuales una entidad quiere recibir notificaciones"}.
|
||||
{"The query is only allowed from local users","La solicitud está permitida solo para usuarios locales"}.
|
||||
{"The query must not contain <item/> elements","La solicitud no debe contener elementos <item/>"}.
|
||||
{"The role","El rol"}.
|
||||
{"The room subject can be modified by participants","El asunto de la sala puede ser modificado por los participantes"}.
|
||||
{"The semantic type information of data in the node, usually specified by the namespace of the payload (if any)","La información semántica de los datos del nodo, normalmente es especificada por el espacio de los nombres de la carga útil (si existe)"}.
|
||||
{"The sender of the last received message","El emisor del último mensaje recibido"}.
|
||||
{"The stanza MUST contain only one <active/> element, one <default/> element, or one <list/> element","El paquete DEBE contener solo un elemento <active/>, un elemento <default/>, o un elemento <list/>"}.
|
||||
{"The subscription identifier associated with the subscription request","El identificador de suscripción asociado con la petición de suscripción"}.
|
||||
{"The token provided is either invalid or expired.","El token proporcionado no es válido o ha caducado."}.
|
||||
{"The URL of an XSL transformation which can be applied to payloads in order to generate an appropriate message body element.","La URL de una transformación XSL que puede aplicarse a payloads para generar un elemento de contenido del mensaje apropiado."}.
|
||||
{"The URL of an XSL transformation which can be applied to the payload format in order to generate a valid Data Forms result that the client could display using a generic Data Forms rendering engine","La URL de una transformación XSL que puede aplicarse al formato de payload para generar un resultado de Formulario de Datos válido, que el cliente pueda mostrar usando un mecanismo de dibujado genérico de Formulario de Datos"}.
|
||||
{"There was an error changing the password: ","Hubo uno error al cambiar la contaseña: "}.
|
||||
{"There was an error creating the account: ","Hubo uno error al crear la cuenta: "}.
|
||||
{"There was an error deleting the account: ","Hubo un error borrando la cuenta: "}.
|
||||
{"This button works only if you have the app installed already!","¡Este botón funciona solamente si ya tienes la aplicación instalada!"}.
|
||||
{"This is an invite from <strong>{{ inviter }}</strong> to connect and chat on the XMPP network. If you already have an XMPP client installed just press the button below!","Esto es una invitación de <strong>{{ inviter }}</strong> para conectarte y charlar en la red XMPP. Si ya tienes un cliente XMPP instalado ¡simplemente pulsa el botón de aquí abajo!"}.
|
||||
{"This is case insensitive: macbeth is the same that MacBeth and Macbeth.","No importa si usas mayúsculas: macbeth es lo mismo que MacBeth y Macbeth."}.
|
||||
{"This page allows to register an XMPP account in this XMPP server. Your JID (Jabber ID) will be of the form: username@server. Please read carefully the instructions to fill correctly the fields.","Esta página te permite crear una cuenta XMPP este servidor XMPP. Tu JID (Jabber ID) será de la forma: nombredeusuario@servidor. Por favor lee detenidamente las instrucciones para rellenar correctamente los campos."}.
|
||||
{"This page allows to unregister an XMPP account in this XMPP server.","Esta página te permite borrar tu cuenta XMPP en este servidor XMPP."}.
|
||||
@@ -528,7 +641,9 @@
|
||||
{"Thursday","Jueves"}.
|
||||
{"Time delay","Retraso temporal"}.
|
||||
{"Timed out waiting for stream resumption","Ha pasado demasiado tiempo esperando que la conexión se restablezca"}.
|
||||
{"To get started, you need to install an app for your platform:","Para empezar, instala una aplicación en tu sistema:"}.
|
||||
{"To register, visit ~s","Para registrarte, visita ~s"}.
|
||||
{"To start chatting, you need to enter your new account credentials into your chosen XMPP software.","Para comenzar a charlar, introduce las credenciales de tu nueva cuenta en el programa XMPP que has elegido."}.
|
||||
{"To ~ts","A ~ts"}.
|
||||
{"Token TTL","Token TTL"}.
|
||||
{"Too many active bytestreams","Demasiados bytestreams activos"}.
|
||||
@@ -561,6 +676,7 @@
|
||||
{"Updating the vCard is not supported by the vCard storage backend","La actualización de la vCard no es compatible con el vCard almacenamiento backend"}.
|
||||
{"Upgrade","Actualizar"}.
|
||||
{"URL for Archived Discussion Logs","URL del registro de discusiones archivadas"}.
|
||||
{"Use a <em>QR code</em> scanner on your mobile device to scan the code below:","Usa un escaneador de <em>códigos QR</em> en tu móvil para escanear este código:"}.
|
||||
{"User already exists","El usuario ya existe"}.
|
||||
{"User JID","Jabber ID del usuario"}.
|
||||
{"User (jid)","Usuario (jid)"}.
|
||||
@@ -570,6 +686,9 @@
|
||||
{"User session not found","Sesión de usuario no encontrada"}.
|
||||
{"User session terminated","Sesión de usuario terminada"}.
|
||||
{"User ~ts","Usuario ~ts"}.
|
||||
{"Username invalid","Nombre de usuario no válido"}.
|
||||
{"Username is reserved","El nombre de usuario está reservado"}.
|
||||
{"Username","Nombre de usuario"}.
|
||||
{"Username:","Nombre de usuario:"}.
|
||||
{"Users are not allowed to register accounts so quickly","Los usuarios no tienen permitido crear cuentas con tanta rapidez"}.
|
||||
{"Users Last Activity","Última actividad de los usuarios"}.
|
||||
@@ -604,8 +723,9 @@
|
||||
{"Who can send private messages","Quién puede enviar mensajes privados"}.
|
||||
{"Who may associate leaf nodes with a collection","Quien puede asociar nodos hoja con una colección"}.
|
||||
{"Wrong parameters in the web formulary","Parámetros incorrectos en el formulario web"}.
|
||||
{"Wrong xmlns","XMLNS incorrecto"}.
|
||||
{"Wrong xmlns","Xmlns incorrecto"}.
|
||||
{"XMPP Account Registration","Registro de Cuenta XMPP"}.
|
||||
{"XMPP client for Haiku","Cliente XMPP para Haiku"}.
|
||||
{"XMPP Domains","Dominios XMPP"}.
|
||||
{"XMPP Show Value of Away","Valor 'Show' de XMPP: Ausente"}.
|
||||
{"XMPP Show Value of Chat","Valor 'Show' de XMPP: Charlador"}.
|
||||
@@ -615,8 +735,17 @@
|
||||
{"You are being removed from the room because of a system shutdown","Estás siendo expulsado de la sala porque el sistema se va a detener"}.
|
||||
{"You are not allowed to send private messages","No tienes permitido enviar mensajes privados"}.
|
||||
{"You are not joined to the channel","No has entrado en el canal"}.
|
||||
{"You can connect to {{ site_name }} using any XMPP-compatible software. If your preferred software is not listed above, you may still <a href=\"{{ registration_url }}\" tabindex='{{ tabidx }}'>register an account manually</a>.","Puedes conectarte a {{ site_name }} usando cualquier programa compatible con XMPP. Si tu programa preferido no está en esta lista, puedes <a href=\"{{ registration_url }}\" tabindex='{{ tabidx }}'>registrarte una cuenta manualmente</a>."}.
|
||||
{"You can later change your password using an XMPP client.","Puedes cambiar tu contraseña después, usando un cliente XMPP."}.
|
||||
{"You can now set up {{ app_name }} and connect it to your new account.","Ahora puedes configurar {{ app_name }} y conectarte a tu nueva cuenta."}.
|
||||
{"You can start chatting right away with {{ app_name }}. Let's get started!","Puedes empezar ya a charlar usando {{ app_name }}. ¡Empecemos!"}.
|
||||
{"You can transfer this invite to your mobile device by scanning a code with your camera.","Puedes transferir esta invitación a tu móvil si escaneas el código con la cámara de fotos."}.
|
||||
{"You have been banned from this room","Has sido bloqueado en esta sala"}.
|
||||
{"You have been invited to chat on {{ site_name }}, part of the XMPP secure and decentralized messaging network.","Te han invitado a charlar en {{ site_name }}, que forma parte de la red XMPP de mensajería segura y decentralizada."}.
|
||||
{"You have been invited to chat on <strong>{{ site_name }}</strong>, part of the XMPP secure and decentralized messaging network.","Te han invitado a charlar en <strong>{{ site_name }}</strong>, que forma parte de la red XMPP de mensajería segura y decentralizada."}.
|
||||
{"You have been invited to chat with <strong>{{ inviter }}</strong> on {{ site_name }}, part of the XMPP secure and decentralized messaging network.","Has recibido una invitación para charlar con <strong>{{ inviter }}</strong> en {{ site_name }}, que forma parte de la red XMPP de mensajería segura y decentralizada."}.
|
||||
{"You have been invited to chat with <strong>{{ inviter }}</strong> on <strong>{{ site_name }}</strong>, part of the XMPP secure and decentralized messaging network.","Has recibido una invitación para charlar con <strong>{{ inviter }}</strong> en <strong>{{ site_name }}</strong>, que forma parte de la red XMPP de mensajería segura y decentralizada."}.
|
||||
{"You have created an account on <strong>{{ site_name }}</strong>.","Has registrado tu cuenta en <strong>{{ site_name }}</strong>."}.
|
||||
{"You have joined too many conferences","Has entrado en demasiadas salas de conferencia"}.
|
||||
{"You must fill in field \"Nickname\" in the form","Debes rellenar el campo \"Apodo\" en el formulario"}.
|
||||
{"You need a client that supports x:data and CAPTCHA to register","Necesitas un cliente con soporte de x:data y CAPTCHA para registrarte"}.
|
||||
@@ -624,6 +753,7 @@
|
||||
{"You need an x:data capable client to search","Necesitas un cliente con soporte de x:data para poder buscar"}.
|
||||
{"Your active privacy list has denied the routing of this stanza.","Tu lista de privacidad activa ha denegado el envío de este paquete."}.
|
||||
{"Your contact offline message queue is full. The message has been discarded.","Tu cola de mensajes diferidos de contactos está llena. El mensaje se ha descartado."}.
|
||||
{"Your password is stored encrypted on the server and will not be accessible after you close this page. Keep it safe and never share it with anyone.","Tu contraseña se guardará cifrada en el servidor, y no será accesible una vez que cierres esta página. Mantenla segura y no la compartas con nadie más."}.
|
||||
{"Your subscription request and/or messages to ~s have been blocked. To unblock your subscription request, visit ~s","Tu petición de suscripción y/o mensajes a ~s ha sido bloqueado. Para desbloquear tu petición de suscripción visita ~s"}.
|
||||
{"Your XMPP account was successfully registered.","Tu cuenta XMPP se ha registrado correctamente."}.
|
||||
{"Your XMPP account was successfully unregistered.","Tu cuenta XMPP se ha borrado correctamente."}.
|
||||
|
||||