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,21 +68,35 @@ class ProposalsController < ApplicationController
end end
def update def update
@url = conference_program_proposal_path(@conference.short_title, params[:id]) respond_to do |format|
format.html do
@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])
if track && !track.cfp_active if track && !track.cfp_active
flash.now[:error] = 'You have selected a track that doesn\'t accept proposals' flash.now[:error] = 'You have selected a track that doesn\'t accept proposals'
render action: 'edit' render action: 'edit'
return return
end end
if @event.update(event_params) if @event.update(event_params)
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
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
end end

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;"