Merge 7ea100d2ec into 8442eb813f
This commit is contained in:
commit
3024bddb82
48 changed files with 686 additions and 562 deletions
|
|
@ -121,20 +121,9 @@ linters:
|
|||
- "app/views/conference_registrations/_registration_info.html.haml"
|
||||
- "app/views/conference_registrations/_volunteer.html.haml"
|
||||
- "app/views/conference_registrations/show.html.haml"
|
||||
- "app/views/conferences/_booths.html.haml"
|
||||
- "app/views/conferences/_call_for_paper.html.haml"
|
||||
- "app/views/conferences/_conference_details.html.haml"
|
||||
- "app/views/conferences/_gallery.html.haml"
|
||||
- "app/views/conferences/_lodging.html.haml"
|
||||
- "app/views/conferences/_program.html.haml"
|
||||
- "app/views/conferences/_registration.html.haml"
|
||||
- "app/views/conferences/_schedule_splashpage.html.haml"
|
||||
- "app/views/conferences/_sponsors.html.haml"
|
||||
- "app/views/conferences/_tickets.html.haml"
|
||||
- "app/views/conferences/_venue.html.haml"
|
||||
- "app/views/conferences/_venue_map.html.haml"
|
||||
- "app/views/conferences/index.html.haml"
|
||||
- "app/views/conferences/show.html.haml"
|
||||
- "app/views/devise/confirmations/new.html.haml"
|
||||
- "app/views/devise/ichain_sessions/new.html.haml"
|
||||
- "app/views/devise/ichain_sessions/new_test.html.haml"
|
||||
|
|
|
|||
3
Gemfile
3
Gemfile
|
|
@ -212,6 +212,9 @@ gem 'selectize-rails'
|
|||
# CVE-2017-9049, CVE-2017-9050
|
||||
gem 'nokogiri', '>= 1.8.1'
|
||||
|
||||
# memcached binary connector
|
||||
gem 'dalli'
|
||||
|
||||
# Use guard and spring for testing in development
|
||||
group :development do
|
||||
# to launch specs when files are modified
|
||||
|
|
|
|||
|
|
@ -142,6 +142,7 @@ GEM
|
|||
safe_yaml (~> 1.0.0)
|
||||
currencies (0.4.2)
|
||||
daemons (1.1.9)
|
||||
dalli (2.7.6)
|
||||
dante (0.2.0)
|
||||
database_cleaner (1.3.0)
|
||||
debug_inspector (0.0.2)
|
||||
|
|
@ -288,7 +289,7 @@ GEM
|
|||
multi_json (1.12.1)
|
||||
multi_xml (0.5.5)
|
||||
multipart-post (2.0.0)
|
||||
mysql2 (0.4.9)
|
||||
mysql2 (0.4.10)
|
||||
nenv (0.3.0)
|
||||
netrc (0.11.0)
|
||||
nokogiri (1.8.1)
|
||||
|
|
@ -585,6 +586,7 @@ DEPENDENCIES
|
|||
country_select
|
||||
coveralls
|
||||
daemons
|
||||
dalli
|
||||
database_cleaner
|
||||
delayed_job_active_record
|
||||
devise
|
||||
|
|
|
|||
|
|
@ -2,20 +2,20 @@
|
|||
@if $class == xs {
|
||||
@media (max-width: 767px) { @content; }
|
||||
}
|
||||
|
||||
|
||||
@else if $class == sm {
|
||||
@media (min-width: 750px) { @content; }
|
||||
@media (min-width: 768px) and (max-width: 991px) { @content; }
|
||||
}
|
||||
|
||||
|
||||
@else if $class == md {
|
||||
@media (min-width: 992px) { @content; }
|
||||
@media (min-width: 992px) and (max-width: 1199px) { @content; }
|
||||
}
|
||||
|
||||
|
||||
@else if $class == lg {
|
||||
@media (min-width: 1200px) { @content; }
|
||||
}
|
||||
|
||||
|
||||
@else {
|
||||
@warn "Breakpoint mixin supports: xs, sm, md, lg";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,19 +9,44 @@ class ConferencesController < ApplicationController
|
|||
end
|
||||
|
||||
def show
|
||||
@conference = if params[:id]
|
||||
Conference.find_by_short_title(params[:id])
|
||||
else
|
||||
load_conference_by_domain
|
||||
end
|
||||
@conference = Conference.unscoped.eager_load(
|
||||
:organization,
|
||||
:splashpage,
|
||||
:venue,
|
||||
:registration_period,
|
||||
:tickets,
|
||||
:confirmed_tracks,
|
||||
:call_for_events,
|
||||
:event_types,
|
||||
:program,
|
||||
:call_for_tracks,
|
||||
:lodgings,
|
||||
:call_for_booths,
|
||||
:confirmed_booths,
|
||||
:sponsors,
|
||||
:call_for_sponsors,
|
||||
:contact,
|
||||
highlighted_events: [:speakers],
|
||||
sponsorship_levels: [:sponsors]
|
||||
).order(
|
||||
'sponsorship_levels.position ASC',
|
||||
'sponsors.name',
|
||||
'tracks.name',
|
||||
'booths.title',
|
||||
'lodgings.name',
|
||||
'tickets.price_cents'
|
||||
).find_by(conference_finder_conditions)
|
||||
authorize! :show, @conference
|
||||
@program = @conference.program
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def load_conference_by_domain
|
||||
Conference.find_by(custom_domain: request.domain)
|
||||
def conference_finder_conditions
|
||||
if params[:id]
|
||||
{ short_title: params[:id] }
|
||||
else
|
||||
{ custom_domain: request.domain }
|
||||
end
|
||||
end
|
||||
|
||||
def respond_to_options
|
||||
|
|
|
|||
|
|
@ -56,17 +56,7 @@ module ApplicationHelper
|
|||
end
|
||||
|
||||
def tracks(conference)
|
||||
all = conference.program.tracks.confirmed.cfp_active.pluck(:name)
|
||||
first = all[0...-1]
|
||||
last = all[-1]
|
||||
ts = ''
|
||||
if all.length > 1
|
||||
ts << first.join(', ')
|
||||
ts << " and #{last}"
|
||||
else
|
||||
ts = all.join
|
||||
end
|
||||
return ts
|
||||
conference.confirmed_tracks.collect(&:name).to_sentence
|
||||
end
|
||||
|
||||
def difficulty_levels(conference)
|
||||
|
|
@ -152,7 +142,7 @@ module ApplicationHelper
|
|||
end
|
||||
|
||||
def event_types(conference)
|
||||
conference.program.event_types.map { |et| et.title.pluralize }.to_sentence
|
||||
conference.event_types.map { |et| et.title.pluralize }.to_sentence
|
||||
end
|
||||
|
||||
def sign_in_path
|
||||
|
|
@ -191,4 +181,19 @@ module ApplicationHelper
|
|||
title: 'Open Source Event Manager'
|
||||
)
|
||||
end
|
||||
|
||||
# returns the url to be used for logo on basis of sponsorship level position
|
||||
def get_logo(object)
|
||||
if object.try(:sponsorship_level)
|
||||
if object.sponsorship_level.position == 1
|
||||
object.picture.first.url
|
||||
elsif object.sponsorship_level.position == 2
|
||||
object.picture.second.url
|
||||
else
|
||||
object.picture.others.url
|
||||
end
|
||||
else
|
||||
object.picture.large.url
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
18
app/helpers/conference_helper.rb
Normal file
18
app/helpers/conference_helper.rb
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
module ConferenceHelper
|
||||
# Return true if only call_for_papers or call_for_tracks is open
|
||||
def one_call_open(conference)
|
||||
conference.call_for_events.try(:open?) ^
|
||||
conference.call_for_tracks.try(:open?)
|
||||
end
|
||||
|
||||
# URL for sponsorship emails
|
||||
def sponsorship_mailto(conference)
|
||||
[
|
||||
'mailto:',
|
||||
conference.contact.sponsor_email,
|
||||
'?subject=',
|
||||
url_encode(conference.short_title),
|
||||
'%20Sponsorship'
|
||||
].join
|
||||
end
|
||||
end
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
module SponsorsHelper
|
||||
# returns the url to be used for logo on basis of sponsorship level position
|
||||
def get_logo(sponsor)
|
||||
if sponsor.sponsorship_level.position == 1
|
||||
sponsor.picture.first.url
|
||||
elsif sponsor.sponsorship_level.position == 2
|
||||
sponsor.picture.second.url
|
||||
else
|
||||
sponsor.picture.others.url
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -33,6 +33,7 @@ class Conference < ActiveRecord::Base
|
|||
end
|
||||
has_many :resources, dependent: :destroy
|
||||
has_many :booths, dependent: :destroy
|
||||
has_many :confirmed_booths, -> { where(state: 'confirmed') }, class_name: 'Booth'
|
||||
|
||||
has_many :lodgings, dependent: :destroy
|
||||
has_many :registrations, dependent: :destroy
|
||||
|
|
@ -45,7 +46,16 @@ class Conference < ActiveRecord::Base
|
|||
has_many :campaigns, dependent: :destroy
|
||||
has_many :commercials, as: :commercialable, dependent: :destroy
|
||||
has_many :subscriptions, dependent: :destroy
|
||||
|
||||
has_one :call_for_sponsors, -> { where(cfp_type: 'sponsors') }, through: :program, source: :cfps
|
||||
has_one :call_for_events, -> { where(cfp_type: 'events') }, through: :program, source: :cfps
|
||||
has_one :call_for_booths, -> { where(cfp_type: 'booths') }, through: :program, source: :cfps
|
||||
has_one :call_for_tracks, -> { where(cfp_type: 'tracks') }, through: :program, source: :cfps
|
||||
has_many :confirmed_tracks, -> { where(state: 'confirmed') }, through: :program, source: :tracks
|
||||
has_many :highlighted_events,
|
||||
-> { where(state: :confirmed, is_highlight: true) },
|
||||
through: :program,
|
||||
source: :events
|
||||
has_many :event_types, through: :program
|
||||
accepts_nested_attributes_for :venue
|
||||
accepts_nested_attributes_for :tickets, allow_destroy: true
|
||||
accepts_nested_attributes_for :sponsorship_levels, allow_destroy: true
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
= f.inputs name: 'Components' do
|
||||
= f.input :include_tracks, label: 'Display tracks', input_html: { checked: params[:action] == 'new' || @splashpage.try(:include_tracks) }
|
||||
= f.input :include_program, label: 'Display program', input_html: { checked: params[:action] == 'new' || @splashpage.try(:include_program) }
|
||||
= f.input :include_cfp, label: 'Display call for papers information on splashpage, while cfp is open', input_html: { checked: params[:action] == 'new' || @splashpage.try(:include_cfp) }
|
||||
= f.input :include_cfp, label: 'Display call for papers and call for tracks information on splashpage, while open', input_html: { checked: params[:action] == 'new' || @splashpage.try(:include_cfp) }
|
||||
= f.input :include_venue, label: 'Display venue', input_html: { checked: params[:action] == 'new' || @splashpage.try(:include_venue) }
|
||||
= f.input :include_registrations, label: 'Display the registration period', input_html: { checked: params[:action] == 'new' || @splashpage.try(:include_registrations) }
|
||||
= f.input :include_tickets, label: 'Display tickets', input_html: { checked: params[:action] == 'new' || @splashpage.try(:include_tickets) }
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@
|
|||
- else
|
||||
No
|
||||
%dt
|
||||
Include CFP:
|
||||
Include Calls for Content:
|
||||
%dd
|
||||
- if @splashpage.include_cfp
|
||||
Yes
|
||||
|
|
|
|||
19
app/views/conferences/_booths.haml
Normal file
19
app/views/conferences/_booths.haml
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
- cache [conference.confirmed_booths, '#splash#booths'] do
|
||||
%section#booths
|
||||
.container
|
||||
.row
|
||||
.col-md-12.text-center
|
||||
%h2 Booths
|
||||
.row.row-centered
|
||||
- conference.confirmed_booths.each do |booth|
|
||||
.col-md-2.col-sm-2.col-centered.col-top
|
||||
%a.thumbnail{ href: '#',
|
||||
data: { toggle: 'modal', target: "#modal-booth-#{booth.id}" } }
|
||||
- if booth.picture?
|
||||
= image_tag get_logo(booth),
|
||||
class: ['img-responsive', 'img-rounded'],
|
||||
title: booth.title
|
||||
- else
|
||||
.caption
|
||||
%h3.text-center= booth.title
|
||||
= render 'modal_description', object: booth
|
||||
|
|
@ -1,24 +0,0 @@
|
|||
= content_for :splash_nav do
|
||||
%li
|
||||
%a.smoothscroll{ href: '#booths' } Booths
|
||||
|
||||
.container
|
||||
.row
|
||||
.col-md-12.text-center
|
||||
%h2 Booths
|
||||
- @conference.booths.confirmed.each_slice(3).with_index do |slice, index_for_row|
|
||||
.row.row-centered
|
||||
- slice.each.with_index do |booth, index_for_column|
|
||||
.col-md-4.col-sm-4.col-xs-10.col-centered.col-top
|
||||
.thumbnail
|
||||
- if booth.logo_link
|
||||
= link_to booth.website_url, class: 'thumbnail' do
|
||||
= image_tag booth.picture.large.url
|
||||
.caption
|
||||
%h3.text-center
|
||||
= booth.title
|
||||
%p.text-center.text-muted
|
||||
= link_to "#show_descrition_#{index_for_row}_#{index_for_column}", "data-toggle"=>"collapse" do
|
||||
learn more
|
||||
.collapse{ id: "show_descrition_#{index_for_row}_#{index_for_column}" }
|
||||
= markdown(booth.description)
|
||||
14
app/views/conferences/_call_for_content.haml
Normal file
14
app/views/conferences/_call_for_content.haml
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
= content_for :splash_nav do
|
||||
%li
|
||||
%a.smoothscroll{ href: '#call' } Call For Content
|
||||
|
||||
%section#call
|
||||
.container
|
||||
.row
|
||||
- if one_call_open(conference)
|
||||
.col-md-3.col-sm-3.hidden-xs
|
||||
- if conference.call_for_events.try(:open?)
|
||||
= render 'call_for_papers', conference: conference
|
||||
.col-md-2.col-sm-2
|
||||
- if conference.call_for_tracks.try(:open?)
|
||||
= render 'call_for_tracks', conference: conference
|
||||
|
|
@ -1,43 +0,0 @@
|
|||
= content_for :splash_nav do
|
||||
%li
|
||||
%a.smoothscroll{ href: '#callforpapers' } Call For Papers
|
||||
|
||||
.container
|
||||
.row
|
||||
.col-md-12.text-center
|
||||
%h2
|
||||
Call for Papers
|
||||
%p.lead
|
||||
We are ready to accept your proposals for sessions!
|
||||
.row
|
||||
.col-md-6.col-md-offset-3.col-sm-10.col-sm-offset-1
|
||||
%p
|
||||
- if @conference.program.event_types.any?
|
||||
You can submit proposals for
|
||||
%span.notranslate
|
||||
= "#{event_types(@conference)}."
|
||||
- if @conference.program.tracks.any?
|
||||
Proposals should fit in one of the
|
||||
%span.notranslate
|
||||
= "#{pluralize(@conference.program.tracks.count, 'track')}:"
|
||||
= "#{tracks(@conference)}."
|
||||
The submission period has begun
|
||||
%em.notranslate
|
||||
= @conference.program.cfp.start_date.strftime('%A, %B %-d. %Y')
|
||||
and closes
|
||||
%em.notranslate
|
||||
= @conference.program.cfp.end_date.strftime('%A, %B %-d. %Y.')
|
||||
- if @conference.program.cfp_open?
|
||||
That means you have only
|
||||
%b.notranslate= pluralize(@conference.program.cfp.remaining_days, 'day')
|
||||
left!
|
||||
Remember
|
||||
%span.notranslate
|
||||
= @conference.short_title
|
||||
will only be as good as the sessions you present. Submit early, submit often!
|
||||
- else
|
||||
The submission period is closed.
|
||||
.row
|
||||
.col-md-12.text-center
|
||||
%p.cta-button
|
||||
= link_to "Submit your paper now", conference_program_proposals_path(@conference.short_title), class: 'btn btn-success btn-lg text-center'
|
||||
30
app/views/conferences/_call_for_papers.haml
Normal file
30
app/views/conferences/_call_for_papers.haml
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
- cache [conference, conference.call_for_events, conference.confirmed_tracks,
|
||||
'#splash#callforpapers'] do
|
||||
.col-md-5.col-sm-5.text-center
|
||||
%h2
|
||||
Call for Papers
|
||||
%p.lead
|
||||
We are now accepting proposals for sessions!
|
||||
%p
|
||||
- if conference.event_types.any?
|
||||
You can submit proposals for
|
||||
%span.notranslate
|
||||
= event_types(conference) + '.'
|
||||
- if conference.confirmed_tracks.any?
|
||||
Proposals should fit in one of the
|
||||
%span.notranslate
|
||||
= pluralize(conference.confirmed_tracks.length, 'track') + ':'
|
||||
= tracks(conference)} + '.'
|
||||
- if conference.call_for_events.try(:open?)
|
||||
The submission period is open
|
||||
%em.notranslate
|
||||
= date_string(conference.call_for_events.start_date,
|
||||
conference.call_for_events.end_date) + '.'
|
||||
%b
|
||||
You have
|
||||
= pluralize(conference.call_for_events.remaining_days, 'day')
|
||||
left!
|
||||
%p.cta-button
|
||||
= link_to "Submit your proposal now",
|
||||
conference_program_proposals_path(conference.short_title),
|
||||
class: 'btn btn-success btn-lg text-center'
|
||||
20
app/views/conferences/_call_for_tracks.haml
Normal file
20
app/views/conferences/_call_for_tracks.haml
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
- cache [conference, conference.call_for_tracks, '#splash#callfortracks'] do
|
||||
.col-md-5.col-sm-5.text-center
|
||||
%h2
|
||||
Call for Tracks
|
||||
%p.lead
|
||||
We are now accepting custom track requests!
|
||||
%p
|
||||
Would you like to host a mini-summit, sub-conference, or hack space?
|
||||
The submission period for track requests is open
|
||||
%em
|
||||
= date_string(conference.call_for_tracks.start_date,
|
||||
conference.call_for_tracks.end_date) + '.'
|
||||
%b
|
||||
You have
|
||||
= pluralize(conference.call_for_tracks.remaining_days, 'day')
|
||||
left!
|
||||
%p.cta-button
|
||||
= link_to("Submit your request for track",
|
||||
conference_program_tracks_path(conference.short_title),
|
||||
class: 'btn btn-success btn-lg text-center')
|
||||
|
|
@ -1,30 +0,0 @@
|
|||
= content_for :splash_nav do
|
||||
%li
|
||||
%a.smoothscroll{ href: '#callfortracks' } Call For Tracks
|
||||
|
||||
.container
|
||||
.row
|
||||
.col-md-12.text-center
|
||||
%h2
|
||||
Call for Tracks
|
||||
%p.lead
|
||||
We are ready to accept requests for tracks!
|
||||
.row
|
||||
.col-md-6.col-md-offset-3.col-sm-10.col-sm-offset-1
|
||||
%p
|
||||
The submission period for track requests has begun
|
||||
%em.notranslate
|
||||
= @conference.program.cfps.for_tracks.start_date.strftime('%A, %B %-d. %Y')
|
||||
and closes
|
||||
%em.notranslate
|
||||
= @conference.program.cfps.for_tracks.end_date.strftime('%A, %B %-d. %Y.')
|
||||
- if @conference.program.cfps.for_tracks.try(:open?)
|
||||
That means you have only
|
||||
%b.notranslate= pluralize(@conference.program.cfps.for_tracks.remaining_days, 'day')
|
||||
left!
|
||||
- else
|
||||
The submission period for track requests is closed.
|
||||
.row
|
||||
.col-md-12.text-center
|
||||
%p.cta-button
|
||||
= link_to "Submit your request for track", conference_program_tracks_path(@conference.short_title), class: 'btn btn-success btn-lg text-center'
|
||||
37
app/views/conferences/_header.haml
Normal file
37
app/views/conferences/_header.haml
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
- cache [conference, conference.venue, '#splash#header'] do
|
||||
#banner
|
||||
.container
|
||||
.row
|
||||
.col-md-8.col-md-offset-2#header
|
||||
.row
|
||||
.col-md-4
|
||||
- if conference.picture?
|
||||
= image_tag(conference.picture_url,
|
||||
class: 'img-responsive img-center',
|
||||
id: 'splash-logo')
|
||||
.col-md-8
|
||||
%h1
|
||||
= conference.title
|
||||
%h3
|
||||
- if conference.start_date && conference.end_date
|
||||
%span.date.text-nowrap
|
||||
= date_string(conference.start_date, conference.end_date)
|
||||
•
|
||||
- if conference.venue
|
||||
%span.venue.text-nowrap
|
||||
- if conference.venue.website
|
||||
= sanitize link_to(conference.venue.name,
|
||||
conference.venue.website)
|
||||
- else
|
||||
= conference.venue.city
|
||||
- if conference.venue.country_name != 'US'
|
||||
•
|
||||
= conference.venue.country_name
|
||||
|
||||
- unless conference.description.blank?
|
||||
%section#about
|
||||
.container
|
||||
.row
|
||||
.col-md-8.col-md-offset-2
|
||||
%h3.text-center
|
||||
= markdown(conference.description)
|
||||
19
app/views/conferences/_highlights.haml
Normal file
19
app/views/conferences/_highlights.haml
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
.row
|
||||
.col-md-12
|
||||
%h3.text-center
|
||||
Program Highlights
|
||||
.row
|
||||
.col-md-12
|
||||
.row.row-centered
|
||||
- conference.highlighted_events.each do |event|
|
||||
- speaker = event.speakers_ordered.first
|
||||
.col-md-3.col-sm-3.col-centered.col-top.highlights
|
||||
= link_to(conference_program_proposal_path(conference.short_title,
|
||||
event),
|
||||
class: 'thumbnail') do
|
||||
= image_tag speaker.gravatar_url(size: 300),
|
||||
class: ['img-responsive', 'img-circle'],
|
||||
title: speaker.name
|
||||
.caption
|
||||
%h3.text-center= speaker.name
|
||||
%h4.text-center= event.title
|
||||
41
app/views/conferences/_lodging.haml
Normal file
41
app/views/conferences/_lodging.haml
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
= content_for :splash_nav do
|
||||
%li
|
||||
%a.smoothscroll{ href: '#lodging' } Lodging
|
||||
|
||||
- cache [conference.venue, conference.lodgings, '#splash#lodging'] do
|
||||
%section#lodging
|
||||
.container
|
||||
.row
|
||||
.col-md-12.text-center
|
||||
%h2
|
||||
Where to stay
|
||||
- if conference.venue
|
||||
in
|
||||
= conference.venue.city
|
||||
%p.lead
|
||||
We recommend the following accommodations for your visit.
|
||||
|
||||
.row.row-centered
|
||||
- conference.lodgings.each do |lodging|
|
||||
.col-md-4.col-sm-4.col-centered.col-top
|
||||
.thumbnail
|
||||
- if lodging.picture?
|
||||
- if lodging.website_link.present?
|
||||
= link_to(lodging.website_link, class: 'thumbnail') do
|
||||
= image_tag lodging.picture.large.url,
|
||||
class: 'img-responsive img-lodging'
|
||||
- else
|
||||
= image_tag lodging.picture.large.url,
|
||||
class: 'img-responsive img-lodging'
|
||||
- else
|
||||
%p.text-center
|
||||
- if lodging.website_link.present?
|
||||
= link_to(lodging.website_link, class: 'thumbnail') do
|
||||
%i.fa.fa-home.fa-5x
|
||||
- else
|
||||
%i.fa.fa-home.fa-5x
|
||||
.caption
|
||||
%h3.text-center
|
||||
= lodging.name
|
||||
- if lodging.description.present?
|
||||
= markdown(lodging.description)
|
||||
|
|
@ -1,37 +0,0 @@
|
|||
= content_for :splash_nav do
|
||||
%li
|
||||
%a.smoothscroll{ href: '#lodging' } Lodging
|
||||
|
||||
.container
|
||||
.row
|
||||
.col-md-12.text-center
|
||||
%h2
|
||||
Where to stay
|
||||
- if @conference.venue
|
||||
in
|
||||
= @conference.venue.city
|
||||
%p.lead
|
||||
We recommend these affordable lodging accommodations for your visit.
|
||||
|
||||
.row.row-centered{ style:"display: flex; flex-wrap: wrap" }
|
||||
- @conference.lodgings.each do |lodging|
|
||||
.col-md-4.col-sm-4.col-centered.col-top{ style:"display:flex;" }
|
||||
.thumbnail
|
||||
- if lodging.picture?
|
||||
-if lodging.website_link.present?
|
||||
= link_to(lodging.website_link, class: 'thumbnail') do
|
||||
= image_tag lodging.picture.large.url, class: 'img-responsive img-lodging'
|
||||
- else
|
||||
= image_tag lodging.picture.large.url, class: 'img-responsive img-lodging'
|
||||
- else
|
||||
%p.text-center
|
||||
-if lodging.website_link.present?
|
||||
= link_to(lodging.website_link, class: 'thumbnail') do
|
||||
%i.fa.fa-home.fa-5x
|
||||
- else
|
||||
%i.fa.fa-home.fa-5x
|
||||
.caption
|
||||
%h3.text-center
|
||||
= lodging.name
|
||||
-if lodging.description.present?
|
||||
= markdown(lodging.description)
|
||||
21
app/views/conferences/_modal_description.haml
Normal file
21
app/views/conferences/_modal_description.haml
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
- content_for :modals do
|
||||
.modal.fade{ id: "modal-#{object.class.name.downcase}-#{object.id}" }
|
||||
.modal-dialog
|
||||
.modal-content
|
||||
.modal-header
|
||||
%button.close{ data: { dismiss: 'modal' } }
|
||||
%i.fa.fa-close
|
||||
%h3.modal-title
|
||||
= object.try(:title) || object.try(:name)
|
||||
.modal-body
|
||||
%p.logo
|
||||
= link_to object.website_url || '#', target: '_blank' do
|
||||
- img_classes = ['img-responsive center-block']
|
||||
- if object.is_a? Sponsor
|
||||
- img_classes << ['img-sponsor',
|
||||
"img-sponsor-#{object.sponsorship_level.position}"]
|
||||
= image_tag get_logo(object), class: img_classes
|
||||
%p.description
|
||||
= object.description
|
||||
.modal-footer
|
||||
= link_to nil, object.website_url, target: '_blank'
|
||||
31
app/views/conferences/_program.haml
Normal file
31
app/views/conferences/_program.haml
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
= content_for :splash_nav do
|
||||
%li
|
||||
%a.smoothscroll{ href: '#schedule' } Schedule
|
||||
|
||||
- cache [@confererence, conference.confirmed_tracks, '#splash#schedule'] do
|
||||
%section#schedule
|
||||
.container
|
||||
.row
|
||||
.col-md-12
|
||||
%p.lead.text-center
|
||||
%span.notranslate
|
||||
= conference.title
|
||||
has the most awesome program ever!
|
||||
|
||||
- if conference.highlighted_events.any?
|
||||
= render 'highlights', conference: conference
|
||||
|
||||
- if conference.splashpage.include_tracks
|
||||
- if conference.confirmed_tracks.any?
|
||||
= render 'tracks', conference: conference
|
||||
|
||||
- if conference.program.try(:schedule_public?)
|
||||
.row
|
||||
.col-md-12
|
||||
%p.cta-button.text-center
|
||||
= link_to(conference_schedule_path(conference.short_title),
|
||||
class: 'btn btn-success btn-lg') do
|
||||
Full Schedule
|
||||
|
||||
- if conference.splashpage.include_booths && conference.confirmed_booths.any?
|
||||
= render 'booths', conference: conference
|
||||
|
|
@ -1,40 +0,0 @@
|
|||
= content_for :splash_nav do
|
||||
%li
|
||||
%a.smoothscroll{ href: '#callforpapers' } Call For Papers
|
||||
|
||||
.container
|
||||
.row
|
||||
.col-md-12.text-center
|
||||
%h2
|
||||
Call for Papers
|
||||
%p.lead
|
||||
We are ready to accept your proposals for sessions!
|
||||
.row
|
||||
.col-md-6.col-md-offset-3.col-sm-10.col-sm-offset-1
|
||||
%p
|
||||
- if @conference.program.event_types.any?
|
||||
You can submit proposals for
|
||||
= "#{event_types(@conference)}."
|
||||
- if @conference.tracks.any?
|
||||
Proposals should fit in one of the
|
||||
= "#{pluralize(@conference.tracks.count, 'track')}:"
|
||||
= "#{tracks(@conference)}."
|
||||
The submission period has begun
|
||||
%em
|
||||
= @program.cfp.start_date.strftime('%A, %B %-d. %Y')
|
||||
and closes
|
||||
%em
|
||||
= @program.cfp.end_date.strftime('%A, %B %-d. %Y.')
|
||||
- if @conference.cfp_open?
|
||||
That means you have only
|
||||
%b= pluralize(@program.cfp.remaining_days, 'day')
|
||||
left!
|
||||
Remember
|
||||
= @conference.short_title
|
||||
will only be as good as the sessions you present. Submit early, submit often!
|
||||
- else
|
||||
The submission period is closed.
|
||||
.row
|
||||
.col-md-12.text-center
|
||||
%p.cta-button
|
||||
= link_to "Submit your paper now", conference_proposals_path(@conference.short_title), class: 'btn btn-success btn-lg text-center'
|
||||
32
app/views/conferences/_registration.haml
Normal file
32
app/views/conferences/_registration.haml
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
= content_for :splash_nav do
|
||||
%li
|
||||
%a.smoothscroll{ href: '#registration' } Registration
|
||||
|
||||
- cache [conference.registration_period, conference.tickets,
|
||||
'#splash#registration'] do
|
||||
%section#registration
|
||||
.container
|
||||
.row
|
||||
.col-md-12.text-center
|
||||
%h1 Registration
|
||||
- if conference.registration_limit_exceeded?
|
||||
%p
|
||||
Sorry, the conference registration limit has exceeded
|
||||
- elsif conference.tickets.empty?
|
||||
%p.lead
|
||||
Going to
|
||||
= conference.short_title
|
||||
is free of charge.
|
||||
%p
|
||||
We only ask you to register yourself before
|
||||
= date_string(conference.registration_period.end_date)
|
||||
so we can plan for the right amount of people.
|
||||
%p.cta-button
|
||||
- else
|
||||
%p
|
||||
The registration period ends on
|
||||
= date_string(conference.registration_period.end_date)
|
||||
%p.cta-button
|
||||
= link_to('Register Now',
|
||||
new_conference_conference_registration_path(conference.short_title),
|
||||
class: 'btn btn-lg btn-success') do
|
||||
|
|
@ -1,30 +0,0 @@
|
|||
= content_for :splash_nav do
|
||||
%li
|
||||
%a.smoothscroll{ href: '#registration' } Registration
|
||||
|
||||
.container
|
||||
.row
|
||||
.col-md-12.text-center
|
||||
%h1 Registration
|
||||
|
||||
- if @conference.registration_limit_exceeded?
|
||||
%p
|
||||
Sorry, the conference registration limit has exceeded
|
||||
- else
|
||||
- if @conference.tickets.empty?
|
||||
%p.lead
|
||||
Going to
|
||||
= @conference.short_title
|
||||
is free of charge.
|
||||
%p
|
||||
We only ask you to register yourself until
|
||||
= @conference.registration_period.end_date.strftime('%A, %B %-d. %Y')
|
||||
so we can plan for the right amount of people.
|
||||
%p.cta-button
|
||||
- else
|
||||
%p
|
||||
The registration period ends on
|
||||
= @conference.registration_period.end_date.strftime('%A, %B %-d. %Y')
|
||||
%p.cta-button
|
||||
= link_to(new_conference_conference_registration_path(@conference.short_title), class: 'btn btn-lg btn-success') do
|
||||
Register Now
|
||||
|
|
@ -1,57 +0,0 @@
|
|||
.container
|
||||
.row
|
||||
.col-md-12
|
||||
%h2.text-center
|
||||
Program
|
||||
%p.lead.text-center
|
||||
%span.notranslate
|
||||
= @conference.short_title
|
||||
has the most awesome program ever!
|
||||
- if @conference.splashpage and @conference.program.tracks.any? and @conference.splashpage.include_tracks
|
||||
See rock-star speakers cover the topics of
|
||||
- if @conference.splashpage and @conference.splashpage.include_tracks
|
||||
- @conference.program.tracks.confirmed.each_slice(3) do |slice|
|
||||
.row.row-centered
|
||||
- slice.each do |track|
|
||||
.col-md-4.col-sm-4.col-centered.col-top.track
|
||||
%h4.text-center
|
||||
= track.name
|
||||
= markdown(track.description)
|
||||
- if track.start_date
|
||||
%br
|
||||
From: #{track.start_date.strftime('%A, %B %-d. %Y')}
|
||||
- if track.end_date
|
||||
%br
|
||||
To: #{track.end_date.strftime('%A, %B %-d. %Y')}
|
||||
- if track.room
|
||||
%br
|
||||
In: #{track.room.name}
|
||||
|
||||
- if @conference.program and @conference.program.schedule_public
|
||||
.row
|
||||
.col-md-12
|
||||
%p.cta-button.text-center
|
||||
= link_to(conference_schedule_path(@conference.short_title), class: 'btn btn-default btn-lg') do
|
||||
Full Schedule
|
||||
|
||||
|
||||
%h3.text-center
|
||||
Don't miss out!
|
||||
%br
|
||||
- if @conference.program.events.highlights.any?
|
||||
.row
|
||||
.col-md-12
|
||||
- @conference.program.events.highlights.each_slice(2) do |slice|
|
||||
.row.row-centered
|
||||
- slice.each do |event|
|
||||
.col-md-6.col-centered.col-top.highlights
|
||||
%p.text-center
|
||||
%b= event.title
|
||||
%h5.text-center
|
||||
= markdown truncate(event.abstract, length: 500, separator: ' ')
|
||||
= link_to "Read More", conference_program_proposal_path(@conference.short_title, event)
|
||||
|
||||
= content_for :splash_nav do
|
||||
%li
|
||||
=link_to('#program', class: 'smoothscroll') do
|
||||
Program
|
||||
20
app/views/conferences/_social_media.haml
Normal file
20
app/views/conferences/_social_media.haml
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
- cache [conference.contact, '#splash#social'] do
|
||||
%section#social-media
|
||||
.container
|
||||
.row
|
||||
.col-md-12.text-center
|
||||
- unless conference.contact.facebook.blank?
|
||||
= link_to "#{ conference.contact.facebook }" do
|
||||
%i.fa.fa-facebook-square.fa-4x
|
||||
- unless conference.contact.twitter.blank?
|
||||
= link_to "#{ conference.contact.twitter }" do
|
||||
%i.fa.fa-twitter.fa-4x
|
||||
- unless conference.contact.instagram.blank?
|
||||
= link_to "#{ conference.contact.instagram }" do
|
||||
%i.fa.fa-instagram.fa-4x
|
||||
- unless conference.contact.googleplus.blank?
|
||||
= link_to "#{ conference.contact.googleplus }" do
|
||||
%i.fa.fa-google-plus-square.fa-4x
|
||||
- unless conference.contact.email.blank?
|
||||
= mail_to "#{ conference.contact.email }" do
|
||||
%i.fa.fa-envelope-o.fa-4x
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
.container
|
||||
.row
|
||||
.col-md-12.text-center
|
||||
- unless @conference.contact.facebook.blank?
|
||||
= link_to "#{ @conference.contact.facebook }" do
|
||||
%i.fa.fa-facebook-square.fa-4x
|
||||
- unless @conference.contact.twitter.blank?
|
||||
= link_to "#{ @conference.contact.twitter }" do
|
||||
%i.fa.fa-twitter.fa-4x
|
||||
- unless @conference.contact.instagram.blank?
|
||||
= link_to "#{ @conference.contact.instagram }" do
|
||||
%i.fa.fa-instagram.fa-4x
|
||||
- unless @conference.contact.googleplus.blank?
|
||||
= link_to "#{ @conference.contact.googleplus }" do
|
||||
%i.fa.fa-google-plus-square.fa-4x
|
||||
- unless @conference.contact.email.blank?
|
||||
= mail_to "#{ @conference.contact.email }" do
|
||||
%i.fa.fa-envelope-o.fa-4x
|
||||
33
app/views/conferences/_sponsors.haml
Normal file
33
app/views/conferences/_sponsors.haml
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
= content_for :splash_nav do
|
||||
%li
|
||||
%a.smoothscroll{ href: '#sponsors' } Sponsors
|
||||
|
||||
- cache [conference, conference.sponsors, conference.try(:call_for_sponsors),
|
||||
'#splash#sponsors'] do
|
||||
%section#sponsors
|
||||
.container
|
||||
- conference.sponsorship_levels.each do |sponsorship_level|
|
||||
- if sponsorship_level.sponsors.any?
|
||||
.row.text-center
|
||||
%h3
|
||||
= sponsorship_level.title
|
||||
= 'Sponsor'.pluralize(sponsorship_level.sponsors.length)
|
||||
.row.row-centered
|
||||
- sponsorship_level.sponsors.each do |sponsor|
|
||||
.col-md-4.col-sm-4.col-centered.col-top
|
||||
%a{ href: '#', data: { toggle: 'modal',
|
||||
target: "#modal-sponsor-#{sponsor.id}" } }
|
||||
= image_tag get_logo(sponsor),
|
||||
class: ['img-responsive', 'img-sponsor',
|
||||
"img-sponsor-#{sponsorship_level.position}"],
|
||||
title: sponsor.name
|
||||
= render 'modal_description', object: sponsor
|
||||
|
||||
- if conference.call_for_sponsors.try(:open?)
|
||||
.row
|
||||
.col-md-12
|
||||
%p.text-muted.text-center
|
||||
%small
|
||||
Want to sponsor #{conference.short_title}?
|
||||
= link_to(sponsorship_mailto(conference)) do
|
||||
Please contact us!
|
||||
|
|
@ -1,41 +0,0 @@
|
|||
= content_for :splash_nav do
|
||||
%li
|
||||
%a.smoothscroll{ href: '#sponsors' } Sponsors
|
||||
|
||||
.container
|
||||
.row
|
||||
.col-md-12.text-center
|
||||
%h2 Sponsors
|
||||
- @conference.sponsorship_levels.each do |sponsorship_level|
|
||||
-if sponsorship_level.sponsors.any?
|
||||
- sponsorship_level.sponsors.each_slice(3) do |slice|
|
||||
.row.row-centered
|
||||
- slice.each do |sponsor|
|
||||
.col-md-4.col-sm-4.col-centered.col-top
|
||||
%a{ href: '#', data: { toggle: 'modal', target: "#modal_#{sponsor.id}" } }
|
||||
= image_tag get_logo(sponsor), class: "img-responsive img-sponsor img-sponsor-#{sponsorship_level.position}"
|
||||
|
||||
.modal.fade{ id: "modal_#{sponsor.id}" }
|
||||
.modal-dialog
|
||||
.modal-content
|
||||
.modal-header
|
||||
%button.close{ data: { dismiss: 'modal' } }
|
||||
x
|
||||
.modal-title
|
||||
= sponsor.name
|
||||
.modal-body.text-center
|
||||
.logo
|
||||
= link_to sponsor.website_url, target: '_blank' do
|
||||
= image_tag get_logo(sponsor), class: "img-responsive img-sponsor img-sponsor-#{sponsorship_level.position}"
|
||||
.description
|
||||
= sponsor.description
|
||||
.modal-footer
|
||||
= link_to nil, "#{sponsor.website_url}", target: '_blank'
|
||||
-if @conference.contact and !@conference.contact.sponsor_email.blank?
|
||||
.row
|
||||
.col-md-12
|
||||
%p.text-muted.text-center
|
||||
%small
|
||||
Want to sponsor #{@conference.short_title}?
|
||||
= link_to("mailto: #{@conference.contact.sponsor_email}?subject=#{@conference.short_title}%20Sponsorship") do
|
||||
Please contact us!
|
||||
24
app/views/conferences/_tickets.haml
Normal file
24
app/views/conferences/_tickets.haml
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
= content_for :splash_nav do
|
||||
%li
|
||||
%a.smoothscroll{ href: '#tickets' } Tickets
|
||||
|
||||
- cache [conference, conference.tickets, '#splash#tickets'] do
|
||||
%section#tickets
|
||||
.container
|
||||
.row
|
||||
.col-md-12.text-center
|
||||
%h2
|
||||
Support
|
||||
= conference.title
|
||||
.row.row-centered
|
||||
- conference.tickets.each do |ticket|
|
||||
.col-md-3.col-sm-3.col-centered.col-top
|
||||
= link_to(conference_tickets_path(conference.short_title),
|
||||
class: 'thumbnail') do
|
||||
.caption
|
||||
%h3.text-center
|
||||
= ticket.title
|
||||
= markdown(ticket.description)
|
||||
%button.btn-block.btn.btn-lg.btn-success
|
||||
%i.fa.fa-ticket.fa-fw
|
||||
= humanized_money_with_symbol(ticket.price)
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
.container
|
||||
.row
|
||||
.col-md-12.text-center
|
||||
%h2
|
||||
Support
|
||||
=@conference.short_title
|
||||
%p.lead
|
||||
To support our event you can get these tickets
|
||||
- @conference.tickets.each_slice(4) do |slice|
|
||||
.row.row-centered
|
||||
- slice.each do |ticket|
|
||||
.col-md-3.col-centered.col-top.col-sm-3
|
||||
.thumbnail
|
||||
%p.text-center
|
||||
%i.fa.fa-ticket.fa-5x
|
||||
.caption
|
||||
%h3.text-center
|
||||
= ticket.title
|
||||
-if ticket.description.present?
|
||||
= markdown(ticket.description)
|
||||
%p.text-center
|
||||
= link_to(conference_tickets_path(@conference.short_title), class: 'btn btn-success') do
|
||||
Get Ticket
|
||||
= humanized_money_with_symbol ticket.price
|
||||
|
||||
17
app/views/conferences/_tracks.haml
Normal file
17
app/views/conferences/_tracks.haml
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
.row
|
||||
.col-md-12
|
||||
%h3.text-center
|
||||
Tracks
|
||||
.row.row-centered
|
||||
- conference.confirmed_tracks.to_a.sort_by!(&:name).each do |track|
|
||||
.col-md-3.col-sm-3.col-centered.col-top.track
|
||||
.thumbnail
|
||||
.caption
|
||||
%h3.text-center
|
||||
= track.name
|
||||
%p.text-center
|
||||
- if track.start_date && track.end_date
|
||||
= date_string(track.start_date, track.end_date)
|
||||
- if track.room
|
||||
In #{track.room.name}
|
||||
= markdown truncate(track.description, length: 200, separator: ' ')
|
||||
44
app/views/conferences/_venue.haml
Normal file
44
app/views/conferences/_venue.haml
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
= content_for :splash_nav do
|
||||
%li
|
||||
%a.smoothscroll{ href: '#venue' } Venue
|
||||
|
||||
- cache [conference.venue, conference.venue.commercial, '#splash#venue'] do
|
||||
%section#venue
|
||||
- if conference.venue.location?
|
||||
= render '/conferences/venue_map', conference: conference
|
||||
- else
|
||||
.container
|
||||
.row
|
||||
.col-md-6
|
||||
.thumbnail#venue-pic
|
||||
- if commercial = conference.venue.commercial
|
||||
.flexvideo{ id: "resource-content-#{commercial.id}" }
|
||||
= render 'shared/media_item',
|
||||
commercial: commercial
|
||||
- elsif conference.venue.picture?
|
||||
= image_tag conference.venue.picture.url,
|
||||
title: conference.venue.name, class: "img-responsive"
|
||||
- else
|
||||
%p.text-center
|
||||
%span.fa.fa-university.fa-5x
|
||||
.caption
|
||||
%h3.text-center
|
||||
= conference.venue.name
|
||||
- unless conference.venue.description.blank?
|
||||
= markdown(conference.venue.description)
|
||||
.col-md-6
|
||||
%h2
|
||||
= conference.venue.city
|
||||
\/
|
||||
= conference.venue.country_name
|
||||
%address
|
||||
= conference.venue.street
|
||||
%br
|
||||
= conference.venue.postalcode + ','
|
||||
= conference.venue.city
|
||||
%br
|
||||
= conference.venue.country_name
|
||||
- if conference.venue.website
|
||||
%br
|
||||
= sanitize link_to(h(conference.venue.website),
|
||||
h(conference.venue.website))
|
||||
|
|
@ -1,35 +0,0 @@
|
|||
= content_for :splash_nav do
|
||||
%li
|
||||
%a.smoothscroll{ href: '#venue' } Venue
|
||||
-if @conference.venue.location?
|
||||
= render '/conferences/venue_map'
|
||||
-else
|
||||
.container
|
||||
.row
|
||||
.col-md-6
|
||||
.thumbnail#venue-pic
|
||||
- if @conference.venue.commercial.present? and @conference.venue.commercial.persisted?
|
||||
.flexvideo{ id: "resource-content-#{@conference.venue.commercial.id}"}
|
||||
= render partial: 'shared/media_item', locals: { commercial: @conference.venue.commercial }
|
||||
- elsif @conference.venue.picture?
|
||||
= image_tag @conference.venue.picture.url, alt: @conference.venue.name, class:"img-responsive"
|
||||
- else
|
||||
%p.text-center
|
||||
%span.fa.fa-university.fa-5x
|
||||
.caption
|
||||
%h3.text-center
|
||||
= @conference.venue.name
|
||||
- unless @conference.venue.description.blank?
|
||||
= markdown(@conference.venue.description)
|
||||
.col-md-6
|
||||
%h2
|
||||
= "#{@conference.venue.city} / #{@conference.venue.country_name}"
|
||||
%address
|
||||
= @conference.venue.street
|
||||
%br
|
||||
= "#{@conference.venue.postalcode}, #{@conference.venue.city}"
|
||||
%br
|
||||
= @conference.venue.country_name
|
||||
- if @conference.venue.website
|
||||
%br
|
||||
=link_to(h(@conference.venue.website), h(@conference.venue.website)).html_safe
|
||||
|
|
@ -1,16 +1,29 @@
|
|||
#map{style: "height: 500px;" }
|
||||
#map{ style: "height: 500px;" }
|
||||
- content_for(:script_body) do
|
||||
- marker = escape_javascript(render '/conferences/venue_map_marker',
|
||||
venue: conference.venue)
|
||||
:javascript
|
||||
// create a map in the "map" div, set the view to a given place and zoom
|
||||
var map = L.map('map', { scrollWheelZoom: false }).setView([#{h(@conference.venue.latitude)}, #{h(@conference.venue.longitude)}], 11);
|
||||
var map = L.map('map', { scrollWheelZoom: false }).setView(
|
||||
[
|
||||
#{conference.venue.latitude.to_f + 0.05},
|
||||
#{h(conference.venue.longitude)}
|
||||
], 11);
|
||||
// add an OpenStreetMap tile layer
|
||||
L.tileLayer('//{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
|
||||
attribution: 'Map data © <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Imagery © <a href="http://mapbox.com">Mapbox</a>',
|
||||
attribution: 'Map data © \
|
||||
<a href="http://openstreetmap.org">OpenStreetMap</a> contributors, \
|
||||
<a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, \
|
||||
Imagery © <a href="http://mapbox.com">Mapbox</a>',
|
||||
maxZoom: 18
|
||||
}).addTo(map);
|
||||
// add a marker in the given location, attach some popup content to it and open the popup
|
||||
L.marker([#{h @conference.venue.latitude}, #{h @conference.venue.longitude}]).addTo(map)
|
||||
.bindPopup("#{escape_javascript(render '/conferences/venue_map_marker', venue: @conference.venue)}")
|
||||
// add a marker in the given location, attach some popup content to it
|
||||
// and open the popup
|
||||
L.marker([
|
||||
#{h conference.venue.latitude},
|
||||
#{h conference.venue.longitude}
|
||||
]).addTo(map)
|
||||
.bindPopup("#{marker}")
|
||||
.openPopup();
|
||||
// Turn scrollwheel on when user clicks
|
||||
map.on('focus', function(e) {
|
||||
|
|
@ -11,88 +11,56 @@
|
|||
= @conference.title
|
||||
|
||||
#splash
|
||||
- if @conference.splashpage
|
||||
#banner
|
||||
.container
|
||||
.row
|
||||
.col-md-8.col-md-offset-2#header
|
||||
.row
|
||||
.col-md-4
|
||||
= image_tag(@conference.picture_url, class: 'img-responsive img-center', id: 'splash-logo') if @conference.picture?
|
||||
.col-md-8
|
||||
%h1
|
||||
= @conference.title
|
||||
%p.lead
|
||||
- if @conference.venue
|
||||
= "#{@conference.venue.city} / #{@conference.venue.country_name}"
|
||||
- if @conference.start_date && @conference.end_date
|
||||
%br
|
||||
= date_string(@conference.start_date, @conference.end_date)
|
||||
// header/description
|
||||
= render 'header', conference: @conference
|
||||
|
||||
- unless @conference.description.blank?
|
||||
%section#about
|
||||
.container
|
||||
.row
|
||||
.col-md-8.col-md-offset-2
|
||||
%h3.text-center
|
||||
= markdown(@conference.description)
|
||||
// attendance/registration
|
||||
- if @conference.splashpage.include_registrations
|
||||
- if @conference.registration_open?
|
||||
= render 'registration', conference: @conference
|
||||
- if @conference.splashpage.include_tickets && @conference.tickets.any?
|
||||
= render 'tickets', conference: @conference
|
||||
|
||||
- if @conference.registration_open? and @conference.splashpage.include_registrations
|
||||
%section#registration
|
||||
= render 'registration'
|
||||
// calls for content, or program
|
||||
- if @conference.splashpage.include_cfp
|
||||
= render 'call_for_content', conference: @conference
|
||||
- if @conference.splashpage.include_program
|
||||
= render 'program', conference: @conference
|
||||
|
||||
- if @conference.splashpage.include_program
|
||||
%section#program
|
||||
= render 'schedule_splashpage'
|
||||
// geo
|
||||
- if @conference.splashpage.include_venue && @conference.venue
|
||||
= render 'venue', conference: @conference
|
||||
- if @conference.splashpage.include_lodgings && @conference.lodgings.any?
|
||||
= render 'lodging', conference: @conference
|
||||
|
||||
- if @conference.program.cfp_open? and @conference.splashpage.include_cfp
|
||||
%section#callforpapers
|
||||
= render 'call_for_paper'
|
||||
// sponsorship
|
||||
- if @conference.splashpage.include_sponsors
|
||||
= render 'sponsors', conference: @conference
|
||||
|
||||
- if @conference.program.cfps.for_tracks.try(:open?) && @conference.splashpage.include_cfp
|
||||
%section#callfortracks
|
||||
= render 'call_for_tracks'
|
||||
// footer
|
||||
- if @conference.splashpage.include_social_media
|
||||
- if @conference.contact.has_social_media?
|
||||
= render 'social_media', conference: @conference
|
||||
= render 'footer'
|
||||
|
||||
- if @conference.venue and @conference.splashpage.include_venue
|
||||
%section#venue
|
||||
= render 'venue'
|
||||
= yield :modals
|
||||
|
||||
- if @conference.lodgings.any? and @conference.splashpage.include_lodgings
|
||||
%section#lodging
|
||||
= render 'lodging'
|
||||
|
||||
- if @conference.tickets.any? and @conference.splashpage.include_tickets and @conference.pending?
|
||||
%section#tickets
|
||||
= render 'tickets'
|
||||
|
||||
- if @conference.booths.confirmed.any? and @conference.splashpage.include_booths
|
||||
%section#booths
|
||||
= render 'booths'
|
||||
|
||||
- if @conference.sponsors.any? and @conference.splashpage.include_sponsors
|
||||
%section#sponsors
|
||||
= render 'sponsors'
|
||||
|
||||
- if @conference.contact.has_social_media? and @conference.splashpage.include_social_media
|
||||
%section#social-media
|
||||
= render 'social_media'
|
||||
|
||||
// grmbl
|
||||
= render 'footer'
|
||||
|
||||
- content_for :script_head do
|
||||
:javascript
|
||||
var triangle_tcs = tinycolor("#{h(@conference.color)}").monochromatic();
|
||||
var triangle_colors = triangle_tcs.map(function(t) { return t.toHexString(); });
|
||||
$(function () {
|
||||
$(document).ready(function() {
|
||||
var triangle_width = document.body.clientWidth;
|
||||
var triangle_height = ($( "#banner" ).height() + 200 );
|
||||
var pattern = Trianglify({ width: triangle_width,
|
||||
height: triangle_height,
|
||||
cell_size: 100,
|
||||
x_colors: triangle_colors
|
||||
});
|
||||
$('#banner').css('background-image', 'url("' + pattern.png() + '")');
|
||||
- cache [@conference.color, '#splash#inlinejs'] do
|
||||
- content_for :script_head do
|
||||
:javascript
|
||||
var triangle_tcs = tinycolor("#{h(@conference.color)}").monochromatic();
|
||||
var triangle_colors = triangle_tcs.map(function(t) {
|
||||
return t.toHexString();
|
||||
});
|
||||
$(function () {
|
||||
$(document).ready(function() {
|
||||
var triangle_width = document.body.clientWidth;
|
||||
var triangle_height = ($( "#banner" ).height() + 200 );
|
||||
var pattern = Trianglify({ width: triangle_width,
|
||||
height: triangle_height,
|
||||
cell_size: 100,
|
||||
x_colors: triangle_colors
|
||||
});
|
||||
$('#banner').css('background-image', 'url("' + pattern.png() + '")');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
= link_to(edit_user_path(current_user.id)) do
|
||||
%span.fa.fa-user
|
||||
Edit Profile
|
||||
-if @conference and @conference.program
|
||||
-if @conference && @conference.program
|
||||
%li
|
||||
= link_to(conference_program_proposals_path(@conference.short_title)) do
|
||||
%span.fa.fa-comment
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
= link_to(conference_program_tracks_path(@conference.short_title)) do
|
||||
%span.fa.fa-road
|
||||
My Tracks
|
||||
-if @conference && @conference.program && (@conference.program.cfps.for_booths.try(:open?) || current_user.booths.where(conference_id: @conference.id).count > 0)
|
||||
-if @conference && (@conference.call_for_booths.try(:open?) || current_user.booths.where(conference_id: @conference.id).count > 0)
|
||||
%li
|
||||
= link_to (conference_booths_path(@conference.short_title)) do
|
||||
%span.fa.fa-shopping-bag
|
||||
|
|
@ -41,7 +41,7 @@
|
|||
=link_to(new_admin_conference_path) do
|
||||
%span.fa.fa-plus
|
||||
New Conference
|
||||
-if @conference and @conference.id and can? :show, @conference
|
||||
-if @conference && @conference.id && can?(:show, @conference)
|
||||
%li
|
||||
= link_to(admin_conference_path(@conference.short_title)) do
|
||||
%span.fa.fa-cog
|
||||
|
|
|
|||
|
|
@ -12,6 +12,8 @@ Osem::Application.configure do
|
|||
# since you don't have to restart the web server when you make code changes.
|
||||
config.cache_classes = false
|
||||
|
||||
config.cache_store = :memory_store, { size: 64.megabytes }
|
||||
|
||||
# Show full error reports and disable caching
|
||||
config.consider_all_requests_local = true
|
||||
config.action_controller.perform_caching = false
|
||||
|
|
|
|||
|
|
@ -46,6 +46,14 @@ Osem::Application.configure do
|
|||
|
||||
# Use a different cache store in production
|
||||
# config.cache_store = :mem_cache_store
|
||||
if ENV["MEMCACHEDCLOUD_SERVERS"]
|
||||
config.cache_store = :dalli_store, ENV["MEMCACHEDCLOUD_SERVERS"].split(','), {
|
||||
username: ENV["MEMCACHEDCLOUD_USERNAME"],
|
||||
password: ENV["MEMCACHEDCLOUD_PASSWORD"]
|
||||
}
|
||||
else
|
||||
config.cache_store = :memory_store, { size: 64.megabytes }
|
||||
end
|
||||
|
||||
# Enable serving of images, stylesheets, and JavaScripts from an asset server
|
||||
# config.action_controller.asset_host = "http://assets.example.com"
|
||||
|
|
|
|||
|
|
@ -237,7 +237,7 @@ feature 'Version' do
|
|||
|
||||
click_link 'Edit'
|
||||
uncheck('Display program')
|
||||
uncheck('Display call for papers information on splashpage, while cfp is open')
|
||||
uncheck('Display call for papers and call for tracks information on splashpage, while open')
|
||||
uncheck('Display venue')
|
||||
uncheck('Display tickets')
|
||||
uncheck('Display the lodgings')
|
||||
|
|
|
|||
|
|
@ -1,8 +1,9 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe ApplicationHelper, type: :helper do
|
||||
let(:conference) { create(:conference) }
|
||||
let(:conference) { create(:full_conference) }
|
||||
let(:event) { create(:event, program: conference.program) }
|
||||
let(:sponsor) { create(:sponsor) }
|
||||
|
||||
describe '#date_string' do
|
||||
it 'when conference lasts 1 day' do
|
||||
|
|
@ -75,4 +76,45 @@ describe ApplicationHelper, type: :helper do
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#get_logo' do
|
||||
context 'first sponsorship_level' do
|
||||
before do
|
||||
first_sponsorship_level = create(:sponsorship_level, position: 1)
|
||||
sponsor.update_attributes(sponsorship_level: first_sponsorship_level)
|
||||
end
|
||||
|
||||
it 'returns correct url' do
|
||||
expect(get_logo(sponsor)).to match %r{.*(\bfirst/#{sponsor.logo_file_name}\b)}
|
||||
end
|
||||
end
|
||||
|
||||
context 'second sponsorship_level' do
|
||||
before do
|
||||
second_sponsorship_level = create(:sponsorship_level, position: 2)
|
||||
sponsor.update_attributes(sponsorship_level: second_sponsorship_level)
|
||||
end
|
||||
|
||||
it 'returns correct url' do
|
||||
expect(get_logo(sponsor)).to match %r{.*(\bsecond/#{sponsor.logo_file_name}\b)}
|
||||
end
|
||||
end
|
||||
|
||||
context 'other sponsorship_level' do
|
||||
before do
|
||||
other_sponsorship_level = create(:sponsorship_level, position: 3)
|
||||
sponsor.update_attributes(sponsorship_level: other_sponsorship_level)
|
||||
end
|
||||
|
||||
it 'returns correct url' do
|
||||
expect(get_logo(sponsor)).to match %r{.*(\bothers/#{sponsor.logo_file_name}\b)}
|
||||
end
|
||||
end
|
||||
|
||||
context 'non-sponsor' do
|
||||
it 'returns correct url' do
|
||||
expect(get_logo(conference)).to match %r{.*(\blarge/#{conference.logo_file_name}\b)}
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
69
spec/helpers/conference_helper_spec.rb
Normal file
69
spec/helpers/conference_helper_spec.rb
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe ConferenceHelper, type: :helper do
|
||||
let!(:conference) { create(:conference) }
|
||||
let!(:contact) { create(:contact, conference: conference) }
|
||||
|
||||
describe '#one_call_open' do
|
||||
it 'is falsey if neither call is open' do
|
||||
expect(one_call_open(conference)).to be_falsey
|
||||
end
|
||||
|
||||
it 'is truthy if call_for_papers is open' do
|
||||
create(
|
||||
:cfp,
|
||||
program: conference.program,
|
||||
cfp_type: 'events',
|
||||
start_date: conference.start_date,
|
||||
end_date: conference.end_date
|
||||
)
|
||||
|
||||
expect(one_call_open(conference)).to be_truthy
|
||||
end
|
||||
|
||||
it 'is truthy if call_for_tracks is open' do
|
||||
create(
|
||||
:cfp,
|
||||
program: conference.program,
|
||||
cfp_type: 'tracks',
|
||||
start_date: conference.start_date,
|
||||
end_date: conference.end_date
|
||||
)
|
||||
|
||||
expect(one_call_open(conference)).to be_truthy
|
||||
end
|
||||
|
||||
it 'is falsey if both calls are open' do
|
||||
create(
|
||||
:cfp,
|
||||
program: conference.program,
|
||||
cfp_type: 'events',
|
||||
start_date: conference.start_date,
|
||||
end_date: conference.end_date
|
||||
)
|
||||
create(
|
||||
:cfp,
|
||||
program: conference.program,
|
||||
cfp_type: 'tracks',
|
||||
start_date: conference.start_date,
|
||||
end_date: conference.end_date
|
||||
)
|
||||
|
||||
expect(one_call_open(conference)).to be_falsey
|
||||
end
|
||||
end
|
||||
|
||||
describe '#sponsorship_mailto' do
|
||||
it 'constructs a mailto URL' do
|
||||
expect(sponsorship_mailto(conference)).to match 'mailto:'
|
||||
end
|
||||
|
||||
it 'points to the conference sponsor address' do
|
||||
expect(sponsorship_mailto(conference)).to match contact.sponsor_email
|
||||
end
|
||||
|
||||
it 'includes a conference identifier' do
|
||||
expect(sponsorship_mailto(conference)).to match conference.short_title
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -1,40 +0,0 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe SponsorsHelper, type: :helper do
|
||||
let(:sponsor) { create(:sponsor) }
|
||||
|
||||
describe '#get_logo' do
|
||||
context 'first sponsorship_level' do
|
||||
before do
|
||||
first_sponsorship_level = create(:sponsorship_level, position: 1)
|
||||
sponsor.update_attributes(sponsorship_level: first_sponsorship_level)
|
||||
end
|
||||
|
||||
it 'returns correct url' do
|
||||
expect(get_logo(sponsor)).to match %r{.*(\bfirst/#{sponsor.logo_file_name}\b)}
|
||||
end
|
||||
end
|
||||
|
||||
context 'second sponsorship_level' do
|
||||
before do
|
||||
second_sponsorship_level = create(:sponsorship_level, position: 2)
|
||||
sponsor.update_attributes(sponsorship_level: second_sponsorship_level)
|
||||
end
|
||||
|
||||
it 'returns correct url' do
|
||||
expect(get_logo(sponsor)).to match %r{.*(\bsecond/#{sponsor.logo_file_name}\b)}
|
||||
end
|
||||
end
|
||||
|
||||
context 'other sponsorship_level' do
|
||||
before do
|
||||
other_sponsorship_level = create(:sponsorship_level, position: 3)
|
||||
sponsor.update_attributes(sponsorship_level: other_sponsorship_level)
|
||||
end
|
||||
|
||||
it 'returns correct url' do
|
||||
expect(get_logo(sponsor)).to match %r{.*(\bothers/#{sponsor.logo_file_name}\b)}
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue