diff --git a/frappe/chat/website/__init__.py b/frappe/chat/website/__init__.py
new file mode 100644
index 0000000000..fa302dbf27
--- /dev/null
+++ b/frappe/chat/website/__init__.py
@@ -0,0 +1,17 @@
+import frappe
+
+@frappe.whitelist(allow_guest = True)
+def settings():
+ dsettings = frappe.get_single('Website Settings')
+ response = dict(
+ socketio = dict(
+ port = frappe.conf.socketio_port
+ ),
+ enable_chat = dsettings.chat_enable,
+ welcome_message = dsettings.chat_welcome_message,
+ operators = [
+ duser.user for duser in dsettings.chat_operators
+ ]
+ )
+
+ return response
\ No newline at end of file
diff --git a/frappe/public/js/frappe/chat.js b/frappe/public/js/frappe/chat.js
index bd9ac37229..658f80a023 100644
--- a/frappe/public/js/frappe/chat.js
+++ b/frappe/public/js/frappe/chat.js
@@ -7,6 +7,11 @@ import hyper from '../lib/hyper.min'
import './socketio_client'
+import './ui/dialog'
+import './ui/capture'
+
+import './misc/user'
+
/* eslint semi: "never" */
// Fuck semicolons - https://mislav.net/2010/05/semicolons
@@ -25,7 +30,7 @@ import './socketio_client'
* @see https://stackoverflow.com/a/32749533
* @todo Requires "transform-builtin-extend" for Babel 6
*/
-frappe.Error = Error;
+frappe.Error = Error
// class extends Error {
// constructor (message) {
// super (message)
@@ -42,7 +47,7 @@ frappe.Error = Error;
/**
* @description TypeError
*/
-frappe.TypeError = TypeError;
+frappe.TypeError = TypeError
// class extends frappe.Error {
// constructor (message) {
// super (message)
@@ -2422,64 +2427,85 @@ frappe.notify = (string, options) =>
frappe.chat.render = (render = true, force = false) =>
{
- frappe.log.info(`${render ? "Enable" : "Disable"} Chat for User.`);
+ frappe.log.info(`${render ? "Enable" : "Disable"} Chat for User.`)
- // With the assumption, that there's only one navbar.
- const $placeholder = $('.navbar .frappe-chat-dropdown');
-
- // Render if frappe-chat-toggle doesn't exist.
- if ( frappe.utils.is_empty($placeholder.has('.frappe-chat-toggle')) ) {
- const $template = $(`
-
-
-
-
-
- `);
-
- $placeholder.addClass('dropdown hidden');
- $placeholder.html($template);
+ const desk = 'desk' in frappe
+ if ( desk ) {
+ // With the assumption, that there's only one navbar.
+ const $placeholder = $('.navbar .frappe-chat-dropdown')
+
+ // Render if frappe-chat-toggle doesn't exist.
+ if ( frappe.utils.is_empty($placeholder.has('.frappe-chat-toggle')) ) {
+ const $template = $(`
+
+
+
+
+
+ `)
+
+ $placeholder.addClass('dropdown hidden')
+ $placeholder.html($template)
+ }
+
+ if ( render ) {
+ $placeholder.removeClass('hidden')
+ } else {
+ $placeholder.addClass('hidden')
+ }
}
-
- if ( render ) {
- $placeholder.removeClass('hidden');
- } else {
- $placeholder.addClass('hidden');
- }
-
+
// Avoid re-renders. Once is enough.
if ( !frappe.chatter || force ) {
- frappe.chatter = new frappe.Chat({ target: '.navbar .frappe-chat-toggle' });
- frappe.chatter.render();
+ frappe.chatter = new frappe.Chat({
+ target: desk ? '.navbar .frappe-chat-toggle' : null
+ })
+ frappe.chatter.render()
}
}
frappe.chat.setup = () =>
{
- if ( frappe.session.user !== 'Guest' ) {
- frappe.log = frappe.Logger.get('frappe.chat');
-
- frappe.log.info('Setting up frappe.chat');
- frappe.log.warn('TODO: Handle realtime System Settings update.');
- frappe.log.warn('TODO: frappe.chat.