diff --git a/.gitignore b/.gitignore
index 2685fea..cc90ddb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -73,6 +73,7 @@ brakeman.html
/app/assets/stylesheets/translations/*
/app/assets/stylesheets/web-fonts/*
/app/assets/stylesheets/translations/*
+/app/assets/stylesheets/editor/*
# Ignore test artifacts
/config/locales/data/html_records/*
diff --git a/app/assets/javascripts/editor.js b/app/assets/javascripts/editor.js
index ed4c0be..9e7aca9 100644
--- a/app/assets/javascripts/editor.js
+++ b/app/assets/javascripts/editor.js
@@ -11,11 +11,11 @@
editor: editor,
class: 'pen',
textarea: '',
- list: ['p', 'h3', 'h4', 'blockquote', 'insertorderedlist', 'insertunorderedlist', 'bold', 'italic', 'underline', 'strikethrough', 'createlink', 'insertimage'],
+ list: ['p', 'h1', 'h2', 'blockquote', 'insertorderedlist', 'insertunorderedlist', 'bold', 'italic', 'underline', 'strikethrough', 'createlink', 'insertimage'],
title: {
'p': 'Paragraph',
- 'h3': 'Major Heading',
- 'h4': 'Minor Heading',
+ 'h1': 'Major Heading',
+ 'h2': 'Minor Heading',
'blockquote': 'Quotation',
'insertorderedlist': 'Ordered List',
'insertunorderedlist': 'Unordered List',
diff --git a/app/assets/stylesheets/_application.scss b/app/assets/stylesheets/_application.scss
index bf8354e..ac8930c 100644
--- a/app/assets/stylesheets/_application.scss
+++ b/app/assets/stylesheets/_application.scss
@@ -216,16 +216,26 @@ textarea, .textarea {
}
}
-.textarea {
+.textarea, .workshop-description {
> :first-child {
margin-top: 0;
}
+
> :last-child {
margin-bottom: 0;
}
+
p {
font-size: 1.125em;
}
+
+ h1 {
+ font-size: 1.667em;
+ }
+
+ h2 {
+ font-size: 1.25em;
+ }
}
input {
@@ -257,6 +267,14 @@ input {
}
}
+ &.big input {
+ @include font-family(secondary);
+
+ .composition & {
+ margin-top: 1em;
+ }
+ }
+
label,
&.focused label {
position: absolute;
@@ -290,15 +308,6 @@ input {
will-change: box-shadow;
}
- &.big input {
- font-size: 2em;
- @include font-family(secondary);
-
- .composition & {
- margin-top: 1em;
- }
- }
-
&:focus, &:active, &:focus {
label {
@@ -772,12 +781,12 @@ ul.warnings li,
.user-nav-bar {
position: absolute;
right: 0;
- width: auto;
text-align: right;
top: 1em;
font-size: 0.9em;
width: 100%;
padding-left: 13em;
+ padding-right: 1em;
a {
display: block;
@@ -839,7 +848,7 @@ ul.warnings li,
background-color: inherit;
@include _(transform, rotate(135deg));
@include _(transition, 'transform 200ms ease-in-out, background-color 200ms ease-in-out');
- @include _(box-shadow, 0.2em -0.1em 0.8em -0.4em #000);
+ @include _(box-shadow, 0.2em -0.4em 0.8em -0.4em #000);
}
&.enabled {
@@ -879,7 +888,6 @@ ul.warnings li,
#main {
position: relative;
- max-width: (rems(68) - $sidebar-width) * 2;
background-color: $white;
padding-bottom: rems(2);
@@ -1223,6 +1231,14 @@ $header-tilt: 8deg;
}
}
+ .number-field,
+ .email-field,
+ .text-field {
+ &.big input {
+ font-size: 2em;
+ }
+ }
+
.flex-column {
display: flex;
align-items: flex-start;
@@ -1566,10 +1582,12 @@ input[type="submit"]:focus,
@include _(animation, fade-out ease-in-out 500ms infinite alternate both);
}
-input:focus,
-textarea:focus,
-.textarea {
- @include _(animation, none);
+body {
+ input:focus,
+ textarea:focus,
+ .textarea {
+ @include _(animation, none);
+ }
}
@include breakpoint(large) {
@@ -2153,12 +2171,19 @@ html[data-lingua-franca-example="html"] {
@include translation-pointer;
}
+.workshop-notes {
+ p {
+ font-size: 1em;
+ }
+}
+
.workshop-list {
list-style: none;
padding: 0 2em;
.workshop-description {
- max-height: 10em;
+ font-size: 0.8em;
+ max-height: 20em;
padding: 1em;
overflow: hidden;
}
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index 72fc43e..027ee51 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -665,6 +665,42 @@ module ApplicationHelper
_!((p * 10000).to_i.to_s.gsub(/^(.*)(\d\d)$/, '\1.\2%'))
end
+ def richtext(text, reduce_headings = 2)
+ return '' unless text.present?
+ return _!(text).
+ gsub(/<(\/?)h4>/, '<\1h' + (reduce_headings + 4).to_s + '>').
+ gsub(/<(\/?)h3>/, '<\1h' + (reduce_headings + 3).to_s + '>').
+ gsub(/<(\/?)h2>/, '<\1h' + (reduce_headings + 2).to_s + '>').
+ gsub(/<(\/?)h1>/, '<\1h' + (reduce_headings + 1).to_s + '>').
+ html_safe
+ end
+
+ def textarea(name, value, options = {})
+ label_id = "#{name.to_s}-label"
+ description_id = nil
+ html = label_tag(name, nil, id: label_id)
+
+ if options[:warning].present?
+ description_id = "#{name.to_s}-label" unless options[:help].present?
+ html += content_tag(:div, _(options[:warning], :s, 2), id: description_id, class: 'warning-info')
+ end
+
+ if options[:help].present?
+ description_id = "#{name.to_s}-label"
+ html += content_tag(:div, _(options[:help], :s, 2), id: description_id, class: 'input-field-help')
+ end
+
+ html += content_tag(:div, value.present? ? value.html_safe : '',
+ id: name,
+ class: 'textarea',
+ data: { name: name },
+ lang: options[:lang],
+ aria: { labeledby: label_id, describedby: description_id }
+ )
+
+ return content_tag(:div, html, class: ['text-area-field', 'input-field']).html_safe
+ end
+
private
def _form_field(type, name, value, options)
if type == 'check_box'
diff --git a/app/views/workshops/_show.html.haml b/app/views/workshops/_show.html.haml
index 0e8e1c4..9631b02 100644
--- a/app/views/workshops/_show.html.haml
+++ b/app/views/workshops/_show.html.haml
@@ -9,7 +9,7 @@
- if preview.blank? && workshop.can_show_interest?(current_user)
= form_tag toggle_workshop_interest_path(workshop.conference.slug, workshop.id) do
= button_tag (workshop.interested?(current_user) ? :remove_interest : :show_interest), :value => :toggle_interest, :class => (workshop.interested?(current_user) ? :delete : :add)
- =_!(workshop.info).html_safe if workshop.info.present?
+ = richtext workshop.info
- if preview.blank? && translations_available_for_editing
.actions
- translations_available_for_editing.each do |locale|
@@ -55,6 +55,6 @@
%h3=_'articles.workshops.headings.needs','What do you need?'
%p= _!((needs.map { |x| _"workshop.options.needs.#{x}" }).join(', ').to_s.html_safe)
- if workshop.notes.present?
- = columns(medium: 12) do
+ = columns(medium: 12, class: 'workshop-notes') do
%h3=_'articles.workshops.headings.notes','Notes'
- =_!(workshop.notes).html_safe
+ = richtext workshop.notes, 3
diff --git a/app/views/workshops/new.html.haml b/app/views/workshops/new.html.haml
index b56921d..f1b9bc7 100644
--- a/app/views/workshops/new.html.haml
+++ b/app/views/workshops/new.html.haml
@@ -26,10 +26,7 @@
.original-text
%h4=_'translate.content.Translation_of'
.value=@workshop.title!
- .text-area-field.input-field
- = label_tag :info
- .input-field-help=_'articles.workshops.paragraphs.info', :s, 2
- .textarea#info{lang: @translation, data: {name: :info}}=(@info || '').html_safe
+ = textarea :info, @info, help: 'articles.workshops.paragraphs.info', lang: @translation
- if @is_translating
.original-text
%h4=_'translate.content.Translation_of'
@@ -80,10 +77,7 @@
= label_tag :needs_facilitators do
= _'workshop.options.needs_facilitators', 'Needs Additional Facilitators'
= columns(medium: 12) do
- .text-area-field.input-field
- = label_tag :notes
- .warning-info=_'articles.workshops.paragraphs.notes','Notes are only viewable by conference hosts and workshop facilitators'
- .textarea#notes{data: {name: :notes}}=(@workshop.notes || '').html_safe
+ = textarea :notes, @workshop.notes, warning: 'articles.workshops.paragraphs.notes'
= columns(medium: 12) do
.actions.next-prev
= button_tag :save, value: :save
diff --git a/vendor/assets/javascripts/pen.js b/vendor/assets/javascripts/pen.js
index e65e212..ee2d603 100644
--- a/vendor/assets/javascripts/pen.js
+++ b/vendor/assets/javascripts/pen.js
@@ -85,7 +85,7 @@
stayMsg: 'Are you going to leave here?',
textarea: '',
list: [
- 'blockquote', 'h2', 'h3', 'p', 'code', 'insertorderedlist', 'insertunorderedlist', 'inserthorizontalrule',
+ 'blockquote', 'h1', 'h2', 'p', 'code', 'insertorderedlist', 'insertunorderedlist', 'inserthorizontalrule',
'indent', 'outdent', 'bold', 'italic', 'underline', 'createlink', 'insertimage'
],
titles: {},