diff --git a/.meteor/packages b/.meteor/packages index aa90b2de72b5..4a4bc0c6a199 100644 --- a/.meteor/packages +++ b/.meteor/packages @@ -58,3 +58,4 @@ todda00:friendly-slugs underscorestring:underscore.string yasaricli:slugify konecty:nrr +kevohagan:sweetalert diff --git a/.meteor/versions b/.meteor/versions index 9da48a853e8b..322a06a3c8ef 100644 --- a/.meteor/versions +++ b/.meteor/versions @@ -46,6 +46,7 @@ jparker:crypto-md5@0.1.1 jparker:gravatar@0.3.1 jquery@1.11.3_2 json@1.0.3 +kevohagan:sweetalert@1.0.0 konecty:autolinker@1.0.2 konecty:delayed-task@1.0.0 konecty:mongo-counter@0.0.3 diff --git a/client/lib/chatMessages.coffee b/client/lib/chatMessages.coffee index ef11ed6de1b0..e9e2d03be9a8 100644 --- a/client/lib/chatMessages.coffee +++ b/client/lib/chatMessages.coffee @@ -92,6 +92,12 @@ stopTyping() Meteor.call 'sendMessage', { rid: rid, msg: msg, day: window.day } + deleteMsg = (element) -> + id = element.getAttribute("id") + Meteor.call 'deleteMessage', { id: id }, (error, result) -> + if error + return Errors.throw error.reason + update = (id, input) -> if _.trim(input.value) isnt '' msg = input.value @@ -171,6 +177,7 @@ # isScrollable: isScrollable # toBottom: toBottom keydown: keydown + deleteMsg: deleteMsg send: send init: init edit: edit diff --git a/client/lib/collections.coffee b/client/lib/collections.coffee index 1b5c116c1a2e..e312eedc8af4 100644 --- a/client/lib/collections.coffee +++ b/client/lib/collections.coffee @@ -13,3 +13,6 @@ Meteor.startup -> changed: (record) -> ChatMessageHistory.update {_id: record._id, msg: {$ne: record.msg}}, record + + removed: (record) -> + ChatMessageHistory.remove {_id: record._id} diff --git a/client/methods/updateMessage.coffee b/client/methods/updateMessage.coffee index bc10c20a1442..edad52307844 100644 --- a/client/methods/updateMessage.coffee +++ b/client/methods/updateMessage.coffee @@ -15,3 +15,13 @@ Meteor.methods $set: ets: message.ets message: message.msg + + deleteMessage: (message) -> + if not Meteor.userId() + throw new Meteor.Error 203, t('general.User_logged_out') + + Tracker.nonreactive -> + + ChatMessage.remove + _id: message.id + 'u._id': Meteor.userId() diff --git a/client/stylesheets/base.less b/client/stylesheets/base.less index fe290e2c6ec6..6333cfb63a37 100644 --- a/client/stylesheets/base.less +++ b/client/stylesheets/base.less @@ -1956,6 +1956,13 @@ a.github-fork { &.own:hover .edit-message { display: inline-block; } + .delete-message { + display: none; + cursor: pointer; + } + &.own:hover .delete-message { + display: inline-block; + } .user { display: inline-block; font-weight: 600; @@ -1989,8 +1996,8 @@ a.github-fork { .info { position: absolute; text-align: right; - left: -15px; - width: 55px; + left: -20px; + width: 65px; .time { display: none; } @@ -1999,8 +2006,12 @@ a.github-fork { } .edit-message { float: left; - margin-left: 5px; + margin-left: 1px; + } + .delete-message { + float: left; } + } &:hover { .time { diff --git a/client/views/app/message.html b/client/views/app/message.html index abe36fb80683..dbabfeeda17e 100644 --- a/client/views/app/message.html +++ b/client/views/app/message.html @@ -8,6 +8,7 @@ ({{_ "edited"}}) {{/if}} +
{{{body}}} diff --git a/client/views/app/room.coffee b/client/views/app/room.coffee index 500e2602362e..29201639e5cd 100644 --- a/client/views/app/room.coffee +++ b/client/views/app/room.coffee @@ -441,6 +441,23 @@ Template.room.events Session.set('flexOpened', true) Session.set('showUserInfo', $(e.currentTarget).data('username')) + 'click .delete-message': (event) -> + msg = event.currentTarget.parentNode.parentNode + return if msg.classList.contains("system") + swal { + title: t('Are_you_sure') + text: t('You_will_not_be_able_to_recover') + type: 'warning' + showCancelButton: true + confirmButtonColor: '#DD6B55' + confirmButtonText: t('Yes_delete_it') + cancelButtonText: t('Cancel') + closeOnConfirm: false + html: false + }, -> + swal t('Deleted'), t('Your_entry_has_been_deleted'), 'success' + ChatMessages.deleteMsg(msg) + Template.room.onCreated -> console.log 'room.onCreated' if window.rocketDebug # this.scrollOnBottom = true diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json index cfd29d653f38..56a722b61844 100755 --- a/i18n/en.i18n.json +++ b/i18n/en.i18n.json @@ -8,6 +8,7 @@ "and" : "and", "are_also_typing" : "are also typing", "are_typing" : "are typing", + "Are_you_sure" : "Are you sure?", "away" : "away", "Away" : "Away", "busy" : "busy", @@ -29,6 +30,7 @@ "Create_new_private_group" : "Create a new private group", "Created_at" : "Created at", "Direct_Messages" : "Direct Messages", + "Deleted" : "Deleted!", "edited" : "edited", "Email_or_username" : "Email or username", "Email_verified" : "Email verified", @@ -146,5 +148,8 @@ "Welcome_to_the" : "Welcome to the", "you_are_in_preview_mode_of" : "You are in preview mode of channel #__room_name__", "You_neeed_confirm_email" : "You need to confirm your email to login!", - "Your_Open_Source_solution" : "Your own Open Source chat solution" + "Your_Open_Source_solution" : "Your own Open Source chat solution", + "You_will_not_be_able_to_recover" : "You will not be able to recover!", + "Yes_delete_it" : "Yes, delete it!", + "Your_entry_has_been_deleted" : "Your entry has been deleted." } diff --git a/server/methods/updateMessage.coffee b/server/methods/updateMessage.coffee index c9dd16a0c8a9..2a08d6aa4901 100644 --- a/server/methods/updateMessage.coffee +++ b/server/methods/updateMessage.coffee @@ -21,3 +21,13 @@ Meteor.methods Meteor.defer -> RocketChat.callbacks.run 'afterSaveMessage', message + + deleteMessage: (message) -> + if not Meteor.userId() + throw new Meteor.Error('invalid-user', "[methods] deleteMessage -> Invalid user") + + console.log '[methods] deleteMessage -> '.green, 'userId:', Meteor.userId(), 'arguments:', arguments + + ChatMessage.remove + _id: message.id + 'u._id': Meteor.userId