From 59de989e9b7d4d371af4f8ecd6a1fa4c5c2f3c32 Mon Sep 17 00:00:00 2001 From: Gabriela Navarro Date: Thu, 2 Jul 2015 14:20:03 +0000 Subject: [PATCH] Add view for new rate and JS behaviour for mouse related things --- plugins/communities_ratings/controllers/communities_ratings_plugin_profile_controller.rb | 3 +++ plugins/communities_ratings/lib/communities_ratings_plugin.rb | 8 ++++++++ plugins/communities_ratings/lib/ext/comments.rb | 6 ++++++ plugins/communities_ratings/lib/ext/community.rb | 4 +++- plugins/communities_ratings/public/images/star-negative.png | Bin 0 -> 642 bytes plugins/communities_ratings/public/images/star-positive.png | Bin 0 -> 637 bytes plugins/communities_ratings/public/rate.js | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ plugins/communities_ratings/style.css | 22 ++++++++++++++++++++++ plugins/communities_ratings/views/communities_ratings_plugin_profile/new_rating.html.erb | 25 +++++++++++++++++++++++++ 9 files changed, 133 insertions(+), 1 deletion(-) create mode 100644 plugins/communities_ratings/lib/ext/comments.rb create mode 100644 plugins/communities_ratings/public/images/star-negative.png create mode 100644 plugins/communities_ratings/public/images/star-positive.png create mode 100644 plugins/communities_ratings/public/rate.js create mode 100644 plugins/communities_ratings/style.css create mode 100644 plugins/communities_ratings/views/communities_ratings_plugin_profile/new_rating.html.erb diff --git a/plugins/communities_ratings/controllers/communities_ratings_plugin_profile_controller.rb b/plugins/communities_ratings/controllers/communities_ratings_plugin_profile_controller.rb index c626301..8420d39 100644 --- a/plugins/communities_ratings/controllers/communities_ratings_plugin_profile_controller.rb +++ b/plugins/communities_ratings/controllers/communities_ratings_plugin_profile_controller.rb @@ -27,6 +27,9 @@ class CommunitiesRatingsPluginProfileController < ProfileController end end + def new_rating + end + private # If there is already a rate by the current logged user to this community diff --git a/plugins/communities_ratings/lib/communities_ratings_plugin.rb b/plugins/communities_ratings/lib/communities_ratings_plugin.rb index ef85463..b689ef5 100644 --- a/plugins/communities_ratings/lib/communities_ratings_plugin.rb +++ b/plugins/communities_ratings/lib/communities_ratings_plugin.rb @@ -9,4 +9,12 @@ class CommunitiesRatingsPlugin < Noosfero::Plugin # FIXME _("A plugin that does this and that.") end + + def stylesheet? + true + end + + def js_files + 'public/rate.js' + end end diff --git a/plugins/communities_ratings/lib/ext/comments.rb b/plugins/communities_ratings/lib/ext/comments.rb new file mode 100644 index 0000000..629cdd7 --- /dev/null +++ b/plugins/communities_ratings/lib/ext/comments.rb @@ -0,0 +1,6 @@ +require_dependency "comment" + +class Comment + alias :community :source + alias :community= :source= +end diff --git a/plugins/communities_ratings/lib/ext/community.rb b/plugins/communities_ratings/lib/ext/community.rb index a0e9a3b..d89ca6a 100644 --- a/plugins/communities_ratings/lib/ext/community.rb +++ b/plugins/communities_ratings/lib/ext/community.rb @@ -2,4 +2,6 @@ require_dependency 'community' Community.class_eval do has_many :community_ratings -end \ No newline at end of file + + has_many :comments, :class_name => 'Comment', :foreign_key => 'source_id', :dependent => :destroy, :order => 'created_at asc' +end diff --git a/plugins/communities_ratings/public/images/star-negative.png b/plugins/communities_ratings/public/images/star-negative.png new file mode 100644 index 0000000..41973e7 Binary files /dev/null and b/plugins/communities_ratings/public/images/star-negative.png differ diff --git a/plugins/communities_ratings/public/images/star-positive.png b/plugins/communities_ratings/public/images/star-positive.png new file mode 100644 index 0000000..ca15335 Binary files /dev/null and b/plugins/communities_ratings/public/images/star-positive.png differ diff --git a/plugins/communities_ratings/public/rate.js b/plugins/communities_ratings/public/rate.js new file mode 100644 index 0000000..20abbb4 --- /dev/null +++ b/plugins/communities_ratings/public/rate.js @@ -0,0 +1,66 @@ +(function($, undefined) { + "use strict"; + + function star_filter(start, end, elements) { + var test_regex = undefined; + + if (end >= start) { + test_regex = new RegExp("["+(start)+"-"+(end)+"]"); + } else { + test_regex = new RegExp("[]"); + } + + var result = elements.filter(function(i, element) { + var index = parseInt(element.getAttribute("data-star-index")); + + return test_regex.test(index); + }); + + return result; + } + + + function set_star_hover_actions() { + var star_selected = undefined; + + $(".star-negative") + .on("mouseover", function() { + var index = parseInt(this.getAttribute("data-star-index")); + var previous_stars = undefined; + + if (star_selected !== undefined) { + previous_stars = star_filter(star_selected+1, index, $(".star-negative")); + } else { + previous_stars = star_filter(0, index, $(".star-negative")); + } + + previous_stars.switchClass("star-negative", "star-positive"); + }) + + .on("mouseout", function() { + var index = parseInt(this.getAttribute("data-star-index")); + + var previous_stars = undefined; + + if (star_selected !== undefined) { + previous_stars = star_filter(star_selected+1, 4, $(".star-positive")); + } else { + previous_stars = star_filter(0, index, $(".star-positive")); + } + + previous_stars.switchClass("star-positive", "star-negative"); + }) + + .on("click", function() { + var index = parseInt(this.getAttribute("data-star-index")); + star_selected = index; + }); + + + } + + + $(document).ready(function() { + set_star_hover_actions(); + }); +}) (jQuery); diff --git a/plugins/communities_ratings/style.css b/plugins/communities_ratings/style.css new file mode 100644 index 0000000..1faeacf --- /dev/null +++ b/plugins/communities_ratings/style.css @@ -0,0 +1,22 @@ +.star-container { + width: 100%; + height: 20px; +} + +.star-negative, .star-positive { + width: 20px; + height: 20px; + background-repeat: no-repeat; + position: relative; + float: left; + cursor: pointer; +} + +.star-negative {; + background-image: url('public/images/star-negative.png'); +} + +.star-positive {; + background-image: url('public/images/star-positive.png'); +} + diff --git a/plugins/communities_ratings/views/communities_ratings_plugin_profile/new_rating.html.erb b/plugins/communities_ratings/views/communities_ratings_plugin_profile/new_rating.html.erb new file mode 100644 index 0000000..143d92c --- /dev/null +++ b/plugins/communities_ratings/views/communities_ratings_plugin_profile/new_rating.html.erb @@ -0,0 +1,25 @@ +
+
+ +
+
"rate" %>> +
+
+
+
+
+
+
+ +
+ +
+
+ +
+ <%= form_for :comments do |c| %> + + <% end %> +
+
+
-- libgit2 0.21.2