diff --git a/Gemfile b/Gemfile index ec74e2491..610b2d408 100644 --- a/Gemfile +++ b/Gemfile @@ -12,6 +12,7 @@ gem 'delayed_job' gem 'delayed_job_active_record' gem 'font-awesome-rails' gem 'foundation-rails', '5.5.3.2' +gem 'bootstrap', '~> 5.0.0.alpha1' gem 'friendly_id' gem 'haml' gem 'high_voltage' @@ -34,6 +35,7 @@ gem 'simple_form' gem 'turbolinks' gem 'uglifier', '>= 1.3.0' gem 'will_paginate' +gem 'sprockets-rails', '3.2.1' gem 'icalendar' gem 'tzinfo-data' diff --git a/Gemfile.lock b/Gemfile.lock index 022f65c6e..9c7c40aa4 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -41,10 +41,16 @@ GEM public_suffix (>= 2.0.2, < 5.0) arel (6.0.4) ast (2.4.1) + autoprefixer-rails (10.0.1.0) + execjs better_errors (2.7.1) coderay (>= 1.0.0) erubi (>= 1.0.0) rack (>= 0.9.0) + bootstrap (5.0.0.alpha1) + autoprefixer-rails (>= 9.1.0) + popper_js (>= 1.14.3, < 2) + sassc-rails (>= 2.0.0) builder (3.2.4) bullet (6.1.0) activesupport (>= 3.0.0) @@ -213,6 +219,7 @@ GEM pg (0.20.0) pickadate-rails (3.5.6.0) railties (>= 3.1.0) + popper_js (1.16.0) premailer (1.11.1) addressable css_parser (>= 1.6.0) @@ -396,6 +403,7 @@ PLATFORMS DEPENDENCIES acts-as-taggable-on (~> 5.0) better_errors + bootstrap (~> 5.0.0.alpha1) bullet capybara carrierwave @@ -452,8 +460,10 @@ DEPENDENCIES sass-rails (~> 5.0.1) shoulda-matchers (~> 4.3) simple_form + sprockets-rails (= 3.2.1) simplecov simplecov-lcov + sprockets-rails (= 3.2.1) stripe turbolinks tzinfo-data diff --git a/app/assets/images/svgs/facebook.svg b/app/assets/images/svgs/facebook.svg new file mode 100644 index 000000000..76df7ae26 --- /dev/null +++ b/app/assets/images/svgs/facebook.svg @@ -0,0 +1 @@ +Facebook icon diff --git a/app/assets/images/svgs/github.svg b/app/assets/images/svgs/github.svg new file mode 100644 index 000000000..d3c4b60f1 --- /dev/null +++ b/app/assets/images/svgs/github.svg @@ -0,0 +1 @@ +GitHub icon diff --git a/app/assets/images/svgs/slack.svg b/app/assets/images/svgs/slack.svg new file mode 100644 index 000000000..fed0e1390 --- /dev/null +++ b/app/assets/images/svgs/slack.svg @@ -0,0 +1 @@ +Slack icon diff --git a/app/assets/images/svgs/twitter.svg b/app/assets/images/svgs/twitter.svg new file mode 100644 index 000000000..79e3d586c --- /dev/null +++ b/app/assets/images/svgs/twitter.svg @@ -0,0 +1 @@ +Twitter icon diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index 614281353..d1a715e74 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -10,6 +10,8 @@ // Read Sprockets README (https://github.com/sstephenson/sprockets#sprockets-directives) for details // about supported directives. // +//= require popper +//= require bootstrap //= require jquery //= require jquery_ujs //= require jquery-ui @@ -51,19 +53,4 @@ $(function(){ $('#member_lookup_id').chosen().change(function(e) { $('#view_profile').attr('href', '/admin/members/' + $(this).val()) }); - - // Prevent tabbing through side menu links when menu is hidden. - // This somewhat hacky approach is required because Foundation doesn't - // allow us to modify the functionality directly :( - var $menuContainer = $('.off-canvas-wrap'); - var $menuLinks = $('.left-off-canvas-menu').find('a'); - var toggleMenuLinkTabindex = function() { - // Use rAF to delay the call a frame, to wait until the class has been updated: - window.requestAnimationFrame(function(){ - var menuIsVisible = $menuContainer.hasClass('move-right'); - $menuLinks.attr('tabindex', menuIsVisible ? 0 : -1); - }); - }; - toggleMenuLinkTabindex(); - $(document).on('click', toggleMenuLinkTabindex); }); diff --git a/app/assets/stylesheets/_bootstrap-custom.scss b/app/assets/stylesheets/_bootstrap-custom.scss new file mode 100644 index 000000000..58ebf8a87 --- /dev/null +++ b/app/assets/stylesheets/_bootstrap-custom.scss @@ -0,0 +1,50 @@ +/*! + * Bootstrap v5.0.0-alpha1 (https://getbootstrap.com/) + * Copyright 2011-2020 The Bootstrap Authors + * Copyright 2011-2020 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ + +// scss-docs-start import-stack +// Configuration +@import "bootstrap/functions"; +@import "bootstrap/variables"; +@import "bootstrap/mixins"; +@import "bootstrap/utilities"; + +// Layout & components +@import "bootstrap/root"; +@import "bootstrap/reboot"; +@import "bootstrap/type"; +@import "bootstrap/images"; +@import "bootstrap/containers"; +@import "bootstrap/grid"; +@import "bootstrap/tables"; +// @import "bootstrap/forms"; +@import "bootstrap/buttons"; +@import "bootstrap/transitions"; +@import "bootstrap/dropdown"; +// @import "bootstrap/button-group"; +@import "bootstrap/nav"; +@import "bootstrap/navbar"; +@import "bootstrap/card"; +// @import "bootstrap/breadcrumb"; +// @import "bootstrap/pagination"; +@import "bootstrap/badge"; +@import "bootstrap/alert"; +// @import "bootstrap/progress"; +@import "bootstrap/list-group"; +// @import "bootstrap/close"; +// @import "bootstrap/toasts"; +// @import "bootstrap/modal"; +// @import "bootstrap/tooltip"; +// @import "bootstrap/popover"; +// @import "bootstrap/carousel"; +@import "bootstrap/spinners"; + +// Helpers +@import "bootstrap/helpers"; + +// Utilities +@import "bootstrap/utilities/api"; +// scss-docs-end import-stack diff --git a/app/assets/stylesheets/application.css b/app/assets/stylesheets/application.scss similarity index 58% rename from app/assets/stylesheets/application.css rename to app/assets/stylesheets/application.scss index 914e84246..d9c60197d 100644 --- a/app/assets/stylesheets/application.css +++ b/app/assets/stylesheets/application.scss @@ -17,6 +17,25 @@ *= require pickadate/classic.time *= require chosen *= require jquery-ui - *= require pagination - *= require animations */ + +@import "partials/colors"; +@import "partials/links"; +@import "partials/margins"; +@import "partials/layout"; +@import "partials/hero"; +@import "partials/events"; +@import "partials/social_media"; +@import "partials/member_note"; +@import "partials/attendances"; +@import "partials/admin_workshop"; +@import "partials/sponsors"; +@import "partials/organisers"; +@import "partials/jobs"; +@import "partials/star-rating"; +@import "partials/event"; +@import "partials/workshop"; + +$primary: $dark-codebar-blue !default; + +@import "bootstrap-custom"; diff --git a/app/assets/stylesheets/foundation_and_overrides.scss b/app/assets/stylesheets/foundation_and_overrides.scss index 10608f725..13b8bd139 100644 --- a/app/assets/stylesheets/foundation_and_overrides.scss +++ b/app/assets/stylesheets/foundation_and_overrides.scss @@ -1332,20 +1332,10 @@ table thead tr td { border-bottom: 1px solid rgb(34, 34, 34); } -.top-bar-section li:not(.has-form):hover a span { - text-decoration: underline; - text-decoration-skip: ink; -} - -.top-bar-section li:not(.has-form):hover a .highlight { - text-decoration-color: currentColor; -} - .highlight { color: $secondary-color; } - blockquote { background: $white; border-radius: 5px; diff --git a/app/assets/stylesheets/main.scss b/app/assets/stylesheets/main.scss index c1220c608..1543f4d40 100644 --- a/app/assets/stylesheets/main.scss +++ b/app/assets/stylesheets/main.scss @@ -1,23 +1,3 @@ -@import 'partials/colors'; -@import 'partials/links'; -@import 'partials/margins'; -@import 'partials/layout'; -@import 'partials/card'; -@import 'partials/hero'; -@import 'partials/events'; -@import 'partials/social_media'; -@import 'partials/chapter'; -@import 'partials/member_note'; -@import 'partials/attendances'; -@import 'partials/admin_workshop'; -@import 'partials/sponsors'; -@import 'partials/organisers'; -@import 'partials/jobs'; -@import 'partials/star-rating'; -@import 'partials/event'; -@import 'partials/workshop'; -@import 'partials/admin_member'; - .row-spaced { padding-bottom: 20px; } diff --git a/app/assets/stylesheets/partials/_card.scss b/app/assets/stylesheets/partials/_card.scss deleted file mode 100644 index ef329e8e8..000000000 --- a/app/assets/stylesheets/partials/_card.scss +++ /dev/null @@ -1,15 +0,0 @@ -.card { - background: $white; - color: #666; - display: flex; - flex-direction: column; - align-items: flex-start; - width: 100%; - padding: 1rem; - border: 1px solid $main-stroke; - border-radius: 5px; - - &:hover { - box-shadow: 0 0 5px 0 $main-stroke; - } -} \ No newline at end of file diff --git a/app/assets/stylesheets/partials/_chapter.scss b/app/assets/stylesheets/partials/_chapter.scss deleted file mode 100644 index 5461fb164..000000000 --- a/app/assets/stylesheets/partials/_chapter.scss +++ /dev/null @@ -1,76 +0,0 @@ -#chapter { - // .date { - // text-align: center; - // } - - .month { - font-weight: bold; - font-size: 1em; - text-transform: uppercase; - } - - .time { - font-size: 1em; - } - - .day { - font-size: 2.5em; - } - - .workshop { - border-radius: 2px; - padding: 0 0 30px; - margin: 0 0 20px 0; - } - - .workshop:not(:last-child) { - border-bottom: 1px solid #ddd2e9; - } - - .organisers { - margin-top: 12px; - } -} - -.organiser { - border: 1px solid #f7f4fa; - margin: 4px; - .row { - text-align: center; - padding: 15px; - margin: 0 5px; - } -} - -.chapter-header { - display: flex; - flex-wrap: wrap; - align-items: center; -} - -.chapter-header-text { - padding-top: 1.42857rem; -} - -.chapter-header-image { - padding: 0; -} - -@media (min-width: 71.42857rem) { - @supports (display: grid) { - .chapter-header { - display: grid; - margin-left: calc((100vw - 71.42857rem) / 2); - grid-template-columns: calc(71.42857rem / 2) 1fr; - } - .chapter-header-text { - grid-column: 1; - width: auto; - } - .chapter-header-image { - grid-column: 2; - padding-left: 1.07143rem; - width: 50vw; - } - } -} diff --git a/app/assets/stylesheets/partials/_colors.sass b/app/assets/stylesheets/partials/_colors.sass index 7919a4763..1cc27288e 100644 --- a/app/assets/stylesheets/partials/_colors.sass +++ b/app/assets/stylesheets/partials/_colors.sass @@ -2,6 +2,8 @@ $codebar-green: #19f3be $codebar-pink: #ff036a $codebar-blue: #4bafff +$dark-codebar-blue: #006cc2 + $main-stroke: #f2f2f4 $navigation-gray: #fdfdfd $navigation-gray-separators: #dddedd diff --git a/app/assets/stylesheets/partials/_dashboard.scss b/app/assets/stylesheets/partials/_dashboard.scss deleted file mode 100644 index bb30712c2..000000000 --- a/app/assets/stylesheets/partials/_dashboard.scss +++ /dev/null @@ -1,5 +0,0 @@ -section.title { - .lead { - color: $white; - } -} diff --git a/app/assets/stylesheets/partials/_event.scss b/app/assets/stylesheets/partials/_event.scss index 05f1523ad..3f071c91f 100644 --- a/app/assets/stylesheets/partials/_event.scss +++ b/app/assets/stylesheets/partials/_event.scss @@ -1,78 +1,23 @@ -#sidebar { - background: #fdfdfd; - padding: 32px 20px; -} - .event { - $root: &; - - padding: 20px; - margin-bottom: 30px; - border-radius: 5px; - - box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.1), 0 8px 10px 0 rgba(0, 0, 0, 0.05); - - display: flex; - justify-content: space-between; - - &__col-1, - &__col-2 { - display: flex; - flex-direction: column; - justify-content: space-between; - width: 100%; - } - - &__col-2 { - align-items: flex-end; + .event__header { + font-size: 1.2rem; } - &__header { - .title, - .title a { - font-size: 1.2rem; - line-height: 1.2; - margin: 0; + .date, + .time { + i { + font-size: 0.9rem; + margin-top: -2px; + vertical-align: middle; + opacity: 0.5; } } +} - &__details { - margin-top: 15px; - font-size: 0.9rem; - .date, - .time { - i { - font-size: 0.9rem; - margin-top: -2px; - vertical-align: middle; - opacity: 0.5; - } - } - } - - &__organisers { - margin-top: 12px; - - #{$root}__organisers-list { - margin: 0 !important; - } - } +img.sponsor-sm { + max-width: 120px; +} - &__sponsors { - display: flex; - flex-wrap: wrap; - justify-content: flex-end; - a { - border: none; - margin-top: 10px; - margin-left: 10px; - } - img { - max-width: 90px; - max-height: 60px; - &:not(:last-child) { - margin-right: 10px; - } - } - } +img.sponsor-md { + max-width: 150px; } diff --git a/app/assets/stylesheets/partials/_events.scss b/app/assets/stylesheets/partials/_events.scss index 743c3e700..2fb210bc0 100644 --- a/app/assets/stylesheets/partials/_events.scss +++ b/app/assets/stylesheets/partials/_events.scss @@ -1,7 +1,6 @@ .events { margin-bottom: 30px; .navigation { - .button { margin-top: 10px; } @@ -40,7 +39,3 @@ .event.date { color: #138cd3; } - -.monthly-host-logo { - margin-bottom: 1.4rem; -} diff --git a/app/assets/stylesheets/partials/_hero.scss b/app/assets/stylesheets/partials/_hero.scss index 5a012a1af..6aadd39d5 100644 --- a/app/assets/stylesheets/partials/_hero.scss +++ b/app/assets/stylesheets/partials/_hero.scss @@ -1,17 +1,31 @@ -$primary-color: #596677; +.homepage-hero { + background-image: image-url("bg.jpg"); + background-position: center center; + background-size: cover; + background-repeat: no-repeat; + height: 350px; + .text { + background-color: rgba(0, 0, 0, 0.6); + p { + color: $white; + } + } +} + +// May delete all below section.hero.opaque { .lead, h2 { color: $white; - background-color: rgba(0,0,0,0.6); + background-color: rgba(0, 0, 0, 0.6); margin-bottom: 0; padding: 20px; } } section.hero { - background-image: image-url('bg.jpg'); + background-image: image-url("bg.jpg"); background-position: center center; background-size: cover; background-repeat: no-repeat; diff --git a/app/assets/stylesheets/partials/_layout.scss b/app/assets/stylesheets/partials/_layout.scss index ccc1d6528..72e4b0f8e 100644 --- a/app/assets/stylesheets/partials/_layout.scss +++ b/app/assets/stylesheets/partials/_layout.scss @@ -1,34 +1,33 @@ +@import "partials/colors"; + +#top { + margin-top: 73px; +} + +// to delete .flex-grid { display: flex; flex-wrap: wrap; } +// to delete .flex-item { display: flex; } .main-footer { - background-color: $primary-color; - padding: 50px 0; - color: rgba(255, 255, 255, 0.8); + background-color: $dark-codebar-blue; + color: white; a { color: $white; border: none; - &:hover { - color: $secondary-color; + color: $codebar-green; } } .registration { - color: $white; font-size: 0.75rem; - margin-top: 30px; - margin-bottom: 0; - } - - .social-media a { - border-bottom: none; } } diff --git a/app/assets/stylesheets/partials/_organisers.scss b/app/assets/stylesheets/partials/_organisers.scss index 238634f70..aefb3b1dd 100644 --- a/app/assets/stylesheets/partials/_organisers.scss +++ b/app/assets/stylesheets/partials/_organisers.scss @@ -1,14 +1,3 @@ .user-link { border-bottom: none; } - -.organiser-content { - @extend .card; - align-items: center; - justify-content: center; -} - -.organiser-image { - border-radius: 3.57143rem; - margin-bottom: 0.5rem; -} diff --git a/app/assets/stylesheets/partials/_social_media.scss b/app/assets/stylesheets/partials/_social_media.scss index 50af99674..54377565e 100644 --- a/app/assets/stylesheets/partials/_social_media.scss +++ b/app/assets/stylesheets/partials/_social_media.scss @@ -1,33 +1,8 @@ -li.slack a { - color: #3eb991; - color: rgba(62, 185, 145, 0.8); - +.social-svg { + width: 30px; + height: 30px; + transition: all 1s ease; &:hover { - color: rgba(62, 185, 145, 1); - } -} - -li.facebook a { - color: #5279cc; - color: rgba(82, 121, 204, 0.8); - - &:hover { - color: rgba(82, 121, 204, 1); - } -} - -li.twitter a { - color: rgba(85, 172, 238, 0.8); - - &:hover { - color: rgba(85, 172, 238, 1); - } -} - -li.github a { - color: rgba(51, 51, 51, 0.8); - - &:hover { - color: rgba(51, 51, 51, 1); + transform: scale(1.5); } } diff --git a/app/assets/stylesheets/partials/_sponsors.scss b/app/assets/stylesheets/partials/_sponsors.scss index 2a2ca3549..b9c26fa11 100644 --- a/app/assets/stylesheets/partials/_sponsors.scss +++ b/app/assets/stylesheets/partials/_sponsors.scss @@ -11,7 +11,3 @@ flex-wrap: wrap; align-items: center; } - -.sponsor-header-margin { - margin-bottom: 35px; -} diff --git a/app/views/chapter/_subscriptions.html.haml b/app/views/chapter/_subscriptions.html.haml index 5ae291198..c6c287a7c 100644 --- a/app/views/chapter/_subscriptions.html.haml +++ b/app/views/chapter/_subscriptions.html.haml @@ -1,14 +1,11 @@ -.row - .medium-12.columns - - @chapter.groups.each do |group| - - if belongs_to_group?(group) - %span{ "data-tooltip" =>"", "aria-haspopup" => "true", class: "has-tip", title: "Unsubscribe from #{@chapter.name} #{group.name}" } - = link_to subscriptions_path(subscription: { group_id: group }), method: 'delete', class: 'button secondary small' do - =group.name - %i.fa.fa-check - - else - %span{ "data-tooltip" =>"", "aria-haspopup" => "true", class: "has-tip", title: "Subscribe to #{@chapter.name} #{group.name}" } - - = link_to subscriptions_path(subscription: { group_id: group }), method: 'post', class: 'button small' do - = group.name - %i.fa.fa-rss +- @chapter.groups.each do |group| + - if belongs_to_group?(group) + %span{ title: "Unsubscribe from #{@chapter.name} #{group.name}" } + = link_to subscriptions_path(subscription: { group_id: group }), method: 'delete', class: 'btn btn-success' do + = group.name + %i.fa.fa-check + - else + %span{ title: "Subscribe to #{@chapter.name} #{group.name}" } + = link_to subscriptions_path(subscription: { group_id: group }), method: 'post', class: 'btn btn-secondary' do + = group.name + %i.fa.fa-rss diff --git a/app/views/chapter/show.html.haml b/app/views/chapter/show.html.haml index e6b0afe57..081c47083 100644 --- a/app/views/chapter/show.html.haml +++ b/app/views/chapter/show.html.haml @@ -1,28 +1,29 @@ -%section - .row.chapter-header - .medium-6.columns.chapter-header-text +.container-fluid + .row.align-items-center + .col-md-6.pt-4.pb-4 %h1= @chapter.name - if @chapter.description %p.lead= @chapter.description - else - %p.lead= t('chapters.intro_html') + %p.lead.mb-0= t('chapters.intro_html') - if @chapter.image.present? - .medium-6.columns.chapter-header-image + .col-md-6 = image_tag @chapter.image.bg, alt: "#{@chapter.name} chapter" -.panel - .row - .medium-6.columns - = t('chapters.info', email: h(@chapter.email)).html_safe - .medium-6.columns.text-center - - if logged_in? - = render partial: 'subscriptions' - - else - =link_to 'Sign up', new_member_path, class: 'button small radius' +.alert-primary.pt-4.pb-4 + .container-fluid + .row.align-items-center + .col-md-6.mb-4.mb-md-0 + = t('chapters.info', email: h(@chapter.email)).html_safe + .col-md-6.text-center + - if logged_in? + = render partial: 'subscriptions' + - else + =link_to 'Sign up', new_member_path, class: 'btn btn-primary' -%section.stripe.reverse#chapter +.container.stripe.reverse#chapter .row - .large-8.columns + .col-md-8.col-sm-12 - if @upcoming_workshops.any? .events-list.events-list--upcoming %h3 Upcoming Events @@ -37,7 +38,7 @@ .grouped-events = render workshops - .large-4.columns + .col-md-4.col-sm-12 - if @chapter.twitter_handle %a.twitter-timeline{href: "https://twitter.com/#{@chapter.twitter_handle}", "data-widget-id" => @chapter.twitter_id }="Tweets by #{@chapter.twitter_handle}" - else @@ -46,27 +47,15 @@ %script(async src="https://platform.twitter.com/widgets.js" charset="utf-8") - if @recent_sponsors.any? - .stripe.reverse + .container-fluid.stripe.reverse .row - .small-12.columns - %h2 Sponsors - .row.sponsor-row - - @recent_sponsors.each do |sponsor| - .small-4.medium-2.columns.sponsor-image - = link_to image_tag(sponsor.avatar, class: "small-image", alt: sponsor.name), sponsor.website, title: sponsor.name + .col + %h2.text-center Sponsors + = render partial: 'shared/sponsors', object: @recent_sponsors -.stripe.reverse - .row - .large-12.columns - %a{ name: 'organisers' } - %h2 Team - .row.flex-grid - - @chapter.organisers.shuffle.each do |organiser| - .small-12.medium-6.large-3.columns.flex-item.mb2 - = link_to twitter_url_for(organiser.twitter), title: "#{organiser.full_name} Twitter profile", class: 'organiser-content' do - = image_tag(organiser.avatar(65), alt: organiser.full_name, class: 'organiser-image') - = organiser.full_name - .row - .large-12.columns - .panel - = t('chapters.contact', city: @chapter.name, email: @chapter.email) +.container-fluid.stripe.reverse + = render partial: 'members/organisers_grid', locals: { members: @chapter.organisers.shuffle, show_info: false, title: t('chapters.team') } + + .row.mt-5 + .col.alert.alert-primary.mb-0 + = t('chapters.contact', city: @chapter.name, email: @chapter.email) diff --git a/app/views/coach/_coach.html.haml b/app/views/coach/_coach.html.haml index 8032ebe01..fb844f790 100644 --- a/app/views/coach/_coach.html.haml +++ b/app/views/coach/_coach.html.haml @@ -1,29 +1,23 @@ .stripe.reverse .row - .medium-12.columns - .text-right - %br - %br - %ul.small-block-grid-2.medium-block-grid-4.large-block-grid-4 - - coaches.each do |coach| - %li.coach - .row - .small-12.columns - .text-center - =link_to twitter_url_for(coach.twitter), class: 'user-link' do - =image_tag(coach.avatar(50), class: 'th radius', title: coach.full_name, alt: coach.full_name) + - coaches.each do |coach| + .col-sm-6.col-md-3.coach + .row + .col + .text-center.mb-4 + =link_to twitter_url_for(coach.twitter), class: 'border-0' do + =image_tag(coach.avatar(50), class: 'rounded-circle', title: coach.full_name, alt: coach.full_name) - %br - =link_to twitter_url_for(coach.twitter) do - = coach.full_name - %p.small= coach.about_you - - if coach.skills.any? - %p - skills: - - coach.skills.each do |skill| - .label= skill.name + =link_to twitter_url_for(coach.twitter) do + = coach.full_name + %p.small.mt-3.mb-3= coach.about_you + - if coach.skills.any? + %p + skills: + - coach.skills.each do |skill| + = skill.name .row - .medium-6.columns.text-left + .col-6.float-left = page_entries_info(@coaches, model: 'coaches') - .medium-6.columns.text-right + .col-6.float-right = will_paginate(@coaches) diff --git a/app/views/dashboard/code.html.haml b/app/views/dashboard/code.html.haml index bcbdda411..0abb2e591 100644 --- a/app/views/dashboard/code.html.haml +++ b/app/views/dashboard/code.html.haml @@ -1,18 +1,19 @@ .stripe.reverse#code-of-conduct - .row - .large-12.columns - %h1 + .row.justify-content-md-center + .col.col-md-8 + %h2 = t('code_of_conduct.title') + .stripe.reverse - .row - .large-12.columns - %h2 + .row.justify-content-md-center + .col.col-md-8 + %h3 = t('code_of_conduct.summary.title') %p.lead = t('code_of_conduct.summary.intro') - %h2 + %h3 = t('code_of_conduct.content.title') %p @@ -35,4 +36,4 @@ %p = t('code_of_conduct.content.questions') - =mail_to 'hello@codebar.io', t('code_of_conduct.content.contact'), subject: t('code_of_conduct.content.email_subject') + = mail_to 'hello@codebar.io', t('code_of_conduct.content.contact'), subject: t('code_of_conduct.content.email_subject') diff --git a/app/views/dashboard/dashboard.html.haml b/app/views/dashboard/dashboard.html.haml index 49bd10cb7..050b87db6 100644 --- a/app/views/dashboard/dashboard.html.haml +++ b/app/views/dashboard/dashboard.html.haml @@ -1,45 +1,38 @@ -.stripe.reverse +.container-fluid.stripe.reverse .row - .large-12.columns - %h2 - Dashboard -%section + .col + %h2 Dashboard + +.container-fluid .row - .large-3.columns#sidebar - =image_tag(current_user.avatar(33), alt: current_user.full_name) - = link_to @user.full_name, profile_path + .col-12.col-lg-3.mb-4 + .bg-light.p-3 + .mb-4.text-lg-center + = image_tag(current_user.avatar(80), alt: current_user.full_name, class: 'rounded-circle mb-2') + = link_to @user.full_name, profile_path, class: 'd-inline-block' - %br - %br - %br - .row - .large-12.columns - %h4 - Subscriptions - %small - =link_to "Edit", subscriptions_path - - if current_user.chapters.any? - %ul.stack.button-group.secondary.no-bullet - - current_user.chapters.each do |chapter| - %li= link_to chapter.name, chapter_url(chapter.slug) - - else - %i.fa.fa-warning - %small You are not subscribed to any groups. + .d-flex.align-items-center.mb-2 + %h4 Subscriptions + %small= link_to 'Edit', subscriptions_path, class: 'ml-2' + - if current_user.chapters.any? + .list-group.list-group-flush + - current_user.chapters.each do |chapter| + = link_to chapter.name, chapter_url(chapter.slug), class: 'list-group-item list-group-item-action' + - else + %i.fa.fa-warning + %small You are not subscribed to any groups. - .large-9.columns#main + .col-12.col-lg-8.offset-lg-1#main - if @announcements.any? - %p.lead - %ul.panel.no-bullet - - @announcements.each do |announcement| - %li= dot_markdown(announcement.message) - %section#chapter - .large-12.columns.events - - if @ordered_events.none? - There are no upcoming events announced for the chapters you are subscribed to. - - @ordered_events.each do |date, workshops| - .row - .medium-12.columns - %h4= date - = render workshops - %br + .mb-4 + - @announcements.each do |announcement| + .alert.alert-primary + = dot_markdown(announcement.message) + + %div + - if @ordered_events.none? + There are no upcoming events announced for the chapters you are subscribed to. + - @ordered_events.each do |date, workshops| + %h4= date + = render workshops diff --git a/app/views/dashboard/effective-teacher-guide.html.haml b/app/views/dashboard/effective-teacher-guide.html.haml index 808797aa5..ec065448b 100644 --- a/app/views/dashboard/effective-teacher-guide.html.haml +++ b/app/views/dashboard/effective-teacher-guide.html.haml @@ -1,29 +1,40 @@ .stripe.reverse - .row - .large-12.columns - %h3 + .row.justify-content-md-center + .col.col-lg-8 + %h2 Coach Guide - %p + %p.lead This is a brief guide we've put together for our coaches. If you have any suggestions to make open a #{link_to "pull request", "https://github.com/codebar/planner"} or #{link_to "create an issue", "https://github.com/codebar/planner/issues/new"}. .stripe.reverse - .row - .large-12.columns - %ul.circle - %li= t('dashboard.teacher_guide.laptop') - %li= t('dashboard.teacher_guide.keyboard') - %li= t('dashboard.teacher_guide.typing') - %li= t('dashboard.teacher_guide.questions') - %li= t('dashboard.teacher_guide.mistakes') - %li= t('dashboard.teacher_guide.introduction') - %li= t('dashboard.teacher_guide.backgrounds') - %li= t('dashboard.teacher_guide.limits') - %li= t('dashboard.teacher_guide.collaboration') - %li= t('dashboard.teacher_guide.discussion') - %li= t('dashboard.teacher_guide.talk_slow') - %li= t('dashboard.teacher_guide.mild_approach') - %li= t('dashboard.teacher_guide.paper') - %li= t('dashboard.teacher_guide.stubling') - - .row - .large-12.columns + .row.justify-content-md-center + .col.col-lg-8 + %ul + %li + %p.mb-2= t('dashboard.teacher_guide.laptop') + %li + %p.mb-2= t('dashboard.teacher_guide.keyboard') + %li + %p.mb-2= t('dashboard.teacher_guide.typing') + %li + %p.mb-2= t('dashboard.teacher_guide.questions') + %li + %p.mb-2= t('dashboard.teacher_guide.mistakes') + %li + %p.mb-2= t('dashboard.teacher_guide.introduction') + %li + %p.mb-2= t('dashboard.teacher_guide.backgrounds') + %li + %p.mb-2= t('dashboard.teacher_guide.limits') + %li + %p.mb-2= t('dashboard.teacher_guide.collaboration') + %li + %p.mb-2= t('dashboard.teacher_guide.discussion') + %li + %p.mb-2= t('dashboard.teacher_guide.talk_slow') + %li + %p.mb-2= t('dashboard.teacher_guide.mild_approach') + %li + %p.mb-2= t('dashboard.teacher_guide.paper') + %li + %p.mb-2= t('dashboard.teacher_guide.stubling') diff --git a/app/views/dashboard/faq.html.haml b/app/views/dashboard/faq.html.haml index 34192a458..cab12ef35 100644 --- a/app/views/dashboard/faq.html.haml +++ b/app/views/dashboard/faq.html.haml @@ -1,10 +1,10 @@ .stripe.reverse#banner - .row - .large-8.large-offset-2.columns + .row.justify-content-md-center + .col-12.col-md-8 %h2 Frequently Asked Questions .stripe.reverse - .row - .large-8.large-offset-2.columns + .row.justify-content-md-center + .col-12.col-md-8 %dl %dt= t('faq.payment.q') %dd diff --git a/app/views/dashboard/participant_guide.html.haml b/app/views/dashboard/participant_guide.html.haml index 654a1eb74..9fb7a162f 100644 --- a/app/views/dashboard/participant_guide.html.haml +++ b/app/views/dashboard/participant_guide.html.haml @@ -1,8 +1,7 @@ .stripe.reverse#banner - .row - .large-12.columns + .row.justify-content-md-center + .col.col-md-8 %h2= t('participant_student_guide.title') - %p = link_to t('participant_student_guide.attendance_policy.title') , '#attendance' \| = link_to t('participant_student_guide.eligibility_criteria.title') , '#eligibility' @@ -10,27 +9,27 @@ = link_to t('participant_student_guide.disability.title') , '#disability' .stripe.reverse - .row - .large-12.columns + .row.justify-content-md-center + .col.col-md-8 %h3#attendance= t('participant_student_guide.attendance_policy.title') %p = t('participant_student_guide.attendance_policy.intro') %ol %li - = raw t('participant_student_guide.attendance_policy.rule1') + %p.mb-2= raw t('participant_student_guide.attendance_policy.rule1') %li - = raw t('participant_student_guide.attendance_policy.rule2') + %p.mb-2= raw t('participant_student_guide.attendance_policy.rule2') %li - = t('participant_student_guide.attendance_policy.rule3') + %p.mb-2= t('participant_student_guide.attendance_policy.rule3') %li - = t('participant_student_guide.attendance_policy.rule4') + %p.mb-2= t('participant_student_guide.attendance_policy.rule4') %li - = raw t('participant_student_guide.attendance_policy.rule5') + %p.mb-2= raw t('participant_student_guide.attendance_policy.rule5') %li - = t('participant_student_guide.attendance_policy.rule6') + %p.mb-2= t('participant_student_guide.attendance_policy.rule6') %li - = t('participant_student_guide.attendance_policy.rule7') + %p.mb-2= t('participant_student_guide.attendance_policy.rule7') %h4= t('dashboard.policy.what_happens') diff --git a/app/views/dashboard/show.html.haml b/app/views/dashboard/show.html.haml index 2d4481ab5..09ef9eb3f 100644 --- a/app/views/dashboard/show.html.haml +++ b/app/views/dashboard/show.html.haml @@ -1,84 +1,84 @@ - title t('homepage.title') -%section.hero.opaque - .row - .medium-offset-1.medium-6.columns - %p.lead - = raw t('homepage.intro') +.homepage-hero.d-flex.align-items-center + .container.d-flex + .col-md-4.offset-md-1.p-3.text + %p= raw t('homepage.intro') -%section.stripe.reverse - .row - .medium-offset-1.medium-10.columns - %p.lead - = t('homepage.explanation') +.container-fluid.stripe.reverse + .row.justify-content-md-center + .col-md-8 + %p.lead.mb-0= raw t('homepage.explanation') -%section.stripe.reverse +.container-fluid.stripe.reverse .row - .large-4.columns - .text-center - %h4 - = t('homepage.participate.students_title') - %p - = t('homepage.participate.students_explanation_p1') - %p - = t('homepage.participate.students_explanation_p2') - .text-center - = link_to t('homepage.participate.students_button'), new_member_path, class: 'button' + .col-md-4.mb-4.mb-md-0 + .card.h-100.text-md-center.border-0 + .card-body + %h3.h4.card-title + = t('homepage.participate.students_title') + %p.card-text + = t('homepage.participate.students_explanation_p1') + %p.card-text + = t('homepage.participate.students_explanation_p2') + .card-footer.border-0.bg-transparent + = link_to t('homepage.participate.students_button'), new_member_path, class: 'btn btn-primary' - .large-4.columns - .text-center - %h4 - = t('homepage.participate.coaches_title') - %p - = raw t('homepage.participate.coaches_explanation_p1') - %p - = t('homepage.participate.coaches_explanation_p2') - .text-center - = link_to t('homepage.participate.coaches_button'), new_member_path, class: 'button' + .col-md-4.mb-4.mb-md-0 + .card.h-100.text-md-center.border-0 + .card-body + %h3.h4.card-title + = t('homepage.participate.coaches_title') + %p.card-text + = raw t('homepage.participate.coaches_explanation_p1') + %p.card-text + = t('homepage.participate.coaches_explanation_p2') + .card-footer.border-0.bg-transparent + = link_to t('homepage.participate.coaches_button'), new_member_path, class: 'btn btn-primary' - .large-4.columns - .text-center - %h4 - = t('homepage.participate.workshop_title') - %p - = t('homepage.participate.workshop_explanation_p1') - %p - = t('homepage.participate.workshop_explanation_p2') - .text-center - = mail_to "hello@codebar.io", t('homepage.participate.workshop_button'), subject: t('homepage.participate.workshop_email_subject'), class: 'button' + .col-md-4 + .card.h-100.text-md-center.border-0 + .card-body + %h3.h4.card-title + = t('homepage.participate.workshop_title') + %p.card-text + = t('homepage.participate.workshop_explanation_p1') + %p.card-text + = t('homepage.participate.workshop_explanation_p2') + .card-footer.border-0.bg-transparent + = mail_to 'hello@codebar.io', t('homepage.participate.workshop_button'), subject: t('homepage.participate.workshop_email_subject'), class: 'btn btn-primary' -%section.stripe.reverse +.container-fluid.stripe.reverse = render partial: 'shared/donation_platforms' -%section.stripe.reverse +.container-fluid.stripe.reverse .row - .large-8.columns + .col-lg-8 - if @upcoming_workshops.empty? %p = t('events.no_upcoming_events') %p - =link_to t('events.view_past_events'), events_url(anchor: 'past'), class: 'button round expand' + =link_to t('events.view_past_events'), events_url(anchor: 'past'), class: 'btn btn-primary btn-block' - if @upcoming_workshops.any? - %h2.h3 Upcoming Events + %h2.h3.mb-4= t('homepage.events.upcoming') - @upcoming_workshops.each do |date, workshops| - .grouped-events - %h3.date= date - = render workshops + %h3.h5.mb-3= date + = render workshops - .large-4.columns + .col-lg-4.pl-lg-5 %h3 = t('homepage.chapters.title') - %ul.no-bullet + %ul.list-unstyled.ml-0 - @chapters.each do |chapter| %li = link_to chapter.name, chapter_path(chapter.slug) - if @testimonials.any? - %section.stripe.reverse - .row - .medium-offset-1.medium-10.columns + .container-fluid.stripe.reverse + .row.justify-content-md-center + .col-md-8 = render partial: 'members/testimonials' -%section.stripe.reverse +%section.container-fluid.stripe.reverse = render partial: 'shared/newsletter' diff --git a/app/views/dashboard/wall_of_fame.html.haml b/app/views/dashboard/wall_of_fame.html.haml index 044a5b8c4..26afbdbed 100644 --- a/app/views/dashboard/wall_of_fame.html.haml +++ b/app/views/dashboard/wall_of_fame.html.haml @@ -1,21 +1,20 @@ -.stripe.reverse#banner +.stripe.reverse .row - .large-12.columns + .col %h2 Coaches %p.lead Here you can find a list of the #{ @coaches_count } volunteers who have coached at codebar. - %p.lead If you’d like to start coaching at a workshop near you, read our #{ link_to "teaching guide", teaching_guide_path } and then #{ link_to "sign up", new_member_path } as a coach. It’s easier than you think! .row - .large-12.columns - .right + .col + .float-right %ul.inline-list - Time.zone.now.year.downto(2013).each do |year| %li - if page_year?(year) - %strong.label.primary= year + .btn.btn-sm.btn-outline-success= year - else - = link_to year, coaches_path(year: year), class: 'label success' + = link_to year, coaches_path(year: year), class: 'btn btn-sm btn-success' = render partial: '/coach/coach', locals: { coaches: @coaches } diff --git a/app/views/events/_event.html.haml b/app/views/events/_event.html.haml index 94c9a3596..1ea128492 100644 --- a/app/views/events/_event.html.haml +++ b/app/views/events/_event.html.haml @@ -1,41 +1,43 @@ -.event - .event__col-1 - %header.event__header - %h3.title - = link_to event.to_s, event.path - - if event.venue.present? - at - = link_to event.venue.name, event.venue.website - .event__details - .date +.card.event.mb-4 + .card-body + .d-md-flex.justify-content-md-between + .order-md-2 + - if event.chapter + %span.badge.bg-primary + = event.chapter.name + - if @user + - if @user.attending?(event.__getobj__) + %span.badge.bg-success.ml-2 + = link_to "Attending", event.path, class: "text-light border-0" + - if @user.event_organiser?(event) + %span.badge.bg-secondary.ml-2 + = link_to "Manage", event.admin_path, class: "text-light border-0" + .order-md-1 + %h3.event__header + = link_to event.to_s, event.path + - if event.venue.present? + at + = link_to event.venue.name, event.venue.website + + .mt-3 + %p.date.mb-0 %i.material-icons calendar_today = event.date - .time + %p.time %i.material-icons access_time = event.time - - - if event.organisers.any? - .event__organisers - .event__organisers-list + - if event.organisers.any? || event.sponsors.any? + .d-md-flex.justify-content-md-between.align-items-md-center + - if event.organisers.any? + %div - event.organisers.each do |organiser| - = link_to twitter_url_for(organiser.twitter), class: 'user-link' do - = image_tag(organiser.avatar(26), class: 'th radius', title: organiser.full_name, alt: organiser.full_name) - .event__col-2 - .event__labels - - if event.chapter - %span.label.status - = event.chapter.name - - if @user - - if @user.attending?(event.__getobj__) - = link_to event.path do - %span.label.success Attending - - if @user.event_organiser?(event) - = link_to event.admin_path do - %span.label Manage - .event__sponsors - - if event.sponsors.any? - - event.sponsors.each do |sponsor| - = link_to sponsor.website do - = image_tag(sponsor.avatar.thumb, class: 'sponsor', alt: sponsor.name) + = link_to twitter_url_for(organiser.twitter), class: "border-0 d-inline-block" do + = image_tag(organiser.avatar(26), class: "rounded-circle", title: organiser.full_name, alt: organiser.full_name) + + - if event.sponsors.any? + %div + - event.sponsors.each do |sponsor| + = link_to sponsor.website, class: "border-0 d-inline-block" do + = image_tag(sponsor.avatar.thumb, class: "sponsor-sm", alt: sponsor.name) \ No newline at end of file diff --git a/app/views/events/_event_actions.html.haml b/app/views/events/_event_actions.html.haml index 06c60d5b0..456dc676a 100644 --- a/app/views/events/_event_actions.html.haml +++ b/app/views/events/_event_actions.html.haml @@ -1,17 +1,17 @@ - if @event.announce_only - =link_to @event.external_url, class: 'button round' do + =link_to @event.external_url, class: 'btn btn-primary' do Go to external booking site - else - if @event.invitable - if logged_in? - unless @event.coaches_only? - =link_to event_student_rsvp_path(@event), class: 'button round' do + =link_to event_student_rsvp_path(@event), class: 'btn btn-primary' do = t('events.attend_as_student') - unless @event.students_only? - =link_to event_coach_rsvp_path(@event), class: 'button round' do + =link_to event_coach_rsvp_path(@event), class: 'btn btn-primary' do = t('events.attend_as_coach') - else - = link_to "Sign up", new_member_path, class: 'button' - = link_to "Log in", login_path, class: 'button' + = link_to "Sign up", new_member_path, class: 'btn btn-primary' + = link_to "Log in", login_path, class: 'btn btn-primary' - else - %em= t('event.not_open_for_rsvp') + %p.badge.bg-primary= t('events.not_open_for_rsvp') diff --git a/app/views/events/_events.html.haml b/app/views/events/_events.html.haml index 5ed8c1a1e..3946d9954 100644 --- a/app/views/events/_events.html.haml +++ b/app/views/events/_events.html.haml @@ -1,7 +1,7 @@ -.events#chapter - %ul.no-bullet +.container-fluid + .event - grouped_events.each do |date, workshops| - .row.grouped-events - .medium-12.columns - %h3.date= date + .row + .col + %h3.h5= date = render workshops diff --git a/app/views/events/_sponsors.html.haml b/app/views/events/_sponsors.html.haml deleted file mode 100644 index 219aedf82..000000000 --- a/app/views/events/_sponsors.html.haml +++ /dev/null @@ -1,3 +0,0 @@ -- sponsors.each do |sponsor| - .large-3.columns.sponsor-image - = link_to image_tag(sponsor.avatar.url, class: "sponsor", alt: sponsor.name), sponsor.website diff --git a/app/views/events/index.html.haml b/app/views/events/index.html.haml index bcefc5bd2..5e28d63c3 100644 --- a/app/views/events/index.html.haml +++ b/app/views/events/index.html.haml @@ -1,16 +1,15 @@ - title t('events.title') -%section#banner + +.container-fluid .row - .large-12.columns + .col{"data-test": "upcoming-events"} - if @events.any? - .events-list.events-list--upcoming - %h3 Upcoming Events - = render partial: 'events', locals: { grouped_events: @events } + %h3.mb-4 Upcoming Events + = render partial: 'events', locals: { grouped_events: @events } -.stripe +.container-fluid.stripe .row - .large-12.columns + .col{"data-test": "past-events"} - if @past_events.any? - .events-list.events-list--past - %h3 Past Events - = render partial: 'events', locals: { grouped_events: @past_events } + %h3.mb-4 Past Events + = render partial: 'events', locals: { grouped_events: @past_events } diff --git a/app/views/events/show.html.haml b/app/views/events/show.html.haml index 594a191d6..989f41b4b 100644 --- a/app/views/events/show.html.haml +++ b/app/views/events/show.html.haml @@ -1,18 +1,18 @@ .stripe.reverse .row - .large-12.columns + .col %h2 = @event.name %br %small #{humanize_date(@event.date_and_time, @event.ends_at, with_time: true)} - %section#banner - .row - .medium-12.columns - %p.lead - = @event.description.html_safe .row - .large-10.columns + .col + %p.lead + = @event.description.html_safe + + .row + .col = render partial: 'event_actions' .stripe.reverse @@ -20,81 +20,63 @@ = render partial: 'shared/venue', locals: { venue: @event.venue, address: @host_address} .row - .small-12.column + .col - if @event.announce_only - %a{ name: "information" } - %h3{ "data-magellan-destination" => "information"} Information + %h3 Information - else - %a{ name: "schedule" } - %h3{ "data-magellan-destination" => "schedule"} + %h3 = t('events.schedule') = dot_markdown(@event.schedule) - if @event.show_faq? .stripe.reverse .row - .large-12.columns - %a{ name: "faq" } - %h2{ "data-magellan-destination" => "faq"} - .text-center FAQ + .col + %h2.text-center FAQ - if @event.announce_only %p.text-center If you have any questions, #{mail_to(@event.email, "get in contact")} - - else = render partial: 'events/faq' +-if @event.sponsors? + #sponsors.container-fluid.stripe.reverse + .row + .col + %h2.text-center + = t('events.sponsors') + %p.text-center + %i= t('events.thx_to_sponsors') + - if @event.sponsors?(:gold) + .row.mt-4 + .col + %h3.text-center Gold + = render partial: 'shared/sponsors', object: @event.gold_sponsors + - if @event.sponsors?(:silver) + .row.mt-4 + .col + %h3.text-center Silver + = render partial: 'shared/sponsors', object: @event.silver_sponsors + - if @event.sponsors?(:bronze) + .row.mt-4 + .col + %h3.text-center Bronze + = render partial: 'shared/sponsors', object: @event.bronze_sponsors + - if @event.sponsors?(:standard) + = render partial: 'shared/sponsors', object: @event.sponsors -.stripe.reverse - .row - .large-12.columns - %a{ name: "sponsors" } - %h2{ "data-magellan-destination" => "sponsors"} - .text-center= t('events.sponsors') - %p.text-center - %i= t('events.thx_to_sponsors') - %br - - if @event.sponsors? - - if @event.sponsors?(:gold) - %h3.text-center Gold - = render partial: "sponsors", object: @event.gold_sponsors - - if @event.sponsors?(:silver) - %h3.text-center Silver - = render partial: "sponsors", object: @event.silver_sponsors - - if @event.sponsors?(:bronze) - %h3.text-center Bronze - = render partial: "sponsors", object: @event.bronze_sponsors - - if @event.sponsors?(:standard) - = render partial: "sponsors", object: @event.sponsors - if @event.verified_coaches.any? - .stripe.reverse + .container-fluid.stripe.reverse .row - .large-12.columns - %a{ name: "coaches" } - %h2{ "data-magellan-destination" => "coaches"} - .text-center= t('events.coaches') - %ul.small-block-grid-2.medium-block-grid-4 - - @event.verified_coaches.each do |coach| - %li.text-center - =link_to twitter_url_for(coach.twitter), class: 'user-link' do - =image_tag(coach.avatar(56), class: 'th radius', title: coach.full_name, alt: coach.full_name) - %br - %br - = coach.full_name - %br -.stripe.reverse - .row - .large-12.columns - %a{ name: "organisers" } - %h2{ "data-magellan-destination" => "organisers"} - .text-center= t('events.organisers') - %br - - if @event.organisers.any? - %ul.small-block-grid-2.medium-block-grid-4 - - @event.organisers.each do |organiser| - %li.text-center - =link_to twitter_url_for(organiser.twitter), class: 'user-link' do - =image_tag(organiser.avatar(56), class: 'th radius', title: organiser.full_name, alt: organiser.full_name) - %br - %br - = organiser.full_name - %br + .col + %h2.text-center + = t('events.coaches') + .row.mt-4.text-center + .col-sm-4.col-md-3.mb-4 + - @event.verified_coaches.each do |coach| + = link_to twitter_url_for(coach.twitter), class: 'user-link' do + = image_tag(coach.avatar(56), class: 'rounded-circle', title: coach.full_name, alt: coach.full_name) + %p.mt-3.mb-1= coach.full_name + +- if @event.organisers.any? + .container-fluid.stripe.reverse + = render partial: 'members/organisers_grid', locals: { members: @event.organisers, show_info: false } diff --git a/app/views/layouts/_admin_menu.html.haml b/app/views/layouts/_admin_menu.html.haml index 0d556f62c..6f6043d3e 100644 --- a/app/views/layouts/_admin_menu.html.haml +++ b/app/views/layouts/_admin_menu.html.haml @@ -1,18 +1,45 @@ %li - %label Admin Menu -%li= link_to 'Admin Dashboard', admin_root_path -%li= link_to 'View Feedback', admin_feedback_index_path -%li= link_to 'New Announcement', new_admin_announcement_path -%li= link_to 'New workshop', new_admin_workshop_path -%li= link_to 'New sponsor', new_admin_sponsor_path -%li= link_to 'New event', new_admin_event_path -%li= link_to 'New monthly', new_admin_meeting_path -%li= link_to 'New chapter', new_admin_chapter_path -%li= link_to 'New group', new_admin_group_path -%li= link_to "Review jobs (#{jobs_pending_approval})", admin_jobs_path - + %hr.dropdown-divider +%li + %label.pl-3 Admin Menu +%li + %hr.dropdown-divider +%li + = link_to admin_root_path, class: "dropdown-item" do + Admin Dashboard +%li + = link_to new_admin_announcement_path, class: "dropdown-item" do + New Announcement +%li + = link_to new_admin_workshop_path class: "dropdown-item" do + New workshop +%li + = link_to new_admin_sponsor_path class: "dropdown-item" do + New sponsor +%li + = link_to new_admin_event_path, class: "dropdown-item" do + New event +%li + = link_to new_admin_meeting_path, class: "dropdown-item" do + New monthly +%li + = link_to new_admin_chapter_path, class: "dropdown-item" do + New chapter +%li + = link_to new_admin_group_path, class: "dropdown-item" do + New group +%li + = link_to admin_jobs_path, class: "dropdown-item" do + Review jobs (#{jobs_pending_approval}) - if current_user.has_role?(:organiser, :any) %li - %label My Chapters + %hr.dropdown-divider + %li + %label.pl-3 My Chapters + %li + %hr.dropdown-divider + %li + = link_to new_admin_chapter_path, class: "dropdown-item" do + New chapter - current_user.organised_chapters.each do |chapter| %li= link_to chapter.name, admin_chapter_path(chapter) diff --git a/app/views/layouts/_aside.html.haml b/app/views/layouts/_aside.html.haml index 9a0d4179f..96086f447 100644 --- a/app/views/layouts/_aside.html.haml +++ b/app/views/layouts/_aside.html.haml @@ -1,23 +1,38 @@ -%aside.left-off-canvas-menu - %ul.off-canvas-list - - if current_user.is_admin? - = render 'layouts/admin_menu' - - elsif current_user.organiser? || current_user.monthlies_organiser? - = render 'layouts/organiser_menu' - %li - %label Portal - %li= link_to 'My Jobs', member_jobs_path - %li= link_to 'List a job', new_member_job_path - %li - %label Account - %li= link_to 'My Profile', profile_path - %li= link_to 'My Dashboard', dashboard_path - %li= link_to 'Invitations', invitations_path - %li= link_to 'Manage subscriptions', subscriptions_path - %li= link_to 'Update your details', edit_member_path - %li - = link_to logout_path do - Sign out - %i.fa-stack.fa-lg - %i.fa.fa-stack-2x - %i.fa.fa-sign-out.fa-stack-1x +%ul.dropdown-menu + - if current_user.is_admin? + = render 'layouts/admin_menu' + - elsif current_user.organiser? || current_user.monthlies_organiser? + = render 'layouts/organiser_menu' + %li + %hr.dropdown-divider + %li + %label.pl-3 Portal + %li + %hr.dropdown-divider + %li + = link_to member_jobs_path, class: "dropdown-item" do + My Jobs + %li + = link_to new_member_job_path, class: "dropdown-item" do + List a job + %li + %hr.dropdown-divider + %li + %label.pl-3 Account + %li + %hr.dropdown-divider + %li + = link_to dashboard_path, class: "dropdown-item" do + My Dashboard + %li + = link_to invitations_path, class: "dropdown-item" do + Invitations + %li + = link_to subscriptions_path, class: "dropdown-item" do + Manage subscriptions + %li + = link_to edit_member_path, class: "dropdown-item" do + Update your details + %li + = link_to logout_path, class: "dropdown-item" do + Sign out diff --git a/app/views/layouts/_footer.html.haml b/app/views/layouts/_footer.html.haml index f734f3fa8..0bec6f6f5 100644 --- a/app/views/layouts/_footer.html.haml +++ b/app/views/layouts/_footer.html.haml @@ -1,17 +1,16 @@ %footer.main-footer - .row - .large-3.columns - %p.copyright + .row.pt-5 + .col-sm-12.col-md-6.col-lg-3 + %p © #{Date.today.year} codebar - %p.contact =t("footer.email_us") -# encoded email address hello@codebar.io - .large-3.columns - %ul.no-bullet + .col-sm-12.col-md-6.col-lg-3 + %ul.list-unstyled.ml-0 %li= link_to t("navigation.code_of_conduct"), code_of_conduct_path %li= link_to t("navigation.coach_guide"), teaching_guide_path %li= link_to t("navigation.student_guide"), student_guide_path @@ -19,8 +18,8 @@ %li= link_to t("navigation.becoming_sponsor"), "http://manual.codebar.io/becoming-a-sponsor" %li= link_to t("navigation.faq"), faq_path - .large-3.columns - %ul.no-bullet + .col-sm-12.col-md-6.col-lg-3 + %ul.list-unstyled.ml-0 %li= link_to t("navigation.blog"), "https://medium.com/the-codelog" %li= link_to t("navigation.codebar_stories"), "https://medium.com/codebar-stories" %li= link_to t("navigation.coaches"), coaches_path @@ -29,14 +28,13 @@ %li= link_to t("navigation.jobs"), jobs_path %li.active= link_to t("navigation.donate"), new_donation_path - .large-3.columns + .col-sm-12.col-md-6.col-lg-3 = render partial: 'shared/social_media' - .row - .large-12.columns - - %ul.inline-list.registration - %li + .row.pb-4 + .col + %ul.list-inline.registration.m-0.p-0 + %li.list-inline-item Registered UK and Wales charity no. 1187776 - %li= link_to t("navigation.cookie-policy"), cookie_policy_path - %li= link_to t("navigation.privacy-policy"), privacy_policy_path + %li.list-inline-item= link_to t("navigation.cookie-policy"), cookie_policy_path + %li.list-inline-item= link_to t("navigation.privacy-policy"), privacy_policy_path diff --git a/app/views/layouts/_navigation.html.haml b/app/views/layouts/_navigation.html.haml index b0e357b89..72a25b462 100644 --- a/app/views/layouts/_navigation.html.haml +++ b/app/views/layouts/_navigation.html.haml @@ -1,47 +1,35 @@ -.contain-to-grid.sticky - %nav.top-bar{ 'data-topbar': '' } - %ul.title-area - %li.name - =link_to root_path do - .brand - = image_tag("logo.png", alt: "codebar logo", size: "148x40") - %li.toggle-topbar - = link_to '#' do - .button - %span.fa.fa-bars{"aria-hidden" => "true"} - %span Menu - - %section.top-bar-section - %ul.right - %li - = link_to 'https://medium.com/@codebar' do - %span Blog - %li{class: active_link_class(events_path)} - = link_to events_path do - %span Events - %li - = link_to 'http://tutorials.codebar.io' do - %span Tutorials - %li{class: active_link_class(coaches_path)} - = link_to coaches_path do - %span Coaches - %li{class: active_link_class(sponsors_path)} - = link_to sponsors_path do - %span Sponsors - %li{class: active_link_class(jobs_path)} - = link_to jobs_path do - %span Jobs - %li{class: active_link_class(new_donation_path)} - = link_to new_donation_path do - %span.highlight - Donate +%nav.navbar.navbar-expand-lg.navbar-light.bg-white.fixed-top.pt-3.pb-3 + %div.container + =link_to root_path, class: "navbar-brand border-0" do + = image_tag("logo.png", alt: "codebar logo", size: "148x40") + %button.navbar-toggler.m-0{"type": "button", "data-toggle": "collapse", "data-target": "#navbarSupportedContent", "aria-controls": "navbarSupportedContent", "aria-expanded": "false", "aria-label": "Toggle navigation"} + %span.navbar-toggler-icon + %div.collapse.navbar-collapse.justify-content-end#navbarSupportedContent + %ul.navbar-nav + %li.nav-item + = link_to "https://medium.com/@codebar", class: "nav-link border-0" do + Blogs + %li.nav-item + = link_to events_path, class: "nav-link border-0" do + Events + %li.nav-item + = link_to "http://tutorials.codebar.io", class: "nav-link border-0" do + Tutorials + %li.nav-item + = link_to coaches_path, class: "nav-link border-0" do + Coaches + %li.nav-item + = link_to jobs_path, class: "nav-link border-0" do + Jobs + %li.nav-item + = link_to new_donation_path, class: "nav-link border-0" do + Donate - if !logged_in? %li - = link_to '/auth/github', method: :post do - %span - Sign in + = link_to "/auth/github", class: "nav-link border-0" do + Sign in - else - %li - = link_to '#', class: 'left-off-canvas-toggle', id: 'profile' do - .fa.fa-navicon + %li.nav-item.dropdown + = link_to "#", {"role": "button", "aria-expanded": "false", "data-toggle": "dropdown", class: "nav-link border-0 dropdown-toggle", id: "navbarDropdown"} do Menu + = render 'layouts/aside' diff --git a/app/views/layouts/_organiser_menu.html.haml b/app/views/layouts/_organiser_menu.html.haml index ba1d77a0d..976b287a6 100644 --- a/app/views/layouts/_organiser_menu.html.haml +++ b/app/views/layouts/_organiser_menu.html.haml @@ -1,15 +1,31 @@ %li - %label Admin Menu - - if current_user.admin_or_organiser? - %li= link_to "New workshop", new_admin_workshop_path - %li= link_to "New sponsor", new_admin_sponsor_path + %hr.dropdown-divider +%li + %label.pl-3 Admin Menu +%li + %hr.dropdown-dividers +- if current_user.admin_or_organiser? + %li + = link_to new_admin_workshop_path, class: "dropdown-item" do + New workshop + %li + = link_to new_admin_sponsor_path, class: "dropdown-item" do + New sponsor - if current_user.monthlies_organiser? - %li= link_to "New monthly", new_admin_meeting_path + %li + = link_to new_admin_meeting_path, class: "dropdown-item" do + New monthly -if current_user.organised_chapters.any? %li - %label My Chapters + %hr.dropdown-divider + %li + %label.pl-3 My Chapters + %li + %hr.dropdown-divider - current_user.organised_chapters.each do |chapter| - %li= link_to chapter.name, admin_chapter_path(chapter) - %li= link_to "#{chapter.name} feedback", admin_chapter_feedback_index_path(chapter) + %li + = link_to chapter.name, admin_chapter_path(chapter) + %li + = link_to "#{chapter.name} feedback", admin_chapter_feedback_index_path(chapter) diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml index 5ae6b5d62..8f4ff8dd3 100644 --- a/app/views/layouts/application.html.haml +++ b/app/views/layouts/application.html.haml @@ -20,15 +20,11 @@ = csrf_meta_tags - %body.no-js{ 'class': "#{params[:controller]}-#{params[:action]}"} - .off-canvas-wrap{ 'data-offcanvas': true } - .inner-wrap - #top - = render partial: 'layouts/navigation' - = render partial: 'layouts/messages' - = render partial: 'layouts/aside' if logged_in? - = yield - = render partial: 'layouts/footer' - %a.exit-off-canvas + %body.no-js{ 'class': "#{params[:controller]}-#{params[:action]}", "data-no-jquery": "true"} + #top + = render partial: 'layouts/navigation' + = render partial: 'layouts/messages' + = yield + = render partial: 'layouts/footer' = content_for :page_footer diff --git a/app/views/meetings/_meeting.html.haml b/app/views/meetings/_meeting.html.haml index 442c43fb9..23c13a96c 100644 --- a/app/views/meetings/_meeting.html.haml +++ b/app/views/meetings/_meeting.html.haml @@ -1,39 +1,43 @@ -.event - .event__col-1 - %header.event__header - %h3.title - = link_to meeting.name, meeting_path(meeting.slug) - - if meeting.venue.present? - at - = link_to meeting.venue.name, meeting.venue.website - .event__details - .date - %i.material-icons - calendar_today - = meeting.date - .time - %i.material-icons - access_time - = meeting.time - - if meeting.organisers.any? - .event__organisers - .event__organisers-list +.container + .row.event.border.p-4.mb-4 + .col-9 + %div + %h3.event__header + = link_to meeting.name, meeting_path(meeting.slug) + - if meeting.venue.present? + at + = link_to meeting.venue.name, meeting.venue.website + %div.mt-3 + %p.date.mb-0 + %i.material-icons + calendar_today + = meeting.date + %p.time + %i.material-icons + access_time + = meeting.time + + - if meeting.organisers.any? + %div.mt-3 - meeting.organisers.each do |organiser| - = link_to twitter_url_for(organiser.twitter), class: 'user-link' do - = image_tag(organiser.avatar(26), class: 'th radius', title: organiser.full_name, alt: organiser.full_name) - .event__col-2 - .event__labels - - if meeting.chapter - %span.label.status - = meeting.chapter.name - - if @user - - if @user.attending?(meeting) - = link_to meeting.path do - %span.label.success Attending - - if @user.event_organiser?(meeting) - = link_to meeting.admin_path do - %span.label Manage - .event__sponsors - - if meeting.venue.present? - = link_to meeting.venue.website do - = image_tag(meeting.venue.avatar, class: 'sponsor', alt: meeting.venue.name) + = link_to twitter_url_for(organiser.twitter), class: 'border-0' do + = image_tag(organiser.avatar(26), class: 'rounded-circle', title: organiser.full_name, alt: organiser.full_name) + + .col-3.d-flex.flex-column.align-items-end.justify-content-between + .mb-3.d-flex + - if meeting.chapter + %span.badge.bg-primary.text-light + = meeting.chapter.name + - if @user + - if @user.attending?(meeting) + %span.badge.bg-success.ml-2 + = link_to meeting.path, class: "text-light border-0" do + Attending + - if @user.event_organiser?(meeting) + %span.badge.bg-secondary.ml-2 + = link_to meeting.admin_path, class: "text-light border-0" do + %span.label Manage + .d-flex + - if meeting.venue.present? + = link_to meeting.venue.website, class: "border-0" do + = image_tag(meeting.venue.avatar, class: 'sponsor-sm', alt: meeting.venue.name) diff --git a/app/views/meetings/_meeting_actions.html.haml b/app/views/meetings/_meeting_actions.html.haml index 688fda3af..768eda854 100644 --- a/app/views/meetings/_meeting_actions.html.haml +++ b/app/views/meetings/_meeting_actions.html.haml @@ -2,7 +2,7 @@ %h4 Venue %p %strong= @meeting.venue.name - .monthly-host-logo + = link_to @meeting.venue.website, class: 'd-block border-0 mb-4' do = image_tag(@meeting.venue.avatar.thumb, alt: @meeting.venue.name) %strong Address %p= @host_address @@ -14,29 +14,32 @@ %p= @meeting.venue.accessibility_info %h4 RSVP - - if logged_in? - if @meeting.past? - %p This event has already occurred. + %p.badge.bg-primary This event has already occurred. - elsif current_user.banned? - %p Your invitations have been temporarily suspended. + %p.badge.bg-danger Your invitations have been temporarily suspended. - elsif @meeting.attending?(current_user) - %h5 You are attending this event. - %strong - = link_to "Can't make it anymore? Click here to cancel your spot.", meeting_cancel_path(meeting_id: @meeting.id, token: @invitation.token) + %p.badge.bg-success You are attending this event. + %p + %strong + = link_to "Can't make it anymore? Click here to cancel your spot.", meeting_cancel_path(meeting_id: @meeting.id, token: @invitation.token) - elsif @meeting.invitable && @meeting.not_full - = link_to "Attend", meeting_invitation_path(@meeting, token: @invitation&.token), class: "button round" + = link_to meeting_invitation_path(@meeting), class: 'btn btn-primary' do + = 'RSVP here' - elsif !@meeting.not_full - %h5 This event is now full. - %strong To join the waitlist, please fill in your details here. + %p.badge.bg-warning.text-dark This event is now full. + %p + %strong To join the waitlist, please fill in your details here. - else - %h5 This event is not open for RSVP. + %p + %strong This event is not open for RSVP. - else - = link_to "Sign up", new_member_path, class: 'button' - = link_to "Log in", login_path, class: 'button' + = link_to 'Sign up', new_member_path, class: 'btn btn-primary' + = link_to 'Log in', login_path, class: 'btn btn-primary' diff --git a/app/views/meetings/show.html.haml b/app/views/meetings/show.html.haml index 676b6c17c..884797d56 100644 --- a/app/views/meetings/show.html.haml +++ b/app/views/meetings/show.html.haml @@ -1,39 +1,37 @@ - title t('meeting.title', name: @meeting.name, date: humanize_date(@meeting.date_and_time)) -%section.stripe.reverse +.stripe.reverse .row - .medium-6.columns + .col %h2 - =@meeting.name + = @meeting.name %h3 - %small=humanize_date(@meeting.date_and_time, @meeting.ends_at, with_time: true) + %small= humanize_date(@meeting.date_and_time, @meeting.ends_at, with_time: true) .row - .medium-4.columns + .col-md-4.col-sm-12 = render partial: 'meeting_actions' - .medium-8.columns + .col-md-8.col-sm-12 %h4 Agenda %p= @meeting.description.html_safe .stripe.reverse .row - .large-12.columns + .col %iframe{ width: '100%', height: '250', frameborder: '0', scrolling: 'no', marginheight: '0', marginwidth: '0', src: %{https://maps.google.com/maps?f=q&source=s_q&hl=en&geocode=&q=#{@host_address.for_map}&ie=UTF8&t=m&z=15&output=embed} } - =link_to "View larger map", %{https://maps.google.com/maps?f=q&source=s_q&hl=en&geocode=&q=#{@host_address.for_map}&ie=UTF8&hq=&t=m&z=15}, style: "color:#0000FF;text-align:left" + = link_to 'View larger map', %{https://maps.google.com/maps?f=q&source=s_q&hl=en&geocode=&q=#{@host_address.for_map}&ie=UTF8&hq=&t=m&z=15}, style: "color:#0000FF;text-align:left" -.stripe.reverse - .row - .large-12.columns - %h4.text-center Who else will be there? - %br - %ul.small-block-grid-2.medium-block-grid-4 - - @attendees.each do |a| - %li.text-center - =image_tag(a.member.avatar(96), class: 'th radius', title: a.member.full_name, alt: a.member.full_name) - %br - %br - =a.member.full_name +- if @attendees.any? + .container-fluid.stripe.reverse.text-center + .row + .col + %h3 Who else will be there? + .row + - @attendees.each do |attendee| + .col-sm-4.col-md-3.mt-4 + = image_tag(attendee.member.avatar(56), class: 'rounded-circle', title: attendee.member.full_name, alt: attendee.member.full_name) + %p.mt-3= attendee.member.full_name .stripe.reverse = render partial: 'members/organisers_grid', locals: { members: @meeting.organisers, show_info: false } diff --git a/app/views/member/details/edit.html.haml b/app/views/member/details/edit.html.haml index d5da9300f..48fca7eb9 100644 --- a/app/views/member/details/edit.html.haml +++ b/app/views/member/details/edit.html.haml @@ -1,36 +1,25 @@ -%section#banner - .row - .medium-12.columns +.container-fluid + .row.justify-content-md-center.pt-3 + .col-12.col-md-7 %h1= t('member.details.edit.title') %p= t('member.details.edit.summary') = simple_form_for @member, url: member_details_path, method: :put do |f| - .row - .large-6.large-offset-3.columns + .row.justify-content-md-center + .col-12.col-md-7 = f.input :name, required: true - .row - .large-6.large-offset-3.columns = f.input :surname, required: true - .row - .large-6.large-offset-3.columns = f.input :pronouns - - .row - .large-6.large-offset-3.columns = f.input :email, required: true - .row - .large-6.large-offset-3.columns - if @member.coach? = f.input :about_you, as: :text, label: t('member.details.edit.coach.about_you'), required: true - else = f.input :about_you, as: :text, label: t('member.details.edit.student.about_you'), required: true - .row - .large-6.large-offset-3.columns = f.input :newsletter, as: :boolean, boolean_style: :inline, checked_value: true, unchecked_value: false - .row - .large-6.large-offset-3.columns.text-right + .row.justify-content-md-center.mt-4.mb-4 + .col-12.col-md-7.text-right = hidden_field_tag :next_page, step2_member_path(member_type: @type) - = f.submit t('member.details.edit.submit'), class: 'button round right' + = f.submit t('member.details.edit.submit'), class: 'btn-lg btn-primary border-0' diff --git a/app/views/members/_avatar_listing.html.haml b/app/views/members/_avatar_listing.html.haml index 68926e757..1d1d5f4c2 100644 --- a/app/views/members/_avatar_listing.html.haml +++ b/app/views/members/_avatar_listing.html.haml @@ -1,10 +1,7 @@ -%ul.small-block-grid-2.medium-block-grid-4 - - member.each do |member| - %li.text-center - =link_to twitter_url_for(member.twitter), class: 'user-link' do - =image_tag(member.avatar(56), class: 'th radius', title: member.full_name, alt: member.full_name) - %br - %br - = member.full_name - - if show_info - = member.mobile +- member.each do |member| + .col-sm-4.col-md-3.mt-4 + = link_to twitter_url_for(member.twitter), class: 'border-0' do + = image_tag(member.avatar(56), class: 'rounded-circle', title: member.full_name, alt: member.full_name) + %p.mt-3= member.full_name + - if show_info + %p.mt-1= member.mobile diff --git a/app/views/members/_organisers_grid.html.haml b/app/views/members/_organisers_grid.html.haml index 6d9efb6bf..8fd713f2f 100644 --- a/app/views/members/_organisers_grid.html.haml +++ b/app/views/members/_organisers_grid.html.haml @@ -1,7 +1,9 @@ -.row#organisers - .large-12.columns - .text-center - %h3= t('events.organisers') - %br - %br +- title = local_assigns[:title] ? local_assigns[:title] : t('events.organisers') + +#organisers.text-center + .row + .col + %h3= title + + .row = render partial: 'members/avatar_listing', locals: { member: members, show_info: show_info } diff --git a/app/views/members/_show.html.haml b/app/views/members/_show.html.haml deleted file mode 100644 index 5b57e9907..000000000 --- a/app/views/members/_show.html.haml +++ /dev/null @@ -1,48 +0,0 @@ -%section - .stripe.reverse - .row - .medium-1.columns - =image_tag(member.avatar(100), class: 'th radius', title: member.full_name, alt: member.full_name) - .medium-11.columns - %h2 - = member.full_name - %br - .row - .medium-8.columns - %dl - - if member.pronouns.present? - %dt Pronouns - %dd= member.pronouns || "Not specified" - - %dt Email - %dd= mail_to member.email, member.email - - %dt Twitter handle - %dd= link_to "@#{member.twitter}", twitter_url_for(member.twitter) - - %dt Phone number - %dd= member.mobile || "N/A" - - %dt About - %dd= member.about_you - - = render "shared/skills", member: member - = link_to "Update your details", edit_member_path, class: 'button tiny round' - - .medium-4.columns - - if member.groups.any? - %h3 Subscriptions - %ul.no-bullet - - member.groups.each do |group| - %li - = link_to chapter_path(group.chapter.slug) do - #{group.name} (#{group.chapter.name}) - - else - %label.label.secondary You are not subscribed to any chapters - %br - %br - - = link_to "Manage subscriptions", subscriptions_path, class: 'button tiny round' - %br - Member since - %em #{l(member.created_at, format: :website_format)} diff --git a/app/views/members/new.html.haml b/app/views/members/new.html.haml index 6adac6615..10dc3edda 100644 --- a/app/views/members/new.html.haml +++ b/app/views/members/new.html.haml @@ -1,10 +1,10 @@ -.stripe.reverse#banner +.container.pt-5.pb-5 .row - .large-12.columns + .cols %h2=@page_title -.stripe.reverse +.container-fluid.stripe.reverse .row - .medium-12.columns + .col %p.lead = t('members.new.intro') = link_to t('members.code_of_conduct'), code_of_conduct_path @@ -15,10 +15,10 @@ = t('members.new.students.criteria_brief') %p.lead = t('members.new.students.github') - = link_to registration_path(member_type: "student"), class: "button round" do - = t('members.sign_up_as_student') - %i.fa.fa-github.fa-fw - %br - = link_to registration_path(member_type: "coach"), class: "button round" do - = t('members.sign_up_as_coach') - %i.fa.fa-github.fa-fw + .d-flex.flex-column.align-items-start + = link_to registration_path(member_type: "student"), class: "btn-lg btn-primary mb-4" do + = t('members.sign_up_as_student') + %i.fa.fa-github.fa-fw + = link_to registration_path(member_type: "coach"), class: "btn-lg btn-primary" do + = t('members.sign_up_as_coach') + %i.fa.fa-github.fa-fw diff --git a/app/views/members/show.html.haml b/app/views/members/show.html.haml index 6e3957e04..9385be072 100644 --- a/app/views/members/show.html.haml +++ b/app/views/members/show.html.haml @@ -1,3 +1,52 @@ -= render partial: 'shared/title', locals: { title: "My Profile", date: nil } -#member_profile - = render partial: 'members/show', locals: { member: @member } +.container-fluid.stripe.reverse + .row.align-items-center + .col-auto + = image_tag(@member.avatar(80), alt: @member.full_name, class: 'rounded-circle mb-2') + .col-auto + %h2.mb-0= @member.full_name + %small + Member since + %em #{l(@member.created_at, format: :website_format)} + +.container-fluid#member_profile + .row + .col-12.col-md-7.mb-4 + %h4 Details + %dl + - if @member.pronouns.present? + %dt Pronouns + %dd= @member.pronouns || 'Not specified' + + %dt Email + %dd= mail_to @member.email, @member.email + + %dt Twitter handle + %dd= link_to "@#{@member.twitter}", twitter_url_for(@member.twitter) + + %dt Phone number + %dd= @member.mobile || 'N/A' + + %dt About + %dd= @member.about_you + + - if @member.skills.any? + %dt Skills + %dd + - @member.skills.each do |skill| + .badge.bg-secondary= skill.name + + = link_to 'Update your details', edit_member_path, class: 'btn btn-primary', role: 'button' + + .col-12.col-md-4.offset-md-1.mb-4 + - if @member.groups.any? + %h4 Subscriptions + %ul.list-unstyled.ml-0 + - @member.groups.each do |group| + %li + = link_to chapter_path(group.chapter.slug) do + #{group.name} (#{group.chapter.name}) + - else + %i.fa.fa-warning + %small You are not subscribed to any groups. + + = link_to 'Manage subscriptions', subscriptions_path, class: 'btn btn-secondary btn-sm', role: 'button' diff --git a/app/views/pages/cookie-policy.html.haml b/app/views/pages/cookie-policy.html.haml index e6ef976c1..22aa8e244 100644 --- a/app/views/pages/cookie-policy.html.haml +++ b/app/views/pages/cookie-policy.html.haml @@ -1,50 +1,77 @@ -.row.mt2 - .large-12.columns - :markdown - - ##{t('pages.cookies.title')} - - #{t('pages.cookies.p1')} - - #{t('pages.cookies.p2')} - - #{t('pages.cookies.sub.title')} - - - ## #{t('pages.cookies.functional.title')} - - #{t('pages.cookies.functional.description')} -
- - | Cookie name | Purpose | Expires | - | ---- | ------- | ----- | - | `_planner_session` | #{t('pages.cookies.functional.planner')} | #{t('pages.cookies.functional.planner_expiry ')} | - -
 
- - ## #{t('pages.cookies.google_analytics.title')} - - #{t('pages.cookies.google_analytics.description')} - - **#{t('pages.cookies.google_analytics.info')}** - -
 
- - | Name | Purpose | Expires | - | ---- | ------- | ----- | - | `_ga` | #{t('pages.cookies.google_analytics.ga')} | #{t('pages.cookies.google_analytics.ga_expiry ')} | - | `_ga` | #{t('pages.cookies.google_analytics.gid')} | #{t('pages.cookies.google_analytics.gid_expiry ')} | - -
 
- - #{t('pages.cookies.google_analytics.opt_out')} - - ### #{t('pages.cookies.cloudflare.title')} - -
 
- - | Name | Purpose | Expires | - | ---- | ------- | ----- | - | `_cfduid` | #{t('pages.cookies.cloudflare.cfduid')} | #{t('pages.cookies.cloudflare.cfduid_expiry')} | - -
 
+.stripe.reverse + .row.justify-content-md-center + .col.col-md-8 + :markdown + # #{t('pages.cookies.title')} + +.stripe.reverse + .row.justify-content-md-center + .col.col-md-8 + :markdown + #{t('pages.cookies.p1')} + + #{t('pages.cookies.p2')} + + #{t('pages.cookies.sub.title')} + + ## #{t('pages.cookies.functional.title')} + + #{t('pages.cookies.functional.description')} + + %table.table.table-secondary + %thead + %tr + %th= t('pages.cookies.table.header.h1') + %th= t('pages.cookies.table.header.h2') + %th= t('pages.cookies.table.header.h3') + %tbody + %tr + %th + %code= t('pages.cookies.functional.planner_name') + %th= t('pages.cookies.functional.planner_purpose') + %th= t('pages.cookies.functional.planner_expiry') + %br + + :markdown + ## #{t('pages.cookies.google_analytics.title')} + + #{t('pages.cookies.google_analytics.description')} + + **#{t('pages.cookies.google_analytics.info')}** + + %table.table.table-secondary + %thead + %tr + %th= t('pages.cookies.table.header.h1') + %th= t('pages.cookies.table.header.h2') + %th= t('pages.cookies.table.header.h3') + %tbody + %tr + %th + %code= t('pages.cookies.google_analytics.ga_name') + %th= t('pages.cookies.google_analytics.ga_purpose') + %th= t('pages.cookies.google_analytics.ga_expiry') + %tr + %th + %code= t('pages.cookies.google_analytics.gid_name') + %th= t('pages.cookies.google_analytics.gid_purpose') + %th= t('pages.cookies.google_analytics.gid_expiry') + %br + + :markdown + #{t('pages.cookies.google_analytics.opt_out')} + + ## #{t('pages.cookies.cloudflare.title')} + + %table.table.table-secondary + %thead + %tr + %th= t('pages.cookies.table.header.h1') + %th= t('pages.cookies.table.header.h2') + %th= t('pages.cookies.table.header.h3') + %tbody + %tr + %th + %code= t('pages.cookies.cloudflare.cfduid_name') + %th= t('pages.cookies.cloudflare.cfduid_purpose') + %th= t('pages.cookies.cloudflare.cfduid_expiry') diff --git a/app/views/shared/_donation_platforms.html.haml b/app/views/shared/_donation_platforms.html.haml index 243a48dbf..30066c787 100644 --- a/app/views/shared/_donation_platforms.html.haml +++ b/app/views/shared/_donation_platforms.html.haml @@ -1,25 +1,33 @@ .row - .columns.small-12 + .col.mb-3 %h2= t("donation_platforms.title") -.row.flex-grid - .columns.small-12.medium-6.large-3.flex-item - .card.mt1 - =image_tag("logo.png", style: "max-height: 50px;", class: "mb1", alt: "codebar logo") - %h3.h6=link_to(t("donation_platforms.donation_form.title"), new_donation_path) - %p= t("donation_platforms.donation_form.text") - .columns.small-12.medium-6.large-3.flex-item - .card.mt1 - =image_tag("amazon-smile-logo.png", style: "max-height: 50px;", class: "mb1", alt: "Amazon Smile logo") - %h3.h6=link_to(t("donation_platforms.amazon_smile.title"), "https://smile.amazon.co.uk") - %p= t("donation_platforms.amazon_smile.text") - .columns.small-12.medium-6.large-3.flex-item - .card.mt1 - =image_tag("open-collective-logo.png", style: "max-height: 50px;", class: "mb1", alt: "Open Collective logo") - %h3.h6=link_to(t("donation_platforms.open_collective.title"), "https://opencollective.com/") - %p= t("donation_platforms.open_collective.text") - .columns.small-12.medium-6.large-3.flex-item - .card.mt1 - =image_tag("benevity-logo.png", style: "max-height: 50px;", class: "mb1", alt: "Benevity logo") - %h3.h6=link_to(t("donation_platforms.benevity.title"), "https://www.benevity.com/") - %p= t("donation_platforms.benevity.text") +.row.d-flex + .d-flex.col-sm-12.col-md-6.col-lg-3 + .card.mt-1.border-0 + %div.card-header.bg-white.border-0.pb-0.pt-4 + =image_tag("logo.png", style: "max-height: 50px;", alt: "codebar logo") + %div.card-body + %h3.h6=link_to(t("donation_platforms.donation_form.title"), new_donation_path) + %p= t("donation_platforms.donation_form.text") + .d-flex.col-sm-12.col-md-6.col-lg-3 + .card.mt-1.border-0 + %div.card-header.bg-white.border-0.pb-0.pt-4 + =image_tag("amazon-smile-logo.png", style: "max-height: 50px;", alt: "Amazon Smile logo") + %div.card-body + %h3.h6=link_to(t("donation_platforms.amazon_smile.title"), "https://smile.amazon.co.uk") + %p= t("donation_platforms.amazon_smile.text") + .d-flex.col-sm-12.col-md-6.col-lg-3 + .card.mt-1.border-0 + %div.card-header.bg-white.border-0.pb-0.pt-4 + =image_tag("open-collective-logo.png", style: "max-height: 50px;", alt: "Open Collective logo") + %div.card-body + %h3.h6=link_to(t("donation_platforms.open_collective.title"), "https://opencollective.com/") + %p= t("donation_platforms.open_collective.text") + .d-flex.col-sm-12.col-md-6.col-lg-3 + .card.mt-1.border-0 + %div.card-header.bg-white.border-0.pb-0.pt-4 + =image_tag("benevity-logo.png", style: "max-height: 50px;", alt: "Benevity logo") + %div.card-body + %h3.h6=link_to(t("donation_platforms.benevity.title"), "https://www.benevity.com/") + %p= t("donation_platforms.benevity.text") diff --git a/app/views/shared/_newsletter.html.haml b/app/views/shared/_newsletter.html.haml index 647dbb090..6381d71af 100644 --- a/app/views/shared/_newsletter.html.haml +++ b/app/views/shared/_newsletter.html.haml @@ -1,5 +1,5 @@ -.row - .medium-10.medium-offset-1.columns +.row.justify-content-md-center + .col-md-8 %h2= t('homepage.newsletter.title') %p= t('homepage.newsletter.description') @@ -29,7 +29,6 @@ -# real people should not fill this in and expect good things - do not remove this or risk form bot signups %div{ style: 'position: absolute; left: -5000px;', 'aria-hidden': 'true' } %input{ type: 'text', name: 'b_b4652d85b385945c79f2ffa2e_3798974cb3', tabindex: '-1', value: '' } - .clear - %input.button.small#mc-embedded-subscribe{ type: 'submit', value: 'Subscribe', name: 'subscribe' } - - %a{ href: 'https://us8.campaign-archive.com/home/?u=b4652d85b385945c79f2ffa2e&id=3798974cb3' } View previous newsletters. + .d-flex.justify-content-between.align-items-center + %input.btn.btn-primary#mc-embedded-subscribe{ type: 'submit', value: 'Subscribe', name: 'subscribe' } + %a{ href: 'https://us8.campaign-archive.com/home/?u=b4652d85b385945c79f2ffa2e&id=3798974cb3' } View previous newsletters. diff --git a/app/views/shared/_skills.html.haml b/app/views/shared/_skills.html.haml deleted file mode 100644 index 07d29f59f..000000000 --- a/app/views/shared/_skills.html.haml +++ /dev/null @@ -1,5 +0,0 @@ -- if member.skills.any? - %dt Skills - %dd - - member.skills.each do |skill| - .label= skill.name diff --git a/app/views/shared/_social_media.html.haml b/app/views/shared/_social_media.html.haml index 869c2bb59..fc4248b3a 100644 --- a/app/views/shared/_social_media.html.haml +++ b/app/views/shared/_social_media.html.haml @@ -1,25 +1,13 @@ -%ul.inline-list.right.social-media - %li.slack +%ul.list-inline.ml-0.social-media + %li.list-inline-item = link_to 'https://slack.codebar.io' do - %span.fa-stack.fa-lg{"aria-hidden" => "true"} - %i.fa.fa-square.fa-stack-2x - %i.fa.fa-slack.fa-stack-1x.fa-inverse - %span.sr-only codebar Slack - %li.github + =image_tag("svgs/slack.svg", style: "max-height: 50px;", class: "social-svg", alt: "Slack logo") + %li.list-inline-item = link_to 'https://github.com/codebar' do - %span.fa-stack.fa-lg{"aria-hidden" => "true"} - %i.fa.fa-square.fa-stack-2x - %i.fa.fa-github.fa-stack-1x.fa-inverse - %span.sr-only codebar on Github - %li.twitter - = link_to 'https://twitter.com/codebar' do - %span.fa-stack.fa-lg{"aria-hidden" => "true"} - %i.fa.fa-square.fa-stack-2x - %i.fa.fa-twitter.fa-stack-1x.fa-inverse - %span.sr-only codebar on Twitter - %li.facebook + =image_tag("svgs/github.svg", style: "max-height: 50px;", class: "social-svg", alt: "GitHub logo") + %li.list-inline-item = link_to 'https://facebook.com/codebarHQ' do - %span.fa-stack.fa-lg{"aria-hidden" => "true"} - %i.fa.fa-square.fa-stack-2x - %i.fa.fa-facebook.fa-stack-1x.fa-inverse - %span.sr-only codebar on Facebook + =image_tag("svgs/facebook.svg", style: "max-height: 50px;", class: "social-svg", alt: "Facebook logo") + %li.list-inline-item + = link_to 'https://twitter.com/codebar' do + =image_tag("svgs/twitter.svg", style: "max-height: 50px;", class: "social-svg", alt: "Twitter logo") diff --git a/app/views/shared/_sponsors.html.haml b/app/views/shared/_sponsors.html.haml new file mode 100644 index 000000000..d28176247 --- /dev/null +++ b/app/views/shared/_sponsors.html.haml @@ -0,0 +1,4 @@ +.row.align-items-center + - sponsors.each do |sponsor| + .col-4.col-md-3.col-lg-2.mt-4.d-flex.justify-content-center + = link_to image_tag(sponsor.avatar, class: 'small-image mw-100', alt: sponsor.name), sponsor.website, title: sponsor.name, class: 'd-inline-block border-0' diff --git a/app/views/shared/_venue.html.haml b/app/views/shared/_venue.html.haml index 7192ff438..fa25b0262 100644 --- a/app/views/shared/_venue.html.haml +++ b/app/views/shared/_venue.html.haml @@ -1,8 +1,8 @@ - formatted_address = address.to_html - section_title = formatted_address.empty? ? "Host" : "Venue" -#venue - .medium-6.columns +#venue.row + .col-md-6.col-sm-12.mb-4.mb-md-0 %h3= section_title %p %strong= venue.name @@ -20,6 +20,6 @@ %strong Accessibility information: = venue.accessibility_info - .medium-6.columns + .col-md-6.col-sm-12 %iframe{ width: '100%', height: '350', frameborder: '0', scrolling: 'no', marginheight: '0', marginwidth: '0', src: %{https://maps.google.com/maps?f=q&source=s_q&hl=en&geocode=&q=#{address.for_map}&ie=UTF8&t=m&z=15&output=embed} } = link_to "View larger map", %{https://maps.google.com/maps?f=q&source=s_q&hl=en&geocode=&q=#{address.for_map}&ie=UTF8&hq=&t=m&z=15}, style: "color:#0000FF;text-align:left" diff --git a/app/views/sponsors/index.html.haml b/app/views/sponsors/index.html.haml index 3077ae2fa..655afbdbb 100644 --- a/app/views/sponsors/index.html.haml +++ b/app/views/sponsors/index.html.haml @@ -1,13 +1,12 @@ .stripe.reverse .row - .large-12.columns + .col.col-lg-9 %h2 Sponsors %p.lead Without our sponsors running codebar would be impossible. They provide us with space, food and drinks, internet, and they also help us cover our running costs. %p.lead Thank you for sharing our dream of creating a more welcoming, equal and diverse tech industry. - - %p + %p.mb-0 If you are interested in becoming a host please do get in touch with us at #{mail_to "hello@codebar.io", "hello@codebar.io"} ='.' @@ -15,11 +14,7 @@ - if @sponsor_levels[level] .stripe.reverse .row - .large-12.columns - %h3.sponsor-header-margin.text-center + .col + %h3.text-center = sponsorship_level_title(level) - - @sponsor_levels[level].in_groups_of(6) do |grouped_sponsors| - .row.sponsor-row - - grouped_sponsors.compact.each do |sponsor| - .medium-2.small-4.columns.sponsor-image - = link_to image_tag(sponsor.avatar, class: "small-image", alt: sponsor.name), sponsor.website + = render partial: 'shared/sponsors', object: @sponsor_levels[level].compact diff --git a/app/views/subscriptions/index.html.haml b/app/views/subscriptions/index.html.haml index 54ef089b1..275ce6c50 100644 --- a/app/views/subscriptions/index.html.haml +++ b/app/views/subscriptions/index.html.haml @@ -1,39 +1,37 @@ -= render partial: 'shared/title', locals: { title: "Subscriptions", date: nil } %section#banner -.row - .large-12.columns + = render partial: 'shared/title', locals: { title: 'Subscriptions', date: nil } + +.row.mt-4 + .col.col-lg-9 %h3= t('subscriptions.mailing_list.title') %p.lead= t('subscriptions.mailing_list.summary') - .row - .medium-3.columns - - if @member.subscribed_to_newsletter? - = simple_form_for @mailing_list, url: mailing_lists_path, method: :delete do |f| - = f.submit t('subscriptions.mailing_list.unsubscribe'), class: 'button tiny expand success' - - else - = simple_form_for @mailing_list, url: mailing_lists_path do |f| - = f.submit t('subscriptions.mailing_list.subscribe'), class: 'button tiny expand success' + - if @member.subscribed_to_newsletter? + = simple_form_for @mailing_list, url: mailing_lists_path, method: :delete do |f| + = f.submit t('subscriptions.mailing_list.unsubscribe'), class: 'btn btn-success btn-lg' + - else + = simple_form_for @mailing_list, url: mailing_lists_path do |f| + = f.submit t('subscriptions.mailing_list.subscribe'), class: 'btn btn-success btn-lg' %hr .row - .large-12.columns + .col.col.col-lg-9 %p.lead= t('subscriptions.summary') - %br - - @groups.group_by(&:chapter).each do |chapter, groups| - %h4= chapter.name - %hr - - groups.sort_by(&:name).each do |group| - .row - .medium-9.columns - %p= group.name - .medium-3.columns - - if belongs_to_group?(group) - = simple_form_for :subscription, method: :delete do |f| - = f.input :subscription_id, as: :hidden, input_html: { value: nil } - = f.input :group_id, as: :hidden, input_html: { value: group.id } - = f.submit "Subscribed", class: 'button tiny expand success', id: "#{chapter.name.downcase}-#{group.name.downcase}" - - else - = simple_form_for :subscription do |f| - = f.input :group_id, as: :hidden, input_html: { value: group.id } - = f.submit "Subscribe", class: 'button tiny expand warn', id: "#{chapter.name.downcase}-#{group.name.downcase}" - %hr +- @groups.group_by(&:chapter).each do |chapter, groups| + .row.mb-4.border-bottom + .col + %h4= chapter.name + - groups.sort_by(&:name).each do |group| + .row.mb-3 + .col + %p= group.name + .col.col-md-4.col-lg-3 + - if belongs_to_group?(group) + = simple_form_for :subscription, method: :delete, html: { class: 'w-100' } do |f| + = f.input :subscription_id, as: :hidden, input_html: { value: nil } + = f.input :group_id, as: :hidden, input_html: { value: group.id } + = f.submit 'Subscribed', class: 'btn btn-success btn-lg w-100', id: "#{chapter.name.downcase}-#{group.name.downcase}" + - else + = simple_form_for :subscription, html: { class: 'w-100' } do |f| + = f.input :group_id, as: :hidden, input_html: { value: group.id } + = f.submit 'Subscribe', class: 'btn btn-primary btn-lg w-100', id: "#{chapter.name.downcase}-#{group.name.downcase}" diff --git a/app/views/workshops/_actions.html.haml b/app/views/workshops/_actions.html.haml index b844ba93e..089baaf9e 100644 --- a/app/views/workshops/_actions.html.haml +++ b/app/views/workshops/_actions.html.haml @@ -1,6 +1,5 @@ - if !@workshop.invitable_yet? - %p - %label.label.info= t('workshops.not_open_for_rsvp') + %p.badge.bg-primary= t('workshops.not_open_for_rsvp') - else - if @workshop.past? and !logged_in? %p= t('workshops.sign_up_to_be_invited') @@ -15,19 +14,20 @@ - if logged_in? && @workshop.future? && (@workshop.invitable || @workshop.open_for_rsvp?) - if @workshop.attendee?(current_user) - = button_to "Manage your invitation", rsvp_workshop_path(@workshop), method: :post, class: 'button round ' + = button_to "Manage your invitation", rsvp_workshop_path(@workshop), method: :post, class: 'btn btn-primary' - else - if current_user.student? && current_user.coach? - = button_to "Attend as a student", rsvp_workshop_path(@workshop, role: "Student"), method: :post,class: 'button round ' - = button_to "Attend as a coach", rsvp_workshop_path(@workshop, role: "Coach"), method: :post,class: 'button round ' + .d-flex + = button_to "Attend as a student", rsvp_workshop_path(@workshop, role: "Student"), method: :post,class: 'btn btn-primary mr-3' + = button_to "Attend as a coach", rsvp_workshop_path(@workshop, role: "Coach"), method: :post,class: 'btn btn-primary' - elsif current_user.student? - = button_to "Attend as a student", rsvp_workshop_path(@workshop, role: "Student"), method: :post,class: 'button round ' + = button_to "Attend as a student", rsvp_workshop_path(@workshop, role: "Student"), method: :post,class: 'btn btn-primary' - elsif current_user.coach? - = button_to "Attend as a coach", rsvp_workshop_path(@workshop, role: "Coach"), method: :post,class: 'button round ' + = button_to "Attend as a coach", rsvp_workshop_path(@workshop, role: "Coach"), method: :post,class: 'btn btn-primary' - else It looks like something went wrong while you were signing up. = link_to "Please tell us whether you want to attend as a student or coach.", subscriptions_path - elsif not logged_in? - = link_to "Sign up", new_member_path, class: 'button' - = link_to "Log in", login_path, class: 'button' + = link_to "Sign up", new_member_path, class: 'btn btn-primary' + = link_to "Log in", login_path, class: 'btn btn-primary' diff --git a/app/views/workshops/show.html.haml b/app/views/workshops/show.html.haml index 6aaccaa62..a978d02b8 100644 --- a/app/views/workshops/show.html.haml +++ b/app/views/workshops/show.html.haml @@ -2,38 +2,32 @@ = render partial: 'meta_tags', locals: { workshop: @workshop } -.stripe.reverse +.container-fluid.stripe.reverse .row - .large-12.columns + .col %h2 = t('workshops.title', host: @workshop.host.name) %br %small #{humanize_date(@workshop.date_and_time, @workshop.ends_at, with_time: true)} #{@workshop.distance_of_time} - if @workshop.date_and_time.past? - %label.label.warning= t('messages.already_taken_place') - %section#banner - .row - .medium-12.columns - %p.lead - = t("workshops.lead") - %p.description - = sanitize(@workshop.description) + %span.badge.bg-danger= t('messages.already_taken_place') + .row.mt-3 + .col + %p.lead + = t("workshops.lead") + %p + = sanitize(@workshop.description) - = render 'actions' unless current_user&.banned? + = render 'actions' unless current_user&.banned? -.stripe.reverse - .row - = render partial: 'shared/venue', locals: { venue: @workshop.host, address: @workshop.address} +.container-fluid.stripe.reverse + = render partial: 'shared/venue', locals: { venue: @workshop.host, address: @workshop.address} - #sponsors - .small-12.column - %h3 Sponsors - %ul.row.no-bullet - - @workshop.sponsors.each do |sponsor| - %li.small-4.columns - = image_tag(sponsor.avatar.url, class: 'sponsor', alt: sponsor.name) - %p - = link_to sponsor.name, sponsor.website +#sponsors.container-fluid.stripe.reverse + .row + .col + %h3.text-center Sponsors + = render partial: 'shared/sponsors', object: @workshop.sponsors -.stripe.reverse +.container-fluid.stripe.reverse = render partial: 'members/organisers_grid', locals: { members: @workshop.organisers, show_info: false } diff --git a/config/locales/de.yml b/config/locales/de.yml index 2fc64ba8f..ab5fda709 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -65,6 +65,8 @@ de: workshop_email_subject: "Regarding hosting a workshop" chapters: title: "Chapters" + events: + upcoming: "Upcoming Events" mailer: workshop_invitation: attending: @@ -385,29 +387,38 @@ de: title: Edit job listing pages: cookies: - title: Cookies + title: Cookie Policy p1: 'Cookies are small pieces of text used to store information on web browsers. They are used by websites accross a number of different devices to store and receive identifiers and other information. Our Website and Service use cookies and other similar technologies (collectively in this Policy, "cookies"), in order to provide a better service to you and to generally improve our Website and Service. For example, we may use cookies to help direct you to the appropriate part of our Website, by indicating that you are a repeat visitor. We also may use information to present you with services that are matched to your preferences and to manage and track the effectiveness of our marketing efforts.' p2: Some portions of the codebar website are functional without cookies, and you may generally choose whether to accept cookies. Most web browsers are set to accept cookies by default, however, you may be able to delete cookies yourself through your browser's cookie manager. To do so, please follow the instructions provided by your web browser. Please note that disabling cookies will reset your session, disable auto-login, and may adversely affect the availability and functionality of our Website and the services we can provide to you. sub: - title: Below the cookies used by the codebar website. + title: Below are the cookies used by the codebar website. + table: + header: + h1: Name + h2: Purpose + h3: Expires functional: title: Functional Cookies description: Stores information about your session. - planner: Stores session data + planner_name: _planner_session + planner_purpose: Stores session data planner_expiry: Expires after 24 hours google_analytics: title: Google Analytics - description: Google Analytics collects information about how you use the codebar website. This enables us to identify how busy the website is and possible improvements. + description: Google Analytics collects information about how you use the codebar website. This enables us to identify how busy the website is and possible improvements. info: We don’t allow Google to use or share our analytics data. opt_out: You can [opt out of Google Analytics](https://tools.google.com/dlpage/gaoptout). - ga: Tracks if you have visited codebar.io before + ga_name: _ga + ga_purpose: Tracks if you have visited codebar.io before ga_expiry: After 2 years - gid: Tracks if you have visited codebar.io before + gid_name: _ga + gid_purpose: Tracks if you have visited codebar.io before gid_expiry: After 24 hours cloudflare: title: Cloudflare - cfduid: Used to identify individual clients behind a shared IP address and apply security settings on a per-client basis. - cfduid_expiry: '1 year' + cfduid_name: _pfduid + cfduid_purpose: Used to identify individual clients behind a shared IP address and apply security settings on a per-client basis + cfduid_expiry: 1 year privacy_policy: title: Privacy Policy subtitle: Your privacy matters to us diff --git a/config/locales/en.yml b/config/locales/en.yml index 17d9fb8b7..1f9b68e46 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -71,6 +71,8 @@ en: newsletter: title: Subscribe to our newsletter description: Get regular updates about the codebar community. Be informed about upcoming events, jobs, scholarships and other learning opportunities. + events: + upcoming: "Upcoming Events" mailer: workshop_invitation: attending: @@ -390,6 +392,7 @@ en: sign_up: "to be invited to our workshops." no_incoming: "There are no workshops coming up." contact: "To contact the %{city} team, send an email to %{email}" + team: Team job: status: draft: Draft @@ -487,7 +490,7 @@ en: summary: Subscriptions control the invitation emails you receive. For example, if you would like to receive student invitations for the Brighton and West London workshops then subscribe to the Brighton (Students) and West London (Students) options. mailing_list: title: codebar newsletter - summary: Stay up to date with codebar''s news and opportunities by subscribing to the newsletter. + summary: Stay up to date with codebar's news and opportunities by subscribing to the newsletter. subscribe: Subscribe to newsletter unsubscribe: Unsubscribe from newsletter messages: @@ -500,29 +503,38 @@ en: pages: cookies: - title: Cookies + title: Cookie Policy p1: 'Cookies are small pieces of text used to store information on web browsers. They are used by websites accross a number of different devices to store and receive identifiers and other information. Our Website and Service use cookies and other similar technologies (collectively in this Policy, "cookies"), in order to provide a better service to you and to generally improve our Website and Service. For example, we may use cookies to help direct you to the appropriate part of our Website, by indicating that you are a repeat visitor. We also may use information to present you with services that are matched to your preferences and to manage and track the effectiveness of our marketing efforts.' p2: Some portions of the codebar website are functional without cookies, and you may generally choose whether to accept cookies. Most web browsers are set to accept cookies by default, however, you may be able to delete cookies yourself through your browser's cookie manager. To do so, please follow the instructions provided by your web browser. Please note that disabling cookies will reset your session, disable auto-login, and may adversely affect the availability and functionality of our Website and the services we can provide to you. sub: - title: Below the cookies used by the codebar website. + title: Below are the cookies used by the codebar website. + table: + header: + h1: Name + h2: Purpose + h3: Expires functional: title: Functional Cookies description: Stores information about your session. - planner: Stores session data + planner_name: _planner_session + planner_purpose: Stores session data planner_expiry: Expires after 24 hours google_analytics: title: Google Analytics - description: Google Analytics collects information about how you use the codebar website. This enables us to identify how busy the website is and possible improvements. + description: Google Analytics collects information about how you use the codebar website. This enables us to identify how busy the website is and possible improvements. info: We don’t allow Google to use or share our analytics data. opt_out: You can [opt out of Google Analytics](https://tools.google.com/dlpage/gaoptout). - ga: Tracks if you have visited codebar.io before + ga_name: _ga + ga_purpose: Tracks if you have visited codebar.io before ga_expiry: After 2 years - gid: Tracks if you have visited codebar.io before + gid_name: _ga + gid_purpose: Tracks if you have visited codebar.io before gid_expiry: After 24 hours cloudflare: title: Cloudflare - cfduid: Used to identify individual clients behind a shared IP address and apply security settings on a per-client basis. - cfduid_expiry: '1 year' + cfduid_name: _pfduid + cfduid_purpose: Used to identify individual clients behind a shared IP address and apply security settings on a per-client basis + cfduid_expiry: 1 year privacy_policy: title: Privacy Policy subtitle: Your privacy matters to us diff --git a/config/locales/en_AU.yml b/config/locales/en_AU.yml index 4c92242fa..834737d3a 100644 --- a/config/locales/en_AU.yml +++ b/config/locales/en_AU.yml @@ -65,6 +65,8 @@ en-AU: workshop_email_subject: "Regarding hosting a workshop" chapters: title: "Chapters" + events: + upcoming: "Upcoming Events" mailer: workshop_invitation: attending: @@ -386,29 +388,38 @@ en-AU: title: Edit job listing pages: cookies: - title: Cookies + title: Cookie Policy p1: 'Cookies are small pieces of text used to store information on web browsers. They are used by websites accross a number of different devices to store and receive identifiers and other information. Our Website and Service use cookies and other similar technologies (collectively in this Policy, "cookies"), in order to provide a better service to you and to generally improve our Website and Service. For example, we may use cookies to help direct you to the appropriate part of our Website, by indicating that you are a repeat visitor. We also may use information to present you with services that are matched to your preferences and to manage and track the effectiveness of our marketing efforts.' p2: Some portions of the codebar website are functional without cookies, and you may generally choose whether to accept cookies. Most web browsers are set to accept cookies by default, however, you may be able to delete cookies yourself through your browser's cookie manager. To do so, please follow the instructions provided by your web browser. Please note that disabling cookies will reset your session, disable auto-login, and may adversely affect the availability and functionality of our Website and the services we can provide to you. sub: - title: Below the cookies used by the codebar website. + title: Below are the cookies used by the codebar website. + table: + header: + h1: Name + h2: Purpose + h3: Expires functional: title: Functional Cookies description: Stores information about your session. - planner: Stores session data + planner_name: _planner_session + planner_purpose: Stores session data planner_expiry: Expires after 24 hours google_analytics: title: Google Analytics - description: Google Analytics collects information about how you use the codebar website. This enables us to identify how busy the website is and possible improvements. + description: Google Analytics collects information about how you use the codebar website. This enables us to identify how busy the website is and possible improvements. info: We don’t allow Google to use or share our analytics data. opt_out: You can [opt out of Google Analytics](https://tools.google.com/dlpage/gaoptout). - ga: Tracks if you have visited codebar.io before + ga_name: _ga + ga_purpose: Tracks if you have visited codebar.io before ga_expiry: After 2 years - gid: Tracks if you have visited codebar.io before + gid_name: _ga + gid_purpose: Tracks if you have visited codebar.io before gid_expiry: After 24 hours cloudflare: title: Cloudflare - cfduid: Used to identify individual clients behind a shared IP address and apply security settings on a per-client basis. - cfduid_expiry: '1 year' + cfduid_name: _pfduid + cfduid_purpose: Used to identify individual clients behind a shared IP address and apply security settings on a per-client basis + cfduid_expiry: 1 year privacy_policy: title: Privacy Policy subtitle: Your privacy matters to us diff --git a/config/locales/en_GB.yml b/config/locales/en_GB.yml index 197f2508a..e3417c709 100644 --- a/config/locales/en_GB.yml +++ b/config/locales/en_GB.yml @@ -65,6 +65,8 @@ en-GB: workshop_email_subject: "Regarding hosting a workshop" chapters: title: "Chapters" + events: + upcoming: "Upcoming Events" mailer: workshop_invitation: attending: @@ -386,29 +388,38 @@ en-GB: title: Edit job listing pages: cookies: - title: Cookies + title: Cookie Policy p1: 'Cookies are small pieces of text used to store information on web browsers. They are used by websites accross a number of different devices to store and receive identifiers and other information. Our Website and Service use cookies and other similar technologies (collectively in this Policy, "cookies"), in order to provide a better service to you and to generally improve our Website and Service. For example, we may use cookies to help direct you to the appropriate part of our Website, by indicating that you are a repeat visitor. We also may use information to present you with services that are matched to your preferences and to manage and track the effectiveness of our marketing efforts.' p2: Some portions of the codebar website are functional without cookies, and you may generally choose whether to accept cookies. Most web browsers are set to accept cookies by default, however, you may be able to delete cookies yourself through your browser's cookie manager. To do so, please follow the instructions provided by your web browser. Please note that disabling cookies will reset your session, disable auto-login, and may adversely affect the availability and functionality of our Website and the services we can provide to you. sub: - title: Below the cookies used by the codebar website. + title: Below are the cookies used by the codebar website. + table: + header: + h1: Name + h2: Purpose + h3: Expires functional: title: Functional Cookies description: Stores information about your session. - planner: Stores session data + planner_name: _planner_session + planner_purpose: Stores session data planner_expiry: Expires after 24 hours google_analytics: title: Google Analytics - description: Google Analytics collects information about how you use the codebar website. This enables us to identify how busy the website is and possible improvements. + description: Google Analytics collects information about how you use the codebar website. This enables us to identify how busy the website is and possible improvements. info: We don’t allow Google to use or share our analytics data. opt_out: You can [opt out of Google Analytics](https://tools.google.com/dlpage/gaoptout). - ga: Tracks if you have visited codebar.io before + ga_name: _ga + ga_purpose: Tracks if you have visited codebar.io before ga_expiry: After 2 years - gid: Tracks if you have visited codebar.io before + gid_name: _ga + gid_purpose: Tracks if you have visited codebar.io before gid_expiry: After 24 hours cloudflare: title: Cloudflare - cfduid: Used to identify individual clients behind a shared IP address and apply security settings on a per-client basis. - cfduid_expiry: '1 year' + cfduid_name: _pfduid + cfduid_purpose: Used to identify individual clients behind a shared IP address and apply security settings on a per-client basis + cfduid_expiry: 1 year privacy_policy: title: Privacy Policy subtitle: Your privacy matters to us diff --git a/config/locales/en_US.yml b/config/locales/en_US.yml index 110888dd7..b4ce97730 100644 --- a/config/locales/en_US.yml +++ b/config/locales/en_US.yml @@ -65,6 +65,8 @@ en-US: workshop_email_subject: "Regarding hosting a workshop" chapters: title: "Chapters" + events: + upcoming: "Upcoming Events" mailer: workshop_invitation: attending: @@ -384,29 +386,38 @@ en-US: title: Edit job listing pages: cookies: - title: Cookies + title: Cookie Policy p1: 'Cookies are small pieces of text used to store information on web browsers. They are used by websites accross a number of different devices to store and receive identifiers and other information. Our Website and Service use cookies and other similar technologies (collectively in this Policy, "cookies"), in order to provide a better service to you and to generally improve our Website and Service. For example, we may use cookies to help direct you to the appropriate part of our Website, by indicating that you are a repeat visitor. We also may use information to present you with services that are matched to your preferences and to manage and track the effectiveness of our marketing efforts.' p2: Some portions of the codebar website are functional without cookies, and you may generally choose whether to accept cookies. Most web browsers are set to accept cookies by default, however, you may be able to delete cookies yourself through your browser's cookie manager. To do so, please follow the instructions provided by your web browser. Please note that disabling cookies will reset your session, disable auto-login, and may adversely affect the availability and functionality of our Website and the services we can provide to you. sub: - title: Below the cookies used by the codebar website. + title: Below are the cookies used by the codebar website. + table: + header: + h1: Name + h2: Purpose + h3: Expires functional: title: Functional Cookies description: Stores information about your session. - planner: Stores session data + planner_name: _planner_session + planner_purpose: Stores session data planner_expiry: Expires after 24 hours google_analytics: title: Google Analytics - description: Google Analytics collects information about how you use the codebar website. This enables us to identify how busy the website is and possible improvements. + description: Google Analytics collects information about how you use the codebar website. This enables us to identify how busy the website is and possible improvements. info: We don’t allow Google to use or share our analytics data. opt_out: You can [opt out of Google Analytics](https://tools.google.com/dlpage/gaoptout). - ga: Tracks if you have visited codebar.io before + ga_name: _ga + ga_purpose: Tracks if you have visited codebar.io before ga_expiry: After 2 years - gid: Tracks if you have visited codebar.io before + gid_name: _ga + gid_purpose: Tracks if you have visited codebar.io before gid_expiry: After 24 hours cloudflare: title: Cloudflare - cfduid: Used to identify individual clients behind a shared IP address and apply security settings on a per-client basis. - cfduid_expiry: '1 year' + cfduid_name: _pfduid + cfduid_purpose: Used to identify individual clients behind a shared IP address and apply security settings on a per-client basis + cfduid_expiry: 1 year privacy_policy: title: Privacy Policy subtitle: Your privacy matters to us diff --git a/config/locales/es.yml b/config/locales/es.yml index 892002257..c2cdc087d 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -65,6 +65,8 @@ es: workshop_email_subject: "Regarding hosting a workshop" chapters: title: "Chapters" + events: + upcoming: "Upcoming Events" mailer: workshop_invitation: attending: @@ -386,29 +388,38 @@ es: title: Edit job listing pages: cookies: - title: Cookies + title: Cookie Policy p1: 'Cookies are small pieces of text used to store information on web browsers. They are used by websites accross a number of different devices to store and receive identifiers and other information. Our Website and Service use cookies and other similar technologies (collectively in this Policy, "cookies"), in order to provide a better service to you and to generally improve our Website and Service. For example, we may use cookies to help direct you to the appropriate part of our Website, by indicating that you are a repeat visitor. We also may use information to present you with services that are matched to your preferences and to manage and track the effectiveness of our marketing efforts.' p2: Some portions of the codebar website are functional without cookies, and you may generally choose whether to accept cookies. Most web browsers are set to accept cookies by default, however, you may be able to delete cookies yourself through your browser's cookie manager. To do so, please follow the instructions provided by your web browser. Please note that disabling cookies will reset your session, disable auto-login, and may adversely affect the availability and functionality of our Website and the services we can provide to you. sub: - title: Below the cookies used by the codebar website. + title: Below are the cookies used by the codebar website. + table: + header: + h1: Name + h2: Purpose + h3: Expires functional: title: Functional Cookies description: Stores information about your session. - planner: Stores session data + planner_name: _planner_session + planner_purpose: Stores session data planner_expiry: Expires after 24 hours google_analytics: title: Google Analytics - description: Google Analytics collects information about how you use the codebar website. This enables us to identify how busy the website is and possible improvements. + description: Google Analytics collects information about how you use the codebar website. This enables us to identify how busy the website is and possible improvements. info: We don’t allow Google to use or share our analytics data. opt_out: You can [opt out of Google Analytics](https://tools.google.com/dlpage/gaoptout). - ga: Tracks if you have visited codebar.io before + ga_name: _ga + ga_purpose: Tracks if you have visited codebar.io before ga_expiry: After 2 years - gid: Tracks if you have visited codebar.io before + gid_name: _ga + gid_purpose: Tracks if you have visited codebar.io before gid_expiry: After 24 hours cloudflare: title: Cloudflare - cfduid: Used to identify individual clients behind a shared IP address and apply security settings on a per-client basis. - cfduid_expiry: '1 year' + cfduid_name: _pfduid + cfduid_purpose: Used to identify individual clients behind a shared IP address and apply security settings on a per-client basis + cfduid_expiry: 1 year privacy_policy: title: Privacy Policy subtitle: Your privacy matters to us diff --git a/config/locales/fi.yml b/config/locales/fi.yml index a5499a3e6..1398d6a97 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -65,6 +65,8 @@ fi: workshop_email_subject: "Regarding hosting a workshop" chapters: title: "Chapters" + events: + upcoming: "Upcoming Events" mailer: workshop_invitation: attending: @@ -386,29 +388,38 @@ fi: title: Edit job listing pages: cookies: - title: Cookies + title: Cookie Policy p1: 'Cookies are small pieces of text used to store information on web browsers. They are used by websites accross a number of different devices to store and receive identifiers and other information. Our Website and Service use cookies and other similar technologies (collectively in this Policy, "cookies"), in order to provide a better service to you and to generally improve our Website and Service. For example, we may use cookies to help direct you to the appropriate part of our Website, by indicating that you are a repeat visitor. We also may use information to present you with services that are matched to your preferences and to manage and track the effectiveness of our marketing efforts.' p2: Some portions of the codebar website are functional without cookies, and you may generally choose whether to accept cookies. Most web browsers are set to accept cookies by default, however, you may be able to delete cookies yourself through your browser's cookie manager. To do so, please follow the instructions provided by your web browser. Please note that disabling cookies will reset your session, disable auto-login, and may adversely affect the availability and functionality of our Website and the services we can provide to you. sub: - title: Below the cookies used by the codebar website. + title: Below are the cookies used by the codebar website. + table: + header: + h1: Name + h2: Purpose + h3: Expires functional: title: Functional Cookies description: Stores information about your session. - planner: Stores session data + planner_name: _planner_session + planner_purpose: Stores session data planner_expiry: Expires after 24 hours google_analytics: title: Google Analytics - description: Google Analytics collects information about how you use the codebar website. This enables us to identify how busy the website is and possible improvements. + description: Google Analytics collects information about how you use the codebar website. This enables us to identify how busy the website is and possible improvements. info: We don’t allow Google to use or share our analytics data. opt_out: You can [opt out of Google Analytics](https://tools.google.com/dlpage/gaoptout). - ga: Tracks if you have visited codebar.io before + ga_name: _ga + ga_purpose: Tracks if you have visited codebar.io before ga_expiry: After 2 years - gid: Tracks if you have visited codebar.io before + gid_name: _ga + gid_purpose: Tracks if you have visited codebar.io before gid_expiry: After 24 hours cloudflare: title: Cloudflare - cfduid: Used to identify individual clients behind a shared IP address and apply security settings on a per-client basis. - cfduid_expiry: '1 year' + cfduid_name: _pfduid + cfduid_purpose: Used to identify individual clients behind a shared IP address and apply security settings on a per-client basis + cfduid_expiry: 1 year privacy_policy: title: Privacy Policy subtitle: Your privacy matters to us diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 47643d424..943378f0d 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -64,6 +64,8 @@ fr: workshop_email_subject: "Regarding hosting a workshop" chapters: title: "Chapters" + events: + upcoming: "Upcoming Events" mailer: workshop_invitation: attending: @@ -386,29 +388,38 @@ fr: title: Edit job listing pages: cookies: - title: Cookies + title: Cookie Policy p1: 'Cookies are small pieces of text used to store information on web browsers. They are used by websites accross a number of different devices to store and receive identifiers and other information. Our Website and Service use cookies and other similar technologies (collectively in this Policy, "cookies"), in order to provide a better service to you and to generally improve our Website and Service. For example, we may use cookies to help direct you to the appropriate part of our Website, by indicating that you are a repeat visitor. We also may use information to present you with services that are matched to your preferences and to manage and track the effectiveness of our marketing efforts.' p2: Some portions of the codebar website are functional without cookies, and you may generally choose whether to accept cookies. Most web browsers are set to accept cookies by default, however, you may be able to delete cookies yourself through your browser's cookie manager. To do so, please follow the instructions provided by your web browser. Please note that disabling cookies will reset your session, disable auto-login, and may adversely affect the availability and functionality of our Website and the services we can provide to you. sub: - title: Below the cookies used by the codebar website. + title: Below are the cookies used by the codebar website. + table: + header: + h1: Name + h2: Purpose + h3: Expires functional: title: Functional Cookies description: Stores information about your session. - planner: Stores session data + planner_name: _planner_session + planner_purpose: Stores session data planner_expiry: Expires after 24 hours google_analytics: title: Google Analytics - description: Google Analytics collects information about how you use the codebar website. This enables us to identify how busy the website is and possible improvements. + description: Google Analytics collects information about how you use the codebar website. This enables us to identify how busy the website is and possible improvements. info: We don’t allow Google to use or share our analytics data. opt_out: You can [opt out of Google Analytics](https://tools.google.com/dlpage/gaoptout). - ga: Tracks if you have visited codebar.io before + ga_name: _ga + ga_purpose: Tracks if you have visited codebar.io before ga_expiry: After 2 years - gid: Tracks if you have visited codebar.io before + gid_name: _ga + gid_purpose: Tracks if you have visited codebar.io before gid_expiry: After 24 hours cloudflare: title: Cloudflare - cfduid: Used to identify individual clients behind a shared IP address and apply security settings on a per-client basis. - cfduid_expiry: '1 year' + cfduid_name: _pfduid + cfduid_purpose: Used to identify individual clients behind a shared IP address and apply security settings on a per-client basis + cfduid_expiry: 1 year privacy_policy: title: Privacy Policy subtitle: Your privacy matters to us diff --git a/config/locales/no.yml b/config/locales/no.yml index b0e9a4952..56734531a 100644 --- a/config/locales/no.yml +++ b/config/locales/no.yml @@ -65,6 +65,8 @@ workshop_email_subject: "Regarding hosting a workshop" chapters: title: "Chapters" + events: + upcoming: "Upcoming Events" mailer: workshop_invitation: attending: @@ -386,29 +388,38 @@ title: Edit job listing pages: cookies: - title: Cookies + title: Cookie Policy p1: 'Cookies are small pieces of text used to store information on web browsers. They are used by websites accross a number of different devices to store and receive identifiers and other information. Our Website and Service use cookies and other similar technologies (collectively in this Policy, "cookies"), in order to provide a better service to you and to generally improve our Website and Service. For example, we may use cookies to help direct you to the appropriate part of our Website, by indicating that you are a repeat visitor. We also may use information to present you with services that are matched to your preferences and to manage and track the effectiveness of our marketing efforts.' p2: Some portions of the codebar website are functional without cookies, and you may generally choose whether to accept cookies. Most web browsers are set to accept cookies by default, however, you may be able to delete cookies yourself through your browser's cookie manager. To do so, please follow the instructions provided by your web browser. Please note that disabling cookies will reset your session, disable auto-login, and may adversely affect the availability and functionality of our Website and the services we can provide to you. sub: - title: Below the cookies used by the codebar website. + title: Below are the cookies used by the codebar website. + table: + header: + h1: Name + h2: Purpose + h3: Expires functional: title: Functional Cookies description: Stores information about your session. - planner: Stores session data + planner_name: _planner_session + planner_purpose: Stores session data planner_expiry: Expires after 24 hours google_analytics: title: Google Analytics - description: Google Analytics collects information about how you use the codebar website. This enables us to identify how busy the website is and possible improvements. + description: Google Analytics collects information about how you use the codebar website. This enables us to identify how busy the website is and possible improvements. info: We don’t allow Google to use or share our analytics data. opt_out: You can [opt out of Google Analytics](https://tools.google.com/dlpage/gaoptout). - ga: Tracks if you have visited codebar.io before + ga_name: _ga + ga_purpose: Tracks if you have visited codebar.io before ga_expiry: After 2 years - gid: Tracks if you have visited codebar.io before + gid_name: _ga + gid_purpose: Tracks if you have visited codebar.io before gid_expiry: After 24 hours cloudflare: title: Cloudflare - cfduid: Used to identify individual clients behind a shared IP address and apply security settings on a per-client basis. - cfduid_expiry: '1 year' + cfduid_name: _pfduid + cfduid_purpose: Used to identify individual clients behind a shared IP address and apply security settings on a per-client basis + cfduid_expiry: 1 year privacy_policy: title: Privacy Policy subtitle: Your privacy matters to us diff --git a/db/schema.rb b/db/schema.rb index 2de3f44d2..21a0cf9b6 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -130,7 +130,7 @@ t.string "surname" t.string "email" t.boolean "mailing_list_consent", default: false - t.string "token", null: false + t.string "token", null: false end add_index "contacts", ["email", "sponsor_id"], name: "index_contacts_on_email_and_sponsor_id", unique: true, using: :btree diff --git a/spec/features/listing_events_spec.rb b/spec/features/listing_events_spec.rb index 01ed3b6e6..920871572 100644 --- a/spec/features/listing_events_spec.rb +++ b/spec/features/listing_events_spec.rb @@ -15,7 +15,7 @@ end scenario 'i can view a list with upcoming events' do - within('.events-list--upcoming') do + within('*[data-test=upcoming-events]') do expect(page).to have_content upcoming_course.title expect(page).to have_content 'Workshop' expect(page).to have_content event.name @@ -23,7 +23,7 @@ end scenario 'i can view a list with past events' do - within('.events-list--past') do + within('*[data-test=past-events]') do expect(page).to have_content past_course.title expect(page).to have_content 'Workshop' expect(page).to have_content past_event.name @@ -38,8 +38,8 @@ Fabricate(:workshop, date_and_time: 3.weeks.ago) visit events_path - within('.events-list--past') do - expect(page).to have_selector('.event', count: 10) + within('*[data-test=past-events]') do + expect(page).to have_selector('.event', count: 11) expect(page).not_to have_content 'Workshop' end end diff --git a/spec/features/viewing_a_meeting_spec.rb b/spec/features/viewing_a_meeting_spec.rb index f30f16686..8365291a4 100644 --- a/spec/features/viewing_a_meeting_spec.rb +++ b/spec/features/viewing_a_meeting_spec.rb @@ -25,7 +25,7 @@ visit meeting_path(meeting) login_mock_omniauth(member, 'Log in') - click_on 'Attend' + click_on 'RSVP here' expect(page).to have_content('Your RSVP was successful. We look forward to seeing you at the Monthly!') diff --git a/spec/support/shared_examples/behaves_like_viewing_workshop_details.rb b/spec/support/shared_examples/behaves_like_viewing_workshop_details.rb index f17f3090c..ccc2a8924 100644 --- a/spec/support/shared_examples/behaves_like_viewing_workshop_details.rb +++ b/spec/support/shared_examples/behaves_like_viewing_workshop_details.rb @@ -2,7 +2,7 @@ scenario 'sponsors' do within '#sponsors' do workshop.sponsors.each do |sponsor| - expect(page).to have_content(sponsor.name) + expect(page).to have_css("img[src=\"#{sponsor.avatar}\"]") end end end