diff --git a/client/routes/router.coffee b/client/routes/router.coffee index 324403001f2a28195c14a585d6e844337e8a6bee..7f64da33d3c3f1e95b8207627f5928c8e3bb78f9 100644 --- a/client/routes/router.coffee +++ b/client/routes/router.coffee @@ -5,7 +5,7 @@ Router.configure waitOn: -> if Meteor.userId() - return [Meteor.subscribe('userData'), RoomManager.init()] + return [Meteor.subscribe('userData'), Meteor.subscribe('activeUsers'), RoomManager.init()] onBeforeAction: -> Session.setDefault('flexOpened', false) diff --git a/client/views/app/chatWindowDashboard.coffee b/client/views/app/chatWindowDashboard.coffee index a3755758bd17d290084b690018709ccbf39156ad..c72c2f2d80c14cef805dffee8c2c111281db179b 100644 --- a/client/views/app/chatWindowDashboard.coffee +++ b/client/views/app/chatWindowDashboard.coffee @@ -1,47 +1,61 @@ # @TODO bug com o botão para "rolar até o fim" (novas mensagens) quando há uma mensagem com texto que gere rolagem horizontal Template.chatWindowDashboard.helpers + visible: -> + console.log 'chatWindowDashboard.helpers visible' if window.rocketDebug + return 'visible' if this._id is Session.get('openedRoom') + tAddUsers: -> + console.log 'chatWindowDashboard.helpers tAddUsers' if window.rocketDebug return t('chatWindowDashboard.Add_users') tQuickSearch: -> + console.log 'chatWindowDashboard.helpers tQuickSearch' if window.rocketDebug return t('chatWindowDashboard.Quick_Search') favorite: -> - console.log 'chatWindowDashboard.favorite' if window.rocketDebug + console.log 'chatWindowDashboard.helpers favorite' if window.rocketDebug sub = ChatSubscription.findOne { rid: this._id } return 'icon-star favorite-room' if sub?.f? and sub.f return 'icon-star-empty' messages: -> - console.log 'chatWindowDashboard.messages' if window.rocketDebug + console.log 'chatWindowDashboard.helpers messages' if window.rocketDebug window.lastMessageWindow[this._id] = undefined window.lastMessageWindowHistory[this._id] = undefined return ChatMessage.find { rid: this._id }, { sort: { ts: 1 } } messagesHistory: -> + console.log 'chatWindowDashboard.helpers messagesHistory' if window.rocketDebug return ChatMessageHistory.find { rid: this._id }, { sort: { ts: 1 } } hasMore: -> + console.log 'chatWindowDashboard.helpers hasMore' if window.rocketDebug return RoomHistoryManager.hasMore this._id isLoading: -> + console.log 'chatWindowDashboard.helpers isLoading' if window.rocketDebug return 'btn-loading' if RoomHistoryManager.isLoading this._id windowId: -> - console.log 'chatWindowDashboard.windowId' if window.rocketDebug + console.log 'chatWindowDashboard.helpers windowId' if window.rocketDebug return "chat-window-#{this._id}" + roomContainerId: -> + console.log 'chatWindowDashboard.helpers roomContainerId' if window.rocketDebug + return "room-container-#{this._id}" + showTyping: -> - console.log 'chatWindowDashboard.showTyping' if window.rocketDebug + console.log 'chatWindowDashboard.helpers showTyping' if window.rocketDebug return this.t is 't' typing: -> - console.log 'chatWindowDashboard.typing' if window.rocketDebug + console.log 'chatWindowDashboard.helpers typing' if window.rocketDebug return this.u._id isnt Meteor.userId() usersTyping: -> + console.log 'chatWindowDashboard.helpers usersTyping' if window.rocketDebug messages = ChatMessage.find { rid: this._id }, { sort: { ts: 1 } } usernames = [] selfTyping = false @@ -74,6 +88,7 @@ Template.chatWindowDashboard.helpers } messageInfo: (from) -> + console.log 'chatWindowDashboard.helpers messageInfo' if window.rocketDebug collection = ChatMessage if from is 'history' @@ -92,7 +107,7 @@ Template.chatWindowDashboard.helpers } roomName: -> - console.log 'chatWindowDashboard.roomName' if window.rocketDebug + console.log 'chatWindowDashboard.helpers roomName' if window.rocketDebug roomData = Session.get('roomData' + this._id) return '' unless roomData @@ -102,7 +117,7 @@ Template.chatWindowDashboard.helpers return roomData.name roomTypeIcon: -> - console.log 'chatWindowDashboard.roomType' if window.rocketDebug + console.log 'chatWindowDashboard.helpers roomTypeIcon' if window.rocketDebug roomData = Session.get('roomData' + this._id) return '' unless roomData return 'icon-hash' if roomData.t is 'c' @@ -110,7 +125,7 @@ Template.chatWindowDashboard.helpers return 'icon-at' + roomData.name if roomData.t is 'p' # @TODO review userData: -> - console.log 'chatWindowDashboard.userData' if window.rocketDebug + console.log 'chatWindowDashboard.helpers userData' if window.rocketDebug roomData = Session.get('roomData' + this._id) return {} unless roomData @@ -128,6 +143,7 @@ Template.chatWindowDashboard.helpers return userData autocompleteSettingsAddUser: -> + console.log 'chatWindowDashboard.helpers autocompleteSettingsAddUser' if window.rocketDebug return { limit: 10 # inputDelay: 300 @@ -146,6 +162,7 @@ Template.chatWindowDashboard.helpers } autocompleteSettingsRoomSearch: -> + console.log 'chatWindowDashboard.helpers autocompleteSettingsRoomSearch' if window.rocketDebug return { limit: 10 # inputDelay: 300 @@ -164,36 +181,45 @@ Template.chatWindowDashboard.helpers } isChannel: -> + console.log 'chatWindowDashboard.helpers isChannel' if window.rocketDebug roomData = Session.get('roomData' + this._id) return '' unless roomData return roomData.t is 'c' canAddUser: -> + console.log 'chatWindowDashboard.helpers canAddUser' if window.rocketDebug roomData = Session.get('roomData' + this._id) return '' unless roomData return roomData.t in ['p', 'c'] and roomData.u?._id is Meteor.userId() canEditName: -> + console.log 'chatWindowDashboard.helpers canEditName' if window.rocketDebug roomData = Session.get('roomData' + this._id) return '' unless roomData return roomData.u?._id is Meteor.userId() and roomData.t in ['c', 'p'] roomNameEdit: -> + console.log 'chatWindowDashboard.helpers roomNameEdit' if window.rocketDebug return Session.get('roomData' + this._id)?.name editingTitle: -> + console.log 'chatWindowDashboard.helpers editingTitle' if window.rocketDebug return 'hidden' if Session.get('editRoomTitle') showEditingTitle: -> + console.log 'chatWindowDashboard.helpers showEditingTitle' if window.rocketDebug return 'hidden' if not Session.get('editRoomTitle') flexOpened: -> + console.log 'chatWindowDashboard.helpers flexOpened' if window.rocketDebug return 'opened' if Session.equals('flexOpened', true) arrowPosition: -> + console.log 'chatWindowDashboard.helpers arrowPosition' if window.rocketDebug return 'left' unless Session.equals('flexOpened', true) phoneNumber: -> + console.log 'chatWindowDashboard.helpers phoneNumber' if window.rocketDebug return '' unless this.phoneNumber if this.phoneNumber.length > 10 return "(#{this.phoneNumber.substr(0,2)}) #{this.phoneNumber.substr(2,5)}-#{this.phoneNumber.substr(7)}" @@ -201,16 +227,19 @@ Template.chatWindowDashboard.helpers return "(#{this.phoneNumber.substr(0,2)}) #{this.phoneNumber.substr(2,4)}-#{this.phoneNumber.substr(6)}" isGroupChat: -> + console.log 'chatWindowDashboard.helpers isGroupChat' if window.rocketDebug room = ChatRoom.findOne(this._id, { reactive: false }) return room?.t in ['c', 'p'] userActiveByUsername: (username) -> + console.log 'chatWindowDashboard.helpers userActiveByUsername' if window.rocketDebug status = Session.get 'user_' + username + '_status' if status in ['online', 'away', 'busy'] return {username: username, status: status} return roomUsers: -> + console.log 'chatWindowDashboard.helpers roomUsers' if window.rocketDebug room = ChatRoom.findOne(this._id, { reactive: false }) ret = _id: this._id @@ -221,6 +250,7 @@ Template.chatWindowDashboard.helpers return ret flexUserInfo: -> + console.log 'chatWindowDashboard.helpers flexUserInfo' if window.rocketDebug username = Session.get('showUserInfo') userData = { @@ -235,12 +265,14 @@ Template.chatWindowDashboard.helpers return userData seeAll: -> + console.log 'chatWindowDashboard.helpers seeAll' if window.rocketDebug if Template.instance().showUsersOffline.get() return t('chatWindowDashboard.See_only_online') else return t('chatWindowDashboard.See_all') getPupupConfig: -> + console.log 'chatWindowDashboard.helpers getPupupConfig' if window.rocketDebug template = Template.instance() return { getInput: -> @@ -410,12 +442,12 @@ Template.chatWindowDashboard.events instance.showUsersOffline.set(!instance.showUsersOffline.get()) Template.chatWindowDashboard.onCreated -> + console.log 'chatWindowDashboard.onCreated' if window.rocketDebug this.scrollOnBottom = true this.showUsersOffline = new ReactiveVar false - this.subscribe("activeUsers") - Template.chatWindowDashboard.onRendered -> + console.log 'chatWindowDashboard.onRendered' if window.rocketDebug FlexTab.check() ChatMessages.init() @@ -424,6 +456,7 @@ Template.chatWindowDashboard.onRendered -> $.data(this.firstNode, 'renderedAt', new Date) renameRoom = (rid, name) -> + console.log 'chatWindowDashboard renameRoom' if window.rocketDebug if Session.get('roomData' + rid).name == name Session.set('editRoomTitle', false) return false @@ -437,6 +470,7 @@ renameRoom = (rid, name) -> toastr.error error.reason toggleAddUser = -> + console.log 'chatWindowDashboard toggleAddUser' if window.rocketDebug btn = $('.add-user') $('.add-user-search').toggleClass('show-search') if $('i', btn).hasClass('icon-plus') diff --git a/client/views/app/chatWindowDashboard.html b/client/views/app/chatWindowDashboard.html index c4e683d9966c301581de6bcae3a915744c22a759..23334288a0d6c078af4a80f230969d3c8a661404 100644 --- a/client/views/app/chatWindowDashboard.html +++ b/client/views/app/chatWindowDashboard.html @@ -1,14 +1,14 @@ <template name="chatWindowDashboard"> - <section class="messages-container" id="{{windowId}}"> - - <head class="fixed-title"> - <div> - <div class="burger"> - <i></i> - <i></i> - <i></i> - </div> - <h2> + <section class="room-container" id="{{roomContainerId}}"> + <section class="messages-container" id="{{windowId}}"> + <head class="fixed-title"> + <div> + <div class="burger"> + <i></i> + <i></i> + <i></i> + </div> + <h2> <a href="#favorite" class="toggle-favorite"><i class="{{favorite}}"></i></a> <i class="{{roomTypeIcon}}"></i> <span class="room-title {{editingTitle}}">{{roomName}}</span> @@ -17,182 +17,183 @@ <a href="#edit" class="edit-room-title"><i class="icon-pencil"></i></a> {{/if}} </h2> - </div> - </head> - <div class="messages-box"> - <div class="wrapper"> - <ul> - {{#if hasMore}} - <li class="load-more"> - <button class="button secondary load-more {{isLoading}}">{{_ "general.Load_more"}}</button> - </li> - {{else}} - <li class="chat-begin"> - <span>{{_ "chatWindowDashboard.Start_of_conversation"}}</span> - </li> - {{/if}} - {{#each messagesHistory}} - {{#unless showTyping}} - {{#with messageInfo 'history'}} - {{> chatMessageDashboard data=.. single=single dateSeparator=newDay}} - {{/with}} - {{/unless}} - {{/each}} - {{#with messages}} - {{#each .}} + </div> + </head> + <div class="messages-box"> + <div class="wrapper"> + <ul> + {{#if hasMore}} + <li class="load-more"> + <button class="button secondary load-more {{isLoading}}">{{_ "general.Load_more"}}</button> + </li> + {{else}} + <li class="chat-begin"> + <span>{{_ "chatWindowDashboard.Start_of_conversation"}}</span> + </li> + {{/if}} + {{#each messagesHistory}} {{#unless showTyping}} - {{#with messageInfo}} - {{> chatMessageDashboard data=.. scroll="true" single=single dateSeparator=newDay}} + {{#with messageInfo 'history'}} + {{> chatMessageDashboard data=.. single=single dateSeparator=newDay}} {{/with}} {{/unless}} {{/each}} - {{/with}} - </ul> - </div> - <div class="new-message not"> - <i class="icon-down-big"></i> - <span>{{_ "chatWindowDashboard.New_messages"}}</span> - </div> - </div> - <footer class="footer"> - <form class="message-form" method="post" action="/"> - <div> - {{> messagePopupConfig getPupupConfig}} - <textarea dir="auto" name="msg" class="input-message"></textarea> - <i class="icon-paper-plane" title="{{_ "chatWindowDashboard.Send_Message"}}"></i> + {{#with messages}} + {{#each .}} + {{#unless showTyping}} + {{#with messageInfo}} + {{> chatMessageDashboard data=.. scroll="true" single=single dateSeparator=newDay}} + {{/with}} + {{/unless}} + {{/each}} + {{/with}} + </ul> </div> - <div class="users-typing"> - {{#with usersTyping}} - <strong>{{users}}</strong> - {{#if multi}} - {{#if selfTyping}} - {{_ "chatWindowDashboard.are_also_typing"}} - {{else}} - {{_ "chatWindowDashboard.are_typing"}} - {{/if}} - {{else}} - {{#if selfTyping}} - {{_ "chatWindowDashboard.is_also_typing"}} + <div class="new-message not"> + <i class="icon-down-big"></i> + <span>{{_ "chatWindowDashboard.New_messages"}}</span> + </div> + </div> + <footer class="footer"> + <form class="message-form" method="post" action="/"> + <div> + {{> messagePopupConfig getPupupConfig}} + <textarea dir="auto" name="msg" class="input-message"></textarea> + <i class="icon-paper-plane" title="{{_ "chatWindowDashboard.Send_Message"}}"></i> + </div> + <div class="users-typing"> + {{#with usersTyping}} + <strong>{{users}}</strong> + {{#if multi}} + {{#if selfTyping}} + {{_ "chatWindowDashboard.are_also_typing"}} + {{else}} + {{_ "chatWindowDashboard.are_typing"}} + {{/if}} {{else}} - {{_ "chatWindowDashboard.is_typing"}} + {{#if selfTyping}} + {{_ "chatWindowDashboard.is_also_typing"}} + {{else}} + {{_ "chatWindowDashboard.is_typing"}} + {{/if}} {{/if}} - {{/if}} - {{/with}} - </div> - <div class="formatting-tips" aria-hidden="true" dir="auto"> - <b>*bold*</b> - <i>_italics_</i> - ~<strike>strike</strike>~ - <code class="inline">`inline code`</code> - <code class="inline">```âŽmultiâŽlineâŽ```</code> - <q>>quote</q> - </div> - </form> - </footer> - </section> - <section class="flex-tab"> - <div class="control"> - <button class="more"><span class="arrow {{arrowPosition}}"></span></button> - {{#if canAddUser}} - <div class="search-form"> - <div class="input-line search"> - {{> inputAutocomplete settings=autocompleteSettingsAddUser id="user-add-search" class="search" placeholder=tAddUsers}} - <i class="icon-plus"></i> + {{/with}} </div> - </div> - {{else}} - {{#if isChannel}} - <form class="search-form" role="form"> + <div class="formatting-tips" aria-hidden="true" dir="auto"> + <b>*bold*</b> + <i>_italics_</i> ~ + <strike>strike</strike>~ + <code class="inline">`inline code`</code> + <code class="inline">```âŽmultiâŽlineâŽ```</code> + <q>>quote</q> + </div> + </form> + </footer> + </section> + <section class="flex-tab"> + <div class="control"> + <button class="more"><span class="arrow {{arrowPosition}}"></span></button> + {{#if canAddUser}} + <div class="search-form"> <div class="input-line search"> - {{> inputAutocomplete settings=autocompleteSettingsRoomSearch id="room-search" class="search" placeholder=tQuickSearch autocomplete="off"}} - <i class="icon-search"></i> + {{> inputAutocomplete settings=autocompleteSettingsAddUser id="user-add-search" class="search" placeholder=tAddUsers}} + <i class="icon-plus"></i> </div> - </form> - {{/if}} - {{/if}} - </div> - {{#if flexOpened}} - <div class="content"> - {{#if isGroupChat}} - <div class="list-view{{#if $.Session.get 'showUserInfo'}} -hidden{{/if}}"> - {{#with roomUsers}} - <div class="status"> - <h2>{{_ "chatWindowDashboard.Members_List"}}</h2> {{!-- - <p> - {{{_ "chatWindowDashboard.Showing_online_users" total_online=totalOnline total=total}}} - <button class="see-all">{{seeAll}}</button> - </p>--}} + </div> + {{else}} + {{#if isChannel}} + <form class="search-form" role="form"> + <div class="input-line search"> + {{> inputAutocomplete settings=autocompleteSettingsRoomSearch id="room-search" class="search" placeholder=tQuickSearch autocomplete="off"}} + <i class="icon-search"></i> </div> - <ul class='list cf_ lines'> - {{#each users}} - {{#with userActiveByUsername .}} - <li class='user-image user-card-room status-{{status}}'> - <a data-username="{{username}}" tabindex="0" title="{{username}}"> + </form> + {{/if}} + {{/if}} + </div> + {{#if flexOpened}} + <div class="content"> + {{#if isGroupChat}} + <div class="list-view{{#if $.Session.get 'showUserInfo'}} -hidden{{/if}}"> + {{#with roomUsers}} + <div class="status"> + <h2>{{_ "chatWindowDashboard.Members_List"}}</h2> {{!-- + <p> + {{{_ "chatWindowDashboard.Showing_online_users" total_online=totalOnline total=total}}} + <button class="see-all">{{seeAll}}</button> + </p>--}} + </div> + <ul class='list cf_ lines'> + {{#each users}} + {{#with userActiveByUsername .}} + <li class='user-image user-card-room status-{{status}}'> + <a data-username="{{username}}" tabindex="0" title="{{username}}"> {{> avatar username=username}} <p>{{username}}</p> </a> - </li> - {{/with}} - {{/each}} - </ul> - {{/with}} - </div> - <div class="user-view animated{{#unless $.Session.get 'showUserInfo'}} -hidden{{/unless}}"> - {{#with flexUserInfo}} - <div class="about cf_"> - <div class="thumb"> - {{> avatar username=username}} - </div> - <div class="info"> - <h3>{{username}}</h3> - {{#if contactCode}} - <div class="contact-code">{{_ "general.Contact"}} {{contactCode}}</div> - {{/if}} - {{!-- - {{#each emails}} - <p><i class="icon-mail"></i> {{address}}</p> + </li> + {{/with}} {{/each}} - {{#if phone}} - <p><i class="icon-phone"></i> {{phone}}</p> - {{/if}} - --}} - </div> - </div> - <nav> - <button class='button secondary back'><span>{{_ "chatWindowDashboard.View_All"}} <i class='icon-angle-right'></i></span></button> - <button class='button pvt-msg'><span><i class='icon-chat'></i> {{_ "general.Conversation"}}</span></button> - </nav> - {{/with}} - </div> - {{else}} - <div class="user-view"> - {{#with userData}} - <div class="about cf_"> - <div class="thumb"> - {{> avatar username=username}} + </ul> + {{/with}} + </div> + <div class="user-view animated{{#unless $.Session.get 'showUserInfo'}} -hidden{{/unless}}"> + {{#with flexUserInfo}} + <div class="about cf_"> + <div class="thumb"> + {{> avatar username=username}} + </div> + <div class="info"> + <h3>{{username}}</h3> + {{#if contactCode}} + <div class="contact-code">{{_ "general.Contact"}} {{contactCode}}</div> + {{/if}} + {{!-- + {{#each emails}} + <p><i class="icon-mail"></i> {{address}}</p> + {{/each}} + {{#if phone}} + <p><i class="icon-phone"></i> {{phone}}</p> + {{/if}} + --}} + </div> </div> - <div class="info"> - <h3>{{username}}</h3> - {{#if contactCode}} - <div class="contact-code">{{_ "general.contact"}} {{contactCode}}</div> - {{/if}} - {{!-- - {{#each emails}} - <p><i class="icon-mail"></i> {{address}}</p> - {{/each}} - {{#each phone}} - <p><i class="icon-phone"></i> {{phoneNumber}}</p> - {{/each}} - --}} + <nav> + <button class='button secondary back'><span>{{_ "chatWindowDashboard.View_All"}} <i class='icon-angle-right'></i></span></button> + <button class='button pvt-msg'><span><i class='icon-chat'></i> {{_ "general.Conversation"}}</span></button> + </nav> + {{/with}} + </div> + {{else}} + <div class="user-view"> + {{#with userData}} + <div class="about cf_"> + <div class="thumb"> + {{> avatar username=username}} + </div> + <div class="info"> + <h3>{{username}}</h3> + {{#if contactCode}} + <div class="contact-code">{{_ "general.contact"}} {{contactCode}}</div> + {{/if}} + {{!-- + {{#each emails}} + <p><i class="icon-mail"></i> {{address}}</p> + {{/each}} + {{#each phone}} + <p><i class="icon-phone"></i> {{phoneNumber}}</p> + {{/each}} + --}} + </div> </div> - </div> - {{/with}} - </div> - {{/if}} - </div> - {{/if}} - <footer> - {{> social}} - </footer> + {{/with}} + </div> + {{/if}} + </div> + {{/if}} + <footer> + {{> social}} + </footer> + </section> </section> </template>