Replaced Pen with Quill and removed dead CSS rules
This commit is contained in:
parent
dbea0e3bbc
commit
aba8635eb9
10
Gemfile
10
Gemfile
@ -10,7 +10,6 @@ gem 'rack-mini-profiler'
|
||||
gem 'haml'
|
||||
gem 'nokogiri'
|
||||
|
||||
gem 'tzinfo-data'
|
||||
gem 'sass'
|
||||
gem 'sass-rails'
|
||||
gem 'uglifier', '>= 1.3.0'
|
||||
@ -53,7 +52,7 @@ group :development do
|
||||
gem 'capistrano-faster-assets', '~> 1.0'
|
||||
|
||||
gem 'eventmachine', git: 'https://github.com/krzcho/eventmachine', :branch => 'master'
|
||||
gem 'thin'# , :github => 'krzcho/thin', :branch => 'master'
|
||||
gem 'thin'
|
||||
gem 'rubocop', require: false
|
||||
gem 'haml-lint', require: false
|
||||
end
|
||||
@ -69,7 +68,6 @@ group :test do
|
||||
|
||||
gem 'poltergeist'
|
||||
gem 'capybara-email'
|
||||
# gem 'capybara-webkit'
|
||||
gem 'guard-rspec'
|
||||
gem 'factory_girl_rails'
|
||||
gem 'coveralls', require: false
|
||||
@ -80,7 +78,7 @@ group :test do
|
||||
gem 'mocha'
|
||||
end
|
||||
|
||||
group :staging, :production, :preview do
|
||||
group :production, :preview do
|
||||
gem 'rails_12factor'
|
||||
end
|
||||
|
||||
@ -91,8 +89,10 @@ group :production, :preview do
|
||||
end
|
||||
|
||||
platforms 'mswin', 'mingw' do
|
||||
gem 'tzinfo-data'
|
||||
|
||||
group :test do
|
||||
gem 'wdm', '>= 0.1.0'
|
||||
gem 'win32console', require: false
|
||||
gem 'win32console', require: false
|
||||
end
|
||||
end
|
||||
|
@ -63,7 +63,7 @@ GIT
|
||||
|
||||
GIT
|
||||
remote: https://github.com/lingua-franca/lingua_franca.git
|
||||
revision: 5f08b59827caf2f3e55152f65a942b92fcb3a601
|
||||
revision: 618d704de71f50cc706c1c073a7f702765c931ac
|
||||
branch: 2017
|
||||
specs:
|
||||
lingua_franca (0.0.1)
|
||||
@ -258,8 +258,8 @@ GEM
|
||||
glib2 (3.1.1-x86-mingw32)
|
||||
cairo (>= 1.12.8)
|
||||
pkg-config
|
||||
globalid (0.3.7)
|
||||
activesupport (>= 4.1.0)
|
||||
globalid (0.4.0)
|
||||
activesupport (>= 4.2.0)
|
||||
gobject-introspection (3.1.1-x86-mingw32)
|
||||
glib2 (= 3.1.1)
|
||||
guard (2.14.1)
|
||||
@ -336,7 +336,7 @@ GEM
|
||||
net-ssh (>= 2.6.5)
|
||||
net-ssh (4.1.0)
|
||||
netrc (0.11.0)
|
||||
nokogiri (1.6.8.1-x86-mingw32)
|
||||
nokogiri (1.7.1-x86-mingw32)
|
||||
mini_portile2 (~> 2.1.0)
|
||||
notiffany (0.1.1)
|
||||
nenv (~> 0.1)
|
||||
|
@ -1,42 +1,21 @@
|
||||
(function() {
|
||||
var pens = {};
|
||||
|
||||
Array.prototype.forEach.call(document.querySelectorAll('.textarea'), function(editor) {
|
||||
var event= editor.dataset.editOn;
|
||||
if (event == 'load') {
|
||||
startEditing(editor);
|
||||
} else {
|
||||
editor.addEventListener(event, function() {
|
||||
if (editor.getAttribute('contenteditable') !== 'true') {
|
||||
startEditing(editor);
|
||||
// for content editable, we need to refocus to show the caret
|
||||
editor.blur();
|
||||
editor.focus();
|
||||
}
|
||||
});
|
||||
}
|
||||
Array.prototype.forEach.call(document.querySelectorAll('.textarea .editor'), function(editor) {
|
||||
startEditing(editor);
|
||||
});
|
||||
|
||||
function startEditing(editor) {
|
||||
var name = editor.dataset.name;
|
||||
pens[name] = new Pen({
|
||||
editor: editor,
|
||||
class: 'pen',
|
||||
textarea: '<textarea name="' + name + '"></textarea>',
|
||||
list: ['p', 'h1', 'h2', 'blockquote', 'insertorderedlist', 'insertunorderedlist', 'bold', 'italic', 'underline', 'strikethrough', 'createlink', 'insertimage'],
|
||||
title: {
|
||||
'p': 'Paragraph',
|
||||
'h1': 'Major Heading',
|
||||
'h2': 'Minor Heading',
|
||||
'blockquote': 'Quotation',
|
||||
'insertorderedlist': 'Ordered List',
|
||||
'insertunorderedlist': 'Unordered List',
|
||||
'bold': 'Bold',
|
||||
'italic': 'Italic',
|
||||
'underline': 'Underline',
|
||||
'strikethrough': 'Strikethrough',
|
||||
'createlink': 'Link',
|
||||
'insertimage': 'Image'
|
||||
pens[name] = new Quill(editor, {
|
||||
theme: 'snow',
|
||||
modules: {
|
||||
toolbar: [
|
||||
[{ 'header': [1, 2, false] }],
|
||||
['bold', 'italic', 'underline', 'strike'],
|
||||
[{ 'script': 'sub'}, { 'script': 'super' }],
|
||||
[{ 'list': 'ordered'}, { 'list': 'bullet' }, 'blockquote']
|
||||
]
|
||||
}
|
||||
});
|
||||
return pens[name];
|
||||
@ -57,7 +36,7 @@
|
||||
textarea.style.display = 'none';
|
||||
form.appendChild(textarea);
|
||||
}
|
||||
textarea.value = editor.innerHTML;
|
||||
textarea.value = editor.getElementsByClassName('ql-editor')[0].innerHTML;
|
||||
if (pens[name]) {
|
||||
pens[name].destroy();
|
||||
}
|
||||
|
Binary file not shown.
1627
app/assets/stylesheets/_admin.scss
Normal file
1627
app/assets/stylesheets/_admin.scss
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,10 +1,6 @@
|
||||
$sidebar-width: 0;
|
||||
|
||||
// $colour-1: #00ADEF;
|
||||
// $colour-2: #FF015B;
|
||||
// $colour-3: #E6C229;
|
||||
// $colour-4: #F17105;
|
||||
// $colour-5: #8EA604;
|
||||
$zindex-base: 0;
|
||||
|
||||
$colour-1: #00ADEF; // blue
|
||||
$colour-2: #EF57B4; // #DD57EF; // pink
|
||||
@ -17,7 +13,6 @@ $black: #333;
|
||||
$gray: #E8E8E8;
|
||||
$light-gray: #EEE;
|
||||
$mid-gray: #888;
|
||||
// $red: #B24C63;
|
||||
$red: #FF5A5F;
|
||||
|
||||
$blue: $colour-1;
|
||||
@ -130,34 +125,7 @@ $link-colour: darken($colour-1, 13%);
|
||||
background-color: rgba(0,0,0,0);
|
||||
@include _(transition, background-color 150ms ease-in-out);
|
||||
}
|
||||
/*@include before-and-after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
display: block;
|
||||
top: 0;
|
||||
right: 100%;
|
||||
font-size: 1.15em;
|
||||
background-color: rgba(0, 0, 0, 0);
|
||||
border-color: transparent;
|
||||
@include _(transition, all 250ms ease-in-out);
|
||||
}
|
||||
@include before {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
margin-right: 1em;
|
||||
}
|
||||
@include after {
|
||||
border-style: solid;
|
||||
border-width: 1em 0 1em 1em;
|
||||
}*/
|
||||
|
||||
/*&:hover,
|
||||
&:focus {
|
||||
@include before-and-after {
|
||||
right: -1em;
|
||||
border-left-color: rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
}*/
|
||||
&:hover,
|
||||
&:focus {
|
||||
@include before {
|
||||
|
@ -1,439 +0,0 @@
|
||||
$bumbleberry-no-markup: true;
|
||||
|
||||
@import "bumbleberry";
|
||||
@import "settings";
|
||||
|
||||
@include monospace-font;
|
||||
|
||||
.translation-list {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
text-align: center;
|
||||
@include clearfix;
|
||||
|
||||
li {
|
||||
display: inline-block;
|
||||
width: 25%;
|
||||
padding: 1em;
|
||||
min-width: 10em;
|
||||
}
|
||||
|
||||
a {
|
||||
display: block;
|
||||
position: relative;
|
||||
height: 7em;
|
||||
border: 0.1em solid #DDD;
|
||||
color: inherit;
|
||||
overflow: hidden;
|
||||
@include _(border-radius, 0.25em);
|
||||
@include default-box-shadow(top, 2);
|
||||
@include _(transform, scale(1));
|
||||
@include _(transition, transform 100ms ease-in-out);
|
||||
|
||||
&:hover,
|
||||
&:focus {
|
||||
@include _(transform, scale(1.125));
|
||||
}
|
||||
&:active {
|
||||
@include _(transform, scale(1.25));
|
||||
}
|
||||
|
||||
&:after {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
.locale-name {
|
||||
font-size: 1.25em;
|
||||
padding: 0.5em 0;
|
||||
background-color: $colour-2;
|
||||
color: #EEE;
|
||||
@include font-family(secondary);
|
||||
}
|
||||
|
||||
.locale-completion {
|
||||
font-size: 2em;
|
||||
@include font-family(monospace);
|
||||
letter-spacing: -0.15em;
|
||||
}
|
||||
|
||||
&.enabled-translations {
|
||||
.locale-name {
|
||||
background-color: $colour-5;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#lingua-franca-translation-form {
|
||||
padding: rems(1) 7.5%;
|
||||
@include default-box-shadow(bottom, 2);
|
||||
max-width: 100%;
|
||||
|
||||
/*button[type="submit"] {
|
||||
position: absolute;
|
||||
right: 7.5%;
|
||||
top: 1em;
|
||||
@include _(opacity, 1);
|
||||
@include _(transition, opacity 250ms ease-in-out);
|
||||
|
||||
&:disabled {
|
||||
cursor: default;
|
||||
@include _(opacity, 0);
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
#lingua-franca-translation-form h2,
|
||||
#translation-value,
|
||||
.variables button {
|
||||
@include font-family(monospace);
|
||||
}
|
||||
|
||||
#translation-value {
|
||||
border: 1px solid #CCC;
|
||||
outline: none;
|
||||
padding: 1em 1.75em;
|
||||
color: $colour-3;
|
||||
background-color: #333;
|
||||
position: relative;
|
||||
|
||||
input {
|
||||
border: 0;
|
||||
background-color: transparent;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
font-weight: bold;
|
||||
color: $colour-1;
|
||||
|
||||
&.special {
|
||||
color: $colour-4;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#translation-control-variables {
|
||||
background-color: #CCC;
|
||||
padding: 0.25em;
|
||||
min-height: 2.9em;
|
||||
|
||||
strong {
|
||||
float: left;
|
||||
padding: 0.25em 0.5em;
|
||||
}
|
||||
|
||||
.variables {
|
||||
font-weight: bold;
|
||||
|
||||
em {
|
||||
line-height: 1.75em;
|
||||
}
|
||||
|
||||
button {
|
||||
top: auto;
|
||||
right: auto;
|
||||
position: relative;
|
||||
border-radius: 0.25em;
|
||||
font-size: 0.65em;
|
||||
margin-bottom: 1em;
|
||||
vertical-align: sub;
|
||||
@include _(text-stroke, 0);
|
||||
|
||||
&.special {
|
||||
background-color: $colour-4;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#lingua-franca-translation-form .enable-translation {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#lingua-franca-translation-form.optional .enable-translation {
|
||||
display: block;
|
||||
}
|
||||
|
||||
#lingua-franca-translation-form.optional.enabled .uses-default-value {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#lingua-franca-translation-form.optional.disabled .uses-custom-value,
|
||||
#lingua-franca-translation-form.optional.disabled .translation-control {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#lingua-franca-keys {
|
||||
width: 100%;
|
||||
overflow: hidden;
|
||||
margin-bottom: 100%;
|
||||
background-color: transparent;
|
||||
@include _(box-shadow, none);
|
||||
|
||||
th {
|
||||
text-align: left;
|
||||
|
||||
&, td {
|
||||
@include font-family(monospace);
|
||||
}
|
||||
}
|
||||
|
||||
td a {
|
||||
color: inherit;
|
||||
@include _(opacity, 0.85);
|
||||
}
|
||||
|
||||
.variable {
|
||||
color: $colour-1;
|
||||
font-weight: bold;
|
||||
|
||||
&.special {
|
||||
color: $colour-4;
|
||||
}
|
||||
}
|
||||
|
||||
.parent-keys span {
|
||||
color: transparent;
|
||||
width: 1em;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
a {
|
||||
display: block;
|
||||
|
||||
&:after {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
tr.selectable-key:hover {
|
||||
background-color: $colour-1;
|
||||
|
||||
a {
|
||||
color: $white;
|
||||
|
||||
.variable {
|
||||
color: inherit;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.lingua-franca-value {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
@include breakpoint(medium) {
|
||||
#lingua-franca-keys {
|
||||
.lingua-franca-value {
|
||||
display: table-cell;
|
||||
}
|
||||
}
|
||||
|
||||
.lingua-franca-navigation {
|
||||
ul {
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
font-weight: normal;
|
||||
@include font-family(secondary);
|
||||
|
||||
ul {
|
||||
margin-left: 1em;
|
||||
margin-bottom: 1em;
|
||||
@include font-family(primary);
|
||||
}
|
||||
}
|
||||
|
||||
.current {
|
||||
@include before {
|
||||
content: '';
|
||||
display: block;
|
||||
position: absolute;
|
||||
width: 0;
|
||||
height: 0;
|
||||
left: -1.5em;
|
||||
top: 0.6667em;
|
||||
border-width: 1em 0 1em 1em;
|
||||
border-color: transparent transparent transparent #333;
|
||||
border-style: solid;
|
||||
font-size: 0.25em;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@include breakpoint(large) {
|
||||
#lingua-franca-keys {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
#lingua-franca-translation-form {
|
||||
position: relative;
|
||||
padding: 1rem 7.5%;
|
||||
background-color: $white;
|
||||
@include default-box-shadow(top, 2);
|
||||
}
|
||||
}
|
||||
|
||||
.lingua-franca-translations {
|
||||
position: relative;
|
||||
@include default-box-shadow(top, 2);
|
||||
}
|
||||
|
||||
.lingua-franca-translations {
|
||||
.translation-examples, #lingua-franca-translation-history {
|
||||
padding: 0 7.5%;
|
||||
padding-bottom: 0.5vh;
|
||||
}
|
||||
}
|
||||
|
||||
html #lingua-franca-translation-form {
|
||||
@include _(box-shadow, none);
|
||||
}
|
||||
|
||||
.lingua-franca-translations .translation-examples ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
white-space: nowrap;
|
||||
overflow-x: auto;
|
||||
overflow-y: hidden;
|
||||
width: 100%;
|
||||
height: 6vh;
|
||||
padding-top: 0.25em;
|
||||
z-index: 1;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.lingua-franca-translations .translation-examples li {
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
width: 5vw;
|
||||
height: 5vh;
|
||||
margin: 0 0.5em;
|
||||
|
||||
@include after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
cursor: pointer;
|
||||
outline: 0.25em solid rgba($colour-2, 0.25);
|
||||
background-color: rgba($colour-2, 0.25);
|
||||
outline-color: rgba($colour-2, 0.25);
|
||||
@include _(transition, '#{background-color, outline-color 250ms, 250ms ease-in-out, ease-in-out}');
|
||||
}
|
||||
|
||||
iframe {
|
||||
@include _(transform, scale(0.05) translate(-950vw, -950vh));
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
@include _(transform-origin, 50% 50%);
|
||||
//@include _(transition, '#{transform, position, z-index 250ms, 250ms, 0 ease-in-out, ease-in-out, linear 0, 250ms, 0}');
|
||||
position: fixed;
|
||||
margin: auto
|
||||
}
|
||||
|
||||
&:hover {
|
||||
@include after {
|
||||
background-color: rgba($colour-3, 0);
|
||||
outline-color: rgba($colour-3, 0.5);
|
||||
}
|
||||
}
|
||||
|
||||
&.open {
|
||||
iframe {
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 100;
|
||||
//margin: auto;
|
||||
@include _(transform, scale(0.75) translate(0, 0));
|
||||
@include default-box-shadow(top, 2);
|
||||
|
||||
//@include breakpoint(large) {
|
||||
// left: 8.75rem;
|
||||
//}
|
||||
}
|
||||
|
||||
@include after {
|
||||
left: 0;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background-color: rgba($colour-3, 0.5);
|
||||
position: fixed;
|
||||
z-index: 99;
|
||||
}
|
||||
}
|
||||
|
||||
@include breakpoint(large) {
|
||||
&.open {
|
||||
iframe {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
@include _(transform, scale(0.9) translate(0, 0));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.highlight-key {
|
||||
outline: 3rem solid rgba($colour-2, 0.5);
|
||||
}
|
||||
|
||||
#lingua-franca-translation-form button[type="submit"] {
|
||||
margin-right: 0.25em;
|
||||
}
|
||||
|
||||
#lingua-franca-keys .translation-history {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#lingua-franca-translation-history .translation-diff-info,
|
||||
#lingua-franca-translation-history .diff {
|
||||
@include clearfix;
|
||||
}
|
||||
#lingua-franca-translation-history .diff ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
#lingua-franca-translation-history .translation-diff-info li {
|
||||
margin-bottom: 0.5em;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
#lingua-franca-translation-history .translation-diff-info li,
|
||||
#lingua-franca-translation-history .diff li {
|
||||
width: 50%;
|
||||
display: inline-block;
|
||||
float: left;
|
||||
}
|
||||
|
||||
#lingua-franca-keys td a .undefined {
|
||||
font-style: italic;
|
||||
color: #888;
|
||||
}
|
||||
|
||||
.lingua-franca-translations {
|
||||
position: fixed;
|
||||
z-index: -2;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
height: 100%;
|
||||
background-color: $white;
|
||||
@include _(transform, scale(0));
|
||||
$transition-time: 250ms;
|
||||
@include _(transition, #{transform $transition-time ease-in-out, z-index 0ms linear $transition-time});
|
||||
|
||||
&.editing {
|
||||
z-index: 98;
|
||||
@include _(transform, scale(1));
|
||||
@include _(transition, transform $transition-time ease-in-out);
|
||||
}
|
||||
}
|
||||
|
||||
.actions {
|
||||
margin-top: 1em;
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"stylesheets": ["application", "editor"],
|
||||
"stylesheets": ["application", "editor", "admin"],
|
||||
"precompile": {
|
||||
"test": {
|
||||
"safari": ["5"],
|
||||
|
4
app/assets/stylesheets/font-awesome.min.css
vendored
4
app/assets/stylesheets/font-awesome.min.css
vendored
File diff suppressed because one or more lines are too long
@ -41,11 +41,11 @@ class ApplicationController < BaseController
|
||||
@conference = @conferences.first
|
||||
|
||||
# add some style sheets
|
||||
@stylesheets ||= Array.new
|
||||
@stylesheets ||= Set.new
|
||||
# add the translations stylesheet if translating
|
||||
@stylesheets << params[:controller] if params[:controller] == 'translations'
|
||||
|
||||
@_inline_scripts ||= []
|
||||
@_inline_scripts ||= Set.new
|
||||
@_inline_scripts << Rails.application.assets.find_asset('main.js').to_s
|
||||
|
||||
ActionMailer::Base.default_url_options = {
|
||||
|
@ -150,24 +150,24 @@ module FormHelper
|
||||
html_name = name.to_s + (options[:index] ? "[#{options[:index]}]" : '')
|
||||
if options[:plain]
|
||||
html += (text_area_tag html_name, value,
|
||||
id: id,
|
||||
lang: options[:lang],
|
||||
aria: aria,
|
||||
class: css_class
|
||||
id: id,
|
||||
lang: options[:lang],
|
||||
aria: aria,
|
||||
class: css_class
|
||||
)
|
||||
else
|
||||
html += content_tag(:div, value.present? ? value.html_safe : '',
|
||||
html += content_tag(:div,
|
||||
content_tag(:div, (value || '').html_safe, class: :editor).html_safe,
|
||||
id: id,
|
||||
data: { name: html_name, 'edit-on': options[:edit_on] || :load },
|
||||
data: { name: html_name },
|
||||
lang: options[:lang],
|
||||
aria: aria,
|
||||
tabindex: 0,
|
||||
class: [:textarea] + css_class
|
||||
)
|
||||
|
||||
add_stylesheet :editor
|
||||
add_inline_script :pen
|
||||
add_inline_script :markdown
|
||||
add_stylesheet 'quill.css'
|
||||
add_javascript :quill
|
||||
add_inline_script :editor
|
||||
end
|
||||
|
||||
|
@ -2,24 +2,32 @@
|
||||
module I18nHelper
|
||||
def url_for_locale(locale, url = nil)
|
||||
return url unless locale.present?
|
||||
|
||||
unless url.present?
|
||||
new_params = params.merge({action: (params[:_original_action] || params[:action])})
|
||||
new_params.delete(:_original_action)
|
||||
|
||||
if Rails.env.development? || Rails.env.test?
|
||||
return url_for(new_params.merge({lang: locale.to_s}))
|
||||
end
|
||||
|
||||
subdomain = Rails.env.preview? ? "preview-#{locale.to_s}" : locale.to_s
|
||||
return url_for(new_params.merge(host: "#{subdomain}.bikebike.org"))
|
||||
end
|
||||
url ||= current_path
|
||||
|
||||
return url if Rails.env.development? || Rails.env.test?
|
||||
return "https://preview-#{locale.to_s}.bikebike.org#{url}" if Rails.env.preview?
|
||||
"https://#{locale.to_s}.bikebike.org#{url}"
|
||||
end
|
||||
|
||||
def current_path
|
||||
new_params = params.merge({action: (params[:_original_action] || params[:action])})
|
||||
new_params.delete(:_original_action)
|
||||
|
||||
if Rails.env.development? || Rails.env.test?
|
||||
return url_for(new_params.merge({lang: locale.to_s}))
|
||||
end
|
||||
|
||||
subdomain = Rails.env.preview? ? "preview-#{locale.to_s}" : locale.to_s
|
||||
url_for(new_params.merge(host: "#{subdomain}.bikebike.org"))
|
||||
end
|
||||
|
||||
def canonical_url
|
||||
url = current_path
|
||||
return url if Rails.env.development? || Rails.env.test?
|
||||
return "https://preview.bikebike.org#{url}" if Rails.env.preview?
|
||||
"https://bikebike.org#{url}"
|
||||
end
|
||||
|
||||
def date(date, format = :long)
|
||||
I18n.l(date.is_a?(String) ? Date.parse(date) : date, :format => format)
|
||||
end
|
||||
|
@ -24,8 +24,8 @@ module PageHelper
|
||||
end
|
||||
|
||||
def add_stylesheet(sheet)
|
||||
@stylesheets ||= []
|
||||
@stylesheets << sheet unless @stylesheets.include?(sheet)
|
||||
@stylesheets ||= Set.new
|
||||
@stylesheets << sheet
|
||||
end
|
||||
|
||||
def stylesheets
|
||||
@ -35,22 +35,35 @@ module PageHelper
|
||||
end
|
||||
(@stylesheets || []).each do |css|
|
||||
Rack::MiniProfiler.step("inject_css #{css}") do
|
||||
html += inject_css! css.to_s
|
||||
if css =~ /\.css$/
|
||||
html += stylesheet_link_tag css
|
||||
else
|
||||
html += inject_css! css.to_s
|
||||
end
|
||||
end
|
||||
end
|
||||
html += stylesheet_link_tag 'i18n-debug' if request.params['i18nDebug']
|
||||
return html.html_safe
|
||||
end
|
||||
|
||||
def add_javascript(script)
|
||||
@javascripts ||= Set.new
|
||||
@javascripts << script
|
||||
end
|
||||
|
||||
def javascripts
|
||||
(@javascripts || []).map { |js| javascript_include_tag js.to_s }.join.html_safe
|
||||
end
|
||||
|
||||
def add_inline_script(script)
|
||||
@_inline_scripts ||= []
|
||||
@_inline_scripts ||= Set.new
|
||||
script = Rails.application.assets.find_asset("#{script.to_s}.js").to_s
|
||||
@_inline_scripts << script unless @_inline_scripts.include?(script)
|
||||
@_inline_scripts << script
|
||||
end
|
||||
|
||||
def inline_scripts
|
||||
return '' unless @_inline_scripts.present?
|
||||
"<script>#{@_inline_scripts.join("\n")}</script>".html_safe
|
||||
javascript_tag @_inline_scripts.to_a.join("\n").html_safe
|
||||
end
|
||||
|
||||
def dom_ready(&block)
|
||||
|
@ -1,4 +1,5 @@
|
||||
- body_class 'banner-bottom' unless @this_conference.poster.present?
|
||||
- add_stylesheet :admin
|
||||
- content_for :banner do
|
||||
= render :partial => 'application/header', :locals => { page_group: :administration, page_key: 'Administration', image_file: @this_conference.poster_url || 'admin.jpg'}
|
||||
|
||||
|
@ -1,4 +1,5 @@
|
||||
- body_class 'banner-bottom' unless @this_conference.poster.present?
|
||||
- add_stylesheet :admin
|
||||
- content_for :banner do
|
||||
= render :partial => 'application/header', :locals => { page_group: :administration, page_key: 'Administration', image_file: @this_conference.poster_url || 'admin.jpg'}
|
||||
|
||||
|
@ -12,6 +12,7 @@
|
||||
%link{ href: asset_path(@favicon), rel: 'icon', type: 'image/x-icon' }
|
||||
- @alt_lang_urls.each do |locale, url|
|
||||
%link{ rel: :alternate, hreflang: locale, href: url }
|
||||
%link{ href: canonical_url, rel: :canonical }
|
||||
- if content_for?(:og_image)
|
||||
- og_image = yield :og_image
|
||||
- og_image = request.base_url + og_image
|
||||
@ -80,5 +81,6 @@
|
||||
%a.more-details.button{href: '#'}=_'articles.workshops.info.read_more'
|
||||
%button.close-btn.subdued=_'forms.actions.generic.close'
|
||||
= yield :footer_scripts if content_for?(:footer_scripts)
|
||||
= javascripts
|
||||
= inline_scripts
|
||||
= emit_js_translations
|
||||
|
@ -8,4 +8,4 @@ Rails.application.config.assets.version = '1.0'
|
||||
|
||||
# Precompile additional assets.
|
||||
# application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
|
||||
Rails.application.config.assets.precompile += %w( topojson.js pen.js *.js user-mailer.css favicon.ico )
|
||||
Rails.application.config.assets.precompile += %w( quill.js quill.css topojson.js pen.js *.js user-mailer.css favicon.ico )
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -13,7 +13,7 @@ Feature: Contact Us
|
||||
And select 'Something about the website'
|
||||
And enter a subject as 'My Contact Subject'
|
||||
And enter a message as 'My contact message'
|
||||
And press 'Send'
|
||||
And press send
|
||||
|
||||
Then I should be on the contact_sent page
|
||||
And I should see 'Thank you for contacting us'
|
||||
@ -31,7 +31,7 @@ Feature: Contact Us
|
||||
And select 'Something about the website'
|
||||
And enter a subject as 'My Contact Subject'
|
||||
And enter a message as 'My contact message'
|
||||
And press 'Send'
|
||||
And press send
|
||||
|
||||
Then I should be on the contact_sent page
|
||||
And I should see 'Thank you for contacting us'
|
||||
|
@ -88,6 +88,7 @@ Then /^(?:I )?enter (?:my |an? |some |the )?(.+?)(?: as '(.+)')?$/i do |field, v
|
||||
|
||||
sel = selector_for(field)
|
||||
element = first(sel, visible: true) || first(sel, visible: false)
|
||||
element = element.first('[contenteditable]') if element.tag_name.to_s.downcase == 'div'
|
||||
|
||||
unless value.present?
|
||||
value = case field
|
||||
|
@ -11,7 +11,7 @@ DatabaseCleaner.strategy = :truncation, { except: %w[cities city_cache] }
|
||||
Capybara.register_driver :bb_poltergeist do |app|
|
||||
if ENV['CSS_TEST']
|
||||
Marmara.options = {
|
||||
ignore: [/paypal\./],
|
||||
ignore: [/paypal(?:objects)?/, 'assets.css'],
|
||||
rewrite: {
|
||||
from: /^.*\/(.*?)\/.*?\.css$/,
|
||||
to: '\1.css'
|
||||
|
@ -49,3 +49,455 @@ Brooklyn NY: !ruby/object:Geocoder::Result::Google
|
||||
- sublocality
|
||||
- sublocality_level_1
|
||||
cache_hit:
|
||||
Yellowknife: !ruby/object:Geocoder::Result::Google
|
||||
data:
|
||||
address_components:
|
||||
- long_name: Yellowknife
|
||||
short_name: Yellowknife
|
||||
types:
|
||||
- locality
|
||||
- political
|
||||
- long_name: Fort Smith, Unorganized
|
||||
short_name: Fort Smith, Unorganized
|
||||
types:
|
||||
- administrative_area_level_3
|
||||
- political
|
||||
- long_name: Fort Smith Region
|
||||
short_name: Fort Smith Region
|
||||
types:
|
||||
- administrative_area_level_2
|
||||
- political
|
||||
- long_name: Northwest Territories
|
||||
short_name: NT
|
||||
types:
|
||||
- administrative_area_level_1
|
||||
- political
|
||||
- long_name: Canada
|
||||
short_name: CA
|
||||
types:
|
||||
- country
|
||||
- political
|
||||
- long_name: X0E
|
||||
short_name: X0E
|
||||
types:
|
||||
- postal_code
|
||||
- postal_code_prefix
|
||||
formatted_address: Yellowknife, NT X0E, Canada
|
||||
geometry:
|
||||
bounds:
|
||||
northeast:
|
||||
lat: 62.5412576
|
||||
lng: -114.299678
|
||||
southwest:
|
||||
lat: 62.4084661
|
||||
lng: -114.518312
|
||||
location:
|
||||
lat: 62.4539717
|
||||
lng: -114.3717886
|
||||
location_type: APPROXIMATE
|
||||
viewport:
|
||||
northeast:
|
||||
lat: 62.5412577
|
||||
lng: -114.299678
|
||||
southwest:
|
||||
lat: 62.4084945
|
||||
lng: -114.518312
|
||||
place_id: ChIJyYJGoyzx0VMRge9xQyQ3wbQ
|
||||
types:
|
||||
- locality
|
||||
- political
|
||||
cache_hit:
|
||||
New Orleans: !ruby/object:Geocoder::Result::Google
|
||||
data:
|
||||
address_components:
|
||||
- long_name: New Orleans
|
||||
short_name: New Orleans
|
||||
types:
|
||||
- locality
|
||||
- political
|
||||
- long_name: Orleans Parish
|
||||
short_name: Orleans Parish
|
||||
types:
|
||||
- administrative_area_level_2
|
||||
- political
|
||||
- long_name: Louisiana
|
||||
short_name: LA
|
||||
types:
|
||||
- administrative_area_level_1
|
||||
- political
|
||||
- long_name: United States
|
||||
short_name: US
|
||||
types:
|
||||
- country
|
||||
- political
|
||||
formatted_address: New Orleans, LA, USA
|
||||
geometry:
|
||||
bounds:
|
||||
northeast:
|
||||
lat: 30.199332
|
||||
lng: -89.625053
|
||||
southwest:
|
||||
lat: 29.8666609
|
||||
lng: -90.14007389999999
|
||||
location:
|
||||
lat: 29.95106579999999
|
||||
lng: -90.0715323
|
||||
location_type: APPROXIMATE
|
||||
viewport:
|
||||
northeast:
|
||||
lat: 30.1748625
|
||||
lng: -89.6269311
|
||||
southwest:
|
||||
lat: 29.86842459999999
|
||||
lng: -90.1380099
|
||||
place_id: ChIJZYIRslSkIIYRtNMiXuhbBts
|
||||
types:
|
||||
- locality
|
||||
- political
|
||||
cache_hit:
|
||||
Drumheller AB: !ruby/object:Geocoder::Result::Google
|
||||
data:
|
||||
address_components:
|
||||
- long_name: Drumheller
|
||||
short_name: Drumheller
|
||||
types:
|
||||
- locality
|
||||
- political
|
||||
- long_name: Division No. 5
|
||||
short_name: Division No. 5
|
||||
types:
|
||||
- administrative_area_level_2
|
||||
- political
|
||||
- long_name: Alberta
|
||||
short_name: AB
|
||||
types:
|
||||
- administrative_area_level_1
|
||||
- political
|
||||
- long_name: Canada
|
||||
short_name: CA
|
||||
types:
|
||||
- country
|
||||
- political
|
||||
formatted_address: Drumheller, AB, Canada
|
||||
geometry:
|
||||
bounds:
|
||||
northeast:
|
||||
lat: 51.488701
|
||||
lng: -112.4530051
|
||||
southwest:
|
||||
lat: 51.3208389
|
||||
lng: -112.806076
|
||||
location:
|
||||
lat: 51.4651847
|
||||
lng: -112.7105343
|
||||
location_type: APPROXIMATE
|
||||
viewport:
|
||||
northeast:
|
||||
lat: 51.488701
|
||||
lng: -112.4530051
|
||||
southwest:
|
||||
lat: 51.3208389
|
||||
lng: -112.806076
|
||||
place_id: ChIJHx_0B4ANc1MRWZCRwItZUUw
|
||||
types:
|
||||
- locality
|
||||
- political
|
||||
cache_hit:
|
||||
Portland OR: !ruby/object:Geocoder::Result::Google
|
||||
data:
|
||||
address_components:
|
||||
- long_name: Portland
|
||||
short_name: Portland
|
||||
types:
|
||||
- locality
|
||||
- political
|
||||
- long_name: Multnomah County
|
||||
short_name: Multnomah County
|
||||
types:
|
||||
- administrative_area_level_2
|
||||
- political
|
||||
- long_name: Oregon
|
||||
short_name: OR
|
||||
types:
|
||||
- administrative_area_level_1
|
||||
- political
|
||||
- long_name: United States
|
||||
short_name: US
|
||||
types:
|
||||
- country
|
||||
- political
|
||||
formatted_address: Portland, OR, USA
|
||||
geometry:
|
||||
bounds:
|
||||
northeast:
|
||||
lat: 45.654424
|
||||
lng: -122.4718489
|
||||
southwest:
|
||||
lat: 45.432393
|
||||
lng: -122.8369952
|
||||
location:
|
||||
lat: 45.5230622
|
||||
lng: -122.6764816
|
||||
location_type: APPROXIMATE
|
||||
viewport:
|
||||
northeast:
|
||||
lat: 45.6524799
|
||||
lng: -122.4718489
|
||||
southwest:
|
||||
lat: 45.432393
|
||||
lng: -122.8369952
|
||||
place_id: ChIJJ3SpfQsLlVQRkYXR9ua5Nhw
|
||||
types:
|
||||
- locality
|
||||
- political
|
||||
cache_hit:
|
||||
Prince Rupert BC: !ruby/object:Geocoder::Result::Google
|
||||
data:
|
||||
address_components:
|
||||
- long_name: Prince Rupert
|
||||
short_name: Prince Rupert
|
||||
types:
|
||||
- locality
|
||||
- political
|
||||
- long_name: Skeena-Queen Charlotte
|
||||
short_name: Skeena-Queen Charlotte
|
||||
types:
|
||||
- administrative_area_level_2
|
||||
- political
|
||||
- long_name: British Columbia
|
||||
short_name: BC
|
||||
types:
|
||||
- administrative_area_level_1
|
||||
- political
|
||||
- long_name: Canada
|
||||
short_name: CA
|
||||
types:
|
||||
- country
|
||||
- political
|
||||
formatted_address: Prince Rupert, BC, Canada
|
||||
geometry:
|
||||
bounds:
|
||||
northeast:
|
||||
lat: 54.338083
|
||||
lng: -130.2437961
|
||||
southwest:
|
||||
lat: 54.19392
|
||||
lng: -130.3634291
|
||||
location:
|
||||
lat: 54.3150367
|
||||
lng: -130.3208187
|
||||
location_type: APPROXIMATE
|
||||
viewport:
|
||||
northeast:
|
||||
lat: 54.3343706
|
||||
lng: -130.2478032
|
||||
southwest:
|
||||
lat: 54.202669
|
||||
lng: -130.3608029
|
||||
place_id: ChIJaUV_axPVclQRElbZTQ_jB3E
|
||||
types:
|
||||
- locality
|
||||
- political
|
||||
cache_hit:
|
||||
Regina, SK: !ruby/object:Geocoder::Result::Google
|
||||
data:
|
||||
address_components:
|
||||
- long_name: Regina
|
||||
short_name: Regina
|
||||
types:
|
||||
- locality
|
||||
- political
|
||||
- long_name: Sherwood No. 159
|
||||
short_name: Sherwood No. 159
|
||||
types:
|
||||
- administrative_area_level_3
|
||||
- political
|
||||
- long_name: Division No. 6
|
||||
short_name: Division No. 6
|
||||
types:
|
||||
- administrative_area_level_2
|
||||
- political
|
||||
- long_name: Saskatchewan
|
||||
short_name: SK
|
||||
types:
|
||||
- administrative_area_level_1
|
||||
- political
|
||||
- long_name: Canada
|
||||
short_name: CA
|
||||
types:
|
||||
- country
|
||||
- political
|
||||
formatted_address: Regina, SK, Canada
|
||||
geometry:
|
||||
bounds:
|
||||
northeast:
|
||||
lat: 50.5207396
|
||||
lng: -104.4924259
|
||||
southwest:
|
||||
lat: 50.3964489
|
||||
lng: -104.7783923
|
||||
location:
|
||||
lat: 50.4452112
|
||||
lng: -104.6188944
|
||||
location_type: APPROXIMATE
|
||||
viewport:
|
||||
northeast:
|
||||
lat: 50.5207396
|
||||
lng: -104.4924259
|
||||
southwest:
|
||||
lat: 50.3964489
|
||||
lng: -104.7783923
|
||||
place_id: ChIJ6z2l-0AeHFMRsVR7t5YySjU
|
||||
types:
|
||||
- locality
|
||||
- political
|
||||
cache_hit:
|
||||
Edmundston, NB: !ruby/object:Geocoder::Result::Google
|
||||
data:
|
||||
address_components:
|
||||
- long_name: Edmundston
|
||||
short_name: Edmundston
|
||||
types:
|
||||
- locality
|
||||
- political
|
||||
- long_name: Madawaska County
|
||||
short_name: Madawaska County
|
||||
types:
|
||||
- administrative_area_level_2
|
||||
- political
|
||||
- long_name: New Brunswick
|
||||
short_name: NB
|
||||
types:
|
||||
- administrative_area_level_1
|
||||
- political
|
||||
- long_name: Canada
|
||||
short_name: CA
|
||||
types:
|
||||
- country
|
||||
- political
|
||||
formatted_address: Edmundston, NB, Canada
|
||||
geometry:
|
||||
bounds:
|
||||
northeast:
|
||||
lat: 47.456634
|
||||
lng: -68.14554509999999
|
||||
southwest:
|
||||
lat: 47.3177789
|
||||
lng: -68.44122399999999
|
||||
location:
|
||||
lat: 47.3690127
|
||||
lng: -68.32667409999999
|
||||
location_type: APPROXIMATE
|
||||
viewport:
|
||||
northeast:
|
||||
lat: 47.456634
|
||||
lng: -68.14554509999999
|
||||
southwest:
|
||||
lat: 47.3183866
|
||||
lng: -68.44122399999999
|
||||
place_id: ChIJuQPKxpipvUwRtNjzmeech34
|
||||
types:
|
||||
- locality
|
||||
- political
|
||||
cache_hit:
|
||||
Souris, MB: !ruby/object:Geocoder::Result::Google
|
||||
data:
|
||||
address_components:
|
||||
- long_name: Souris
|
||||
short_name: Souris
|
||||
types:
|
||||
- locality
|
||||
- political
|
||||
- long_name: Glenwood
|
||||
short_name: Glenwood
|
||||
types:
|
||||
- administrative_area_level_3
|
||||
- political
|
||||
- long_name: Division No. 7
|
||||
short_name: Division No. 7
|
||||
types:
|
||||
- administrative_area_level_2
|
||||
- political
|
||||
- long_name: Manitoba
|
||||
short_name: MB
|
||||
types:
|
||||
- administrative_area_level_1
|
||||
- political
|
||||
- long_name: Canada
|
||||
short_name: CA
|
||||
types:
|
||||
- country
|
||||
- political
|
||||
- long_name: R0K
|
||||
short_name: R0K
|
||||
types:
|
||||
- postal_code
|
||||
- postal_code_prefix
|
||||
formatted_address: Souris, MB R0K, Canada
|
||||
geometry:
|
||||
bounds:
|
||||
northeast:
|
||||
lat: 49.6272052
|
||||
lng: -100.2464522
|
||||
southwest:
|
||||
lat: 49.6061908
|
||||
lng: -100.2774639
|
||||
location:
|
||||
lat: 49.6207985
|
||||
lng: -100.2583026
|
||||
location_type: APPROXIMATE
|
||||
viewport:
|
||||
northeast:
|
||||
lat: 49.6272052
|
||||
lng: -100.2464522
|
||||
southwest:
|
||||
lat: 49.6061908
|
||||
lng: -100.2774639
|
||||
place_id: ChIJjVrTVVh851IRLuGKzGdiUj8
|
||||
types:
|
||||
- locality
|
||||
- political
|
||||
cache_hit:
|
||||
Eldorado, MX: !ruby/object:Geocoder::Result::Google
|
||||
data:
|
||||
address_components:
|
||||
- long_name: Eldorado
|
||||
short_name: Eldorado
|
||||
types:
|
||||
- locality
|
||||
- political
|
||||
- long_name: Sinaloa
|
||||
short_name: Sin.
|
||||
types:
|
||||
- administrative_area_level_1
|
||||
- political
|
||||
- long_name: Mexico
|
||||
short_name: MX
|
||||
types:
|
||||
- country
|
||||
- political
|
||||
formatted_address: Eldorado, Sin., Mexico
|
||||
geometry:
|
||||
bounds:
|
||||
northeast:
|
||||
lat: 24.3379838
|
||||
lng: -107.3476352
|
||||
southwest:
|
||||
lat: 24.3108689
|
||||
lng: -107.3831387
|
||||
location:
|
||||
lat: 24.3240714
|
||||
lng: -107.3584174
|
||||
location_type: APPROXIMATE
|
||||
viewport:
|
||||
northeast:
|
||||
lat: 24.3379838
|
||||
lng: -107.3476352
|
||||
southwest:
|
||||
lat: 24.3108689
|
||||
lng: -107.3831387
|
||||
place_id: ChIJv33Pqm0ho4YRUQ45wKAluZ4
|
||||
types:
|
||||
- locality
|
||||
- political
|
||||
cache_hit:
|
||||
|
@ -320,4 +320,4 @@ Feature: Workshops
|
||||
And click the 'Reply' button
|
||||
|
||||
Then I should see 'If we can find a Canadian facilitator'
|
||||
And 'Geronimo' should get a 'replied' email
|
||||
And 'Geronimo' should get a 'replied' email
|
||||
|
10576
vendor/assets/javascripts/quill.js
vendored
Normal file
10576
vendor/assets/javascripts/quill.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
899
vendor/assets/stylesheets/quill.css
vendored
Normal file
899
vendor/assets/stylesheets/quill.css
vendored
Normal file
@ -0,0 +1,899 @@
|
||||
/*!
|
||||
* Quill Editor v1.1.9
|
||||
* https://quilljs.com/
|
||||
* Copyright (c) 2014, Jason Chen
|
||||
* Copyright (c) 2013, salesforce.com
|
||||
*/
|
||||
.ql-container {
|
||||
box-sizing: border-box;
|
||||
font-family: Helvetica, Arial, sans-serif;
|
||||
font-size: 13px;
|
||||
height: 100%;
|
||||
margin: 0px;
|
||||
position: relative;
|
||||
}
|
||||
.ql-container.ql-disabled .ql-tooltip {
|
||||
visibility: hidden;
|
||||
}
|
||||
.ql-clipboard {
|
||||
left: -100000px;
|
||||
height: 1px;
|
||||
overflow-y: hidden;
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
}
|
||||
.ql-clipboard p {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.ql-editor {
|
||||
box-sizing: border-box;
|
||||
cursor: text;
|
||||
line-height: 1.42;
|
||||
height: 100%;
|
||||
outline: none;
|
||||
overflow-y: auto;
|
||||
padding: 12px 15px;
|
||||
tab-size: 4;
|
||||
-moz-tab-size: 4;
|
||||
text-align: left;
|
||||
white-space: pre-wrap;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
.ql-editor p,
|
||||
.ql-editor ol,
|
||||
.ql-editor ul,
|
||||
.ql-editor pre,
|
||||
.ql-editor blockquote,
|
||||
.ql-editor h1,
|
||||
.ql-editor h2,
|
||||
.ql-editor h3,
|
||||
.ql-editor h4,
|
||||
.ql-editor h5,
|
||||
.ql-editor h6 {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
counter-reset: list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;
|
||||
}
|
||||
.ql-editor ol,
|
||||
.ql-editor ul {
|
||||
padding-left: 1.5em;
|
||||
}
|
||||
.ql-editor ol > li,
|
||||
.ql-editor ul > li {
|
||||
list-style-type: none;
|
||||
}
|
||||
.ql-editor ul > li::before {
|
||||
content: '\25CF';
|
||||
}
|
||||
.ql-editor ul[data-checked=true] > li::before,
|
||||
.ql-editor ul[data-checked=false] > li::before {
|
||||
color: #777;
|
||||
cursor: pointer;
|
||||
}
|
||||
.ql-editor ul[data-checked=true] > li::before {
|
||||
content: '\2611';
|
||||
}
|
||||
.ql-editor ul[data-checked=false] > li::before {
|
||||
content: '\2610';
|
||||
}
|
||||
.ql-editor li::before {
|
||||
display: inline-block;
|
||||
margin-right: 0.3em;
|
||||
text-align: right;
|
||||
white-space: nowrap;
|
||||
width: 1.2em;
|
||||
}
|
||||
.ql-editor li:not(.ql-direction-rtl)::before {
|
||||
margin-left: -1.5em;
|
||||
}
|
||||
.ql-editor ol li,
|
||||
.ql-editor ul li {
|
||||
padding-left: 1.5em;
|
||||
}
|
||||
.ql-editor ol li {
|
||||
counter-reset: list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;
|
||||
counter-increment: list-num;
|
||||
}
|
||||
.ql-editor ol li:before {
|
||||
content: counter(list-num, decimal) '. ';
|
||||
}
|
||||
.ql-editor ol li.ql-indent-1 {
|
||||
counter-increment: list-1;
|
||||
}
|
||||
.ql-editor ol li.ql-indent-1:before {
|
||||
content: counter(list-1, lower-alpha) '. ';
|
||||
}
|
||||
.ql-editor ol li.ql-indent-1 {
|
||||
counter-reset: list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;
|
||||
}
|
||||
.ql-editor ol li.ql-indent-2 {
|
||||
counter-increment: list-2;
|
||||
}
|
||||
.ql-editor ol li.ql-indent-2:before {
|
||||
content: counter(list-2, lower-roman) '. ';
|
||||
}
|
||||
.ql-editor ol li.ql-indent-2 {
|
||||
counter-reset: list-3 list-4 list-5 list-6 list-7 list-8 list-9;
|
||||
}
|
||||
.ql-editor ol li.ql-indent-3 {
|
||||
counter-increment: list-3;
|
||||
}
|
||||
.ql-editor ol li.ql-indent-3:before {
|
||||
content: counter(list-3, decimal) '. ';
|
||||
}
|
||||
.ql-editor ol li.ql-indent-3 {
|
||||
counter-reset: list-4 list-5 list-6 list-7 list-8 list-9;
|
||||
}
|
||||
.ql-editor ol li.ql-indent-4 {
|
||||
counter-increment: list-4;
|
||||
}
|
||||
.ql-editor ol li.ql-indent-4:before {
|
||||
content: counter(list-4, lower-alpha) '. ';
|
||||
}
|
||||
.ql-editor ol li.ql-indent-4 {
|
||||
counter-reset: list-5 list-6 list-7 list-8 list-9;
|
||||
}
|
||||
.ql-editor ol li.ql-indent-5 {
|
||||
counter-increment: list-5;
|
||||
}
|
||||
.ql-editor ol li.ql-indent-5:before {
|
||||
content: counter(list-5, lower-roman) '. ';
|
||||
}
|
||||
.ql-editor ol li.ql-indent-5 {
|
||||
counter-reset: list-6 list-7 list-8 list-9;
|
||||
}
|
||||
.ql-editor ol li.ql-indent-6 {
|
||||
counter-increment: list-6;
|
||||
}
|
||||
.ql-editor ol li.ql-indent-6:before {
|
||||
content: counter(list-6, decimal) '. ';
|
||||
}
|
||||
.ql-editor ol li.ql-indent-6 {
|
||||
counter-reset: list-7 list-8 list-9;
|
||||
}
|
||||
.ql-editor ol li.ql-indent-7 {
|
||||
counter-increment: list-7;
|
||||
}
|
||||
.ql-editor ol li.ql-indent-7:before {
|
||||
content: counter(list-7, lower-alpha) '. ';
|
||||
}
|
||||
.ql-editor ol li.ql-indent-7 {
|
||||
counter-reset: list-8 list-9;
|
||||
}
|
||||
.ql-editor ol li.ql-indent-8 {
|
||||
counter-increment: list-8;
|
||||
}
|
||||
.ql-editor ol li.ql-indent-8:before {
|
||||
content: counter(list-8, lower-roman) '. ';
|
||||
}
|
||||
.ql-editor ol li.ql-indent-8 {
|
||||
counter-reset: list-9;
|
||||
}
|
||||
.ql-editor ol li.ql-indent-9 {
|
||||
counter-increment: list-9;
|
||||
}
|
||||
.ql-editor ol li.ql-indent-9:before {
|
||||
content: counter(list-9, decimal) '. ';
|
||||
}
|
||||
.ql-editor .ql-indent-1:not(.ql-direction-rtl) {
|
||||
padding-left: 3em;
|
||||
}
|
||||
.ql-editor li.ql-indent-1:not(.ql-direction-rtl) {
|
||||
padding-left: 4.5em;
|
||||
}
|
||||
.ql-editor .ql-indent-1.ql-direction-rtl.ql-align-right {
|
||||
padding-right: 3em;
|
||||
}
|
||||
.ql-editor li.ql-indent-1.ql-direction-rtl.ql-align-right {
|
||||
padding-right: 4.5em;
|
||||
}
|
||||
.ql-editor .ql-indent-2:not(.ql-direction-rtl) {
|
||||
padding-left: 6em;
|
||||
}
|
||||
.ql-editor li.ql-indent-2:not(.ql-direction-rtl) {
|
||||
padding-left: 7.5em;
|
||||
}
|
||||
.ql-editor .ql-indent-2.ql-direction-rtl.ql-align-right {
|
||||
padding-right: 6em;
|
||||
}
|
||||
.ql-editor li.ql-indent-2.ql-direction-rtl.ql-align-right {
|
||||
padding-right: 7.5em;
|
||||
}
|
||||
.ql-editor .ql-indent-3:not(.ql-direction-rtl) {
|
||||
padding-left: 9em;
|
||||
}
|
||||
.ql-editor li.ql-indent-3:not(.ql-direction-rtl) {
|
||||
padding-left: 10.5em;
|
||||
}
|
||||
.ql-editor .ql-indent-3.ql-direction-rtl.ql-align-right {
|
||||
padding-right: 9em;
|
||||
}
|
||||
.ql-editor li.ql-indent-3.ql-direction-rtl.ql-align-right {
|
||||
padding-right: 10.5em;
|
||||
}
|
||||
.ql-editor .ql-indent-4:not(.ql-direction-rtl) {
|
||||
padding-left: 12em;
|
||||
}
|
||||
.ql-editor li.ql-indent-4:not(.ql-direction-rtl) {
|
||||
padding-left: 13.5em;
|
||||
}
|
||||
.ql-editor .ql-indent-4.ql-direction-rtl.ql-align-right {
|
||||
padding-right: 12em;
|
||||
}
|
||||
.ql-editor li.ql-indent-4.ql-direction-rtl.ql-align-right {
|
||||
padding-right: 13.5em;
|
||||
}
|
||||
.ql-editor .ql-indent-5:not(.ql-direction-rtl) {
|
||||
padding-left: 15em;
|
||||
}
|
||||
.ql-editor li.ql-indent-5:not(.ql-direction-rtl) {
|
||||
padding-left: 16.5em;
|
||||
}
|
||||
.ql-editor .ql-indent-5.ql-direction-rtl.ql-align-right {
|
||||
padding-right: 15em;
|
||||
}
|
||||
.ql-editor li.ql-indent-5.ql-direction-rtl.ql-align-right {
|
||||
padding-right: 16.5em;
|
||||
}
|
||||
.ql-editor .ql-indent-6:not(.ql-direction-rtl) {
|
||||
padding-left: 18em;
|
||||
}
|
||||
.ql-editor li.ql-indent-6:not(.ql-direction-rtl) {
|
||||
padding-left: 19.5em;
|
||||
}
|
||||
.ql-editor .ql-indent-6.ql-direction-rtl.ql-align-right {
|
||||
padding-right: 18em;
|
||||
}
|
||||
.ql-editor li.ql-indent-6.ql-direction-rtl.ql-align-right {
|
||||
padding-right: 19.5em;
|
||||
}
|
||||
.ql-editor .ql-indent-7:not(.ql-direction-rtl) {
|
||||
padding-left: 21em;
|
||||
}
|
||||
.ql-editor li.ql-indent-7:not(.ql-direction-rtl) {
|
||||
padding-left: 22.5em;
|
||||
}
|
||||
.ql-editor .ql-indent-7.ql-direction-rtl.ql-align-right {
|
||||
padding-right: 21em;
|
||||
}
|
||||
.ql-editor li.ql-indent-7.ql-direction-rtl.ql-align-right {
|
||||
padding-right: 22.5em;
|
||||
}
|
||||
.ql-editor .ql-indent-8:not(.ql-direction-rtl) {
|
||||
padding-left: 24em;
|
||||
}
|
||||
.ql-editor li.ql-indent-8:not(.ql-direction-rtl) {
|
||||
padding-left: 25.5em;
|
||||
}
|
||||
.ql-editor .ql-indent-8.ql-direction-rtl.ql-align-right {
|
||||
padding-right: 24em;
|
||||
}
|
||||
.ql-editor li.ql-indent-8.ql-direction-rtl.ql-align-right {
|
||||
padding-right: 25.5em;
|
||||
}
|
||||
.ql-editor .ql-indent-9:not(.ql-direction-rtl) {
|
||||
padding-left: 27em;
|
||||
}
|
||||
.ql-editor li.ql-indent-9:not(.ql-direction-rtl) {
|
||||
padding-left: 28.5em;
|
||||
}
|
||||
.ql-editor .ql-indent-9.ql-direction-rtl.ql-align-right {
|
||||
padding-right: 27em;
|
||||
}
|
||||
.ql-editor li.ql-indent-9.ql-direction-rtl.ql-align-right {
|
||||
padding-right: 28.5em;
|
||||
}
|
||||
.ql-editor .ql-video {
|
||||
display: block;
|
||||
max-width: 100%;
|
||||
}
|
||||
.ql-editor .ql-video.ql-align-center {
|
||||
margin: 0 auto;
|
||||
}
|
||||
.ql-editor .ql-video.ql-align-right {
|
||||
margin: 0 0 0 auto;
|
||||
}
|
||||
.ql-editor .ql-bg-black {
|
||||
background-color: #000;
|
||||
}
|
||||
.ql-editor .ql-bg-red {
|
||||
background-color: #e60000;
|
||||
}
|
||||
.ql-editor .ql-bg-orange {
|
||||
background-color: #f90;
|
||||
}
|
||||
.ql-editor .ql-bg-yellow {
|
||||
background-color: #ff0;
|
||||
}
|
||||
.ql-editor .ql-bg-green {
|
||||
background-color: #008a00;
|
||||
}
|
||||
.ql-editor .ql-bg-blue {
|
||||
background-color: #06c;
|
||||
}
|
||||
.ql-editor .ql-bg-purple {
|
||||
background-color: #93f;
|
||||
}
|
||||
.ql-editor .ql-color-white {
|
||||
color: #fff;
|
||||
}
|
||||
.ql-editor .ql-color-red {
|
||||
color: #e60000;
|
||||
}
|
||||
.ql-editor .ql-color-orange {
|
||||
color: #f90;
|
||||
}
|
||||
.ql-editor .ql-color-yellow {
|
||||
color: #ff0;
|
||||
}
|
||||
.ql-editor .ql-color-green {
|
||||
color: #008a00;
|
||||
}
|
||||
.ql-editor .ql-color-blue {
|
||||
color: #06c;
|
||||
}
|
||||
.ql-editor .ql-color-purple {
|
||||
color: #93f;
|
||||
}
|
||||
.ql-editor .ql-font-serif {
|
||||
font-family: Georgia, Times New Roman, serif;
|
||||
}
|
||||
.ql-editor .ql-font-monospace {
|
||||
font-family: Monaco, Courier New, monospace;
|
||||
}
|
||||
.ql-editor .ql-size-small {
|
||||
font-size: 0.75em;
|
||||
}
|
||||
.ql-editor .ql-size-large {
|
||||
font-size: 1.5em;
|
||||
}
|
||||
.ql-editor .ql-size-huge {
|
||||
font-size: 2.5em;
|
||||
}
|
||||
.ql-editor .ql-direction-rtl {
|
||||
direction: rtl;
|
||||
text-align: inherit;
|
||||
}
|
||||
.ql-editor .ql-align-center {
|
||||
text-align: center;
|
||||
}
|
||||
.ql-editor .ql-align-justify {
|
||||
text-align: justify;
|
||||
}
|
||||
.ql-editor .ql-align-right {
|
||||
text-align: right;
|
||||
}
|
||||
.ql-editor.ql-blank::before {
|
||||
color: rgba(0,0,0,0.6);
|
||||
content: attr(data-placeholder);
|
||||
font-style: italic;
|
||||
pointer-events: none;
|
||||
position: absolute;
|
||||
}
|
||||
.ql-snow.ql-toolbar:after,
|
||||
.ql-snow .ql-toolbar:after {
|
||||
clear: both;
|
||||
content: '';
|
||||
display: table;
|
||||
}
|
||||
.ql-snow.ql-toolbar button,
|
||||
.ql-snow .ql-toolbar button {
|
||||
background: none;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
display: inline-block;
|
||||
float: left;
|
||||
height: 24px;
|
||||
padding: 3px 5px;
|
||||
width: 28px;
|
||||
}
|
||||
.ql-snow.ql-toolbar button svg,
|
||||
.ql-snow .ql-toolbar button svg {
|
||||
float: left;
|
||||
height: 100%;
|
||||
}
|
||||
.ql-snow.ql-toolbar button:active:hover,
|
||||
.ql-snow .ql-toolbar button:active:hover {
|
||||
outline: none;
|
||||
}
|
||||
.ql-snow.ql-toolbar input.ql-image[type=file],
|
||||
.ql-snow .ql-toolbar input.ql-image[type=file] {
|
||||
display: none;
|
||||
}
|
||||
.ql-snow.ql-toolbar button:hover,
|
||||
.ql-snow .ql-toolbar button:hover,
|
||||
.ql-snow.ql-toolbar button.ql-active,
|
||||
.ql-snow .ql-toolbar button.ql-active,
|
||||
.ql-snow.ql-toolbar .ql-picker-label:hover,
|
||||
.ql-snow .ql-toolbar .ql-picker-label:hover,
|
||||
.ql-snow.ql-toolbar .ql-picker-label.ql-active,
|
||||
.ql-snow .ql-toolbar .ql-picker-label.ql-active,
|
||||
.ql-snow.ql-toolbar .ql-picker-item:hover,
|
||||
.ql-snow .ql-toolbar .ql-picker-item:hover,
|
||||
.ql-snow.ql-toolbar .ql-picker-item.ql-selected,
|
||||
.ql-snow .ql-toolbar .ql-picker-item.ql-selected {
|
||||
color: #06c;
|
||||
}
|
||||
.ql-snow.ql-toolbar button:hover .ql-fill,
|
||||
.ql-snow .ql-toolbar button:hover .ql-fill,
|
||||
.ql-snow.ql-toolbar button.ql-active .ql-fill,
|
||||
.ql-snow .ql-toolbar button.ql-active .ql-fill,
|
||||
.ql-snow.ql-toolbar .ql-picker-label:hover .ql-fill,
|
||||
.ql-snow .ql-toolbar .ql-picker-label:hover .ql-fill,
|
||||
.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-fill,
|
||||
.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-fill,
|
||||
.ql-snow.ql-toolbar .ql-picker-item:hover .ql-fill,
|
||||
.ql-snow .ql-toolbar .ql-picker-item:hover .ql-fill,
|
||||
.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-fill,
|
||||
.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-fill,
|
||||
.ql-snow.ql-toolbar button:hover .ql-stroke.ql-fill,
|
||||
.ql-snow .ql-toolbar button:hover .ql-stroke.ql-fill,
|
||||
.ql-snow.ql-toolbar button.ql-active .ql-stroke.ql-fill,
|
||||
.ql-snow .ql-toolbar button.ql-active .ql-stroke.ql-fill,
|
||||
.ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill,
|
||||
.ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill,
|
||||
.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill,
|
||||
.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill,
|
||||
.ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill,
|
||||
.ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill,
|
||||
.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill,
|
||||
.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill {
|
||||
fill: #06c;
|
||||
}
|
||||
.ql-snow.ql-toolbar button:hover .ql-stroke,
|
||||
.ql-snow .ql-toolbar button:hover .ql-stroke,
|
||||
.ql-snow.ql-toolbar button.ql-active .ql-stroke,
|
||||
.ql-snow .ql-toolbar button.ql-active .ql-stroke,
|
||||
.ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke,
|
||||
.ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke,
|
||||
.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke,
|
||||
.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke,
|
||||
.ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke,
|
||||
.ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke,
|
||||
.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke,
|
||||
.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke,
|
||||
.ql-snow.ql-toolbar button:hover .ql-stroke-miter,
|
||||
.ql-snow .ql-toolbar button:hover .ql-stroke-miter,
|
||||
.ql-snow.ql-toolbar button.ql-active .ql-stroke-miter,
|
||||
.ql-snow .ql-toolbar button.ql-active .ql-stroke-miter,
|
||||
.ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke-miter,
|
||||
.ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke-miter,
|
||||
.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter,
|
||||
.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter,
|
||||
.ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke-miter,
|
||||
.ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke-miter,
|
||||
.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter,
|
||||
.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter {
|
||||
stroke: #06c;
|
||||
}
|
||||
.ql-snow {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.ql-snow * {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.ql-snow .ql-hidden {
|
||||
display: none;
|
||||
}
|
||||
.ql-snow .ql-out-bottom,
|
||||
.ql-snow .ql-out-top {
|
||||
visibility: hidden;
|
||||
}
|
||||
.ql-snow .ql-tooltip {
|
||||
position: absolute;
|
||||
transform: translateY(10px);
|
||||
}
|
||||
.ql-snow .ql-tooltip a {
|
||||
cursor: pointer;
|
||||
text-decoration: none;
|
||||
}
|
||||
.ql-snow .ql-tooltip.ql-flip {
|
||||
transform: translateY(-10px);
|
||||
}
|
||||
.ql-snow .ql-formats {
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.ql-snow .ql-formats:after {
|
||||
clear: both;
|
||||
content: '';
|
||||
display: table;
|
||||
}
|
||||
.ql-snow .ql-stroke {
|
||||
fill: none;
|
||||
stroke: #444;
|
||||
stroke-linecap: round;
|
||||
stroke-linejoin: round;
|
||||
stroke-width: 2;
|
||||
}
|
||||
.ql-snow .ql-stroke-miter {
|
||||
fill: none;
|
||||
stroke: #444;
|
||||
stroke-miterlimit: 10;
|
||||
stroke-width: 2;
|
||||
}
|
||||
.ql-snow .ql-fill,
|
||||
.ql-snow .ql-stroke.ql-fill {
|
||||
fill: #444;
|
||||
}
|
||||
.ql-snow .ql-empty {
|
||||
fill: none;
|
||||
}
|
||||
.ql-snow .ql-even {
|
||||
fill-rule: evenodd;
|
||||
}
|
||||
.ql-snow .ql-thin,
|
||||
.ql-snow .ql-stroke.ql-thin {
|
||||
stroke-width: 1;
|
||||
}
|
||||
.ql-snow .ql-transparent {
|
||||
opacity: 0.4;
|
||||
}
|
||||
.ql-snow .ql-direction svg:last-child {
|
||||
display: none;
|
||||
}
|
||||
.ql-snow .ql-direction.ql-active svg:last-child {
|
||||
display: inline;
|
||||
}
|
||||
.ql-snow .ql-direction.ql-active svg:first-child {
|
||||
display: none;
|
||||
}
|
||||
.ql-snow .ql-editor h1 {
|
||||
font-size: 2em;
|
||||
}
|
||||
.ql-snow .ql-editor h2 {
|
||||
font-size: 1.5em;
|
||||
}
|
||||
.ql-snow .ql-editor h3 {
|
||||
font-size: 1.17em;
|
||||
}
|
||||
.ql-snow .ql-editor h4 {
|
||||
font-size: 1em;
|
||||
}
|
||||
.ql-snow .ql-editor h5 {
|
||||
font-size: 0.83em;
|
||||
}
|
||||
.ql-snow .ql-editor h6 {
|
||||
font-size: 0.67em;
|
||||
}
|
||||
.ql-snow .ql-editor a {
|
||||
text-decoration: underline;
|
||||
}
|
||||
.ql-snow .ql-editor blockquote {
|
||||
border-left: 4px solid #ccc;
|
||||
margin-bottom: 5px;
|
||||
margin-top: 5px;
|
||||
padding-left: 16px;
|
||||
}
|
||||
.ql-snow .ql-editor code,
|
||||
.ql-snow .ql-editor pre {
|
||||
background-color: #f0f0f0;
|
||||
border-radius: 3px;
|
||||
}
|
||||
.ql-snow .ql-editor pre {
|
||||
white-space: pre-wrap;
|
||||
margin-bottom: 5px;
|
||||
margin-top: 5px;
|
||||
padding: 5px 10px;
|
||||
}
|
||||
.ql-snow .ql-editor code {
|
||||
font-size: 85%;
|
||||
padding-bottom: 2px;
|
||||
padding-top: 2px;
|
||||
}
|
||||
.ql-snow .ql-editor code:before,
|
||||
.ql-snow .ql-editor code:after {
|
||||
content: "\A0";
|
||||
letter-spacing: -2px;
|
||||
}
|
||||
.ql-snow .ql-editor pre.ql-syntax {
|
||||
background-color: #23241f;
|
||||
color: #f8f8f2;
|
||||
overflow: visible;
|
||||
}
|
||||
.ql-snow .ql-editor img {
|
||||
max-width: 100%;
|
||||
}
|
||||
.ql-snow .ql-picker {
|
||||
color: #444;
|
||||
display: inline-block;
|
||||
float: left;
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
height: 24px;
|
||||
position: relative;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.ql-snow .ql-picker-label {
|
||||
cursor: pointer;
|
||||
display: inline-block;
|
||||
height: 100%;
|
||||
padding-left: 8px;
|
||||
padding-right: 2px;
|
||||
position: relative;
|
||||
width: 100%;
|
||||
}
|
||||
.ql-snow .ql-picker-label::before {
|
||||
display: inline-block;
|
||||
line-height: 22px;
|
||||
}
|
||||
.ql-snow .ql-picker-options {
|
||||
background-color: #fff;
|
||||
display: none;
|
||||
min-width: 100%;
|
||||
padding: 4px 8px;
|
||||
position: absolute;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.ql-snow .ql-picker-options .ql-picker-item {
|
||||
cursor: pointer;
|
||||
display: block;
|
||||
padding-bottom: 5px;
|
||||
padding-top: 5px;
|
||||
}
|
||||
.ql-snow .ql-picker.ql-expanded .ql-picker-label {
|
||||
color: #ccc;
|
||||
z-index: 2;
|
||||
}
|
||||
.ql-snow .ql-picker.ql-expanded .ql-picker-label .ql-fill {
|
||||
fill: #ccc;
|
||||
}
|
||||
.ql-snow .ql-picker.ql-expanded .ql-picker-label .ql-stroke {
|
||||
stroke: #ccc;
|
||||
}
|
||||
.ql-snow .ql-picker.ql-expanded .ql-picker-options {
|
||||
display: block;
|
||||
margin-top: -1px;
|
||||
top: 100%;
|
||||
z-index: 1;
|
||||
}
|
||||
.ql-snow .ql-color-picker,
|
||||
.ql-snow .ql-icon-picker {
|
||||
width: 28px;
|
||||
}
|
||||
.ql-snow .ql-color-picker .ql-picker-label,
|
||||
.ql-snow .ql-icon-picker .ql-picker-label {
|
||||
padding: 2px 4px;
|
||||
}
|
||||
.ql-snow .ql-color-picker .ql-picker-label svg,
|
||||
.ql-snow .ql-icon-picker .ql-picker-label svg {
|
||||
right: 4px;
|
||||
}
|
||||
.ql-snow .ql-icon-picker .ql-picker-options {
|
||||
padding: 4px 0px;
|
||||
}
|
||||
.ql-snow .ql-icon-picker .ql-picker-item {
|
||||
height: 24px;
|
||||
width: 24px;
|
||||
padding: 2px 4px;
|
||||
}
|
||||
.ql-snow .ql-color-picker .ql-picker-options {
|
||||
padding: 3px 5px;
|
||||
width: 152px;
|
||||
}
|
||||
.ql-snow .ql-color-picker .ql-picker-item {
|
||||
border: 1px solid transparent;
|
||||
float: left;
|
||||
height: 16px;
|
||||
margin: 2px;
|
||||
padding: 0px;
|
||||
width: 16px;
|
||||
}
|
||||
.ql-snow .ql-picker:not(.ql-color-picker):not(.ql-icon-picker) svg {
|
||||
position: absolute;
|
||||
margin-top: -9px;
|
||||
right: 0;
|
||||
top: 50%;
|
||||
width: 18px;
|
||||
}
|
||||
.ql-snow .ql-picker.ql-header .ql-picker-label[data-label]:not([data-label=''])::before,
|
||||
.ql-snow .ql-picker.ql-font .ql-picker-label[data-label]:not([data-label=''])::before,
|
||||
.ql-snow .ql-picker.ql-size .ql-picker-label[data-label]:not([data-label=''])::before,
|
||||
.ql-snow .ql-picker.ql-header .ql-picker-item[data-label]:not([data-label=''])::before,
|
||||
.ql-snow .ql-picker.ql-font .ql-picker-item[data-label]:not([data-label=''])::before,
|
||||
.ql-snow .ql-picker.ql-size .ql-picker-item[data-label]:not([data-label=''])::before {
|
||||
content: attr(data-label);
|
||||
}
|
||||
.ql-snow .ql-picker.ql-header {
|
||||
width: 98px;
|
||||
}
|
||||
.ql-snow .ql-picker.ql-header .ql-picker-label::before,
|
||||
.ql-snow .ql-picker.ql-header .ql-picker-item::before {
|
||||
content: 'Normal';
|
||||
}
|
||||
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="1"]::before,
|
||||
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="1"]::before {
|
||||
content: 'Heading 1';
|
||||
}
|
||||
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="2"]::before,
|
||||
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="2"]::before {
|
||||
content: 'Heading 2';
|
||||
}
|
||||
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="3"]::before,
|
||||
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="3"]::before {
|
||||
content: 'Heading 3';
|
||||
}
|
||||
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="4"]::before,
|
||||
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="4"]::before {
|
||||
content: 'Heading 4';
|
||||
}
|
||||
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="5"]::before,
|
||||
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="5"]::before {
|
||||
content: 'Heading 5';
|
||||
}
|
||||
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="6"]::before,
|
||||
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="6"]::before {
|
||||
content: 'Heading 6';
|
||||
}
|
||||
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="1"]::before {
|
||||
font-size: 2em;
|
||||
}
|
||||
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="2"]::before {
|
||||
font-size: 1.5em;
|
||||
}
|
||||
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="3"]::before {
|
||||
font-size: 1.17em;
|
||||
}
|
||||
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="4"]::before {
|
||||
font-size: 1em;
|
||||
}
|
||||
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="5"]::before {
|
||||
font-size: 0.83em;
|
||||
}
|
||||
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="6"]::before {
|
||||
font-size: 0.67em;
|
||||
}
|
||||
.ql-snow .ql-picker.ql-font {
|
||||
width: 108px;
|
||||
}
|
||||
.ql-snow .ql-picker.ql-font .ql-picker-label::before,
|
||||
.ql-snow .ql-picker.ql-font .ql-picker-item::before {
|
||||
content: 'Sans Serif';
|
||||
}
|
||||
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=serif]::before,
|
||||
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=serif]::before {
|
||||
content: 'Serif';
|
||||
}
|
||||
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=monospace]::before,
|
||||
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=monospace]::before {
|
||||
content: 'Monospace';
|
||||
}
|
||||
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=serif]::before {
|
||||
font-family: Georgia, Times New Roman, serif;
|
||||
}
|
||||
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=monospace]::before {
|
||||
font-family: Monaco, Courier New, monospace;
|
||||
}
|
||||
.ql-snow .ql-picker.ql-size {
|
||||
width: 98px;
|
||||
}
|
||||
.ql-snow .ql-picker.ql-size .ql-picker-label::before,
|
||||
.ql-snow .ql-picker.ql-size .ql-picker-item::before {
|
||||
content: 'Normal';
|
||||
}
|
||||
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value=small]::before,
|
||||
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=small]::before {
|
||||
content: 'Small';
|
||||
}
|
||||
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value=large]::before,
|
||||
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=large]::before {
|
||||
content: 'Large';
|
||||
}
|
||||
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value=huge]::before,
|
||||
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=huge]::before {
|
||||
content: 'Huge';
|
||||
}
|
||||
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=small]::before {
|
||||
font-size: 10px;
|
||||
}
|
||||
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=large]::before {
|
||||
font-size: 18px;
|
||||
}
|
||||
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=huge]::before {
|
||||
font-size: 32px;
|
||||
}
|
||||
.ql-snow .ql-color-picker.ql-background .ql-picker-item {
|
||||
background-color: #fff;
|
||||
}
|
||||
.ql-snow .ql-color-picker.ql-color .ql-picker-item {
|
||||
background-color: #000;
|
||||
}
|
||||
.ql-toolbar.ql-snow {
|
||||
border: 1px solid #ccc;
|
||||
box-sizing: border-box;
|
||||
font-family: 'Helvetica Neue', 'Helvetica', 'Arial', sans-serif;
|
||||
padding: 8px;
|
||||
}
|
||||
.ql-toolbar.ql-snow .ql-formats {
|
||||
margin-right: 15px;
|
||||
}
|
||||
.ql-toolbar.ql-snow .ql-picker-label {
|
||||
border: 1px solid transparent;
|
||||
}
|
||||
.ql-toolbar.ql-snow .ql-picker-options {
|
||||
border: 1px solid transparent;
|
||||
box-shadow: rgba(0,0,0,0.2) 0 2px 8px;
|
||||
}
|
||||
.ql-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-label {
|
||||
border-color: #ccc;
|
||||
}
|
||||
.ql-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-options {
|
||||
border-color: #ccc;
|
||||
}
|
||||
.ql-toolbar.ql-snow .ql-color-picker .ql-picker-item.ql-selected,
|
||||
.ql-toolbar.ql-snow .ql-color-picker .ql-picker-item:hover {
|
||||
border-color: #000;
|
||||
}
|
||||
.ql-toolbar.ql-snow + .ql-container.ql-snow {
|
||||
border-top: 0px;
|
||||
}
|
||||
.ql-snow .ql-tooltip {
|
||||
background-color: #fff;
|
||||
border: 1px solid #ccc;
|
||||
box-shadow: 0px 0px 5px #ddd;
|
||||
color: #444;
|
||||
padding: 5px 12px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.ql-snow .ql-tooltip::before {
|
||||
content: "Visit URL:";
|
||||
line-height: 26px;
|
||||
margin-right: 8px;
|
||||
}
|
||||
.ql-snow .ql-tooltip input[type=text] {
|
||||
display: none;
|
||||
border: 1px solid #ccc;
|
||||
font-size: 13px;
|
||||
height: 26px;
|
||||
margin: 0px;
|
||||
padding: 3px 5px;
|
||||
width: 170px;
|
||||
}
|
||||
.ql-snow .ql-tooltip a.ql-preview {
|
||||
display: inline-block;
|
||||
max-width: 200px;
|
||||
overflow-x: hidden;
|
||||
text-overflow: ellipsis;
|
||||
vertical-align: top;
|
||||
}
|
||||
.ql-snow .ql-tooltip a.ql-action::after {
|
||||
border-right: 1px solid #ccc;
|
||||
content: 'Edit';
|
||||
margin-left: 16px;
|
||||
padding-right: 8px;
|
||||
}
|
||||
.ql-snow .ql-tooltip a.ql-remove::before {
|
||||
content: 'Remove';
|
||||
margin-left: 8px;
|
||||
}
|
||||
.ql-snow .ql-tooltip a {
|
||||
line-height: 26px;
|
||||
}
|
||||
.ql-snow .ql-tooltip.ql-editing a.ql-preview,
|
||||
.ql-snow .ql-tooltip.ql-editing a.ql-remove {
|
||||
display: none;
|
||||
}
|
||||
.ql-snow .ql-tooltip.ql-editing input[type=text] {
|
||||
display: inline-block;
|
||||
}
|
||||
.ql-snow .ql-tooltip.ql-editing a.ql-action::after {
|
||||
border-right: 0px;
|
||||
content: 'Save';
|
||||
padding-right: 0px;
|
||||
}
|
||||
.ql-snow .ql-tooltip[data-mode=link]::before {
|
||||
content: "Enter link:";
|
||||
}
|
||||
.ql-snow .ql-tooltip[data-mode=formula]::before {
|
||||
content: "Enter formula:";
|
||||
}
|
||||
.ql-snow .ql-tooltip[data-mode=video]::before {
|
||||
content: "Enter video:";
|
||||
}
|
||||
.ql-snow a {
|
||||
color: #06c;
|
||||
}
|
||||
.ql-container.ql-snow {
|
||||
border: 1px solid #ccc;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user