diff --git a/frappe/chat/doctype/chat_room/chat_room.json b/frappe/chat/doctype/chat_room/chat_room.json index 14710498bc..687ec82331 100644 --- a/frappe/chat/doctype/chat_room/chat_room.json +++ b/frappe/chat/doctype/chat_room/chat_room.json @@ -1,314 +1,322 @@ { - "allow_copy": 0, - "allow_guest_to_view": 0, - "allow_import": 0, - "allow_rename": 0, - "autoname": "CR.#####", - "beta": 1, - "creation": "2017-11-08 15:27:21.156667", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "", - "editable_grid": 1, - "engine": "InnoDB", + "allow_copy": 0, + "allow_guest_to_view": 0, + "allow_import": 0, + "allow_rename": 0, + "autoname": "CR.#####", + "beta": 1, + "creation": "2017-11-08 15:27:21.156667", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "", + "editable_grid": 1, + "engine": "InnoDB", "fields": [ { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "default": "Direct", - "fieldname": "type", - "fieldtype": "Select", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Type", - "length": 0, - "no_copy": 0, - "options": "Direct\nGroup\nVisitor", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 1, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "Direct", + "fieldname": "type", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Type", + "length": 0, + "no_copy": 0, + "options": "Direct\nGroup\nVisitor", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 1, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "eval:doc.type==\"Group\"", - "fieldname": "room_name", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Name", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "eval:doc.type==\"Group\"", + "fieldname": "room_name", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Name", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "eval:doc.type==\"Group\"", - "fieldname": "avatar", - "fieldtype": "Attach Image", - "hidden": 1, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Avatar", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "eval:doc.type==\"Group\"", + "fieldname": "avatar", + "fieldtype": "Attach Image", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Avatar", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "last_message", - "fieldtype": "Data", - "hidden": 1, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Last Message", - "length": 0, - "no_copy": 0, - "options": "", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "last_message", + "fieldtype": "Data", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Last Message", + "length": 0, + "no_copy": 0, + "options": "", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "message_count", - "fieldtype": "Int", - "hidden": 1, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Message Count", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "message_count", + "fieldtype": "Int", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Message Count", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "default": "", - "fieldname": "owner", - "fieldtype": "Link", - "hidden": 1, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Owner", - "length": 0, - "no_copy": 0, - "options": "User", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "", + "fieldname": "owner", + "fieldtype": "Link", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Owner", + "length": 0, + "no_copy": 0, + "options": "User", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "user_list", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Users", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "user_list", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Users", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "users", - "fieldtype": "Table", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Users", - "length": 0, - "no_copy": 0, - "options": "Chat Room User", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "users", + "fieldtype": "Table", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Users", + "length": 0, + "no_copy": 0, + "options": "Chat Room User", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 } - ], - "has_web_view": 0, - "hide_heading": 0, - "hide_toolbar": 0, - "idx": 0, - "image_field": "avatar", - "image_view": 0, - "in_create": 0, - "is_submittable": 0, - "issingle": 0, - "istable": 0, - "max_attachments": 0, - "modified": "2018-01-20 18:14:02.384039", - "modified_by": "faris@erpnext.com", - "module": "Chat", - "name": "Chat Room", - "name_case": "", - "owner": "Administrator", + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_field": "avatar", + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 0, + "max_attachments": 0, + "modified": "2018-03-22 16:35:06.987209", + "modified_by": "Administrator", + "module": "Chat", + "name": "Chat Room", + "name_case": "", + "owner": "Administrator", "permissions": [ { - "amend": 0, - "apply_user_permissions": 0, - "cancel": 0, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager", - "set_user_permissions": 1, - "share": 1, - "submit": 0, + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "set_user_permissions": 1, + "share": 1, + "submit": 0, "write": 1 } - ], - "quick_entry": 0, - "read_only": 0, - "read_only_onload": 0, - "search_fields": "room_name", - "show_name_in_global_search": 1, - "sort_field": "modified", - "sort_order": "DESC", - "title_field": "room_name", - "track_changes": 1, + ], + "quick_entry": 0, + "read_only": 0, + "read_only_onload": 0, + "search_fields": "room_name", + "show_name_in_global_search": 1, + "sort_field": "modified", + "sort_order": "DESC", + "title_field": "room_name", + "track_changes": 1, "track_seen": 0 } \ No newline at end of file diff --git a/frappe/chat/doctype/chat_room/chat_room.py b/frappe/chat/doctype/chat_room/chat_room.py index 120c360bfd..a712c9a7ee 100644 --- a/frappe/chat/doctype/chat_room/chat_room.py +++ b/frappe/chat/doctype/chat_room/chat_room.py @@ -157,17 +157,21 @@ def get(user, rooms = None, fields = None, filters = None): return rooms -@frappe.whitelist() +@frappe.whitelist(allow_guest = True) def create(kind, owner, users = None, name = None): - authenticate(owner) + if kind != 'Visitor': + authenticate(owner) users = safe_json_loads(users) room = frappe.new_doc('Chat Room') - room.type = kind - room.owner = owner - room.room_name = name - + if kind != 'Visitor': + room.type = kind + room.owner = owner + room.room_name = name + else: + pass + dusers = [ ] if users: diff --git a/frappe/chat/website/__init__.py b/frappe/chat/website/__init__.py index fa302dbf27..b9df83769e 100644 --- a/frappe/chat/website/__init__.py +++ b/frappe/chat/website/__init__.py @@ -7,11 +7,16 @@ def settings(): socketio = dict( port = frappe.conf.socketio_port ), - enable_chat = dsettings.chat_enable, + enable_chat = bool(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 + return response + +@frappe.whitelist(allow_guest = True) +def token(): + token = frappe.generate_hash() + return token \ No newline at end of file diff --git a/frappe/public/js/frappe/chat.js b/frappe/public/js/frappe/chat.js index 658f80a023..f34bb2009b 100644 --- a/frappe/public/js/frappe/chat.js +++ b/frappe/public/js/frappe/chat.js @@ -441,17 +441,38 @@ frappe.ui.Uploader.TEMPLATE = frappe.provide('frappe.ui.keycode') frappe.ui.keycode = { RETURN: 13 } -// frappe.stores - A registry for frappe stores. -frappe.provide('frappe.stores') /** * @description Frappe's Store Class - * - * @todo Under Development */ -frappe.Store = class { - constructor ( ) { + // frappe.stores - A registry for frappe stores. +frappe.provide('frappe.stores') +frappe.stores = [ ] +frappe.Store = class +{ + /** + * @description Frappe's Store Class's constructor. + * + * @param {string} name - Name of the logger. + */ + constructor (name) { + if ( typeof name !== 'string' ) + throw new frappe.TypeError(`Expected string for name, got ${typeof name} instead.`) + this.name = name + } + /** + * @description Get instance of frappe.Store (return registered one if declared). + * + * @param {string} name - Name of the store. + */ + static get (name) { + if ( !(name in frappe.stores) ) + frappe.stores[name] = new frappe.Store(name) + return frappe.stores[name] } + + set (key, value) { localStorage.setItem(`${this.name}:${key}`, value) } + get (key, value) { return localStorage.getItem(`${this.name}:${key}`) } } // frappe.loggers - A registry for frappe loggers. @@ -481,9 +502,9 @@ frappe.Logger = class { if ( !this.level ) { if ( frappe.boot.developer_mode ) - this.level = frappe.Logger.ERROR + this.level = frappe.Logger.ERROR else - this.level = frappe.Logger.NOTSET + this.level = frappe.Logger.NOTSET } this.format = frappe.Logger.FORMAT } @@ -528,7 +549,7 @@ frappe.Logger.FORMAT = '{time} {name}' // frappe.chat frappe.provide('frappe.chat') -frappe.log = frappe.Logger.get('frappe.chat', frappe.Logger.NOTSET) +frappe.log = frappe.Logger.get('frappe.chat', frappe.Logger.ERROR) // frappe.chat.profile frappe.provide('frappe.chat.profile') @@ -988,6 +1009,41 @@ frappe.chat.emoji = function (fn) { }) } +// Website Settings +frappe.provide('frappe.chat.website.settings') +frappe.chat.website.settings = (fields, fn) => +{ + if ( typeof fields === "function" ) { + fn = fields + fields = null + } else + if ( typeof fields === "string" ) + fields = frappe._.as_array(fields) + + return new Promise(resolve => { + frappe.call("frappe.chat.website.settings") + .then(response => { + if ( fn ) + fn(response.message) + + resolve(response.message) + }) + }) +} + +frappe.chat.website.token = (fn) => +{ + return new Promise(resolve => { + frappe.call("frappe.chat.website.token") + .then(response => { + if ( fn ) + fn(response.message) + + resolve(response.message) + }) + }) +} + const { h, Component } = hyper // frappe.components @@ -1197,6 +1253,11 @@ class { // Load Emojis. frappe.chat.emoji() + + frappe.log.info('Initializing Socket.IO') + frappe.chat.website.settings("socketio").then(({ socketio }) => { + frappe.socketio.init(socketio.port) + }) } /** @@ -1480,7 +1541,8 @@ class extends Component { onclick: function ( ) { const dialog = new frappe.ui.Dialog({ title: __("New Chat"), - fields: [ { + fields: [ + { label: __("Chat Type"), fieldname: "type", fieldtype: "Select", @@ -1493,19 +1555,22 @@ class extends Component { dialog.set_df_property("group_name", "reqd", is_group) dialog.set_df_property("user", "reqd", !is_group) } - }, { + }, + { label: __("Group Name"), fieldname: "group_name", fieldtype: "Data", reqd: true, depends_on: "eval:doc.type == 'Group'" - }, { + }, + { label: __("Users"), fieldname: "users", fieldtype: "MultiSelect", options: frappe.user.get_emails(), depends_on: "eval:doc.type == 'Group'" - }, { + }, + { label: __("User"), fieldname: "user", fieldtype: "Link", @@ -2460,6 +2525,26 @@ frappe.chat.render = (render = true, force = false) => frappe.chatter = new frappe.Chat({ target: desk ? '.navbar .frappe-chat-toggle' : null }) + + if ( !desk ) { + frappe.store = frappe.Store.get('frappe.chat') + var token = frappe.store.get('guest_token') + + frappe.log.info(`Local Guest Token - ${token}`) + + if ( !token ) { + frappe.chat.website.token().then(token => { + frappe.log.info(`Generated Guest Token - ${token}`) + frappe.store.set('guest_token', token) + }) + } + + frappe.chat.room.create("Visitor", token).then(room => { + + }) + } + + frappe.chatter.render() } } @@ -2470,16 +2555,14 @@ frappe.chat.setup = () => frappe.log.info('Setting up frappe.chat') frappe.log.warn('TODO: frappe.chat. requires a storage.') - const desk = 'desk' in frappe - if ( desk ) { + if ( frappe.session.user !== 'Guest' ) { // Create/Get Chat Profile for session User, retrieve enable_chat frappe.log.info('Creating a Chat Profile.') - + frappe.chat.profile.create('enable_chat').then(({ enable_chat }) => { frappe.log.info(`Chat Profile created for User ${frappe.session.user}.`) if ( 'desk' in frappe ) { const should_render = frappe.sys_defaults.enable_chat && enable_chat - frappe.chat.render(should_render) } }) @@ -2493,6 +2576,7 @@ frappe.chat.setup = () => frappe.chat.render(should_render) } }) + } else { // Website Settings. frappe.log.info('Retrieving Chat Website Settings.') diff --git a/frappe/public/js/frappe/form/layout.js b/frappe/public/js/frappe/form/layout.js index b56857d86a..7cf60fdb48 100644 --- a/frappe/public/js/frappe/form/layout.js +++ b/frappe/public/js/frappe/form/layout.js @@ -1,13 +1,6 @@ -// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -// MIT License. See license.txt -frappe.provide("frappe.ui.form"); - -// - page -// - section -// - column -// - section - +import '../class' +frappe.provide("frappe.ui.form"); frappe.ui.form.Layout = Class.extend({ init: function(opts) { this.views = {}; diff --git a/frappe/public/js/frappe/socketio_client.js b/frappe/public/js/frappe/socketio_client.js index b06286b028..d309aae5c3 100644 --- a/frappe/public/js/frappe/socketio_client.js +++ b/frappe/public/js/frappe/socketio_client.js @@ -2,7 +2,7 @@ frappe.socketio = { open_tasks: {}, open_docs: [], emit_queue: [], - init: function() { + init: function(port = 3000) { if (frappe.boot.disable_async) { return; } @@ -13,17 +13,17 @@ frappe.socketio = { //Enable secure option when using HTTPS if (window.location.protocol == "https:") { - frappe.socketio.socket = io.connect(frappe.socketio.get_host(), {secure: true}); + frappe.socketio.socket = io.connect(frappe.socketio.get_host(port), {secure: true}); } else if (window.location.protocol == "http:") { - frappe.socketio.socket = io.connect(frappe.socketio.get_host()); + frappe.socketio.socket = io.connect(frappe.socketio.get_host(port)); } else if (window.location.protocol == "file:") { frappe.socketio.socket = io.connect(window.localStorage.server); } if (!frappe.socketio.socket) { - console.log("Unable to connect to " + frappe.socketio.get_host()); + console.log("Unable to connect to " + frappe.socketio.get_host(port)); return; } @@ -96,11 +96,11 @@ frappe.socketio = { } } }, - get_host: function() { + get_host: function(port = 3000) { var host = window.location.origin; if(window.dev_server) { var parts = host.split(":"); - var port = frappe.boot.socketio_port || '3000'; + var port = frappe.boot.socketio_port || port.toString() || '3000'; if(parts.length > 2) { host = parts[0] + ":" + parts[1]; } diff --git a/frappe/public/js/frappe/ui/dialog.js b/frappe/public/js/frappe/ui/dialog.js index 8d06058579..e3fee0c800 100644 --- a/frappe/public/js/frappe/ui/dialog.js +++ b/frappe/public/js/frappe/ui/dialog.js @@ -1,5 +1,4 @@ -// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -// MIT License. See license.txt +import './field_group' frappe.provide('frappe.ui'); diff --git a/frappe/public/js/frappe/ui/field_group.js b/frappe/public/js/frappe/ui/field_group.js index 6da823d231..eaeca34f25 100644 --- a/frappe/public/js/frappe/ui/field_group.js +++ b/frappe/public/js/frappe/ui/field_group.js @@ -1,5 +1,4 @@ -// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -// MIT License. See license.txt +import '../form/layout' frappe.provide('frappe.ui'); diff --git a/frappe/public/less/chat.less b/frappe/public/less/chat.less index dc83c1e160..f8beaf1813 100644 --- a/frappe/public/less/chat.less +++ b/frappe/public/less/chat.less @@ -3,6 +3,7 @@ // http://codeguide.co - @mdo (Author of Bootstrap) @import "common.less"; +@import "flex.less"; // Typography @font-weight-bold: 700; diff --git a/frappe/templates/base.html b/frappe/templates/base.html index 4e820d69cc..91bba8b5e1 100644 --- a/frappe/templates/base.html +++ b/frappe/templates/base.html @@ -78,6 +78,7 @@ + {% endblock %} diff --git a/frappe/website/doctype/website_settings/website_settings.json b/frappe/website/doctype/website_settings/website_settings.json index 99f5d19ac4..6f093f1088 100644 --- a/frappe/website/doctype/website_settings/website_settings.json +++ b/frappe/website/doctype/website_settings/website_settings.json @@ -1127,8 +1127,9 @@ "bold": 0, "collapsible": 0, "columns": 0, + "default": "Hi, how may I help you?", "fieldname": "chat_welcome_message", - "fieldtype": "Check", + "fieldtype": "Data", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, @@ -1227,7 +1228,7 @@ "issingle": 1, "istable": 0, "max_attachments": 10, - "modified": "2018-03-22 14:45:30.300804", + "modified": "2018-03-22 14:48:38.970117", "modified_by": "Administrator", "module": "Website", "name": "Website Settings", diff --git a/socketio.js b/socketio.js index 1febeaff1f..b1e3553c77 100644 --- a/socketio.js +++ b/socketio.js @@ -49,33 +49,6 @@ io.on('connection', function (socket) { socket.user = cookie.parse(socket.request.headers.cookie).user_id; socket.files = {}; - // frappe namespace (temporary till webpack comes in, we can then reuse). - const frappe = { }; - frappe._ = { }; - - frappe._.compact = function (arr) { return arr.filter(Boolean) } - - // frappe.model - // Realtime Database Updates FTW! - function get_model_room (doctype, name, field) { - const site = get_site_name(socket) - const room = frappe._.compact([site, doctype, name, field]).join(":") - - return room - } - - socket.on('frappe.model:subscribe', function (params) { - const doctype = params.doctype - const name = params.name - const field = params.field - - const room = get_model_room(doctype, name, field) - - console.log('frappe.model: Subscribing ' + socket.user + ' to room ' + room); - socket.join(room); - }) - // end frappe.model - // frappe.chat socket.on("frappe.chat.room:subscribe", function (rooms) { if (!Array.isArray(rooms)) {