aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBadlop <badlop@process-one.net>2022-03-31 21:24:04 +0200
committerBadlop <badlop@process-one.net>2022-04-01 12:04:07 +0200
commit6cdb517454915a1f722fe0477ab25c9cf96ae10b (patch)
tree090562656eda54b56c4460506f6c550b501b9dbf /src
parentThe *_url options now support 'auto' (diff)
New conversejs_options to setup additional options for Converse
Diffstat (limited to 'src')
-rw-r--r--src/mod_conversejs.erl34
-rw-r--r--src/mod_conversejs_opt.erl7
2 files changed, 39 insertions, 2 deletions
diff --git a/src/mod_conversejs.erl b/src/mod_conversejs.erl
index 1bf9f526b..67004f637 100644
--- a/src/mod_conversejs.erl
+++ b/src/mod_conversejs.erl
@@ -51,6 +51,7 @@ depends(_Host, _Opts) ->
[].
process([], #request{method = 'GET', host = Host, raw_path = RawPath}) ->
+ ExtraOptions = get_extra_options(Host),
DomainRaw = gen_mod:get_module_opt(Host, ?MODULE, default_domain),
Domain = misc:expand_keyword(<<"@HOST@">>, DomainRaw, Host),
Script = get_file_url(Host, conversejs_script,
@@ -66,7 +67,8 @@ process([], #request{method = 'GET', host = Host, raw_path = RawPath}) ->
{<<"registration_domain">>, Domain},
{<<"assets_path">>, RawPath},
{<<"i18n">>, ejabberd_option:language(Host)},
- {<<"view_mode">>, <<"fullscreen">>}],
+ {<<"view_mode">>, <<"fullscreen">>}
+ | ExtraOptions],
Init2 =
case mod_host_meta:get_url(?MODULE, websocket, any, Host) of
undefined -> Init;
@@ -159,6 +161,17 @@ content_type(Filename) ->
%% Options parsing
%%----------------------------------------------------------------------
+get_extra_options(Host) ->
+ RawOpts = gen_mod:get_module_opt(Host, ?MODULE, conversejs_options),
+ lists:map(fun({Name, <<"true">>}) -> {Name, true};
+ ({Name, <<"false">>}) -> {Name, false};
+ ({<<"locked_domain">> = Name, Value}) ->
+ {Name, misc:expand_keyword(<<"@HOST@">>, Value, Host)};
+ ({Name, Value}) ->
+ {Name, Value}
+ end,
+ RawOpts).
+
get_file_url(Host, Option, Filename, Default) ->
FileRaw = case gen_mod:get_module_opt(Host, ?MODULE, Option) of
auto -> get_auto_file_url(Host, Filename, Default);
@@ -182,6 +195,8 @@ mod_opt_type(websocket_url) ->
econf:either(auto, econf:binary());
mod_opt_type(conversejs_resources) ->
econf:either(undefined, econf:directory());
+mod_opt_type(conversejs_options) ->
+ econf:map(econf:binary(), econf:either(econf:binary(), econf:int()));
mod_opt_type(conversejs_script) ->
econf:binary();
mod_opt_type(conversejs_css) ->
@@ -194,6 +209,7 @@ mod_options(_) ->
{websocket_url, auto},
{default_domain, <<"@HOST@">>},
{conversejs_resources, undefined},
+ {conversejs_options, []},
{conversejs_script, auto},
{conversejs_css, auto}].
@@ -223,7 +239,14 @@ mod_doc() ->
"modules:",
" mod_conversejs:",
" conversejs_resources: \"/home/ejabberd/conversejs-9.0.0/package/dist\"",
- " websocket_url: \"ws://example.org:5280/websocket\""],
+ " websocket_url: \"ws://example.org:5280/websocket\""
+ " conversejs_options:"
+ " auto_away: 30"
+ " clear_cache_on_logout: true"
+ " i18n: \"pt\""
+ " locked_domain: \"@HOST@\""
+ " message_archiving: always"
+ " theme: concord"],
opts =>
[{websocket_url,
#{value => ?T("auto | WebSocketURL"),
@@ -254,6 +277,13 @@ mod_doc() ->
desc =>
?T("Local path to the Converse files. "
"If not set, the public Converse client will be used instead.")}},
+ {conversejs_options,
+ #{value => "{Name: Value}",
+ desc =>
+ ?T("Specify additional options to be passed to Converse. "
+ "See https://conversejs.org/docs/html/configuration.html[Converse configuration]. "
+ "Only boolean, integer and string values are supported; "
+ "lists are not supported.")}},
{conversejs_script,
#{value => ?T("auto | URL"),
desc =>
diff --git a/src/mod_conversejs_opt.erl b/src/mod_conversejs_opt.erl
index 42304f746..c8132bfab 100644
--- a/src/mod_conversejs_opt.erl
+++ b/src/mod_conversejs_opt.erl
@@ -5,6 +5,7 @@
-export([bosh_service_url/1]).
-export([conversejs_css/1]).
+-export([conversejs_options/1]).
-export([conversejs_resources/1]).
-export([conversejs_script/1]).
-export([default_domain/1]).
@@ -22,6 +23,12 @@ conversejs_css(Opts) when is_map(Opts) ->
conversejs_css(Host) ->
gen_mod:get_module_opt(Host, mod_conversejs, conversejs_css).
+-spec conversejs_options(gen_mod:opts() | global | binary()) -> [{binary(),binary() | integer()}].
+conversejs_options(Opts) when is_map(Opts) ->
+ gen_mod:get_opt(conversejs_options, Opts);
+conversejs_options(Host) ->
+ gen_mod:get_module_opt(Host, mod_conversejs, conversejs_options).
+
-spec conversejs_resources(gen_mod:opts() | global | binary()) -> 'undefined' | binary().
conversejs_resources(Opts) when is_map(Opts) ->
gen_mod:get_opt(conversejs_resources, Opts);