Browse Source

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

development
Godwin 9 years ago
parent
commit
fe0c9bbfa6
  1. BIN
      app/assets/fonts/queulat.eot
  2. BIN
      app/assets/fonts/queulat.otf
  3. 6007
      app/assets/fonts/queulat.svg
  4. BIN
      app/assets/fonts/queulat.ttf
  5. BIN
      app/assets/fonts/queulat.woff
  6. BIN
      app/assets/fonts/queulat.woff2
  7. 89
      app/assets/stylesheets/_application.scss
  8. 8
      app/assets/stylesheets/bumbleberry-settings.json
  9. 40
      app/controllers/conferences_controller.rb
  10. 61
      app/helpers/application_helper.rb
  11. 6
      app/views/application/about.html.haml
  12. 2
      app/views/conferences/admin/_meals.html.haml
  13. 17
      app/views/conferences/admin/_schedule.html.haml
  14. 12
      app/views/conferences/register.html.haml
  15. 11
      app/views/workshops/show.html.haml
  16. 2
      config/initializers/assets.rb
  17. 12
      config/locales/en.yml
  18. 1
      config/routes.rb
  19. 5
      db/migrate/20160630233219_add_workshop_blocks_to_conferences.rb
  20. 3
      db/schema.rb
  21. 19279
      vendor/assets/javascripts/html2canvas.js

BIN
app/assets/fonts/queulat.eot

Binary file not shown.

BIN
app/assets/fonts/queulat.otf

Binary file not shown.

6007
app/assets/fonts/queulat.svg

File diff suppressed because it is too large

After

Width:  |  Height:  |  Size: 292 KiB

BIN
app/assets/fonts/queulat.ttf

Binary file not shown.

BIN
app/assets/fonts/queulat.woff

Binary file not shown.

BIN
app/assets/fonts/queulat.woff2

Binary file not shown.

89
app/assets/stylesheets/_application.scss

@ -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;
@ -452,6 +477,12 @@ input {
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;
background-color: #FFF; background-color: #FFF;
@ -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;
} }
} }
} }

8
app/assets/stylesheets/bumbleberry-settings.json

@ -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": {

40
app/controllers/conferences_controller.rb

@ -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

61
app/helpers/application_helper.rb

@ -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,

6
app/views/application/about.html.haml

@ -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

2
app/views/conferences/admin/_meals.html.haml

@ -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'] || '')

17
app/views/conferences/admin/_schedule.html.haml

@ -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]

12
app/views/conferences/register.html.haml

@ -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 |

11
app/views/workshops/show.html.haml

@ -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

2
config/initializers/assets.rb

@ -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 )

12
config/locales/en.yml

@ -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 don’t have to be an expert or belong to a huge group, Who_is_Invited: You don’t 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

1
config/routes.rb

@ -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'

5
db/migrate/20160630233219_add_workshop_blocks_to_conferences.rb

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

3
db/schema.rb

@ -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

File diff suppressed because one or more lines are too long
Loading…
Cancel
Save