From 37103879c0f48127ddc0ba2f0edc89dd4b49110c Mon Sep 17 00:00:00 2001 From: "depfu[bot]" <23717796+depfu[bot]@users.noreply.github.com> Date: Tue, 2 Mar 2021 22:35:41 +0000 Subject: [PATCH 01/36] Update pg to version 1.2.3 --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 929552b6..49aff746 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -375,7 +375,7 @@ GEM hashery (~> 2.0) ruby-rc4 ttfunk - pg (1.1.4) + pg (1.2.3) piwik_analytics (1.0.2) actionpack activesupport From e4f17b8ea6a6bf111325a255224c464ec5250ef5 Mon Sep 17 00:00:00 2001 From: "depfu[bot]" <23717796+depfu[bot]@users.noreply.github.com> Date: Wed, 3 Mar 2021 00:16:54 +0000 Subject: [PATCH 02/36] Update delayed_job_active_record to version 4.1.5 --- Gemfile.lock | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 21de475f..2bedc41f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -144,10 +144,10 @@ GEM dalli (2.7.10) dante (0.2.0) database_cleaner (1.7.0) - delayed_job (4.1.8) - activesupport (>= 3.0, < 6.1) - delayed_job_active_record (4.1.4) - activerecord (>= 3.0, < 6.1) + delayed_job (4.1.9) + activesupport (>= 3.0, < 6.2) + delayed_job_active_record (4.1.5) + activerecord (>= 3.0, < 6.2) delayed_job (>= 3.0, < 5) devise (4.7.1) bcrypt (~> 3.0) @@ -302,7 +302,7 @@ GEM mini_magick (4.9.5) mini_mime (1.0.2) mini_portile2 (2.5.0) - minitest (5.14.3) + minitest (5.14.4) momentjs-rails (2.20.1) railties (>= 3.1) monetize (1.9.2) From 1ab6fae941407a45f744916a2df1ea0ea078f6bd Mon Sep 17 00:00:00 2001 From: "depfu[bot]" <23717796+depfu[bot]@users.noreply.github.com> Date: Sat, 6 Mar 2021 19:10:57 +0000 Subject: [PATCH 03/36] Update active_model_serializers to version 0.10.12 --- Gemfile.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 79df466b..f81957e9 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -36,9 +36,9 @@ GEM erubi (~> 1.4) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.0.3) - active_model_serializers (0.10.10) - actionpack (>= 4.1, < 6.1) - activemodel (>= 4.1, < 6.1) + active_model_serializers (0.10.12) + actionpack (>= 4.1, < 6.2) + activemodel (>= 4.1, < 6.2) case_transform (>= 0.2) jsonapi-renderer (>= 0.1.1.beta1, < 0.3) activejob (5.2.4.5) From 5d6bdd9d6d8a30c7ea013a7fe2ac95bafebdcd28 Mon Sep 17 00:00:00 2001 From: "depfu[bot]" <23717796+depfu[bot]@users.noreply.github.com> Date: Sat, 6 Mar 2021 19:20:59 +0000 Subject: [PATCH 04/36] Update awesome_nested_set to version 3.4.0 --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 79df466b..b0e59c54 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -79,7 +79,7 @@ GEM ast (2.4.0) autoprefixer-rails (9.6.4) execjs - awesome_nested_set (3.2.1) + awesome_nested_set (3.4.0) activerecord (>= 4.0.0, < 7.0) aws_cf_signer (0.1.3) axlsx_rails (0.5.2) From 2e73853eb1c051eccc3aa9af8c0eb1878b3174f9 Mon Sep 17 00:00:00 2001 From: "depfu[bot]" <23717796+depfu[bot]@users.noreply.github.com> Date: Tue, 9 Mar 2021 04:37:02 +0000 Subject: [PATCH 05/36] Update byebug to version 11.1.3 --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 191d801b..cb51677e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -94,7 +94,7 @@ GEM bootstrap3-datetimepicker-rails (4.17.47) momentjs-rails (>= 2.8.1) builder (3.2.4) - byebug (11.0.1) + byebug (11.1.3) cancancan (2.3.0) capybara (3.26.0) addressable From 914de7bf1ac1b6d36020b3f3c86b6809b3231fa8 Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Wed, 10 Mar 2021 14:28:14 -0800 Subject: [PATCH 07/36] Delint by re-enabling everying on the conference admin page --- app/views/admin/conferences/show.html.haml | 24 +++++++++++----------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/app/views/admin/conferences/show.html.haml b/app/views/admin/conferences/show.html.haml index 76990b10..89daeff5 100644 --- a/app/views/admin/conferences/show.html.haml +++ b/app/views/admin/conferences/show.html.haml @@ -29,8 +29,8 @@ = render 'line_chart', title: 'Submissions per week', data: @submissions .col-md-4 - -# = render 'todo_list', - -# conference_progress: @conference_progress, conference: @conference + = render 'todo_list', + conference_progress: @conference_progress, conference: @conference .row#tickets .col-md-8 = render 'line_chart', @@ -58,22 +58,22 @@ = render 'donut_chart', title: 'Event types', combined_data: @event_type_distribution .col-md-4 - -# = render 'donut_chart', title: 'Difficulty levels', - -# combined_data: @difficulty_levels_distribution + = render 'donut_chart', title: 'Difficulty levels', + combined_data: @difficulty_levels_distribution .col-md-4 - -# = render 'donut_chart', title: 'Tracks', - -# combined_data: @tracks_distribution + = render 'donut_chart', title: 'Tracks', + combined_data: @tracks_distribution .tab-pane#distribution_confirmed .row .col-md-4 - -# = render 'donut_chart', title: 'Event types', - -# combined_data: @event_type_distribution_confirmed + = render 'donut_chart', title: 'Event types', + combined_data: @event_type_distribution_confirmed .col-md-4 - -# = render 'donut_chart', title: 'Difficulty levels', - -# combined_data: @difficulty_levels_distribution_confirmed + = render 'donut_chart', title: 'Difficulty levels', + combined_data: @difficulty_levels_distribution_confirmed .col-md-4 - -# = render 'donut_chart', title: 'Tracks', - -# combined_data: @tracks_distribution_confirmed + = render 'donut_chart', title: 'Tracks', + combined_data: @tracks_distribution_confirmed .tab-pane#distribution_withdrawn .row .col-md-4 From 3d5251cb7508887f7ac9798125db03ef9f25fd80 Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Wed, 10 Mar 2021 14:31:42 -0800 Subject: [PATCH 08/36] Delint event page --- .../conference_registrations/_event.html.haml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/app/views/conference_registrations/_event.html.haml b/app/views/conference_registrations/_event.html.haml index 2d0f6234..1a8a3d96 100644 --- a/app/views/conference_registrations/_event.html.haml +++ b/app/views/conference_registrations/_event.html.haml @@ -1,9 +1,9 @@ -.panel.panel-default{class: ("panel-success" if event.registrations.include?(@registration)) } +.panel.panel-default{c lass: ("panel-success" if event.registrations.include?(@registration)) } .panel-heading - %label{for: "registration_event_ids_#{event.id}"} - %h3{style: 'margin: 0 auto;'} - = hidden_field_tag "registration[event_ids][]", nil - = check_box_tag "registration[event_ids][]", event.id, event.registrations.include?(@registration), id: "registration_event_ids_#{event.id}" + %label{ for: "registration_event_ids_#{event.id}" } + %h3{ style: 'margin: 0 auto;' } + = hidden_field_tag 'registration[event_ids][]', nil + = check_box_tag 'registration[event_ids][]', event.id, event.registrations.include?(@registration), id: "registration_event_ids_#{event.id}" = event.title %small = event.subtitle @@ -13,16 +13,16 @@ (Scheduled on: #{event.time.to_date}) .panel-body - -# %p - -# = canceled_replacement_event_label(event, event_schedule) - -# = replacement_event_notice(event_schedule) + %p + = canceled_replacement_event_label(event, event_schedule) + = replacement_event_notice(event_schedule) %p - if event.speakers.any? presented by #{event.speaker_names} - if event_schedule.present? .h4.track %span.fa.fa-clock-o - %span.label{ style: "background-color: grey" } + %span.label{ style: 'background-color: grey' } = event_schedule.start_time.strftime('%A, %B %-d %H:%M') \- = event_schedule.end_time.strftime('%H:%M') From a76417fadf03eec89a283461d986a1a5f5a0084f Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Wed, 10 Mar 2021 23:36:38 -0800 Subject: [PATCH 09/36] more delinting --- app/views/schedules/happening_now.haml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/app/views/schedules/happening_now.haml b/app/views/schedules/happening_now.haml index bfa2aced..bb1244f4 100644 --- a/app/views/schedules/happening_now.haml +++ b/app/views/schedules/happening_now.haml @@ -16,19 +16,19 @@ .row / TODO: Clean this up, merge with all events page. - / scheduled events - date = nil - time = nil - @events_schedules.each do |event_schedule| - unless event_schedule.start_time.strftime('%Y-%m-%d').eql?(date) .col-xs-12.col-md-12 .date-content - %span{ class: 'date-title', id: "#{ event_schedule.start_time.strftime('%Y-%m-%d') }" } + %span{ class: 'date-title', id: event_schedule.start_time.strftime('%Y-%m-%d') } = inyourtz(event_schedule.start_time, @conference.timezone) do = date = event_schedule.start_time.strftime('%Y-%m-%d') - %a{ title: "Go up", class: "pull-right", href: "#program" } - %i{ class: "fa fa-angle-double-up fa-lg", 'aria-hidden' => true } - - unless event_schedule.start_time.strftime('%H:%M').eql?(time) + %a{ title: 'Go up', class: 'pull-right', href: '#program' } + %i.fa.fa-angle-double-up.fa-lg{ 'aria-hidden': true } + -# rubocop:disable Style/UnlessElse + - if !event_schedule.start_time.strftime('%H:%M').eql?(time) .col-xs-12.col-md-1 .start-time = inyourtz(event_schedule.start_time, @conference.timezone) do @@ -37,8 +37,10 @@ .new-time-event = render 'event', event: event_schedule.event, event_schedule: event_schedule - else + -# TODO: Add comment describing this condition. .col-xs-12.col-md-11.col-md-offset-1 = render 'event', event: event_schedule.event, event_schedule: event_schedule + -# rubocop:enable Style/UnlessElse :javascript // Refresh the page every 5 minutes. From e48dfb88800c0fd892e0f17f90fa6e76a06e98cb Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Wed, 10 Mar 2021 23:36:48 -0800 Subject: [PATCH 10/36] update snapcon logo --- app/assets/images/snapcon_logo.png | Bin 54727 -> 15211 bytes app/assets/images/snapshot-2020.png | Bin 0 -> 54727 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 app/assets/images/snapshot-2020.png diff --git a/app/assets/images/snapcon_logo.png b/app/assets/images/snapcon_logo.png index 3d9b05b1785a386b0d97bb2e2228a78ffe5aec13..17f3a33407f3e54519897dd1451d1a44a7a5af6d 100644 GIT binary patch literal 15211 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 IN|=QFADq0exBvhE literal 54727 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 z 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 diff --git a/app/assets/images/snapshot-2020.png b/app/assets/images/snapshot-2020.png new file mode 100644 index 0000000000000000000000000000000000000000..3d9b05b1785a386b0d97bb2e2228a78ffe5aec13 GIT binary patch literal 54727 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 z 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 literal 0 HcmV?d00001 From 558e5efe35d86b0fd29c128f23766db02fa0c993 Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Thu, 11 Mar 2021 12:16:48 -0800 Subject: [PATCH 11/36] Hide stuff again on admin conf show --- app/views/admin/conferences/show.html.haml | 66 +++++++++++----------- app/views/schedules/happening_now.haml | 10 ++-- 2 files changed, 37 insertions(+), 39 deletions(-) diff --git a/app/views/admin/conferences/show.html.haml b/app/views/admin/conferences/show.html.haml index 89daeff5..eaf6a031 100644 --- a/app/views/admin/conferences/show.html.haml +++ b/app/views/admin/conferences/show.html.haml @@ -28,9 +28,9 @@ .col-md-12 = render 'line_chart', title: 'Submissions per week', data: @submissions - .col-md-4 - = render 'todo_list', - conference_progress: @conference_progress, conference: @conference + -# .col-md-4 + -# = render 'todo_list', + -# conference_progress: @conference_progress, conference: @conference .row#tickets .col-md-8 = render 'line_chart', @@ -43,14 +43,14 @@ %a{ href: '#distribution_all', 'data-toggle' => 'tab' } %span.fa.fa-star All - %li - %a{ href: '#distribution_confirmed', 'data-toggle' => 'tab' } - %span.fa.fa-comment - Confirmed - %li - %a{ href: '#distribution_withdrawn', 'data-toggle' => 'tab' } - %span.fa.fa-archive - Withdrawn + -# %li + -# %a{ href: '#distribution_confirmed', 'data-toggle' => 'tab' } + -# %span.fa.fa-comment + -# Confirmed + -# %li + -# %a{ href: '#distribution_withdrawn', 'data-toggle' => 'tab' } + -# %span.fa.fa-archive + -# Withdrawn .tab-content .tab-pane.active#distribution_all .row @@ -63,28 +63,28 @@ .col-md-4 = render 'donut_chart', title: 'Tracks', combined_data: @tracks_distribution - .tab-pane#distribution_confirmed - .row - .col-md-4 - = render 'donut_chart', title: 'Event types', - combined_data: @event_type_distribution_confirmed - .col-md-4 - = render 'donut_chart', title: 'Difficulty levels', - combined_data: @difficulty_levels_distribution_confirmed - .col-md-4 - = render 'donut_chart', title: 'Tracks', - combined_data: @tracks_distribution_confirmed - .tab-pane#distribution_withdrawn - .row - .col-md-4 - = render 'donut_chart', title: 'Event types', - combined_data: @event_type_distribution_withdrawn - .col-md-4 - = render 'donut_chart', title: 'Difficulty levels', - combined_data: @difficulty_levels_distribution_withdrawn - .col-md-4 - = render 'donut_chart', title: 'Tracks', - combined_data: @tracks_distribution_withdrawn + -# .tab-pane#distribution_confirmed + -# .row + -# .col-md-4 + -# = render 'donut_chart', title: 'Event types', + -# combined_data: @event_type_distribution_confirmed + -# .col-md-4 + -# = render 'donut_chart', title: 'Difficulty levels', + -# combined_data: @difficulty_levels_distribution_confirmed + -# .col-md-4 + -# = render 'donut_chart', title: 'Tracks', + -# combined_data: @tracks_distribution_confirmed + -# .tab-pane#distribution_withdrawn + -# .row + -# .col-md-4 + -# = render 'donut_chart', title: 'Event types', + -# combined_data: @event_type_distribution_withdrawn + -# .col-md-4 + -# = render 'donut_chart', title: 'Difficulty levels', + -# combined_data: @difficulty_levels_distribution_withdrawn + -# .col-md-4 + -# = render 'donut_chart', title: 'Tracks', + -# combined_data: @tracks_distribution_withdrawn .row .col-md-8 diff --git a/app/views/schedules/happening_now.haml b/app/views/schedules/happening_now.haml index bb1244f4..0c64470d 100644 --- a/app/views/schedules/happening_now.haml +++ b/app/views/schedules/happening_now.haml @@ -9,10 +9,10 @@ .col-md-12 %h2 #{pluralize(@events_schedules.count, 'Event')} Occurring Within The Next 30 minutes. - %h3 - This page was loaded at - = inyourtz(Time.now) do - #{Time.now.strftime('%a %b %d at %I:%M %P (%z)')} + %small + This page was loaded at + = inyourtz(Time.now) do + #{Time.now.strftime('%a %b %d at %I:%M %P (%z)')} .row / TODO: Clean this up, merge with all events page. @@ -27,7 +27,6 @@ = date = event_schedule.start_time.strftime('%Y-%m-%d') %a{ title: 'Go up', class: 'pull-right', href: '#program' } %i.fa.fa-angle-double-up.fa-lg{ 'aria-hidden': true } - -# rubocop:disable Style/UnlessElse - if !event_schedule.start_time.strftime('%H:%M').eql?(time) .col-xs-12.col-md-1 .start-time @@ -40,7 +39,6 @@ -# TODO: Add comment describing this condition. .col-xs-12.col-md-11.col-md-offset-1 = render 'event', event: event_schedule.event, event_schedule: event_schedule - -# rubocop:enable Style/UnlessElse :javascript // Refresh the page every 5 minutes. From b4a174944e23b92a5315959bd4a6e4d8438319b3 Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Sun, 21 Mar 2021 13:02:38 -0700 Subject: [PATCH 12/36] Codecov removed from gemfile --- Gemfile.lock | 2 -- 1 file changed, 2 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index d5815b3f..c59eb26c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -127,8 +127,6 @@ GEM aws_cf_signer rest-client cocoon (1.2.15) - codecov (0.5.0) - simplecov (>= 0.15, < 0.22) coderay (1.1.1) concurrent-ruby (1.1.8) countable-rails (0.0.1) From 225da34f76fdc29f74535066cd171d2306f46f30 Mon Sep 17 00:00:00 2001 From: "depfu[bot]" <23717796+depfu[bot]@users.noreply.github.com> Date: Sun, 21 Mar 2021 20:06:24 +0000 Subject: [PATCH 13/36] Update icalendar to version 2.7.1 --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index c59eb26c..d5056eb7 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -252,7 +252,7 @@ GEM i18n (1.8.9) concurrent-ruby (~> 1.0) i18n_data (0.8.0) - icalendar (2.7.0) + icalendar (2.7.1) ice_cube (~> 0.16) ice_cube (0.16.3) image_processing (1.12.1) From 75b60c2578e2de69483418f25703a763bb0b7396 Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Mon, 22 Mar 2021 02:59:35 -0700 Subject: [PATCH 14/36] Use 'Description' on the submissions page. Fill template from submission_instructions --- app/assets/javascripts/osem.js | 4 +++- app/views/proposals/new.html.haml | 13 +++++++------ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/app/assets/javascripts/osem.js b/app/assets/javascripts/osem.js index 636ed959..59c5249b 100644 --- a/app/assets/javascripts/osem.js +++ b/app/assets/javascripts/osem.js @@ -49,6 +49,8 @@ $(function () { $('.' + id).collapse('hide'); $('#' + $(this).val() + '-help.' + id).collapse('show'); + $('#' + $(this).val() + '-instructions.' + id).collapse('show'); + }); $('.dropdown-toggle').dropdown(); @@ -165,7 +167,7 @@ $( document ).ready(function() { var min = $selected.data("min-words"); // Set the filler text for the submission text - fill_if_empty('event_submission_text', $selected.data("help")); + fill_if_empty('event_submission_text', $selected.data("instructions")); $("#abstract-maximum-word-count").text(max); $("#submission-maximum-word-count").text(max); diff --git a/app/views/proposals/new.html.haml b/app/views/proposals/new.html.haml index 9c9a7004..15fba9ac 100644 --- a/app/views/proposals/new.html.haml +++ b/app/views/proposals/new.html.haml @@ -31,19 +31,20 @@ = f.inputs name: 'Proposal Information' do = f.input :title, as: :string, required: true, input_html: { required: true } - = f.input :event_type_id, as: :select, - collection: @program.event_types.map {|type| ["#{type.title} - #{show_time(type.length)}", type.id, - data: { min_words: type.minimum_abstract_length, max_words: type.maximum_abstract_length, help: type.description }]}, - include_blank: false, label: 'Type', input_html: { class: 'select-help-toggle' } - if @program.languages.present? = f.input :language, as: :select, collection: @languages, include_blank: false, label: 'Language', input_html: { class: 'select-help-toggle' } + = f.input :event_type_id, as: :select, + collection: @program.event_types.map {|type| ["#{type.title} - #{show_time(type.length)}", type.id, + data: { min_words: type.minimum_abstract_length, max_words: type.maximum_abstract_length, instructions: type.submission_instructions }]}, + include_blank: false, label: 'Type', input_html: { class: 'select-help-toggle' } + - @program.event_types.each do |event_type| %div{ class: 'help-block event_event_type_id collapse', id: "#{event_type.id}-help"} - %strong Directions + %strong Description %div = markdown(event_type.description) @@ -63,7 +64,7 @@ %br - @conference.program.event_types.each do |event_type| - %span{ class: 'help-block select-help-text event_event_type_id collapse', id: "#{event_type.id}-help" } + %span{ class: 'help-block select-help-text event_event_type_id collapse', id: "#{event_type.id}-instructions" } %h3 = event_type.name Instructions From 048207cd384eafd5e484365294137ed40150b065 Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Mon, 22 Mar 2021 03:18:47 -0700 Subject: [PATCH 15/36] Some re-delinting --- app/views/admin/conferences/show.html.haml | 63 +++++++++++----------- app/views/schedules/happening_now.haml | 6 ++- 2 files changed, 36 insertions(+), 33 deletions(-) diff --git a/app/views/admin/conferences/show.html.haml b/app/views/admin/conferences/show.html.haml index b1b07f2c..2f2ed1d8 100644 --- a/app/views/admin/conferences/show.html.haml +++ b/app/views/admin/conferences/show.html.haml @@ -29,8 +29,8 @@ = render 'line_chart', title: 'Submissions per week', data: @submissions -# .col-md-4 - -# = render 'todo_list', - -# conference_progress: @conference_progress, conference: @conference + = render 'todo_list', + conference_progress: @conference_progress, conference: @conference .row#tickets .col-md-8 = render 'line_chart', @@ -43,14 +43,15 @@ %a{ href: '#distribution_all', 'data-toggle' => 'tab' } %span.fa.fa-star All - -# %li - -# %a{ href: '#distribution_confirmed', 'data-toggle' => 'tab' } - -# %span.fa.fa-comment - -# Confirmed - -# %li - -# %a{ href: '#distribution_withdrawn', 'data-toggle' => 'tab' } - -# %span.fa.fa-archive - -# Withdrawn + -# TODO-SNAP: Disabled for Snap!Con + %li + %a{ href: '#distribution_confirmed', 'data-toggle' => 'tab' } + %span.fa.fa-comment + Confirmed + %li + %a{ href: '#distribution_withdrawn', 'data-toggle' => 'tab' } + %span.fa.fa-archive + Withdrawn .tab-content .tab-pane.active#distribution_all .row @@ -91,27 +92,27 @@ = render 'donut_chart', title: 'Tracks', combined_data: @tracks_distribution -# .tab-pane#distribution_confirmed - -# .row - -# .col-md-4 - -# = render 'donut_chart', title: 'Event types', - -# combined_data: @event_type_distribution_confirmed - -# .col-md-4 - -# = render 'donut_chart', title: 'Difficulty levels', - -# combined_data: @difficulty_levels_distribution_confirmed - -# .col-md-4 - -# = render 'donut_chart', title: 'Tracks', - -# combined_data: @tracks_distribution_confirmed - -# .tab-pane#distribution_withdrawn - -# .row - -# .col-md-4 - -# = render 'donut_chart', title: 'Event types', - -# combined_data: @event_type_distribution_withdrawn - -# .col-md-4 - -# = render 'donut_chart', title: 'Difficulty levels', - -# combined_data: @difficulty_levels_distribution_withdrawn - -# .col-md-4 - -# = render 'donut_chart', title: 'Tracks', - -# combined_data: @tracks_distribution_withdrawn + .row + .col-md-4 + = render 'donut_chart', title: 'Event types', + combined_data: @event_type_distribution_confirmed + .col-md-4 + = render 'donut_chart', title: 'Difficulty levels', + combined_data: @difficulty_levels_distribution_confirmed + .col-md-4 + = render 'donut_chart', title: 'Tracks', + combined_data: @tracks_distribution_confirmed + .tab-pane#distribution_withdrawn + .row + .col-md-4 + = render 'donut_chart', title: 'Event types', + combined_data: @event_type_distribution_withdrawn + .col-md-4 + = render 'donut_chart', title: 'Difficulty levels', + combined_data: @difficulty_levels_distribution_withdrawn + .col-md-4 + = render 'donut_chart', title: 'Tracks', + combined_data: @tracks_distribution_withdrawn .row .col-md-8 diff --git a/app/views/schedules/happening_now.haml b/app/views/schedules/happening_now.haml index 6649529a..6c3d8f5b 100644 --- a/app/views/schedules/happening_now.haml +++ b/app/views/schedules/happening_now.haml @@ -9,10 +9,12 @@ .col-md-12 %h2 #{pluralize(@events_schedules.count, 'Event')} Occurring Within The Next 30 minutes. + %br %small This page was loaded at = inyourtz(Time.now) do - #{Time.now.strftime('%a %b %d at %I:%M %P (%z)')} + = Time.now.strftime('%a %b %d at %I:%M %P (%z)') + \. .row / TODO: Clean this up, merge with all events page. @@ -26,7 +28,7 @@ = inyourtz(event_schedule.start_time, @conference.timezone) do = date = event_schedule.start_time.strftime('%Y-%m-%d') %a.pull-right{ title: 'Go up', href: '#program' } - %i.fa.fa-angle-double-up.fa-lg{ 'aria-hidden': true } + %i.fa.fa-angle-double-up.fa-lg{ 'aria-hidden' => true } - if event_schedule.start_time.strftime('%H:%M').eql?(time) .col-xs-12.col-md-11.col-md-offset-1 = render 'event', event: event_schedule.event, event_schedule: event_schedule From 2899da98237f0acc03f4821ba16add6e51cdd0ff Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Mon, 22 Mar 2021 03:21:11 -0700 Subject: [PATCH 16/36] Update spec with submission instructions. --- spec/features/proposals_spec.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/spec/features/proposals_spec.rb b/spec/features/proposals_spec.rb index 18297d2d..ca31f7bb 100644 --- a/spec/features/proposals_spec.rb +++ b/spec/features/proposals_spec.rb @@ -195,6 +195,7 @@ feature Event do scenario 'can reset to text template', feature: true, js: true do event_type = conference.program.event_types[-1] event_type.description = 'Example event description' + event_type.submisson_instructions = '## Fill Me In!' event_type.save! sign_in participant @@ -208,7 +209,7 @@ feature Event do click_button 'Reset to Template' end - expect(page.find('#event_submission_text').value).to eq(event_type.description) + expect(page.find('#event_submission_text').value).to eq(event_type.submisson_instructions) end end end From e542bda8ef01c11177ad76daf21036118fd6e92c Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Tue, 23 Mar 2021 02:21:31 -0700 Subject: [PATCH 17/36] tweak emails --- app/mailers/mailbot.rb | 5 +++-- app/views/mailbot/ticket_confirmation_template.html.erb | 8 ++++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/app/mailers/mailbot.rb b/app/mailers/mailbot.rb index 07249862..2f9d1f77 100644 --- a/app/mailers/mailbot.rb +++ b/app/mailers/mailbot.rb @@ -7,8 +7,9 @@ YTLF_TICKET_ID = 50 class Mailbot < ActionMailer::Base helper ConferenceHelper - default bcc: -> { SNAPCON_BCC_ADDRESS }, - template_name: -> { EMAIL_TEMPLATE }, + default bcc: SNAPCON_BCC_ADDRESS, + template_name: EMAIL_TEMPLATE, + content_type: 'text/html', to: -> { @user.email }, from: -> { @conference.contact.email } diff --git a/app/views/mailbot/ticket_confirmation_template.html.erb b/app/views/mailbot/ticket_confirmation_template.html.erb index f92284d7..97a97c60 100644 --- a/app/views/mailbot/ticket_confirmation_template.html.erb +++ b/app/views/mailbot/ticket_confirmation_template.html.erb @@ -4,11 +4,11 @@ Dear <%= @user.name %>, Thanks! You have successfully booked <%= @ticket_purchase.quantity %> <%= @ticket_purchase.ticket.title %> ticket(s) for the event <%= @conference.title %>. Your transaction id is <%= @ticket_purchase.id %>. - + Please, find the ticket(s) pdf attached. - + Best wishes, - <%= @conference.title %> Team + <%= @conference.title %> Team -<%= render partial: "layouts/mailbot_footer" %> \ No newline at end of file +<%= render partial: "layouts/mailbot_footer" %> From 1658046a190f16d78e0f7f6a810e84254bde3b5e Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Tue, 23 Mar 2021 02:47:18 -0700 Subject: [PATCH 18/36] Do not show diffculty level in the progress checker --- app/models/event.rb | 2 +- app/views/proposals/_tooltip.html.haml | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/app/models/event.rb b/app/models/event.rb index ba04ba20..ff798651 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -273,7 +273,7 @@ class Event < ApplicationRecord biographies: speakers.all? { |speaker| !speaker.biography.blank? }, subtitle: !subtitle.blank?, track: (!track.blank? unless program.tracks.empty?), - difficulty_level: !difficulty_level.blank?, + difficulty_level: (difficulty_level.present? unless program.difficulty_levels.empty?), title: true, abstract: true }.with_indifferent_access diff --git a/app/views/proposals/_tooltip.html.haml b/app/views/proposals/_tooltip.html.haml index 2220451d..4dc2c2aa 100644 --- a/app/views/proposals/_tooltip.html.haml +++ b/app/views/proposals/_tooltip.html.haml @@ -25,6 +25,7 @@ %li{'class'=>class_for_todo(progress_status['track'])} %span{'class'=>icon_for_todo(progress_status['track'])} = link_to 'Add a track', edit_conference_program_proposal_path(event.program.conference.short_title, event) - %li{'class'=>class_for_todo(progress_status['difficulty_level'])} - %span{'class'=>icon_for_todo(progress_status['difficulty_level'])} - = link_to 'Add a difficulty level', edit_conference_program_proposal_path(event.program.conference.short_title, event) + - unless progress_status[:difficulty_level].nil? + %li{'class'=>class_for_todo(progress_status['difficulty_level'])} + %span{'class'=>icon_for_todo(progress_status['difficulty_level'])} + = link_to 'Add a difficulty level', edit_conference_program_proposal_path(event.program.conference.short_title, event) From 586c6dff29875363fc50b6bcc4a8d3f681e39659 Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Tue, 23 Mar 2021 02:50:39 -0700 Subject: [PATCH 19/36] Cleanup todo.haml --- app/views/proposals/_tooltip.html.haml | 30 +++++++++++++------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/app/views/proposals/_tooltip.html.haml b/app/views/proposals/_tooltip.html.haml index 4dc2c2aa..23fb1c0d 100644 --- a/app/views/proposals/_tooltip.html.haml +++ b/app/views/proposals/_tooltip.html.haml @@ -1,31 +1,31 @@ - progress_status = event.progress_status %ul.list-unstyled - if can? :create, @conference.registrations.new - %li{'class'=>class_for_todo(progress_status['registered'])} - %span{'class'=>icon_for_todo(progress_status['registered'])} - - if progress_status['registered'] + %li{class: class_for_todo(progress_status[:registered])} + %span{class: icon_for_todo(progress_status[:registered])} + - if progress_status[:registered] Speaker(s) registered to the conference - else = link_to 'Speaker(s) not registered to the conference', new_conference_conference_registration_path(event.program.conference.short_title) - %li{'class'=>class_for_todo(progress_status['biographies'])} - %span{'class'=>icon_for_todo(progress_status['biographies'])} - - if progress_status['biographies'] + %li{class: class_for_todo(progress_status[:biographies])} + %span{class: icon_for_todo(progress_status[:biographies])} + - if progress_status[:biographies] Speakers have filled out their biographies - elsif current_user.biography.blank? && event.speakers.include?(current_user) = link_to 'Fill out your biography', edit_user_path(current_user) - else Speakers' biographies missing - %li{'class'=>class_for_todo(progress_status['subtitle'])} - %span{'class'=>icon_for_todo(progress_status['subtitle'])} + %li{class: class_for_todo(progress_status[:subtitle])} + %span{class: icon_for_todo(progress_status[:subtitle])} = link_to 'Add a subtitle', edit_conference_program_proposal_path(event.program.conference.short_title, event) - %li{'class'=>class_for_todo(progress_status['commercials'])} - %span{'class'=>icon_for_todo(progress_status['commercials'])} + %li{class: class_for_todo(progress_status[:commercials])} + %span{class: icon_for_todo(progress_status[:commercials])} = link_to 'Add materials', edit_conference_program_proposal_path(event.program.conference.short_title, event, anchor: 'commercials-content') - - unless progress_status['track'].nil? - %li{'class'=>class_for_todo(progress_status['track'])} - %span{'class'=>icon_for_todo(progress_status['track'])} + - unless progress_status[:track].nil? + %li{class: class_for_todo(progress_status[:track])} + %span{class: icon_for_todo(progress_status[:track])} = link_to 'Add a track', edit_conference_program_proposal_path(event.program.conference.short_title, event) - unless progress_status[:difficulty_level].nil? - %li{'class'=>class_for_todo(progress_status['difficulty_level'])} - %span{'class'=>icon_for_todo(progress_status['difficulty_level'])} + %li{class: class_for_todo(progress_status[:difficulty_level])} + %span{class: icon_for_todo(progress_status[:difficulty_level])} = link_to 'Add a difficulty level', edit_conference_program_proposal_path(event.program.conference.short_title, event) From 76df9c9782cad35f127d291a1532e85ea1ee7c02 Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Tue, 23 Mar 2021 12:33:41 -0700 Subject: [PATCH 20/36] Fix typo in spec --- spec/features/proposals_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/features/proposals_spec.rb b/spec/features/proposals_spec.rb index ca31f7bb..46af8793 100644 --- a/spec/features/proposals_spec.rb +++ b/spec/features/proposals_spec.rb @@ -195,7 +195,7 @@ feature Event do scenario 'can reset to text template', feature: true, js: true do event_type = conference.program.event_types[-1] event_type.description = 'Example event description' - event_type.submisson_instructions = '## Fill Me In!' + event_type.submission_instructions = '## Fill Me In!' event_type.save! sign_in participant From 6e3e1199ef883f104d8cdb2447a964b21219d009 Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Tue, 23 Mar 2021 12:54:07 -0700 Subject: [PATCH 21/36] Restore and cleanup the admin conf todo list --- .../admin/conferences_controller.rb | 3 +- .../admin/conferences/_todo_list.html.haml | 41 ++++++++++--------- app/views/admin/conferences/show.html.haml | 7 ++-- 3 files changed, 26 insertions(+), 25 deletions(-) diff --git a/app/controllers/admin/conferences_controller.rb b/app/controllers/admin/conferences_controller.rb index dc73df87..1ae78998 100644 --- a/app/controllers/admin/conferences_controller.rb +++ b/app/controllers/admin/conferences_controller.rb @@ -124,8 +124,7 @@ module Admin # current_user.last_sign_in_at # ).count - # Step by step list - # @conference_progress = @conference.get_status + @conference_todo_list = @conference.get_status # Line charts @registrations = @conference.get_registrations_per_week diff --git a/app/views/admin/conferences/_todo_list.html.haml b/app/views/admin/conferences/_todo_list.html.haml index 88bb7c36..74ddc796 100644 --- a/app/views/admin/conferences/_todo_list.html.haml +++ b/app/views/admin/conferences/_todo_list.html.haml @@ -1,13 +1,14 @@ -.list-group - %li{ 'class' => "list-group-item #{hidden_if_conference_over(conference)}" } +%ul.list-group + .list-group-item %h4 Conference progress .progress - .progress-bar{ 'role' => 'progressbar', 'aria-valuenow' => "#{conference_progress['process']}", 'aria-valuemin' => '0', - 'aria-valuemax' => '100', 'style' => "width: #{conference_progress['process']}%;" } + .progress-bar{ role: 'progressbar', 'aria-valuenow': conference_progress['process'], + 'aria-valuemin': 0, 'aria-valuemax': 100, + style: "width: #{conference_progress['process']}%;" } = conference_progress['process'] + '%' - %li{ 'class' => "list-group-item #{hidden_if_conference_over(conference)} #{class_for_todo(conference_progress['registration'])}" } - %span{ 'class' => icon_for_todo(conference_progress['registration']) } + %li.list-group-item{ class: class_for_todo(conference_progress['registration']) } + %span{ class: icon_for_todo(conference_progress['registration']) } - if can? :update, @conference - if conference.registration_period = link_to 'Set up registration period', edit_admin_conference_registration_period_path(conference_progress['short_title']) @@ -15,14 +16,14 @@ = link_to 'Set up registration period', new_admin_conference_registration_period_path(conference_progress['short_title']) - else Set up registration period - %li{ 'class' => "list-group-item #{hidden_if_conference_over(conference)} #{class_for_todo(conference_progress['cfp'])}" } - %span{ 'class' => icon_for_todo(conference_progress['cfp']) } + %li.list-group-item{ class: class_for_todo(conference_progress['cfp']) } + %span{ class: icon_for_todo(conference_progress['cfp']) } - if can? :update, Cfp.new(program_id: @program.id) = link_to 'Set up call for papers', admin_conference_program_cfps_path(conference_progress['short_title']) - else Set up call for papers - %li{'class'=>"list-group-item #{hidden_if_conference_over(conference)} #{class_for_todo(conference_progress['venue'])}"} - %span{'class'=>icon_for_todo(conference_progress['venue'])} + %li.list-group-item{ class: class_for_todo(conference_progress['venue']) } + %span{ class: icon_for_todo(conference_progress['venue'])} - if can? :update, Venue.new(conference: @conference) - @conference.reload - if conference.venue @@ -32,32 +33,32 @@ - else - @conference.reload Add venue - %li{ 'class' => "list-group-item #{hidden_if_conference_over(conference)} #{class_for_todo(conference_progress['rooms'])}" } - %span{ 'class' => icon_for_todo(conference_progress['rooms']) } + %li.list-group-item{ class: class_for_todo(conference_progress['rooms']) } + %span{ class: icon_for_todo(conference_progress['rooms']) } - if @conference.venue && (can? :update, @conference.venue.rooms.build) = link_to 'Add rooms', admin_conference_venue_rooms_path(conference_progress['short_title']) - else Add rooms - %li{ 'class' => "list-group-item #{hidden_if_conference_over(conference)} #{class_for_todo(conference_progress['tracks'])}" } - %span{ 'class' => icon_for_todo(conference_progress['tracks']) } + %li.list-group-item{ class: class_for_todo(conference_progress['tracks']) } + %span{ class: icon_for_todo(conference_progress['tracks']) } - if can? :update, @conference.program.tracks.build = link_to 'Add tracks', admin_conference_program_tracks_path(conference_progress['short_title']) - else Add tracks - %li{ 'class' => "list-group-item #{hidden_if_conference_over(conference)} #{class_for_todo(conference_progress['event_types'])}" } - %span{ 'class' => icon_for_todo(conference_progress['event_types']) } + %li{ class: "list-group-item #{class_for_todo(conference_progress['event_types'])}" } + %span{ class: icon_for_todo(conference_progress['event_types']) } - if can? :update, @conference.program.event_types.build = link_to 'Add event types', admin_conference_program_event_types_path(conference_progress['short_title']) - else Add event types - %li{ 'class' => "list-group-item #{hidden_if_conference_over(conference)} #{class_for_todo(conference_progress['difficulty_levels'])}" } - %span{ 'class' => icon_for_todo(conference_progress['difficulty_levels']) } + %li{ class: "list-group-item #{class_for_todo(conference_progress['difficulty_levels'])}" } + %span{ class: icon_for_todo(conference_progress['difficulty_levels']) } - if can? :update, @conference.program.difficulty_levels.build = link_to 'Add difficulty levels', admin_conference_program_difficulty_levels_path(conference_progress['short_title']) - else Add difficulty levels - %li{ class: "list-group-item #{hidden_if_conference_over(conference)} #{class_for_todo(conference_progress['splashpage'])}" } - %span{ 'class' => icon_for_todo(conference_progress['splashpage']) } + %li.list-group-item{ class: "#{class_for_todo(conference_progress['splashpage'])}" } + %span{ class: icon_for_todo(conference_progress['splashpage']) } - if can? :update, @conference = link_to 'Set up a Splashpage', admin_conference_splashpage_path(conference_progress['short_title']) - else diff --git a/app/views/admin/conferences/show.html.haml b/app/views/admin/conferences/show.html.haml index 2f2ed1d8..0ad98b54 100644 --- a/app/views/admin/conferences/show.html.haml +++ b/app/views/admin/conferences/show.html.haml @@ -28,9 +28,10 @@ .col-md-12 = render 'line_chart', title: 'Submissions per week', data: @submissions - -# .col-md-4 - = render 'todo_list', - conference_progress: @conference_progress, conference: @conference + .col-md-4 + - unless @conference.ended? + = render 'todo_list', + conference_progress: @conference_todo_list, conference: @conference .row#tickets .col-md-8 = render 'line_chart', From f5e099501c1165310964839a4fa4cf274d82cc97 Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Tue, 23 Mar 2021 13:00:22 -0700 Subject: [PATCH 22/36] Minor updates to the conf edit page --- app/views/admin/conferences/edit.html.haml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/views/admin/conferences/edit.html.haml b/app/views/admin/conferences/edit.html.haml index de0c5811..66227a18 100644 --- a/app/views/admin/conferences/edit.html.haml +++ b/app/views/admin/conferences/edit.html.haml @@ -9,7 +9,7 @@ = semantic_form_for(@conference, url: admin_conference_path(@conference.short_title), html: {multipart: true}) do |f| = f.input :title, hint: "The full title of the conference, e.g. 'openSUSE Conference 2014'" = f.input :short_title, hint: "A short title, e.g. 'oSC14', to be used in URLs" - = f.input :description, hint: markdown_hint('A description of the conference.'), input_html: { rows: 5, data: { provide: 'markdown' } } + = f.input :description, hint: markdown_hint('A description of the conference. This supports unsafe HTML and JavaScript.'), input_html: { rows: 5, data: { provide: 'markdown' } } = f.input :color, hint: 'The color will be used eg for the dashboard.', input_html: {size: 6, type: 'color'} = f.label 'Conference Logo' %br @@ -19,8 +19,8 @@ = f.hidden_field :picture_cache = f.input :custom_css, - hint: "Add Custon CSS to the main page. You might find the class '.conference-#{@conference.short_title}' useful.", - input_html: { rows: 5 } + hint: "Add custon CSS to all pages within the conference. The class .conference-#{@conference.short_title} is included on the body element.".html_safe, + input_html: { rows: 10, style: 'font-family: monospace' } = f.input :ticket_layout, as: :select, collection: Conference.ticket_layouts.keys, hint: "Layout type for tickets of the conference." = f.inputs name: 'Scheduling' do From 20a80c2c3199518499496d1be3a124133cf3ef6b Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Tue, 23 Mar 2021 16:26:09 -0700 Subject: [PATCH 23/36] tidy up the conference edit page --- app/views/admin/conferences/edit.html.haml | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/app/views/admin/conferences/edit.html.haml b/app/views/admin/conferences/edit.html.haml index 66227a18..b675481b 100644 --- a/app/views/admin/conferences/edit.html.haml +++ b/app/views/admin/conferences/edit.html.haml @@ -9,24 +9,27 @@ = semantic_form_for(@conference, url: admin_conference_path(@conference.short_title), html: {multipart: true}) do |f| = f.input :title, hint: "The full title of the conference, e.g. 'openSUSE Conference 2014'" = f.input :short_title, hint: "A short title, e.g. 'oSC14', to be used in URLs" - = f.input :description, hint: markdown_hint('A description of the conference. This supports unsafe HTML and JavaScript.'), input_html: { rows: 5, data: { provide: 'markdown' } } - = f.input :color, hint: 'The color will be used eg for the dashboard.', input_html: {size: 6, type: 'color'} - = f.label 'Conference Logo' + = f.input :description, + hint: markdown_hint('A description of the conference. (Supports unsafe HTML.)'), + input_html: { rows: 5, data: { provide: 'markdown' } } + = f.input :color, hint: 'The will be used in emails.', + input_html: {size: 6, type: 'color'} + = f.label 'Conference Logo', for: 'conference_picture' %br - if @conference.picture? = image_tag @conference.picture.thumb.url - = f.input :picture, label: false, hint: 'This will be displayed on the front page.' + = f.input :picture, label: false, hint: 'This will be shown in the navigation bar and emails.' = f.hidden_field :picture_cache = f.input :custom_css, - hint: "Add custon CSS to all pages within the conference. The class .conference-#{@conference.short_title} is included on the body element.".html_safe, - input_html: { rows: 10, style: 'font-family: monospace' } + hint: "Add custon CSS to all pages within the conference. The class .conference-#{@conference.short_title} is included on the body element.".html_safe, + input_html: { rows: 10, style: 'font-family: monospace' } = f.input :ticket_layout, as: :select, collection: Conference.ticket_layouts.keys, hint: "Layout type for tickets of the conference." = f.inputs name: 'Scheduling' do = f.input :timezone, as: :time_zone, hint: 'The conference time zone' - = f.input :start_date, as: :string, input_html: { id: 'conference-start-datepicker', readonly: 'readonly' } - = f.input :end_date, as: :string, input_html: { id: 'conference-end-datepicker', readonly: 'readonly' } + = f.input :start_date, as: :string, input_html: { id: 'conference-start-datepicker' } + = f.input :end_date, as: :string, input_html: { id: 'conference-end-datepicker' } = f.input :start_hour, input_html: {size: 2, type: 'number', min: 0, max: 23}, hint: rescheduling_hint(@affected_event_count) = f.input :end_hour, input_html: {size: 2, type: 'number', min: 1, max: 24}, hint: rescheduling_hint(@affected_event_count) = f.inputs name: 'Registrations' do From 1806a04b6962e034352b5416606b359941e48a1f Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Tue, 23 Mar 2021 16:30:13 -0700 Subject: [PATCH 24/36] Conf Admin: Allow for stats to reflow on small screens --- app/views/admin/conferences/show.html.haml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/views/admin/conferences/show.html.haml b/app/views/admin/conferences/show.html.haml index 0ad98b54..8e2ac428 100644 --- a/app/views/admin/conferences/show.html.haml +++ b/app/views/admin/conferences/show.html.haml @@ -3,16 +3,16 @@ Dashboard for #{@conference.title} %hr .row - .col-sm-3.col-xs-3 + .col-sm-3 = render "big_statistic", icon: "user", subtitle: "Registration", value: @total_reg, delta: @new_reg - .col-sm-3.col-xs-3 + .col-sm-3 = render "big_statistic", icon: "check-square", subtitle: "Submission", value: @total_submissions, delta: @new_submissions - .col-sm-3.col-xs-3 + .col-sm-3 = render "big_statistic", icon: "file-text", subtitle: "Hour", value: @program_length, delta: @new_program_length - .col-sm-3.col-xs-3 + .col-sm-3 = render "big_statistic", icon: "archive", subtitle: "Withdrawn", value: @total_withdrawn, delta: @new_withdrawn From df5a7674944c908358df52ead473baa9ea45e00f Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Tue, 23 Mar 2021 17:37:04 -0700 Subject: [PATCH 25/36] Improve the look of the conf dashboard --- app/assets/stylesheets/osem-dashboard.scss | 28 ++++++++++++++-------- app/views/admin/conferences/show.html.haml | 8 +++---- app/views/application/_big_statistic.haml | 19 +++++++-------- 3 files changed, 31 insertions(+), 24 deletions(-) diff --git a/app/assets/stylesheets/osem-dashboard.scss b/app/assets/stylesheets/osem-dashboard.scss index 3b5685ad..24c60a27 100644 --- a/app/assets/stylesheets/osem-dashboard.scss +++ b/app/assets/stylesheets/osem-dashboard.scss @@ -1,26 +1,34 @@ @import "breakpoints.scss"; .dashbox span.fa { - line-height: 1.1em; + margin-bottom: 2px; + + @include breakpoint(xs) { + font-size: 1.5em; + } @include breakpoint(sm) { - font-size: 3em; + font-size: 2em; } @include breakpoint(md) { - font-size: 4em; + font-size: 3.5em; } @include breakpoint(lg) { font-size: 5em; } } -.dashbox { - padding-top: 20px; - padding-bottom: 20px; -} +.dashbox.panel { + padding: 10px; + display: -webkit-flex; + display: flex; + align-items: center; + justify-content: center; + font-size: 1.4rem; + line-height: 1.6rem; -.dashbox label { - display: block; - font-size: 1.1em; + label { + line-height: 2rem; + } } .todolist-missing span { diff --git a/app/views/admin/conferences/show.html.haml b/app/views/admin/conferences/show.html.haml index 8e2ac428..aa8d8417 100644 --- a/app/views/admin/conferences/show.html.haml +++ b/app/views/admin/conferences/show.html.haml @@ -3,16 +3,16 @@ Dashboard for #{@conference.title} %hr .row - .col-sm-3 + .col-sm-3.col-xs-6 = render "big_statistic", icon: "user", subtitle: "Registration", value: @total_reg, delta: @new_reg - .col-sm-3 + .col-sm-3.col-xs-6 = render "big_statistic", icon: "check-square", subtitle: "Submission", value: @total_submissions, delta: @new_submissions - .col-sm-3 + .col-sm-3.col-xs-6 = render "big_statistic", icon: "file-text", subtitle: "Hour", value: @program_length, delta: @new_program_length - .col-sm-3 + .col-sm-3.col-xs-6 = render "big_statistic", icon: "archive", subtitle: "Withdrawn", value: @total_withdrawn, delta: @new_withdrawn diff --git a/app/views/application/_big_statistic.haml b/app/views/application/_big_statistic.haml index 7a77d29c..993903a7 100644 --- a/app/views/application/_big_statistic.haml +++ b/app/views/application/_big_statistic.haml @@ -1,13 +1,12 @@ - reverse ||= false - variant = variant_from_delta(delta, reverse: reverse) -.dashbox.text-center - %span.fa - = fa_icon(icon) - = value - %p.text-nowrap - %small +.dashbox.panel.panel-primary + .paenl-body.text-center + %span.fa + = fa_icon(icon) + = value + %p = subtitle.pluralize(value) - %span.label{ class: "label-#{variant}" } - = delta - since you last logged in - + .label{ class: "label-#{variant}" } + = delta || 0 + since last log in From c55eff4eec9787fc453e240704a1211bf5692d1d Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Tue, 23 Mar 2021 18:28:34 -0700 Subject: [PATCH 26/36] Improve the new proposal flow --- .../proposals/_encouragement_text.html.haml | 3 +- app/views/proposals/new.html.haml | 65 ++++++++++++------- 2 files changed, 45 insertions(+), 23 deletions(-) diff --git a/app/views/proposals/_encouragement_text.html.haml b/app/views/proposals/_encouragement_text.html.haml index 9b28088c..f7f6033f 100644 --- a/app/views/proposals/_encouragement_text.html.haml +++ b/app/views/proposals/_encouragement_text.html.haml @@ -17,6 +17,7 @@ %b.notranslate= pluralize(@program.cfp.remaining_days, 'day') left! %span.notranslate= @conference.title - will only be as good as the content you present. Submit early, submit often! + will only be as good as the content you present. + %br Submit early, submit often! - else The submission period is closed now. diff --git a/app/views/proposals/new.html.haml b/app/views/proposals/new.html.haml index 15fba9ac..fe258cd3 100644 --- a/app/views/proposals/new.html.haml +++ b/app/views/proposals/new.html.haml @@ -5,6 +5,7 @@ %h1 New #{@conference.title} Proposal - if @program.cfp_open? - if @program.cfp.description.present? + %h2 Call for Proposals .row .col-md-12 = markdown(@program.cfp.description, escape_html=false) @@ -43,41 +44,61 @@ include_blank: false, label: 'Type', input_html: { class: 'select-help-toggle' } - @program.event_types.each do |event_type| - %div{ class: 'help-block event_event_type_id collapse', id: "#{event_type.id}-help"} + .help-block.event_event_type_id.collapse{ id: "#{event_type.id}-help" } %strong Description %div = markdown(event_type.description) - = f.input :abstract, required: true, input_html: { rows: 5, data: { provide: 'markdown' } }, - hint: markdown_hint + %h3 Submission Abstract + %p + The abstract is reviewed by the committee and included in the conference program. + You are encouraged to include links or other references as appropriate. + = f.label :abstract, class: 'sr-only' + = f.input :abstract, required: true, label: false, + input_html: { rows: 5, data: { provide: 'markdown' } }, + hint: markdown_hint %p You have used %span#abstract-count #{@event.abstract_word_count} words. Abstracts must be between - %span#abstract-minimum-word-count - 0 + %span#abstract-minimum-word-count 0 and - %span#abstract-maximum-word-count - 250 + %span#abstract-maximum-word-count 250 words. - %br + %hr + %h3 + Submission Details + %p + This part of the submission is intended only for the conference committee. + - @conference.program.event_types.each do |event_type| - %span{ class: 'help-block select-help-text event_event_type_id collapse', id: "#{event_type.id}-instructions" } - %h3 - = event_type.name - Instructions - %p Please use this as the template for your submission. - This part of the submission is intended only for the conference committee. - %hr - = markdown(event_type.submission_instructions) + .help-block.select-help-text.event_event_type_id.collapse{ id: "#{event_type.id}-instructions" } + - if event_type.submission_instructions.blank? + Use this space to include any additional inforrmation that is helpful in reviewing your submission. If you have any co-presenters, please include them + below. After submission, you will have the opportunity to add them to the + speakers list. (However, they must have an active #{ENV['OSEM_NAME']} account.) + - else + %p + Please use the following as the template for your submission. This will help the conference committee review your submission with all the details they need. If you have any co-presenters, please include them below. After + submission, you will have the opportunity to add them to the speakers + list. (However, they must have an active #{ENV['OSEM_NAME']} account.) + .panel.panel-primary + .panel-heading + = event_type.name + Template + .panel-body + = markdown(event_type.submission_instructions) + .panel-footer + %button.btn.btn-warning.btn-xs{ type: 'button', id: 'sub_text_reset', data: { confirm: 'Do you really want to reset your submission text to the provided template?' } } Reset Submission to Template + %span.small + You may want to use this if you have changed the submission type. - - = f.input :submission_text, input_html: { rows: 5, data: { provide: 'markdown' } }, - hint: markdown_hint - - %button.btn.btn-primary.primary-button{ type: 'button', id: 'sub_text_reset', data: { confirm: 'Do you really want to reset your submission text to the provided template?' } } Reset to Template + = f.label :submission_text, class: 'sr-only' + = f.input :submission_text, label: false, + input_html: { rows: 10, data: { provide: 'markdown' } }, + hint: markdown_hint - if @program.cfp.enable_registrations? = f.input :require_registration, label: 'Require participants to register to your event' @@ -90,7 +111,7 @@ = f.input :description, input_html: { rows: 5 }, label: 'Requirements', placeholder: 'Eg. Whiteboard, printer, or something like that.' %p.text-right - = f.submit 'Submit Proposal', class: 'btn btn-success' + = f.submit 'Submit Proposal', class: 'btn btn-success btn-lg' .tab-pane{role: 'tabpanel', id: 'signin'} = render partial: 'devise/shared/sign_in_form_embedded' From ed20ff3b510feb9faa6f947f377ecb5b44128b03 Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Tue, 23 Mar 2021 22:43:11 -0700 Subject: [PATCH 27/36] Refactor the new/edit submission forms --- app/assets/javascripts/osem.js | 2 +- app/helpers/events_helper.rb | 13 ++++ app/views/proposals/_proposal_form.html.haml | 68 ++++--------------- .../_submission_type_content_form.haml | 66 ++++++++++++++++++ app/views/proposals/new.html.haml | 67 +++--------------- 5 files changed, 101 insertions(+), 115 deletions(-) create mode 100644 app/views/proposals/_submission_type_content_form.haml diff --git a/app/assets/javascripts/osem.js b/app/assets/javascripts/osem.js index 59c5249b..e6a99815 100644 --- a/app/assets/javascripts/osem.js +++ b/app/assets/javascripts/osem.js @@ -199,7 +199,7 @@ $( document ).ready(function() { let affirm = confirm($this.data('confirm')); if (affirm) { let sub_text = $('#event_submission_text'); - sub_text.val($selected.data('help')); + sub_text.val($selected.data('instructions')); sub_text.trigger('change'); } }); diff --git a/app/helpers/events_helper.rb b/app/helpers/events_helper.rb index eebaa4fe..9b7b9951 100644 --- a/app/helpers/events_helper.rb +++ b/app/helpers/events_helper.rb @@ -60,6 +60,19 @@ module EventsHelper "#{event.average_rating}/#{max_rating}, #{pluralize(event.voters.length, 'vote')}" end + def event_type_options(event_types) + event_types.map do |type| + [ + "#{type.title} - #{show_time(type.length)}", + type.id, + data: { + min_words: type.minimum_abstract_length, + max_words: type.maximum_abstract_length, + help: type.submission_instructions + } + ] + end + end def event_type_dropdown(event, event_types, conference_id) selection = event.event_type.try(:title) || 'Event Type' options = event_types.collect do |event_type| diff --git a/app/views/proposals/_proposal_form.html.haml b/app/views/proposals/_proposal_form.html.haml index 5f907d6a..dfbcdadd 100644 --- a/app/views/proposals/_proposal_form.html.haml +++ b/app/views/proposals/_proposal_form.html.haml @@ -11,85 +11,43 @@ = track_selector_input f - = f.input :event_type_id, as: :select, - collection: @conference.program.event_types.map {|type| ["#{type.title} - #{show_time(type.length)}", type.id, - data: { min_words: type.minimum_abstract_length, max_words: type.maximum_abstract_length, help: type.description }]}, - include_blank: false, label: 'Type', input_html: { class: 'select-help-toggle' } - - if @program.languages.present? = f.input :language, as: :select, collection: @languages, include_blank: false, label: 'Language', input_html: { class: 'select-help-toggle' } - - @conference.program.event_types.each do |event_type| - %span{ class: 'help-block select-help-text event_event_type_id collapse', id: "#{event_type.id}-help" } - = event_type.description + - if @program.difficulty_levels.present? + = f.input :difficulty_level, as: :select, collection: @program.difficulty_levels, + input_html: { class: 'select-help-toggle' }, + include_blank: '(Please select)' if @conference.program.difficulty_levels.any? - = f.input :difficulty_level, as: :select, collection: @conference.program.difficulty_levels, input_html: { class: 'select-help-toggle' }, - include_blank: '(Please select)' if @conference.program.difficulty_levels.any? + - @program.difficulty_levels.each do |difficulty_level| + %span{ class: 'help-block select-help-text collapse event_difficulty_level_id', id: "#{difficulty_level.id}-help" } + = difficulty_level.description - - @conference.program.difficulty_levels.each do |difficulty_level| - %span{ class: 'help-block select-help-text collapse event_difficulty_level_id', id: "#{difficulty_level.id}-help" } - = difficulty_level.description + = render 'submission_type_content_form', f: f, program: @program - = f.input :abstract, required: true, input_html: { rows: 5, data: { provide: 'markdown' } }, - hint: markdown_hint('[Tips to improve your presentations.](http://blog.hubspot.com/blog/tabid/6307/bid/5975/10-Rules-to-Instantly-Improve-Your-Presentations.aspx)') - - %p - You have used - %span#abstract-count #{@event.abstract_word_count} - words. Abstracts must be between - %span#abstract-minimum-word-count - 0 - and - %span#abstract-maximum-word-count - 250 - words. - - %br - - @conference.program.event_types.each do |event_type| - %span{ class: 'help-block select-help-text event_event_type_id collapse', id: "#{event_type.id}-help" } - %h3 - = event_type.name - Instructions - = markdown(event_type.submission_instructions) - - = f.input :submission_text, input_html: { rows: 5, data: { provide: 'markdown' }, placeholder: '' }, - hint: markdown_hint('Only conference organizers will read this.') - %button.btn.btn-primary.primary-button{ type: 'button', id: 'sub_text_reset', data: { confirm: 'Do you really want to reset your submission text to the provided template?' } } Reset to Template - - %p - You have used - %span#submission-count #{@event.submission_word_count} - words. Submission descriptions must be between - %span#submission-minimum-word-count - 0 - and - %span#submission-maximum-word-count - 250 - words. - - - if current_user.is_admin? or @program.cfp&.enable_registrations? + - if @program.cfp&.enable_registrations? = f.inputs 'Enable pre-registration' do = f.input :require_registration, label: 'Require participants to register to your event' - message = @event.room ? "Value must be between 1 and #{@event.room.size}" : 'Check room capacity after scheduling.' = f.input :max_attendees, hint: 'The maximum number of participants. ' + message - - if current_user.has_any_role? :admin, { name: :organizer, resource: @conference }, { name: :cfp, resource: @conference } - = f.input :is_highlight - %p.text-right = link_to '#description', 'data-toggle' => 'collapse' do Do you require something special? #description{ class: "collapse #{ 'in' if @event.description.present? }" } = f.input :description, input_html: { rows: 5 }, label: 'Requirements', placeholder: 'Eg. Whiteboard, printer, or something like that.' + - if current_user.has_any_role? :admin, { name: :organizer, resource: @conference }, { name: :cfp, resource: @conference } + %p (Admin Only) + = f.input :is_highlight %p.text-right - if @event.new_record? = f.submit 'Submit Proposal', class: 'btn btn-success' - else - = f.submit 'Update Proposal', class: 'btn btn-success' + = f.submit 'Update Proposal', class: 'btn btn-primary' :javascript $(document).ready(function() { diff --git a/app/views/proposals/_submission_type_content_form.haml b/app/views/proposals/_submission_type_content_form.haml new file mode 100644 index 00000000..fcdd4539 --- /dev/null +++ b/app/views/proposals/_submission_type_content_form.haml @@ -0,0 +1,66 @@ +-# PARTIAL FOR EVENT/PROPOSAL FORM +-# `f` a current from helper. + += f.input :event_type_id, as: :select, include_blank: false, label: 'Type', + input_html: { class: 'select-help-toggle' }, + collection: event_type_options(program.event_types) + + +- program.event_types.each do |event_type| + .help-block.event_event_type_id.collapse{ id: "#{event_type.id}-help" } + %strong Description + %div + = markdown(event_type.description) + +%h3 Submission Abstract +%p + The abstract is reviewed by the committee and included in the conference program. + You are encouraged to include links or other references as appropriate. + += f.label :abstract, class: 'sr-only' += f.input :abstract, required: true, label: false, + input_html: { rows: 5, data: { provide: 'markdown' } }, + hint: markdown_hint + +%p + You have used + %span#abstract-count #{@event.abstract_word_count} + words. Abstracts must be between + %span#abstract-minimum-word-count 0 + and + %span#abstract-maximum-word-count 250 + words. + +%hr +%h3 Submission Details +%p + This part of the submission is intended only for the conference committee. + +- program.event_types.each do |event_type| + .help-block.select-help-text.event_event_type_id.collapse{ id: "#{event_type.id}-instructions" } + - if event_type.submission_instructions.blank? + %p + Use this space to include any additional inforrmation that is helpful in reviewing your + submission. If you have any co-presenters, please include them + below. After submission, you will have the opportunity to add them to the + speakers list. (However, they must have an active #{ENV['OSEM_NAME']} account.) + - else + %p + Please use the following as the template for your submission. This will help the conference committee review your submission with all the details they need. If you have any co-presenters, please include them below. After + submission, you will have the opportunity to add them to the speakers + list. (However, they must have an active #{ENV['OSEM_NAME']} account.) + .panel.panel-primary + .panel-heading + = event_type.name + Template + .panel-body + = markdown(event_type.submission_instructions) + .panel-footer + %button.btn.btn-warning.btn-xs{ type: 'button', id: 'sub_text_reset', data: { confirm: 'Do you really want to reset your submission text to the provided template?' } } + Reset Submission to Template + %span.small You may want to use this if you have changed the submission type. + += f.label :submission_text, class: 'sr-only' += f.input :submission_text, label: false, + input_html: { rows: 10, data: { provide: 'markdown' } }, + hint: markdown_hint diff --git a/app/views/proposals/new.html.haml b/app/views/proposals/new.html.haml index fe258cd3..7c709235 100644 --- a/app/views/proposals/new.html.haml +++ b/app/views/proposals/new.html.haml @@ -38,67 +38,16 @@ collection: @languages, include_blank: false, label: 'Language', input_html: { class: 'select-help-toggle' } - = f.input :event_type_id, as: :select, - collection: @program.event_types.map {|type| ["#{type.title} - #{show_time(type.length)}", type.id, - data: { min_words: type.minimum_abstract_length, max_words: type.maximum_abstract_length, instructions: type.submission_instructions }]}, - include_blank: false, label: 'Type', input_html: { class: 'select-help-toggle' } + - if @program.difficulty_levels.present? + = f.input :difficulty_level, as: :select, collection: @program.difficulty_levels, + input_html: { class: 'select-help-toggle' }, + include_blank: '(Please select)' if @conference.program.difficulty_levels.any? - - @program.event_types.each do |event_type| - .help-block.event_event_type_id.collapse{ id: "#{event_type.id}-help" } - %strong Description - %div - = markdown(event_type.description) + - @program.difficulty_levels.each do |difficulty_level| + %span.help-block.select-help-text.collapse.event_difficulty_level_id{ id: "#{difficulty_level.id}-help" } + = difficulty_level.description - %h3 Submission Abstract - %p - The abstract is reviewed by the committee and included in the conference program. - You are encouraged to include links or other references as appropriate. - - = f.label :abstract, class: 'sr-only' - = f.input :abstract, required: true, label: false, - input_html: { rows: 5, data: { provide: 'markdown' } }, - hint: markdown_hint - %p - You have used - %span#abstract-count #{@event.abstract_word_count} - words. Abstracts must be between - %span#abstract-minimum-word-count 0 - and - %span#abstract-maximum-word-count 250 - words. - - %hr - %h3 - Submission Details - %p - This part of the submission is intended only for the conference committee. - - - @conference.program.event_types.each do |event_type| - .help-block.select-help-text.event_event_type_id.collapse{ id: "#{event_type.id}-instructions" } - - if event_type.submission_instructions.blank? - Use this space to include any additional inforrmation that is helpful in reviewing your submission. If you have any co-presenters, please include them - below. After submission, you will have the opportunity to add them to the - speakers list. (However, they must have an active #{ENV['OSEM_NAME']} account.) - - else - %p - Please use the following as the template for your submission. This will help the conference committee review your submission with all the details they need. If you have any co-presenters, please include them below. After - submission, you will have the opportunity to add them to the speakers - list. (However, they must have an active #{ENV['OSEM_NAME']} account.) - .panel.panel-primary - .panel-heading - = event_type.name - Template - .panel-body - = markdown(event_type.submission_instructions) - .panel-footer - %button.btn.btn-warning.btn-xs{ type: 'button', id: 'sub_text_reset', data: { confirm: 'Do you really want to reset your submission text to the provided template?' } } Reset Submission to Template - %span.small - You may want to use this if you have changed the submission type. - - = f.label :submission_text, class: 'sr-only' - = f.input :submission_text, label: false, - input_html: { rows: 10, data: { provide: 'markdown' } }, - hint: markdown_hint + = render 'submission_type_content_form', f: f, program: @program - if @program.cfp.enable_registrations? = f.input :require_registration, label: 'Require participants to register to your event' From df0aa087fb3cf33f31435f50af6d205a7491046b Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Tue, 23 Mar 2021 22:53:30 -0700 Subject: [PATCH 28/36] Fix remember me checkbox. --- app/views/devise/sessions/new.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/devise/sessions/new.html.haml b/app/views/devise/sessions/new.html.haml index 2c1bb613..dd40fb5c 100644 --- a/app/views/devise/sessions/new.html.haml +++ b/app/views/devise/sessions/new.html.haml @@ -11,7 +11,7 @@ = f.input :password - if devise_mapping.rememberable? %p.text-right.small - = f.label 'Remember me' + = f.label 'Remember me', for: 'user_remember_me' = f.check_box :remember_me %p.text-right = f.action :submit, as: :button, label: 'Sign In', button_html: {class: 'btn btn-success'} From e810fd442fe25aa524106d5fcdda260a45b43747 Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Tue, 23 Mar 2021 23:06:34 -0700 Subject: [PATCH 29/36] Cleanup the submission form, fix reset button --- app/assets/javascripts/osem.js | 5 ++--- app/helpers/events_helper.rb | 2 +- app/views/proposals/_proposal_form.html.haml | 2 +- app/views/proposals/_submission_type_content_form.haml | 2 +- spec/features/proposals_spec.rb | 2 +- 5 files changed, 6 insertions(+), 7 deletions(-) diff --git a/app/assets/javascripts/osem.js b/app/assets/javascripts/osem.js index e6a99815..c4c8356a 100644 --- a/app/assets/javascripts/osem.js +++ b/app/assets/javascripts/osem.js @@ -175,8 +175,7 @@ $( document ).ready(function() { $("#submission-minimum-word-count").text(min); word_count($('#event_abstract').get(0), 'abstract-count', max); word_count($('#event_submission_text').get(0), 'submission-count', max); - }) - .trigger('change'); + }).trigger('change'); /* Count the proposal abstract length */ $("#event_abstract").bind('change keyup paste input', function() { @@ -193,7 +192,7 @@ $( document ).ready(function() { }); /* Listen for reset template button, wait for confirm, and reset. */ - $('#sub_text_reset').click((e) => { + $('.js-resetSubmissionText').click((e) => { let $selected = $("#event_event_type_id option:selected"); let $this = $(e.target); let affirm = confirm($this.data('confirm')); diff --git a/app/helpers/events_helper.rb b/app/helpers/events_helper.rb index 9b7b9951..5ec2bf58 100644 --- a/app/helpers/events_helper.rb +++ b/app/helpers/events_helper.rb @@ -68,7 +68,7 @@ module EventsHelper data: { min_words: type.minimum_abstract_length, max_words: type.maximum_abstract_length, - help: type.submission_instructions + instructions: type.submission_instructions } ] end diff --git a/app/views/proposals/_proposal_form.html.haml b/app/views/proposals/_proposal_form.html.haml index dfbcdadd..8d16f9a9 100644 --- a/app/views/proposals/_proposal_form.html.haml +++ b/app/views/proposals/_proposal_form.html.haml @@ -25,7 +25,7 @@ %span{ class: 'help-block select-help-text collapse event_difficulty_level_id', id: "#{difficulty_level.id}-help" } = difficulty_level.description - = render 'submission_type_content_form', f: f, program: @program + = render 'proposals/submission_type_content_form', f: f, program: @program - if @program.cfp&.enable_registrations? = f.inputs 'Enable pre-registration' do diff --git a/app/views/proposals/_submission_type_content_form.haml b/app/views/proposals/_submission_type_content_form.haml index fcdd4539..a61726d6 100644 --- a/app/views/proposals/_submission_type_content_form.haml +++ b/app/views/proposals/_submission_type_content_form.haml @@ -56,7 +56,7 @@ .panel-body = markdown(event_type.submission_instructions) .panel-footer - %button.btn.btn-warning.btn-xs{ type: 'button', id: 'sub_text_reset', data: { confirm: 'Do you really want to reset your submission text to the provided template?' } } + %button.btn.btn-warning.btn-xs.js-resetSubmissionText{ type: 'button', data: { confirm: 'Do you really want to reset your submission text to the provided template?' } } Reset Submission to Template %span.small You may want to use this if you have changed the submission type. diff --git a/spec/features/proposals_spec.rb b/spec/features/proposals_spec.rb index 46af8793..5a2a6097 100644 --- a/spec/features/proposals_spec.rb +++ b/spec/features/proposals_spec.rb @@ -206,7 +206,7 @@ feature Event do fill_in 'event_submission_text', with: 'Lorem ipsum example submission text' accept_confirm do - click_button 'Reset to Template' + click_button 'Reset Submission to Template' end expect(page.find('#event_submission_text').value).to eq(event_type.submisson_instructions) From 82e45fff0a6469bb722b1b367a269fc589ba0308 Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Wed, 24 Mar 2021 02:28:43 -0700 Subject: [PATCH 30/36] fix typo in spec --- spec/features/proposals_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/features/proposals_spec.rb b/spec/features/proposals_spec.rb index 5a2a6097..e7377bb2 100644 --- a/spec/features/proposals_spec.rb +++ b/spec/features/proposals_spec.rb @@ -209,7 +209,7 @@ feature Event do click_button 'Reset Submission to Template' end - expect(page.find('#event_submission_text').value).to eq(event_type.submisson_instructions) + expect(page.find('#event_submission_text').value).to eq(event_type.submission_instructions) end end end From 05a04427c2024756abc68aa22e385a562016da1b Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Wed, 24 Mar 2021 02:33:50 -0700 Subject: [PATCH 31/36] delint --- .../proposals/_submission_type_content_form.haml | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/app/views/proposals/_submission_type_content_form.haml b/app/views/proposals/_submission_type_content_form.haml index a61726d6..367695f3 100644 --- a/app/views/proposals/_submission_type_content_form.haml +++ b/app/views/proposals/_submission_type_content_form.haml @@ -1,5 +1,4 @@ -# PARTIAL FOR EVENT/PROPOSAL FORM --# `f` a current from helper. = f.input :event_type_id, as: :select, include_blank: false, label: 'Type', input_html: { class: 'select-help-toggle' }, @@ -24,7 +23,7 @@ %p You have used - %span#abstract-count #{@event.abstract_word_count} + %span#abstract-count 0 words. Abstracts must be between %span#abstract-minimum-word-count 0 and @@ -46,9 +45,11 @@ speakers list. (However, they must have an active #{ENV['OSEM_NAME']} account.) - else %p - Please use the following as the template for your submission. This will help the conference committee review your submission with all the details they need. If you have any co-presenters, please include them below. After - submission, you will have the opportunity to add them to the speakers - list. (However, they must have an active #{ENV['OSEM_NAME']} account.) + Please use the following as the template for your submission. This will help the conference + committee review your submission with all the details they need. If you have any + co-presenters, please include them below. After submission, you will have the opportunity + to add them to the speakers list. (However, they must have an active #{ENV['OSEM_NAME']} + account.) .panel.panel-primary .panel-heading = event_type.name @@ -56,7 +57,8 @@ .panel-body = markdown(event_type.submission_instructions) .panel-footer - %button.btn.btn-warning.btn-xs.js-resetSubmissionText{ type: 'button', data: { confirm: 'Do you really want to reset your submission text to the provided template?' } } + %button.btn.btn-warning.btn-xs.js-resetSubmissionText{ type: 'button', + data: { confirm: 'Do you really want to reset your submission text to the provided template?' } } Reset Submission to Template %span.small You may want to use this if you have changed the submission type. From de607fc26244aafb8ddc287051e6b994e2cca87f Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Wed, 24 Mar 2021 02:37:07 -0700 Subject: [PATCH 32/36] Cleanup conferences show page --- app/views/admin/conferences/show.html.haml | 27 +--------------------- 1 file changed, 1 insertion(+), 26 deletions(-) diff --git a/app/views/admin/conferences/show.html.haml b/app/views/admin/conferences/show.html.haml index aa8d8417..24307099 100644 --- a/app/views/admin/conferences/show.html.haml +++ b/app/views/admin/conferences/show.html.haml @@ -67,21 +67,7 @@ -# = render 'donut_chart', title: 'Tracks', combined_data: @tracks_distribution - .tab-pane#distribution_confirmed - .row - .col-md-4 - -# - = render 'donut_chart', title: 'Event types', - combined_data: @event_type_distribution_confirmed - .col-md-4 - -# - = render 'donut_chart', title: 'Difficulty levels', - combined_data: @difficulty_levels_distribution_confirmed - .col-md-4 - -# - = render 'donut_chart', title: 'Tracks', - combined_data: @tracks_distribution_confirmed - .tab-pane#distribution_withdrawn + -# .tab-pane#distribution_withdrawn .row .col-md-4 = render 'donut_chart', title: 'Event types', @@ -103,17 +89,6 @@ .col-md-4 = render 'donut_chart', title: 'Tracks', combined_data: @tracks_distribution_confirmed - .tab-pane#distribution_withdrawn - .row - .col-md-4 - = render 'donut_chart', title: 'Event types', - combined_data: @event_type_distribution_withdrawn - .col-md-4 - = render 'donut_chart', title: 'Difficulty levels', - combined_data: @difficulty_levels_distribution_withdrawn - .col-md-4 - = render 'donut_chart', title: 'Tracks', - combined_data: @tracks_distribution_withdrawn .row .col-md-8 From 81b963ddc8bcb1b098c25fc3fbb9ed6548b6f039 Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Wed, 24 Mar 2021 02:50:44 -0700 Subject: [PATCH 33/36] Delint some more --- app/helpers/events_helper.rb | 4 ++-- app/views/admin/conferences/show.html.haml | 2 -- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/app/helpers/events_helper.rb b/app/helpers/events_helper.rb index 5ec2bf58..548630c4 100644 --- a/app/helpers/events_helper.rb +++ b/app/helpers/events_helper.rb @@ -66,8 +66,8 @@ module EventsHelper "#{type.title} - #{show_time(type.length)}", type.id, data: { - min_words: type.minimum_abstract_length, - max_words: type.maximum_abstract_length, + min_words: type.minimum_abstract_length, + max_words: type.maximum_abstract_length, instructions: type.submission_instructions } ] diff --git a/app/views/admin/conferences/show.html.haml b/app/views/admin/conferences/show.html.haml index 24307099..8e6118fd 100644 --- a/app/views/admin/conferences/show.html.haml +++ b/app/views/admin/conferences/show.html.haml @@ -60,11 +60,9 @@ = render 'donut_chart', title: 'Event types', combined_data: @event_type_distribution .col-md-4 - -# = render 'donut_chart', title: 'Difficulty levels', combined_data: @difficulty_levels_distribution .col-md-4 - -# = render 'donut_chart', title: 'Tracks', combined_data: @tracks_distribution -# .tab-pane#distribution_withdrawn From 2dc6da87e53e7b3fae472a68cb6f388ed0db8e51 Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Wed, 24 Mar 2021 03:02:43 -0700 Subject: [PATCH 34/36] Fix indentation on admin show page --- app/views/admin/conferences/show.html.haml | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/app/views/admin/conferences/show.html.haml b/app/views/admin/conferences/show.html.haml index 8e6118fd..63a91d27 100644 --- a/app/views/admin/conferences/show.html.haml +++ b/app/views/admin/conferences/show.html.haml @@ -32,6 +32,17 @@ - unless @conference.ended? = render 'todo_list', conference_progress: @conference_todo_list, conference: @conference + - else + .list-group + .list-group-item + %h4 + Conference Progress + .progress + .progress-bar{ role: 'progressbar', 'aria-valuenow': 100, + 'aria-valuemin': 0, 'aria-valuemax': 100, + style: 'width: 100%;' } + Conference Complete! + .row#tickets .col-md-8 = render 'line_chart', @@ -60,11 +71,11 @@ = render 'donut_chart', title: 'Event types', combined_data: @event_type_distribution .col-md-4 - = render 'donut_chart', title: 'Difficulty levels', - combined_data: @difficulty_levels_distribution + = render 'donut_chart', title: 'Difficulty levels', + combined_data: @difficulty_levels_distribution .col-md-4 - = render 'donut_chart', title: 'Tracks', - combined_data: @tracks_distribution + = render 'donut_chart', title: 'Tracks', + combined_data: @tracks_distribution -# .tab-pane#distribution_withdrawn .row .col-md-4 From 7106e1fc21e06203669539632cbf361654c7f201 Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Wed, 24 Mar 2021 03:05:08 -0700 Subject: [PATCH 35/36] more delinting --- app/helpers/events_helper.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/helpers/events_helper.rb b/app/helpers/events_helper.rb index 548630c4..eb5cd930 100644 --- a/app/helpers/events_helper.rb +++ b/app/helpers/events_helper.rb @@ -73,6 +73,7 @@ module EventsHelper ] end end + def event_type_dropdown(event, event_types, conference_id) selection = event.event_type.try(:title) || 'Event Type' options = event_types.collect do |event_type| From 617a4ad17273e691326fd7f0f36ac750b2e0cb0a Mon Sep 17 00:00:00 2001 From: Michael Ball Date: Wed, 24 Mar 2021 13:54:20 -0700 Subject: [PATCH 36/36] Control some lints --- .haml-lint_todo.yml | 11 +++++------ app/views/admin/registrations/index.html.haml | 2 +- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/.haml-lint_todo.yml b/.haml-lint_todo.yml index 7bcb33d4..02f1ac56 100644 --- a/.haml-lint_todo.yml +++ b/.haml-lint_todo.yml @@ -248,6 +248,11 @@ linters: - "app/views/users/edit.html.haml" - "app/views/users/show.html.haml" + ConsecutiveComments: + exclude: + # This one seems like a bug in haml-lint. + - "app/views/admin/conferences/show.html.haml" + # Offense count: 24 ConsecutiveSilentScripts: exclude: @@ -605,11 +610,6 @@ linters: - "app/views/admin/registrations/index.csv.haml" - "app/views/layouts/_admin.html.haml" - # Offense count: 1 - ImplicitDiv: - exclude: - - "app/views/admin/registrations/index.html.haml" - # Offense count: 9 MultilinePipe: exclude: @@ -637,7 +637,6 @@ linters: - "app/views/devise/passwords/new.html.haml" - "app/views/payments/new.html.haml" - # Offense count: 13 ViewLength: exclude: diff --git a/app/views/admin/registrations/index.html.haml b/app/views/admin/registrations/index.html.haml index 09f674e9..70a50b46 100644 --- a/app/views/admin/registrations/index.html.haml +++ b/app/views/admin/registrations/index.html.haml @@ -20,7 +20,7 @@ combined_data: @registration_distribution .row .col-md-12 - %div.margin-event-table + .margin-event-table %table.datatable#registrations{ data: { source: admin_conference_registrations_path(conference_id: @conference, format: :json) } } %thead %tr