From 663ccd58edde2e2f5b3843a75f87206b2c7a3ddb Mon Sep 17 00:00:00 2001 From: Ryan Wyllie Date: Thu, 15 Nov 2018 13:52:44 +0800 Subject: [PATCH] MDL-63303 message: fix bugs in message drawer part 3 * Fix bug for newly created conversations being added to overview page * Fixed bug with use enter to send preference not updating correctly * Fix unit tests * Fix race condition loading new messages while conversation resetting * Fix ordering and rendering of messages with same timestamp * Fix missing privacy info in get_conversation web service * Fix linting errors * Improve bulk message rendering --- message/amd/build/message_drawer.min.js | 2 +- .../message_drawer_view_conversation.min.js | 2 +- ...ge_drawer_view_conversation_patcher.min.js | 2 +- ...e_drawer_view_conversation_renderer.min.js | 2 +- ...wer_view_conversation_state_manager.min.js | 2 +- ...essage_drawer_view_overview_section.min.js | 2 +- message/amd/src/message_drawer.js | 12 +++++ message/amd/src/message_drawer_helper.js | 2 + message/amd/src/message_drawer_router.js | 2 + .../src/message_drawer_view_conversation.js | 45 ++++++++++--------- ...essage_drawer_view_conversation_patcher.js | 6 ++- ...ssage_drawer_view_conversation_renderer.js | 43 ++++++++---------- ..._drawer_view_conversation_state_manager.js | 4 ++ .../message_drawer_view_overview_section.js | 5 ++- message/amd/src/message_repository.js | 8 ++++ message/classes/api.php | 7 ++- message/externallib.php | 9 ++-- message/tests/externallib_test.php | 8 ++-- 18 files changed, 102 insertions(+), 61 deletions(-) diff --git a/message/amd/build/message_drawer.min.js b/message/amd/build/message_drawer.min.js index 205fb9e457f..3f571647bb5 100644 --- a/message/amd/build/message_drawer.min.js +++ b/message/amd/build/message_drawer.min.js @@ -1 +1 @@ -define(["jquery","core/custom_interaction_events","core/pubsub","core_message/message_drawer_view_contact","core_message/message_drawer_view_contacts","core_message/message_drawer_view_conversation","core_message/message_drawer_view_group_info","core_message/message_drawer_view_overview","core_message/message_drawer_view_search","core_message/message_drawer_view_settings","core_message/message_drawer_router","core_message/message_drawer_routes","core_message/message_drawer_events"],function(a,b,c,d,e,f,g,h,i,j,k,l,m){var n={VIEW_CONTACT:'[data-region="view-contact"]',VIEW_CONTACTS:'[data-region="view-contacts"]',VIEW_CONVERSATION:'[data-region="view-conversation"]',VIEW_GROUP_INFO:'[data-region="view-group-info"]',VIEW_OVERVIEW:'[data-region="view-overview"]',VIEW_SEARCH:'[data-region="view-search"]',VIEW_SETTINGS:'[data-region="view-settings"]',ROUTES:"[data-route]",ROUTES_BACK:"[data-route-back]",HEADER_CONTAINER:'[data-region="header-container"]',BODY_CONTAINER:'[data-region="body-container"]',FOOTER_CONTAINER:'[data-region="footer-container"]'},o=function(a,b){var c=a.children(),d=c.filter(n.HEADER_CONTAINER).find(b),e=c.filter(n.BODY_CONTAINER).find(b),f=c.filter(n.FOOTER_CONTAINER).find(b),g=[d,e,f].filter(function(a){return a.length});return g},p=[[l.VIEW_CONTACT,n.VIEW_CONTACT,d.show,d.description],[l.VIEW_CONTACTS,n.VIEW_CONTACTS,e.show,e.description],[l.VIEW_CONVERSATION,n.VIEW_CONVERSATION,f.show,f.description],[l.VIEW_GROUP_INFO,n.VIEW_GROUP_INFO,g.show,g.description],[l.VIEW_OVERVIEW,n.VIEW_OVERVIEW,h.show,h.description],[l.VIEW_SEARCH,n.VIEW_SEARCH,i.show,i.description],[l.VIEW_SETTINGS,n.VIEW_SETTINGS,j.show,j.description]],q=function(a){p.forEach(function(b){k.add(b[0],o(a,b[1]),b[2],b[3])})},r=function(a){a.attr("data-shown")||(k.go(l.VIEW_OVERVIEW),a.attr("data-shown",!0)),a.removeClass("hidden"),a.attr("aria-expanded",!0),a.attr("aria-hidden",!1)},s=function(a){a.addClass("hidden"),a.attr("aria-expanded",!1),a.attr("aria-hidden",!0)},t=function(a){return!a.hasClass("hidden")},u=function(d){b.define(d,[b.events.activate]);var e=/^data-route-param-?(\d*)$/;d.on(b.events.activate,n.ROUTES,function(b,c){for(var d=a(b.target).closest(n.ROUTES),f=d.attr("data-route"),g=[],h=0;h1?c[1]:0,g=d.length>1?d[1]:0;return f1?c[1]:0,g=d.length>1?d[1]:0;return fc?a.messages=a.messages.slice(1):G(!0),E(d+c),a}).then(function(a){var c=a.members.filter(function(a){return a.id==b.id});c.length<1&&(a.members=a.members.concat([b]));var d=K(a,b.id);return d=m.setLoadingMembers(d,!1),d=m.setLoadingMessages(d,!1),u(d).then(function(){return a})}).then(function(){return P(a)})["catch"](function(a){var b=m.setLoadingMembers(q,!1);b=m.setLoadingMessages(b,!1),u(b),e.exception(a)})},M=function(a,b,c,d){var f=a.members.filter(function(a){return a.id==b.id});f.length<1&&(a.members=a.members.concat([b]));var g=K(a,b.id);g=m.setLoadingMembers(g,!1),g=m.setLoadingMessages(g,!0);var h=a.messages.length;return u(g).then(function(){if(hb?a.messages=a.messages.slice(1):G(!0),a):a}).then(function(a){var b=a.members.filter(function(a){return!(a.id in q.members)}),c=m.addMembers(q,b);return c=m.addMessages(c,a.messages),c=m.setLoadingMessages(c,!1),u(c).then(function(){return a})})["catch"](function(a){var b=m.setLoadingMessages(q,!1);throw u(b),a})},O=function(a,b){return function(){var c=q.messages,d=c.length?c[c.length-1]:null;if(d){for(var e=[],f=c.length-1;f>=0;f--){var g=c[f];if(g.timeCreated!==d.timeCreated)break;e.push(g.id)}return N(a,0,0,b,e,d.timeCreated).then(function(b){return b.messages.length?(t.restart(),P(a)):b})}}},P=function(a){var b=q.loggedInUserId;return h.markAllConversationMessagesAsRead(b,a).then(function(){var b=m.markMessagesAsRead(q,q.messages);return f.publish(i.CONVERSATION_READ,a),u(b)})},Q=function(a){return ca(a).then(function(){var b=m.addPendingBlockUsersById(q,[a]);return u(b)})},R=function(a){var b=m.setLoadingConfirmAction(q,!0);return u(b).then(function(){return h.blockUser(q.loggedInUserId,a)}).then(function(b){var c=m.addMembers(q,[b]);return c=m.removePendingBlockUsersById(c,[a]),c=m.setLoadingConfirmAction(c,!1),f.publish(i.CONTACT_BLOCKED,a),u(c)})},S=function(a){return ca(a).then(function(){var b=m.addPendingUnblockUsersById(q,[a]);return u(b)})},T=function(a){var b=m.setLoadingConfirmAction(q,!0);return u(b).then(function(){return h.unblockUser(q.loggedInUserId,a)}).then(function(b){var c=m.addMembers(q,[b]);return c=m.removePendingUnblockUsersById(c,[a]),c=m.setLoadingConfirmAction(c,!1),f.publish(i.CONTACT_UNBLOCKED,a),u(c)})},U=function(a){return ca(a).then(function(){var b=m.addPendingRemoveContactsById(q,[a]);return u(b)})},V=function(a){var b=m.setLoadingConfirmAction(q,!0);return u(b).then(function(){return h.deleteContacts(q.loggedInUserId,[a])}).then(function(b){var c=m.addMembers(q,b);return c=m.removePendingRemoveContactsById(c,[a]),c=m.setLoadingConfirmAction(c,!1),f.publish(i.CONTACT_REMOVED,a),u(c)})},W=function(a){return ca(a).then(function(){var b=m.addPendingAddContactsById(q,[a]);return u(b)})},X=function(a){var b=m.setLoadingConfirmAction(q,!0);return u(b).then(function(){return h.createContactRequest(q.loggedInUserId,a)}).then(function(a){if(!a.request)throw new Error(a.warnings[0].message);return a.request}).then(function(b){var c=m.removePendingAddContactsById(q,[a]);return c=m.addContactRequests(c,[b]),c=m.setLoadingConfirmAction(c,!1),u(c)})},Y=function(){var a=q.loggedInUserId,b=q.id;return h.setFavouriteConversations(a,[b]).then(function(){var a=m.setIsFavourite(q,!0);return u(a)}).then(function(){return f.publish(i.CONVERSATION_SET_FAVOURITE,I(q))})},Z=function(){var a=q.loggedInUserId,b=q.id;return h.unsetFavouriteConversations(a,[b]).then(function(){var a=m.setIsFavourite(q,!1);return u(a)}).then(function(){return f.publish(i.CONVERSATION_UNSET_FAVOURITE,I(q))})},$=function(a){var b=q.selectedMessageIds;return ca(a).then(function(){var a=m.addPendingDeleteMessagesById(q,b);return u(a)})},_=function(){var a=q.pendingDeleteMessageIds,b=m.setLoadingConfirmAction(q,!0);return u(b).then(function(){return h.deleteMessages(q.loggedInUserId,a)}).then(function(){var b=m.removeMessagesById(q,a);b=m.removePendingDeleteMessagesById(b,a),b=m.removeSelectedMessagesById(b,a),b=m.setLoadingConfirmAction(b,!1);var c=q.messages[q.messages.length-1],d=b.messages.length?b.messages[b.messages.length-1]:null;if(d&&d.id!=c.id){var e=I(b);f.publish(i.CONVERSATION_NEW_LAST_MESSAGE,e)}else b.messages.length||f.publish(i.CONVERSATION_DELETED,b.id);return u(b)})},aa=function(a){return ca(a).then(function(){var a=m.setPendingDeleteConversation(q,!0);return u(a)})},ba=function(){var a=m.setLoadingConfirmAction(q,!0);return u(a).then(function(){return h.deleteCoversation(q.loggedInUserId,A())}).then(function(){var a=m.removeMessages(q,q.messages);return a=m.removeSelectedMessagesById(a,q.selectedMessageIds),a=m.setPendingDeleteConversation(a,!1),a=m.setLoadingConfirmAction(a,!1),f.publish(i.CONVERSATION_DELETED,a.id),u(a)})},ca=function(a){var b=q.pendingDeleteMessageIds,c=m.removePendingAddContactsById(q,[a]);return c=m.removePendingRemoveContactsById(c,[a]),c=m.removePendingUnblockUsersById(c,[a]),c=m.removePendingBlockUsersById(c,[a]),c=m.removePendingDeleteMessagesById(c,b),c=m.setPendingDeleteConversation(c,!1),u(c)},da=function(a){var b=q.loggedInUserId,c=q.members[a].contactrequests.filter(function(a){return a.requesteduserid==b}),d=c[0],e=m.setLoadingConfirmAction(q,!0);return u(e).then(function(){return h.acceptContactRequest(a,b)}).then(function(a){var b=m.removeContactRequests(q,[d]);return b=m.addMembers(q,[a]),b=m.setLoadingConfirmAction(b,!1),u(b)}).then(function(){f.publish(i.CONTACT_ADDED,q.members[a]),f.publish(i.CONTACT_REQUEST_ACCEPTED,d)})},ea=function(a){var b=q.loggedInUserId,c=q.members[b].contactrequests.filter(function(b){return b.userid==a}),d=c[0],e=m.setLoadingConfirmAction(q,!0);return u(e).then(function(){return h.declineContactRequest(a,b)}).then(function(a){var b=m.removeContactRequests(q,[d]);return b=m.addMembers(q,[a]),b=m.setLoadingConfirmAction(b,!1),u(b)}).then(function(){f.publish(i.CONTACT_REQUEST_DECLINED,d)})},fa=function(a,b){var c=m.setSendingMessage(q,!0),d=null;return u(c).then(function(){if(a||q.type!=z.PRIVATE)return h.sendMessageToConversation(a,b);var c=A();return h.sendMessageToUser(c,b).then(function(a){return d=parseInt(a.conversationid,10),a})}).then(function(a){var b=m.addMessages(q,[a]);b=m.setSendingMessage(b,!1);var c=I(b);return b.id||(b=m.setId(b,d),c.id=d,va(d),f.publish(i.CONVERSATION_CREATED,c)),u(b).then(function(){f.publish(i.CONVERSATION_NEW_LAST_MESSAGE,c)})})["catch"](function(a){var b=m.setSendingMessage(q,!1);u(b),e.exception(a)})},ga=function(a){var b=q;return b=q.selectedMessageIds.indexOf(a)>-1?m.removeSelectedMessagesById(q,[a]):m.addSelectedMessagesById(q,[a]),u(b)},ha=function(){return ca(A()).then(function(){var a=m.removeSelectedMessagesById(q,q.selectedMessageIds);return u(a)})},ia=function(a,b,c){return function(d){var e=k.buildPatch(q,d);return l.render(a,b,c,e).then(function(){q=d,d.id&&(p[d.id]={state:d,messagesOffset:D(),loadedAllMessages:F()})})}},ja=function(a){return function(b,c){q.loadingConfirmAction||a(A())["catch"](function(a){var b=m.setLoadingConfirmAction(q,!1);u(b),e.exception(a)}),c.originalEvent.preventDefault()}},ka=function(b,c){var d=a(b.target),e=d.closest(y.FOOTER_CONTAINER),f=e.find(y.MESSAGE_TEXT_AREA),g=f.val().trim();""!==g&&fa(q.id,g),c.originalEvent.preventDefault()},la=function(b,c){var d=window.getSelection(),f=a(b.target);if(""==d.toString()&&!f.is("a")){var g=f.closest(y.MESSAGE),h=parseInt(g.attr("data-message-id"),10);ga(h)["catch"](e.exception),c.originalEvent.preventDefault()}},ma=function(a,b){ha()["catch"](e.exception),b.originalEvent.preventDefault()},na=function(a,b){var c=A(),d=q.members[c];n.go(o.VIEW_CONTACT,d),b.originalEvent.preventDefault()},oa=function(a,b){Y()["catch"](e.exception),b.originalEvent.preventDefault()},pa=function(a,b){Z()["catch"](e.exception),b.originalEvent.preventDefault()},qa=function(a,b){n.go(o.VIEW_GROUP_INFO,{id:q.id,name:q.name,subname:q.subname,imageUrl:q.imageUrl,totalMemberCount:q.totalMemberCount},q.loggedInUserId),b.originalEvent.preventDefault()},ra=[[y.ACTION_REQUEST_BLOCK,ja(Q)],[y.ACTION_REQUEST_UNBLOCK,ja(S)],[y.ACTION_REQUEST_ADD_CONTACT,ja(W)],[y.ACTION_REQUEST_REMOVE_CONTACT,ja(U)],[y.ACTION_REQUEST_DELETE_CONVERSATION,ja(aa)],[y.ACTION_CANCEL_EDIT_MODE,ma],[y.ACTION_VIEW_CONTACT,na],[y.ACTION_VIEW_GROUP_INFO,qa],[y.ACTION_CONFIRM_FAVOURITE,oa],[y.ACTION_CONFIRM_UNFAVOURITE,pa]],sa=[[y.ACTION_CANCEL_CONFIRM,ja(ca)],[y.ACTION_CONFIRM_BLOCK,ja(R)],[y.ACTION_CONFIRM_UNBLOCK,ja(T)],[y.ACTION_CONFIRM_ADD_CONTACT,ja(X)],[y.ACTION_CONFIRM_REMOVE_CONTACT,ja(V)],[y.ACTION_CONFIRM_DELETE_SELECTED_MESSAGES,ja(_)],[y.ACTION_CONFIRM_DELETE_CONVERSATION,ja(ba)],[y.ACTION_REQUEST_ADD_CONTACT,ja(W)],[y.ACTION_ACCEPT_CONTACT_REQUEST,ja(da)],[y.ACTION_DECLINE_CONTACT_REQUEST,ja(ea)],[y.MESSAGE,la]],ta=[[y.SEND_MESSAGE_BUTTON,ka],[y.ACTION_REQUEST_DELETE_SELECTED_MESSAGES,ja($)],[y.ACTION_REQUEST_ADD_CONTACT,ja(W)],[y.ACTION_REQUEST_UNBLOCK,ja(S)]],ua=function(a,c,g){var h=!1,j=H(c);b.init(g),d.define(a,[d.events.activate]),d.define(c,[d.events.activate]),d.define(g,[d.events.activate,d.events.enter]),d.define(j,[d.events.scrollTop,d.events.scrollLock]),j.on(d.events.scrollTop,function(a,b){var c=Object.keys(q.members).length>1;if(!h&&!F()&&c){var d=m.setLoadingMessages(q,!0);u(d).then(function(){return N(q.id,w,D(),v,[])}).then(function(){h=!1,E(D()+w)})["catch"](function(a){h=!1,e.exception(a)})}b.originalEvent.preventDefault()}),ra.forEach(function(b){var c=b[0],e=b[1];a.on(d.events.activate,c,e)}),sa.forEach(function(a){var b=a[0],e=a[1];c.on(d.events.activate,b,e)}),ta.forEach(function(a){var b=a[0],c=a[1];g.on(d.events.activate,b,c)}),g.on(d.events.enter,y.MESSAGE_TEXT_AREA,function(a,b){var c=g.attr("data-enter-to-send");1==c&&ka(a,b)}),f.subscribe(i.ROUTE_CHANGED,function(a){t&&(a.route==o.VIEW_CONVERSATION?t.restart():t.stop())}),f.subscribe(i.PREFERENCES_UPDATED,function(a){var b=a.filter(function(a){return"message_entertosend"==a.type}),c=b.length?b[0]:null;c&&g.attr("data-enter-to-send",c.value)})},va=function(a){t&&t.stop(),t=new c(O(a,v),function(a){return a?2*a:x}),t.start()},wa=function(a,b,c){var d=c.id,e=parseInt(a.attr("data-midnight"),10),f=m.buildInitialState(e,d,b);return q||(q=f),t&&t.stop(),u(f)},xa=function(a,b,c){return wa(a,null,b).then(function(){return h.getConversationBetweenUsers(b.id,c,!0,!0,0,0,w,0,v).then(function(c){return za(a,c,b)})["catch"](function(){return J(b,c)})})},ya=function(a,b,c){var d=null;return b in p&&(d=p[b]),wa(a,b,c).then(function(){if(d){var a=d.state;return a=m.setLoadingMessages(a,!1),a=m.setLoadingMembers(a,!1),E(d.messagesOffset),G(d.loadedAllMessages),u(a)}return L(b,c,w,0,v)}).then(function(){return va(b)})},za=function(a,b,c){var d=null;return b.id in p&&(d=p[b.id]),wa(a,b.id,c).then(function(){if(d){var a=d.state;return a=m.setLoadingMessages(a,!1),a=m.setLoadingMembers(a,!1),E(d.messagesOffset),G(d.loadedAllMessages),u(a)}return M(b,c,w,v)}).then(function(){return va(b.id)})},Aa=function(b,c,d,f,g,h){var i=null,k=null;f&&null!==f&&"object"==typeof f?(i=f,k=parseInt(i.id,10)):(i=null,k=parseInt(f,10),k=isNaN(k)?null:k),!k&&g&&h&&(k=B(h)),c.attr("data-init")||(u=ia(b,c,d),ua(b,c,d),c.attr("data-init",!0));var l=!q||q.id!=k||h&&h!=A();if(l){var m=null,n=C(c);return m=i?za(c,i,n,h):k?ya(c,k,n,h):xa(c,n,h),m.then(function(){b.find(j.SELECTORS.CAN_RECEIVE_FOCUS).first().focus()})["catch"](e.exception)}if(q.type==z.PRIVATE&&g){var o=A();switch(g){case"block":return Q(o);case"unblock":return S(o);case"add-contact":return W(o);case"remove-contact":return U(o)}}return a.Deferred().resolve().promise()},Ba=function(){return g.get_string("messagedrawerviewconversation","core_message",q.name)};return{show:Aa,description:Ba}}); \ No newline at end of file +define(["jquery","core/auto_rows","core/backoff_timer","core/custom_interaction_events","core/notification","core/pubsub","core/str","core_message/message_repository","core_message/message_drawer_events","core_message/message_drawer_view_conversation_constants","core_message/message_drawer_view_conversation_patcher","core_message/message_drawer_view_conversation_renderer","core_message/message_drawer_view_conversation_state_manager","core_message/message_drawer_router","core_message/message_drawer_routes"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var p={},q=null,r=!1,s=0,t=null,u=!0,v=null,w=j.NEWEST_MESSAGES_FIRST,x=j.LOAD_MESSAGE_LIMIT,y=j.INITIAL_NEW_MESSAGE_POLL_TIMEOUT,z=j.SELECTORS,A=j.CONVERSATION_TYPES,B=function(){if(!q||q.type!=A.PRIVATE)return null;var a=q.loggedInUserId,b=Object.keys(q.members).filter(function(b){return a!=b});return b.length?b[0]:null},C=function(a){return Object.keys(p).reduce(function(b,c){if(!b){var d=p[c].state;d.type==A.PRIVATE&&a in d.members&&(b=d.id)}return b},null)},D=function(a){return{id:parseInt(a.attr("data-user-id"),10),contactrequests:[]}},E=function(){return s},F=function(a){s=a,p[q.id].messagesOffset=a},G=function(){return r},H=function(a){r=a,p[q.id].loadedAllMessages=a},I=function(a){return a.find(z.MESSAGES_CONTAINER)},J=function(b){return{id:b.id,name:b.name,subname:b.subname,imageUrl:b.imageUrl,isFavourite:b.isFavourite,type:b.type,totalMemberCount:b.totalMemberCount,loggedInUserId:b.loggedInUserId,messages:b.messages.map(function(b){return a.extend({},b)}),members:Object.keys(b.members).reduce(function(c,d){return c[d]=a.extend({},b.members[d]),c[d].contactrequests=b.members[d].contactrequests.map(function(b){return a.extend({},b)}),c},{})}},K=function(a,b){var c=a.id,d=m.setLoadingMembers(q,!0);return d=m.setLoadingMessages(d,!0),v(d).then(function(){return h.getMemberInfo(c,[b],!0,!0)}).then(function(a){if(a.length)return a[0];throw new Error("Unable to load other user profile")}).then(function(b){var c=m.addMembers(q,[b,a]);return c=m.setLoadingMembers(c,!1),c=m.setLoadingMessages(c,!1),c=m.setName(c,b.fullname),c=m.setType(c,1),c=m.setImageUrl(c,b.profileimageurl),c=m.setTotalMemberCount(c,2),v(c).then(function(){return b})})["catch"](function(a){var b=m.setLoadingMembers(q,!1);v(b),e.exception(a)})},L=function(a,b){var c=a.members.filter(function(a){return a.id!=b}),d=c.length?c[0]:null,e=a.name,f=a.imageurl;a.type==A.PRIVATE&&(e=e||d?d.fullname:"",f=f||d?d.profileimageurl:"");var g=m.addMembers(q,a.members);return g=m.setName(g,e),g=m.setSubname(g,a.subname),g=m.setType(g,a.type),g=m.setImageUrl(g,f),g=m.setTotalMemberCount(g,a.membercount),g=m.setIsFavourite(g,a.isfavourite),g=m.addMessages(g,a.messages)},M=function(a,b,c,d,f){var g=b.id,i=m.setLoadingMembers(q,!0);return i=m.setLoadingMessages(i,!0),v(i).then(function(){return h.getConversation(g,a,!0,!0,0,0,c+1,d,f)}).then(function(a){return a.messages.length>c?a.messages=a.messages.slice(1):H(!0),F(d+c),a}).then(function(a){var c=a.members.filter(function(a){return a.id==b.id});c.length<1&&(a.members=a.members.concat([b]));var d=L(a,b.id);return d=m.setLoadingMembers(d,!1),d=m.setLoadingMessages(d,!1),v(d).then(function(){return a})}).then(function(){return Q(a)})["catch"](function(a){var b=m.setLoadingMembers(q,!1);b=m.setLoadingMessages(b,!1),v(b),e.exception(a)})},N=function(a,b,c,d){var f=a.members.filter(function(a){return a.id==b.id});f.length<1&&(a.members=a.members.concat([b]));var g=L(a,b.id);g=m.setLoadingMembers(g,!1),g=m.setLoadingMessages(g,!0);var h=a.messages.length;return v(g).then(function(){if(hb?a.messages=a.messages.slice(0,-1):H(!0),a):a}).then(function(a){var b=a.members.filter(function(a){return!(a.id in q.members)}),c=m.addMembers(q,b);return c=m.addMessages(c,a.messages),c=m.setLoadingMessages(c,!1),v(c).then(function(){return a})})["catch"](function(a){var b=m.setLoadingMessages(q,!1);throw v(b),a})},P=function(b,c){return function(){var d=q.messages,e=d.length?d[d.length-1]:null;if(e&&!u){for(var f=[],g=d.length-1;g>=0;g--){var h=d[g];if(h.timeCreated!==e.timeCreated)break;f.push(h.id)}return O(b,0,0,c,f,e.timeCreated).then(function(a){return a.messages.length?(t.restart(),Q(b)):a})}return a.Deferred().resolve().promise()}},Q=function(a){var b=q.loggedInUserId;return h.markAllConversationMessagesAsRead(b,a).then(function(){var b=m.markMessagesAsRead(q,q.messages);return f.publish(i.CONVERSATION_READ,a),v(b)})},R=function(a){return da(a).then(function(){var b=m.addPendingBlockUsersById(q,[a]);return v(b)})},S=function(a){var b=m.setLoadingConfirmAction(q,!0);return v(b).then(function(){return h.blockUser(q.loggedInUserId,a)}).then(function(b){var c=m.addMembers(q,[b]);return c=m.removePendingBlockUsersById(c,[a]),c=m.setLoadingConfirmAction(c,!1),f.publish(i.CONTACT_BLOCKED,a),v(c)})},T=function(a){return da(a).then(function(){var b=m.addPendingUnblockUsersById(q,[a]);return v(b)})},U=function(a){var b=m.setLoadingConfirmAction(q,!0);return v(b).then(function(){return h.unblockUser(q.loggedInUserId,a)}).then(function(b){var c=m.addMembers(q,[b]);return c=m.removePendingUnblockUsersById(c,[a]),c=m.setLoadingConfirmAction(c,!1),f.publish(i.CONTACT_UNBLOCKED,a),v(c)})},V=function(a){return da(a).then(function(){var b=m.addPendingRemoveContactsById(q,[a]);return v(b)})},W=function(a){var b=m.setLoadingConfirmAction(q,!0);return v(b).then(function(){return h.deleteContacts(q.loggedInUserId,[a])}).then(function(b){var c=m.addMembers(q,b);return c=m.removePendingRemoveContactsById(c,[a]),c=m.setLoadingConfirmAction(c,!1),f.publish(i.CONTACT_REMOVED,a),v(c)})},X=function(a){return da(a).then(function(){var b=m.addPendingAddContactsById(q,[a]);return v(b)})},Y=function(a){var b=m.setLoadingConfirmAction(q,!0);return v(b).then(function(){return h.createContactRequest(q.loggedInUserId,a)}).then(function(a){if(!a.request)throw new Error(a.warnings[0].message);return a.request}).then(function(b){var c=m.removePendingAddContactsById(q,[a]);return c=m.addContactRequests(c,[b]),c=m.setLoadingConfirmAction(c,!1),v(c)})},Z=function(){var a=q.loggedInUserId,b=q.id;return h.setFavouriteConversations(a,[b]).then(function(){var a=m.setIsFavourite(q,!0);return v(a)}).then(function(){return f.publish(i.CONVERSATION_SET_FAVOURITE,J(q))})},$=function(){var a=q.loggedInUserId,b=q.id;return h.unsetFavouriteConversations(a,[b]).then(function(){var a=m.setIsFavourite(q,!1);return v(a)}).then(function(){return f.publish(i.CONVERSATION_UNSET_FAVOURITE,J(q))})},_=function(a){var b=q.selectedMessageIds;return da(a).then(function(){var a=m.addPendingDeleteMessagesById(q,b);return v(a)})},aa=function(){var a=q.pendingDeleteMessageIds,b=m.setLoadingConfirmAction(q,!0);return v(b).then(function(){return h.deleteMessages(q.loggedInUserId,a)}).then(function(){var b=m.removeMessagesById(q,a);b=m.removePendingDeleteMessagesById(b,a),b=m.removeSelectedMessagesById(b,a),b=m.setLoadingConfirmAction(b,!1);var c=q.messages[q.messages.length-1],d=b.messages.length?b.messages[b.messages.length-1]:null;if(d&&d.id!=c.id){var e=J(b);f.publish(i.CONVERSATION_NEW_LAST_MESSAGE,e)}else b.messages.length||f.publish(i.CONVERSATION_DELETED,b.id);return v(b)})},ba=function(a){return da(a).then(function(){var a=m.setPendingDeleteConversation(q,!0);return v(a)})},ca=function(){var a=m.setLoadingConfirmAction(q,!0);return v(a).then(function(){return h.deleteCoversation(q.loggedInUserId,B())}).then(function(){var a=m.removeMessages(q,q.messages);return a=m.removeSelectedMessagesById(a,q.selectedMessageIds),a=m.setPendingDeleteConversation(a,!1),a=m.setLoadingConfirmAction(a,!1),f.publish(i.CONVERSATION_DELETED,a.id),v(a)})},da=function(a){var b=q.pendingDeleteMessageIds,c=m.removePendingAddContactsById(q,[a]);return c=m.removePendingRemoveContactsById(c,[a]),c=m.removePendingUnblockUsersById(c,[a]),c=m.removePendingBlockUsersById(c,[a]),c=m.removePendingDeleteMessagesById(c,b),c=m.setPendingDeleteConversation(c,!1),v(c)},ea=function(a){var b=q.loggedInUserId,c=q.members[a].contactrequests.filter(function(a){return a.requesteduserid==b}),d=c[0],e=m.setLoadingConfirmAction(q,!0);return v(e).then(function(){return h.acceptContactRequest(a,b)}).then(function(a){var b=m.removeContactRequests(q,[d]);return b=m.addMembers(q,[a]),b=m.setLoadingConfirmAction(b,!1),v(b)}).then(function(){f.publish(i.CONTACT_ADDED,q.members[a]),f.publish(i.CONTACT_REQUEST_ACCEPTED,d)})},fa=function(a){var b=q.loggedInUserId,c=q.members[b].contactrequests.filter(function(b){return b.userid==a}),d=c[0],e=m.setLoadingConfirmAction(q,!0);return v(e).then(function(){return h.declineContactRequest(a,b)}).then(function(a){var b=m.removeContactRequests(q,[d]);return b=m.addMembers(q,[a]),b=m.setLoadingConfirmAction(b,!1),v(b)}).then(function(){f.publish(i.CONTACT_REQUEST_DECLINED,d)})},ga=function(a,b){var c=m.setSendingMessage(q,!0),d=null;return v(c).then(function(){if(a||q.type!=A.PRIVATE)return h.sendMessageToConversation(a,b);var c=B();return h.sendMessageToUser(c,b).then(function(a){return d=parseInt(a.conversationid,10),a})}).then(function(a){var b=m.addMessages(q,[a]);b=m.setSendingMessage(b,!1);var c=J(b);return b.id||(b=m.setId(b,d),c.id=d,wa(d),f.publish(i.CONVERSATION_CREATED,c)),v(b).then(function(){f.publish(i.CONVERSATION_NEW_LAST_MESSAGE,c)})})["catch"](function(a){var b=m.setSendingMessage(q,!1);v(b),e.exception(a)})},ha=function(a){var b=q;return b=q.selectedMessageIds.indexOf(a)>-1?m.removeSelectedMessagesById(q,[a]):m.addSelectedMessagesById(q,[a]),v(b)},ia=function(){return da(B()).then(function(){var a=m.removeSelectedMessagesById(q,q.selectedMessageIds);return v(a)})},ja=function(a,b,c){return function(d){var e=k.buildPatch(q,d);return l.render(a,b,c,e).then(function(){q=d,d.id&&(p[d.id]={state:d,messagesOffset:E(),loadedAllMessages:G()})})}},ka=function(a){return function(b,c){q.loadingConfirmAction||a(B())["catch"](function(a){var b=m.setLoadingConfirmAction(q,!1);v(b),e.exception(a)}),c.originalEvent.preventDefault()}},la=function(b,c){var d=a(b.target),e=d.closest(z.FOOTER_CONTAINER),f=e.find(z.MESSAGE_TEXT_AREA),g=f.val().trim();""!==g&&ga(q.id,g),c.originalEvent.preventDefault()},ma=function(b,c){var d=window.getSelection(),f=a(b.target);if(""==d.toString()&&!f.is("a")){var g=f.closest(z.MESSAGE),h=parseInt(g.attr("data-message-id"),10);ha(h)["catch"](e.exception),c.originalEvent.preventDefault()}},na=function(a,b){ia()["catch"](e.exception),b.originalEvent.preventDefault()},oa=function(a,b){var c=B(),d=q.members[c];n.go(o.VIEW_CONTACT,d),b.originalEvent.preventDefault()},pa=function(a,b){Z()["catch"](e.exception),b.originalEvent.preventDefault()},qa=function(a,b){$()["catch"](e.exception),b.originalEvent.preventDefault()},ra=function(a,b){n.go(o.VIEW_GROUP_INFO,{id:q.id,name:q.name,subname:q.subname,imageUrl:q.imageUrl,totalMemberCount:q.totalMemberCount},q.loggedInUserId),b.originalEvent.preventDefault()},sa=[[z.ACTION_REQUEST_BLOCK,ka(R)],[z.ACTION_REQUEST_UNBLOCK,ka(T)],[z.ACTION_REQUEST_ADD_CONTACT,ka(X)],[z.ACTION_REQUEST_REMOVE_CONTACT,ka(V)],[z.ACTION_REQUEST_DELETE_CONVERSATION,ka(ba)],[z.ACTION_CANCEL_EDIT_MODE,na],[z.ACTION_VIEW_CONTACT,oa],[z.ACTION_VIEW_GROUP_INFO,ra],[z.ACTION_CONFIRM_FAVOURITE,pa],[z.ACTION_CONFIRM_UNFAVOURITE,qa]],ta=[[z.ACTION_CANCEL_CONFIRM,ka(da)],[z.ACTION_CONFIRM_BLOCK,ka(S)],[z.ACTION_CONFIRM_UNBLOCK,ka(U)],[z.ACTION_CONFIRM_ADD_CONTACT,ka(Y)],[z.ACTION_CONFIRM_REMOVE_CONTACT,ka(W)],[z.ACTION_CONFIRM_DELETE_SELECTED_MESSAGES,ka(aa)],[z.ACTION_CONFIRM_DELETE_CONVERSATION,ka(ca)],[z.ACTION_REQUEST_ADD_CONTACT,ka(X)],[z.ACTION_ACCEPT_CONTACT_REQUEST,ka(ea)],[z.ACTION_DECLINE_CONTACT_REQUEST,ka(fa)],[z.MESSAGE,ma]],ua=[[z.SEND_MESSAGE_BUTTON,la],[z.ACTION_REQUEST_DELETE_SELECTED_MESSAGES,ka(_)],[z.ACTION_REQUEST_ADD_CONTACT,ka(X)],[z.ACTION_REQUEST_UNBLOCK,ka(T)]],va=function(a,c,g){var h=!1,j=I(c);b.init(g),d.define(a,[d.events.activate]),d.define(c,[d.events.activate]),d.define(g,[d.events.activate,d.events.enter]),d.define(j,[d.events.scrollTop,d.events.scrollLock]),j.on(d.events.scrollTop,function(a,b){var c=Object.keys(q.members).length>1;if(!u&&!h&&!G()&&c){h=!0;var d=m.setLoadingMessages(q,!0);v(d).then(function(){return O(q.id,x,E(),w,[])}).then(function(){h=!1,F(E()+x)})["catch"](function(a){h=!1,e.exception(a)})}b.originalEvent.preventDefault()}),sa.forEach(function(b){var c=b[0],e=b[1];a.on(d.events.activate,c,e)}),ta.forEach(function(a){var b=a[0],e=a[1];c.on(d.events.activate,b,e)}),ua.forEach(function(a){var b=a[0],c=a[1];g.on(d.events.activate,b,c)}),g.on(d.events.enter,z.MESSAGE_TEXT_AREA,function(a,b){var c=g.attr("data-enter-to-send");c&&"false"!=c&&"0"!=c&&la(a,b)}),f.subscribe(i.ROUTE_CHANGED,function(a){t&&a.route!=o.VIEW_CONVERSATION&&t.stop()})},wa=function(a){t&&t.stop(),t=new c(P(a,w),function(a){return a?2*a:y}),t.start()},xa=function(a,b,c){var d=c.id,e=parseInt(a.attr("data-midnight"),10),f=m.buildInitialState(e,d,b);return q||(q=f),t&&t.stop(),v(f)},ya=function(a,b,c){return xa(a,null,b).then(function(){return h.getConversationBetweenUsers(b.id,c,!0,!0,0,0,x,0,w).then(function(c){return Aa(a,c,b)})["catch"](function(){return K(b,c)})})},za=function(a,b,c){var d=null;return b in p&&(d=p[b]),xa(a,b,c).then(function(){if(d){var a=d.state;return a=m.setLoadingMessages(a,!1),a=m.setLoadingMembers(a,!1),F(d.messagesOffset),H(d.loadedAllMessages),v(a)}return M(b,c,x,0,w)}).then(function(){return wa(b)})},Aa=function(a,b,c){var d=null;return b.id in p&&(d=p[b.id]),xa(a,b.id,c).then(function(){if(d){var a=d.state;return a=m.setLoadingMessages(a,!1),a=m.setLoadingMembers(a,!1),F(d.messagesOffset),H(d.loadedAllMessages),v(a)}return N(b,c,x,w)}).then(function(){return wa(b.id)})},Ba=function(b,c,d,f,g,h){var i=null,k=null;f&&null!==f&&"object"==typeof f?(i=f,k=parseInt(i.id,10)):(i=null,k=parseInt(f,10),k=isNaN(k)?null:k),!k&&g&&h&&(k=C(h)),c.attr("data-init")||(v=ja(b,c,d),va(b,c,d),c.attr("data-init",!0));var l=!q||q.id!=k||h&&h!=B();if(l){u=!0;var m=null,n=D(c);return m=i?Aa(c,i,n,h):k?za(c,k,n,h):ya(c,n,h),m.then(function(){u=!1,b.find(j.SELECTORS.CAN_RECEIVE_FOCUS).first().focus()})["catch"](function(a){u=!1,e.exception(a)})}if(wa(k),q.type==A.PRIVATE&&g){var o=B();switch(g){case"block":return R(o);case"unblock":return T(o);case"add-contact":return X(o);case"remove-contact":return V(o)}}return a.Deferred().resolve().promise()},Ca=function(){return g.get_string("messagedrawerviewconversation","core_message",q.name)};return{show:Ba,description:Ca}}); \ No newline at end of file diff --git a/message/amd/build/message_drawer_view_conversation_patcher.min.js b/message/amd/build/message_drawer_view_conversation_patcher.min.js index 103c32c3443..9eaab1da45a 100644 --- a/message/amd/build/message_drawer_view_conversation_patcher.min.js +++ b/message/amd/build/message_drawer_view_conversation_patcher.min.js @@ -1 +1 @@ -define(["jquery","core/user_date","core_message/message_drawer_view_conversation_constants"],function(a,b,c){var d=function(a,c){var d=a.reduce(function(a,d){var e=b.getUserMidnightForTimestamp(d.timeCreated,c);return a.hasOwnProperty(e)?a[e].push(d):a[e]=[d],a},{});return Object.keys(d).map(function(a){return{timestamp:a,messages:d[a]}})},e=function(a,b,c){b=b.slice();var d=[],e=[],f=[];return a.forEach(function(a){for(var d=!1,g=0;g0,i=g.length>0;return d||e?h&&i?null:h||!i||e.iscontact?!d&&e?e.iscontact?"contact":null:!e&&d?d.iscontact?"non-contact":null:d.iscontact&&!e.iscontact?i?"pending-contact":"non-contact":!d.iscontact&&e.iscontact?"contact":null:"pending-contact":null},B=function(a,b){return!(a.loadingConfirmAction||!b.loadingConfirmAction)||!(a.loadingConfirmAction&&!b.loadingConfirmAction)&&null},C=function(a,b){var c=a.selectedMessageIds.length>0,d=b.selectedMessageIds.length>0,e=a.messages.length!=b.messages.length;return!(c||!d)||!(c&&!d)&&(!(!c||!e)||null)},D=function(a,b){var c=a.selectedMessageIds,d=b.selectedMessageIds;if(g(c,d))return null;var f=e(c,d,function(a,b){return a==b});return{count:d.length,add:f.missingFromA,remove:f.missingFromB}},E=function(a){return Object.keys(a.members).reduce(function(b,c){return c==a.loggedInUserId||b||(b=a.members[c]),b},null)},F=function(a,b){var c=b.contactrequests.filter(function(b){return b.userid==a||b.requesteduserid}),d=c.length>0;return b.requirescontact&&!b.iscontact&&!d},G=function(a,b){var c=E(a),d=E(b),e=a.messages.length>0,f=b.messages.length>0,g=b.loggedInUserId,h=c&&F(g,c),i=d&&F(g,d),j=t(a,b),k=j===!1;if(!a.hasTriedToLoadMessages&&!b.hasTriedToLoadMessages)return null;if(!c&&!d)return null;if(!c&&i)return{show:!0,hasMessages:f,user:d};if(k&&i)return{show:!0,hasMessages:f,user:d};if(a.hasTriedToLoadMessages&&b.hasTriedToLoadMessages){if(!h&&i)return{show:!0,hasMessages:f,user:d};if(h&&!i)return{show:!1,hasMessages:f}}return!a.hasTriedToLoadMessages&&b.hasTriedToLoadMessages&&i?{show:!0,hasMessages:f,user:d}:a.hasTriedToLoadMessages&&!b.hasTriedToLoadMessages&&h?{show:!1,hasMessages:e}:null},H=function(a,b){var c=E(a),d=E(b);return c||d?c&&!d?!c.isblocked&&null:!c&&d?!!d.isblocked||null:!(c.isblocked||!d.isblocked)||!(c.isblocked&&!d.isblocked)&&null:null},I=function(a,b){var c=E(a),d=E(b);return c||d?c&&!d?!c.canmessage||null:!c&&d?!d.canmessage||null:!(!c.canmessage&&d.canmessage)&&(!(!c.canmessage||d.canmessage)||null):null},J=function(a,b){var c=o(a,b),d=C(a,b),e=G(a,b),f=H(a,b),g=I(a,b),h=null!==e?e.show&&e.hasMessages:null,i=E(b),j=function(a,c){if(a)return c;if(null!==a&&!a){if(!i)return{type:"content"};if(i.isblocked)return{type:"unblock"};if(b.messages.length&&F(b.loggedInUserId,i))return{type:"add-contact",user:i};if(!i.canmessage||i.requirescontact&&!i.iscontact)return{type:"unable-to-message"}}return null};if(null===c&&null===d&&null===e&&null===f)return null;for(var k=[[c,{type:"placeholder"}],[d,{type:"edit-mode"}],[g,{type:"unable-to-message"}],[f,{type:"unblock"}],[h,{type:"add-contact",user:i}]],l=0;l0,i=g.length>0,j=a.messages.length>0,k=a.messages.length>0;return h||!i||e.iscontact||k?!(d&&!d.iscontact&&i&&e.iscontact)&&(!(h&&!i)&&(!(!j&&k)&&null)):e.fullname},N=function(b,d){var e={all:{reset:L,conversation:j,scrollToMessage:m,loadingMembers:n,loadingFirstMessages:o,loadingMessages:p,sendingMessage:q,confirmDeleteSelectedMessages:v,inEditMode:C,selectedMessages:D,isFavourite:z}};e[c.CONVERSATION_TYPES.PRIVATE]={header:k,footer:J,confirmBlockUser:r,confirmUnblockUser:s,confirmAddContact:t,confirmRemoveContact:u,confirmContactRequest:x,confirmDeleteConversation:w,isBlocked:y,isContact:A,loadingConfirmAction:B,requireAddContact:G,contactRequestSent:M},e[c.CONVERSATION_TYPES.PUBLIC]={header:l,footer:K};var f=a.extend({},e.all);return d.type&&d.type in e&&(f=a.extend(f,e[d.type])),Object.keys(f).reduce(function(a,c){var e=f[c],g=e(b,d);return null!==g&&(a[c]=g),a},{})};return{buildPatch:N}}); \ No newline at end of file +define(["jquery","core/user_date","core_message/message_drawer_view_conversation_constants"],function(a,b,c){var d=function(a,c){var d=a.reduce(function(a,d){var e=b.getUserMidnightForTimestamp(d.timeCreated,c);return a.hasOwnProperty(e)?a[e].push(d):a[e]=[d],a},{});return Object.keys(d).map(function(a){return{timestamp:a,messages:d[a]}})},e=function(a,b,c){b=b.slice();var d=[],e=[],f=[];return a.forEach(function(a){for(var d=!1,g=0;g0,i=g.length>0;return d||e?h&&i?null:h||!i||e.iscontact?!d&&e?e.iscontact?"contact":null:!e&&d?d.iscontact?"non-contact":null:d.iscontact&&!e.iscontact?i?"pending-contact":"non-contact":!d.iscontact&&e.iscontact?"contact":null:"pending-contact":null},B=function(a,b){return!(a.loadingConfirmAction||!b.loadingConfirmAction)||!(a.loadingConfirmAction&&!b.loadingConfirmAction)&&null},C=function(a,b){var c=a.selectedMessageIds.length>0,d=b.selectedMessageIds.length>0,e=a.messages.length!=b.messages.length;return!(c||!d)||!(c&&!d)&&(!(!c||!e)||null)},D=function(a,b){var c=a.selectedMessageIds,d=b.selectedMessageIds;if(g(c,d))return null;var f=e(c,d,function(a,b){return a==b});return{count:d.length,add:f.missingFromA,remove:f.missingFromB}},E=function(a){return Object.keys(a.members).reduce(function(b,c){return c==a.loggedInUserId||b||(b=a.members[c]),b},null)},F=function(a,b){var c=b.contactrequests.filter(function(b){return b.userid==a||b.requesteduserid}),d=c.length>0;return b.requirescontact&&!b.iscontact&&!d},G=function(a,b){var c=E(a),d=E(b),e=a.messages.length>0,f=b.messages.length>0,g=b.loggedInUserId,h=c&&F(g,c),i=d&&F(g,d),j=t(a,b),k=j===!1;if(!a.hasTriedToLoadMessages&&!b.hasTriedToLoadMessages)return null;if(!c&&!d)return null;if(!c&&i)return{show:!0,hasMessages:f,user:d};if(k&&i)return{show:!0,hasMessages:f,user:d};if(a.hasTriedToLoadMessages&&b.hasTriedToLoadMessages){if(!h&&i)return{show:!0,hasMessages:f,user:d};if(h&&!i)return{show:!1,hasMessages:f}}return!a.hasTriedToLoadMessages&&b.hasTriedToLoadMessages&&i?{show:!0,hasMessages:f,user:d}:a.hasTriedToLoadMessages&&!b.hasTriedToLoadMessages&&h?{show:!1,hasMessages:e}:null},H=function(a,b){var c=E(a),d=E(b);return c||d?c&&!d?!c.isblocked&&null:!c&&d?!!d.isblocked||null:!(c.isblocked||!d.isblocked)||!(c.isblocked&&!d.isblocked)&&null:null},I=function(a,b){var c=E(a),d=E(b);return c||d?c&&!d?!c.canmessage||null:!c&&d?!d.canmessage||null:!(!c.canmessage&&d.canmessage)&&(!(!c.canmessage||d.canmessage)||null):null},J=function(a,b){var c=o(a,b),d=C(a,b),e=G(a,b),f=H(a,b),g=I(a,b),h=null!==e?e.show&&e.hasMessages:null,i=E(b),j=function(a,c){if(a)return c;if(null!==a&&!a){if(!i)return{type:"content"};if(i.isblocked)return{type:"unblock"};if(b.messages.length&&F(b.loggedInUserId,i))return{type:"add-contact",user:i};if(!i.canmessage||i.requirescontact&&!i.iscontact)return{type:"unable-to-message"}}return null};if(null===c&&null===d&&null===e&&null===f)return null;for(var k=[[c,{type:"placeholder"}],[d,{type:"edit-mode"}],[g,{type:"unable-to-message"}],[f,{type:"unblock"}],[h,{type:"add-contact",user:i}]],l=0;l0,i=g.length>0,j=a.messages.length>0,k=a.messages.length>0;return h||!i||e.iscontact||k?!(d&&!d.iscontact&&i&&e.iscontact)&&(!(h&&!i)&&(!(!j&&k)&&null)):e.fullname},N=function(b,d){var e={all:{reset:L,conversation:j,scrollToMessage:m,loadingMembers:n,loadingFirstMessages:o,loadingMessages:p,sendingMessage:q,confirmDeleteSelectedMessages:v,inEditMode:C,selectedMessages:D,isFavourite:z}};e[c.CONVERSATION_TYPES.PRIVATE]={header:k,footer:J,confirmBlockUser:r,confirmUnblockUser:s,confirmAddContact:t,confirmRemoveContact:u,confirmContactRequest:x,confirmDeleteConversation:w,isBlocked:y,isContact:A,loadingConfirmAction:B,requireAddContact:G,contactRequestSent:M},e[c.CONVERSATION_TYPES.PUBLIC]={header:l,footer:K};var f=a.extend({},e.all);return d.type&&d.type in e&&(f=a.extend(f,e[d.type])),Object.keys(f).reduce(function(a,c){var e=f[c],g=e(b,d);return null!==g&&(a[c]=g),a},{})};return{buildPatch:N}}); \ No newline at end of file diff --git a/message/amd/build/message_drawer_view_conversation_renderer.min.js b/message/amd/build/message_drawer_view_conversation_renderer.min.js index bb711729e9e..16a74fe9491 100644 --- a/message/amd/build/message_drawer_view_conversation_renderer.min.js +++ b/message/amd/build/message_drawer_view_conversation_renderer.min.js @@ -1 +1 @@ -define(["jquery","core/notification","core/str","core/templates","core/user_date","core_message/message_drawer_view_conversation_constants"],function(a,b,c,d,e,f){var g=f.SELECTORS,h=f.TEMPLATES,i=f.CONVERSATION_TYPES,j=function(a){return a.find(g.CONTENT_MESSAGES_CONTAINER)},k=function(a){j(a).removeClass("hidden")},l=function(a){j(a).addClass("hidden")},m=function(a){return a.find(g.CONTACT_REQUEST_SENT_MESSAGE_CONTAINER)},n=function(a){return m(a).addClass("hidden")},o=function(a){return a.find(g.CONTENT_MESSAGES_FOOTER_CONTAINER)},p=function(a){o(a).removeClass("hidden")},q=function(a){o(a).addClass("hidden")},r=function(a){return a.find(g.CONTENT_MESSAGES_FOOTER_EDIT_MODE_CONTAINER)},s=function(a){r(a).removeClass("hidden")},t=function(a){r(a).addClass("hidden")},u=function(a){return a.find(g.PLACEHOLDER_CONTAINER)},v=function(a){u(a).removeClass("hidden")},w=function(a){u(a).addClass("hidden")},x=function(a){return a.find(g.CONTENT_MESSAGES_FOOTER_REQUIRE_CONTACT_CONTAINER)},y=function(a){x(a).removeClass("hidden")},z=function(a){x(a).addClass("hidden")},A=function(a){return a.find(g.CONTENT_MESSAGES_FOOTER_REQUIRE_UNBLOCK_CONTAINER)},B=function(a){A(a).removeClass("hidden")},C=function(a){A(a).addClass("hidden")},D=function(a){return a.find(g.CONTENT_MESSAGES_FOOTER_UNABLE_TO_MESSAGE_CONTAINER)},E=function(a){D(a).removeClass("hidden")},F=function(a){D(a).addClass("hidden")},G=function(a){N(a),Q(a),T(a)},H=function(a){q(a),t(a),w(a),z(a),C(a),F(a)},I=function(a){return a.find(g.CONTENT_PLACEHOLDER_CONTAINER)},J=function(a){I(a).removeClass("hidden")},K=function(a){I(a).addClass("hidden")},L=function(a){return a.find(g.HEADER)},M=function(a){L(a).removeClass("hidden")},N=function(a){L(a).addClass("hidden")},O=function(a){return a.find(g.HEADER_EDIT_MODE)},P=function(a){O(a).removeClass("hidden")},Q=function(a){O(a).addClass("hidden")},R=function(a){return a.find(g.HEADER_PLACEHOLDER_CONTAINER)},S=function(a){R(a).removeClass("hidden")},T=function(a){R(a).addClass("hidden")},U=function(a){return a.find(g.MESSAGE_TEXT_AREA)},V=function(a,b){var c=j(a);return c.find('[data-message-id="'+b+'"]')},W=function(a,b){var c=j(a);return c.find('[data-day-id="'+b+'"]')},X=function(a){return a.find(g.MORE_MESSAGES_LOADING_ICON_CONTAINER)},Y=function(a){X(a).removeClass("hidden")},Z=function(a){X(a).addClass("hidden")},$=function(a){a.find(g.SEND_MESSAGE_BUTTON).prop("disabled",!0),U(a).prop("disabled",!0)},_=function(a){a.find(g.SEND_MESSAGE_BUTTON).prop("disabled",!1),U(a).prop("disabled",!1)},aa=function(a){$(a),a.find(g.SEND_MESSAGE_ICON_CONTAINER).addClass("hidden"),a.find(g.LOADING_ICON_CONTAINER).removeClass("hidden")},ba=function(a){_(a),a.find(g.SEND_MESSAGE_ICON_CONTAINER).removeClass("hidden"),a.find(g.LOADING_ICON_CONTAINER).addClass("hidden")},ca=function(a){var b=U(a);b.val(""),b.focus()},da=function(a){return a.find(g.CONFIRM_DIALOGUE_CONTAINER)},ea=function(a){var b=da(a),c=b.siblings(":not(.hidden)");c.attr("aria-hidden",!0),c.attr("tabindex",-1),c.attr("data-confirm-dialogue-hidden",!0),b.removeClass("hidden")},fa=function(a){var b=da(a),c=b.siblings('[data-confirm-dialogue-hidden="true"]');c.removeAttr("aria-hidden"),c.removeAttr("tabindex"),c.removeAttr("data-confirm-dialogue-hidden"),b.addClass("hidden")},ga=function(a,b){O(a).find(g.MESSAGES_SELECTED_COUNT).text(b)},ha=function(a,b){return a.map(function(a){return{id:a.id,isread:a.isRead,fromloggedinuser:a.fromLoggedInUser,userfrom:a.userFrom,text:a.text,formattedtime:b[a.timeCreated]}})},ia=function(b,c,e,f,g){var i=j(c),k=f.map(function(a){return d.render(h.DAY,{timestamp:a.value.timestamp,messages:ha(a.value.messages,g)})});return a.when.apply(a,k).then(function(){f.forEach(function(b,d){k[d].then(function(d){if(b.before){var e=W(c,b.before.timestamp);return a(d).insertBefore(e)}return i.append(d)})["catch"](function(){})})})},ja=function(b,c,e,f,i){var j=f.map(function(a){var b=ha([a.value],i);return d.render(h.MESSAGE,b[0])});return a.when.apply(a,j).then(function(){f.forEach(function(b,d){j[d].then(function(d){if(b.before){var e=V(c,b.before.id);return a(d).insertBefore(e)}var f=W(c,b.day.timestamp),h=f.find(g.DAY_MESSAGES_CONTAINER);return h.append(d)})["catch"](function(){})})})},ka=function(a,b){b.forEach(function(b){W(a,b.timestamp).remove()})},la=function(a,b){b.forEach(function(b){V(a,b.id).remove()})},ma=function(b,d,f,g){var h=[],i=g.days.add.length>0,j=g.messages.add.length>0,k=[],l=a.Deferred().resolve({}).promise();return i&&(k=k.concat(g.days.add.reduce(function(a,b){return a.concat(b.value.messages.map(function(a){return a.timeCreated}))},[]))),j&&(k=k.concat(g.messages.add.map(function(a){return a.value.timeCreated}))),k.length&&(l=c.get_string("strftimetime24","core_langconfig").then(function(a){var b=k.map(function(b){return{timestamp:b,format:a}});return e.get(b)}).then(function(a){return k.reduce(function(b,c,d){return b[c]=a[d],b},{})})),i&&h.push(l.then(function(a){return ia(b,d,f,g.days.add,a)})),j&&h.push(l.then(function(a){return ja(b,d,f,g.messages.add,a)})),g.days.remove.length>0&&ka(d,g.days.remove),g.messages.remove.length>0&&la(d,g.messages.remove),a.when.apply(a,h)},na=function(a,b,c,e){var f=L(a),g=h.HEADER_PUBLIC;return e.type==i.PRIVATE&&(g=e.showControls?h.HEADER_PRIVATE:h.HEADER_PRIVATE_NO_CONTROLS),d.render(g,e.context).then(function(a,b){d.replaceNodeContents(f,a,b)})},oa=function(a,b,d,e){switch(H(d),e.type){case"placeholder":return v(d);case"add-contact":return c.get_strings([{key:"requirecontacttomessage",component:"core_message",param:e.user.fullname},{key:"isnotinyourcontacts",component:"core_message",param:e.user.fullname}]).then(function(a){var b=a[1],c=a[0],e=x(d);return e.find(g.TITLE).text(b),e.find(g.TEXT).text(c),y(d),a});case"edit-mode":return s(d);case"content":return p(d);case"unblock":return B(d);case"unable-to-message":return E(d)}return!0},pa=function(a,b,c,d){var e=j(b),f=V(b,d),g=f.position();if(g){var h=e.scrollTop()+g.top;e.scrollTop(h)}},qa=function(a,b,c,d){d?(N(a),S(a)):(M(a),T(a))},ra=function(a,b,c,d){d?(l(b),J(b)):(k(b),K(b))},sa=function(a,b,c,d){d?Y(b):Z(b)},ta=function(a,b,c,d){d?aa(c):(ba(c),ca(c))},ua=function(a,b,c,d,e,f,h,i){var j=da(b),k=d.map(function(a){return j.find(a)}),l=j.find(g.CONFIRM_DIALOGUE_CANCEL_BUTTON),m=j.find(g.CONFIRM_DIALOGUE_TEXT),n=j.find(g.CONFIRM_DIALOGUE_HEADER);j.find("button").addClass("hidden"),h?l.removeClass("hidden"):l.addClass("hidden"),f?(n.removeClass("hidden"),n.text(f)):(n.addClass("hidden"),n.text("")),k.forEach(function(a){a.removeClass("hidden")}),m.text(e),ea(c),ea(b),i||ea(a),j.find(g.CAN_RECEIVE_FOCUS).filter(":visible").first().focus()},va=function(a,b,c){var d=da(b),e=d.find(g.CONFIRM_DIALOGUE_CANCEL_BUTTON),f=d.find(g.CONFIRM_DIALOGUE_TEXT),h=d.find(g.CONFIRM_DIALOGUE_HEADER);return fa(b),fa(c),fa(a),d.find("button").addClass("hidden"),e.removeClass("hidden"),f.text(""),h.addClass("hidden"),h.text(""),a.find(g.CAN_RECEIVE_FOCUS).first().focus(),!0},wa=function(a,b,d,e){return e?c.get_string("blockuserconfirm","core_message",e.fullname).then(function(c){return ua(a,b,d,[g.ACTION_CONFIRM_BLOCK],c,"",!0,!1)}):va(a,b,d)},xa=function(a,b,d,e){return e?c.get_string("unblockuserconfirm","core_message",e.fullname).then(function(c){return ua(a,b,d,[g.ACTION_CONFIRM_UNBLOCK],c,"",!0,!1)}):va(a,b,d)},ya=function(a,b,d,e){return e?c.get_string("addcontactconfirm","core_message",e.fullname).then(function(c){return ua(a,b,d,[g.ACTION_CONFIRM_ADD_CONTACT],c,"",!0,!1)}):va(a,b,d)},za=function(a,b,d,e){return e?c.get_string("removecontactconfirm","core_message",e.fullname).then(function(c){return ua(a,b,d,[g.ACTION_CONFIRM_REMOVE_CONTACT],c,"",!0,!1)}):va(a,b,d)},Aa=function(a,b,d,e){return e?c.get_string("deleteselectedmessagesconfirm","core_message").then(function(c){return ua(a,b,d,[g.ACTION_CONFIRM_DELETE_SELECTED_MESSAGES],c,"",!0,!1)}):va(a,b,d)},Ba=function(a,b,d,e){return e?c.get_string("deleteallconfirm","core_message").then(function(c){return ua(a,b,d,[g.ACTION_CONFIRM_DELETE_CONVERSATION],c,"",!0,!1)}):va(a,b,d)},Ca=function(a,b,d,e){return e?c.get_string("userwouldliketocontactyou","core_message",e.fullname).then(function(c){var e=[g.ACTION_ACCEPT_CONTACT_REQUEST,g.ACTION_DECLINE_CONTACT_REQUEST];return ua(a,b,d,e,c,"",!1,!0)}):va(a,b,d)},Da=function(a,b,c,d){d?(a.find(g.ACTION_REQUEST_BLOCK).addClass("hidden"),a.find(g.ACTION_REQUEST_UNBLOCK).removeClass("hidden")):(a.find(g.ACTION_REQUEST_BLOCK).removeClass("hidden"),a.find(g.ACTION_REQUEST_UNBLOCK).addClass("hidden"))},Ea=function(a,b,c,d){d?(a.find(g.FAVOURITE_ICON_CONTAINER).removeClass("hidden"),a.find(g.ACTION_CONFIRM_FAVOURITE).addClass("hidden"),a.find(g.ACTION_CONFIRM_UNFAVOURITE).removeClass("hidden")):(a.find(g.FAVOURITE_ICON_CONTAINER).addClass("hidden"),a.find(g.ACTION_CONFIRM_FAVOURITE).removeClass("hidden"),a.find(g.ACTION_CONFIRM_UNFAVOURITE).addClass("hidden"))},Fa=function(a,b,c,d){var e=a.find(g.ACTION_REQUEST_ADD_CONTACT),f=a.find(g.ACTION_REQUEST_REMOVE_CONTACT);switch(d){case"pending-contact":e.addClass("hidden"),f.addClass("hidden");break;case"contact":e.addClass("hidden"),f.removeClass("hidden");break;case"non-contact":e.removeClass("hidden"),f.addClass("hidden")}},Ga=function(a,b,c,d){var e=da(b),f=e.find("button"),h=e.find(g.CONFIRM_DIALOGUE_BUTTON_TEXT),i=e.find(g.LOADING_ICON_CONTAINER);d?(f.prop("disabled",!0),h.addClass("hidden"),i.removeClass("hidden")):(f.prop("disabled",!1),h.removeClass("hidden"),i.addClass("hidden"))},Ha=function(a,b,c,d){var e=null;d?(e=b.find(g.MESSAGE_NOT_SELECTED),e.find(g.MESSAGE_NOT_SELECTED_ICON).removeClass("hidden"),N(a),P(a)):(e=j(b),e.find(g.MESSAGE_NOT_SELECTED_ICON).addClass("hidden"),e.find(g.MESSAGE_SELECTED_ICON).addClass("hidden"),M(a),Q(a))},Ia=function(a,b,c,d){var e=d.count>0;d.add.length&&d.add.forEach(function(a){var c=V(b,a);c.find(g.MESSAGE_NOT_SELECTED_ICON).addClass("hidden"),c.find(g.MESSAGE_SELECTED_ICON).removeClass("hidden"),c.attr("aria-checked",!0)}),d.remove.length&&d.remove.forEach(function(a){var c=V(b,a);e&&c.find(g.MESSAGE_NOT_SELECTED_ICON).removeClass("hidden"),c.find(g.MESSAGE_SELECTED_ICON).addClass("hidden"),c.attr("aria-checked",!1)}),ga(a,d.count)},Ja=function(a,b,d,e){return e.show&&!e.hasMessages?c.get_strings([{key:"requirecontacttomessage",component:"core_message",param:e.user.fullname},{key:"isnotinyourcontacts",component:"core_message",param:e.user.fullname}]).then(function(c){var e=c[1],f=c[0];return ua(a,b,d,[g.ACTION_REQUEST_ADD_CONTACT],f,e,!1,!0)}):va(a,b,d)},Ka=function(a,b,d,e){var f=m(b);return e?c.get_string("yourcontactrequestpending","core_message",e).then(function(a){return f.find(g.TEXT).text(a),f.removeClass("hidden"),a}):(f.addClass("hidden"),!0)},La=function(a,b,c){return va(a,b,c),n(b),G(a),S(a),H(c),v(c),!0},Ma=function(c,d,e,f){var g=[{reset:La},{conversation:ma,header:na,footer:oa,confirmBlockUser:wa,confirmUnblockUser:xa,confirmAddContact:ya,confirmRemoveContact:za,confirmDeleteSelectedMessages:Aa,confirmDeleteConversation:Ba,confirmContactRequest:Ca,requireAddContact:Ja,contactRequestSent:Ka},{loadingMembers:qa,loadingFirstMessages:ra,loadingMessages:sa,sendingMessage:ta,isBlocked:Da,isContact:Fa,isFavourite:Ea,loadingConfirmAction:Ga,inEditMode:Ha},{scrollToMessage:pa,selectedMessages:Ia}],h=function(a){var b=[];for(var g in f)if(a.hasOwnProperty(g)){var h=a[g],i=f[g];b.push(h(c,d,e,i))}return b},i=h(g[0]);return i=i.concat(h(g[1])),a.when.apply(a,i).then(function(){for(var a=2;a0,j=g.messages.add.length>0,k=[],l=a.Deferred().resolve({}).promise();return i&&(k=k.concat(g.days.add.reduce(function(a,b){return a.concat(b.value.messages.map(function(a){return a.timeCreated}))},[]))),j&&(k=k.concat(g.messages.add.map(function(a){return a.value.timeCreated}))),k.length&&(l=c.get_string("strftimetime24","core_langconfig").then(function(a){var b=k.map(function(b){return{timestamp:b,format:a}});return e.get(b)}).then(function(a){return k.reduce(function(b,c,d){return b[c]=a[d],b},{})})),i&&h.push(l.then(function(a){return ia(b,d,f,g.days.add,a)})),j&&h.push(l.then(function(a){return ja(b,d,f,g.messages.add,a)})),g.days.remove.length>0&&ka(d,g.days.remove),g.messages.remove.length>0&&la(d,g.messages.remove),a.when.apply(a,h)},na=function(a,b,c,e){var f=L(a),g=h.HEADER_PUBLIC;return e.type==i.PRIVATE&&(g=e.showControls?h.HEADER_PRIVATE:h.HEADER_PRIVATE_NO_CONTROLS),d.render(g,e.context).then(function(a,b){d.replaceNodeContents(f,a,b)})},oa=function(a,b,d,e){switch(H(d),e.type){case"placeholder":return v(d);case"add-contact":return c.get_strings([{key:"requirecontacttomessage",component:"core_message",param:e.user.fullname},{key:"isnotinyourcontacts",component:"core_message",param:e.user.fullname}]).then(function(a){var b=a[1],c=a[0],e=x(d);return e.find(g.TITLE).text(b),e.find(g.TEXT).text(c),y(d),a});case"edit-mode":return s(d);case"content":return p(d);case"unblock":return B(d);case"unable-to-message":return E(d)}return!0},pa=function(a,b,c,d){var e=j(b),f=V(b,d),g=f.position();if(g){var h=e.scrollTop()+g.top;e.scrollTop(h)}},qa=function(a,b,c,d){d?(N(a),S(a)):(M(a),T(a))},ra=function(a,b,c,d){d?(l(b),J(b)):(k(b),K(b))},sa=function(a,b,c,d){d?Y(b):Z(b)},ta=function(a,b,c,d){d?aa(c):(ba(c),ca(c))},ua=function(a,b,c,d,e,f,h,i){var j=da(b),k=d.map(function(a){return j.find(a)}),l=j.find(g.CONFIRM_DIALOGUE_CANCEL_BUTTON),m=j.find(g.CONFIRM_DIALOGUE_TEXT),n=j.find(g.CONFIRM_DIALOGUE_HEADER);j.find("button").addClass("hidden"),h?l.removeClass("hidden"):l.addClass("hidden"),f?(n.removeClass("hidden"),n.text(f)):(n.addClass("hidden"),n.text("")),k.forEach(function(a){a.removeClass("hidden")}),m.text(e),ea(c),ea(b),i||ea(a),j.find(g.CAN_RECEIVE_FOCUS).filter(":visible").first().focus()},va=function(a,b,c){var d=da(b),e=d.find(g.CONFIRM_DIALOGUE_CANCEL_BUTTON),f=d.find(g.CONFIRM_DIALOGUE_TEXT),h=d.find(g.CONFIRM_DIALOGUE_HEADER);return fa(b),fa(c),fa(a),d.find("button").addClass("hidden"),e.removeClass("hidden"),f.text(""),h.addClass("hidden"),h.text(""),a.find(g.CAN_RECEIVE_FOCUS).first().focus(),!0},wa=function(a,b,d,e){return e?c.get_string("blockuserconfirm","core_message",e.fullname).then(function(c){return ua(a,b,d,[g.ACTION_CONFIRM_BLOCK],c,"",!0,!1)}):va(a,b,d)},xa=function(a,b,d,e){return e?c.get_string("unblockuserconfirm","core_message",e.fullname).then(function(c){return ua(a,b,d,[g.ACTION_CONFIRM_UNBLOCK],c,"",!0,!1)}):va(a,b,d)},ya=function(a,b,d,e){return e?c.get_string("addcontactconfirm","core_message",e.fullname).then(function(c){return ua(a,b,d,[g.ACTION_CONFIRM_ADD_CONTACT],c,"",!0,!1)}):va(a,b,d)},za=function(a,b,d,e){return e?c.get_string("removecontactconfirm","core_message",e.fullname).then(function(c){return ua(a,b,d,[g.ACTION_CONFIRM_REMOVE_CONTACT],c,"",!0,!1)}):va(a,b,d)},Aa=function(a,b,d,e){return e?c.get_string("deleteselectedmessagesconfirm","core_message").then(function(c){return ua(a,b,d,[g.ACTION_CONFIRM_DELETE_SELECTED_MESSAGES],c,"",!0,!1)}):va(a,b,d)},Ba=function(a,b,d,e){return e?c.get_string("deleteallconfirm","core_message").then(function(c){return ua(a,b,d,[g.ACTION_CONFIRM_DELETE_CONVERSATION],c,"",!0,!1)}):va(a,b,d)},Ca=function(a,b,d,e){return e?c.get_string("userwouldliketocontactyou","core_message",e.fullname).then(function(c){var e=[g.ACTION_ACCEPT_CONTACT_REQUEST,g.ACTION_DECLINE_CONTACT_REQUEST];return ua(a,b,d,e,c,"",!1,!0)}):va(a,b,d)},Da=function(a,b,c,d){d?(a.find(g.ACTION_REQUEST_BLOCK).addClass("hidden"),a.find(g.ACTION_REQUEST_UNBLOCK).removeClass("hidden")):(a.find(g.ACTION_REQUEST_BLOCK).removeClass("hidden"),a.find(g.ACTION_REQUEST_UNBLOCK).addClass("hidden"))},Ea=function(a,b,c,d){d?(a.find(g.FAVOURITE_ICON_CONTAINER).removeClass("hidden"),a.find(g.ACTION_CONFIRM_FAVOURITE).addClass("hidden"),a.find(g.ACTION_CONFIRM_UNFAVOURITE).removeClass("hidden")):(a.find(g.FAVOURITE_ICON_CONTAINER).addClass("hidden"),a.find(g.ACTION_CONFIRM_FAVOURITE).removeClass("hidden"),a.find(g.ACTION_CONFIRM_UNFAVOURITE).addClass("hidden"))},Fa=function(a,b,c,d){var e=a.find(g.ACTION_REQUEST_ADD_CONTACT),f=a.find(g.ACTION_REQUEST_REMOVE_CONTACT);switch(d){case"pending-contact":e.addClass("hidden"),f.addClass("hidden");break;case"contact":e.addClass("hidden"),f.removeClass("hidden");break;case"non-contact":e.removeClass("hidden"),f.addClass("hidden")}},Ga=function(a,b,c,d){var e=da(b),f=e.find("button"),h=e.find(g.CONFIRM_DIALOGUE_BUTTON_TEXT),i=e.find(g.LOADING_ICON_CONTAINER);d?(f.prop("disabled",!0),h.addClass("hidden"),i.removeClass("hidden")):(f.prop("disabled",!1),h.removeClass("hidden"),i.addClass("hidden"))},Ha=function(a,b,c,d){var e=null;d?(e=b.find(g.MESSAGE_NOT_SELECTED),e.find(g.MESSAGE_NOT_SELECTED_ICON).removeClass("hidden"),N(a),P(a)):(e=j(b),e.find(g.MESSAGE_NOT_SELECTED_ICON).addClass("hidden"),e.find(g.MESSAGE_SELECTED_ICON).addClass("hidden"),M(a),Q(a))},Ia=function(a,b,c,d){var e=d.count>0;d.add.length&&d.add.forEach(function(a){var c=V(b,a);c.find(g.MESSAGE_NOT_SELECTED_ICON).addClass("hidden"),c.find(g.MESSAGE_SELECTED_ICON).removeClass("hidden"),c.attr("aria-checked",!0)}),d.remove.length&&d.remove.forEach(function(a){var c=V(b,a);e&&c.find(g.MESSAGE_NOT_SELECTED_ICON).removeClass("hidden"),c.find(g.MESSAGE_SELECTED_ICON).addClass("hidden"),c.attr("aria-checked",!1)}),ga(a,d.count)},Ja=function(a,b,d,e){return e.show&&!e.hasMessages?c.get_strings([{key:"requirecontacttomessage",component:"core_message",param:e.user.fullname},{key:"isnotinyourcontacts",component:"core_message",param:e.user.fullname}]).then(function(c){var e=c[1],f=c[0];return ua(a,b,d,[g.ACTION_REQUEST_ADD_CONTACT],f,e,!1,!0)}):va(a,b,d)},Ka=function(a,b,d,e){var f=m(b);return e?c.get_string("yourcontactrequestpending","core_message",e).then(function(a){return f.find(g.TEXT).text(a),f.removeClass("hidden"),a}):(f.addClass("hidden"),!0)},La=function(a,b,c){return va(a,b,c),n(b),G(a),S(a),H(c),v(c),!0},Ma=function(c,d,e,f){var g=[{reset:La},{conversation:ma,header:na,footer:oa,confirmBlockUser:wa,confirmUnblockUser:xa,confirmAddContact:ya,confirmRemoveContact:za,confirmDeleteSelectedMessages:Aa,confirmDeleteConversation:Ba,confirmContactRequest:Ca,requireAddContact:Ja,contactRequestSent:Ka},{loadingMembers:qa,loadingFirstMessages:ra,loadingMessages:sa,sendingMessage:ta,isBlocked:Da,isContact:Fa,isFavourite:Ea,loadingConfirmAction:Ga,inEditMode:Ha},{scrollToMessage:pa,selectedMessages:Ia}],h=function(a){var b=[];for(var g in f)if(a.hasOwnProperty(g)){var h=a[g],i=f[g];b.push(h(c,d,e,i))}return b},i=h(g[0]);return i=i.concat(h(g[1])),a.when.apply(a,i).then(function(){for(var a=2;ab.timeCreated?1:0}),e.messages=g.filter(function(a,b,c){return!b||a.id!==c[b-1].id}),e},f=function(a,c){var d=b(a),e=c.map(function(a){return a.id});return d.messages=d.messages.filter(function(a){return e.indexOf(a.id)<0}),d},g=function(a,c){var d=b(a);return d.messages=d.messages.filter(function(a){return c.indexOf(a.id)<0}),d},h=function(a,c){var d=b(a);return c.forEach(function(a){d.members[a.id]=a}),d},i=function(a,c){var d=b(a);return c.forEach(function(a){delete d.members[a.id]}),d},j=function(a,c){var d=b(a);return d.loadingMessages=c,a.loadingMessages&&!c&&(d.hasTriedToLoadMessages=!0),d},k=function(a,c){var d=b(a);return d.sendingMessage=c,d},l=function(a,c){var d=b(a);return d.loadingMembers=c,d},m=function(a,c){var d=b(a);return d.id=c,d},n=function(a,c){var d=b(a);return d.name=c,d},o=function(a,c){var d=b(a);return d.subname=c,d},p=function(a,c){var d=b(a);return d.type=c,d},q=function(a,c){var d=b(a);return d.isFavourite=c,d},r=function(a,c){var d=b(a);return d.totalMemberCount=c,d},s=function(a,c){var d=b(a);return d.imageUrl=c,d},t=function(a,c){var d=b(a);return d.loadingConfirmAction=c,d},u=function(a,c){var d=b(a);return d.pendingDeleteConversation=c,d},v=function(a,c){var d=b(a);return c.forEach(function(a){d.pendingBlockUserIds.push(a)}),d},w=function(a,c){var d=b(a);return c.forEach(function(a){d.pendingRemoveContactIds.push(a)}),d},x=function(a,c){var d=b(a);return c.forEach(function(a){d.pendingUnblockUserIds.push(a)}),d},y=function(a,c){var d=b(a);return c.forEach(function(a){d.pendingAddContactIds.push(a)}),d},z=function(a,c){var d=b(a);return c.forEach(function(a){d.pendingDeleteMessageIds.push(a)}),d},A=function(a,c){var d=b(a);return d.pendingBlockUserIds=d.pendingBlockUserIds.filter(function(a){return c.indexOf(a)<0}),d},B=function(a,c){var d=b(a);return d.pendingRemoveContactIds=d.pendingRemoveContactIds.filter(function(a){return c.indexOf(a)<0}),d},C=function(a,c){var d=b(a);return d.pendingUnblockUserIds=d.pendingUnblockUserIds.filter(function(a){return c.indexOf(a)<0}),d},D=function(a,c){var d=b(a);return d.pendingAddContactIds=d.pendingAddContactIds.filter(function(a){return c.indexOf(a)<0}),d},E=function(a,c){var d=b(a);return d.pendingDeleteMessageIds=d.pendingDeleteMessageIds.filter(function(a){return c.indexOf(a)<0}),d},F=function(a,c){var d=b(a);return d.selectedMessageIds=d.selectedMessageIds.concat(c),d},G=function(a,c){var d=b(a);return d.selectedMessageIds=d.selectedMessageIds.filter(function(a){return c.indexOf(a)<0}),d},H=function(a,c){var d=b(a),e=c.map(function(a){return a.id});return d.messages=d.messages.map(function(a){return e.indexOf(a.id)>=0&&(a.isRead=!0),a}),d},I=function(a,c){var d=b(a);return c.forEach(function(a){var b=a.userid,c=a.requesteduserid;d.members[b].contactrequests.push(a),d.members[c].contactrequests.push(a)}),d},J=function(a,c){var d=b(a);return c.forEach(function(a){var b=a.userid,c=a.requesteduserid;d.members[b].contactrequests=d.members[b].contactrequests.filter(function(a){return a.userid!=b}),d.members[c].contactrequests=d.members[c].contactrequests.filter(function(a){return a.requesteduserid!=c})}),d};return{buildInitialState:d,addMessages:e,removeMessages:f,removeMessagesById:g,addMembers:h,removeMembers:i,setLoadingMessages:j,setSendingMessage:k,setLoadingMembers:l,setId:m,setName:n,setSubname:o,setType:p,setIsFavourite:q,setTotalMemberCount:r,setImageUrl:s,setLoadingConfirmAction:t,setPendingDeleteConversation:u,addPendingBlockUsersById:v,addPendingRemoveContactsById:w,addPendingUnblockUsersById:x,addPendingAddContactsById:y,addPendingDeleteMessagesById:z,removePendingBlockUsersById:A,removePendingRemoveContactsById:B,removePendingUnblockUsersById:C,removePendingAddContactsById:D,removePendingDeleteMessagesById:E,addSelectedMessagesById:F,removeSelectedMessagesById:G,markMessagesAsRead:H,addContactRequests:I,removeContactRequests:J}}); \ No newline at end of file +define(["jquery"],function(a){var b=function(b){var c=a.extend({},b);return c.messages=b.messages.map(function(b){return a.extend({},b)}),c.members=Object.keys(b.members).reduce(function(c,d){return c[d]=a.extend({},b.members[d]),c[d].contactrequests=b.members[d].contactrequests.map(function(b){return a.extend({},b)}),c},{}),c},c=function(a,b,c){return a.map(function(a){var d=a.useridfrom==b;return{id:parseInt(a.id,10),isRead:a.isread,fromLoggedInUser:d,userFrom:c[a.useridfrom],text:a.text,timeCreated:parseInt(a.timecreated,10)}})},d=function(a,b,c){return{midnight:a,loggedInUserId:b,id:c,name:null,subname:null,type:null,totalMemberCount:null,imageUrl:null,isFavourite:null,members:{},messages:[],hasTriedToLoadMessages:!1,loadingMessages:!0,sendingMessage:!1,loadingMembers:!0,loadingConfirmAction:!1,pendingBlockUserIds:[],pendingUnblockUserIds:[],pendingRemoveContactIds:[],pendingAddContactIds:[],pendingDeleteMessageIds:[],pendingDeleteConversation:!1,selectedMessageIds:[]}},e=function(a,d){var e=b(a),f=c(d,a.loggedInUserId,a.members),g=a.messages.concat(f);return g.sort(function(a,b){return a.timeCreatedb.timeCreated?1:a.idb.id?1:0}),e.messages=g.filter(function(a,b,c){return!b||a.id!==c[b-1].id}),e},f=function(a,c){var d=b(a),e=c.map(function(a){return a.id});return d.messages=d.messages.filter(function(a){return e.indexOf(a.id)<0}),d},g=function(a,c){var d=b(a);return d.messages=d.messages.filter(function(a){return c.indexOf(a.id)<0}),d},h=function(a,c){var d=b(a);return c.forEach(function(a){d.members[a.id]=a}),d},i=function(a,c){var d=b(a);return c.forEach(function(a){delete d.members[a.id]}),d},j=function(a,c){var d=b(a);return d.loadingMessages=c,a.loadingMessages&&!c&&(d.hasTriedToLoadMessages=!0),d},k=function(a,c){var d=b(a);return d.sendingMessage=c,d},l=function(a,c){var d=b(a);return d.loadingMembers=c,d},m=function(a,c){var d=b(a);return d.id=c,d},n=function(a,c){var d=b(a);return d.name=c,d},o=function(a,c){var d=b(a);return d.subname=c,d},p=function(a,c){var d=b(a);return d.type=c,d},q=function(a,c){var d=b(a);return d.isFavourite=c,d},r=function(a,c){var d=b(a);return d.totalMemberCount=c,d},s=function(a,c){var d=b(a);return d.imageUrl=c,d},t=function(a,c){var d=b(a);return d.loadingConfirmAction=c,d},u=function(a,c){var d=b(a);return d.pendingDeleteConversation=c,d},v=function(a,c){var d=b(a);return c.forEach(function(a){d.pendingBlockUserIds.push(a)}),d},w=function(a,c){var d=b(a);return c.forEach(function(a){d.pendingRemoveContactIds.push(a)}),d},x=function(a,c){var d=b(a);return c.forEach(function(a){d.pendingUnblockUserIds.push(a)}),d},y=function(a,c){var d=b(a);return c.forEach(function(a){d.pendingAddContactIds.push(a)}),d},z=function(a,c){var d=b(a);return c.forEach(function(a){d.pendingDeleteMessageIds.push(a)}),d},A=function(a,c){var d=b(a);return d.pendingBlockUserIds=d.pendingBlockUserIds.filter(function(a){return c.indexOf(a)<0}),d},B=function(a,c){var d=b(a);return d.pendingRemoveContactIds=d.pendingRemoveContactIds.filter(function(a){return c.indexOf(a)<0}),d},C=function(a,c){var d=b(a);return d.pendingUnblockUserIds=d.pendingUnblockUserIds.filter(function(a){return c.indexOf(a)<0}),d},D=function(a,c){var d=b(a);return d.pendingAddContactIds=d.pendingAddContactIds.filter(function(a){return c.indexOf(a)<0}),d},E=function(a,c){var d=b(a);return d.pendingDeleteMessageIds=d.pendingDeleteMessageIds.filter(function(a){return c.indexOf(a)<0}),d},F=function(a,c){var d=b(a);return d.selectedMessageIds=d.selectedMessageIds.concat(c),d},G=function(a,c){var d=b(a);return d.selectedMessageIds=d.selectedMessageIds.filter(function(a){return c.indexOf(a)<0}),d},H=function(a,c){var d=b(a),e=c.map(function(a){return a.id});return d.messages=d.messages.map(function(a){return e.indexOf(a.id)>=0&&(a.isRead=!0),a}),d},I=function(a,c){var d=b(a);return c.forEach(function(a){var b=a.userid,c=a.requesteduserid;d.members[b].contactrequests.push(a),d.members[c].contactrequests.push(a)}),d},J=function(a,c){var d=b(a);return c.forEach(function(a){var b=a.userid,c=a.requesteduserid;d.members[b].contactrequests=d.members[b].contactrequests.filter(function(a){return a.userid!=b}),d.members[c].contactrequests=d.members[c].contactrequests.filter(function(a){return a.requesteduserid!=c})}),d};return{buildInitialState:d,addMessages:e,removeMessages:f,removeMessagesById:g,addMembers:h,removeMembers:i,setLoadingMessages:j,setSendingMessage:k,setLoadingMembers:l,setId:m,setName:n,setSubname:o,setType:p,setIsFavourite:q,setTotalMemberCount:r,setImageUrl:s,setLoadingConfirmAction:t,setPendingDeleteConversation:u,addPendingBlockUsersById:v,addPendingRemoveContactsById:w,addPendingUnblockUsersById:x,addPendingAddContactsById:y,addPendingDeleteMessagesById:z,removePendingBlockUsersById:A,removePendingRemoveContactsById:B,removePendingUnblockUsersById:C,removePendingAddContactsById:D,removePendingDeleteMessagesById:E,addSelectedMessagesById:F,removeSelectedMessagesById:G,markMessagesAsRead:H,addContactRequests:I,removeContactRequests:J}}); \ No newline at end of file diff --git a/message/amd/build/message_drawer_view_overview_section.min.js b/message/amd/build/message_drawer_view_overview_section.min.js index 3dfffce1c65..f1efaf7649d 100644 --- a/message/amd/build/message_drawer_view_overview_section.min.js +++ b/message/amd/build/message_drawer_view_overview_section.min.js @@ -1 +1 @@ -define(["jquery","core/custom_interaction_events","core/notification","core/pubsub","core/str","core/templates","core/user_date","core_message/message_repository","core_message/message_drawer_events","core_message/message_drawer_router","core_message/message_drawer_routes","core_message/message_drawer_lazy_load_list","core_message/message_drawer_view_conversation_constants"],function(a,b,c,d,e,f,g,h,i,j,k,l,m){var n={TOGGLE:'[data-region="toggle"]',CONVERSATION:"[data-conversation-id]",BLOCKED_ICON_CONTAINER:'[data-region="contact-icon-blocked"]',LAST_MESSAGE:'[data-region="last-message"]',LAST_MESSAGE_DATE:'[data-region="last-message-date"]',UNREAD_COUNT:'[data-region="unread-count"]',SECTION_TOTAL_COUNT:'[data-region="section-total-count"]',SECTION_UNREAD_COUNT:'[data-region="section-unread-count"]'},o={CONVERSATIONS_LIST:"core_message/message_drawer_conversations_list"},p=50,q={},r=function(a){return l.getRoot(a).hasClass("show")},s=function(a){a.addClass("expanded")},t=function(a){a.removeClass("expanded")},u=function(b,d,e){var g=d.map(function(b){var c=b.messages.length?b.messages[b.messages.length-1]:null,d={id:b.id,imageurl:b.imageurl,name:b.name,subname:b.subname,unreadcount:b.unreadcount,lastmessagedate:c?c.timecreated:null,sentfromcurrentuser:c?c.useridfrom==e:null,lastmessage:c?a(c.text).text()||c.text:null};if(b.type==m.CONVERSATION_TYPES.PRIVATE){var f=b.members.reduce(function(a,b){return a||b.id==e||(a=b),a},null);d.userid=f.id,d.showonlinestatus=f.showonlinestatus,d.isonline=f.isosnline,d.isblocked=f.isblocked}return d});return f.render(o.CONVERSATIONS_LIST,{conversations:g}).then(function(a){return b.append(a),a})["catch"](c.exception)},v=function(a,b,d){return function(e,f){return h.getConversations(f,a,p+1,d,b).then(function(a){var b=a.conversations;return b.length>p?b=b.slice(0,-1):l.setLoadedAll(e,!0),d+=p,b.forEach(function(a){q[a.id]=a}),b})["catch"](c.exception)}},w=function(a){return a.find(n.SECTION_TOTAL_COUNT)},x=function(a){return a.find(n.SECTION_UNREAD_COUNT)},y=function(a){var b=w(a),c=parseInt(b.text());c+=1,b.text(c)},z=function(a){var b=w(a),c=parseInt(b.text());c-=1,b.text(c)},A=function(a){var b=x(a),c=parseInt(b.text());c-=1,b.text(c),c<1&&b.addClass("hidden")},B=function(a,b){return a.find('[data-conversation-id="'+b+'"]')},C=function(a,b){return a.find('[data-user-id="'+b+'"]')},D=function(a){a.find(n.BLOCKED_ICON_CONTAINER).removeClass("hidden")},E=function(a){a.find(n.BLOCKED_ICON_CONTAINER).addClass("hidden")},F=function(b,c){var d=c.messages[c.messages.length-1],f="",h=[{key:"you",component:"core_message"},{key:"strftimetime24",component:"core_langconfig"}];return e.get_strings(h).then(function(a){return f=a[0],g.get([{timestamp:d.timeCreated,format:a[1]}])}).then(function(a){return a[0]}).then(function(c){var e=a(d.text).text();return d.fromLoggedInUser&&(e=f+" "+e),b.find(n.LAST_MESSAGE).html(e),b.find(n.LAST_MESSAGE_DATE).text(c).removeClass("hidden"),c})},G=function(b,d){var e=b.find(n.CONVERSATION),g="";if(!e.length){var h=l.getRoot(b);l.showContent(h),l.hideEmptyMessage(h)}var i=d.messages.length,j=i?d.messages[i-1]:null;j&&(g=a(j.text).text()||j.text);var k={id:d.id,name:d.name,subname:d.subname,lastmessagedate:j?j.timeCreated:null,sentfromcurrentuser:j?j.fromLoggedInUser:null,lastmessage:g,imageurl:d.imageUrl};return f.render(o.CONVERSATIONS_LIST,{conversations:[k]}).then(function(a){var c=l.getContentContainer(b);return c.prepend(a)}).then(function(){return y(b)})["catch"](c.exception)},H=function(a,b){b.remove(),z(a);var c=a.find(n.CONVERSATION);if(!c.length){var d=l.getRoot(a);l.hideContent(d),l.showEmptyMessage(d)}},I=function(a,b){var c=b.find(n.UNREAD_COUNT);c.text("0"),c.addClass("hidden"),A(a)},J=function(c,e,f,g){var h=l.getRoot(c),m=c.find(n.TOGGLE);c.css("min-height",m.outerHeight()),c.on("show.bs.collapse",function(){s(c),l.show(h,e,u)}),c.on("hidden.bs.collapse",function(){t(c)}),d.subscribe(i.CONTACT_BLOCKED,function(a){var b=C(c,a);b.length&&D(b)}),d.subscribe(i.CONTACT_UNBLOCKED,function(a){var b=C(c,a);b.length&&E(b)}),d.subscribe(i.CONVERSATION_NEW_LAST_MESSAGE,function(a){if(!(f&&a.type!=f||g&&!a.isFavourite||!g&&a.isFavourite)){var b=a.id,d=B(c,b);d.length?F(d,a):G(c,a)}}),d.subscribe(i.CONVERSATION_DELETED,function(a){var b=B(c,a);b.length&&H(c,b)}),d.subscribe(i.CONVERSATION_READ,function(a){var b=B(c,a);b.length&&I(c,b)}),d.subscribe(i.CONVERSATION_SET_FAVOURITE,function(a){var b=null;!g||f&&f!=a.type?f==a.type&&(b=B(c,a.id),b.length&&H(c,b)):(b=B(c,a.id),b.length||G(c,a))}),d.subscribe(i.CONVERSATION_UNSET_FAVOURITE,function(a){var b=null;g?(b=B(c,a.id),b.length&&H(c,b)):f==a.type&&(b=B(c,a.id),b.length||G(c,a))}),b.define(c,[b.events.activate]),c.on(b.events.activate,n.CONVERSATION,function(b,c){var d=a(b.target).closest(n.CONVERSATION),e=d.attr("data-conversation-id"),f=q[e];j.go(k.VIEW_CONVERSATION,f),c.originalEvent.preventDefault()})},K=function(b,c,d){if(b=a(b),!b.attr("data-init")){var e=v(c,d,0);if(J(b,e,c,d),r(b)){s(b);var f=l.getRoot(b);l.show(f,e,u)}b.attr("data-init",!0)}};return{show:K}}); \ No newline at end of file +define(["jquery","core/custom_interaction_events","core/notification","core/pubsub","core/str","core/templates","core/user_date","core_message/message_repository","core_message/message_drawer_events","core_message/message_drawer_router","core_message/message_drawer_routes","core_message/message_drawer_lazy_load_list","core_message/message_drawer_view_conversation_constants"],function(a,b,c,d,e,f,g,h,i,j,k,l,m){var n={TOGGLE:'[data-region="toggle"]',CONVERSATION:"[data-conversation-id]",BLOCKED_ICON_CONTAINER:'[data-region="contact-icon-blocked"]',LAST_MESSAGE:'[data-region="last-message"]',LAST_MESSAGE_DATE:'[data-region="last-message-date"]',UNREAD_COUNT:'[data-region="unread-count"]',SECTION_TOTAL_COUNT:'[data-region="section-total-count"]',SECTION_UNREAD_COUNT:'[data-region="section-unread-count"]'},o={CONVERSATIONS_LIST:"core_message/message_drawer_conversations_list"},p=50,q={},r=function(a){return l.getRoot(a).hasClass("show")},s=function(a){a.addClass("expanded")},t=function(a){a.removeClass("expanded")},u=function(b,d,e){var g=d.map(function(b){var c=b.messages.length?b.messages[b.messages.length-1]:null,d={id:b.id,imageurl:b.imageurl,name:b.name,subname:b.subname,unreadcount:b.unreadcount,lastmessagedate:c?c.timecreated:null,sentfromcurrentuser:c?c.useridfrom==e:null,lastmessage:c?a(c.text).text()||c.text:null};if(b.type==m.CONVERSATION_TYPES.PRIVATE){var f=b.members.reduce(function(a,b){return a||b.id==e||(a=b),a},null);d.userid=f.id,d.showonlinestatus=f.showonlinestatus,d.isonline=f.isonline,d.isblocked=f.isblocked}return d});return f.render(o.CONVERSATIONS_LIST,{conversations:g}).then(function(a){return b.append(a),a})["catch"](c.exception)},v=function(a,b,d){return function(e,f){return h.getConversations(f,a,p+1,d,b).then(function(a){var b=a.conversations;return b.length>p?b=b.slice(0,-1):l.setLoadedAll(e,!0),d+=p,b.forEach(function(a){q[a.id]=a}),b})["catch"](c.exception)}},w=function(a){return a.find(n.SECTION_TOTAL_COUNT)},x=function(a){return a.find(n.SECTION_UNREAD_COUNT)},y=function(a){var b=w(a),c=parseInt(b.text());c+=1,b.text(c)},z=function(a){var b=w(a),c=parseInt(b.text());c-=1,b.text(c)},A=function(a){var b=x(a),c=parseInt(b.text());c-=1,b.text(c),c<1&&b.addClass("hidden")},B=function(a,b){return a.find('[data-conversation-id="'+b+'"]')},C=function(a,b){return a.find('[data-user-id="'+b+'"]')},D=function(a){a.find(n.BLOCKED_ICON_CONTAINER).removeClass("hidden")},E=function(a){a.find(n.BLOCKED_ICON_CONTAINER).addClass("hidden")},F=function(b,c){var d=c.messages[c.messages.length-1],f="",h=[{key:"you",component:"core_message"},{key:"strftimetime24",component:"core_langconfig"}];return e.get_strings(h).then(function(a){return f=a[0],g.get([{timestamp:d.timeCreated,format:a[1]}])}).then(function(a){return a[0]}).then(function(c){var e=a(d.text).text();return d.fromLoggedInUser&&(e=f+" "+e),b.find(n.LAST_MESSAGE).html(e),b.find(n.LAST_MESSAGE_DATE).text(c).removeClass("hidden"),c})},G=function(b,d){var e=b.find(n.CONVERSATION),g="";if(!e.length){var h=l.getRoot(b);l.showContent(h),l.hideEmptyMessage(h)}var i=d.messages.length,j=i?d.messages[i-1]:null;j&&(g=a(j.text).text()||j.text);var k={id:d.id,name:d.name,subname:d.subname,lastmessagedate:j?j.timeCreated:null,sentfromcurrentuser:j?j.fromLoggedInUser:null,lastmessage:g,imageurl:d.imageUrl};return q[d.id]=d,f.render(o.CONVERSATIONS_LIST,{conversations:[k]}).then(function(a){var c=l.getContentContainer(b);return c.prepend(a)}).then(function(){return y(b)})["catch"](c.exception)},H=function(a,b){b.remove(),z(a);var c=a.find(n.CONVERSATION);if(!c.length){var d=l.getRoot(a);l.hideContent(d),l.showEmptyMessage(d)}},I=function(a,b){var c=b.find(n.UNREAD_COUNT);c.text("0"),c.addClass("hidden"),A(a)},J=function(c,e,f,g){var h=l.getRoot(c),m=c.find(n.TOGGLE);c.css("min-height",m.outerHeight()),c.on("show.bs.collapse",function(){s(c),l.show(h,e,u)}),c.on("hidden.bs.collapse",function(){t(c)}),d.subscribe(i.CONTACT_BLOCKED,function(a){var b=C(c,a);b.length&&D(b)}),d.subscribe(i.CONTACT_UNBLOCKED,function(a){var b=C(c,a);b.length&&E(b)}),d.subscribe(i.CONVERSATION_NEW_LAST_MESSAGE,function(a){if(!(f&&a.type!=f||g&&!a.isFavourite||!g&&a.isFavourite)){var b=a.id,d=B(c,b);d.length?F(d,a):G(c,a)}}),d.subscribe(i.CONVERSATION_DELETED,function(a){var b=B(c,a);b.length&&H(c,b)}),d.subscribe(i.CONVERSATION_READ,function(a){var b=B(c,a);b.length&&I(c,b)}),d.subscribe(i.CONVERSATION_SET_FAVOURITE,function(a){var b=null;!g||f&&f!=a.type?f==a.type&&(b=B(c,a.id),b.length&&H(c,b)):(b=B(c,a.id),b.length||G(c,a))}),d.subscribe(i.CONVERSATION_UNSET_FAVOURITE,function(a){var b=null;g?(b=B(c,a.id),b.length&&H(c,b)):f==a.type&&(b=B(c,a.id),b.length||G(c,a))}),b.define(c,[b.events.activate]),c.on(b.events.activate,n.CONVERSATION,function(b,c){var d=a(b.target).closest(n.CONVERSATION),e=d.attr("data-conversation-id"),f=q[e];j.go(k.VIEW_CONVERSATION,f),c.originalEvent.preventDefault()})},K=function(b,c,d){if(b=a(b),!b.attr("data-init")){var e=v(c,d,0);if(J(b,e,c,d),r(b)){s(b);var f=l.getRoot(b);l.show(f,e,u)}b.attr("data-init",!0)}};return{show:K}}); \ No newline at end of file diff --git a/message/amd/src/message_drawer.js b/message/amd/src/message_drawer.js index 079a0ec82c1..7ea6a2d4dec 100644 --- a/message/amd/src/message_drawer.js +++ b/message/amd/src/message_drawer.js @@ -229,6 +229,18 @@ function( show(root); Router.go(Routes.VIEW_SETTINGS); }); + + PubSub.subscribe(Events.PREFERENCES_UPDATED, function(preferences) { + var filteredPreferences = preferences.filter(function(preference) { + return preference.type == 'message_entertosend'; + }); + var enterToSendPreference = filteredPreferences.length ? filteredPreferences[0] : null; + + if (enterToSendPreference) { + var viewConversationFooter = root.find(SELECTORS.FOOTER_CONTAINER).find(SELECTORS.VIEW_CONVERSATION); + viewConversationFooter.attr('data-enter-to-send', enterToSendPreference.value); + } + }); }; /** diff --git a/message/amd/src/message_drawer_helper.js b/message/amd/src/message_drawer_helper.js index d8742941512..e11b0895684 100644 --- a/message/amd/src/message_drawer_helper.js +++ b/message/amd/src/message_drawer_helper.js @@ -33,6 +33,8 @@ function( /** * Trigger an event to create a new conversation in the message drawer. + * + * @param {Number} userId The user id to start a conversation. */ var createConversationWithUser = function(userId) { PubSub.publish(MessageDrawerEvents.CREATE_CONVERSATION_WITH_USER, userId); diff --git a/message/amd/src/message_drawer_router.js b/message/amd/src/message_drawer_router.js index 62ca83ceaf0..a6be5abfd7c 100644 --- a/message/amd/src/message_drawer_router.js +++ b/message/amd/src/message_drawer_router.js @@ -184,6 +184,8 @@ function( // Update the aria label for the back button. element.find(SELECTORS.ROUTES_BACK).attr('aria-label', label); }); + + return; }); }) .catch(function() { diff --git a/message/amd/src/message_drawer_view_conversation.js b/message/amd/src/message_drawer_view_conversation.js index 324e2ef2131..1877e9260d5 100644 --- a/message/amd/src/message_drawer_view_conversation.js +++ b/message/amd/src/message_drawer_view_conversation.js @@ -97,6 +97,8 @@ function( var loadedAllMessages = false; var messagesOffset = 0; var newMessagesPollTimer = null; + // If the UI is currently resetting. + var isResetting = true; // This is the render function which will be generated when this module is // first called. See generateRenderFunction for details. var render = null; @@ -470,7 +472,9 @@ function( if (!limit) { return result; } else if (result.messages.length > limit) { - result.messages = result.messages.slice(1); + // Ignore the last result which was just to test if there are more + // to load. + result.messages = result.messages.slice(0, -1); } else { setLoadedAllMessages(true); } @@ -509,7 +513,7 @@ function( var messages = viewState.messages; var mostRecentMessage = messages.length ? messages[messages.length - 1] : null; - if (mostRecentMessage) { + if (mostRecentMessage && !isResetting) { // There may be multiple messages with the same time created value since // the accuracy is only down to the second. The server will include these // messages in the result (since it does a >= comparison on time from) so @@ -547,6 +551,8 @@ function( } }); } + + return $.Deferred().resolve().promise(); }; }; @@ -1236,7 +1242,8 @@ function( messagesContainer.on(CustomEvents.events.scrollTop, function(e, data) { var hasMembers = Object.keys(viewState.members).length > 1; - if (!isLoadingMoreMessages && !hasLoadedAllMessages() && hasMembers) { + if (!isResetting && !isLoadingMoreMessages && !hasLoadedAllMessages() && hasMembers) { + isLoadingMoreMessages = true; var newState = StateManager.setLoadingMessages(viewState, true); render(newState) .then(function() { @@ -1276,31 +1283,18 @@ function( footer.on(CustomEvents.events.enter, SELECTORS.MESSAGE_TEXT_AREA, function(e, data) { var enterToSend = footer.attr('data-enter-to-send'); - if (enterToSend == true) { + if (enterToSend && enterToSend != 'false' && enterToSend != '0') { handleSendMessage(e, data); } }); PubSub.subscribe(MessageDrawerEvents.ROUTE_CHANGED, function(newRouteData) { if (newMessagesPollTimer) { - if (newRouteData.route == MessageDrawerRoutes.VIEW_CONVERSATION) { - newMessagesPollTimer.restart(); - } else { + if (newRouteData.route != MessageDrawerRoutes.VIEW_CONVERSATION) { newMessagesPollTimer.stop(); } } }); - - PubSub.subscribe(MessageDrawerEvents.PREFERENCES_UPDATED, function(preferences) { - var filteredPreferences = preferences.filter(function(preference) { - return preference.type == 'message_entertosend'; - }); - var enterToSendPreference = filteredPreferences.length ? filteredPreferences[0] : null; - - if (enterToSendPreference) { - footer.attr('data-enter-to-send', enterToSendPreference.value); - } - }); }; /** @@ -1529,6 +1523,7 @@ function( if (isNewConversation) { // Reset all of the states back to the beginning if we're loading a new // conversation. + isResetting = true; var renderPromise = null; var loggedInUserProfile = getLoggedInUserProfile(body); if (conversation) { @@ -1541,12 +1536,22 @@ function( return renderPromise .then(function() { + isResetting = false; // Focus the first element that can receieve it in the header. header.find(Constants.SELECTORS.CAN_RECEIVE_FOCUS).first().focus(); return; }) - .catch(Notification.exception); - } else if (viewState.type == CONVERSATION_TYPES.PRIVATE && action) { + .catch(function(error) { + isResetting = false; + Notification.exception(error); + }); + } + + // We're not loading a new conversation so we should reset the poll timer to try to load + // new messages. + resetMessagePollTimer(conversationId); + + if (viewState.type == CONVERSATION_TYPES.PRIVATE && action) { // There are special actions that the user can perform in a private (aka 1-to-1) // conversation. var currentOtherUserId = getOtherUserId(); diff --git a/message/amd/src/message_drawer_view_conversation_patcher.js b/message/amd/src/message_drawer_view_conversation_patcher.js index f1a5df97bda..c8662386df9 100644 --- a/message/amd/src/message_drawer_view_conversation_patcher.js +++ b/message/amd/src/message_drawer_view_conversation_patcher.js @@ -209,7 +209,11 @@ function( messagesDiff.missingFromA.forEach(function(message) { var before = findPositionInArray(dayCurrent.messages, function(candidate) { - return message.timeCreated < candidate.timeCreated; + if (message.timeCreated == candidate.timeCreated) { + return message.id < candidate.id; + } else { + return message.timeCreated < candidate.timeCreated; + } }); add.push({ diff --git a/message/amd/src/message_drawer_view_conversation_renderer.js b/message/amd/src/message_drawer_view_conversation_renderer.js index 56ef9366e2f..c5abf886ed1 100644 --- a/message/amd/src/message_drawer_view_conversation_renderer.js +++ b/message/amd/src/message_drawer_view_conversation_renderer.js @@ -637,33 +637,28 @@ function( * @return {Promise} Messages rendering promises. */ var renderAddMessages = function(header, body, footer, messages, datesCache) { - var messagesRenderPromises = messages.map(function(data) { - var formattedMessages = formatMessagesForTemplate([data.value], datesCache); - return Templates.render(TEMPLATES.MESSAGE, formattedMessages[0]); + var messagesData = messages.map(function(data) { + return data.value; }); + var formattedMessages = formatMessagesForTemplate(messagesData, datesCache); - return $.when.apply($, messagesRenderPromises).then(function() { - // Wait until all of the rendering is done for each of the messages - // to ensure they are added to the page in the correct order. - messages.forEach(function(data, index) { - messagesRenderPromises[index] - .then(function(html) { - if (data.before) { - var element = getMessageElement(body, data.before.id); - return $(html).insertBefore(element); - } else { - var dayContainer = getDayElement(body, data.day.timestamp); - var dayMessagesContainer = dayContainer.find(SELECTORS.DAY_MESSAGES_CONTAINER); - return dayMessagesContainer.append(html); - } - }) - .catch(function() { - // Silently ignore failed renders. - }); + return Templates.render(TEMPLATES.MESSAGES, {messages: formattedMessages}) + .then(function(html) { + var messageList = $(html); + messages.forEach(function(data) { + var messageHtml = messageList.find('[data-message-id="' + data.value.id + '"]'); + if (data.before) { + var element = getMessageElement(body, data.before.id); + return messageHtml.insertBefore(element); + } else { + var dayContainer = getDayElement(body, data.day.timestamp); + var dayMessagesContainer = dayContainer.find(SELECTORS.DAY_MESSAGES_CONTAINER); + return dayMessagesContainer.append(messageHtml); + } + }); + + return; }); - - return; - }); }; /** diff --git a/message/amd/src/message_drawer_view_conversation_state_manager.js b/message/amd/src/message_drawer_view_conversation_state_manager.js index 5c429e56f24..757183783fd 100644 --- a/message/amd/src/message_drawer_view_conversation_state_manager.js +++ b/message/amd/src/message_drawer_view_conversation_state_manager.js @@ -129,6 +129,10 @@ define(['jquery'], function($) { return -1; } else if (a.timeCreated > b.timeCreated) { return 1; + } else if (a.id < b.id) { + return -1; + } else if (a.id > b.id) { + return 1; } else { return 0; } diff --git a/message/amd/src/message_drawer_view_overview_section.js b/message/amd/src/message_drawer_view_overview_section.js index 92a6e831fe2..8a88ba822be 100644 --- a/message/amd/src/message_drawer_view_overview_section.js +++ b/message/amd/src/message_drawer_view_overview_section.js @@ -130,7 +130,7 @@ function( formattedConversation.userid = otherUser.id; formattedConversation.showonlinestatus = otherUser.showonlinestatus; - formattedConversation.isonline = otherUser.isosnline; + formattedConversation.isonline = otherUser.isonline; formattedConversation.isblocked = otherUser.isblocked; } @@ -354,6 +354,9 @@ function( imageurl: conversation.imageUrl, }; + // Cache the conversation. + loadedConversationsById[conversation.id] = conversation; + return Templates.render(TEMPLATES.CONVERSATIONS_LIST, {conversations: [formattedConversation]}) .then(function(html) { var contentContainer = LazyLoadList.getContentContainer(root); diff --git a/message/amd/src/message_repository.js b/message/amd/src/message_repository.js index 3eb4d470d37..8fa57e83885 100644 --- a/message/amd/src/message_repository.js +++ b/message/amd/src/message_repository.js @@ -446,6 +446,10 @@ define(['jquery', 'core/ajax', 'core/notification'], function($, Ajax, Notificat /** * Send messages to a conversation. + * + * @param {int} conversationId The conversation id + * @param {string[]} messages List of messages to send + * @return {object} jQuery promise */ var sendMessagesToConversation = function(conversationId, messages) { var formattedMessages = messages.map(function(message) { @@ -466,6 +470,10 @@ define(['jquery', 'core/ajax', 'core/notification'], function($, Ajax, Notificat /** * Send a message to a conversation. + * + * @param {int} conversationId The conversation id + * @param {string} text The message text + * @return {object} jQuery promise */ var sendMessageToConversation = function(conversationId, text) { return sendMessagesToConversation(conversationId, [text]) diff --git a/message/classes/api.php b/message/classes/api.php index e21059bd882..8cd32486672 100644 --- a/message/classes/api.php +++ b/message/classes/api.php @@ -855,6 +855,7 @@ class api { $userid, $conversationid, $includecontactrequests, + $includeprivacyinfo, $memberoffset, $memberlimit ); @@ -2897,18 +2898,20 @@ class api { * @param int $userid The user we are returning the conversation members for, used by helper::get_member_info. * @param int $conversationid The id of the conversation * @param bool $includecontactrequests Do we want to include contact requests with this data? + * @param bool $includeprivacyinfo Do we want to include privacy requests with this data? * @param int $limitfrom * @param int $limitnum * @return array */ public static function get_conversation_members(int $userid, int $conversationid, bool $includecontactrequests = false, - int $limitfrom = 0, int $limitnum = 0) : array { + bool $includeprivacyinfo = false, int $limitfrom = 0, + int $limitnum = 0) : array { global $DB; if ($members = $DB->get_records('message_conversation_members', ['conversationid' => $conversationid], 'timecreated ASC, id ASC', 'userid', $limitfrom, $limitnum)) { $userids = array_keys($members); - $members = helper::get_member_info($userid, $userids, $includecontactrequests); + $members = helper::get_member_info($userid, $userids, $includecontactrequests, $includeprivacyinfo); return $members; } diff --git a/message/externallib.php b/message/externallib.php index d3f60422aa9..56d3e5a1286 100644 --- a/message/externallib.php +++ b/message/externallib.php @@ -764,6 +764,8 @@ class core_message_external extends external_api { 'conversationid' => new external_value(PARAM_INT, 'The id of the conversation'), 'includecontactrequests' => new external_value(PARAM_BOOL, 'Do we want to include contact requests?', VALUE_DEFAULT, false), + 'includeprivacyinfo' => new external_value(PARAM_BOOL, 'Do we want to include privacy info?', + VALUE_DEFAULT, false), 'limitfrom' => new external_value(PARAM_INT, 'Limit from', VALUE_DEFAULT, 0), 'limitnum' => new external_value(PARAM_INT, 'Limit number', VALUE_DEFAULT, 0) ] @@ -776,12 +778,13 @@ class core_message_external extends external_api { * @param int $userid The user we are returning the conversation members for, used by helper::get_member_info. * @param int $conversationid The id of the conversation * @param bool $includecontactrequests Do we want to include contact requests with this data? + * @param bool $includeprivacyinfo Do we want to include privacy info? * @param int $limitfrom * @param int $limitnum * @return array */ public static function get_conversation_members(int $userid, int $conversationid, bool $includecontactrequests = false, - int $limitfrom = 0, int $limitnum = 0) { + bool $includeprivacyinfo = false, int $limitfrom = 0, int $limitnum = 0) { global $CFG, $USER; // Check if messaging is enabled. @@ -797,6 +800,7 @@ class core_message_external extends external_api { 'userid' => $userid, 'conversationid' => $conversationid, 'includecontactrequests' => $includecontactrequests, + 'includeprivacyinfo' => $includeprivacyinfo, 'limitfrom' => $limitfrom, 'limitnum' => $limitnum ]; @@ -812,9 +816,8 @@ class core_message_external extends external_api { throw new moodle_exception('You are not a member of this conversation.'); } - return \core_message\api::get_conversation_members($params['userid'], $params['conversationid'], $params['includecontactrequests'], - $params['limitfrom'], $params['limitnum']); + $params['includeprivacyinfo'], $params['limitfrom'], $params['limitnum']); } /** diff --git a/message/tests/externallib_test.php b/message/tests/externallib_test.php index 93777b621a1..1f23331ffe1 100644 --- a/message/tests/externallib_test.php +++ b/message/tests/externallib_test.php @@ -5509,12 +5509,12 @@ class core_message_externallib_testcase extends externallib_advanced_testcase { $this->assertCount(2, $writtenmessages); $this->assertObjectHasAttribute('id', $writtenmessages[0]); $this->assertEquals($user1->id, $writtenmessages[0]->useridfrom); - $this->assertEquals($messages[0]['text'], $writtenmessages[0]->text); + $this->assertEquals('

a message from user 1

', $writtenmessages[0]->text); $this->assertNotEmpty($writtenmessages[0]->timecreated); $this->assertObjectHasAttribute('id', $writtenmessages[1]); $this->assertEquals($user1->id, $writtenmessages[1]->useridfrom); - $this->assertEquals($messages[1]['text'], $writtenmessages[1]->text); + $this->assertEquals('

another message from user 1

', $writtenmessages[1]->text); $this->assertNotEmpty($writtenmessages[1]->timecreated); } @@ -5561,12 +5561,12 @@ class core_message_externallib_testcase extends externallib_advanced_testcase { $this->assertCount(2, $writtenmessages); $this->assertObjectHasAttribute('id', $writtenmessages[0]); $this->assertEquals($user1->id, $writtenmessages[0]->useridfrom); - $this->assertEquals($messages[0]['text'], $writtenmessages[0]->text); + $this->assertEquals('

a message from user 1 to group conv

', $writtenmessages[0]->text); $this->assertNotEmpty($writtenmessages[0]->timecreated); $this->assertObjectHasAttribute('id', $writtenmessages[1]); $this->assertEquals($user1->id, $writtenmessages[1]->useridfrom); - $this->assertEquals($messages[1]['text'], $writtenmessages[1]->text); + $this->assertEquals('

another message from user 1 to group conv

', $writtenmessages[1]->text); $this->assertNotEmpty($writtenmessages[1]->timecreated); }