FIX: revision history UI
This commit is contained in:
parent
380a894222
commit
aece2b61a9
|
@ -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); },
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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?
|
||||||
|
|
Loading…
Reference in New Issue