diaspora/app/assets/javascripts/app/views/conversations_inbox_view.js
cmrd Senya 621d269760
MD editor coversations&comments: refactorings
Javascript refactorings for better maintainability:
* simplePreview function to avoid code duplication
* Preloaded conversation is processed in a slightly different way
* Split isPreviewOrTexareaNotEmpty function since it has more than one responsibility
2017-08-09 21:49:25 +02:00

95 lines
3 KiB
JavaScript

// @license magnet:?xt=urn:btih:0b31508aeb0634b347b8270c7bee4d411b5d4109&dn=agpl-3.0.txt AGPL-v3-or-Later
app.views.ConversationsInbox = app.views.Base.extend({
el: "#conversations-container",
events: {
"click .conversation-wrapper": "displayConversation",
"click .new-conversation-btn": "displayNewConversation"
},
initialize: function(conversationId) {
this.conversationForm = new app.views.ConversationsForm();
// Creates markdown editor in case of displaying preloaded conversation
if (conversationId != null) {
this.renderMarkdownEditor();
}
this.setupConversation();
},
renderMarkdownEditor: function() {
this.conversationForm.renderMarkdownEditor("#conversation-show .conversation-message-text");
},
renderConversation: function(conversationId) {
var self = this;
$.ajax({
url: Routes.conversationRaw(conversationId),
dataType: "html",
success: function(data) {
self.$el.find("#conversation-new").addClass("hidden");
self.$el.find("#conversation-show").removeClass("hidden").html(data);
self.selectConversation(conversationId);
self.setupConversation();
self.renderMarkdownEditor();
autosize(self.$("#conversation-show textarea"));
}
});
},
selectConversation: function(conversationId) {
this.$el.find("#conversation-inbox .stream-element").removeClass("selected");
if (conversationId) {
this.$el.find("#conversation-inbox .stream-element[data-guid='" + conversationId + "']").addClass("selected");
}
},
displayNewConversation: function(evt) {
evt.preventDefault();
evt.stopPropagation();
this.$el.find("#conversation-new").removeClass("hidden");
this.$el.find("#conversation-show").addClass("hidden");
this.selectConversation();
app.router.navigate(Routes.conversations());
},
setupConversation: function() {
app.helpers.timeago($(this.el));
$(".control-icons a").tooltip({placement: "bottom"});
this.setupAvatarFallback(this.$el);
var conv = $(".conversation-wrapper .stream-element.selected"),
cBadge = $("#conversations-link .badge");
if (conv.hasClass("unread")) {
var unreadCount = parseInt(conv.find(".unread-message-count").text(), 10);
if (cBadge.text() !== "") {
cBadge.text().replace(/\d+/, function(num) {
num = parseInt(num, 10) - unreadCount;
if (num > 0) {
cBadge.text(num);
} else {
cBadge.text(0).addClass("hidden");
}
});
}
conv.removeClass("unread");
conv.find(".unread-message-count").remove();
var pos = $("#first_unread").offset().top - 50;
$("html").animate({scrollTop: pos});
} else {
$("html").animate({scrollTop: 0});
}
},
displayConversation: function(evt) {
var $target = $(evt.target).closest(".conversation-wrapper");
app.router.navigate($target.data("conversation-path"), {trigger: true});
}
});
// @license-end