Created
February 21, 2013 17:05
-
-
Save jamesfalkner/5006270 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| AUI().use("anim-color", "anim-easing", "aui-base", "aui-live-search", "liferay-poller", "stylesheet", "swfobject", function (a) { | |
| var h = a.Lang; | |
| var d = h.now; | |
| var f = a.config.doc; | |
| var e = a.config.win.webkitNotifications; | |
| var c = 0; | |
| var g = 1; | |
| var b = '\u004e\u0065\u0077\u0020\u004d\u0065\u0073\u0073\u0061\u0067\u0065\u0020\u0066\u0072\u006f\u006d\u0020\u007b\u0030\u007d'; | |
| Liferay.namespace("Chat"); | |
| a.one(f.documentElement).toggleClass("desktop-notifications", !!e); | |
| Liferay.Chat.Util = {getDefaultColor: function () { | |
| var i = this; | |
| var k = i._defaultColor; | |
| if (!k) { | |
| var j = a.one("#chatBar .panel-trigger"); | |
| if (j) { | |
| k = j.getStyle("backgroundColor"); | |
| while (k == "transparent") { | |
| k = j.getStyle("backgroundColor"); | |
| j = j.ancestor() | |
| } | |
| } | |
| i._defaultColor = k | |
| } | |
| return k | |
| }, getWaitingColor: function () { | |
| var i = this; | |
| var k = i._waitingColor; | |
| if (!k) { | |
| var j = a.Node.create('<span class="aui-helper-hidden message-waiting" />').appendTo(f.body); | |
| k = j.getStyle("backgroundColor"); | |
| j.remove(); | |
| i._waitingColor = k | |
| } | |
| return k | |
| }, formatTime: function (l) { | |
| var i = this; | |
| l = Number(l); | |
| l = new Date(l); | |
| var k = "am"; | |
| var j = l.getHours(); | |
| var m = l.getMinutes(); | |
| if (j >= 11) { | |
| k = "pm" | |
| } | |
| if (j > 12) { | |
| j -= 12 | |
| } | |
| if (j === 0) { | |
| j += 12 | |
| } | |
| if (m < 10) { | |
| m = "0" + m | |
| } | |
| return j + ":" + m + " " + k | |
| }, getCurrentTimestamp: function () { | |
| var i = this; | |
| return d() - i._getOffset() | |
| }, getUserImagePath: function (j) { | |
| var i = this; | |
| return themeDisplay.getPathImage() + "/user_portrait?img_id=" + j | |
| }, _getOffset: function () { | |
| var i = this; | |
| var j = i._offset; | |
| if (h.isUndefined(j)) { | |
| var k = a.one("#currentChatServerTime").val() || 0; | |
| j = d() - k; | |
| i._offset = j | |
| } | |
| return j | |
| }, TIMESTAMP_24: (24 * 60 * 60 * 1000)}; | |
| Liferay.Chat.Panel = function (j) { | |
| var i = this; | |
| if (!j.container) { | |
| i._tabsContainer = Liferay.Chat.Manager.getContainer() | |
| } else { | |
| i._tabsContainer = a.one(j.container) | |
| } | |
| i._chatProperties = {}; | |
| i._eventsSuspended = false; | |
| i._panelId = j.panelId; | |
| i._panelTitle = j.panelTitle; | |
| i._panelIcon = j.panelIcon; | |
| i._created = Liferay.Chat.Util.getCurrentTimestamp(); | |
| var k = i._setPanelHTML(j.panelHTML); | |
| i.set("panelHTML", k); | |
| i._createPanel(j.fromMarkup); | |
| if (j.panelTitle) { | |
| i.setTitle(j.panelTitle) | |
| } | |
| i._popupTrigger.unselectable() | |
| }; | |
| Liferay.Chat.Panel.prototype = {close: function () { | |
| var i = this; | |
| i._panel.remove(); | |
| i.fire("close") | |
| }, getPanel: function () { | |
| var i = this; | |
| return i._panel | |
| }, getTitle: function () { | |
| var i = this; | |
| return i._popupTitle.text() | |
| }, hide: function () { | |
| var i = this; | |
| i.set("selected", false); | |
| i._panel.removeClass("selected"); | |
| i.fire("hide") | |
| }, resumeEvents: function () { | |
| var i = this; | |
| i._eventsSuspended = false | |
| }, setTitle: function (j) { | |
| var i = this; | |
| i._popupTrigger.one(".trigger-name").text(j); | |
| i._popupTitle.text(j) | |
| }, show: function () { | |
| var i = this; | |
| i.set("selected", true); | |
| i._panel.addClass("selected"); | |
| i.fire("show") | |
| }, suspendEvents: function () { | |
| var i = this; | |
| i._eventsSuspended = true | |
| }, toggle: function () { | |
| var i = this; | |
| if (i.get("selected")) { | |
| i.hide() | |
| } else { | |
| i.show() | |
| } | |
| }, _createPanel: function (k) { | |
| var i = this; | |
| var j; | |
| if (k) { | |
| j = a.one(k) | |
| } else { | |
| j = a.Node.create(i.get("panelHTML")) | |
| } | |
| i._popup = j.one(".chat-panel"); | |
| i._popupTitle = j.one(".panel-title"); | |
| i._textBox = j.one("textarea"); | |
| i._popupTrigger = j.one(".panel-trigger"); | |
| i._popupTrigger.on("click", i.toggle, i); | |
| j.all(".panel-button").on("click", function (l) { | |
| var m = l.currentTarget; | |
| if (m.hasClass("minimize")) { | |
| i.hide() | |
| } else { | |
| if (m.hasClass("close")) { | |
| i.close() | |
| } | |
| } | |
| }); | |
| i._panel = j; | |
| i._tabsContainer.append(j) | |
| }, _setPanelHTML: function (j) { | |
| var i = this; | |
| if (!j) { | |
| j = '<li class="panel"><div class="panel-trigger"><span class="trigger-name"></span></div><div class="chat-panel"><div class="panel-window"><div class="panel-button minimize"></div><div class="panel-title"></div><div class="search-buddies"><input class="search-buddies-field" type="text" /></div><div class="panel-content"></div></div></div></li>' | |
| } | |
| return j | |
| }}; | |
| a.augment(Liferay.Chat.Panel, a.Attribute); | |
| Liferay.Chat.Conversation = function (j) { | |
| var i = this; | |
| Liferay.Chat.Conversation.superclass.constructor.call(i, j); | |
| i._chatInput = i._panel.one(".panel-input textarea"); | |
| i._chatOutput = i._panel.one(".panel-output"); | |
| i._statusMessage = i._panel.one(".panel-profile"); | |
| i._created = Liferay.Chat.Util.getCurrentTimestamp(); | |
| i._lastMessageTime = 0; | |
| i._lastTypedTime = 0; | |
| i._typingDelay = 5000; | |
| i._unreadMessages = 0; | |
| i._originalPageTitle = f.title; | |
| i._stopTypingTask = a.debounce(i.setTyping, i._typingDelay, i, false); | |
| i._heightMonitor = a.Node.create('<pre class="chat-height-monitor" />'); | |
| i._heightMonitor.appendTo(f.body); | |
| i._unreadMessagesContainer = i._panel.one(".unread"); | |
| if (!i._unreadMessagesContainer) { | |
| i._unreadMessagesContainer = a.Node.create('<div class="unread" />'); | |
| i._popupTrigger.append(i._unreadMessagesContainer) | |
| } | |
| if (j.statusMessage) { | |
| i._statusMessage.text(j.statusMessage) | |
| } | |
| i._chatInput.on("keyup", i._keystroke, i); | |
| i._chatInput.on("focus", i._keystroke, i) | |
| }; | |
| a.extend(Liferay.Chat.Conversation, Liferay.Chat.Panel, {send: function (j) { | |
| var i = this; | |
| Liferay.Chat.Manager.send(j) | |
| }, setAsRead: function () { | |
| var i = this; | |
| i.setWaiting(false); | |
| i._unreadMessagesContainer.hide(); | |
| i._unreadMessages = 0; | |
| i.set("lastReadTime", Liferay.Chat.Util.getCurrentTimestamp()); | |
| f.title = i._originalPageTitle | |
| }, setAsUnread: function () { | |
| var i = this; | |
| if (!i.get("selected")) { | |
| if (i._unreadMessages > 1) { | |
| i._unreadMessagesContainer.text(i._unreadMessages); | |
| i._unreadMessagesContainer.show() | |
| } else { | |
| Liferay.Chat.Manager.triggerSound(); | |
| i.setWaiting(true); | |
| i._unreadMessagesContainer.hide() | |
| } | |
| f.title = i._originalPageTitle + " - Unread messages (" + i._unreadMessages + ")" | |
| } | |
| }, setTyping: function (j) { | |
| var i = this; | |
| if (j) { | |
| i._panel.addClass("typing") | |
| } else { | |
| i._panel.removeClass("typing") | |
| } | |
| }, setWaiting: function (k) { | |
| var i = this; | |
| var j = i._panel; | |
| var l = i._waitingAnim; | |
| if (k) { | |
| if (!l) { | |
| var m = Liferay.Chat.Util; | |
| l = new a.Anim({direction: "alternate", duration: 0.65, easing: "easeBoth", from: {backgroundColor: m.getDefaultColor()}, iterations: "infinite", node: j, to: {backgroundColor: m.getWaitingColor()}}); | |
| i._waitingAnim = l | |
| } | |
| l.run() | |
| } else { | |
| if (l) { | |
| l.stop() | |
| } | |
| j.setStyle("backgroundColor", "") | |
| } | |
| }, show: function () { | |
| var i = this; | |
| Liferay.Chat.Panel.prototype.show.call(i); | |
| i.setAsRead(); | |
| var j = i._chatOutput.getDOM(); | |
| j.scrollTop = j.scrollHeight | |
| }, update: function (j) { | |
| var i = this; | |
| if (j.incoming && !j.cache) { | |
| if (j.content.length) { | |
| if (!i.get("selected")) { | |
| var k = i.get("lastReadTime") || 0; | |
| if (k < j.createDate) { | |
| i._unreadMessages++ | |
| } | |
| Liferay.Chat.Manager.notify(Liferay.Chat.Util.getUserImagePath(i._panelIcon), h.sub(b, [i._panelTitle]), j.content.replace(/\n/g, " ")) | |
| } | |
| i.setAsUnread() | |
| } else { | |
| i.setTyping(true); | |
| i._stopTypingTask() | |
| } | |
| } | |
| if (j.content.length) { | |
| i._updateMessageWindow(j); | |
| i.setTyping(false) | |
| } | |
| if (j.statusMessage) { | |
| i._statusMessage.text(j.statusMessage) | |
| } | |
| }, updateStatus: function (j) { | |
| var i = this; | |
| i._statusMessage.text(j) | |
| }, _autoSize: function () { | |
| var k = this; | |
| var j = k._heightMonitor.getDOM(); | |
| if (!k._chatInputWidth) { | |
| k._chatInputWidth = k._chatInput.get("offsetWidth"); | |
| k._heightMonitor.setStyle("width", k._chatInputWidth) | |
| } | |
| var l = k._chatInput.getDOM(); | |
| var m = Liferay.Util.escapeHTML(l.value); | |
| var n = f.createTextNode(m); | |
| j.innerHTML = ""; | |
| j.appendChild(n); | |
| m = j.innerHTML; | |
| if (!m.length) { | |
| m = " " | |
| } | |
| if (Liferay.Browser.isIe()) { | |
| m = m.replace(/\n/g, "<br />") | |
| } | |
| j.innerHTML = m; | |
| var i = Math.max(j.offsetHeight, 14); | |
| i = Math.min(i, 64); | |
| l.style.overflowY = "auto"; | |
| if (i != k._lastHeight) { | |
| k._lastHeight = i; | |
| l.style.height = i + "px"; | |
| l.style.overflowY = (i == 64) ? "scroll" : "hidden"; | |
| l.parentNode.style.height = (i + 5) + "px" | |
| } | |
| }, _keystroke: function (o) { | |
| var i = this; | |
| var n = i._chatInput; | |
| var k = i._panelId; | |
| var j = n.getDOM(); | |
| var m = j.value.replace(/\n|\r/gim, ""); | |
| if (o.type == "keyup") { | |
| if (i.get("typedTo") == k) { | |
| var l = Liferay.Chat.Util.getCurrentTimestamp(); | |
| if (l - i._lastTypedTime > i._typingDelay) { | |
| i.send({toUserId: k, content: ""}); | |
| i._lastTypedTime = l | |
| } | |
| } | |
| i.set("typedTo", k) | |
| } | |
| if (o.keyCode == 13 && !o.shiftKey && m.length) { | |
| i._sendChat(j.value); | |
| j.value = "" | |
| } | |
| i._autoSize() | |
| }, _sendChat: function (l) { | |
| var i = this; | |
| var k = Liferay.Chat.Util.getCurrentTimestamp(); | |
| var j = i._panelId; | |
| var m = Liferay.Util.escapeHTML(l); | |
| i.send({content: l, toUserId: j}); | |
| i._updateMessageWindow({content: m, createDate: k}) | |
| }, _setPanelHTML: function () { | |
| var i = this; | |
| var k = Liferay.Chat.Util.getUserImagePath(i._panelIcon); | |
| var j = '<li class="user user_' + i._panelId + '" panelId="' + i._panelId + '"><div class="panel-trigger"><span class="trigger-name"></span><div class="typing-status"></div></div><div class="chat-panel"><div class="panel-window"><div class="panel-button minimize"></div><div class="panel-button close"></div><img alt="" class="panel-icon" src="' + k + '" /><div class="panel-title">' + i._panelTitle + '</div><div class="panel-profile">...</div><div class="panel-output"></div><div class="panel-input"><textarea></textarea></div></div></div></li>'; | |
| return j | |
| }, _updateMessageWindow: function (n) { | |
| var o = this; | |
| var i = o._chatOutput; | |
| var q = "outgoing"; | |
| var l = n.content; | |
| var j = n.incoming; | |
| var m = themeDisplay.getUserName(); | |
| if (j) { | |
| q = "incoming"; | |
| m = o._panelTitle | |
| } | |
| l = l.replace(/\n/g, "<br />"); | |
| var p = '<p class="blurb ' + q + '"><b class="name">' + m + '</b><i class="date">' + Liferay.Chat.Util.formatTime(n.createDate) + '</i><span class="text">' + l + "</span></p>"; | |
| var k = i.getDOM(); | |
| k.innerHTML += p; | |
| o._lastMessageTime = n.createDate; | |
| setTimeout(function () { | |
| k.scrollTop = k.scrollHeight - k.clientHeight | |
| }, 1) | |
| }}); | |
| Liferay.Chat.Manager = {init: function () { | |
| var i = this; | |
| i._closedChats = {}; | |
| i._notificationTimeout = 8000; | |
| i._initialRequest = true; | |
| i._chatContainer = a.one("#chatBar"); | |
| i._activePanelId = a.one("#activePanelId").val() || ""; | |
| i._portletId = a.one("#chatPortletId").val(); | |
| i._myStatus = i._chatContainer.one(".status-message"); | |
| i._soundContainer = i._chatContainer.one(".chat-sound"); | |
| i._tabsContainer = i._chatContainer.one(".chat-tabs"); | |
| i._created = Liferay.Chat.Util.getCurrentTimestamp(); | |
| i._sendTask = a.debounce(i.send, 100, i); | |
| i._sound = new SWFObject("/chat-portlet/alert.swf", "alertsound", "0", "0", "8"); | |
| i._updatePresenceTask = a.debounce(i._updatePresence, 30000, i); | |
| i._updatePresenceTask.delay(0); | |
| Liferay.Poller.addListener(i._portletId, i._onPollerUpdate, i); | |
| Liferay.bind("sessionExpired", function (j) { | |
| Liferay.Poller.removeListener(i._portletId); | |
| i._chatContainer.hide() | |
| }); | |
| i._createBuddyListPanel(); | |
| i._createSettingsPanel() | |
| }, close: function (k) { | |
| var i = this; | |
| if ((k != "buddylist") && (k != "settings")) { | |
| var j = i._panels[k]; | |
| if (j) { | |
| j.close() | |
| } | |
| } | |
| }, getContainer: function () { | |
| var i = this; | |
| return i._tabsContainer | |
| }, notify: function (k, m, j) { | |
| var i = this; | |
| if (e && e.checkPermission() === c) { | |
| var l = e.createNotification(k, m, j); | |
| l.show(); | |
| setTimeout(function () { | |
| l.cancel() | |
| }, i._notificationTimeout) | |
| } | |
| }, registerBuddyService: function (k) { | |
| var i = this; | |
| var j = k.name; | |
| var m = k.fn; | |
| var l = k.icon; | |
| i._buddyServices[j] = m; | |
| var n = i._styleSheet; | |
| if (!n) { | |
| n = new a.StyleSheet(); | |
| i._styleSheet = n | |
| } | |
| n.set(".chat-bar .buddy-services ." + j, {backgroundImage: 'url("' + l + '")'}) | |
| }, send: function (j, k) { | |
| var i = this; | |
| if (!j.updatePresence) { | |
| i._updatePresenceTask.cancel() | |
| } | |
| Liferay.Poller.submitRequest(i._portletId, j, k); | |
| i._updatePresenceTask() | |
| }, show: function (k) { | |
| var i = this; | |
| var j = i._panels[k]; | |
| if (j) { | |
| j.show() | |
| } | |
| }, toggle: function (k) { | |
| var i = this; | |
| var j = i._panels[k]; | |
| if (j) { | |
| j.toggle() | |
| } | |
| }, triggerSound: function () { | |
| var i = this; | |
| if (i._playSound) { | |
| i._sound.write(i._soundContainer.getDOM()) | |
| } | |
| }, _addChat: function (k, j) { | |
| var i = this; | |
| i._chatSessions[k] = j | |
| }, _addPanel: function (k, j) { | |
| var i = this; | |
| i._panels[k] = j; | |
| j.on("close", i._onPanelClose, i); | |
| j.on("hide", i._onPanelHide, i); | |
| j.on("show", i._onPanelShow, i) | |
| }, _createBuddyListPanel: function () { | |
| var i = this; | |
| var l = new Liferay.Chat.Panel({fromMarkup: ".chat-tabs > .buddy-list", panelId: "buddylist"}); | |
| i._addPanel("buddylist", l); | |
| var k = l.getPanel(); | |
| var j = k.one(".online-users"); | |
| var n = k.one(".search-buddies-field"); | |
| var m = new a.LiveSearch({input: n, nodes: "#chatBar .buddy-list .online-users li", data: function (o) { | |
| return o.one(".name").text() | |
| }}); | |
| n.on("focus", m.refreshIndex, m); | |
| l.on("show", function (o) { | |
| if (n.val()) { | |
| n.selectText() | |
| } | |
| }); | |
| if (j) { | |
| j.delegate("click", function (p) { | |
| var q = p.currentTarget; | |
| if (q.ancestor(".buddy-services")) { | |
| p.stopPropagation(); | |
| var o = q.getAttribute("class"); | |
| i._buddyServices[o](q.ancestor("li.user")) | |
| } else { | |
| i._createChatFromUser(q) | |
| } | |
| }, "li, .buddy-services div") | |
| } | |
| i._searchBuddiesField = n; | |
| i._liveSearch = m; | |
| i._onlineBuddies = j | |
| }, _createChatFromUser: function (k) { | |
| var i = this; | |
| var l; | |
| var n = i._buddies; | |
| var m = k; | |
| k = a.one(k); | |
| if (k) { | |
| m = k.getAttribute("userId") | |
| } | |
| if (!isNaN(Number(m))) { | |
| l = n[m]; | |
| if (l) { | |
| var j = i._chatSessions[m]; | |
| if (!j) { | |
| j = i._createChatSession(l) | |
| } | |
| j.show() | |
| } | |
| } | |
| }, _createChatSession: function (m) { | |
| var k = this; | |
| var o = m.userId; | |
| var l = new Liferay.Chat.Conversation({panelId: m.userId, panelTitle: m.fullName, panelIcon: m.portraitId, statusMessage: m.statusMessage}); | |
| k._addChat(o, l); | |
| k._addPanel(o, l); | |
| if (k._entryCache && k._entryCache[o]) { | |
| var j = k._entryCache[o]; | |
| for (var n in j) { | |
| var p = j[n]; | |
| l.update({cache: true, content: p.content, createDate: p.createDate, incoming: (p.fromUserId == o)}) | |
| } | |
| } | |
| if (m.open) { | |
| l.show() | |
| } | |
| return l | |
| }, _createSettingsPanel: function () { | |
| var i = this; | |
| var n = new Liferay.Chat.Panel({fromMarkup: ".chat-tabs > .chat-settings", panelId: "settings"}); | |
| i._addPanel("settings", n); | |
| var l = n.getPanel(); | |
| var m = l.one("#saveSettings"); | |
| i._statusMessageObj = l.one("#statusMessage"); | |
| i._onlineObj = l.one("#onlineStatus"); | |
| i._playSoundObj = l.one("#playSound"); | |
| i._showNotificationsObj = l.one("#showNotifications"); | |
| i._statusMessage = i._statusMessageObj.val() || ""; | |
| i._online = i._onlineObj.get("checked") ? 1 : 0; | |
| i._playSound = i._playSoundObj.get("checked") ? 1 : 0; | |
| if (e) { | |
| var j = i._showNotificationsObj; | |
| var o = e.checkPermission(); | |
| var k = {checked: (o === c)}; | |
| if (o === g) { | |
| k.disabled = false | |
| } | |
| j.attr(k) | |
| } | |
| m.on("click", i._updateSettings, i) | |
| }, _getSettings: function () { | |
| var i = this; | |
| return{activePanelId: i._activePanelId, online: i._online, statusMessage: i._statusMessage, playSound: i._playSound} | |
| }, _loadCache: function (m) { | |
| var s = this; | |
| if (!s._entryCache) { | |
| s._entryCache = {} | |
| } | |
| if (!s._entryIds) { | |
| s._entryIds = [0] | |
| } | |
| var k = s._entryCache; | |
| var r = s._entryIds; | |
| var j = themeDisplay.getUserId(); | |
| var o = m.length; | |
| for (var l = 0; l < o; l++) { | |
| var q = m[l]; | |
| var n = q.toUserId; | |
| if (n == j) { | |
| n = q.fromUserId | |
| } | |
| if (!k[n]) { | |
| k[n] = {} | |
| } | |
| var p = k[n]; | |
| if (q.content !== "") { | |
| p[q.entryId] = q; | |
| r.push(q.entryId) | |
| } | |
| } | |
| }, _isMessageNew: function (m, k) { | |
| var j = this; | |
| var l = m.createDate; | |
| var n = j._created; | |
| var i = j._closedChats[k] || 0; | |
| return(l > n && l > i) | |
| }, _onPanelClose: function (l) { | |
| var i = this; | |
| var j = l.target; | |
| var k = j._panelId; | |
| delete i._panels[k]; | |
| if (j instanceof Liferay.Chat.Conversation) { | |
| delete i._chatSessions[k] | |
| } | |
| i._closedChats[k] = Liferay.Chat.Util.getCurrentTimestamp(); | |
| i._activePanelId = ""; | |
| i._saveSettings() | |
| }, _onPanelHide: function (j) { | |
| var i = this; | |
| i._activePanelId = ""; | |
| i._saveSettings() | |
| }, _onPanelShow: function (m) { | |
| var j = this; | |
| var k = m.target; | |
| for (var l in j._panels) { | |
| if (j._panels[l] != k) { | |
| j._panels[l].hide() | |
| } | |
| } | |
| if (k instanceof Liferay.Chat.Conversation) { | |
| k._chatInput.focus() | |
| } | |
| j._activePanelId = k._panelId; | |
| j._saveSettings() | |
| }, _onPollerUpdate: function (k, j) { | |
| var i = this; | |
| i._updateBuddies(k.buddies); | |
| if (i._cacheLoaded) { | |
| i._updateConversations(k.entries) | |
| } | |
| if (i._initialRequest) { | |
| i._loadCache(k.entries); | |
| if (i._activePanelId.length) { | |
| var l = parseInt(i._activePanelId, 10); | |
| if (!isNaN(l)) { | |
| i._createChatFromUser(i._activePanelId) | |
| } | |
| } | |
| i._cacheLoaded = true; | |
| i._initialRequest = false; | |
| i._chatContainer.one(".chat-tabs > .buddy-list").removeClass("loading") | |
| } | |
| }, _saveSettings: function () { | |
| var i = this; | |
| i._sendTask(i._getSettings()) | |
| }, _updateBuddies: function (k) { | |
| var x = this; | |
| var w = x._searchBuddiesField; | |
| var y = w.val().toLowerCase(); | |
| var u = k || []; | |
| var t = u.length; | |
| var l = x._buddies; | |
| var j = x._chatSessions; | |
| x._onlineBuddiesCount = t; | |
| var m = [""]; | |
| for (var n = 0; n < t; n++) { | |
| var q = u[n]; | |
| var r = l[q.userId]; | |
| var v = j[q.userId]; | |
| q.isTyping = false; | |
| if (v && (!r || r.statusMessage != q.statusMessage)) { | |
| v.updateStatus(q.statusMessage) | |
| } | |
| l[q.userId] = q; | |
| var s = Liferay.Chat.Util.getUserImagePath(q.portraitId); | |
| m.push('<li class="user active" userId="' + q.userId + '"><img alt="" src="' + s + '" /><div class="name">' + q.fullName + '</div><div class="buddy-services">'); | |
| var p = x._buddyServices; | |
| for (var o in p) { | |
| m.push('<div class="' + o + '"></div>') | |
| } | |
| m.push("</div></li>") | |
| } | |
| x._onlineBuddies.html(m.join("")); | |
| if (w.test(":visible") && (y.length > 2 || w.compareTo(f.activeElement))) { | |
| x._liveSearch.refreshIndex(); | |
| x._liveSearch.fire("search", {liveSearch: {}}) | |
| } | |
| x._updateBuddyList(); | |
| x.fire("updateBuddies", k) | |
| }, _updateBuddyList: function (k) { | |
| var i = this; | |
| var j = i._panels.buddylist; | |
| var l = j.getTitle(); | |
| l = l.replace(/\(\d+\)/, "(" + i._onlineBuddiesCount + ")"); | |
| j.setTitle(l) | |
| }, _updateConversations: function (m) { | |
| var t = this; | |
| var o = m.length; | |
| var j = themeDisplay.getUserId(); | |
| var s = t._entryIds.join("|"); | |
| for (var l = 0; l < o; l++) { | |
| var r = m[l]; | |
| var q = (s.indexOf("|" + r.entryId) > -1); | |
| if (!q) { | |
| var n = r.toUserId; | |
| var k = false; | |
| if (r.fromUserId != j) { | |
| n = r.fromUserId; | |
| k = true | |
| } | |
| var p = t._buddies[n]; | |
| if (p && k) { | |
| var u = t._chatSessions[n]; | |
| if (!u && r.content && t._isMessageNew(r, n)) { | |
| u = t._createChatSession({portraitId: p.portraitId, userId: p.userId, fullName: p.fullName, statusMessage: p.statusMessage}) | |
| } | |
| if (u) { | |
| u.update({incoming: k, content: r.content, createDate: r.createDate, entryId: r.entryId, statusMessage: p.statusMessage}) | |
| } | |
| } | |
| } | |
| } | |
| t._loadCache(m) | |
| }, _updatePresence: function () { | |
| var i = this; | |
| i.send({updatePresence: true}) | |
| }, _updateSettings: function () { | |
| var i = this; | |
| var l = i._panels.settings; | |
| var k = l.getPanel(); | |
| i._statusMessage = i._statusMessageObj.val(); | |
| i._online = i._onlineObj.get("checked") ? 1 : 0; | |
| i._playSound = i._playSoundObj.get("checked") ? 1 : 0; | |
| var j = i._showNotificationsObj; | |
| if (j.attr("checked") && e && e.checkPermission() === g) { | |
| e.requestPermission(function () { | |
| var m = e.checkPermission() == c; | |
| j.attr({checked: m, disabled: m}) | |
| }) | |
| } | |
| i._activePanelId = ""; | |
| l.hide(); | |
| i._saveSettings(); | |
| k.addClass("saved"); | |
| if (i._statusMessage) { | |
| i._myStatus.html("You are <strong>" + Liferay.Util.escapeHTML(i._statusMessage) + "</strong>") | |
| } | |
| setTimeout(function () { | |
| k.removeClass("saved") | |
| }, 1500) | |
| }, _buddies: {}, _buddyServices: {}, _chatSessions: {}, _entries: [], _panels: {}, _settings: {}, _styleSheet: null}; | |
| a.augment(Liferay.Chat.Manager, a.Attribute, true); | |
| Liferay.publish("chatPortletReady", {defaultFn: a.bind(Liferay.Chat.Manager.init, Liferay.Chat.Manager), fireOnce: true}); | |
| a.on("domready", function () { | |
| Liferay.fire("chatPortletReady") | |
| }) | |
| }); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment