Make it possible to select favourites events

Make it possible for users to select events which they want to see in the public schedule and in the All events section of the public schedule.
This commit is contained in:
Ana 2016-08-12 00:41:02 +02:00 committed by Henne Vogelsang
parent 39e05a29fa
commit c6906675f9
5 changed files with 80 additions and 17 deletions

View file

@ -1,3 +1,5 @@
// ADMIN SCHEDULE
var url; // Should be initialize in Schedule.initialize var url; // Should be initialize in Schedule.initialize
var schedule_id; // Should be initialize in Schedule.initialize var schedule_id; // Should be initialize in Schedule.initialize
@ -114,6 +116,34 @@ $(document).ready( function() {
}); });
}); });
// PUBLIC SCHEDULE
function starClicked(e){
// stops the click from propagating
if (!e) var e = window.event;
e.preventDefault();
e.cancelBubble = true;
if (e.stopPropagation) e.stopPropagation();
var callback = function(data) {
$(e.target).toggleClass('fa-star fa-star-o');
}
var params = { favourite_user_id: $(e.target).data('user') };
if($(e.target).hasClass('fa-star-o')){
params['add'] = true;
}
$.ajax({
url: $(e.target).data('url'),
type: 'PATCH',
data: params,
success: callback,
dataType : 'json'
});
}
function eventClicked(e, element){ function eventClicked(e, element){
var url = $(element).data('url'); var url = $(element).data('url');
if(e.ctrlKey) if(e.ctrlKey)

View file

@ -254,6 +254,15 @@ td.no-padding{
opacity: 0.5; opacity: 0.5;
} }
#star{
margin-top: 8px;
}
#star-events{
margin-right: 5px;
vertical-align: text-top;
}
/* Small devices (tablets, 768px and up) */ /* Small devices (tablets, 768px and up) */
@media (min-width: 768px) { @media (min-width: 768px) {
.room, .event-title{ .room, .event-title{

View file

@ -68,6 +68,8 @@ class ProposalsController < ApplicationController
end end
def update def update
respond_to do |format|
format.html do
@url = conference_program_proposal_path(@conference.short_title, params[:id]) @url = conference_program_proposal_path(@conference.short_title, params[:id])
track = Track.find_by(id: params[:event][:track_id]) track = Track.find_by(id: params[:event][:track_id])
@ -81,10 +83,22 @@ class ProposalsController < ApplicationController
redirect_to conference_program_proposals_path(conference_id: @conference.short_title), redirect_to conference_program_proposals_path(conference_id: @conference.short_title),
notice: 'Proposal was successfully updated.' notice: 'Proposal was successfully updated.'
else else
flash.now[:error] = "Could not update proposal: #{@event.errors.full_messages.join(', ')}" flash[:error] = "Could not update proposal: #{@event.errors.full_messages.join(', ')}"
render action: 'edit' render action: 'edit'
end end
end end
format.json do
user = User.find(params[:favourite_user_id])
users = @event.favourite_users
if users.include? user
@event.favourite_users.delete(user)
else
@event.favourite_users << User.find(params[:favourite_user_id])
end
render json: {}
end
end
end
def withdraw def withdraw
authorize! :update, @event authorize! :update, @event

View file

@ -4,11 +4,15 @@
= image_tag speaker.gravatar_url, :class => "img-circle pull-right all-speaker-pic", | = image_tag speaker.gravatar_url, :class => "img-circle pull-right all-speaker-pic", |
:alt => speaker.name, | :alt => speaker.name, |
:title => speaker.name | :title => speaker.name |
%p %p
= canceled_replacement_event_label(event, event_schedule) = canceled_replacement_event_label(event, event_schedule)
= replacement_event_notice(event_schedule) = replacement_event_notice(event_schedule)
- if current_user
= link_to('#', onClick: 'starClicked();') do
%span#star-events{ class: "fa fa-lg #{ event.favourite_users.exists?(current_user.id) ? 'fa-star' : 'fa-star-o' }", |
"aria-hidden" => "true", |
"data-url" => conference_program_proposal_path(@conference.short_title, event.id), |
"data-user" => current_user.id }
%span.h3 %span.h3
= event.title = event.title
%br %br

View file

@ -1,7 +1,7 @@
%td.event{ width: "#{ width * span }%" , | %td.event{ width: "#{ width * span }%" , |
colspan: span, | colspan: span, |
role: "button" } role: "button" }
%a.unstyled-link{href: url_for(conference_program_proposal_path(@conference.short_title, event.id))} %div{ onClick: 'eventClicked(event, this);', "data-url" => "#{url_for(conference_program_proposal_path(@conference.short_title, event.id))}" }
%div{ class: "elipsis break-words event-title", | %div{ class: "elipsis break-words event-title", |
style: "-webkit-line-clamp: #{ event_lines(@rooms) }; height: #{ event_height(@rooms) }px;"} | style: "-webkit-line-clamp: #{ event_lines(@rooms) }; height: #{ event_height(@rooms) }px;"} |
@ -9,9 +9,15 @@
= event.title = event.title
- if current_user
= link_to('#', onClick: 'starClicked();') do
%span#star{ class: "fa fa-lg #{ event.favourite_users.exists?(current_user.id) ? 'fa-star' : 'fa-star-o' }", |
"aria-hidden" =>"true", |
"data-url" => conference_program_proposal_path(@conference.short_title, event.id), |
"data-user" => current_user.id }
- event.speakers_ordered.each do |speaker| - event.speakers_ordered.each do |speaker|
= image_tag speaker.gravatar_url, :class => "img-circle pull-right speaker-pic", | = image_tag speaker.gravatar_url, :class => "img-circle pull-right speaker-pic", |
:alt => speaker.name, | :alt => speaker.name, |
:title => speaker.name, | :title => speaker.name, |
:style => "height: #{ speaker_height(@rooms) }px; width: #{ speaker_width(@rooms) }px;" :style => "height: #{ speaker_height(@rooms) }px; width: #{ speaker_width(@rooms) }px;"