Refactoring of proposal workflow. Fixes #215

This commit is contained in:
Stella Rouzi 2015-04-16 18:34:41 +03:00
parent 333c5e39bf
commit e6bb168c5e
35 changed files with 491 additions and 192 deletions

View file

@ -8,13 +8,8 @@
.row
.col-md-8
= semantic_form_for(@commercial, :url => (@commercial.new_record? ? admin_conference_commercials_path : admin_conference_commercial_path(@conference.short_title, @commercial))) do |f|
= f.input :commercial_type, as: :select, label: 'Conference Promo Media Type', class: 'form-control', collection: CONFIG['commercial_types'].values, include_blank: false, hint: 'This media-item will be used to represent this conference at various places in OSEM.'
= f.input :commercial_type, as: :select, label: 'Conference Promo Media Type', input_html: { class: 'select-help-toggle' }, collection: CONFIG['commercial_types'].values, include_blank: false, hint: 'This media-item will be used to represent this conference at various places in OSEM.'
= f.input :commercial_id, label: 'Conference Promo Media ID', as: :string
%p{ class: 'help-block media-type', id: 'youtube-help' } Go to your YouTube video, click on "share" and copy everything behind http://youtu.be/"
%p{ class: 'help-block media-type', id: 'slideshare-help', style: 'display:none' } Go to your SlideShare, click on "share" -> "embed" and copy the id
%p{ class: 'help-block media-type', id: 'flickr-help', style: 'display:none' } Go to your flickr image, click on "Grab the link" -> "Show short url" and copy everything behind https://flic.kr/p/
%p{ class: 'help-block media-type', id: 'vimeo-help', style: 'display:none' } Go to your vimeo video, click on "share" and copy everything behind http://vimeo.com/
%p{ class: 'help-block media-type', id: 'speakerdeck-help', style: 'display:none' } Go to your SpeakerDeck, click on "share" -> "embed" and copy the data-id
%p{ class: 'help-block media-type', id: 'instagram-help', style: 'display:none' } Go to your Instagram photo page and copy everything behind instagram.com/p/ (without trailing /# hash symbol)
= render partial: 'commercials/commercial_help'
%p.text-right
= f.action :submit, as: :button, button_html: { class: 'btn btn-primary' }

View file

@ -6,7 +6,7 @@
.progress-bar{ 'role'=>'progressbar', 'aria-valuenow'=>"#{conference_progress['process']}", 'aria-valuemin'=>'0',
'aria-valuemax'=>'100', 'style'=>"width: #{conference_progress['process']}%;" }
= conference_progress['process'] + '%'
%li{'class'=>class_for_todo(conference_progress['registration'])}
%li{'class'=>"list-group-item #{class_for_todo(conference_progress['registration'])}"}
%span{'class'=>icon_for_todo(conference_progress['registration'])}
- if can? :update, @conference
- if conference.registration_period
@ -15,43 +15,43 @@
= link_to 'Set up registration period', new_admin_conference_registration_period_path(conference_progress['short_title'])
- else
Set up registration period
%li{'class'=>class_for_todo(conference_progress['cfp'])}
%li{'class'=>"list-group-item #{class_for_todo(conference_progress['cfp'])}"}
%span{'class'=>icon_for_todo(conference_progress['cfp'])}
- if can? :update, CallForPaper.new(conference_id: @conference.id)
= link_to 'Set up call for papers', admin_conference_call_for_paper_path(conference_progress['short_title'])
- else
Set up call for papers
%li{'class'=>class_for_todo(conference_progress['venue'])}
%li{'class'=>"list-group-item #{class_for_todo(conference_progress['venue'])}"}
%span{'class'=>icon_for_todo(conference_progress['venue'])}
- if can? :update, @conference.venue
= link_to 'Add venue', edit_admin_conference_venue_path(conference_progress['short_title'])
- else
Add venue
%li{'class'=>class_for_todo(conference_progress['rooms'])}
%li{'class'=>"list-group-item #{class_for_todo(conference_progress['rooms'])}"}
%span{'class'=>icon_for_todo(conference_progress['rooms'])}
- if can? :update, @conference.rooms.build
= link_to 'Add rooms', admin_conference_rooms_path(conference_progress['short_title'])
- else
Add rooms
%li{'class'=>class_for_todo(conference_progress['tracks'])}
%li{'class'=>"list-group-item #{class_for_todo(conference_progress['tracks'])}"}
%span{'class'=>icon_for_todo(conference_progress['tracks'])}
- if can? :update, @conference.tracks.build
= link_to 'Add tracks', admin_conference_tracks_path(conference_progress['short_title'])
- else
Add tracks
%li{'class'=>class_for_todo(conference_progress['event_types'])}
%li{'class'=>"list-group-item #{class_for_todo(conference_progress['event_types'])}"}
%span{'class'=>icon_for_todo(conference_progress['event_types'])}
- if can? :update, @conference.event_types.build
= link_to 'Add event types', admin_conference_event_types_path(conference_progress['short_title'])
- else
Add event types
%li{'class'=>class_for_todo(conference_progress['difficulty_levels'])}
%li{'class'=>"list-group-item #{class_for_todo(conference_progress['difficulty_levels'])}"}
%span{'class'=>icon_for_todo(conference_progress['difficulty_levels'])}
- if can? :update, @conference.difficulty_levels.build
= link_to 'Add difficulty levels', admin_conference_difficulty_levels_path(conference_progress['short_title'])
- else
Add difficulty levels
%li{class: class_for_todo(conference_progress['splashpage'])}
%li{class: "list-group-item #{class_for_todo(conference_progress['splashpage'])}"}
%span{'class'=>icon_for_todo(conference_progress['splashpage'])}
- if can? :update, @conference
= link_to 'Set up a Splashpage', admin_conference_splashpage_path(conference_progress['short_title'])

View file

@ -11,8 +11,9 @@
= semantic_form_for(@event_type, :url => (@event_type.new_record? ? admin_conference_event_types_path : admin_conference_event_type_path(@conference.short_title, @event_type))) do |f|
= f.input :title
= f.input :length, :input_html => {:size => 3}
= f.input :description
= f.input :minimum_abstract_length, :input_html => {:size => 3}
= f.input :maximum_abstract_length, :input_html => {:size => 3}
= f.input :color, :input_html => { :size => 6, :type => 'color' }
%p.text-right
= f.action :submit, as: :button, button_html: { class: 'btn btn-primary' }
= f.action :submit, as: :button, button_html: { class: 'btn btn-primary' }

View file

@ -0,0 +1,6 @@
%p{ class: 'help-block commercial_commercial_type collapse in', id: 'YouTube-help' } Go to your YouTube video, click on "share" and copy everything behind http://youtu.be/"
%p{ class: 'help-block commercial_commercial_type collapse', id: 'SlideShare-help' } Go to your SlideShare, click on "share" -> "embed" and copy the id
%p{ class: 'help-block commercial_commercial_type collapse', id: 'Flickr-help' } Go to your flickr image, click on "Grab the link" -> "Show short url" and copy everything behind https://flic.kr/p/
%p{ class: 'help-block commercial_commercial_type collapse', id: 'Vimeo-help' } Go to your vimeo video, click on "share" and copy everything behind http://vimeo.com/
%p{ class: 'help-block commercial_commercial_type collapse', id: 'Speakerdeck-help' } Go to your SpeakerDeck, click on "share" -> "embed" and copy the data-id
%p{ class: 'help-block commercial_commercial_type collapse', id: 'Instagram-help' } Go to your Instagram photo page and copy everything behind instagram.com/p/ (without trailing /# hash symbol)

View file

@ -1,9 +1,4 @@
= f.input :commercial_type, as: :select, label: 'Conference Promo Media Type', class: 'form-control', collection: CONFIG['commercial_types'].values, include_blank: false, hint: 'This media-item will be used to represent this conference at various places in OSEM.'
= f.input :commercial_id, label: 'Conference Promo Media ID', as: :string
%p{ class: 'help-block media-type', id: 'youtube-help' } Go to your YouTube video, click on "share" and copy everything behind http://youtu.be/"
%p{ class: 'help-block media-type', id: 'slideshare-help', style: 'display:none' } Go to your SlideShare, click on "share" -> "embed" and copy the id
%p{ class: 'help-block media-type', id: 'flickr-help', style: 'display:none' } Go to your flickr image, click on "Grab the link" -> "Show short url" and copy everything behind https://flic.kr/p/
%p{ class: 'help-block media-type', id: 'vimeo-help', style: 'display:none' } Go to your vimeo video, click on "share" and copy everything behind http://vimeo.com/
%p{ class: 'help-block media-type', id: 'speakerdeck-help', style: 'display:none' } Go to your SpeakerDeck, click on "share" -> "embed" and copy the data-id
%p{ class: 'help-block media-type', id: 'instagram-help', style: 'display:none' } Go to your Instagram photo page and copy everything behind instagram.com/p/ (without trailing /# hash symbol)
= f.action :submit, as: :button, button_html: { class: 'btn btn-primary' }
= f.input :commercial_type, as: :select, label: 'Type', input_html: { class: 'form-control select-help-toggle' }, collection: CONFIG['commercial_types'].values, include_blank: false, hint: 'This media-item will be used to represent this conference at various places in OSEM.'
= f.input :commercial_id, label: 'ID', as: :string, input_html: { required: 'required' }
= render partial: 'commercial_help'
= f.action :submit, as: :button, button_html: { class: 'btn btn-primary pull-right' }

View file

@ -7,4 +7,3 @@
.col-md-12
= semantic_form_for @commercial, url: conference_proposal_commercial_path(conference_id: @conference.short_title, proposal_id: @event.id, id: @commercial.id) do |f|
= render 'form', f: f
= link_to 'Back', edit_conference_proposal_path(conference_id: @conference.short_title, id: @event.id)

View file

@ -7,4 +7,3 @@
.col-md-12
= semantic_form_for @commercial, url: conference_proposal_commercials_path(conference_id: @conference.short_title, proposal_id: @event.id) do |f|
= render 'form', f: f
= link_to 'Back', edit_conference_proposal_path(conference_id: @conference.short_title, id: @event.id)

View file

@ -31,7 +31,7 @@
- if !current_user.nil? && current_user.proposal_count(conference) > 0
= link_to "My Proposals", conference_proposal_index_path(conference.short_title), :class =>"btn btn-default"
- elsif conference.cfp_open?
= link_to "Submit Proposal", conference_proposal_index_path(conference.short_title), :class =>"btn btn-default"
= link_to "Submit Proposal", new_conference_proposal_path(conference.short_title), :class =>"btn btn-default"
- if current_user.nil? || !current_user.subscribed?(conference)
= link_to 'Subscribe', conference_subscriptions_path(conference.short_title), method: :post, class: 'btn btn-default'
- else

View file

@ -21,10 +21,7 @@
= semantic_form_for(@registration, url: conference_conference_registrations_path(@conference.short_title)) do |f|
- if !current_user
= f.fields_for :user do |u|
= u.input :username, input_html: {required: 'required', autocomplete: 'off'}
= u.input :email, input_html: {required: 'required', autocomplete: 'off'}
= u.input :password, input_html: {required: 'required', autocomplete: 'off'}
= u.input :password_confirmation, :required => true, input_html: {required: 'required', autocomplete: 'off'}
= render partial: 'devise/shared/sign_up_fields', locals: { u: u}
- if @conference.questions.any?
= render partial: 'questions', locals: { f: f }
- if @conference.events.workshops.any?
@ -64,4 +61,4 @@
%p.text-center
or sign in using
.text-center
= render 'devise/shared/openid'
= render 'devise/shared/openid'

View file

@ -7,11 +7,7 @@
Sign Up
.panel-body
= semantic_form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f|
= f.input :username, required: true
= f.input :email
= f.input :name, required: true
= f.input :password
= f.input :password_confirmation
= render partial: 'devise/shared/sign_up_fields', locals: { u: f}
%p.text-right
= f.action :submit, as: :button, label: 'Sign Up', button_html: {class: 'btn btn-success' }
- unless omniauth_configured.empty?

View file

@ -0,0 +1,4 @@
= u.input :username, input_html: {required: 'required', autocomplete: 'off'}
= u.input :email, input_html: {required: 'required', autocomplete: 'off'}
= u.input :password, input_html: {required: 'required', autocomplete: 'off', id: 'password_inline'}
= u.input :password_confirmation, :required => true, input_html: {required: 'required', autocomplete: 'off'}

View file

@ -0,0 +1,23 @@
%p.lead
- if @conference.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)}."
- if @conference.call_for_paper
The submission period has begun
%em
= @conference.call_for_paper.start_date.strftime('%A, %B %-d. %Y')
and closes
%em
= @conference.call_for_paper.end_date.strftime('%A, %B %-d. %Y.')
That means you have only
- days = (@conference.call_for_paper.end_date - Date.today).to_i
%b
= pluralize(days, 'days')
left!
Remember
= @conference.title
will only be as good as the content you present. Submit early, submit often!

View file

@ -12,10 +12,10 @@
= render 'proposal/proposal_form'
#commercials-content.tab-pane
%p.text-muted
You can add commercials for your event. These commercials will be displayed on the event detail site.
You can add commercials for your proposal. These commercials will be displayed on the
= link_to 'public proposal page.', conference_proposal_path(@conference.short_title, @event)
If you don't add a commercial, the conference commercial will be displayed!
We currently support the following commercial types: YouTube, Vimeo, Instagram, Flickr, Speakerdeck and SlideShare.
- @event.commercials.each_slice(3) do |slice|
.row
- slice.each do |commercial|

View file

@ -1,55 +1,53 @@
= semantic_form_for(@event, :url => @url) do |f|
%section#basic
= f.inputs :name => "Session Information" do
- if can? :update, @event or can? :create, @event
= f.input :title, :as => :string, :required => true
- else
Title: #{@event.title}
%br
%br
= f.input :subtitle, :as => :string
%section#details
- if can? :update, @event or can? :create, @event
= f.input :event_type_id, as: :select,
= semantic_form_for(@event, url: @url) do |f|
= f.inputs name: 'Proposal Information' do
= f.input :title, as: :string, required: true
= f.input :subtitle, as: :string
= f.input :event_type_id, as: :select,
collection: @conference.event_types.map {|type| ["#{type.title} - #{show_time(type.length)}", type.id,
data: { min_words: type.minimum_abstract_length, max_words: type.maximum_abstract_length }]},
include_blank: false, label: 'Session Type'
- else
Event type: #{@event.event_type.title}
include_blank: false, label: 'Type', input_html: { class: 'select-help-toggle' }
- @conference.event_types.each do |event_type|
%span{ class: 'help-block select-help-text event_event_type_id collapse', id: "#{event_type.id}-help" }
= event_type.description
:javascript
$("##{@conference.event_types.first.id}-help").collapse('show');
= f.input :difficulty_level, as: :select, collection: @conference.difficulty_levels, input_html: { class: 'select-help-toggle' },
include_blank: '(Please select)' if @conference.difficulty_levels.any?
- @conference.difficulty_levels.each do |difficulty_level|
%span{ class: 'help-block select-help-text collapse event_difficulty_level_id', id: "#{difficulty_level.id}-help" }
= difficulty_level.description
= f.input :abstract, input_html: { rows: 5 },
required: true, hint: link_to('Tips to improve your presentations', 'http://blog.hubspot.com/blog/tabid/6307/bid/5975/10-Rules-to-Instantly-Improve-Your-Presentations.aspx')
%p
You have used
%span#abstract-count #{@event.abstract_word_count}
words. Abstracts must be between
%span#abstract-minimum-word-count
0
and
%span#abstract-maximum-word-count
250
words.
= f.input :require_registration, label: 'Require participants to register to your event'
- if current_user.has_any_role? :admin, { name: :organizer, resource: @conference }, { name: :cfp, resource: @conference }
= f.label :is_highlight
%br
= f.check_box :is_highlight, class: 'switch-checkbox', data: { size: "small" }
= f.input :is_highlight
%p.text-right
= link_to '#description', "data-toggle"=>"collapse" do
Do you require something special?
.collapse#description
= f.input :description, input_html: { rows: 5 }, label: 'Requirements', placeholder: 'Eg. Whiteboard, printer, or something like that.'
%br
= f.input :difficulty_level, :as => :select, :collection => @conference.difficulty_levels, :include_blank => "(Please select)" if @conference.difficulty_levels.any?
= f.input :require_registration
= f.input :abstract, :input_html => {:rows => 5, :class => "span11"},
:required => true, :label => "Session Abstract"
You have used
%span#abstract-count #{@event.abstract_word_count}
words. Abstracts must be between
%span#abstract-minimum-word-count
0
and
%span#abstract-maximum-word-count
250
words.
%br
%br
= f.input :description, :input_html => {:rows => 5, :class=> "span11"}, :hint => "This will only be shown to organizers, not to attendees."
%section#information
- if current_user.name.blank? || current_user.biography.blank?
= f.inputs :name => "Your Information" do
= semantic_fields_for current_user do |u|
- if current_user.name.blank?
= u.input :name, :as => :string, :required => true
- if current_user.biography.blank?
= u.input :biography, :required => true, :input_html => {:rows => 5, :class => 'span11', "onkeyup" => "word_count(this, 'biography-count', 150)"}
You have used
%span#biography-count #{current_user.biography_word_count}
words. Biographies are limited to 150 words.
%p.text-right
= f.action :submit, :as => :button, :button_html => {:class => "btn btn-success"}
= f.action :submit, :as => :button, :button_html => {:class => "btn btn-success"}, label: 'Update Proposal'

View file

@ -0,0 +1,36 @@
- progress_status = event.progress_status
%ul.list-unstyled
%li{'class'=>class_for_todo(progress_status['registered'])}
%span{'class'=>icon_for_todo(progress_status['registered'])}
- if progress_status['registered']
= link_to 'Edit your registration', edit_conference_conference_registrations_path(event.conference.short_title)
- else
= link_to 'Register to the conference', new_conference_conference_registrations_path(event.conference.short_title)
%li{'class'=>class_for_todo(progress_status['biography'])}
%span{'class'=>icon_for_todo(progress_status['biography'])}
- if progress_status['biography']
= link_to 'Edit your biography', edit_user_path(event.submitter)
- else
= link_to 'Fill out your biography', edit_user_path(event.submitter)
%li{'class'=>class_for_todo(progress_status['subtitle'])}
%span{'class'=>icon_for_todo(progress_status['subtitle'])}
- if progress_status['subtitle']
= link_to 'Edit the subtitle', edit_conference_proposal_path(event.conference.short_title, event)
- else
= link_to 'Add a subtitle', edit_conference_proposal_path(event.conference.short_title, event)
%li{'class'=>class_for_todo(progress_status['commercials'])}
%span{'class'=>icon_for_todo(progress_status['commercials'])}
- if progress_status['commercials']
= link_to 'Edit the commercials', edit_conference_proposal_path(event.conference.short_title, event, anchor: 'commercials-content')
- else
= link_to 'Add a commercial', new_conference_proposal_commercial_path(event.conference.short_title, event)
%li{'class'=>class_for_todo(progress_status['difficulty_level'])}
%span{'class'=>icon_for_todo(progress_status['difficulty_level'])}
- if progress_status['difficulty_level']
= link_to 'Change the difficulty level', edit_conference_proposal_path(event.conference.short_title, event)
- else
= link_to 'Add a difficulty level', edit_conference_proposal_path(event.conference.short_title, event)

View file

@ -3,45 +3,99 @@
.col-md-12.page-header
%h1
= "My Proposals for #{@conference.title}"
- if @conference.cfp_open? || (current_user.has_role? :organizer, @conference)
= link_to "New Proposal", new_conference_proposal_path(@conference.short_title), :class => "btn btn-success pull-right"
- if current_user.proposal_count(@conference) > 0
.row
.col-md-12
= render partial: 'encouragement_text'
- if @events.any?
- if @events.highlighted.any?
.row
.col-md-12
%p.lead
%strong
Congratulations!
Some of your proposals have been selected as a highlight of #{@conference.title}!
%ul
- @events.highlighted.each do |event|
%li= link_to event.title, conference_proposal_path(@conference.short_title, event)
.row
.col-md-12
%table.table.table-bordered.table-striped
%thead
%th
%b Title
%th
%b Status
%th
%p.text-right
= link_to '#status-help', class: 'btn btn-default', "data-toggle"=>"collapse" do
Help?
.collapse#status-help
%p
%strong
What happens next with my proposal?
%p
If you submit a proposal, the conference organizers will review it and either accept or reject it.
%br
If your proposal is accepted, the conference organizers expect you to confirm that you will be able to hold it.
%br
If your proposal is rejected, you can either live with that or adapt it and resubmit it for review again.
%br
If something changes and you can't hold the presentation any more, you should withdraw it.
%p
%strong
Why do I need to add more information?
%p
The more information you add to your proposal, the more likely it is that the conference organizers accept your proposal.
%br
It will also be more likely that visitors find your proposal interesting enough to attend.
%p
%strong
Why do I need to register to the conference?
%p
Knowing the number of visitors for the conference helps the organizers plan better.
%table.table.table-striped
- @events.each do |event|
%tr
%td
%td{style: "padding:20px 8px 20px 8px;"}
%span{ title: event.state.humanize, class: "fa #{event_status_icon(event)}" }
%td.col-md-7{style: "padding:20px 8px 20px 8px;"}
= link_to event.title, conference_proposal_path(@conference.short_title, event.id)
%td
- if event.state == 'new'
Review pending
- else
= event.state.humanize
- if event.state == 'confirmed' && event.require_registration == true
(Pre-registered: #{pre_registered(event).count})
- if event.confirmed? && !@conference.user_registered?(current_user)
%br
= link_to "Register to attend", new_conference_conference_registrations_path(@conference.short_title), :style => "font-size:10px;"
%td
%br
%small.text-muted
= event.event_type.title
= "(#{event.event_type.length} min)"
- if event.state == 'confirmed' && event.require_registration == true
,
Pre-registered: #{pre_registered(event).count}
%td.col-md-2{style: "padding:20px 8px 20px 8px;"}
= link_to 'Complete your todo list', 'javascript: void(0)', "type"=>"button", "data-trigger"=>"focus", "data-toggle"=>"popover", "title"=>"Your todo list", "data-content"=>"#{render partial: 'tooltip', locals: { event: event} }"
- progress_percentage = event.calculate_progress
.progress
%div{class: "progress-bar #{event_progress_color(progress_percentage)}", style: "width:#{progress_percentage}%;"}
= event.progress_status.reject{ |_key, value| value }.length
left
%td.col-md-3{style: "padding:20px 0px 20px 0px;"}
.pull-right
- if event.transition_possible? :confirm
= link_to 'Confirm',
confirm_conference_proposal_path(@conference.short_title, event),
method: :patch, class: 'btn btn-mini btn-success', id: "confirm_proposal_#{event.id}"
= link_to 'Edit', edit_conference_proposal_path(@conference.short_title, event.id),
class: 'btn btn-mini btn-primary', id: "edit_proposal_#{event.id}"
- if event.transition_possible? :withdraw
= link_to 'Withdraw', conference_proposal_path(@conference.short_title, event.id), method: :delete,
confirm: 'Are you sure you want to withdraw this proposal?', class: 'btn btn-mini btn-warning',
data: { confirm: 'Are you sure you want to withdraw this proposal?' }, class: 'btn btn-mini btn-warning',
id: "delete_proposal_#{event.id}"
- if event.state == 'withdrawn' || event.state == 'rejected'
= link_to 'Re-Submit',
restart_conference_proposal_path(@conference.short_title, event.id),
method: :patch, class: 'btn btn-mini btn-success', id: "review_event_#{event.id}"
= link_to 'Edit', edit_conference_proposal_path(@conference.short_title, event.id),
class: 'btn btn-default', id: "edit_proposal_#{event.id}"
.row
.col-md-12
- if @conference.cfp_open? || (current_user.has_role? :organizer, @conference)
= link_to "New Proposal", new_conference_proposal_path(@conference.short_title), :class => "btn btn-success pull-right"

View file

@ -1,28 +1,93 @@
.container
.row
.col-md-12
%p
- if @conference.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
= @conference.call_for_paper.start_date.strftime('%A, %B %-d. %Y')
and closes
%em
= @conference.call_for_paper.end_date.strftime('%A, %B %-d. %Y.')
That means you have only
- days = (@conference.call_for_paper.end_date - Date.today).to_i
%b
= pluralize(days, 'days')
left!
Remember
= @conference.short_title
will only be as good as the sessions you present. Submit early, submit often!
.page-header
%h1 New Proposal
.row
.col-md-12
= render 'proposal_form'
= render partial: 'encouragement_text'
.row
.col-md-8
- if !current_user
%legend
%span
=link_to('#signup', role: 'tab', "aria-controls" => "home", "data-toggle" => "tab") do
= CONFIG['name']
Account
%span.pull-right#account-already
=link_to('#signin', role: 'tab', "aria-controls" => "home", "data-toggle" => "tab") do
Already have an account?
.tab-content
.tab-pane.active{role: 'tabpanel', id: 'signup'}
= semantic_form_for(@event, url: @url) do |f|
- unless current_user
= semantic_fields_for @user do |u|
= render partial: 'devise/shared/sign_up_fields', locals: { u: u }
= f.inputs name: 'Proposal Information' do
= f.input :title, as: :string, required: true
= f.input :event_type_id, as: :select,
collection: @conference.event_types.map {|type| ["#{type.title} - #{show_time(type.length)}", type.id,
data: { min_words: type.minimum_abstract_length, max_words: type.maximum_abstract_length }]},
include_blank: false, label: 'Type', input_html: { class: 'select-help-toggle' }
- @conference.event_types.each do |event_type|
%span{ class: 'help-block event_event_type_id collapse', id: "#{event_type.id}-help" }
= event_type.description
:javascript
$("##{@conference.event_types.first.id}-help").collapse('show');
= f.input :abstract, input_html: { rows: 5 },
required: true, hint: link_to('Tips to improve your presentations', 'http://blog.hubspot.com/blog/tabid/6307/bid/5975/10-Rules-to-Instantly-Improve-Your-Presentations.aspx')
%p
You have used
%span#abstract-count #{@event.abstract_word_count}
words. Abstracts must be between
%span#abstract-minimum-word-count
0
and
%span#abstract-maximum-word-count
250
words.
= f.input :require_registration, label: 'Require participants to register to your event'
%p.text-right
= link_to '#description', "data-toggle"=>"collapse", id: 'description_link' do
Do you require something special?
.collapse#description
= f.input :description, input_html: { rows: 5 }, label: 'Requirements', placeholder: 'Eg. Whiteboard, printer, or something like that.'
%p.text-right
= f.action :submit, :as => :button, :button_html => {:class => "btn btn-success"}, label: 'Create Proposal'
.tab-pane{role: 'tabpanel', id: 'signin'}
- if !CONFIG['authentication']['ichain']['enabled']
= form_tag(new_user_session_path, class: 'form-horizontal') do
%legend
%span
Sign In
.form-group
%label{for: "user[login]", class: 'col-sm-2 control-label'}
Username
.col-sm-10
= text_field_tag 'user[login]', nil, placeholder: 'Username', class: 'form-control', required: 'required'
.form-group
%label{for: "user[password]", class: 'col-sm-2 control-label'}
Password
.col-sm-10
= password_field_tag 'user[password]', nil, placeholder: 'Password', class: 'form-control', required: 'required'
.form-group
.col-sm-12
%button.btn.btn-success.pull-right
Sign in
- unless omniauth_configured.empty?
.form-group
%hr
%p.text-center
or sign in using
.text-center
= render 'devise/shared/openid'