changeset 2919:0ea93da47db9

mod_conversejs: Allow passing arbitrary options trough to Converse.js
author Kim Alvefur <zash@zash.se>
date Sat, 10 Mar 2018 00:05:30 +0100
parents d2d0715f30d9
children 4d03ac2737ab
files mod_conversejs/README.markdown mod_conversejs/mod_conversejs.lua
diffstat 2 files changed, 34 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/mod_conversejs/README.markdown	Sat Mar 10 00:04:47 2018 +0100
+++ b/mod_conversejs/README.markdown	Sat Mar 10 00:05:30 2018 +0100
@@ -47,5 +47,26 @@
 See Prosodys [HTTP configuration][doc:http] for HTTP related
 options.
 
+Other
+-----
 
+To pass [other Converse.js
+options](https://conversejs.org/docs/html/configuration.html), or
+override the derived settings, one can set `conversejs_options` like
+this:
 
+``` {.lua}
+converse_options = {
+    debug = true;
+    view_mode = "fullscreen";
+}
+```
+
+Note that the following options are automatically provided, and
+**overriding them may cause problems**:
+
+-   `authentication` *based on Prosodys authentication settings*
+-   `jid` *the current `VirtualHost`*
+-   `bosh_service_url`
+-   `websocket_url` *if `mod_websocket` is available*
+
--- a/mod_conversejs/mod_conversejs.lua	Sat Mar 10 00:04:47 2018 +0100
+++ b/mod_conversejs/mod_conversejs.lua	Sat Mar 10 00:05:30 2018 +0100
@@ -17,17 +17,26 @@
 <body><script>converse.initialize(%s);</script>
 ]]
 
+local more_options = module:get_option("conversejs_options");
+
 module:provides("http", {
 	route = {
 		GET = function (event)
-			event.response.headers.content_type = "text/html";
-			return template:format(json_encode({
-				-- debug = true,
+			local converse_options = {
 				bosh_service_url = module:http_url("bosh","/http-bind");
 				websocket_url = has_ws and module:http_url("websocket","xmpp-websocket"):gsub("^http", "ws") or nil;
 				authentication = module:get_option_string("authentication") == "anonymous" and "anonymous" or "login";
 				jid = module.host;
-			}));
+			};
+
+			if type(more_options) == "table" then
+				for k,v in pairs(more_options) do
+					converse_options[k] = v;
+				end
+			end
+
+			event.response.headers.content_type = "text/html";
+			return template:format(json_encode(converse_options));
 		end;
 	}
 });