ConverseJS upstream update:

* update ConverseJS version
* remove concord theme from settings (and migrate to peertube)
* added cyberpunk theme
* fixed settings localization
This commit is contained in:
John Livingston 2024-09-02 12:09:28 +02:00
parent 22dc4db61b
commit 0e98cbaba5
No known key found for this signature in database
GPG Key ID: B17B5640CE66CDBC
50 changed files with 123 additions and 61 deletions

View File

@ -6,6 +6,8 @@
With the new [mod_firewall](https://livingston.frama.io/peertube-plugin-livechat/documentation/admin/mod_firewall/) feature, Peertube admins can write firewall rules for the Prosody server. These rules could be used to run arbitrary code on the server. If you are a hosting provider, and you don't want to allow Peertube admins to write such rules, you can disable the online editing by creating a `disable_mod_firewall_editing` file in the plugin directory. Check the documentation for more information. This is opt-out, as Peertube admins can already run arbitrary code just by installing any plugin.
The cyberpunk theme was removed from ConverseJS. If you had it set in the plugin settings, it will fallback to the Peertube theme.
### New features
* Updating ConverseJS, to use upstream (v11 WIP). This comes with many improvments and new features.
@ -25,6 +27,8 @@ With the new [mod_firewall](https://livingston.frama.io/peertube-plugin-livechat
* Fix new task ordering.
* Fix: clicking on the current user nickname in message history was failing to open the profile modal.
* Fix: increase chat height on small screens, try to better detect the device viewport size and orientation.
* Converse theme: removed concord, added cyberpunk
* Fixed Converse theme settings localization.
## 10.3.3

View File

@ -18,8 +18,8 @@ set -x
CONVERSE_VERSION="v11.0.0"
CONVERSE_REPO="https://github.com/conversejs/converse.js.git"
# You can eventually set CONVERSE_COMMIT to a specific commit ID, if you want to apply some patches.
# 2024-08-05: using Converse upstream (v11 WIP).
CONVERSE_COMMIT="5017efb780973d704f237c478ba52b23d901e1bf"
# 2024-09-02: using Converse upstream (v11 WIP).
CONVERSE_COMMIT="9952046d580bc2930e29833f4c9987a3d4c95bc2"
# It is possible to use another repository, if we want some customization that are not upstream (yet):
# CONVERSE_VERSION="livechat"
@ -27,14 +27,6 @@ CONVERSE_COMMIT="5017efb780973d704f237c478ba52b23d901e1bf"
# CONVERSE_REPO="https://github.com/JohnXLivingston/converse.js"
# CONVERSE_COMMIT="xxxx"
# 2024-08-06: including fix waiting for merge:
CONVERSE_VERSION="livechat_converse_11"
CONVERSE_COMMIT="1625f9b6ee81fa9ebd8df5cba306bde478f1943b"
# 2024-08-06: including new getOccupantActionButtons hook (waiting for merge in Converse upstream)
CONVERSE_COMMIT="5b35bd31c7e26c1f5396cd65eef69293d8b388c1"
# 2024-08-20: accessibility fixes
CONVERSE_COMMIT="1e76411e26070709771bf9b099d3c889aeec1878"
rootdir="$(pwd)"
src_dir="$rootdir/conversejs"
converse_src_dir="$rootdir/vendor/conversejs-$CONVERSE_VERSION"

View File

@ -121,7 +121,7 @@ converse_theme_description: "Bitte wählen Sie, welches ConverseJS Thema Sie nut
möchten."
converse_theme_option_peertube: "Peertube Thema"
converse_theme_option_default: "Default ConverseJS Thema"
converse_theme_option_concord: "ConverseJS Concord Thema"
converse_theme_option_cyberpunk: "ConverseJS Cyberpunk Thema"
autocolors_label: "Automatische Farberkennung"
autocolors_description: |

View File

@ -188,7 +188,7 @@ converse_theme_label: "ConverseJS theme"
converse_theme_description: "Please choose the converseJS theme you want to use."
converse_theme_option_peertube: "Peertube theme"
converse_theme_option_default: "Default ConverseJS theme"
converse_theme_option_concord: "ConverseJS concord theme"
converse_theme_option_cyberpunk: "ConverseJS Cyberpunk theme"
autocolors_label: "Automatic color detection"
autocolors_description: |

View File

@ -103,7 +103,7 @@ no_anonymous_description: "Si se marca, los usuarios anónimos de Peertube no ve
el chat.\nFuncionalidad en desarrollo.\nSi la activas, es muy recomendable marcar
también \"No publicar información del chat\".\nDe lo contrario, algunas herramientas
de terceros podrían intentar abrir el chat , generando comportamientos imprevistos.\n"
converse_theme_option_concord: Tema concord de ConverseJS
converse_theme_option_cyberpunk: Tema cyberpunk de ConverseJS
help_builtin_prosody_description: "Este plugin utiliza el servidor XMPP Prosody para
manejar salas de chat.<br>\nEste plugin viene con una AppImage de Prosody, que se
utilizará para ejecutar el servicio.\n"

View File

@ -130,7 +130,7 @@ converse_theme_description: "Merci de choisir le thème ConverseJS que vous voul
utiliser."
converse_theme_option_peertube: "Thème Peertube"
converse_theme_option_default: "Thème par défaut de ConverseJS"
converse_theme_option_concord: "Thème concord de ConverseJS"
converse_theme_option_cyberpunk: "Thème cyberpunk de ConverseJS"
autocolors_label: "Détection automatique des couleurs"
autocolors_description: |

View File

@ -238,7 +238,7 @@ all_lives_description: Ako je označeno, chat će se aktivirati za sve prijenose
all_non_lives_description: Ako je označeno, chat će se aktivirati za sve prijenose
koji nisu uživo.
all_non_lives_label: Aktiviraj chat za sve prijenose koji nisu uživo
converse_theme_option_concord: ConverseJS concord tema
converse_theme_option_cyberpunk: ConverseJS cyberpunk tema
chat_style_label: Atribut stila ifreama za chat
prosody_muc_log_by_default_description: "Ako je označeno, sadržaj sobe će se standardno
spremati.\nSvaki korisnik koji se pridruži sobi vidjet će što je napisano prije

View File

@ -120,7 +120,7 @@ converse_theme_label: "Tema ConverseJS"
converse_theme_description: "Scegli il tema converseJS che desideri utilizzare."
converse_theme_option_peertube: "Tema Peertube"
converse_theme_option_default: "Tema predefinito di ConverseJS"
converse_theme_option_concord: "Tema “Concord“ di ConverseJS"
converse_theme_option_cyberpunk: "Tema “cyberpunk“ di ConverseJS"
autocolors_label: "Rilevamento automatico dei colori"
autocolors_description: |

View File

@ -70,7 +70,7 @@ converse_theme_label: ConverseJSのテーマ
converse_theme_description: 使用したいconverseJSのテーマを選択してください。
converse_theme_option_peertube: PeerTubeのテーマ
converse_theme_option_default: デフォルトのConverseJSテーマ
converse_theme_option_concord: ConverseJS concordテーマ
converse_theme_option_cyberpunk: ConverseJS cyberpunkテーマ
autocolors_label: 色を自動検出
chat_style_label: チャットのiframeスタイル属性
chat_style_description: "追加のスタイル設定をiframeスタイルの属性に追加します。<br>\n例height:400px;\n"

View File

@ -28,7 +28,7 @@ room_type_description: Här kan du välja om du vill ha separata rum för varje
theming_advanced_description: <h3>Utseende</h3>
converse_theme_option_peertube: PeerTubes tema
converse_theme_option_default: ConverseJS standardtema
converse_theme_option_concord: ConverseJS-temat concord
converse_theme_option_cyberpunk: ConverseJS-temat cyberpunk
autocolors_label: Automatisk färgigenkänning
save: Spara
cancel: Avbryt

View File

@ -3,11 +3,77 @@
// SPDX-License-Identifier: AGPL-3.0-only
import type { RegisterServerOptions } from '@peertube/peertube-types'
import { pluginShortName } from '../helpers'
async function migrateSettings (options: RegisterServerOptions): Promise<void> {
const logger = options.peertubeHelpers.logger
logger.info('Checking if there is a migration script to launch...')
// 2022-10-10: as we removed the «chat-type» settings, there is no migration needed for now.
// 2024-09-02: concord theme was removed from ConverseJS, must change if used.
await _migrateConverseTheme(options)
}
async function _migrateConverseTheme (options: RegisterServerOptions): Promise<void> {
const peertubeHelpers = options.peertubeHelpers
const logger = peertubeHelpers.logger
// NB: we cant use safely settingsManager.getSetting, because settings are not registered yet.
logger.info('Checking if we need to migrate converse-theme')
if (!/^[-a-z]+$/.test(pluginShortName)) {
// to prevent sql injection... be sure there is no special char here.
throw new Error(`Wrong pluginShortName '${pluginShortName}'`)
}
const [results] = await peertubeHelpers.database.query(
'SELECT "settings" FROM "plugin"' +
' WHERE "plugin"."name" = :pluginShortName',
{
replacements: {
pluginShortName
}
}
)
if (!Array.isArray(results)) {
throw new Error('_migrateConverseTheme: query result is not an array.')
}
if (results.length === 0) {
logger.error('Plugin not found in database')
return
}
if (results.length > 1) {
logger.error('Multiple lines for plugin in database, dont know which one to migrate... Aborting.')
return
}
const settings = results[0].settings
if (!settings) {
logger.info('Plugin settings are empty in database, no migration needed.')
return
}
if (typeof settings !== 'object') {
logger.error('Plugin settings in database seems to be invalid json')
return
}
if (!('converse-theme' in settings)) {
logger.debug('The setting converse-theme is not here, no need to migrate.')
return
}
if (settings['converse-theme'] !== 'concord') {
logger.debug('The setting converse-theme is not set to concord, no need to migrate.')
return
}
logger.info('The setting converse-theme is set to concord, we must replace by peertube..')
await peertubeHelpers.database.query(
'UPDATE "plugin" ' +
' SET "settings" = "settings" || :value ' +
' WHERE "name" = :pluginShortName',
{
replacements: {
pluginShortName,
value: JSON.stringify({
'converse-theme': 'peertube'
})
}
}
)
}
export {

View File

@ -526,9 +526,9 @@ function initThemingSettings ({ registerSetting }: RegisterServerOptions): void
default: 'peertube' as ConverseJSTheme,
private: false,
options: [
{ value: 'peertube', label: loc('peertube') },
{ value: 'default', label: loc('default') },
{ value: 'concord', label: loc('concord') }
{ value: 'peertube', label: loc('converse_theme_option_peertube') },
{ value: 'default', label: loc('converse_theme_option_default') },
{ value: 'cyberpunk', label: loc('converse_theme_option_cyberpunk') }
] as Array<{value: ConverseJSTheme, label: string}>,
descriptionHTML: loc('converse_theme_description')
})

View File

@ -13,7 +13,7 @@ interface ActorImage {
updatedAt: Date | string
}
type ConverseJSTheme = 'peertube' | 'default' | 'concord'
type ConverseJSTheme = 'peertube' | 'default' | 'cyberpunk'
interface InitConverseJSParams {
peertubeVideoOriginalUrl?: string

View File

@ -150,7 +150,7 @@ You can choose which theme to use for ConverseJS:
- Peertube theme: this is a special theme, made especially for peertube's integration.
- Default ConverseJS theme: this is the default ConverseJS theme.
- ConverseJS concord theme: this is a theme provided by ConverseJS.
- ConverseJS cyberpunk theme: this is a theme provided by ConverseJS.
### {{% livechat_label autocolors_label %}}

View File

@ -2170,7 +2170,7 @@ msgstr ""
#. type: Bullet: '- '
#: build/documentation/pot_in/documentation/admin/settings.md
msgid "ConverseJS concord theme: this is a theme provided by ConverseJS."
msgid "ConverseJS cyberpunk theme: this is a theme provided by ConverseJS."
msgstr ""
#. type: Title ##

View File

@ -2167,7 +2167,7 @@ msgstr ""
#. type: Bullet: '- '
#: build/documentation/pot_in/documentation/admin/settings.md
msgid "ConverseJS concord theme: this is a theme provided by ConverseJS."
msgid "ConverseJS cyberpunk theme: this is a theme provided by ConverseJS."
msgstr ""
#. type: Title ##

View File

@ -2167,7 +2167,7 @@ msgstr ""
#. type: Bullet: '- '
#: build/documentation/pot_in/documentation/admin/settings.md
msgid "ConverseJS concord theme: this is a theme provided by ConverseJS."
msgid "ConverseJS cyberpunk theme: this is a theme provided by ConverseJS."
msgstr ""
#. type: Title ##

View File

@ -2268,8 +2268,8 @@ msgstr "Default ConverseJS theme: Dies ist das standard ConverseJS Thema."
#. type: Bullet: '- '
#: build/documentation/pot_in/documentation/admin/settings.md
msgid "ConverseJS concord theme: this is a theme provided by ConverseJS."
msgstr "ConverseJS concord theme: Dies ist ein von ConverseJS bereitgestelltes Thema."
msgid "ConverseJS cyberpunk theme: this is a theme provided by ConverseJS."
msgstr "ConverseJS cyberpunk theme: Dies ist ein von ConverseJS bereitgestelltes Thema."
#. type: Title ##
#: build/documentation/pot_in/documentation/admin/settings.md

View File

@ -2167,7 +2167,7 @@ msgstr ""
#. type: Bullet: '- '
#: build/documentation/pot_in/documentation/admin/settings.md
msgid "ConverseJS concord theme: this is a theme provided by ConverseJS."
msgid "ConverseJS cyberpunk theme: this is a theme provided by ConverseJS."
msgstr ""
#. type: Title ##

View File

@ -2447,7 +2447,7 @@ msgstr ""
#. type: Bullet: '- '
#: build/documentation/pot_in/documentation/admin/settings.md
#, markdown-text
msgid "ConverseJS concord theme: this is a theme provided by ConverseJS."
msgid "ConverseJS cyberpunk theme: this is a theme provided by ConverseJS."
msgstr ""
#. type: Title ##

View File

@ -2167,7 +2167,7 @@ msgstr ""
#. type: Bullet: '- '
#: build/documentation/pot_in/documentation/admin/settings.md
msgid "ConverseJS concord theme: this is a theme provided by ConverseJS."
msgid "ConverseJS cyberpunk theme: this is a theme provided by ConverseJS."
msgstr ""
#. type: Title ##

View File

@ -2203,7 +2203,7 @@ msgstr ""
#. type: Bullet: '- '
#: build/documentation/pot_in/documentation/admin/settings.md
msgid "ConverseJS concord theme: this is a theme provided by ConverseJS."
msgid "ConverseJS cyberpunk theme: this is a theme provided by ConverseJS."
msgstr ""
#. type: Title ##

View File

@ -2167,7 +2167,7 @@ msgstr ""
#. type: Bullet: '- '
#: build/documentation/pot_in/documentation/admin/settings.md
msgid "ConverseJS concord theme: this is a theme provided by ConverseJS."
msgid "ConverseJS cyberpunk theme: this is a theme provided by ConverseJS."
msgstr ""
#. type: Title ##

View File

@ -2167,7 +2167,7 @@ msgstr ""
#. type: Bullet: '- '
#: build/documentation/pot_in/documentation/admin/settings.md
msgid "ConverseJS concord theme: this is a theme provided by ConverseJS."
msgid "ConverseJS cyberpunk theme: this is a theme provided by ConverseJS."
msgstr ""
#. type: Title ##

View File

@ -2167,7 +2167,7 @@ msgstr ""
#. type: Bullet: '- '
#: build/documentation/pot_in/documentation/admin/settings.md
msgid "ConverseJS concord theme: this is a theme provided by ConverseJS."
msgid "ConverseJS cyberpunk theme: this is a theme provided by ConverseJS."
msgstr ""
#. type: Title ##

View File

@ -2278,8 +2278,8 @@ msgstr "Thème ConverseJS par défaut : c'est le thème ConverseJS par défaut."
#. type: Bullet: '- '
#: build/documentation/pot_in/documentation/admin/settings.md
msgid "ConverseJS concord theme: this is a theme provided by ConverseJS."
msgstr "Thème ConverseJS concord : il s'agit d'un thème fourni par ConverseJS."
msgid "ConverseJS cyberpunk theme: this is a theme provided by ConverseJS."
msgstr "Thème ConverseJS cyberpunk : il s'agit d'un thème fourni par ConverseJS."
#. type: Title ##
#: build/documentation/pot_in/documentation/admin/settings.md

View File

@ -2167,7 +2167,7 @@ msgstr ""
#. type: Bullet: '- '
#: build/documentation/pot_in/documentation/admin/settings.md
msgid "ConverseJS concord theme: this is a theme provided by ConverseJS."
msgid "ConverseJS cyberpunk theme: this is a theme provided by ConverseJS."
msgstr ""
#. type: Title ##

View File

@ -2167,7 +2167,7 @@ msgstr ""
#. type: Bullet: '- '
#: build/documentation/pot_in/documentation/admin/settings.md
msgid "ConverseJS concord theme: this is a theme provided by ConverseJS."
msgid "ConverseJS cyberpunk theme: this is a theme provided by ConverseJS."
msgstr ""
#. type: Title ##

View File

@ -2189,7 +2189,7 @@ msgstr ""
#. type: Bullet: '- '
#: build/documentation/pot_in/documentation/admin/settings.md
msgid "ConverseJS concord theme: this is a theme provided by ConverseJS."
msgid "ConverseJS cyberpunk theme: this is a theme provided by ConverseJS."
msgstr ""
#. type: Title ##

View File

@ -2167,7 +2167,7 @@ msgstr ""
#. type: Bullet: '- '
#: build/documentation/pot_in/documentation/admin/settings.md
msgid "ConverseJS concord theme: this is a theme provided by ConverseJS."
msgid "ConverseJS cyberpunk theme: this is a theme provided by ConverseJS."
msgstr ""
#. type: Title ##

View File

@ -2167,7 +2167,7 @@ msgstr ""
#. type: Bullet: '- '
#: build/documentation/pot_in/documentation/admin/settings.md
msgid "ConverseJS concord theme: this is a theme provided by ConverseJS."
msgid "ConverseJS cyberpunk theme: this is a theme provided by ConverseJS."
msgstr ""
#. type: Title ##

View File

@ -2167,7 +2167,7 @@ msgstr ""
#. type: Bullet: '- '
#: build/documentation/pot_in/documentation/admin/settings.md
msgid "ConverseJS concord theme: this is a theme provided by ConverseJS."
msgid "ConverseJS cyberpunk theme: this is a theme provided by ConverseJS."
msgstr ""
#. type: Title ##

View File

@ -2220,7 +2220,7 @@ msgstr ""
#. type: Bullet: '- '
#: build/documentation/pot_in/documentation/admin/settings.md
msgid "ConverseJS concord theme: this is a theme provided by ConverseJS."
msgid "ConverseJS cyberpunk theme: this is a theme provided by ConverseJS."
msgstr ""
#. type: Title ##

View File

@ -2167,7 +2167,7 @@ msgstr ""
#. type: Bullet: '- '
#: build/documentation/pot_in/documentation/admin/settings.md
msgid "ConverseJS concord theme: this is a theme provided by ConverseJS."
msgid "ConverseJS cyberpunk theme: this is a theme provided by ConverseJS."
msgstr ""
#. type: Title ##

View File

@ -2167,7 +2167,7 @@ msgstr ""
#. type: Bullet: '- '
#: build/documentation/pot_in/documentation/admin/settings.md
msgid "ConverseJS concord theme: this is a theme provided by ConverseJS."
msgid "ConverseJS cyberpunk theme: this is a theme provided by ConverseJS."
msgstr ""
#. type: Title ##

View File

@ -2167,7 +2167,7 @@ msgstr ""
#. type: Bullet: '- '
#: build/documentation/pot_in/documentation/admin/settings.md
msgid "ConverseJS concord theme: this is a theme provided by ConverseJS."
msgid "ConverseJS cyberpunk theme: this is a theme provided by ConverseJS."
msgstr ""
#. type: Title ##

View File

@ -2167,7 +2167,7 @@ msgstr ""
#. type: Bullet: '- '
#: build/documentation/pot_in/documentation/admin/settings.md
msgid "ConverseJS concord theme: this is a theme provided by ConverseJS."
msgid "ConverseJS cyberpunk theme: this is a theme provided by ConverseJS."
msgstr ""
#. type: Title ##

View File

@ -2167,7 +2167,7 @@ msgstr ""
#. type: Bullet: '- '
#: build/documentation/pot_in/documentation/admin/settings.md
msgid "ConverseJS concord theme: this is a theme provided by ConverseJS."
msgid "ConverseJS cyberpunk theme: this is a theme provided by ConverseJS."
msgstr ""
#. type: Title ##

View File

@ -2167,7 +2167,7 @@ msgstr ""
#. type: Bullet: '- '
#: build/documentation/pot_in/documentation/admin/settings.md
msgid "ConverseJS concord theme: this is a theme provided by ConverseJS."
msgid "ConverseJS cyberpunk theme: this is a theme provided by ConverseJS."
msgstr ""
#. type: Title ##

View File

@ -2167,7 +2167,7 @@ msgstr ""
#. type: Bullet: '- '
#: build/documentation/pot_in/documentation/admin/settings.md
msgid "ConverseJS concord theme: this is a theme provided by ConverseJS."
msgid "ConverseJS cyberpunk theme: this is a theme provided by ConverseJS."
msgstr ""
#. type: Title ##

View File

@ -2167,7 +2167,7 @@ msgstr ""
#. type: Bullet: '- '
#: build/documentation/pot_in/documentation/admin/settings.md
msgid "ConverseJS concord theme: this is a theme provided by ConverseJS."
msgid "ConverseJS cyberpunk theme: this is a theme provided by ConverseJS."
msgstr ""
#. type: Title ##

View File

@ -2167,7 +2167,7 @@ msgstr ""
#. type: Bullet: '- '
#: build/documentation/pot_in/documentation/admin/settings.md
msgid "ConverseJS concord theme: this is a theme provided by ConverseJS."
msgid "ConverseJS cyberpunk theme: this is a theme provided by ConverseJS."
msgstr ""
#. type: Title ##

View File

@ -2167,7 +2167,7 @@ msgstr ""
#. type: Bullet: '- '
#: build/documentation/pot_in/documentation/admin/settings.md
msgid "ConverseJS concord theme: this is a theme provided by ConverseJS."
msgid "ConverseJS cyberpunk theme: this is a theme provided by ConverseJS."
msgstr ""
#. type: Title ##

View File

@ -2167,7 +2167,7 @@ msgstr ""
#. type: Bullet: '- '
#: build/documentation/pot_in/documentation/admin/settings.md
msgid "ConverseJS concord theme: this is a theme provided by ConverseJS."
msgid "ConverseJS cyberpunk theme: this is a theme provided by ConverseJS."
msgstr ""
#. type: Title ##

View File

@ -2167,7 +2167,7 @@ msgstr ""
#. type: Bullet: '- '
#: build/documentation/pot_in/documentation/admin/settings.md
msgid "ConverseJS concord theme: this is a theme provided by ConverseJS."
msgid "ConverseJS cyberpunk theme: this is a theme provided by ConverseJS."
msgstr ""
#. type: Title ##

View File

@ -2148,7 +2148,7 @@ msgstr ""
#. type: Bullet: '- '
#: build/documentation/pot_in/documentation/admin/settings.md
msgid "ConverseJS concord theme: this is a theme provided by ConverseJS."
msgid "ConverseJS cyberpunk theme: this is a theme provided by ConverseJS."
msgstr ""
#. type: Title ##

View File

@ -2167,7 +2167,7 @@ msgstr ""
#. type: Bullet: '- '
#: build/documentation/pot_in/documentation/admin/settings.md
msgid "ConverseJS concord theme: this is a theme provided by ConverseJS."
msgid "ConverseJS cyberpunk theme: this is a theme provided by ConverseJS."
msgstr ""
#. type: Title ##

View File

@ -2167,7 +2167,7 @@ msgstr ""
#. type: Bullet: '- '
#: build/documentation/pot_in/documentation/admin/settings.md
msgid "ConverseJS concord theme: this is a theme provided by ConverseJS."
msgid "ConverseJS cyberpunk theme: this is a theme provided by ConverseJS."
msgstr ""
#. type: Title ##

View File

@ -2167,7 +2167,7 @@ msgstr ""
#. type: Bullet: '- '
#: build/documentation/pot_in/documentation/admin/settings.md
msgid "ConverseJS concord theme: this is a theme provided by ConverseJS."
msgid "ConverseJS cyberpunk theme: this is a theme provided by ConverseJS."
msgstr ""
#. type: Title ##

View File

@ -2167,7 +2167,7 @@ msgstr ""
#. type: Bullet: '- '
#: build/documentation/pot_in/documentation/admin/settings.md
msgid "ConverseJS concord theme: this is a theme provided by ConverseJS."
msgid "ConverseJS cyberpunk theme: this is a theme provided by ConverseJS."
msgstr ""
#. type: Title ##