Made messages more thread-like (replies, editing, etc.)

This commit is contained in:
MrYummy
2017-06-15 14:27:42 +02:00
parent 80026caebc
commit 9b50ec652c
21 changed files with 380 additions and 21 deletions

View File

@@ -44,4 +44,4 @@
<% else %>
<p>Please <%= link_to "Log in", login_path(return_path: request.env['PATH_INFO']), action: "new" %> to post a reply.</p>
<% end %>
</div>
</div>

View File

@@ -0,0 +1,5 @@
<%= form_for [reply.get_message, reply] do |f| %>
<%= render partial: "md_editor", locals: {name: "messagereply[text]", content: reply.text} %>
<p><%= f.submit "Reply", class: "btn blue" %></p>
<% end %>

View File

@@ -0,0 +1,17 @@
<div class="item-group thread-reply with-avatar" id="reply-<%= reply.id %>">
<div class="header">
<%= link_to(reply.author.avatar(64), reply.author, title: reply.author.ign) %>
<%= render partial: "users/username", locals: { user: reply.author } %>
<%= link_to "#reply-#{reply.id}" do %>
<%= ago reply.created_at %>
<% end %>
<%= link_to "edit", edit_message_messagereply_path(reply.message, reply), class: "editlink" if mod? || reply.author.is?(current_user) %>
<div class="clear-right"></div>
</div>
<div class="items">
<div class="item content">
<%= render_md(reply.text).html_safe %>
</div>
</div>
</div>

View File

@@ -0,0 +1,15 @@
<% title "Edit Message Reply: #{@reply.message.subject}" %>
<%
position = @reply.message.replies.index(@reply)
page = position / Kaminari.config.default_per_page + 1
%>
<%= link_to "Messages", messages_path %> → <%= link_to @reply.message, message_path(@reply.message, page: page) + "#reply-#{@reply.id}" %> → Edit reply
<h1>Edit reply</h1>
<%= form_for [@reply.message, @reply] do |f| %>
<%= render partial: "md_editor", locals: {name: "messagereply[text]", content: @reply.text} %>
<p><%= f.submit "Reply", class: "btn blue left" %></p>
<% end %>
<p><%= button_to "Delete reply", [@reply.message, @reply], method: "delete", data: {confirm: "Delete reply forever?"}, class: "btn red right" %></p>
<div class="clear"></div>

View File

@@ -0,0 +1,17 @@
<% title "Edit Thread: #{@message}" %>
<h1>Edit thread</h1>
<%= link_to "Messages", messages_path %> → <%= link_to @message, @message %> → Edit Message
<%= form_for @message do |f|%>
<div class="table-cell full-width">
<%= f.text_field :subject, placeholder: "Subject" %>
</div>
<br>
<%= render partial: "md_editor", locals: {name: "message[text]", content: @message.text} %>
<p><%= f.submit "Update message", class: "btn blue left" %></p>
<%= f.hidden_field :user_sender, value: @message.user_sender %>
<%= f.hidden_field :user_target, value: @message.user_target %>
<% end %>
<%= button_to "Delete ", @message, :method => "delete", data: {confirm: "Delete message & comments forever?"}, class: "btn red right" %>
<div class="clear"></div>

View File

@@ -15,13 +15,21 @@
<% @messages.each do |message| %>
<div class="item-group with-avatar">
<div class="header">
<%= link_to(message.user_sender.avatar(64), message.user_sender, title: message.user_sender.ign) %>
<%= render partial: "users/username", locals: { user: message.user_sender } %>
<%= ago message.created_at %>
<span style="font-size:18px">
<%
if current_user == message.user_sender
user = message.user_target
else
user = message.user_sender
end
%>
<%= link_to(user.avatar(64), user, title: user.ign) %>
<%= render partial: "users/username", locals: { user: user } %>
<span style="font-size:16px">
&nbsp;
<b><%= link_to message.subject, message %></b>
&nbsp; | &nbsp;
<b><%= link_to message.subject, messages_path %></b>
</span>
<%= ago message.created_at %>
<div class="right">
<%= link_to "Delete message", message, :method => "delete", class: "editlink", data: {confirm: "Delete this message forever?"} %>
</div>
@@ -29,7 +37,21 @@
</div>
<div class="items">
<div class="item">
<%= render_md(truncate message.text, length: 20, omission: "...").html_safe %>
<%= truncate message.text, length: 20, omission: "..." %>
<div class="item-info items bold">
<% if rpl = message.replies.last %>
<%= rpl.author.name %>
<%
position = message.replies.count - 1
page = position / Kaminari.config.default_per_page + 1
%>
<%= link_to "replied", message_path(message, page: page) + "#reply-#{rpl.id}" %>
<%= ago rpl.created_at %>.
<% else %>
No replies yet.
<% end %>
</div>
<div class="clear"></div>
</div>
</div>
</div>

View File

@@ -0,0 +1,33 @@
<%= link_to "Messages", messages_path %>
<h1><%= title @message.subject %></h1>
<div class="item-group thread with-avatar" id="message-<%= @message.id %>">
<div class="header">
<%= link_to(@message.sender.avatar(64), @message.sender, title: @message.sender.ign) %>
<%= render partial: "users/username", locals: { user: @message.sender } %>
<%= link_to p do %>
<%= ago @message.created_at %>
<% end %>
<%= link_to "edit", edit_message_path(@message), class: "editlink" if mod? || @message.sender.is?(current_user) %>
<div class="clear-right"></div>
</div>
<div class="items">
<% if @message.edited? %>
<div class="item edited">
Last edited <%= ago @message.updated_at %> by <%= link_to @message.editor.name, @message.editor %>.
</div>
<% end %>
<div class="item content">
<%= render_md(@message.text).html_safe %>
</div>
</div>
</div>
<div id="replies">
<h3><%= "#{pluralize(@message.replies.size, 'reply')}." %></h3>
<% @replies.each do |reply| %>
<%= render partial: "messagereplies/reply", locals: {reply: reply} %>
<% end %>
<%= paginate @replies %>
<%= render partial: "messagereplies/new", locals: {reply: Messagereply.new(message: @message)} %>
</div>

View File

@@ -1,4 +1,4 @@
<%= form_for [reply.thread, reply] do |f| %>
<%= render partial: "md_editor", locals: {name: "threadreply[content]", content: reply.content} %>
<p><%= f.submit "Reply#{ ' (Locked)' if reply.thread.locked? }", class: "btn blue" %></p>
<% end %>
<% end %>

View File

@@ -12,4 +12,4 @@
<p><%= f.submit "Reply", class: "btn blue left" %></p>
<% end %>
<p><%= button_to "Delete reply", [@reply.thread, @reply], method: "delete", data: {confirm: "Delete reply forever?"}, class: "btn red right" %></p>
<div class="clear"></div>
<div class="clear"></div>

View File

@@ -11,8 +11,8 @@
<%= link_to "edit profile", edit_user_path(@user), :class => "btn blue" %>
<% end %>
<% if @user.is?(current_user) %>
<%= link_to "Private Messages (#{Message.where(user_target: current_user).count})", messages_path, :class => "btn blue" %>
<% else %>
<%= link_to "Private Messages (#{Message.where("user_sender_id = ? OR user_target_id = ?", current_user.id, current_user.id).count})", messages_path, :class => "btn blue" %>
<% elsif current_user %>
<%= link_to "Send this user a message", new_message_path(user_target: @user.ign), :class => "btn blue" %>
<% end %>
</div>