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 @@ +