diff --git a/app/assets/stylesheets/common/000_vars.css.scss b/app/assets/stylesheets/common/000_vars.css.scss
index c8e6dbffd..3a8494840 100644
--- a/app/assets/stylesheets/common/000_vars.css.scss
+++ b/app/assets/stylesheets/common/000_vars.css.scss
@@ -2,7 +2,7 @@ $link_color: #006FFA;
$link_hover_color: #9093FF;
$border_color: #CCC;
$highlight_color: #F0F0F0;
-$reverse_highlight_color: #FFFDF6;
+$reverse_highlight_color: #FFFDF4;
$h1_size: 2em;
$h2_size: 1.5em;
$h3_size: 1.16667em;
diff --git a/app/assets/stylesheets/common/tables.css.scss b/app/assets/stylesheets/common/tables.css.scss
index 2bba85ab6..ad4d63287 100644
--- a/app/assets/stylesheets/common/tables.css.scss
+++ b/app/assets/stylesheets/common/tables.css.scss
@@ -35,3 +35,4 @@ table.striped {
background-color: #FAFAFA;
}
}
+
\ No newline at end of file
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index 5cb1aaadb..ffe778bb7 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -27,7 +27,7 @@ module ApplicationHelper
zone = time.strftime("%z")
datetime = time.strftime("%Y-%m-%dT%H:%M" + zone[0, 3] + ":" + zone[3, 2])
- content_tag(:time, content || datetime, :datetime => datetime)
+ content_tag(:time, content || datetime, :datetime => datetime, :title => time.to_formatted_s)
end
def compact_time(time)
diff --git a/app/helpers/post_versions_helper.rb b/app/helpers/post_versions_helper.rb
index ad8771876..776c528aa 100644
--- a/app/helpers/post_versions_helper.rb
+++ b/app/helpers/post_versions_helper.rb
@@ -1,2 +1,16 @@
module PostVersionsHelper
+ def post_version_diff(post_version)
+ diff = post_version.diff(post_version.previous)
+ html = []
+ diff[:added_tags].each do |tag|
+ html << '' + tag + ''
+ end
+ diff[:removed_tags].each do |tag|
+ html << '' + tag + ''
+ end
+ diff[:unchanged_tags].each do |tag|
+ html << '' + tag + '' unless tag =~ /^(?:rating|source):/
+ end
+ return html.join(" ").html_safe
+ end
end
diff --git a/app/models/post.rb b/app/models/post.rb
index 64832df52..83932800d 100644
--- a/app/models/post.rb
+++ b/app/models/post.rb
@@ -934,40 +934,24 @@ class Post < ActiveRecord::Base
versions.create(
:rating => rating,
:source => source,
- :add_tags => tag_string,
+ :tags => tag_string,
:parent_id => parent_id
)
elsif rating_changed? || source_changed? || parent_id_changed? || tag_string_changed?
versions.create(
- :rating => rating_changed? ? rating : nil,
- :source => source_changed? ? source : nil,
- :add_tags => (tag_array - tag_array_was).join(" "),
- :del_tags => (tag_array_was - tag_array).join(" "),
- :parent_id => parent_id_changed? ? parent_id : nil
+ :rating => rating,
+ :source => source,
+ :tags => tag_string,
+ :parent_id => parent_id
)
end
end
def revert_to(target)
- base_tags = []
- base_rating = "q"
- base_source = nil
- base_parent_id = nil
-
- versions.each do |version|
- if version.id <= target.id
- base_tags += version.add_tag_array
- base_tags -= version.del_tag_array
- base_rating = version.rating if version.rating
- base_source = version.source if version.source
- base_parent_id = version.parent_id if version.parent_id
- end
- end
-
- self.tag_string = base_tags.sort.join(" ")
- self.rating = base_rating
- self.source = base_source
- self.parent_id = base_parent_id
+ self.tag_string = target.tags
+ self.rating = target.rating
+ self.source = target.source
+ self.parent_id = target.parent_id
end
def revert_to!(target)
diff --git a/app/models/post_version.rb b/app/models/post_version.rb
index 0a99660fb..3a175acdd 100644
--- a/app/models/post_version.rb
+++ b/app/models/post_version.rb
@@ -17,12 +17,8 @@ class PostVersion < ActiveRecord::Base
self.updater_ip_addr = CurrentUser.ip_addr
end
- def add_tag_array
- @add_tag_array ||= add_tags.scan(/\S+/)
- end
-
- def del_tag_array
- @del_tag_array ||= del_tags.scan(/\S+/)
+ def tag_array
+ @tag_array ||= tags.scan(/\S+/)
end
def presenter
@@ -30,8 +26,45 @@ class PostVersion < ActiveRecord::Base
end
def reload
- @add_tag_array = nil
- @del_tag_array = nil
+ @tag_array = nil
super
end
+
+ def sequence_for_post
+ versions = PostVersion.where(:post_id => post_id).order("id desc").all
+ diffs = []
+ versions.each_index do |i|
+ if i < versions.size - 1
+ diffs << versions[i].diff(versions[i + 1])
+ end
+ end
+ return diffs
+ end
+
+ def diff(version)
+ latest_tags = post.tag_array
+ new_tags = tag_array
+ new_tags << "rating:#{rating}" if rating.present?
+ new_tags << "parent:#{parent_id}" if parent_id.present?
+ new_tags << "source:#{source}" if source.present?
+ old_tags = version.present? ? version.tag_array : []
+ if version.present?
+ old_tags << "rating:#{version.rating}" if version.rating.present?
+ old_tags << "parent:#{version.parent_id}" if version.parent_id.present?
+ old_tags << "source:#{version.source}" if version.source.present?
+ end
+
+ return {
+ :added_tags => new_tags - old_tags,
+ :removed_tags => old_tags - new_tags,
+ :unchanged_tags => new_tags & old_tags,
+ :obsolete_added_tags => new_tags - latest_tags,
+ :obsolete_removed_tags => old_tags & latest_tags,
+ }
+ end
+
+ def previous
+ PostVersion.where("post_id = ? and id < ?", post_id, id).order("id desc").first
+ end
+
end
diff --git a/app/presenters/post_version_presenter.rb b/app/presenters/post_version_presenter.rb
index 4170fa9e9..b7b875e12 100644
--- a/app/presenters/post_version_presenter.rb
+++ b/app/presenters/post_version_presenter.rb
@@ -7,8 +7,7 @@ class PostVersionPresenter < Presenter
def changes
html = []
- html << post_version.del_tag_array.map {|x| "#{h(x)}"}
- html << post_version.add_tag_array.map {|x| "#{h(x)}"}
+ html << post_version.tag_array
html << "source:#{h(post_version.source)}" if post_version.source
html << "rating:#{h(post_version.rating)}" if post_version.rating
html << "parent:#{post_version.parent_id}" if post_version.parent_id
diff --git a/app/views/post_versions/_listing.html.erb b/app/views/post_versions/_listing.html.erb
index 12f1b7343..bb5acf24d 100644
--- a/app/views/post_versions/_listing.html.erb
+++ b/app/views/post_versions/_listing.html.erb
@@ -16,7 +16,7 @@
<% post_versions.each do |post_version| %>