Merge branch 'misc-release-tweaks' into remove-schedule

* misc-release-tweaks: (38 commits)
  Improve markdown support and tweak sponsorship langage
  Use Ruby 2.5.5 since that is in the docker dev container
  Do not need to specify callback url
  attempt to fix the discourse callback URL
  use a div with padding.
  Help button is weird.
  Dropdown menu style tweaks
  fix logic for snap sso link
  tweak form display in dropdown
  Tweak devise modules list
  Work on omniauth setup
  Minor HTML cleanup
  More CSS-y things
  BJC-ify a bunch of styles
  More wording tweaks
  Tweak some wording, html and descriptions for Snap!Con
  Enable a bunch more markdown options.
  Delete some unnecessary files
  attempt one more fix
  readd back the group by
  ...
This commit is contained in:
Michael Ball 2020-01-05 15:44:35 -08:00
commit b49bddafb6
25 changed files with 170 additions and 156 deletions

View file

@ -1 +1 @@
2.5.0
2.5.5

12
Gemfile
View file

@ -2,7 +2,7 @@
source 'https://rubygems.org'
ruby ENV['OSEM_RUBY_VERSION'] || '2.5.0'
ruby ENV['OSEM_RUBY_VERSION'] || '2.5.5'
# rails-assets requires >= 1.8.4
if Gem::Version.new(Bundler::VERSION) < Gem::Version.new('1.8.4')
@ -20,7 +20,7 @@ gem 'puma', '~> 3.0'
gem 'responders', '~> 2.0'
# as supported databases
gem 'mysql2'
# gem 'mysql2'
gem 'pg'
# for tracking data changes
@ -38,12 +38,12 @@ gem 'rails-i18n'
gem 'devise'
gem 'devise_ichain_authenticatable'
# for openID authentication
gem 'omniauth'
gem 'omniauth-facebook'
gem 'omniauth-github'
gem 'omniauth-google-oauth2'
gem 'omniauth-openid'
gem 'omniauth-discourse'
# gem 'omniauth-openid'
# gem 'omniauth-facebook'
# gem 'omniauth-github'
# Bot-filtering
gem 'recaptcha', require: 'recaptcha/rails'

View file

@ -304,7 +304,6 @@ GEM
multi_json (1.13.1)
multi_xml (0.6.0)
multipart-post (2.1.1)
mysql2 (0.5.2)
nenv (0.3.0)
net-http-persistent (3.0.1)
connection_pool (~> 2.2)
@ -324,11 +323,8 @@ GEM
omniauth (1.9.0)
hashie (>= 3.4.6, < 3.7.0)
rack (>= 1.6.2, < 3)
omniauth-facebook (5.0.0)
omniauth-oauth2 (~> 1.2)
omniauth-github (1.3.0)
omniauth (~> 1.5)
omniauth-oauth2 (>= 1.4.0, < 2.0)
omniauth-discourse (1.0.0)
omniauth (~> 1.0)
omniauth-google-oauth2 (0.6.1)
jwt (>= 2.0)
omniauth (>= 1.1.1)
@ -336,9 +332,6 @@ GEM
omniauth-oauth2 (1.6.0)
oauth2 (~> 1.1)
omniauth (~> 1.9)
omniauth-openid (1.0.1)
omniauth (~> 1.0)
rack-openid (~> 1.3.1)
open4 (1.3.4)
orm_adapter (0.5.0)
paper_trail (10.3.1)
@ -378,11 +371,8 @@ GEM
method_source (~> 0.8.1)
slop (~> 3.4)
public_suffix (3.1.1)
puma (3.12.1)
rack (2.0.7)
rack-openid (1.3.1)
rack (>= 1.1.0)
ruby-openid (>= 2.1.8)
puma (3.12.2)
rack (2.0.8)
rack-test (1.1.0)
rack (>= 1.0, < 3)
rails (5.2.3)
@ -499,7 +489,6 @@ GEM
rubocop-rspec (1.36.0)
rubocop (>= 0.68.1)
ruby-oembed (0.12.0)
ruby-openid (2.9.2)
ruby-progressbar (1.10.1)
ruby-rc4 (0.1.5)
ruby_dep (1.5.0)
@ -527,7 +516,7 @@ GEM
rubyzip (>= 1.2.2)
sexp_processor (4.11.0)
shellany (0.0.1)
shoulda-matchers (4.0.1)
shoulda-matchers (4.1.2)
activesupport (>= 4.2.0)
simplecov (0.16.1)
docile (~> 1.1)
@ -665,13 +654,10 @@ DEPENDENCIES
mina
mini_magick
money-rails
mysql2
nokogiri (>= 1.8.1)
omniauth
omniauth-facebook
omniauth-github
omniauth-discourse
omniauth-google-oauth2
omniauth-openid
paper_trail
pdf-inspector
pg
@ -726,7 +712,7 @@ DEPENDENCIES
whenever
RUBY VERSION
ruby 2.5.0p0
ruby 2.5.5p157
BUNDLED WITH
1.17.3

View file

@ -29,7 +29,9 @@
}
}
.dropdown-menu {
padding: 17px;
min-width: 225px;
}
.navbar-default .navbar-nav>.open>a, .navbar-default .navbar-nav>.open>a:hover, .navbar-default .navbar-nav>.open>a:focus {
color: #FFF;
}
}

View file

@ -116,14 +116,13 @@
}
#social-media{
background: none repeat scroll 0 0 #2f2f2f;
padding-top: 60px;
padding-bottom: 60px;
background: none repeat scroll 0 0 #0C3559;
padding: 50px 20px;
i{
color: #4a4a4a;
color: #FFF;
}
i:hover{
color: #16a085;
color: #F2E205;
}
a{
padding-left: 100px;
@ -164,11 +163,11 @@
i.fa {
line-height: inherit;
}
&.show {
visibility:visible;
cursor:pointer;
opacity: 1.0;
}
// &.show {
// visibility:visible;
// cursor:pointer;
// opacity: 1.0;
// }
a {
color: white;
}

View file

@ -13,7 +13,7 @@ body {
}
#content {
padding-bottom: 60px;
padding-bottom: 45px;
}
#footer {

View file

@ -1,9 +1,9 @@
$navbar-default-bg: #299a0b;
$navbar-default-link-active-bg: #DFE0DF;
$navbar-default-bg: #0C3559;
$navbar-default-link-active-bg: rgb(8,8,8);
$navbar-default-border: 1px solid #d4d4d4;
$navbar-default-color: #ffffff;
$navbar-default-link-color: #ffffff;
$navbar-default-link-hover-color: #000000;
$navbar-default-link-hover-color: #F2E205;
@import 'bootstrap-datetimepicker';
@import "bootstrap-sprockets";

View file

@ -40,19 +40,20 @@ class UserDatatable < AjaxDatatablesRails::Base
# rubocop:disable Naming/AccessorMethodName
def get_raw_records
User.left_outer_joins(:registrations, :roles)
.distinct
.select("users.*, COUNT(CASE WHEN registrations.attended = 't' THEN 1 END) AS attended_count")
.group('users.id')
User.left_outer_joins(:registrations, :roles).select(
"DISTINCT users.id, users.name, users.email, users.confirmed_at, COUNT(CASE WHEN registrations.attended = 't' THEN 1 END) AS attended_count"
).group(
'users.id, users.name, users.email, users.confirmed_at'
)
end
# rubocop:enable Naming/AccessorMethodName
def records_total_count
fetch_records.unscope(:group).count(:all)
fetch_records.unscoped.count(:id)
end
def records_filtered_count
filter_records(fetch_records).unscope(:group).count(:all)
filter_records(fetch_records).unscoped.count
end
# ==== These methods represent the basic operations to perform on records

View file

@ -1,4 +1,5 @@
# frozen_string_literal: true
require 'redcarpet/render_strip'
module FormatHelper
##
@ -191,9 +192,12 @@ module FormatHelper
return '' if text.nil?
options = {
autolink: true,
autolink: true,
space_after_headers: true,
no_intra_emphasis: true
tables: true,
strikethrough: true,
footnotes: true,
superscript: true
}
markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML.new(escape_html: escape_html), options)
markdown.render(text).html_safe
@ -203,6 +207,11 @@ module FormatHelper
markdown("#{text} Please look at #{link_to '**Markdown Syntax**', 'https://daringfireball.net/projects/markdown/syntax', target: '_blank'} to format your text", false)
end
# Return a plain text markdown stripped of formatting.
def plain_text(content)
Redcarpet::Markdown.new(Redcarpet::Render::StripDown).render(content)
end
def quantity_left_of(resource)
return '-/-' if resource.quantity.blank?

View file

Binary file not shown.

View file

@ -50,7 +50,7 @@ class User < ApplicationRecord
else
[:database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable, :confirmable,
:omniauthable, omniauth_providers: [:suse, :google, :facebook, :github]]
:omniauthable, omniauth_providers: [:google, :discourse]]
end
devise(*devise_modules)

View file

@ -1,6 +1,6 @@
= content_for :splash_nav do
%li
%a.smoothscroll{ href: '#call' } Call For Content
%a.smoothscroll{ href: '#call' } Call For Participation
%section#call
.container

View file

@ -2,7 +2,7 @@
expires_in: 1.hour) do
.col-md-4.col-sm-4.text-center
%h2
Call for Papers
Call for Participation
%p.lead
We are now accepting proposals for sessions!
%p

View file

@ -6,7 +6,7 @@
= image_tag(conference.picture_url, class: 'img-responsive') if conference.picture?
.col-md-6
%h3
= conference.title
= conference.title.html_safe
%small
%b
= date_string(conference.start_date, conference.end_date)

View file

@ -1,14 +1,14 @@
.scroll-top-wrapper
= link_to "#banner", class: "smoothscroll" do
%i.fa.fa-2x.fa-arrow-circle-up
-# .scroll-top-wrapper
-# = link_to "#banner", class: "smoothscroll" do
-# %i.fa.fa-2x.fa-arrow-circle-up
:javascript
$(function(){
$(document).on( 'scroll', function(){
if ($(window).scrollTop() > 100) {
$('.scroll-top-wrapper').addClass('show');
} else {
$('.scroll-top-wrapper').removeClass('show');
}
});
});
-# :javascript
-# $(function(){
-# $(document).on( 'scroll', function(){
-# if ($(window).scrollTop() > 100) {
-# $('.scroll-top-wrapper').addClass('show');
-# } else {
-# $('.scroll-top-wrapper').removeClass('show');
-# }
-# });
-# });

View file

@ -1,17 +1,17 @@
- cache [conference, venue, '#splash#header'] do
#banner
#banner{ style: ("background-image: url(#{conference.picture_url})" if conference.picture_url) }
.container
.row
.col-md-8.col-md-offset-2#header
.row
.col-md-4
- if conference.picture?
= image_tag(conference.picture_url,
class: 'img-responsive img-center',
id: 'splash-logo')
.col-md-8
-# - if conference.picture?
-# .col-md-4
-# = image_tag(conference.picture_url,
-# class: 'img-responsive img-center',
-# id: 'splash-logo')
.col-md-8.col-md-offset-2
%h1
= conference.title
= conference.title.html_safe
%h3
- if conference.start_date && conference.end_date
%span.date.text-nowrap

View file

@ -9,8 +9,8 @@
.col-md-12
%p.lead.text-center
%span.notranslate
= conference.title
has the most awesome program ever!
= conference.title.html_safe
will have an enaging program!
- unless highlights.blank?
= render 'highlights', conference_id: conference.short_title,

View file

@ -27,9 +27,9 @@
.row
.col-md-12
%h3.text-center
Want to sponsor?
= "Interested in sponsoring #{conference.title}?"
= link_to(sponsorship_mailto(conference)) do
Contact us!
Please, contact us!
- sponsors.each do |sponsor|
- content_for :modals do

View file

@ -1,10 +1,10 @@
- content_for :head do
%meta{ property: "og:title", content: @conference.title }
%meta{ property: "og:site_name", content: (ENV['OSEM_NAME'] || 'OSEM') }
%meta{ property: "og:description", content: @conference.description }
%meta{ property: "og:description", content: plain_text(@conference.description) }
%meta{ property: "og:url", content: conference_url(@conference.short_title) }
%meta{ property: "twitter:title", content: (@conference.title) }
%meta{ property: "twitter:description", content: @conference.description }
%meta{ property: "twitter:description", content: plain_text(@conference.description) }
- if @conference.picture?
%meta{ property: "og:image", content: @image_url }
%meta{ property: "og:image:secure_url", content: @image_url }
@ -64,21 +64,22 @@
= render 'social_media', contact: @conference.contact
= render 'footer'
- content_for :script_head do
:javascript
var triangle_tcs = tinycolor("#{h(@conference.color)}").monochromatic();
var triangle_colors = triangle_tcs.map(function(t) {
return t.toHexString();
});
$(function () {
$(document).ready(function() {
var triangle_width = document.body.clientWidth;
var triangle_height = ($( "#banner" ).height() + 200 );
var pattern = Trianglify({ width: triangle_width,
height: triangle_height,
cell_size: 100,
x_colors: triangle_colors
});
$('#banner').css('background-image', 'url("' + pattern.png() + '")');
});
});
-# - content_for :script_head do
-# :javascript
-# var triangle_tcs = tinycolor("#{h(@conference.color)}").monochromatic();
-# var triangle_colors = triangle_tcs.map(function(t) {
-# return t.toHexString();
-# });
-# $(function () {
-# $(document).ready(function() {
-# var triangle_width = document.body.clientWidth;
-# var triangle_height = ($( "#banner" ).height() + 200 );
-# var pattern = Trianglify({ width: triangle_width,
-# height: triangle_height,
-# cell_size: 100,
-# x_colors: triangle_colors
-# });
-# $('#banner').css('background-image', 'url(' + 0 + ')');
-# });
-# });

View file

@ -1,7 +1,14 @@
.text-center
.btn-group.btn-group-lg#openid-btn-grp
- omniauth_configured.each do |provider|
= link_to "user_#{provider}_omniauth_authorize".to_sym, class: "btn btn-success btn-lg",
id: "omniauth-#{provider}",
title: "Your #{provider} login" do
%i{class: "fa fa-#{provider}"}
- if provider != :discourse
= link_to "user_#{provider}_omniauth_authorize".to_sym, class: "btn btn-success btn-lg",
id: "omniauth-#{provider}",
title: "Your #{provider} login" do
%i{class: "fa fa-#{provider}"}
- else
= link_to("Snap!",
"user_#{provider}_omniauth_authorize".to_sym,
class: "btn btn-success btn-lg",
id: "omniauth-#{provider}",
title: "Your #{provider} login")

View file

@ -1,25 +1,26 @@
- if ENV['OSEM_ICHAIN_ENABLED'] != 'true'
= form_tag(new_user_session_path, class: 'form-horizontal') do
%legend
%span
Sign In
.form-group
%label{for: "user[login]", class: 'col-sm-2 control-label'}
Username
.col-sm-10
= text_field_tag 'user[login]', nil, placeholder: 'Username', class: 'form-control', required: 'required'
.form-group
%label{for: "user[password]", class: 'col-sm-2 control-label'}
Password
.col-sm-10
= password_field_tag 'user[password]', nil, placeholder: 'Password', class: 'form-control', required: 'required'
.form-group
.col-sm-12
%button.btn.btn-success.pull-right
Sign in
= render partial: 'devise/shared/openid'
%p.text-right
%a.small.btn.btn-default{"data-toggle" => "collapse", "data-target" => "#devise-help-sign-in"}
Need Help?
#devise-help-sign-in.collapse
= render partial: 'devise/shared/links'
.container.panel
= form_tag(new_user_session_path, class: '') do
%legend
%span
Sign In
.form-group
%label{for: "user[login]", class: 'col-sm-2 control-label'}
Username
.col-sm-10
= text_field_tag 'user[login]', nil, placeholder: 'Username', class: 'form-control', required: 'required'
.form-group
%label{for: "user[password]", class: 'col-sm-2 control-label'}
Password
.col-sm-10
= password_field_tag 'user[password]', nil, placeholder: 'Password', class: 'form-control', required: 'required'
.form-group
.col-sm-12
%button.btn.btn-success.pull-right
Sign in
= render partial: 'devise/shared/openid'
%p.text-right
%a.small.btn.btn-default{"data-toggle" => "collapse", "data-target" => "#devise-help-sign-in"}
Need Help?
#devise-help-sign-in.collapse
= render partial: 'devise/shared/links'

View file

@ -54,22 +54,24 @@
= password_field_tag 'password', nil, id: 'user_ichain_password_dd', class: 'form-control', placeholder: 'Password'
%button.btn.btn-success.btn-block Sign in
- else
= form_tag new_user_session_path do
= text_field_tag 'user[login]', nil, id: 'user_login_dd', class: 'form-control', placeholder: 'Username / E-Mail'
= password_field_tag 'user[password]', nil, id: 'user_password_dd', class: 'form-control', placeholder: 'Password'
%p.text-right
%small
%label{for: 'user_remember_me'} Remember me
= check_box_tag 'user[remember_me]'
%button.btn.btn-success.btn-block Sign in
- unless omniauth_configured.empty?
.divider
%h6.text-center
or
= render 'devise/shared/openid_links'
%p.text-right
%div{style: "padding: 6px"}
= form_tag new_user_session_path, class: 'form-group' do
= text_field_tag 'user[login]', nil, id: 'user_login_dd', class: 'form-control', placeholder: 'Username / E-Mail'
= password_field_tag 'user[password]', nil, id: 'user_password_dd', class: 'form-control', placeholder: 'Password'
%p.text-right
%small
%label{for: 'user_remember_me'} Remember me
= check_box_tag 'user[remember_me]'
%br
%a.small.btn.btn-xs.btn-default{"data-toggle" => "collapse", "data-target" => "#navbar-devise-help"}
Need Help?
#navbar-devise-help.collapse
= render 'devise/shared/links'
%button.btn.btn-success.btn-block Sign in
- unless omniauth_configured.empty?
.divider
%h6.text-center
or
= render 'devise/shared/openid_links'
-# %p.text-right
-# %br
-# %a.small.btn.btn-xs.btn-default{"data-toggle" => "collapse", "data-target" => "#navbar-devise-help"}
-# Need Help?
-# #navbar-devise-help.collapse
-# = render 'devise/shared/links'

View file

@ -1,10 +1,10 @@
%html{xmlns: 'http://www.w3.org/1999/html'}
%html{lang: 'en'}
%head
%meta{charset: 'utf-8'}
%meta{name: 'viewport', content: 'width=device-width, initial-scale=1, maximum-scale=1'}
%title= content_for?(:title) ? yield(:title) : (ENV['OSEM_NAME'] || 'OSEM')
%meta{content: '', name: 'description'}
%meta{content: '', name: 'author'}
%meta{name: 'viewport', content: 'width=device-width, initial-scale=1'}
%title= content_for?(:title) ? strip_tags( yield(:title) ) : (ENV['OSEM_NAME'] || 'OSEM')
%meta{content: 'Snap!Con -- A conference all about Snap!, a programing language from UC Berkeley.', name: 'description'}
%meta{content: 'Michael Ball, Brian Harvey, Jens Moenig, Bernat Romagosa, Dan Garcia, Lauren Mock', name: 'author'}
= stylesheet_link_tag "application", media: 'all'
= javascript_include_tag "application"
@ -26,7 +26,7 @@
-# Admin area
- if controller.class.name.split("::").first=="Admin"
= render 'layouts/admin'
-else
- else
#messages
.container
= render 'layouts/messages'
@ -45,7 +45,7 @@
#{link_to "MIT license", "http://opensource.org/licenses/MIT"}.
You can run, copy, distribute, study, change and improve it.
The source code and the developers are on
#{link_to "GitHub", "https://github.com/openSUSE/osem"}.
#{link_to "GitHub", "https://github.com/snap-cloud/snapcon"}. This site is a modification of #{link_to "OSEM", "https://github.com/openSUSE/osem"}.
- if ENV["SKYLIGHT_PUBLIC_DASHBOARD_URL"].present?
Performance data is available on
#{link_to "Skylight", ENV["SKYLIGHT_PUBLIC_DASHBOARD_URL"]}.

View file

@ -6,12 +6,18 @@ Devise.setup do |config|
# Define the available openID providers that can be used to log in
# Pass each provider to User model in :omniauth_providers (for open_id providers use their name)
config.omniauth :open_id, name: 'suse', identifier: 'http://www.opensuse.org/openid/user'
# config.omniauth :open_id, name: 'suse', identifier: 'http://www.opensuse.org/openid/user'
config.omniauth :google_oauth2, (ENV['OSEM_GOOGLE_KEY'] || Rails.application.secrets.google_key), (ENV['OSEM_GOOGLE_SECRET'] || Rails.application.secrets.google_secret),
name: 'google',
scope: 'email'
config.omniauth :facebook, (ENV['OSEM_FACEBOOK_KEY'] || Rails.application.secrets.facebook_key), (ENV['OSEM_FACEBOOK_SECRET'] || Rails.application.secrets.facebook_secret)
config.omniauth :github, (ENV['OSEM_GITHUB_KEY'] || Rails.application.secrets.github_key), (ENV['OSEM_GITHUB_SECRET'] || Rails.application.secrets.github_secret)
config.omniauth :discourse,
sso_url: "https://forum.snap.berkeley.edu/session/sso_provider",
sso_secret: ENV['OSEM_DISCOURSE_SECRET']
# config.omniauth :facebook, (ENV['OSEM_FACEBOOK_KEY'] || Rails.application.secrets.facebook_key), (ENV['OSEM_FACEBOOK_SECRET'] || Rails.application.secrets.facebook_secret)
# config.omniauth :github, (ENV['OSEM_GITHUB_KEY'] || Rails.application.secrets.github_key), (ENV['OSEM_GITHUB_SECRET'] || Rails.application.secrets.github_secret)
# ==> Mailer Configuration
# Configure the e-mail address which will be shown in Devise::Mailer,