Changed paragraph font to Queulat and started work on the schedule maker

This commit is contained in:
Godwin 2016-07-01 16:16:57 -07:00
parent 88dae7b77a
commit fe0c9bbfa6
21 changed files with 25488 additions and 67 deletions

Binary file not shown.

Binary file not shown.

6007
app/assets/fonts/queulat.svg Normal file

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 292 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -13,7 +13,7 @@ body {
padding-bottom: 20vw; padding-bottom: 20vw;
} }
h1, h2, h3, h4, h5, label, button, .button, dt, th, nav.sub-menu { h1, h2, h3, h4, h5, label, button, .button, dt, th, .table-th, nav.sub-menu {
@include font-family(secondary); @include font-family(secondary);
font-weight: normal; font-weight: normal;
} }
@ -23,6 +23,10 @@ h2 {
font-size: 6vw; font-size: 6vw;
} }
h3 {
font-size: 4.5vw;
}
h3.subtitle { h3.subtitle {
font-size: 1.5em; font-size: 1.5em;
} }
@ -70,32 +74,53 @@ a {
position: absolute !important; position: absolute !important;
} }
table { table, .table {
margin-bottom: 2em; margin-bottom: 2em;
margin-left: 1em; margin-left: 1em;
// background-color: #F8F8F8; // background-color: #F8F8F8;
// width: 100%; // width: 100%;
// @include default-box-shadow(top, 2, true); // @include default-box-shadow(top, 2, true);
th, td { th, td, .table-th, .table-td {
text-align: left; text-align: left;
padding: 0.25em 0.5em; padding: 0.25em 0.5em;
border: 0.1em solid #EEE; border: 0.1rem solid #EEE;
&:first-child { &.center {
text-align: center;
}
&.big {
font-size: 1.5em;
}
/*&:first-child {
padding-left: 1em; padding-left: 1em;
} }
&:last-child { &:last-child {
padding-right: 1em; padding-right: 1em;
} }*/
} }
th { th, .table-th {
background-color: #F8F8F8; background-color: #F8F8F8;
} }
} }
.table {
display: table;
border-collapse: collapse;
}
.table-tr {
display: table-row;
}
.table-th, .table-td {
display: table-cell;
}
button, button,
.button { .button {
@include button; @include button;
@ -451,6 +476,12 @@ input {
margin-bottom: 3em; margin-bottom: 3em;
position: relative; position: relative;
@include default-box-shadow(top); @include default-box-shadow(top);
td &,
.table-td & {
@include _(box-shadow, none);
margin: 0;
}
label { label {
display: block; display: block;
@ -572,6 +603,14 @@ input {
display: inline-block; display: inline-block;
} }
.check-box-field.small {
font-size: 0.75em;
&.small label {
font-size: 1.125em;
}
}
.radio-button-field { .radio-button-field {
label { label {
width: 7em; width: 7em;
@ -655,16 +694,27 @@ form {
} }
} }
#main .columns th.form { #main .columns th.form,
#main .columns .table-th.form {
display: none; display: none;
} }
#main .columns td.form { #main .columns td.form,
#main .columns .table-td.form {
border: 0; border: 0;
form { form {
margin: 0; margin: 0;
} }
button {
display: block;
width: 100%;
+ button {
margin-top: 0.5em;
}
}
} }
fieldset { fieldset {
@ -1306,6 +1356,14 @@ ul.warnings li,
} }
} }
#admin-schedule {
.workshop-blocks {
td, th {
vertical-align: top;
}
}
}
#main { #main {
position: relative; position: relative;
background-color: $white; background-color: $white;
@ -2672,6 +2730,11 @@ html[data-lingua-franca-example="html"] {
border: 0.1rem solid #CCC; border: 0.1rem solid #CCC;
cursor: pointer; cursor: pointer;
@include default-box-shadow(top, 1.5, false); @include default-box-shadow(top, 1.5, false);
td &,
.table-td & {
@include _(box-shadow, none);
}
} }
} }
@ -2779,8 +2842,12 @@ html[data-ontop] {
font-size: 2.25em; font-size: 2.25em;
} }
h3 {
font-size: 1.4em;
}
p { p {
font-size: 1.333em; font-size: 1.25em;
} }
form { form {
@ -3089,7 +3156,7 @@ html[data-ontop] {
figure { figure {
float: left; float: left;
width: 33%; width: 33%;
margin: 0 1.5em 1.5em -1.5em; margin: 0 1.5em 1em -1.5em;
} }
} }
} }

View File

@ -63,10 +63,10 @@
"font-loading-method": "http2", "font-loading-method": "http2",
"fonts": { "fonts": {
"primary": { "primary": {
"name": "SourceSansPro-Regular", "name": "queulat",
"location": "SourceSansPro-Regular", "location": "queulat",
"svg_id": "source_sans_proregular", "svg_id": "queulat",
"ttf_type": "otf", "ttf_type": "ttf",
"fallback": ["Helvetica Neue", "Helvetica", "Arial", "Lucida Grande", "sans-serif"] "fallback": ["Helvetica Neue", "Helvetica", "Arial", "Lucida Grande", "sans-serif"]
}, },
"secondary": { "secondary": {

View File

@ -809,6 +809,10 @@ class ConferencesController < ApplicationController
@day = nil @day = nil
@time = nil @time = nil
@length = 1.5 @length = 1.5
when :meals
@meals = Hash[@this_conference.meals.map{ |k, v| [k.to_i, v] }].sort.to_h
when :schedule
get_scheule_data
end end
when :done when :done
@amount = ((@registration.registration_fees_paid || 0) * 100).to_i.to_s.gsub(/^(.*)(\d\d)$/, '\1.\2') @amount = ((@registration.registration_fees_paid || 0) * 100).to_i.to_s.gsub(/^(.*)(\d\d)$/, '\1.\2')
@ -816,6 +820,30 @@ class ConferencesController < ApplicationController
end end
def get_scheule_data
@meals = Hash[@this_conference.meals.map{ |k, v| [k.to_i, v] }].sort.to_h
@events = Event.where(:conference_id => @this_conference.id).order(start_time: :asc)
@workshops = Workshop.where(:conference_id => @this_conference.id).order(start_time: :asc)
@locations = {}
@workshop_blocks = @this_conference.workshop_blocks || []
@workshop_blocks << {
'time' => nil,
'length' => 1.0,
'days' => []
}
@workshops.each do |workshop|
if workshop.location_id
@locations[workshop.location_id] ||= workshop.location
end
end
@block_days = []
day = @this_conference.start_date
while day <= @this_conference.end_date
@block_days << day.wday
day += 1.day
end
end
def get_housing_data def get_housing_data
@hosts = {} @hosts = {}
@guests = {} @guests = {}
@ -1063,6 +1091,18 @@ class ConferencesController < ApplicationController
return redirect_to administration_step_path(@this_conference.slug, :events) return redirect_to administration_step_path(@this_conference.slug, :events)
end end
when 'schedule'
case params[:button]
when 'save_block'
@this_conference.workshop_blocks ||= []
@this_conference.workshop_blocks[params[:workshop_block].to_i] = {
'time' => params[:time],
'length' => params[:time_span],
'days' => params[:days].keys
}
@this_conference.save
return redirect_to administration_step_path(@this_conference.slug, :schedule)
end
end end
do_404 do_404
end end

View File

@ -1077,6 +1077,26 @@ module ApplicationHelper
checkboxes(name, [true], value, label_key, options) checkboxes(name, [true], value, label_key, options)
end end
def unique_id(id)
id = id.to_s.gsub('[', '_').gsub(']', '')
@_ids ||= {}
@_ids[id] ||= 0
new_id = id
if @_ids[id] > 0
#puts " ====== #{id} - #{@_ids[id]} : #{@_ids[id] + 1} ====== "
new_id += "--#{@_ids[id]}"
end
puts " ====== #{id} = #{@_ids[id]} ====== "
@_ids[id] += 1
puts " ====== #{id} = #{@_ids[id]} ====== "
return new_id
end
def checkboxes(name, boxes, values, label_key, options = {}) def checkboxes(name, boxes, values, label_key, options = {})
html = '' html = ''
@ -1084,42 +1104,54 @@ module ApplicationHelper
description_id = nil description_id = nil
if options[:heading].present? if options[:heading].present?
label_id ||= "#{name.to_s}-label" label_id ||= unique_id("#{name.to_s}-label")
html += content_tag(:h3, _(options[:heading], :t), id: label_id) html += content_tag(:h3, _(options[:heading], :t), id: label_id)
end end
if options[:help].present? if options[:help].present?
description_id ||= "#{name.to_s}-desc" description_id ||= unique_id("#{name.to_s}-desc")
html += content_tag(:div, _(options[:help], :s, 2), class: 'input-field-help', id: description_id) html += content_tag(:div, _(options[:help], :s, 2), class: 'input-field-help', id: description_id)
end end
boxes_html = '' boxes_html = ''
is_single = !values.is_a?(Array) is_single = !values.is_a?(Array)
values = values.present? ? values.map(&:to_s) : [] unless is_single unless boxes.length > 0 && boxes.first.is_a?(Integer)
boxes = boxes.map(&:to_s) values = values.present? ? values.map(&:to_s) : [] unless is_single
boxes = boxes.map(&:to_s)
end
boxes.each do | box | boxes.each do | box |
checked = (is_single ? values.present? : values.include?(box)) checked = (is_single ? values.present? : values.include?(box))
values -= [box] if checked && !is_single values -= [box] if checked && !is_single
id = nil id = nil
if options[:radiobuttons].present? if options[:radiobuttons].present?
id = "#{name.to_s}_#{box}" id = unique_id("#{name.to_s}_#{box}")
boxes_html += radio_button_tag(name, box, checked) boxes_html += radio_button_tag(name, box, checked, id: id)
else else
id = (is_single ? name : "#{name.to_s}[#{box}]") _name = (is_single ? name : "#{name.to_s}[#{box}]")
boxes_html += check_box_tag(id, 1, checked, data: { toggles: options[:toggles] }.compact) id = unique_id(_name)
boxes_html += check_box_tag(_name, 1, checked, data: { toggles: options[:toggles] }.compact, id: id)
end end
boxes_html += label_tag(id, _(is_single ? label_key.to_s : "#{label_key.to_s}.#{box}")) if is_single
label = _(label_key.to_s)
elsif box.is_a?(Integer)
label = I18n.t(label_key.to_s)[box]
else
label = _("#{label_key.to_s}.#{box}")
end
boxes_html += label_tag(id, label)
end end
if options[:other].present? && !is_single if options[:other].present? && !is_single
id = nil id = nil
if options[:radiobuttons].present? if options[:radiobuttons].present?
id = "#{name.to_s}_other" id = unique_id("#{name.to_s}_other")
boxes_html += radio_button_tag(name, :other, values.present?) boxes_html += radio_button_tag(name, :other, values.present?, id: id)
else else
id = "#{name.to_s}[other]" _name = "#{name.to_s}[other]"
boxes_html += check_box_tag(id, 1, values.present?) id = unique_id(_name)
boxes_html += check_box_tag(_name, 1, values.present?, id: id)
end end
boxes_html += label_tag id, boxes_html += label_tag id,
content_tag(:div, content_tag(:div,
@ -1132,7 +1164,8 @@ module ApplicationHelper
'check-box-field', 'check-box-field',
'input-field', 'input-field',
options[:vertical] ? 'vertical' : nil, options[:vertical] ? 'vertical' : nil,
options[:inline] ? 'inline' : nil options[:inline] ? 'inline' : nil,
options[:small] ? 'small' : nil
]).html_safe, ]).html_safe,
aria: { aria: {
labeledby: label_id, labeledby: label_id,

View File

@ -5,8 +5,9 @@
%h2=_'articles.about_bikebike.headings.What_is_BikeBike', :t %h2=_'articles.about_bikebike.headings.What_is_BikeBike', :t
%p=_'articles.about_bikebike.paragraphs.What_is_BikeBike', :p %p=_'articles.about_bikebike.paragraphs.What_is_BikeBike', :p
= columns(medium: 12) do = columns(medium: 12, class: 'featured-image-container') do
%h3=_'articles.about_bikebike.headings.bicycle_project', :t %h3=_'articles.about_bikebike.headings.bicycle_project', :t
%figure{style: "background-image: url(#{image_path('columbus_people.jpg')})"}
%p=_'articles.about_bikebike.paragraphs.bicycle_project_paragraph', :p %p=_'articles.about_bikebike.paragraphs.bicycle_project_paragraph', :p
%ul %ul
- [:non_profit, :no_money, :education, :volunteer_run, :export_bikes, :low_cost, :recycle_parts].each do |term| - [:non_profit, :no_money, :education, :volunteer_run, :export_bikes, :low_cost, :recycle_parts].each do |term|
@ -14,9 +15,8 @@
= columns(medium: 12) do = columns(medium: 12) do
%h3=_'articles.about_bikebike.headings.Who_is_Invited', :t %h3=_'articles.about_bikebike.headings.Who_is_Invited', :t
%p=_'articles.about_bikebike.paragraphs.Who_is_Invited', :p %p=_'articles.about_bikebike.paragraphs.Who_is_Invited', :p
= columns(medium: 12, class: 'featured-image-container') do = columns(medium: 12) do
%h3=_'articles.about_bikebike.headings.Types_of_Workshops', :t %h3=_'articles.about_bikebike.headings.Types_of_Workshops', :t
%figure{style: "background-image: url(#{image_path('columbus_people.jpg')})"}
%p=_'articles.about_bikebike.paragraphs.Types_of_Workshops', :p %p=_'articles.about_bikebike.paragraphs.Types_of_Workshops', :p
= columns(medium: 12) do = columns(medium: 12) do
%h3=_'articles.about_bikebike.headings.Amenities', :t %h3=_'articles.about_bikebike.headings.Amenities', :t

View File

@ -7,7 +7,7 @@
%th=_'forms.labels.generic.day' %th=_'forms.labels.generic.day'
%th=_'forms.labels.generic.time' %th=_'forms.labels.generic.time'
%th.form %th.form
- Hash[@this_conference.meals.map{ |k, v| [k.to_i, v] }].sort.to_h.each do | time, meal | - @meals.each do | time, meal |
%tr %tr
%th %th
=_!(meal['title'] || '') =_!(meal['title'] || '')

View File

@ -0,0 +1,17 @@
.table.workshop-blocks
.table-tr
.table-th=_'forms.labels.generic.block_number'
.table-th=_'forms.labels.generic.time'
.table-th=_'forms.labels.generic.length'
.table-th=_'forms.labels.generic.days'
.table-th.form
- @workshop_blocks.each_with_index do | info, block |
= form_tag administration_update_path(@this_conference.slug, :schedule), class: 'table-tr' do
.table-th.center.big=(block + 1)
.table-td=time_select info['time'], small: true, label: false
.table-td=length_select info['length'], {small: true, label: false}, 0.5, 2
.table-td=checkboxes :days, @block_days, info['days'].map(&:to_i), 'date.day_names', vertical: true, small: true
.table-td.form
= hidden_field_tag :workshop_block, block
= button_tag :delete_block, value: :delete_block, class: [:small, :delete] if block == @workshop_blocks.length - 2
= button_tag (info['time'].present? ? :update_block : :add_block), value: :save_block, class: [:small, :add]

View File

@ -1,16 +1,6 @@
= render :partial => 'page_header', :locals => {:page_key => 'Conference_Registration'} = render :partial => 'page_header', :locals => {:page_key => 'Conference_Registration'}
= registration_step_menu = registration_step_menu
-#- if (steps = current_registration_steps(@registration))
-# = row id: 'registration-steps', class: 'flow-steps' do
-# = columns do
-# %ul
-# - current_registration_steps.each do | step |
-# - text = _"articles.conference_registration.headings.#{step[:name].to_s}"
-# %li{class: [step[:enabled] ? :enabled : nil, @register_template == step[:name] ? :current : nil]}
-# - if step[:enabled]
-# .step= link_to text, register_step_path(@this_conference.slug, step[:name])
-# - else
-# .step= text
- if @warnings.present? - if @warnings.present?
= row class: 'warnings', tag: :ul do = row class: 'warnings', tag: :ul do
- @warnings.each do | warning | - @warnings.each do | warning |

View File

@ -1,15 +1,6 @@
= render 'conferences/page_header', :page_key => 'Conference_Registration' = render 'conferences/page_header', :page_key => 'Conference_Registration'
= row id: 'registration-steps', class: 'flow-steps' do = registration_step_menu
= columns do
%ul
- current_registration_steps.each do | step |
- text = _"articles.conference_registration.headings.#{step[:name].to_s}"
%li{class: [step[:enabled] ? :enabled : nil, :workshops == step[:name] ? :current : nil]}
- if step[:enabled]
.step= link_to text, register_step_path(@this_conference.slug, step[:name])
- else
.step= text
%article %article
= render 'workshops/show', :workshop => @workshop, :translations_available_for_editing => @translations_available_for_editing, :preview => false = render 'workshops/show', :workshop => @workshop, :translations_available_for_editing => @translations_available_for_editing, :preview => false

View File

@ -8,4 +8,4 @@ Rails.application.config.assets.version = '1.0'
# Precompile additional assets. # Precompile additional assets.
# application.js, application.css, and all non-JS/CSS in app/assets folder are already added. # application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
Rails.application.config.assets.precompile += %w( user-mailer.css map.js pen.js editor.js markdown.js main.js housing.js favicon.ico ) Rails.application.config.assets.precompile += %w( user-mailer.css map.js pen.js editor.js markdown.js html2canvas.js main.js housing.js favicon.ico )

View File

@ -5478,17 +5478,7 @@ en:
Total_Registrations: Total Registrations Total_Registrations: Total Registrations
about_bikebike: about_bikebike:
paragraphs: paragraphs:
bicycle_project_paragraph: 'Bike!Bike! 2015: An international reunion meant bicycle_project_paragraph: 'From collectives that use the bicycle as an excuse to change society, economy and the environment. Non-profit groups that have a community bike shops, cooperatives and other projects that promote the use of the bicycle and that come together to turn their communities into a place where riding is easier, more inclusive, safer and more fun. The list below uses the criteria found in the old Bicycle Organization Organization Project for what constitutes a community bike shop. The bike project need not meet all these criteria. Rather, it is a general list of qualities which are common among many bicycle projects.'
to be a swap-meet for experiences and ideas about community bike projects.
From collectives that use the bicycle as an excuse to change society, economy
and the environment. Non-profit groups that have a community bike shops,
cooperatives and other projects that promote the use of the bicycle and
that come together to turn their communities into a place where riding is
easier, more inclusive, safer and more fun. The list below uses the criteria
found in the old Bicycle Organization Organization Project for what constitutes
a community bike shop. The bike project need not meet all these criteria.
Rather, it is a general list of qualities which are common among many bicycle
projects.'
Who_is_Invited: You dont have to be an expert or belong to a huge group, Who_is_Invited: You dont have to be an expert or belong to a huge group,
you just need to be willing to share what you know about organization, mechanics, you just need to be willing to share what you know about organization, mechanics,
social impact, inequality alternatives, better access to bicycles or knowledge social impact, inequality alternatives, better access to bicycles or knowledge

View File

@ -52,6 +52,7 @@ BikeBike::Application.routes.draw do
get '/oauth/:provider' => 'oauths#oauth', :as => :auth_at_provider get '/oauth/:provider' => 'oauths#oauth', :as => :auth_at_provider
post '/translator-request' => 'application#translator_request', :as => :translator_request post '/translator-request' => 'application#translator_request', :as => :translator_request
# patch '/capture_view' => 'application#capture_view'
post '/js_error' => 'application#js_error' post '/js_error' => 'application#js_error'
get '/error_403' => 'application#do_403' get '/error_403' => 'application#do_403'
get '/error_404' => 'application#error_404' get '/error_404' => 'application#error_404'

View File

@ -0,0 +1,5 @@
class AddWorkshopBlocksToConferences < ActiveRecord::Migration
def change
add_column :conferences, :workshop_blocks, :json
end
end

View File

@ -11,7 +11,7 @@
# #
# It's strongly recommended that you check this file into your version control system. # It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20160622011811) do ActiveRecord::Schema.define(version: 20160630233219) do
# These are extensions that must be enabled in order to support this database # These are extensions that must be enabled in order to support this database
enable_extension "plpgsql" enable_extension "plpgsql"
@ -127,6 +127,7 @@ ActiveRecord::Schema.define(version: 20160622011811) do
t.string "day_parts" t.string "day_parts"
t.string "registration_status" t.string "registration_status"
t.json "meals" t.json "meals"
t.json "workshop_blocks"
end end
create_table "delayed_jobs", force: :cascade do |t| create_table "delayed_jobs", force: :cascade do |t|

19279
vendor/assets/javascripts/html2canvas.js vendored Normal file

File diff suppressed because one or more lines are too long