FIX: revision history UI

This commit is contained in:
Régis Hanol 2014-03-11 18:51:26 +01:00
parent 380a894222
commit aece2b61a9
4 changed files with 38 additions and 46 deletions

View File

@ -12,17 +12,11 @@ Discourse.HistoryController = Discourse.ObjectController.extend(Discourse.ModalF
viewMode: "side_by_side", viewMode: "side_by_side",
refresh: function(postId, postVersion) { refresh: function(postId, postVersion) {
this.setProperties({ this.set("loading", true);
loading: true,
viewMode: Discourse.Mobile.mobileView ? "inline" : "side_by_side"
});
var self = this; var self = this;
Discourse.Post.loadRevision(postId, postVersion).then(function (result) { Discourse.Post.loadRevision(postId, postVersion).then(function (result) {
self.setProperties({ self.setProperties({ loading: false, model: result });
loading: false,
model: result
});
}); });
}, },
@ -46,9 +40,9 @@ Discourse.HistoryController = Discourse.ObjectController.extend(Discourse.ModalF
var curCategory = Discourse.Category.findById(changes.current_category_id); var curCategory = Discourse.Category.findById(changes.current_category_id);
var raw = ""; var raw = "";
var opts = { allowUncategorized: true };
prevCategory = Discourse.HTML.categoryLink(prevCategory); prevCategory = Discourse.HTML.categoryLink(prevCategory, opts);
curCategory = Discourse.HTML.categoryLink(curCategory); curCategory = Discourse.HTML.categoryLink(curCategory, opts);
if(viewMode === "side_by_side_markdown" || viewMode === "side_by_side") { if(viewMode === "side_by_side_markdown" || viewMode === "side_by_side") {
raw = "<div class='span8'>" + prevCategory + "</div> <div class='span8 offset1'>" + curCategory + "</div>"; raw = "<div class='span8'>" + prevCategory + "</div> <div class='span8 offset1'>" + curCategory + "</div>";
@ -64,7 +58,7 @@ Discourse.HistoryController = Discourse.ObjectController.extend(Discourse.ModalF
return raw; return raw;
}.property("inline", "side_by_side", "side_by_side_markdown", "viewMode"), }.property("viewMode", "category_changes"),
title_diff: function() { title_diff: function() {
var viewMode = this.get("viewMode"); var viewMode = this.get("viewMode");
@ -72,11 +66,11 @@ Discourse.HistoryController = Discourse.ObjectController.extend(Discourse.ModalF
viewMode = "side_by_side"; viewMode = "side_by_side";
} }
return this.get("title_changes." + viewMode); return this.get("title_changes." + viewMode);
}.property("inline", "side_by_side", "side_by_side_markdown", "viewMode"), }.property("viewMode", "title_changes"),
body_diff: function() { body_diff: function() {
return this.get("body_changes." + this.get("viewMode")); return this.get("body_changes." + this.get("viewMode"));
}.property("inline", "side_by_side", "side_by_side_markdown", "viewMode"), }.property("viewMode", "body_changes"),
actions: { actions: {
loadFirstVersion: function() { this.refresh(this.get("post_id"), 2); }, loadFirstVersion: function() { this.refresh(this.get("post_id"), 2); },

View File

@ -23,12 +23,14 @@
</div> </div>
<div id="revisions"> <div id="revisions">
{{#if title_changes}} {{#if title_changes}}
<h2>{{{title_diff}}}</h2> <div class="row">
<h2>{{{title_diff}}}</h2>
</div>
{{/if}} {{/if}}
{{#if category_changes}} {{#if category_changes}}
<div class="category-diff"> <div class="row">
{{{category_diff}}} {{{category_diff}}}
</div> </div>
{{/if}} {{/if}}
{{{body_diff}}} {{{body_diff}}}
</div> </div>

View File

@ -24,6 +24,9 @@
} }
#revisions { #revisions {
word-wrap: break-word; word-wrap: break-word;
.row, table {
margin-top: 10px;
}
} }
img { img {
max-width: 670px; max-width: 670px;

View File

@ -7,42 +7,38 @@ class PostRevision < ActiveRecord::Base
serialize :modifications, Hash serialize :modifications, Hash
def body_changes def body_changes
changes_for("cooked", "raw") cooked_diff = DiscourseDiff.new(previous("cooked"), current("cooked"))
raw_diff = DiscourseDiff.new(previous("raw"), current("raw"))
{
inline: cooked_diff.inline_html,
side_by_side: cooked_diff.side_by_side_html,
side_by_side_markdown: raw_diff.side_by_side_markdown
}
end end
def category_changes def category_changes
prev = previous("category_id")
cur = current("category_id")
return if prev == cur
{ {
previous_category_id: previous("category_id"), previous_category_id: prev,
current_category_id: current("category_id"), current_category_id: cur,
} }
end end
def title_changes def title_changes
changes_for("title", nil, true) prev = "<div>#{CGI::escapeHTML(previous("title"))}</div>"
end cur = "<div>#{CGI::escapeHTML(current("title"))}</div>"
return if prev == cur
def changes_for(name, markdown=nil, wrap=false)
prev = previous(name)
cur = current(name)
if wrap
prev = "<div>#{CGI::escapeHTML(prev)}</div>"
cur = "<div>#{CGI::escapeHTML(cur)}</div>"
end
diff = DiscourseDiff.new(prev, cur) diff = DiscourseDiff.new(prev, cur)
result = { {
inline: diff.inline_html, inline: diff.inline_html,
side_by_side: diff.side_by_side_html side_by_side: diff.side_by_side_html
} }
if markdown
diff = DiscourseDiff.new(previous(markdown), current(markdown))
result[:side_by_side_markdown] = diff.side_by_side_markdown
end
result
end end
def previous(field) def previous(field)
@ -54,12 +50,9 @@ class PostRevision < ActiveRecord::Base
end end
def previous_revisions def previous_revisions
@previous_revs ||= @previous_revs ||= PostRevision.where("post_id = ? AND number < ?", post_id, number)
PostRevision.where("post_id = ? AND number < ?", .order("number desc")
post_id, number .to_a
)
.order("number desc")
.to_a
end end
def has_topic_data? def has_topic_data?