Release 1.0!
Merge branch 'develop'
This commit is contained in:
commit
ea9c66892e
4
.bowerrc
Normal file
4
.bowerrc
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"directory": "vendor/assets/bower_components",
|
||||||
|
"analytics": false
|
||||||
|
}
|
2
.deploy.conf.sample
Normal file
2
.deploy.conf.sample
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
branch=develop
|
||||||
|
app_env=sandbox
|
21
.eslintrc.yml
Normal file
21
.eslintrc.yml
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
# http://eslint.org/docs/user-guide/configuring
|
||||||
|
# http://eslint.org/docs/2.0.0/rules/
|
||||||
|
env:
|
||||||
|
browser: true
|
||||||
|
jquery: true
|
||||||
|
extends: 'eslint:recommended'
|
||||||
|
plugins:
|
||||||
|
- ignore-erb
|
||||||
|
rules:
|
||||||
|
indent:
|
||||||
|
- error
|
||||||
|
- 2
|
||||||
|
linebreak-style:
|
||||||
|
- error
|
||||||
|
- unix
|
||||||
|
no-trailing-spaces:
|
||||||
|
- warn
|
||||||
|
quotes: off
|
||||||
|
semi:
|
||||||
|
- error
|
||||||
|
- always
|
13
.gitignore
vendored
13
.gitignore
vendored
@ -12,6 +12,7 @@
|
|||||||
/tmp/*
|
/tmp/*
|
||||||
!/log/.keep
|
!/log/.keep
|
||||||
!/tmp/.keep
|
!/tmp/.keep
|
||||||
|
tmux*log
|
||||||
|
|
||||||
### Ruby ###
|
### Ruby ###
|
||||||
*.gem
|
*.gem
|
||||||
@ -36,6 +37,13 @@
|
|||||||
/.bundle/
|
/.bundle/
|
||||||
/vendor/bundle
|
/vendor/bundle
|
||||||
/lib/bundler/man/
|
/lib/bundler/man/
|
||||||
|
/vendor/assets/*
|
||||||
|
bower_components/
|
||||||
|
node_modules/
|
||||||
|
.DS_Store
|
||||||
|
|
||||||
|
## Public directory assets
|
||||||
|
public/assets
|
||||||
|
|
||||||
### Vim ###
|
### Vim ###
|
||||||
[._]*.s[a-w][a-z]
|
[._]*.s[a-w][a-z]
|
||||||
@ -50,3 +58,8 @@ application.yml
|
|||||||
|
|
||||||
# Ignore Byebug command history file.
|
# Ignore Byebug command history file.
|
||||||
.byebug_history
|
.byebug_history
|
||||||
|
|
||||||
|
# Ignore application configuration
|
||||||
|
/config/application.yml
|
||||||
|
.container-setup
|
||||||
|
.deploy.conf
|
||||||
|
14
.rubocop.yml
14
.rubocop.yml
@ -3,6 +3,10 @@ AllCops:
|
|||||||
- db/schema.rb
|
- db/schema.rb
|
||||||
- db/seeds.rb
|
- db/seeds.rb
|
||||||
- bin/**/*
|
- bin/**/*
|
||||||
|
- vendor/assets/**/*
|
||||||
|
|
||||||
|
Style/AndOr:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
Style/ClassAndModuleChildren:
|
Style/ClassAndModuleChildren:
|
||||||
Exclude:
|
Exclude:
|
||||||
@ -21,6 +25,8 @@ Style/ExtraSpacing:
|
|||||||
|
|
||||||
Style/IndentationConsistency:
|
Style/IndentationConsistency:
|
||||||
EnforcedStyle: rails
|
EnforcedStyle: rails
|
||||||
|
Exclude:
|
||||||
|
- config/routes.rb
|
||||||
|
|
||||||
Style/MethodDefParentheses:
|
Style/MethodDefParentheses:
|
||||||
Enabled: false
|
Enabled: false
|
||||||
@ -32,9 +38,14 @@ Style/SpaceBeforeFirstArg:
|
|||||||
Style/StringLiterals:
|
Style/StringLiterals:
|
||||||
Enabled: false
|
Enabled: false
|
||||||
|
|
||||||
|
Style/StructInheritance:
|
||||||
|
Exclude:
|
||||||
|
- app/policies/**/*
|
||||||
|
|
||||||
Metrics/AbcSize:
|
Metrics/AbcSize:
|
||||||
Exclude:
|
Exclude:
|
||||||
- db/migrate/**/*
|
- db/migrate/**/*
|
||||||
|
Max: 20
|
||||||
|
|
||||||
Metrics/LineLength:
|
Metrics/LineLength:
|
||||||
Max: 110
|
Max: 110
|
||||||
@ -47,3 +58,6 @@ Metrics/LineLength:
|
|||||||
Metrics/MethodLength:
|
Metrics/MethodLength:
|
||||||
Exclude:
|
Exclude:
|
||||||
- db/migrate/*
|
- db/migrate/*
|
||||||
|
|
||||||
|
Rails:
|
||||||
|
Enabled: true
|
||||||
|
1
.ruby-version
Normal file
1
.ruby-version
Normal file
@ -0,0 +1 @@
|
|||||||
|
2.3.1
|
@ -1,5 +0,0 @@
|
|||||||
set -g mode-mouse on
|
|
||||||
set -g mouse-resize-pane on
|
|
||||||
set -g mouse-select-pane on
|
|
||||||
set -g mouse-select-window on
|
|
||||||
set -g history-limit 30000
|
|
43
Dockerfile
43
Dockerfile
@ -1,43 +0,0 @@
|
|||||||
FROM mysql:5.7
|
|
||||||
MAINTAINER Mark Moser <markamoser@gmail.com>
|
|
||||||
|
|
||||||
WORKDIR ~/
|
|
||||||
|
|
||||||
ENV MYSQL_ROOT_PASSWORD=root
|
|
||||||
ENV BUILD_PACKAGES="build-essential libmysqlclient-dev openssl graphviz nodejs curl wget zlib1g-dev tmux"
|
|
||||||
|
|
||||||
RUN apt-get update \
|
|
||||||
&& apt-get install --fix-missing -y $BUILD_PACKAGES \
|
|
||||||
&& /usr/sbin/mysqld --initialize --user=mysql \
|
|
||||||
&& service mysql start \
|
|
||||||
&& echo 'gem: --no-document' >> ~/.gemrc \
|
|
||||||
&& cp ~/.gemrc /etc/gemrc \
|
|
||||||
&& chmod uog+r /etc/gemrc \
|
|
||||||
&& mkdir -p /usr/app \
|
|
||||||
&& ln -s /usr/bin/nodejs /usr/bin/node \
|
|
||||||
&& echo "alias ll='ls -Ahl'" >> /root/.bashrc \
|
|
||||||
&& echo "alias la='ls -ahl'" >> /root/.bashrc \
|
|
||||||
&& echo "export HISTCONTROL=ignoredups" >> /root/.bashrc
|
|
||||||
|
|
||||||
# install current Ruby
|
|
||||||
RUN curl -L --progress https://github.com/postmodern/ruby-install/archive/v0.6.0.tar.gz | tar xz \
|
|
||||||
&& cd ruby-install-0.6.0 \
|
|
||||||
&& make install \
|
|
||||||
&& cd ../ \
|
|
||||||
&& ruby-install --system ruby \
|
|
||||||
&& gem install bundler
|
|
||||||
|
|
||||||
COPY .tmux.conf /root/
|
|
||||||
COPY Gemfile* /root/
|
|
||||||
RUN cd /root \
|
|
||||||
&& bundle install \
|
|
||||||
&& apt-get clean \
|
|
||||||
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
|
|
||||||
|
|
||||||
EXPOSE 3000 3306 35729
|
|
||||||
WORKDIR /usr/app
|
|
||||||
CMD ["mysqld"]
|
|
||||||
|
|
||||||
# ./start-docker.sh
|
|
||||||
# ./start-server.sh
|
|
||||||
# rails server -b 0.0.0.0
|
|
37
Gemfile
37
Gemfile
@ -1,41 +1,62 @@
|
|||||||
|
# frozen_string_literal: true
|
||||||
source 'https://rubygems.org'
|
source 'https://rubygems.org'
|
||||||
|
|
||||||
gem 'figaro', '~> 1.1.1'
|
gem 'figaro', '~> 1.1.1'
|
||||||
gem 'bcrypt', '~> 3.1.7'
|
gem 'bcrypt', '~> 3.1.7'
|
||||||
gem 'mysql2', '>= 0.3.18', '< 0.5'
|
gem 'mysql2', '>= 0.3.18', '< 0.5'
|
||||||
gem 'rails', '~> 5.0.0'
|
gem 'rails', '~> 5.0', '>= 5.0.0.1'
|
||||||
|
|
||||||
# gem 'autoprefixer-rails'
|
|
||||||
gem 'jbuilder', '~> 2.6'
|
gem 'jbuilder', '~> 2.6'
|
||||||
gem 'jquery-rails'
|
gem 'jquery-rails'
|
||||||
gem 'json', '~> 2.0.2'
|
gem 'json', '~> 2.0.2'
|
||||||
|
gem 'mailjet', '~> 1.3.8'
|
||||||
gem 'puma', '~> 3.0'
|
gem 'puma', '~> 3.0'
|
||||||
|
gem 'pundit'
|
||||||
gem 'sass-rails', '~> 5.0'
|
gem 'sass-rails', '~> 5.0'
|
||||||
|
gem 'settingslogic', '~> 2.0.9'
|
||||||
gem 'turbolinks', '~> 5'
|
gem 'turbolinks', '~> 5'
|
||||||
gem 'uglifier', '>= 1.3.0'
|
gem 'uglifier', '>= 1.3.0'
|
||||||
|
|
||||||
|
# assets
|
||||||
|
gem 'bourbon'
|
||||||
|
gem 'neat'
|
||||||
|
|
||||||
|
# Foundation for Emails
|
||||||
|
gem 'inky-rb', require: 'inky'
|
||||||
|
gem 'premailer-rails'
|
||||||
|
|
||||||
group :development do
|
group :development do
|
||||||
|
gem 'better_errors'
|
||||||
gem 'rack-livereload'
|
gem 'rack-livereload'
|
||||||
gem 'rails-erd'
|
gem 'rails-erd'
|
||||||
gem 'web-console'
|
gem 'web-console'
|
||||||
end
|
end
|
||||||
|
|
||||||
group :development, :test do
|
group :development, :test do
|
||||||
gem 'awesome_print'
|
gem 'spring'
|
||||||
gem 'binding_of_caller'
|
gem 'spring-watcher-listen', '~> 2.0.0'
|
||||||
gem 'byebug', platform: :mri
|
gem 'listen'
|
||||||
|
|
||||||
gem 'guard'
|
gem 'guard'
|
||||||
|
gem 'guard-brakeman'
|
||||||
gem 'guard-livereload'
|
gem 'guard-livereload'
|
||||||
gem 'guard-minitest'
|
gem 'guard-minitest'
|
||||||
gem 'guard-rubocop'
|
gem 'guard-rubocop'
|
||||||
gem 'guard-shell'
|
gem 'guard-shell'
|
||||||
gem 'listen', '~> 3.0'
|
|
||||||
gem 'minitest-reporters'
|
gem 'minitest-reporters'
|
||||||
|
gem 'policy-assertions'
|
||||||
|
gem 'rails-controller-testing'
|
||||||
|
|
||||||
|
gem 'awesome_print'
|
||||||
|
gem 'binding_of_caller'
|
||||||
|
gem 'byebug', platform: :mri
|
||||||
gem 'pry-byebug'
|
gem 'pry-byebug'
|
||||||
gem 'pry-rails'
|
gem 'pry-rails'
|
||||||
|
|
||||||
|
gem 'brakeman'
|
||||||
gem 'rubocop', '~> 0.42.0'
|
gem 'rubocop', '~> 0.42.0'
|
||||||
gem 'spring'
|
gem 'simplecov', require: false
|
||||||
gem 'spring-watcher-listen', '~> 2.0.0'
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
|
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
|
||||||
|
162
Gemfile.lock
162
Gemfile.lock
@ -1,56 +1,70 @@
|
|||||||
GEM
|
GEM
|
||||||
remote: https://rubygems.org/
|
remote: https://rubygems.org/
|
||||||
specs:
|
specs:
|
||||||
actioncable (5.0.0)
|
actioncable (5.0.0.1)
|
||||||
actionpack (= 5.0.0)
|
actionpack (= 5.0.0.1)
|
||||||
nio4r (~> 1.2)
|
nio4r (~> 1.2)
|
||||||
websocket-driver (~> 0.6.1)
|
websocket-driver (~> 0.6.1)
|
||||||
actionmailer (5.0.0)
|
actionmailer (5.0.0.1)
|
||||||
actionpack (= 5.0.0)
|
actionpack (= 5.0.0.1)
|
||||||
actionview (= 5.0.0)
|
actionview (= 5.0.0.1)
|
||||||
activejob (= 5.0.0)
|
activejob (= 5.0.0.1)
|
||||||
mail (~> 2.5, >= 2.5.4)
|
mail (~> 2.5, >= 2.5.4)
|
||||||
rails-dom-testing (~> 2.0)
|
rails-dom-testing (~> 2.0)
|
||||||
actionpack (5.0.0)
|
actionpack (5.0.0.1)
|
||||||
actionview (= 5.0.0)
|
actionview (= 5.0.0.1)
|
||||||
activesupport (= 5.0.0)
|
activesupport (= 5.0.0.1)
|
||||||
rack (~> 2.0)
|
rack (~> 2.0)
|
||||||
rack-test (~> 0.6.3)
|
rack-test (~> 0.6.3)
|
||||||
rails-dom-testing (~> 2.0)
|
rails-dom-testing (~> 2.0)
|
||||||
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
||||||
actionview (5.0.0)
|
actionview (5.0.0.1)
|
||||||
activesupport (= 5.0.0)
|
activesupport (= 5.0.0.1)
|
||||||
builder (~> 3.1)
|
builder (~> 3.1)
|
||||||
erubis (~> 2.7.0)
|
erubis (~> 2.7.0)
|
||||||
rails-dom-testing (~> 2.0)
|
rails-dom-testing (~> 2.0)
|
||||||
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
||||||
activejob (5.0.0)
|
activejob (5.0.0.1)
|
||||||
activesupport (= 5.0.0)
|
activesupport (= 5.0.0.1)
|
||||||
globalid (>= 0.3.6)
|
globalid (>= 0.3.6)
|
||||||
activemodel (5.0.0)
|
activemodel (5.0.0.1)
|
||||||
activesupport (= 5.0.0)
|
activesupport (= 5.0.0.1)
|
||||||
activerecord (5.0.0)
|
activerecord (5.0.0.1)
|
||||||
activemodel (= 5.0.0)
|
activemodel (= 5.0.0.1)
|
||||||
activesupport (= 5.0.0)
|
activesupport (= 5.0.0.1)
|
||||||
arel (~> 7.0)
|
arel (~> 7.0)
|
||||||
activesupport (5.0.0)
|
activesupport (5.0.0.1)
|
||||||
concurrent-ruby (~> 1.0, >= 1.0.2)
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
||||||
i18n (~> 0.7)
|
i18n (~> 0.7)
|
||||||
minitest (~> 5.1)
|
minitest (~> 5.1)
|
||||||
tzinfo (~> 1.1)
|
tzinfo (~> 1.1)
|
||||||
|
addressable (2.4.0)
|
||||||
ansi (1.5.0)
|
ansi (1.5.0)
|
||||||
arel (7.1.0)
|
arel (7.1.1)
|
||||||
ast (2.3.0)
|
ast (2.3.0)
|
||||||
awesome_print (1.7.0)
|
awesome_print (1.7.0)
|
||||||
bcrypt (3.1.11)
|
bcrypt (3.1.11)
|
||||||
|
better_errors (2.1.1)
|
||||||
|
coderay (>= 1.0.0)
|
||||||
|
erubis (>= 2.6.6)
|
||||||
|
rack (>= 0.9.0)
|
||||||
binding_of_caller (0.7.2)
|
binding_of_caller (0.7.2)
|
||||||
debug_inspector (>= 0.0.1)
|
debug_inspector (>= 0.0.1)
|
||||||
|
bourbon (4.2.7)
|
||||||
|
sass (~> 3.4)
|
||||||
|
thor (~> 0.19)
|
||||||
|
brakeman (3.4.0)
|
||||||
builder (3.2.2)
|
builder (3.2.2)
|
||||||
byebug (9.0.5)
|
byebug (9.0.5)
|
||||||
choice (0.2.0)
|
choice (0.2.0)
|
||||||
coderay (1.1.1)
|
coderay (1.1.1)
|
||||||
concurrent-ruby (1.0.2)
|
concurrent-ruby (1.0.2)
|
||||||
|
css_parser (1.4.5)
|
||||||
|
addressable
|
||||||
debug_inspector (0.0.2)
|
debug_inspector (0.0.2)
|
||||||
|
docile (1.1.5)
|
||||||
|
domain_name (0.5.20160615)
|
||||||
|
unf (>= 0.0.5, < 1.0.0)
|
||||||
em-websocket (0.5.1)
|
em-websocket (0.5.1)
|
||||||
eventmachine (>= 0.12.9)
|
eventmachine (>= 0.12.9)
|
||||||
http_parser.rb (~> 0.6.0)
|
http_parser.rb (~> 0.6.0)
|
||||||
@ -61,7 +75,8 @@ GEM
|
|||||||
figaro (1.1.1)
|
figaro (1.1.1)
|
||||||
thor (~> 0.14)
|
thor (~> 0.14)
|
||||||
formatador (0.2.5)
|
formatador (0.2.5)
|
||||||
globalid (0.3.6)
|
foundation_emails (2.2.0.0)
|
||||||
|
globalid (0.3.7)
|
||||||
activesupport (>= 4.1.0)
|
activesupport (>= 4.1.0)
|
||||||
guard (2.14.0)
|
guard (2.14.0)
|
||||||
formatador (>= 0.2.4)
|
formatador (>= 0.2.4)
|
||||||
@ -72,13 +87,16 @@ GEM
|
|||||||
pry (>= 0.9.12)
|
pry (>= 0.9.12)
|
||||||
shellany (~> 0.0)
|
shellany (~> 0.0)
|
||||||
thor (>= 0.18.1)
|
thor (>= 0.18.1)
|
||||||
|
guard-brakeman (0.8.3)
|
||||||
|
brakeman (>= 2.1.1)
|
||||||
|
guard (>= 2.0.0)
|
||||||
guard-compat (1.2.1)
|
guard-compat (1.2.1)
|
||||||
guard-livereload (2.5.2)
|
guard-livereload (2.5.2)
|
||||||
em-websocket (~> 0.5)
|
em-websocket (~> 0.5)
|
||||||
guard (~> 2.8)
|
guard (~> 2.8)
|
||||||
guard-compat (~> 1.0)
|
guard-compat (~> 1.0)
|
||||||
multi_json (~> 1.8)
|
multi_json (~> 1.8)
|
||||||
guard-minitest (2.4.5)
|
guard-minitest (2.4.6)
|
||||||
guard-compat (~> 1.2)
|
guard-compat (~> 1.2)
|
||||||
minitest (>= 3.0)
|
minitest (>= 3.0)
|
||||||
guard-rubocop (1.2.0)
|
guard-rubocop (1.2.0)
|
||||||
@ -87,12 +105,17 @@ GEM
|
|||||||
guard-shell (0.7.1)
|
guard-shell (0.7.1)
|
||||||
guard (>= 2.0.0)
|
guard (>= 2.0.0)
|
||||||
guard-compat (~> 1.0)
|
guard-compat (~> 1.0)
|
||||||
|
htmlentities (4.3.4)
|
||||||
|
http-cookie (1.0.2)
|
||||||
|
domain_name (~> 0.5)
|
||||||
http_parser.rb (0.6.0)
|
http_parser.rb (0.6.0)
|
||||||
i18n (0.7.0)
|
i18n (0.7.0)
|
||||||
|
inky-rb (1.3.6.1)
|
||||||
|
foundation_emails (~> 2)
|
||||||
jbuilder (2.6.0)
|
jbuilder (2.6.0)
|
||||||
activesupport (>= 3.0.0, < 5.1)
|
activesupport (>= 3.0.0, < 5.1)
|
||||||
multi_json (~> 1.2)
|
multi_json (~> 1.2)
|
||||||
jquery-rails (4.1.1)
|
jquery-rails (4.2.1)
|
||||||
rails-dom-testing (>= 1, < 3)
|
rails-dom-testing (>= 1, < 3)
|
||||||
railties (>= 4.2.0)
|
railties (>= 4.2.0)
|
||||||
thor (>= 0.14, < 2.0)
|
thor (>= 0.14, < 2.0)
|
||||||
@ -106,31 +129,48 @@ GEM
|
|||||||
lumberjack (1.0.10)
|
lumberjack (1.0.10)
|
||||||
mail (2.6.4)
|
mail (2.6.4)
|
||||||
mime-types (>= 1.16, < 4)
|
mime-types (>= 1.16, < 4)
|
||||||
|
mailjet (1.3.8)
|
||||||
|
activesupport (>= 3.1.0)
|
||||||
|
rack (>= 1.4.0)
|
||||||
|
rest-client
|
||||||
method_source (0.8.2)
|
method_source (0.8.2)
|
||||||
mime-types (3.1)
|
mime-types (3.1)
|
||||||
mime-types-data (~> 3.2015)
|
mime-types-data (~> 3.2015)
|
||||||
mime-types-data (3.2016.0521)
|
mime-types-data (3.2016.0521)
|
||||||
mini_portile2 (2.1.0)
|
mini_portile2 (2.1.0)
|
||||||
minitest (5.9.0)
|
minitest (5.9.0)
|
||||||
minitest-reporters (1.1.10)
|
minitest-reporters (1.1.11)
|
||||||
ansi
|
ansi
|
||||||
builder
|
builder
|
||||||
minitest (>= 5.0)
|
minitest (>= 5.0)
|
||||||
ruby-progressbar
|
ruby-progressbar
|
||||||
multi_json (1.12.1)
|
multi_json (1.12.1)
|
||||||
mysql2 (0.4.4)
|
mysql2 (0.4.4)
|
||||||
|
neat (1.8.0)
|
||||||
|
sass (>= 3.3)
|
||||||
|
thor (~> 0.19)
|
||||||
nenv (0.3.0)
|
nenv (0.3.0)
|
||||||
|
netrc (0.11.0)
|
||||||
nio4r (1.2.1)
|
nio4r (1.2.1)
|
||||||
nokogiri (1.6.8)
|
nokogiri (1.6.8)
|
||||||
mini_portile2 (~> 2.1.0)
|
mini_portile2 (~> 2.1.0)
|
||||||
pkg-config (~> 1.1.7)
|
pkg-config (~> 1.1.7)
|
||||||
notiffany (0.1.0)
|
notiffany (0.1.1)
|
||||||
nenv (~> 0.1)
|
nenv (~> 0.1)
|
||||||
shellany (~> 0.0)
|
shellany (~> 0.0)
|
||||||
parser (2.3.1.2)
|
parser (2.3.1.2)
|
||||||
ast (~> 2.2)
|
ast (~> 2.2)
|
||||||
pkg-config (1.1.7)
|
pkg-config (1.1.7)
|
||||||
|
policy-assertions (0.0.3)
|
||||||
|
activesupport (>= 3.0.0)
|
||||||
|
pundit (>= 1.0.0)
|
||||||
powerpack (0.1.1)
|
powerpack (0.1.1)
|
||||||
|
premailer (1.8.7)
|
||||||
|
css_parser (>= 1.4.5)
|
||||||
|
htmlentities (>= 4.0.0)
|
||||||
|
premailer-rails (1.9.4)
|
||||||
|
actionmailer (>= 3, < 6)
|
||||||
|
premailer (~> 1.7, >= 1.7.9)
|
||||||
pry (0.10.4)
|
pry (0.10.4)
|
||||||
coderay (~> 1.1.0)
|
coderay (~> 1.1.0)
|
||||||
method_source (~> 0.8.1)
|
method_source (~> 0.8.1)
|
||||||
@ -141,36 +181,42 @@ GEM
|
|||||||
pry-rails (0.3.4)
|
pry-rails (0.3.4)
|
||||||
pry (>= 0.9.10)
|
pry (>= 0.9.10)
|
||||||
puma (3.6.0)
|
puma (3.6.0)
|
||||||
|
pundit (1.1.0)
|
||||||
|
activesupport (>= 3.0.0)
|
||||||
rack (2.0.1)
|
rack (2.0.1)
|
||||||
rack-livereload (0.3.16)
|
rack-livereload (0.3.16)
|
||||||
rack
|
rack
|
||||||
rack-test (0.6.3)
|
rack-test (0.6.3)
|
||||||
rack (>= 1.0)
|
rack (>= 1.0)
|
||||||
rails (5.0.0)
|
rails (5.0.0.1)
|
||||||
actioncable (= 5.0.0)
|
actioncable (= 5.0.0.1)
|
||||||
actionmailer (= 5.0.0)
|
actionmailer (= 5.0.0.1)
|
||||||
actionpack (= 5.0.0)
|
actionpack (= 5.0.0.1)
|
||||||
actionview (= 5.0.0)
|
actionview (= 5.0.0.1)
|
||||||
activejob (= 5.0.0)
|
activejob (= 5.0.0.1)
|
||||||
activemodel (= 5.0.0)
|
activemodel (= 5.0.0.1)
|
||||||
activerecord (= 5.0.0)
|
activerecord (= 5.0.0.1)
|
||||||
activesupport (= 5.0.0)
|
activesupport (= 5.0.0.1)
|
||||||
bundler (>= 1.3.0, < 2.0)
|
bundler (>= 1.3.0, < 2.0)
|
||||||
railties (= 5.0.0)
|
railties (= 5.0.0.1)
|
||||||
sprockets-rails (>= 2.0.0)
|
sprockets-rails (>= 2.0.0)
|
||||||
|
rails-controller-testing (1.0.1)
|
||||||
|
actionpack (~> 5.x)
|
||||||
|
actionview (~> 5.x)
|
||||||
|
activesupport (~> 5.x)
|
||||||
rails-dom-testing (2.0.1)
|
rails-dom-testing (2.0.1)
|
||||||
activesupport (>= 4.2.0, < 6.0)
|
activesupport (>= 4.2.0, < 6.0)
|
||||||
nokogiri (~> 1.6.0)
|
nokogiri (~> 1.6.0)
|
||||||
rails-erd (1.4.7)
|
rails-erd (1.5.0)
|
||||||
activerecord (>= 3.2)
|
activerecord (>= 3.2)
|
||||||
activesupport (>= 3.2)
|
activesupport (>= 3.2)
|
||||||
choice (~> 0.2.0)
|
choice (~> 0.2.0)
|
||||||
ruby-graphviz (~> 1.2)
|
ruby-graphviz (~> 1.2)
|
||||||
rails-html-sanitizer (1.0.3)
|
rails-html-sanitizer (1.0.3)
|
||||||
loofah (~> 2.0)
|
loofah (~> 2.0)
|
||||||
railties (5.0.0)
|
railties (5.0.0.1)
|
||||||
actionpack (= 5.0.0)
|
actionpack (= 5.0.0.1)
|
||||||
activesupport (= 5.0.0)
|
activesupport (= 5.0.0.1)
|
||||||
method_source
|
method_source
|
||||||
rake (>= 0.8.7)
|
rake (>= 0.8.7)
|
||||||
thor (>= 0.18.1, < 2.0)
|
thor (>= 0.18.1, < 2.0)
|
||||||
@ -179,6 +225,10 @@ GEM
|
|||||||
rb-fsevent (0.9.7)
|
rb-fsevent (0.9.7)
|
||||||
rb-inotify (0.9.7)
|
rb-inotify (0.9.7)
|
||||||
ffi (>= 0.5.0)
|
ffi (>= 0.5.0)
|
||||||
|
rest-client (2.0.0)
|
||||||
|
http-cookie (>= 1.0.2, < 2.0)
|
||||||
|
mime-types (>= 1.16, < 4.0)
|
||||||
|
netrc (~> 0.8)
|
||||||
rubocop (0.42.0)
|
rubocop (0.42.0)
|
||||||
parser (>= 2.3.1.1, < 3.0)
|
parser (>= 2.3.1.1, < 3.0)
|
||||||
powerpack (~> 0.1)
|
powerpack (~> 0.1)
|
||||||
@ -187,7 +237,7 @@ GEM
|
|||||||
unicode-display_width (~> 1.0, >= 1.0.1)
|
unicode-display_width (~> 1.0, >= 1.0.1)
|
||||||
ruby-graphviz (1.2.2)
|
ruby-graphviz (1.2.2)
|
||||||
ruby-progressbar (1.8.1)
|
ruby-progressbar (1.8.1)
|
||||||
ruby_dep (1.3.1)
|
ruby_dep (1.4.0)
|
||||||
sass (3.4.22)
|
sass (3.4.22)
|
||||||
sass-rails (5.0.6)
|
sass-rails (5.0.6)
|
||||||
railties (>= 4.0.0, < 6)
|
railties (>= 4.0.0, < 6)
|
||||||
@ -195,7 +245,13 @@ GEM
|
|||||||
sprockets (>= 2.8, < 4.0)
|
sprockets (>= 2.8, < 4.0)
|
||||||
sprockets-rails (>= 2.0, < 4.0)
|
sprockets-rails (>= 2.0, < 4.0)
|
||||||
tilt (>= 1.1, < 3)
|
tilt (>= 1.1, < 3)
|
||||||
|
settingslogic (2.0.9)
|
||||||
shellany (0.0.1)
|
shellany (0.0.1)
|
||||||
|
simplecov (0.12.0)
|
||||||
|
docile (~> 1.1.0)
|
||||||
|
json (>= 1.8, < 3)
|
||||||
|
simplecov-html (~> 0.10.0)
|
||||||
|
simplecov-html (0.10.0)
|
||||||
slop (3.6.0)
|
slop (3.6.0)
|
||||||
spring (1.7.2)
|
spring (1.7.2)
|
||||||
spring-watcher-listen (2.0.0)
|
spring-watcher-listen (2.0.0)
|
||||||
@ -211,14 +267,17 @@ GEM
|
|||||||
thor (0.19.1)
|
thor (0.19.1)
|
||||||
thread_safe (0.3.5)
|
thread_safe (0.3.5)
|
||||||
tilt (2.0.5)
|
tilt (2.0.5)
|
||||||
turbolinks (5.0.0)
|
turbolinks (5.0.1)
|
||||||
turbolinks-source (~> 5)
|
turbolinks-source (~> 5)
|
||||||
turbolinks-source (5.0.0)
|
turbolinks-source (5.0.0)
|
||||||
tzinfo (1.2.2)
|
tzinfo (1.2.2)
|
||||||
thread_safe (~> 0.1)
|
thread_safe (~> 0.1)
|
||||||
uglifier (3.0.0)
|
uglifier (3.0.2)
|
||||||
execjs (>= 0.3.0, < 3)
|
execjs (>= 0.3.0, < 3)
|
||||||
unicode-display_width (1.1.0)
|
unf (0.1.4)
|
||||||
|
unf_ext
|
||||||
|
unf_ext (0.0.7.2)
|
||||||
|
unicode-display_width (1.1.1)
|
||||||
web-console (3.3.1)
|
web-console (3.3.1)
|
||||||
actionview (>= 5.0)
|
actionview (>= 5.0)
|
||||||
activemodel (>= 5.0)
|
activemodel (>= 5.0)
|
||||||
@ -234,28 +293,41 @@ PLATFORMS
|
|||||||
DEPENDENCIES
|
DEPENDENCIES
|
||||||
awesome_print
|
awesome_print
|
||||||
bcrypt (~> 3.1.7)
|
bcrypt (~> 3.1.7)
|
||||||
|
better_errors
|
||||||
binding_of_caller
|
binding_of_caller
|
||||||
|
bourbon
|
||||||
|
brakeman
|
||||||
byebug
|
byebug
|
||||||
figaro (~> 1.1.1)
|
figaro (~> 1.1.1)
|
||||||
guard
|
guard
|
||||||
|
guard-brakeman
|
||||||
guard-livereload
|
guard-livereload
|
||||||
guard-minitest
|
guard-minitest
|
||||||
guard-rubocop
|
guard-rubocop
|
||||||
guard-shell
|
guard-shell
|
||||||
|
inky-rb
|
||||||
jbuilder (~> 2.6)
|
jbuilder (~> 2.6)
|
||||||
jquery-rails
|
jquery-rails
|
||||||
json (~> 2.0.2)
|
json (~> 2.0.2)
|
||||||
listen (~> 3.0)
|
listen
|
||||||
|
mailjet (~> 1.3.8)
|
||||||
minitest-reporters
|
minitest-reporters
|
||||||
mysql2 (>= 0.3.18, < 0.5)
|
mysql2 (>= 0.3.18, < 0.5)
|
||||||
|
neat
|
||||||
|
policy-assertions
|
||||||
|
premailer-rails
|
||||||
pry-byebug
|
pry-byebug
|
||||||
pry-rails
|
pry-rails
|
||||||
puma (~> 3.0)
|
puma (~> 3.0)
|
||||||
|
pundit
|
||||||
rack-livereload
|
rack-livereload
|
||||||
rails (~> 5.0.0)
|
rails (~> 5.0, >= 5.0.0.1)
|
||||||
|
rails-controller-testing
|
||||||
rails-erd
|
rails-erd
|
||||||
rubocop (~> 0.42.0)
|
rubocop (~> 0.42.0)
|
||||||
sass-rails (~> 5.0)
|
sass-rails (~> 5.0)
|
||||||
|
settingslogic (~> 2.0.9)
|
||||||
|
simplecov
|
||||||
spring
|
spring
|
||||||
spring-watcher-listen (~> 2.0.0)
|
spring-watcher-listen (~> 2.0.0)
|
||||||
turbolinks (~> 5)
|
turbolinks (~> 5)
|
||||||
|
86
Guardfile
86
Guardfile
@ -1,3 +1,4 @@
|
|||||||
|
# frozen_string_literal: true
|
||||||
# A sample Guardfile
|
# A sample Guardfile
|
||||||
# More info at https://github.com/guard/guard#readme
|
# More info at https://github.com/guard/guard#readme
|
||||||
|
|
||||||
@ -15,29 +16,82 @@
|
|||||||
#
|
#
|
||||||
# and, you'll have to watch "config/Guardfile" instead of "Guardfile"
|
# and, you'll have to watch "config/Guardfile" instead of "Guardfile"
|
||||||
|
|
||||||
guard :minitest, spring: true, all_after_pass: true do
|
guard 'livereload' do
|
||||||
watch(%r{^test/test_helper\.rb$}) { 'test' }
|
extensions = {
|
||||||
watch(%r{^test/(.*)\/?(.*)_test\.rb$})
|
css: :css,
|
||||||
watch(%r{^app/(.*/)?([^/]+)\.rb$}) { |m| "test/#{m[1]}#{m[2]}_test.rb" }
|
scss: :css,
|
||||||
watch(%r{^lib/(.*/)?([^/]+)\.rb$}) { |m| "test/lib/#{m[1]}#{m[2]}_test.rb" }
|
sass: :css,
|
||||||
|
js: :js,
|
||||||
|
coffee: :js,
|
||||||
|
html: :html,
|
||||||
|
png: :png,
|
||||||
|
gif: :gif,
|
||||||
|
jpg: :jpg,
|
||||||
|
jpeg: :jpeg,
|
||||||
|
# less: :less, # uncomment if you want LESS stylesheets done in browser
|
||||||
|
}
|
||||||
|
|
||||||
|
rails_view_exts = %w(erb haml slim)
|
||||||
|
|
||||||
|
# file types LiveReload may optimize refresh for
|
||||||
|
compiled_exts = extensions.values.uniq
|
||||||
|
watch(%r{public/.+\.(#{compiled_exts * '|'})})
|
||||||
|
|
||||||
|
extensions.each do |ext, type|
|
||||||
|
watch(%r{
|
||||||
|
(?:app|vendor)
|
||||||
|
(?:/assets/\w+/(?<path>[^.]+) # path+base without extension
|
||||||
|
(?<ext>\.#{ext})) # matching extension (must be first encountered)
|
||||||
|
(?:\.\w+|$) # other extensions
|
||||||
|
}x) do |m|
|
||||||
|
path = m[1]
|
||||||
|
"/assets/#{path}.#{type}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# file needing a full reload of the page anyway
|
||||||
|
watch(%r{app/views/.+\.(#{rails_view_exts * '|'})$})
|
||||||
|
watch(%r{app/(helpers|controllers)/.+\.rb})
|
||||||
|
watch(%r{config/locales/.+\.yml})
|
||||||
end
|
end
|
||||||
|
|
||||||
guard 'livereload' do
|
guard :minitest, spring: "bin/rails test", all_after_pass: true do
|
||||||
watch(%r{app/assets/.+\.(scss|css|js)})
|
watch(%r{^app/(.+)\.rb$}) { |m| ["test/#{m[1]}", "test/#{m[1]}_test.rb"] }
|
||||||
watch(%r{app/views/.+\.(erb|haml|slim)$})
|
watch(%r{^app/controllers/(admin|application)_controller\.rb$}) { 'test/controllers' }
|
||||||
watch(%r{app/controllers/.+\.rb})
|
watch(%r{^app/controllers/(.+)_controller\.rb$}) { |m| "test/integration/#{m[1]}_test.rb" }
|
||||||
watch(%r{app/helpers/.+\.rb})
|
watch(%r{^app/views/(.+)_mailer/.+}) { |m| "test/mailers/#{m[1]}_mailer_test.rb" }
|
||||||
watch(%r{public/.+\.(css|js|html)})
|
watch(%r{^lib/(.+)\.rb$}) { |m| "test/lib/#{m[1]}_test.rb" }
|
||||||
watch(%r{config/locales/.+\.yml})
|
watch(%r{^test/test_helper\.rb$}) { 'test' }
|
||||||
|
watch(%r{^test/.+_test\.rb$})
|
||||||
|
# run controller/integration test when touching the router or erb files
|
||||||
|
watch(%r{^app/views/((?!_mailer).)*([^/]+)\.erb$}) { ["test/controllers", "test/integration"] }
|
||||||
|
watch(%r{^config/routes.rb}) { ["test/controllers", "test/integration"] }
|
||||||
|
# run mailers/integration test when touching mailer erb files
|
||||||
|
watch(%r{^app/views/(.*_mailer/)?([^/]+)\.erb$}) { ["test/mailers", "test/integration"] }
|
||||||
|
end
|
||||||
|
|
||||||
# Rails Assets Pipeline
|
# ESLint
|
||||||
watch(%r{(app|vendor)(/assets/\w+/(.+\.(scss|css|js|html|png|jpg))).*}) do |m|
|
guard :shell, all_on_start: true do
|
||||||
"/assets/#{m[3]}"
|
# TODO: Annoyingly, all files are linted twice on start/full runs. Why?
|
||||||
|
watch %r{app/assets/javascripts/*/.*} do |file|
|
||||||
|
system %(echo "ESLint:\033[32m #{file[0]}\033[0m")
|
||||||
|
system %(eslint #{file[0]})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
guard :rubocop do
|
guard :rubocop, cli: %w(-D -S) do
|
||||||
|
watch(/.rubocop.yml/)
|
||||||
watch(/.+\.rb$/)
|
watch(/.+\.rb$/)
|
||||||
watch(/Rakefile/)
|
watch(/Rakefile/)
|
||||||
watch(%r{(?:.+/)?\.rubocop\.yml$}) { |m| File.dirname(m[0]) }
|
watch(%r{(?:.+/)?\.rubocop\.yml$}) { |m| File.dirname(m[0]) }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
guard 'brakeman', run_on_start: true, quiet: true do
|
||||||
|
## Lets not watch files for brakeman,
|
||||||
|
## just scan on guard start, and full runs.
|
||||||
|
#
|
||||||
|
# watch(%r{^app/.+\.(erb|haml|rhtml|rb)$})
|
||||||
|
# watch(%r{^config/.+\.rb$})
|
||||||
|
# watch(%r{^lib/.+\.rb$})
|
||||||
|
# watch('Gemfile')
|
||||||
|
end
|
||||||
|
100
README.md
100
README.md
@ -2,27 +2,85 @@
|
|||||||
|
|
||||||
This application manages quizzes intended to be used as pre-interview skill assessments.
|
This application manages quizzes intended to be used as pre-interview skill assessments.
|
||||||
|
|
||||||
|
## Development Guidelines
|
||||||
|
|
||||||
|
Please follow these guidelines as close as possible. Discuss and question them as needed.
|
||||||
|
|
||||||
|
* Run Guard while developing.
|
||||||
|
* `bundle exec guard`
|
||||||
|
* Always execute a full run before a push (simply hit return in your guard session).
|
||||||
|
* Honor RuboCop warnings.
|
||||||
|
* Write tests, And keep them green.
|
||||||
|
* Review the coverage report, keeping coverate > 90%.
|
||||||
|
* coverage/index.html
|
||||||
|
* It is OK to delete tests which are duplicated, or no longer relevant.
|
||||||
|
* If you find a bug, write a test to recreate it, so it never comes back unnoticed.
|
||||||
|
* Make sure to keep the fixture files current.
|
||||||
|
* `test/fixtures/*.yml`
|
||||||
|
* Include any new development data needs.
|
||||||
|
* Protect Gemfile.
|
||||||
|
* Does your new gem bring in a ton of unnecessary or outdated gems?
|
||||||
|
* Are you bringing in a gem that solves a problem already addressed by an existing gem?
|
||||||
|
* Do you really need this gem, or just a simple service object?
|
||||||
|
* Place your new gem appropriately. Some gem blocks are order specific, but most are alphabetized.
|
||||||
|
* Keep git comment subjects short, and use git comment bodies for more details.
|
||||||
|
* Pull with --rebase.
|
||||||
|
* `git config --global pull.rebase true`
|
||||||
|
* Feature branches are nice.
|
||||||
|
* Rebase feature branches onto develop before merging.
|
||||||
|
* `push -f` is ok on feature branches. Just communicate with others using that branch.
|
||||||
|
* Never merge develop _down_ to a feature branch.
|
||||||
|
* Merge with `--no-ff` when appropriate, `--squash` "WIP" commits into a complete thought.
|
||||||
|
* Clean up your remote branches after merge.
|
||||||
|
* Keep code comments to a minimum.
|
||||||
|
* We use git. Write a good commit message instead.
|
||||||
|
* Remove/Update code comments when changes are made.
|
||||||
|
* Leave the code better than you found it.
|
||||||
|
* Have fun.
|
||||||
|
|
||||||
|
## Setup
|
||||||
|
* clone
|
||||||
|
* checkout develop
|
||||||
|
* bundle
|
||||||
|
* npm install
|
||||||
|
* bower install
|
||||||
|
* cp config/application.yml.sample config/application.yml
|
||||||
|
* edit and update proper values to application.yml
|
||||||
|
* rake db:setup
|
||||||
|
* rake db:migrate
|
||||||
|
* rake db:fixtures:load
|
||||||
|
* `./rebuild-dev-db.sh` is a convenience script to rebuild and refresh your dev db with the fixture data.
|
||||||
|
|
||||||
|
## Docker
|
||||||
|
|
||||||
|
You can develop in this app with a native rails install, if you prefer.
|
||||||
|
However, there is also a docker image setup if you do not want to install all the supporting gems and libraries.
|
||||||
|
Please note: The guard watch session does not run all watches correctly in the docker container. The only issue this causes is all the automation is not 100%. Simply manually kick off the runners occasionally by hitting return in the session.
|
||||||
|
|
||||||
|
To use the docker container, you need to install and launch docker, which can be found here:
|
||||||
|
https://www.docker.com/products/docker
|
||||||
|
|
||||||
|
Once the container is started, you can still edit files from your host project directory.
|
||||||
|
|
||||||
|
visit http://localhost:3000 like normal
|
||||||
|
|
||||||
|
There are some convenience scripts included to make starting the container and rails app easier.
|
||||||
|
|
||||||
|
#### `./start-docker.sh`
|
||||||
|
* Execute from terminal, on the host machine, in the project directory
|
||||||
|
- This will pull the image from dockerhub, if needed
|
||||||
|
- Create and start up container
|
||||||
|
|
||||||
|
#### Once in the container:
|
||||||
|
* `./start-dev.sh`
|
||||||
|
* will spin up a dev session with tmux
|
||||||
|
* `./start-server.sh`
|
||||||
|
- starts up just rails server for viewing application
|
||||||
|
|
||||||
|
|
||||||
# dev
|
## TODOs and notes
|
||||||
* you can dev native, or in docker
|
|
||||||
* use guard
|
|
||||||
* honor RuboCop
|
|
||||||
* keep tests green
|
|
||||||
* pull --rebase !always `git config --global pull.rebase true`
|
|
||||||
* cd vendor/assets/ && bitters install && cd ../..
|
|
||||||
* place all required dev seed data in fixtures for rails db:fixtures:load
|
|
||||||
|
|
||||||
# Docker
|
|
||||||
|
|
||||||
* ./start-docker.sh
|
|
||||||
- will build source image, it not exist
|
|
||||||
- created contaier and starts
|
|
||||||
* ./start-dev.sh
|
|
||||||
- after connected to container, run this to spin up a dev session
|
|
||||||
- edit files from host in favorite editor
|
|
||||||
* ./start-server.sh
|
|
||||||
- starts up simple server for viewing/demo sans guard
|
|
||||||
|
|
||||||
visit http://localhost:3000
|
|
||||||
|
|
||||||
|
* Question attachment path: http://dev.perficientxd.com/skill_assets/
|
||||||
|
* clean code
|
||||||
|
* [Confident Ruby](http://www.confidentruby.com/)
|
||||||
|
* [POODR](http://www.poodr.com/)
|
||||||
|
1
Rakefile
1
Rakefile
@ -1,3 +1,4 @@
|
|||||||
|
# frozen_string_literal: true
|
||||||
# Add your own tasks in files placed in lib/tasks ending in .rake,
|
# Add your own tasks in files placed in lib/tasks ending in .rake,
|
||||||
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
|
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
|
||||||
|
|
||||||
|
BIN
app/assets/fonts/HalisR-Black.otf
Normal file
BIN
app/assets/fonts/HalisR-Black.otf
Normal file
Binary file not shown.
BIN
app/assets/fonts/HalisR-Black.woff
Normal file
BIN
app/assets/fonts/HalisR-Black.woff
Normal file
Binary file not shown.
BIN
app/assets/fonts/HalisR-Black.woff2
Normal file
BIN
app/assets/fonts/HalisR-Black.woff2
Normal file
Binary file not shown.
BIN
app/assets/fonts/HalisR-Bold.otf
Normal file
BIN
app/assets/fonts/HalisR-Bold.otf
Normal file
Binary file not shown.
BIN
app/assets/fonts/HalisR-Bold.woff
Normal file
BIN
app/assets/fonts/HalisR-Bold.woff
Normal file
Binary file not shown.
BIN
app/assets/fonts/HalisR-Bold.woff2
Normal file
BIN
app/assets/fonts/HalisR-Bold.woff2
Normal file
Binary file not shown.
BIN
app/assets/fonts/HalisR-Book.otf
Normal file
BIN
app/assets/fonts/HalisR-Book.otf
Normal file
Binary file not shown.
BIN
app/assets/fonts/HalisR-Book.woff
Normal file
BIN
app/assets/fonts/HalisR-Book.woff
Normal file
Binary file not shown.
BIN
app/assets/fonts/HalisR-Book.woff2
Normal file
BIN
app/assets/fonts/HalisR-Book.woff2
Normal file
Binary file not shown.
BIN
app/assets/fonts/HalisR-ExtraLight.otf
Normal file
BIN
app/assets/fonts/HalisR-ExtraLight.otf
Normal file
Binary file not shown.
BIN
app/assets/fonts/HalisR-ExtraLight.woff
Normal file
BIN
app/assets/fonts/HalisR-ExtraLight.woff
Normal file
Binary file not shown.
BIN
app/assets/fonts/HalisR-ExtraLight.woff2
Normal file
BIN
app/assets/fonts/HalisR-ExtraLight.woff2
Normal file
Binary file not shown.
BIN
app/assets/fonts/HalisR-Light.otf
Normal file
BIN
app/assets/fonts/HalisR-Light.otf
Normal file
Binary file not shown.
BIN
app/assets/fonts/HalisR-Light.woff
Normal file
BIN
app/assets/fonts/HalisR-Light.woff
Normal file
Binary file not shown.
BIN
app/assets/fonts/HalisR-Light.woff2
Normal file
BIN
app/assets/fonts/HalisR-Light.woff2
Normal file
Binary file not shown.
BIN
app/assets/fonts/HalisR-Medium.otf
Normal file
BIN
app/assets/fonts/HalisR-Medium.otf
Normal file
Binary file not shown.
BIN
app/assets/fonts/HalisR-Medium.woff
Normal file
BIN
app/assets/fonts/HalisR-Medium.woff
Normal file
Binary file not shown.
BIN
app/assets/fonts/HalisR-Medium.woff2
Normal file
BIN
app/assets/fonts/HalisR-Medium.woff2
Normal file
Binary file not shown.
BIN
app/assets/fonts/HalisR-Regular.otf
Normal file
BIN
app/assets/fonts/HalisR-Regular.otf
Normal file
Binary file not shown.
BIN
app/assets/fonts/HalisR-Regular.woff
Normal file
BIN
app/assets/fonts/HalisR-Regular.woff
Normal file
Binary file not shown.
BIN
app/assets/fonts/HalisR-Regular.woff2
Normal file
BIN
app/assets/fonts/HalisR-Regular.woff2
Normal file
Binary file not shown.
BIN
app/assets/fonts/HalisR-Thin.otf
Normal file
BIN
app/assets/fonts/HalisR-Thin.otf
Normal file
Binary file not shown.
BIN
app/assets/fonts/HalisR-Thin.woff
Normal file
BIN
app/assets/fonts/HalisR-Thin.woff
Normal file
Binary file not shown.
BIN
app/assets/fonts/HalisR-Thin.woff2
Normal file
BIN
app/assets/fonts/HalisR-Thin.woff2
Normal file
Binary file not shown.
BIN
app/assets/fonts/Lato-Black.ttf
Normal file
BIN
app/assets/fonts/Lato-Black.ttf
Normal file
Binary file not shown.
BIN
app/assets/fonts/Lato-Black.woff
Normal file
BIN
app/assets/fonts/Lato-Black.woff
Normal file
Binary file not shown.
BIN
app/assets/fonts/Lato-Black.woff2
Normal file
BIN
app/assets/fonts/Lato-Black.woff2
Normal file
Binary file not shown.
BIN
app/assets/fonts/Lato-BlackItalic.ttf
Normal file
BIN
app/assets/fonts/Lato-BlackItalic.ttf
Normal file
Binary file not shown.
BIN
app/assets/fonts/Lato-BlackItalic.woff
Normal file
BIN
app/assets/fonts/Lato-BlackItalic.woff
Normal file
Binary file not shown.
BIN
app/assets/fonts/Lato-BlackItalic.woff2
Normal file
BIN
app/assets/fonts/Lato-BlackItalic.woff2
Normal file
Binary file not shown.
BIN
app/assets/fonts/Lato-Bold.ttf
Normal file
BIN
app/assets/fonts/Lato-Bold.ttf
Normal file
Binary file not shown.
BIN
app/assets/fonts/Lato-Bold.woff
Normal file
BIN
app/assets/fonts/Lato-Bold.woff
Normal file
Binary file not shown.
BIN
app/assets/fonts/Lato-Bold.woff2
Normal file
BIN
app/assets/fonts/Lato-Bold.woff2
Normal file
Binary file not shown.
BIN
app/assets/fonts/Lato-BoldItalic.ttf
Normal file
BIN
app/assets/fonts/Lato-BoldItalic.ttf
Normal file
Binary file not shown.
BIN
app/assets/fonts/Lato-BoldItalic.woff
Normal file
BIN
app/assets/fonts/Lato-BoldItalic.woff
Normal file
Binary file not shown.
BIN
app/assets/fonts/Lato-BoldItalic.woff2
Normal file
BIN
app/assets/fonts/Lato-BoldItalic.woff2
Normal file
Binary file not shown.
BIN
app/assets/fonts/Lato-Hairline.ttf
Normal file
BIN
app/assets/fonts/Lato-Hairline.ttf
Normal file
Binary file not shown.
BIN
app/assets/fonts/Lato-Hairline.woff
Normal file
BIN
app/assets/fonts/Lato-Hairline.woff
Normal file
Binary file not shown.
BIN
app/assets/fonts/Lato-Hairline.woff2
Normal file
BIN
app/assets/fonts/Lato-Hairline.woff2
Normal file
Binary file not shown.
BIN
app/assets/fonts/Lato-HairlineItalic.ttf
Normal file
BIN
app/assets/fonts/Lato-HairlineItalic.ttf
Normal file
Binary file not shown.
BIN
app/assets/fonts/Lato-HairlineItalic.woff
Normal file
BIN
app/assets/fonts/Lato-HairlineItalic.woff
Normal file
Binary file not shown.
BIN
app/assets/fonts/Lato-HairlineItalic.woff2
Normal file
BIN
app/assets/fonts/Lato-HairlineItalic.woff2
Normal file
Binary file not shown.
BIN
app/assets/fonts/Lato-Italic.ttf
Normal file
BIN
app/assets/fonts/Lato-Italic.ttf
Normal file
Binary file not shown.
BIN
app/assets/fonts/Lato-Italic.woff
Normal file
BIN
app/assets/fonts/Lato-Italic.woff
Normal file
Binary file not shown.
BIN
app/assets/fonts/Lato-Italic.woff2
Normal file
BIN
app/assets/fonts/Lato-Italic.woff2
Normal file
Binary file not shown.
BIN
app/assets/fonts/Lato-Light.ttf
Normal file
BIN
app/assets/fonts/Lato-Light.ttf
Normal file
Binary file not shown.
BIN
app/assets/fonts/Lato-Light.woff
Normal file
BIN
app/assets/fonts/Lato-Light.woff
Normal file
Binary file not shown.
BIN
app/assets/fonts/Lato-Light.woff2
Normal file
BIN
app/assets/fonts/Lato-Light.woff2
Normal file
Binary file not shown.
BIN
app/assets/fonts/Lato-LightItalic.ttf
Normal file
BIN
app/assets/fonts/Lato-LightItalic.ttf
Normal file
Binary file not shown.
BIN
app/assets/fonts/Lato-LightItalic.woff
Normal file
BIN
app/assets/fonts/Lato-LightItalic.woff
Normal file
Binary file not shown.
BIN
app/assets/fonts/Lato-LightItalic.woff2
Normal file
BIN
app/assets/fonts/Lato-LightItalic.woff2
Normal file
Binary file not shown.
BIN
app/assets/fonts/Lato-Regular.ttf
Normal file
BIN
app/assets/fonts/Lato-Regular.ttf
Normal file
Binary file not shown.
BIN
app/assets/fonts/Lato-Regular.woff
Normal file
BIN
app/assets/fonts/Lato-Regular.woff
Normal file
Binary file not shown.
BIN
app/assets/fonts/Lato-Regular.woff2
Normal file
BIN
app/assets/fonts/Lato-Regular.woff2
Normal file
Binary file not shown.
BIN
app/assets/images/icon-dropdownlist.png
Normal file
BIN
app/assets/images/icon-dropdownlist.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.1 KiB |
BIN
app/assets/images/icon-unorderedlistbullet.png
Normal file
BIN
app/assets/images/icon-unorderedlistbullet.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.3 KiB |
BIN
app/assets/images/perficientdigital-logo.jpg
Normal file
BIN
app/assets/images/perficientdigital-logo.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 10 KiB |
BIN
app/assets/images/perficientdigital.png
Normal file
BIN
app/assets/images/perficientdigital.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.7 KiB |
BIN
app/assets/images/yellowslant-left.jpg
Normal file
BIN
app/assets/images/yellowslant-left.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.6 KiB |
BIN
app/assets/images/yellowslant-right.jpg
Normal file
BIN
app/assets/images/yellowslant-right.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.6 KiB |
18
app/assets/javascripts/admin.js
Normal file
18
app/assets/javascripts/admin.js
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
$(function(){
|
||||||
|
|
||||||
|
$("form").on('click', "[data-id=input_option_adder]", function(){
|
||||||
|
var $new_li = $(this).siblings('li').clone();
|
||||||
|
$new_li.attr('style', '');
|
||||||
|
$("[data-id=input_option_list]").append($new_li);
|
||||||
|
$new_li.find('input').focus();
|
||||||
|
});
|
||||||
|
|
||||||
|
$("#question_input_type").on('change', function(){
|
||||||
|
var qid = $(this).attr('data-qid') === undefined ? '' : "/" + $(this).attr('data-qid');
|
||||||
|
// /admin/question(/:question_id)/options/:input_type
|
||||||
|
$("[data-id=input-options-wrapper]").load("/admin/question" + qid + "/options/" + $(this).val(), function(){
|
||||||
|
$(".code-input textarea").linedtextarea();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
16
app/assets/javascripts/ajax-links.js
Normal file
16
app/assets/javascripts/ajax-links.js
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
function handleAjaxResponse($el) {
|
||||||
|
var $header = $('header');
|
||||||
|
$el.on("ajax:success", function(e, data){
|
||||||
|
$header.after('<div class="success">' + data.message + '</div>');
|
||||||
|
}).on("ajax:error", function(e, xhr) {
|
||||||
|
if (xhr.status === 400){
|
||||||
|
$header.after('<div class="error">' + xhr.responseJSON.join('<br>') + '</div>');
|
||||||
|
} else {
|
||||||
|
$header.after('<div class="error">Oops! There was an error processing your request. Please try again.</div>');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
$(document).ready(function() {
|
||||||
|
$('[data-id=ajax-action]').each(function(){ handleAjaxResponse($(this)); });
|
||||||
|
});
|
@ -13,4 +13,10 @@
|
|||||||
//= require jquery
|
//= require jquery
|
||||||
//= require jquery_ujs
|
//= require jquery_ujs
|
||||||
//= require turbolinks
|
//= require turbolinks
|
||||||
//= require_tree .
|
//= require modernizr-lite/modernizr
|
||||||
|
|
||||||
|
//= require ajax-links
|
||||||
|
|
||||||
|
//= require forms/button-group
|
||||||
|
//= require forms/animations
|
||||||
|
//= require forms/textarea-limit
|
||||||
|
@ -5,9 +5,9 @@
|
|||||||
//= require_self
|
//= require_self
|
||||||
//= require_tree ./channels
|
//= require_tree ./channels
|
||||||
|
|
||||||
(function() {
|
// (function() {
|
||||||
this.App || (this.App = {});
|
// this.App || (this.App = {});
|
||||||
|
//
|
||||||
App.cable = ActionCable.createConsumer();
|
// App.cable = ActionCable.createConsumer();
|
||||||
|
//
|
||||||
}).call(this);
|
// }).call(this);
|
||||||
|
30
app/assets/javascripts/forms/animations.js
Normal file
30
app/assets/javascripts/forms/animations.js
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
var $textInput = $('[type="color"], [type="date"], [type="datetime"], [type="datetime-local"], [type="email"], [type="month"], [type="number"], [type="password"], [type="search"], [type="tel"], [type="text"], [type="time"], [type="url"], [type="week"], input:not([type]), textarea');
|
||||||
|
|
||||||
|
// Text Input Label Animation
|
||||||
|
$textInput.prev('label').addClass('loaded');
|
||||||
|
$textInput.each(function() {
|
||||||
|
if( $(this).val() ) {
|
||||||
|
$(this).prev('label').addClass('animate');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$textInput.on('focus', function() {
|
||||||
|
$(this).prev('label').addClass('animate');
|
||||||
|
}).on('focusout', function() {
|
||||||
|
if( !$(this).val() ) {
|
||||||
|
$(this).prev('label').removeClass('animate');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// form error resolutions
|
||||||
|
$('form').has('.error').each(function(){
|
||||||
|
var $form = $(this);
|
||||||
|
|
||||||
|
$form.on('keyup', $textInput, function(){
|
||||||
|
$form.find(".error").addClass('resolve-error');
|
||||||
|
});
|
||||||
|
|
||||||
|
$form.on('change', $("[type=radio], [type=checkbox]"), function(){
|
||||||
|
$form.find(".error").addClass('resolve-error');
|
||||||
|
});
|
||||||
|
});
|
8
app/assets/javascripts/forms/button-group.js
Normal file
8
app/assets/javascripts/forms/button-group.js
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
/**
|
||||||
|
* Button Group Functionality
|
||||||
|
*/
|
||||||
|
|
||||||
|
$('.btn-group button').click(function() {
|
||||||
|
$(this).siblings().removeClass('selected');
|
||||||
|
$(this).addClass('selected');
|
||||||
|
});
|
25
app/assets/javascripts/forms/textarea-limit.js
Normal file
25
app/assets/javascripts/forms/textarea-limit.js
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
$.fn.extend({
|
||||||
|
characterLimiter: function(limit, label) {
|
||||||
|
this.on("keyup focus show", function() {
|
||||||
|
setCount(this, label);
|
||||||
|
});
|
||||||
|
|
||||||
|
// TODO: append label container after $this, instead of hard HTML
|
||||||
|
function setCount(src, label) {
|
||||||
|
if(src !== undefined) {
|
||||||
|
var chars = src.value.length;
|
||||||
|
if (chars >= limit) {
|
||||||
|
src.value = src.value.substr(0, limit);
|
||||||
|
chars = limit;
|
||||||
|
}
|
||||||
|
label.html(limit - chars);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
setCount(this[0], label);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$(document).ready(function() {
|
||||||
|
$('textarea').characterLimiter(1000, $(".chars span"));
|
||||||
|
});
|
1
app/assets/javascripts/ie9.js
Normal file
1
app/assets/javascripts/ie9.js
Normal file
@ -0,0 +1 @@
|
|||||||
|
//= require html5shiv/dist/html5shiv.min
|
2
app/assets/javascripts/live-coder.js
Normal file
2
app/assets/javascripts/live-coder.js
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
//= require live-coder/linedtextarea
|
||||||
|
//= require live-coder/editor
|
117
app/assets/javascripts/live-coder/editor.js.erb
Normal file
117
app/assets/javascripts/live-coder/editor.js.erb
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
function updateResults(elem) {
|
||||||
|
if ($(elem).length ===0){return false;}
|
||||||
|
|
||||||
|
var resultsContainer = $(elem).find('[data-id="results"]')[0];
|
||||||
|
var codeHtml = $(elem).find('.code-html')[0].value.trim();
|
||||||
|
var codeCss = $(elem).find('.code-css')[0].value.trim();
|
||||||
|
var codeJs = $(elem).find('.code-js')[0].value.trim();
|
||||||
|
|
||||||
|
resultsContainer.innerHTML = "";
|
||||||
|
var iDoc = document.createElement('html');
|
||||||
|
var iHead = document.createElement('head');
|
||||||
|
var iBody = document.createElement('body');
|
||||||
|
|
||||||
|
var codeFrame = document.createElement('iframe');
|
||||||
|
codeFrame.setAttribute("width", "100%");
|
||||||
|
codeFrame.setAttribute("height", "100%");
|
||||||
|
resultsContainer.appendChild(codeFrame);
|
||||||
|
|
||||||
|
var jqueryNode = document.createElement("script");
|
||||||
|
jqueryNode.setAttribute("type", "text/javascript");
|
||||||
|
jqueryNode.setAttribute("src", "<%= "//#{ENV['full_app_url']}#{javascript_path "jquery"}" %>");
|
||||||
|
iHead.appendChild(jqueryNode);
|
||||||
|
|
||||||
|
var codeStyle = document.createElement("style");
|
||||||
|
codeStyle.setAttribute("type", "text/css");
|
||||||
|
var rulesNode = document.createTextNode(codeCss);
|
||||||
|
codeStyle.appendChild(rulesNode);
|
||||||
|
iHead.appendChild(codeStyle);
|
||||||
|
|
||||||
|
iDoc.appendChild(iHead);
|
||||||
|
iBody.innerHTML = codeHtml;
|
||||||
|
iDoc.appendChild(iBody);
|
||||||
|
|
||||||
|
var codeScript = document.createElement("script");
|
||||||
|
codeScript.setAttribute("type", "text/javascript");
|
||||||
|
var scriptNode = document.createTextNode("setTimeout(function(){ " + codeJs + "}, 800);");
|
||||||
|
codeScript.appendChild(scriptNode);
|
||||||
|
iDoc.appendChild(codeScript);
|
||||||
|
|
||||||
|
codeFrame.contentWindow.document.open();
|
||||||
|
codeFrame.contentWindow.document.appendChild(iDoc);
|
||||||
|
codeFrame.contentWindow.document.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
function indentSelection(e){
|
||||||
|
if(e.keyCode === 9){
|
||||||
|
e.preventDefault();
|
||||||
|
|
||||||
|
var indent = " ";
|
||||||
|
var cursor = e.target.selectionStart;
|
||||||
|
var val = e.target.value;
|
||||||
|
var valStart = val.substring(0, e.target.selectionStart);
|
||||||
|
var valEnd = val.substring(e.target.selectionEnd, val.length);
|
||||||
|
var selected = val.substring(e.target.selectionStart, e.target.selectionEnd);
|
||||||
|
|
||||||
|
var resetCursor = function(start, end){
|
||||||
|
e.target.selectionStart = start;
|
||||||
|
e.target.selectionEnd = end;
|
||||||
|
};
|
||||||
|
|
||||||
|
var indented;
|
||||||
|
if(e.shiftKey){ //de-indent
|
||||||
|
if(selected.length > 0 && (/\n/.test(selected))){ //multi line
|
||||||
|
indented = selected.split(/\n/).map(function(line){
|
||||||
|
if(line.length > 0 && line.substring(0, indent.length) === indent){
|
||||||
|
line = line.substring(indent.length, line.length);
|
||||||
|
}
|
||||||
|
return line;
|
||||||
|
}).join("\n");
|
||||||
|
e.target.value = valStart + indented + val.substring(e.target.selectionEnd, val.length);
|
||||||
|
resetCursor(cursor, cursor + indented.length);
|
||||||
|
} else {
|
||||||
|
if(valStart.substring(valStart.length - indent.length) === indent){
|
||||||
|
e.target.value = valStart.substring(0, valStart.length - indent.length) + valEnd;
|
||||||
|
resetCursor(cursor, cursor - indent.length);
|
||||||
|
} else if(valEnd.substring(0, indent.length) === indent) {
|
||||||
|
e.target.value = valStart + valEnd.substring(indent.length, valEnd.length);
|
||||||
|
resetCursor(cursor, cursor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else { //indent
|
||||||
|
if(selected.length > 0 && (/\n/.test(selected))){ //multi line
|
||||||
|
indented = selected.split(/\n/).map(function(line){
|
||||||
|
if(line.length > 0){ line = indent + line; }
|
||||||
|
return line;
|
||||||
|
}).join("\n");
|
||||||
|
e.target.value = valStart + indented + val.substring(e.target.selectionEnd, val.length);
|
||||||
|
resetCursor(cursor, cursor + indented.length);
|
||||||
|
} else {
|
||||||
|
e.target.value = valStart + indent + selected + valEnd;
|
||||||
|
resetCursor(cursor + indent.length, cursor + indent.length);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
var timer = 0;
|
||||||
|
$(function(){
|
||||||
|
// wait a half second before updating results
|
||||||
|
// restart the timer if they resume typing
|
||||||
|
$('html').on('keyup', '.code-input textarea', function(){
|
||||||
|
var elem = $(this).closest("[data-id=live-coder-answer]");
|
||||||
|
if (timer) { clearTimeout(timer); }
|
||||||
|
timer = setTimeout(updateResults(elem), 500);
|
||||||
|
});
|
||||||
|
|
||||||
|
$("[data-id=live-coder-answer]").each(function(){
|
||||||
|
updateResults(this);
|
||||||
|
});
|
||||||
|
|
||||||
|
$("html").on('keydown', "textarea[data-id^=code-]", function(e){
|
||||||
|
indentSelection(e);
|
||||||
|
});
|
||||||
|
|
||||||
|
$(".code-input textarea").linedtextarea();
|
||||||
|
});
|
114
app/assets/javascripts/live-coder/linedtextarea.js
Normal file
114
app/assets/javascripts/live-coder/linedtextarea.js
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
/**
|
||||||
|
* NOTE: MARK MOSER EDITED COPY. DO NOT USE BOWER.
|
||||||
|
*
|
||||||
|
* jQuery Lined Textarea Plugin
|
||||||
|
* http://alan.blog-city.com/jquerylinedtextarea.htm
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010 Alan Williamson
|
||||||
|
*
|
||||||
|
* Version:
|
||||||
|
* $Id: jquery-linedtextarea.js 464 2010-01-08 10:36:33Z alan $
|
||||||
|
*
|
||||||
|
* Released under the MIT License:
|
||||||
|
* http://www.opensource.org/licenses/mit-license.php
|
||||||
|
*
|
||||||
|
* Usage:
|
||||||
|
* Displays a line number count column to the left of the textarea
|
||||||
|
*
|
||||||
|
* Class up your textarea with a given class, or target it directly
|
||||||
|
* with JQuery Selectors
|
||||||
|
*
|
||||||
|
* $(".lined").linedtextarea({
|
||||||
|
* selectedLine: 10,
|
||||||
|
* selectedClass: 'lineselect'
|
||||||
|
* });
|
||||||
|
*
|
||||||
|
* History:
|
||||||
|
* - 2010.01.08: Fixed a Google Chrome layout problem
|
||||||
|
* - 2010.01.07: Refactored code for speed/readability; Fixed horizontal sizing
|
||||||
|
* - 2010.01.06: Initial Release
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
(function($) {
|
||||||
|
$.fn.linedtextarea = function(options) {
|
||||||
|
|
||||||
|
// Get the Options
|
||||||
|
var opts = $.extend({}, $.fn.linedtextarea.defaults, options);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Helper function to make sure the line numbers are always
|
||||||
|
* kept up to the current system
|
||||||
|
*/
|
||||||
|
var fillOutLines = function(codeLines, h, lineNo){
|
||||||
|
while ( (codeLines.height() - h ) <= 0 ){
|
||||||
|
if ( lineNo == opts.selectedLine )
|
||||||
|
codeLines.append("<div class='lineno lineselect'>" + lineNo + "</div>");
|
||||||
|
else
|
||||||
|
codeLines.append("<div class='lineno'>" + lineNo + "</div>");
|
||||||
|
|
||||||
|
lineNo++;
|
||||||
|
}
|
||||||
|
return lineNo;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Iterate through each of the elements are to be applied to
|
||||||
|
*/
|
||||||
|
return this.each(function() {
|
||||||
|
var lineNo = 1;
|
||||||
|
var textarea = $(this);
|
||||||
|
|
||||||
|
/* Turn off the wrapping of as we don't want to screw up the line numbers */
|
||||||
|
textarea.attr("wrap", "off");
|
||||||
|
textarea.css({resize:'none'});
|
||||||
|
// var originalTextAreaWidth = textarea.outerWidth();
|
||||||
|
|
||||||
|
/* Wrap the text area in the elements we need */
|
||||||
|
textarea.wrap("<div class='linedtextarea'></div>");
|
||||||
|
var linedTextAreaDiv = textarea.parent().wrap("<div class='linedwrap'></div>");
|
||||||
|
var linedWrapDiv = linedTextAreaDiv.parent();
|
||||||
|
|
||||||
|
linedWrapDiv.prepend("<div class='lines'></div>");
|
||||||
|
|
||||||
|
var linesDiv = linedWrapDiv.find(".lines");
|
||||||
|
linesDiv.height( textarea.height() + 4 );
|
||||||
|
|
||||||
|
|
||||||
|
/* Draw the number bar; filling it out where necessary */
|
||||||
|
linesDiv.append( "<div class='codelines'></div>" );
|
||||||
|
var codeLinesDiv = linesDiv.find(".codelines");
|
||||||
|
lineNo = fillOutLines( codeLinesDiv, linesDiv.height(), 1 );
|
||||||
|
|
||||||
|
/* Move the textarea to the selected line */
|
||||||
|
if ( opts.selectedLine != -1 && !isNaN(opts.selectedLine) ){
|
||||||
|
var fontSize = parseInt( textarea.height() / (lineNo-2) );
|
||||||
|
var position = parseInt( fontSize * opts.selectedLine ) - (textarea.height()/2);
|
||||||
|
textarea[0].scrollTop = position;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* React to the scroll event */
|
||||||
|
textarea.scroll( function(){
|
||||||
|
var domTextArea = $(this)[0];
|
||||||
|
var scrollTop = domTextArea.scrollTop;
|
||||||
|
var clientHeight = domTextArea.clientHeight;
|
||||||
|
codeLinesDiv.css( {'margin-top': (-1*scrollTop) + "px"} );
|
||||||
|
lineNo = fillOutLines( codeLinesDiv, scrollTop + clientHeight, lineNo );
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
/* Should the textarea get resized outside of our control */
|
||||||
|
textarea.resize( function(){
|
||||||
|
var domTextArea = $(this)[0];
|
||||||
|
linesDiv.height( domTextArea.clientHeight + 4 );
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// default options
|
||||||
|
$.fn.linedtextarea.defaults = {
|
||||||
|
selectedLine: -1,
|
||||||
|
selectedClass: 'lineselect'
|
||||||
|
};
|
||||||
|
})(jQuery);
|
95
app/assets/javascripts/summary-edit.js
Normal file
95
app/assets/javascripts/summary-edit.js
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
/* global updateResults */
|
||||||
|
// TODO: remove global ^ once live-coder is properly name spaced
|
||||||
|
/**
|
||||||
|
* Summary Page Answer Editor
|
||||||
|
*/
|
||||||
|
function disableForm($form){
|
||||||
|
$form.find('fieldset').prop('disabled', true);
|
||||||
|
$form.find('textarea').prop('disabled', true);
|
||||||
|
$form.find('.button-save, .button-cancel').hide();
|
||||||
|
$form.find('.button-edit').show();
|
||||||
|
$form.find('.editable').removeClass('editable');
|
||||||
|
$('.button-edit, .submit-button').removeClass('disabled-button');
|
||||||
|
}
|
||||||
|
|
||||||
|
function restoreValues($form){
|
||||||
|
$form.find('[type=radio][data-last], [type=checkbox][data-last]').each(function(){
|
||||||
|
$(this).prop('checked', $(this).attr('data-last'));
|
||||||
|
});
|
||||||
|
|
||||||
|
$form.find('textarea[data-last]').each(function(){
|
||||||
|
$(this).val($(this).attr('data-last'));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateLocalValues($form){
|
||||||
|
$form.find('[type=radio][data-last], [type=checkbox][data-last]').each(function(){
|
||||||
|
$(this).attr('data-last', $(this).prop('checked') ? 'checked' : '');
|
||||||
|
});
|
||||||
|
|
||||||
|
$form.find('textarea[data-last]').each(function(){
|
||||||
|
$(this).attr('data-last', $(this).val());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateProgress(data) {
|
||||||
|
$(".progress-bar").attr('aria-valuenow', data.progress)
|
||||||
|
.attr('style','width: '+ data.progress +'%;')
|
||||||
|
.find('span').text(data.progress + '%');
|
||||||
|
if(data.can_submit === true){
|
||||||
|
$('#summary-submit').find('.error').remove();
|
||||||
|
$('#summary-submit').find('.submit-button').prop('disabled', false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function prepareAjax($form) {
|
||||||
|
$form.on("ajax:success", function(e, data){
|
||||||
|
$form.prepend('<div class="success">' + data.message + '</div>');
|
||||||
|
disableForm($form);
|
||||||
|
updateLocalValues($form);
|
||||||
|
updateProgress(data);
|
||||||
|
}).on("ajax:error", function(e, xhr) {
|
||||||
|
if (xhr.status === 400){
|
||||||
|
$form.prepend('<div class="error">' + xhr.responseJSON.join('<br>') + '</div>');
|
||||||
|
} else {
|
||||||
|
$form.prepend('<div class="error">Oops! There was an error processing your request. Please try again.</div>');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function editClickHandler(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
$('.button-edit, .submit-button').addClass('disabled-button');
|
||||||
|
var $form = $(e.delegateTarget).closest('form');
|
||||||
|
$(e.delegateTarget).addClass('editable');
|
||||||
|
$form.find('fieldset').prop('disabled', false);
|
||||||
|
$form.find('textarea').prop('disabled', false);
|
||||||
|
$form.find('textarea').focus();
|
||||||
|
$form.find('.button-edit').hide().delay();
|
||||||
|
$form.find('.button-save, .button-cancel').show().delay();
|
||||||
|
}
|
||||||
|
|
||||||
|
function cancelClickHandler(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
var $form = $(e.delegateTarget).closest('form');
|
||||||
|
$form.find('.error, .success').remove();
|
||||||
|
disableForm($form);
|
||||||
|
restoreValues($form);
|
||||||
|
updateResults($form.find("[data-id=live-coder-answer]"));
|
||||||
|
}
|
||||||
|
|
||||||
|
function saveClickHandler(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
var $form = $(e.delegateTarget).closest('form');
|
||||||
|
$form.find('.error, .success').remove();
|
||||||
|
$form.submit();
|
||||||
|
}
|
||||||
|
|
||||||
|
$('.summary_tpl fieldset').prop('disabled', true);
|
||||||
|
$('.summary_tpl textarea').prop('disabled', true);
|
||||||
|
$('.summary_tpl form').each(function(){ prepareAjax($(this)); });
|
||||||
|
$('.summary_tpl .answer-sec')
|
||||||
|
.find('.button-cancel, .button-save').hide().end()
|
||||||
|
.on('click', '.button-edit', editClickHandler)
|
||||||
|
.on('click', '.button-cancel', cancelClickHandler)
|
||||||
|
.on('click', '.button-save', saveClickHandler);
|
@ -10,6 +10,17 @@
|
|||||||
* files in this directory. Styles in this file should be added after the last require_* statement.
|
* files in this directory. Styles in this file should be added after the last require_* statement.
|
||||||
* It is generally better to create a new file per style scope.
|
* It is generally better to create a new file per style scope.
|
||||||
*
|
*
|
||||||
*= require_tree .
|
|
||||||
*= require_self
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@import 'bourbon';
|
||||||
|
@import 'neat';
|
||||||
|
|
||||||
|
@import 'core/fonts';
|
||||||
|
@import 'core/variables';
|
||||||
|
@import 'core/animations';
|
||||||
|
|
||||||
|
@import 'atoms/**/*';
|
||||||
|
@import 'molecules/**/*';
|
||||||
|
// @import 'organisms/**/*';
|
||||||
|
@import 'templates/**/*';
|
||||||
|
@import 'pages/**/*';
|
8
app/assets/stylesheets/atoms/_alerts.scss
Normal file
8
app/assets/stylesheets/atoms/_alerts.scss
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
.alert {
|
||||||
|
padding: 20px;
|
||||||
|
border-radius: 5px;
|
||||||
|
&.alert-success {
|
||||||
|
background-color: $accent-color-3;
|
||||||
|
color: $white;
|
||||||
|
}
|
||||||
|
}
|
61
app/assets/stylesheets/atoms/_layout.scss
Normal file
61
app/assets/stylesheets/atoms/_layout.scss
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
html {
|
||||||
|
box-sizing: border-box;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
margin: 0 1rem;
|
||||||
|
height: 100%;
|
||||||
|
.ignore-margin
|
||||||
|
{
|
||||||
|
margin-left: -1rem;
|
||||||
|
margin-right: -1rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
*,
|
||||||
|
*::before,
|
||||||
|
*::after {
|
||||||
|
box-sizing: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
*:focus {
|
||||||
|
outline: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
main {
|
||||||
|
display: block;
|
||||||
|
padding-top: 8vw;
|
||||||
|
}
|
||||||
|
|
||||||
|
.layout {
|
||||||
|
min-height: calc(100% - 112px);
|
||||||
|
&:after {
|
||||||
|
content:"";
|
||||||
|
display:block;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (min-width: 480px) {
|
||||||
|
.layout {
|
||||||
|
min-height: calc(100% - 116px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (min-width: $tablet) {
|
||||||
|
html {
|
||||||
|
// font-size: 2vw;
|
||||||
|
}
|
||||||
|
body {
|
||||||
|
margin: 0 2rem
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (min-width: $desktop) {
|
||||||
|
html {
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
main {
|
||||||
|
padding-top: 55px;
|
||||||
|
}
|
||||||
|
}
|
10
app/assets/stylesheets/atoms/_media.scss
Normal file
10
app/assets/stylesheets/atoms/_media.scss
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
figure {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
img,
|
||||||
|
picture {
|
||||||
|
margin: 0;
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
|
75
app/assets/stylesheets/atoms/_pd-slant.scss
Normal file
75
app/assets/stylesheets/atoms/_pd-slant.scss
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
// Slash Logo
|
||||||
|
|
||||||
|
.slash-left {
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
&:before {
|
||||||
|
content: "";
|
||||||
|
background-color: $accent-color-1;
|
||||||
|
width:3px;
|
||||||
|
display: block;
|
||||||
|
position: absolute;
|
||||||
|
top:0;
|
||||||
|
bottom: -1rem;
|
||||||
|
left:0;
|
||||||
|
transform: skewX(-16.5deg);
|
||||||
|
transform-origin: bottom;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// HTML/CSS only Slanted Border
|
||||||
|
|
||||||
|
$prftangle: 90deg - 73.5deg;
|
||||||
|
$prftangle-negative: 73.5deg - 90deg;
|
||||||
|
|
||||||
|
@mixin slantmix ($lmargin, $rmargin, $slantht) {
|
||||||
|
|
||||||
|
position: relative;
|
||||||
|
display:block;
|
||||||
|
z-index: 1;
|
||||||
|
height: $slantht;
|
||||||
|
min-width: tan($prftangle) + 1 / 3;
|
||||||
|
overflow: wrap;
|
||||||
|
display:inline-block;
|
||||||
|
|
||||||
|
&.slantright {
|
||||||
|
margin-right:tan($prftangle) + $rmargin;
|
||||||
|
&:after {
|
||||||
|
transform: skewX($prftangle-negative);
|
||||||
|
transform-origin: 0% 100%;
|
||||||
|
min-width:auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.slantleft {
|
||||||
|
margin-left:tan($prftangle) + $lmargin;
|
||||||
|
&:before {
|
||||||
|
transform: skewX($prftangle-negative);
|
||||||
|
transform-origin: 10% 0%;
|
||||||
|
min-width:auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.slantleft:before,
|
||||||
|
.slantright:after {
|
||||||
|
background: inherit;
|
||||||
|
bottom: 0;
|
||||||
|
top:0;
|
||||||
|
content: '\00a0';
|
||||||
|
display: block;
|
||||||
|
position: absolute;
|
||||||
|
right: 0;
|
||||||
|
left:0;
|
||||||
|
z-index: -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.slantleft:before {
|
||||||
|
right: 50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.slantright:after {
|
||||||
|
left: 50%;
|
||||||
|
}
|
78
app/assets/stylesheets/atoms/_typography.scss
Normal file
78
app/assets/stylesheets/atoms/_typography.scss
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
body {
|
||||||
|
color: $base-font-color;
|
||||||
|
font-family: $primary-font-face;
|
||||||
|
font-size: 1rem;
|
||||||
|
line-height: $base-line-height;
|
||||||
|
font-weight:300;
|
||||||
|
color: $primary-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hidden {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1, h2, h3,
|
||||||
|
h4, h5, h6 {
|
||||||
|
font-family: $heading-font-face;
|
||||||
|
line-height: $heading-line-height;
|
||||||
|
margin: 0 0 $small-spacing;
|
||||||
|
color: $black;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 { font-size: modular-scale(6); }
|
||||||
|
h2 { font-size: modular-scale(5); }
|
||||||
|
h3 { font-size: modular-scale(4); }
|
||||||
|
h4 { font-size: modular-scale(3); }
|
||||||
|
h5 { font-size: modular-scale(2); }
|
||||||
|
h6 { font-size: modular-scale(1); }
|
||||||
|
|
||||||
|
p { margin: 0 0 $small-spacing; }
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: $primary-color;
|
||||||
|
transition: color $base-duration $base-timing;
|
||||||
|
|
||||||
|
&:active,
|
||||||
|
&:focus,
|
||||||
|
&:hover {
|
||||||
|
color: lighten($primary-color, 25%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
hr {
|
||||||
|
border-bottom: $base-border;
|
||||||
|
border-left: 0;
|
||||||
|
border-right: 0;
|
||||||
|
border-top: 0;
|
||||||
|
margin: $base-spacing 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// .prft-heading
|
||||||
|
h1 {
|
||||||
|
text-transform: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.question-text {
|
||||||
|
margin-bottom: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
// .prft-heading,
|
||||||
|
h1,
|
||||||
|
.question-text {
|
||||||
|
font-size: 6vw;
|
||||||
|
font-weight: 100;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 > a {
|
||||||
|
font-size: 1rem;
|
||||||
|
font-weight: 300;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (min-width: $screen-sm) {
|
||||||
|
// .prft-heading,
|
||||||
|
h1,
|
||||||
|
.question-text {
|
||||||
|
font-size: 2.45rem;
|
||||||
|
}
|
||||||
|
}
|
28
app/assets/stylesheets/core/_animations.scss
Normal file
28
app/assets/stylesheets/core/_animations.scss
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
@keyframes success-fadeout {
|
||||||
|
0% {
|
||||||
|
max-height: 40px;
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
85% {
|
||||||
|
margin-bottom: .5rem;
|
||||||
|
max-height: 40px;
|
||||||
|
opacity: 0;
|
||||||
|
padding: .5rem 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
96% {
|
||||||
|
margin-bottom: 0;
|
||||||
|
max-height: 0;
|
||||||
|
opacity: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
height: 0;
|
||||||
|
left: -10px;
|
||||||
|
position: absolute;
|
||||||
|
top: -10px;
|
||||||
|
width: 0;
|
||||||
|
}
|
||||||
|
}
|
163
app/assets/stylesheets/core/_fonts.scss
Normal file
163
app/assets/stylesheets/core/_fonts.scss
Normal file
@ -0,0 +1,163 @@
|
|||||||
|
//HALISR
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'HalisR';
|
||||||
|
src:local('Halis R Thin'),
|
||||||
|
font_url('HalisR-Thin.woff2') format('woff2'),
|
||||||
|
font_url('HalisR-Thin.woff') format('woff'),
|
||||||
|
font_url('HalisR-Thin.otf') format('opentype');
|
||||||
|
font-weight:100;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'HalisR';
|
||||||
|
src:local('Halis R Light'),
|
||||||
|
font_url('HalisR-Light.woff2') format('woff2'),
|
||||||
|
font_url('HalisR-Light.woff') format('woff'),
|
||||||
|
font_url('HalisR-Light.otf') format('opentype');
|
||||||
|
font-weight:200;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'HalisR';
|
||||||
|
src:local('Halis R Book'),
|
||||||
|
font_url('HalisR-Book.woff2') format('woff2'),
|
||||||
|
font_url('HalisR-Book.woff') format('woff'),
|
||||||
|
font_url('HalisR-Book.otf') format('opentype');
|
||||||
|
font-weight:300;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'HalisR';
|
||||||
|
src:local('Halis R Regular'),
|
||||||
|
font_url('HalisR-Regular.woff2') format('woff2'),
|
||||||
|
font_url('HalisR-Regular.woff') format('woff'),
|
||||||
|
font_url('HalisR-Regular.otf') format('opentype');
|
||||||
|
font-weight:500;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'HalisR';
|
||||||
|
src:local('Halis R Medium'),
|
||||||
|
font_url('HalisR-Medium.woff2') format('woff2'),
|
||||||
|
font_url('HalisR-Medium.woff') format('woff'),
|
||||||
|
font_url('HalisR-Medium.otf') format('opentype');
|
||||||
|
font-weight:600;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'HalisR';
|
||||||
|
src:local('Halis R Bold'),
|
||||||
|
font_url('HalisR-Bold.woff2') format('woff2'),
|
||||||
|
font_url('HalisR-Bold.woff') format('woff'),
|
||||||
|
font_url('HalisR-Bold.otf') format('opentype');
|
||||||
|
font-weight:700;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'HalisR';
|
||||||
|
src:local('Halis R Black'),
|
||||||
|
font_url('HalisR-Black.woff2') format('woff2'),
|
||||||
|
font_url('HalisR-Black.woff') format('woff'),
|
||||||
|
font_url('HalisR-Black.otf') format('opentype');
|
||||||
|
font-weight:900;
|
||||||
|
}
|
||||||
|
|
||||||
|
//LATO
|
||||||
|
|
||||||
|
//regular
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Lato';
|
||||||
|
src:local('Lato Hairline'),
|
||||||
|
font_url('Lato-Hairline.woff2') format('woff2'),
|
||||||
|
font_url('Lato-Hairline.woff') format('woff'),
|
||||||
|
font_url('Lato-Hairline.ttf') format('truetype');
|
||||||
|
font-weight:100;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Lato';
|
||||||
|
src:local('Lato Light'),
|
||||||
|
font_url('Lato-Light.woff2') format('woff2'),
|
||||||
|
font_url('Lato-Light.woff') format('woff'),
|
||||||
|
font_url('Lato-Light.ttf') format('truetype');
|
||||||
|
font-weight:300;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Lato';
|
||||||
|
src:local('Lato Regular'),
|
||||||
|
font_url('Lato-Regular.woff2') format('woff2'),
|
||||||
|
font_url('Lato-Regular.woff') format('woff'),
|
||||||
|
font_url('Lato-Regular.ttf') format('truetype');
|
||||||
|
font-weight:500;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Lato';
|
||||||
|
src:local('Lato Bold'),
|
||||||
|
font_url('Lato-Bold.woff2') format('woff2'),
|
||||||
|
font_url('Lato-Bold.woff') format('woff'),
|
||||||
|
font_url('Lato-Bold.ttf') format('truetype');
|
||||||
|
font-weight:700;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Lato';
|
||||||
|
src:local('Lato Black'),
|
||||||
|
font_url('Lato-Black.woff2') format('woff2'),
|
||||||
|
font_url('Lato-Black.woff') format('woff'),
|
||||||
|
font_url('Lato-Black.ttf') format('truetype');
|
||||||
|
font-weight:900;
|
||||||
|
}
|
||||||
|
|
||||||
|
//italicized
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Lato';
|
||||||
|
src:local('Lato Hairline Italic'),
|
||||||
|
font_url('Lato-HairlineItalic.woff2') format('woff2'),
|
||||||
|
font_url('Lato-HairlineItalic.woff') format('woff'),
|
||||||
|
font_url('Lato-HairlineItalic.ttf') format('truetype');
|
||||||
|
font-weight:100;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Lato';
|
||||||
|
src:local('Lato Light Italic'),
|
||||||
|
font_url('Lato-LightItalic.woff2') format('woff2'),
|
||||||
|
font_url('Lato-LightItalic.woff') format('woff'),
|
||||||
|
font_url('Lato-LightItalic.ttf') format('truetype');
|
||||||
|
font-weight:300;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Lato';
|
||||||
|
src:local('Lato Italic'),
|
||||||
|
font_url('Lato-Italic.woff2') format('woff2'),
|
||||||
|
font_url('Lato-Italic.woff') format('woff'),
|
||||||
|
font_url('Lato-Italic.ttf') format('truetype');
|
||||||
|
font-weight:500;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Lato';
|
||||||
|
src:local('Lato Bold Italic'),
|
||||||
|
font_url('Lato-BoldItalic.woff2') format('woff2'),
|
||||||
|
font_url('Lato-BoldItalic.woff') format('woff'),
|
||||||
|
font_url('Lato-BoldItalic.ttf') format('truetype');
|
||||||
|
font-weight:700;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Lato';
|
||||||
|
src:local('Lato Black Italic'),
|
||||||
|
font_url('Lato-BlackItalic.woff2') format('woff2'),
|
||||||
|
font_url('Lato-BlackItalic.woff') format('woff'),
|
||||||
|
font_url('Lato-BlackItalic.ttf') format('truetype');
|
||||||
|
font-weight:900;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
948
app/assets/stylesheets/core/_variables.scss
Normal file
948
app/assets/stylesheets/core/_variables.scss
Normal file
@ -0,0 +1,948 @@
|
|||||||
|
$bootstrap-sass-asset-helper: false !default;
|
||||||
|
//
|
||||||
|
// Variables
|
||||||
|
// --------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
//== Colors
|
||||||
|
//
|
||||||
|
//## Gray and brand colors for use across Bootstrap.
|
||||||
|
|
||||||
|
$gray-base: #000 !default;
|
||||||
|
$gray-darker: lighten($gray-base, 13.5%) !default; // #222
|
||||||
|
$gray-dark: lighten($gray-base, 20%) !default; // #333
|
||||||
|
$gray: lighten($gray-base, 33.5%) !default; // #555
|
||||||
|
$gray-light: lighten($gray-base, 46.7%) !default; // #777
|
||||||
|
$gray-lighter: lighten($gray-base, 93.5%) !default; // #eee
|
||||||
|
|
||||||
|
$brand-primary: darken(#428bca, 6.5%) !default; // #337ab7
|
||||||
|
$brand-success: #5cb85c !default;
|
||||||
|
$brand-info: #5bc0de !default;
|
||||||
|
$brand-warning: #f0ad4e !default;
|
||||||
|
$brand-danger: #d9534f !default;
|
||||||
|
|
||||||
|
|
||||||
|
//== Scaffolding
|
||||||
|
//
|
||||||
|
//## Settings for some of the most global styles.
|
||||||
|
|
||||||
|
//** Background color for `<body>`.
|
||||||
|
$body-bg: #fff !default;
|
||||||
|
//** Global text color on `<body>`.
|
||||||
|
$text-color: $gray-dark !default;
|
||||||
|
|
||||||
|
//** Global textual link color.
|
||||||
|
$link-color: $brand-primary !default;
|
||||||
|
//** Link hover color set via `darken()` function.
|
||||||
|
$link-hover-color: darken($link-color, 15%) !default;
|
||||||
|
//** Link hover decoration.
|
||||||
|
$link-hover-decoration: underline !default;
|
||||||
|
|
||||||
|
|
||||||
|
//== Typography
|
||||||
|
//
|
||||||
|
//## Font, line-height, and color for body text, headings, and more.
|
||||||
|
|
||||||
|
$font-family-sans-serif: "Helvetica Neue", Helvetica, Arial, sans-serif !default;
|
||||||
|
$font-family-serif: Georgia, "Times New Roman", Times, serif !default;
|
||||||
|
//** Default monospace fonts for `<code>`, `<kbd>`, and `<pre>`.
|
||||||
|
$font-family-monospace: Menlo, Monaco, Consolas, "Courier New", monospace !default;
|
||||||
|
$font-family-base: $font-family-sans-serif !default;
|
||||||
|
|
||||||
|
$font-size-base: 14px !default;
|
||||||
|
$font-size-large: ceil(($font-size-base * 1.25)) !default; // ~18px
|
||||||
|
$font-size-small: ceil(($font-size-base * 0.85)) !default; // ~12px
|
||||||
|
|
||||||
|
$font-size-h1: floor(($font-size-base * 2.6)) !default; // ~36px
|
||||||
|
$font-size-h2: floor(($font-size-base * 2.15)) !default; // ~30px
|
||||||
|
$font-size-h3: ceil(($font-size-base * 1.7)) !default; // ~24px
|
||||||
|
$font-size-h4: ceil(($font-size-base * 1.25)) !default; // ~18px
|
||||||
|
$font-size-h5: $font-size-base !default;
|
||||||
|
$font-size-h6: ceil(($font-size-base * 0.85)) !default; // ~12px
|
||||||
|
|
||||||
|
//** Unit-less `line-height` for use in components like buttons.
|
||||||
|
$line-height-base: 1.428571429 !default; // 20/14
|
||||||
|
//** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.
|
||||||
|
$line-height-computed: floor(($font-size-base * $line-height-base)) !default; // ~20px
|
||||||
|
|
||||||
|
//** By default, this inherits from the `<body>`.
|
||||||
|
$headings-font-family: inherit !default;
|
||||||
|
$headings-font-weight: 500 !default;
|
||||||
|
$headings-line-height: 1.1 !default;
|
||||||
|
$headings-color: inherit !default;
|
||||||
|
|
||||||
|
|
||||||
|
//== Iconography
|
||||||
|
//
|
||||||
|
//## Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower.
|
||||||
|
|
||||||
|
//** Load fonts from this directory.
|
||||||
|
|
||||||
|
// [converter] If $bootstrap-sass-asset-helper if used, provide path relative to the assets load path.
|
||||||
|
// [converter] This is because some asset helpers, such as Sprockets, do not work with file-relative paths.
|
||||||
|
$icon-font-path: if($bootstrap-sass-asset-helper, "bootstrap/", "../fonts/bootstrap/") !default;
|
||||||
|
|
||||||
|
//** File name for all font files.
|
||||||
|
$icon-font-name: "glyphicons-halflings-regular" !default;
|
||||||
|
//** Element ID within SVG icon file.
|
||||||
|
$icon-font-svg-id: "glyphicons_halflingsregular" !default;
|
||||||
|
|
||||||
|
|
||||||
|
//== Components
|
||||||
|
//
|
||||||
|
//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).
|
||||||
|
|
||||||
|
$padding-base-vertical: 6px !default;
|
||||||
|
$padding-base-horizontal: 12px !default;
|
||||||
|
|
||||||
|
$padding-large-vertical: 10px !default;
|
||||||
|
$padding-large-horizontal: 16px !default;
|
||||||
|
|
||||||
|
$padding-small-vertical: 5px !default;
|
||||||
|
$padding-small-horizontal: 10px !default;
|
||||||
|
|
||||||
|
$padding-xs-vertical: 1px !default;
|
||||||
|
$padding-xs-horizontal: 5px !default;
|
||||||
|
|
||||||
|
$line-height-large: 1.3333333 !default; // extra decimals for Win 8.1 Chrome
|
||||||
|
$line-height-small: 1.5 !default;
|
||||||
|
|
||||||
|
$border-radius-base: 4px !default;
|
||||||
|
$border-radius-large: 6px !default;
|
||||||
|
$border-radius-small: 3px !default;
|
||||||
|
|
||||||
|
//** Global color for active items (e.g., navs or dropdowns).
|
||||||
|
$component-active-color: #fff !default;
|
||||||
|
//** Global background color for active items (e.g., navs or dropdowns).
|
||||||
|
$component-active-bg: $brand-primary !default;
|
||||||
|
|
||||||
|
//** Width of the `border` for generating carets that indicator dropdowns.
|
||||||
|
$caret-width-base: 4px !default;
|
||||||
|
//** Carets increase slightly in size for larger components.
|
||||||
|
$caret-width-large: 5px !default;
|
||||||
|
|
||||||
|
|
||||||
|
//== Tables
|
||||||
|
//
|
||||||
|
//## Customizes the `.table` component with basic values, each used across all table variations.
|
||||||
|
|
||||||
|
//** Padding for `<th>`s and `<td>`s.
|
||||||
|
$table-cell-padding: 8px !default;
|
||||||
|
//** Padding for cells in `.table-condensed`.
|
||||||
|
$table-condensed-cell-padding: 5px !default;
|
||||||
|
|
||||||
|
//** Default background color used for all tables.
|
||||||
|
$table-bg: transparent !default;
|
||||||
|
//** Background color used for `.table-striped`.
|
||||||
|
$table-bg-accent: #f9f9f9 !default;
|
||||||
|
//** Background color used for `.table-hover`.
|
||||||
|
$table-bg-hover: #f5f5f5 !default;
|
||||||
|
$table-bg-active: $table-bg-hover !default;
|
||||||
|
|
||||||
|
//** Border color for table and cell borders.
|
||||||
|
$table-border-color: #ddd !default;
|
||||||
|
|
||||||
|
|
||||||
|
//== Buttons
|
||||||
|
//
|
||||||
|
//## For each of Bootstrap's buttons, define text, background and border color.
|
||||||
|
|
||||||
|
$btn-font-weight: normal !default;
|
||||||
|
|
||||||
|
$btn-default-color: #333 !default;
|
||||||
|
$btn-default-bg: #fff !default;
|
||||||
|
$btn-default-border: #ccc !default;
|
||||||
|
|
||||||
|
$btn-primary-color: #fff !default;
|
||||||
|
$btn-primary-bg: $brand-primary !default;
|
||||||
|
$btn-primary-border: darken($btn-primary-bg, 5%) !default;
|
||||||
|
|
||||||
|
$btn-success-color: #fff !default;
|
||||||
|
$btn-success-bg: $brand-success !default;
|
||||||
|
$btn-success-border: darken($btn-success-bg, 5%) !default;
|
||||||
|
|
||||||
|
$btn-info-color: #fff !default;
|
||||||
|
$btn-info-bg: $brand-info !default;
|
||||||
|
$btn-info-border: darken($btn-info-bg, 5%) !default;
|
||||||
|
|
||||||
|
$btn-warning-color: #fff !default;
|
||||||
|
$btn-warning-bg: $brand-warning !default;
|
||||||
|
$btn-warning-border: darken($btn-warning-bg, 5%) !default;
|
||||||
|
|
||||||
|
$btn-danger-color: #fff !default;
|
||||||
|
$btn-danger-bg: $brand-danger !default;
|
||||||
|
$btn-danger-border: darken($btn-danger-bg, 5%) !default;
|
||||||
|
|
||||||
|
$btn-link-disabled-color: $gray-light !default;
|
||||||
|
|
||||||
|
// Allows for customizing button radius independently from global border radius
|
||||||
|
$btn-border-radius-base: $border-radius-base !default;
|
||||||
|
$btn-border-radius-large: $border-radius-large !default;
|
||||||
|
$btn-border-radius-small: $border-radius-small !default;
|
||||||
|
|
||||||
|
|
||||||
|
//== Forms
|
||||||
|
//
|
||||||
|
//##
|
||||||
|
|
||||||
|
//** `<input>` background color
|
||||||
|
$input-bg: #fff !default;
|
||||||
|
//** `<input disabled>` background color
|
||||||
|
$input-bg-disabled: $gray-lighter !default;
|
||||||
|
|
||||||
|
//** Text color for `<input>`s
|
||||||
|
$input-color: $gray !default;
|
||||||
|
//** `<input>` border color
|
||||||
|
$input-border: #ccc !default;
|
||||||
|
|
||||||
|
// TODO: Rename `$input-border-radius` to `$input-border-radius-base` in v4
|
||||||
|
//** Default `.form-control` border radius
|
||||||
|
// This has no effect on `<select>`s in some browsers, due to the limited stylability of `<select>`s in CSS.
|
||||||
|
$input-border-radius: $border-radius-base !default;
|
||||||
|
//** Large `.form-control` border radius
|
||||||
|
$input-border-radius-large: $border-radius-large !default;
|
||||||
|
//** Small `.form-control` border radius
|
||||||
|
$input-border-radius-small: $border-radius-small !default;
|
||||||
|
|
||||||
|
//** Border color for inputs on focus
|
||||||
|
$input-border-focus: #66afe9 !default;
|
||||||
|
|
||||||
|
//** Placeholder text color
|
||||||
|
$input-color-placeholder: #999 !default;
|
||||||
|
|
||||||
|
//** Default `.form-control` height
|
||||||
|
$input-height-base: ($line-height-computed + ($padding-base-vertical * 2) + 2) !default;
|
||||||
|
//** Large `.form-control` height
|
||||||
|
$input-height-large: (ceil($font-size-large * $line-height-large) + ($padding-large-vertical * 2) + 2) !default;
|
||||||
|
//** Small `.form-control` height
|
||||||
|
$input-height-small: (floor($font-size-small * $line-height-small) + ($padding-small-vertical * 2) + 2) !default;
|
||||||
|
|
||||||
|
//** `.form-group` margin
|
||||||
|
$form-group-margin-bottom: 15px !default;
|
||||||
|
|
||||||
|
$legend-color: $gray-dark !default;
|
||||||
|
$legend-border-color: #e5e5e5 !default;
|
||||||
|
|
||||||
|
//** Background color for textual input addons
|
||||||
|
$input-group-addon-bg: $gray-lighter !default;
|
||||||
|
//** Border color for textual input addons
|
||||||
|
$input-group-addon-border-color: $input-border !default;
|
||||||
|
|
||||||
|
//** Disabled cursor for form controls and buttons.
|
||||||
|
$cursor-disabled: not-allowed !default;
|
||||||
|
|
||||||
|
|
||||||
|
//== Dropdowns
|
||||||
|
//
|
||||||
|
//## Dropdown menu container and contents.
|
||||||
|
|
||||||
|
//** Background for the dropdown menu.
|
||||||
|
$dropdown-bg: #fff !default;
|
||||||
|
//** Dropdown menu `border-color`.
|
||||||
|
$dropdown-border: rgba(0,0,0,.15) !default;
|
||||||
|
//** Dropdown menu `border-color` **for IE8**.
|
||||||
|
$dropdown-fallback-border: #ccc !default;
|
||||||
|
//** Divider color for between dropdown items.
|
||||||
|
$dropdown-divider-bg: #e5e5e5 !default;
|
||||||
|
|
||||||
|
//** Dropdown link text color.
|
||||||
|
$dropdown-link-color: $gray-dark !default;
|
||||||
|
//** Hover color for dropdown links.
|
||||||
|
$dropdown-link-hover-color: darken($gray-dark, 5%) !default;
|
||||||
|
//** Hover background for dropdown links.
|
||||||
|
$dropdown-link-hover-bg: #f5f5f5 !default;
|
||||||
|
|
||||||
|
//** Active dropdown menu item text color.
|
||||||
|
$dropdown-link-active-color: $component-active-color !default;
|
||||||
|
//** Active dropdown menu item background color.
|
||||||
|
$dropdown-link-active-bg: $component-active-bg !default;
|
||||||
|
|
||||||
|
//** Disabled dropdown menu item background color.
|
||||||
|
$dropdown-link-disabled-color: $gray-light !default;
|
||||||
|
|
||||||
|
//** Text color for headers within dropdown menus.
|
||||||
|
$dropdown-header-color: $gray-light !default;
|
||||||
|
|
||||||
|
//** Deprecated `$dropdown-caret-color` as of v3.1.0
|
||||||
|
$dropdown-caret-color: #000 !default;
|
||||||
|
|
||||||
|
|
||||||
|
//-- Z-index master list
|
||||||
|
//
|
||||||
|
// Warning: Avoid customizing these values. They're used for a bird's eye view
|
||||||
|
// of components dependent on the z-axis and are designed to all work together.
|
||||||
|
//
|
||||||
|
// Note: These variables are not generated into the Customizer.
|
||||||
|
|
||||||
|
$zindex-navbar: 1000 !default;
|
||||||
|
$zindex-dropdown: 1000 !default;
|
||||||
|
$zindex-popover: 1060 !default;
|
||||||
|
$zindex-tooltip: 1070 !default;
|
||||||
|
$zindex-navbar-fixed: 1030 !default;
|
||||||
|
$zindex-modal-background: 1040 !default;
|
||||||
|
$zindex-modal: 1050 !default;
|
||||||
|
|
||||||
|
|
||||||
|
//== Media queries breakpoints
|
||||||
|
//
|
||||||
|
//## Define the breakpoints at which your layout will change, adapting to different screen sizes.
|
||||||
|
|
||||||
|
// Extra small screen / phone
|
||||||
|
//** Deprecated `$screen-xs` as of v3.0.1
|
||||||
|
$screen-xs: 480px !default;
|
||||||
|
//** Deprecated `$screen-xs-min` as of v3.2.0
|
||||||
|
$screen-xs-min: $screen-xs !default;
|
||||||
|
//** Deprecated `$screen-phone` as of v3.0.1
|
||||||
|
$screen-phone: $screen-xs-min !default;
|
||||||
|
|
||||||
|
// Small screen / tablet
|
||||||
|
//** Deprecated `$screen-sm` as of v3.0.1
|
||||||
|
$screen-sm: 768px !default;
|
||||||
|
$screen-sm-min: $screen-sm !default;
|
||||||
|
//** Deprecated `$screen-tablet` as of v3.0.1
|
||||||
|
$screen-tablet: $screen-sm-min !default;
|
||||||
|
|
||||||
|
// Medium screen / desktop
|
||||||
|
//** Deprecated `$screen-md` as of v3.0.1
|
||||||
|
$screen-md: 992px !default;
|
||||||
|
$screen-md-min: $screen-md !default;
|
||||||
|
//** Deprecated `$screen-desktop` as of v3.0.1
|
||||||
|
$screen-desktop: $screen-md-min !default;
|
||||||
|
|
||||||
|
// Large screen / wide desktop
|
||||||
|
//** Deprecated `$screen-lg` as of v3.0.1
|
||||||
|
$screen-lg: 1200px !default;
|
||||||
|
$screen-lg-min: $screen-lg !default;
|
||||||
|
//** Deprecated `$screen-lg-desktop` as of v3.0.1
|
||||||
|
$screen-lg-desktop: $screen-lg-min !default;
|
||||||
|
|
||||||
|
// So media queries don't overlap when required, provide a maximum
|
||||||
|
$screen-xs-max: ($screen-sm-min - 1) !default;
|
||||||
|
$screen-sm-max: ($screen-md-min - 1) !default;
|
||||||
|
$screen-md-max: ($screen-lg-min - 1) !default;
|
||||||
|
|
||||||
|
|
||||||
|
//== Grid system
|
||||||
|
//
|
||||||
|
//## Define your custom responsive grid.
|
||||||
|
|
||||||
|
//** Number of columns in the grid.
|
||||||
|
$grid-columns: 12 !default;
|
||||||
|
//** Padding between columns. Gets divided in half for the left and right.
|
||||||
|
$grid-gutter-width: 30px !default;
|
||||||
|
// Navbar collapse
|
||||||
|
//** Point at which the navbar becomes uncollapsed.
|
||||||
|
$grid-float-breakpoint: $screen-sm-min !default;
|
||||||
|
//** Point at which the navbar begins collapsing.
|
||||||
|
$grid-float-breakpoint-max: ($grid-float-breakpoint - 1) !default;
|
||||||
|
|
||||||
|
|
||||||
|
//== Container sizes
|
||||||
|
//
|
||||||
|
//## Define the maximum width of `.container` for different screen sizes.
|
||||||
|
|
||||||
|
// Small screen / tablet
|
||||||
|
$container-tablet: (720px + $grid-gutter-width) !default;
|
||||||
|
//** For `$screen-sm-min` and up.
|
||||||
|
$container-sm: $container-tablet !default;
|
||||||
|
|
||||||
|
// Medium screen / desktop
|
||||||
|
$container-desktop: (940px + $grid-gutter-width) !default;
|
||||||
|
//** For `$screen-md-min` and up.
|
||||||
|
$container-md: $container-desktop !default;
|
||||||
|
|
||||||
|
// Large screen / wide desktop
|
||||||
|
$container-large-desktop: (1140px + $grid-gutter-width) !default;
|
||||||
|
//** For `$screen-lg-min` and up.
|
||||||
|
$container-lg: $container-large-desktop !default;
|
||||||
|
|
||||||
|
|
||||||
|
//== Navbar
|
||||||
|
//
|
||||||
|
//##
|
||||||
|
|
||||||
|
// Basics of a navbar
|
||||||
|
$navbar-height: 50px !default;
|
||||||
|
$navbar-margin-bottom: $line-height-computed !default;
|
||||||
|
$navbar-border-radius: $border-radius-base !default;
|
||||||
|
$navbar-padding-horizontal: floor(($grid-gutter-width / 2)) !default;
|
||||||
|
$navbar-padding-vertical: (($navbar-height - $line-height-computed) / 2) !default;
|
||||||
|
$navbar-collapse-max-height: 340px !default;
|
||||||
|
|
||||||
|
$navbar-default-color: #777 !default;
|
||||||
|
$navbar-default-bg: #f8f8f8 !default;
|
||||||
|
$navbar-default-border: darken($navbar-default-bg, 6.5%) !default;
|
||||||
|
|
||||||
|
// Navbar links
|
||||||
|
$navbar-default-link-color: #777 !default;
|
||||||
|
$navbar-default-link-hover-color: #333 !default;
|
||||||
|
$navbar-default-link-hover-bg: transparent !default;
|
||||||
|
$navbar-default-link-active-color: #555 !default;
|
||||||
|
$navbar-default-link-active-bg: darken($navbar-default-bg, 6.5%) !default;
|
||||||
|
$navbar-default-link-disabled-color: #ccc !default;
|
||||||
|
$navbar-default-link-disabled-bg: transparent !default;
|
||||||
|
|
||||||
|
// Navbar brand label
|
||||||
|
$navbar-default-brand-color: $navbar-default-link-color !default;
|
||||||
|
$navbar-default-brand-hover-color: darken($navbar-default-brand-color, 10%) !default;
|
||||||
|
$navbar-default-brand-hover-bg: transparent !default;
|
||||||
|
|
||||||
|
// Navbar toggle
|
||||||
|
$navbar-default-toggle-hover-bg: #ddd !default;
|
||||||
|
$navbar-default-toggle-icon-bar-bg: #888 !default;
|
||||||
|
$navbar-default-toggle-border-color: #ddd !default;
|
||||||
|
|
||||||
|
|
||||||
|
//=== Inverted navbar
|
||||||
|
// Reset inverted navbar basics
|
||||||
|
$navbar-inverse-color: lighten($gray-light, 15%) !default;
|
||||||
|
$navbar-inverse-bg: #222 !default;
|
||||||
|
$navbar-inverse-border: darken($navbar-inverse-bg, 10%) !default;
|
||||||
|
|
||||||
|
// Inverted navbar links
|
||||||
|
$navbar-inverse-link-color: lighten($gray-light, 15%) !default;
|
||||||
|
$navbar-inverse-link-hover-color: #fff !default;
|
||||||
|
$navbar-inverse-link-hover-bg: transparent !default;
|
||||||
|
$navbar-inverse-link-active-color: $navbar-inverse-link-hover-color !default;
|
||||||
|
$navbar-inverse-link-active-bg: darken($navbar-inverse-bg, 10%) !default;
|
||||||
|
$navbar-inverse-link-disabled-color: #444 !default;
|
||||||
|
$navbar-inverse-link-disabled-bg: transparent !default;
|
||||||
|
|
||||||
|
// Inverted navbar brand label
|
||||||
|
$navbar-inverse-brand-color: $navbar-inverse-link-color !default;
|
||||||
|
$navbar-inverse-brand-hover-color: #fff !default;
|
||||||
|
$navbar-inverse-brand-hover-bg: transparent !default;
|
||||||
|
|
||||||
|
// Inverted navbar toggle
|
||||||
|
$navbar-inverse-toggle-hover-bg: #333 !default;
|
||||||
|
$navbar-inverse-toggle-icon-bar-bg: #fff !default;
|
||||||
|
$navbar-inverse-toggle-border-color: #333 !default;
|
||||||
|
|
||||||
|
|
||||||
|
//== Navs
|
||||||
|
//
|
||||||
|
//##
|
||||||
|
|
||||||
|
//=== Shared nav styles
|
||||||
|
$nav-link-padding: 10px 15px !default;
|
||||||
|
$nav-link-hover-bg: $gray-lighter !default;
|
||||||
|
|
||||||
|
$nav-disabled-link-color: $gray-light !default;
|
||||||
|
$nav-disabled-link-hover-color: $gray-light !default;
|
||||||
|
|
||||||
|
//== Tabs
|
||||||
|
$nav-tabs-border-color: #ddd !default;
|
||||||
|
|
||||||
|
$nav-tabs-link-hover-border-color: $gray-lighter !default;
|
||||||
|
|
||||||
|
$nav-tabs-active-link-hover-bg: $body-bg !default;
|
||||||
|
$nav-tabs-active-link-hover-color: $gray !default;
|
||||||
|
$nav-tabs-active-link-hover-border-color: #ddd !default;
|
||||||
|
|
||||||
|
$nav-tabs-justified-link-border-color: #ddd !default;
|
||||||
|
$nav-tabs-justified-active-link-border-color: $body-bg !default;
|
||||||
|
|
||||||
|
//== Pills
|
||||||
|
$nav-pills-border-radius: $border-radius-base !default;
|
||||||
|
$nav-pills-active-link-hover-bg: $component-active-bg !default;
|
||||||
|
$nav-pills-active-link-hover-color: $component-active-color !default;
|
||||||
|
|
||||||
|
|
||||||
|
//== Pagination
|
||||||
|
//
|
||||||
|
//##
|
||||||
|
|
||||||
|
$pagination-color: $link-color !default;
|
||||||
|
$pagination-bg: #fff !default;
|
||||||
|
$pagination-border: #ddd !default;
|
||||||
|
|
||||||
|
$pagination-hover-color: $link-hover-color !default;
|
||||||
|
$pagination-hover-bg: $gray-lighter !default;
|
||||||
|
$pagination-hover-border: #ddd !default;
|
||||||
|
|
||||||
|
$pagination-active-color: #fff !default;
|
||||||
|
$pagination-active-bg: $brand-primary !default;
|
||||||
|
$pagination-active-border: $brand-primary !default;
|
||||||
|
|
||||||
|
$pagination-disabled-color: $gray-light !default;
|
||||||
|
$pagination-disabled-bg: #fff !default;
|
||||||
|
$pagination-disabled-border: #ddd !default;
|
||||||
|
|
||||||
|
|
||||||
|
//== Pager
|
||||||
|
//
|
||||||
|
//##
|
||||||
|
|
||||||
|
$pager-bg: $pagination-bg !default;
|
||||||
|
$pager-border: $pagination-border !default;
|
||||||
|
$pager-border-radius: 15px !default;
|
||||||
|
|
||||||
|
$pager-hover-bg: $pagination-hover-bg !default;
|
||||||
|
|
||||||
|
$pager-active-bg: $pagination-active-bg !default;
|
||||||
|
$pager-active-color: $pagination-active-color !default;
|
||||||
|
|
||||||
|
$pager-disabled-color: $pagination-disabled-color !default;
|
||||||
|
|
||||||
|
|
||||||
|
//== Jumbotron
|
||||||
|
//
|
||||||
|
//##
|
||||||
|
|
||||||
|
$jumbotron-padding: 30px !default;
|
||||||
|
$jumbotron-color: inherit !default;
|
||||||
|
$jumbotron-bg: $gray-lighter !default;
|
||||||
|
$jumbotron-heading-color: inherit !default;
|
||||||
|
$jumbotron-font-size: ceil(($font-size-base * 1.5)) !default;
|
||||||
|
$jumbotron-heading-font-size: ceil(($font-size-base * 4.5)) !default;
|
||||||
|
|
||||||
|
|
||||||
|
//== Form states and alerts
|
||||||
|
//
|
||||||
|
//## Define colors for form feedback states and, by default, alerts.
|
||||||
|
|
||||||
|
$state-success-text: #3c763d !default;
|
||||||
|
$state-success-bg: #dff0d8 !default;
|
||||||
|
$state-success-border: darken(adjust-hue($state-success-bg, -10), 5%) !default;
|
||||||
|
|
||||||
|
$state-info-text: #31708f !default;
|
||||||
|
$state-info-bg: #d9edf7 !default;
|
||||||
|
$state-info-border: darken(adjust-hue($state-info-bg, -10), 7%) !default;
|
||||||
|
|
||||||
|
$state-warning-text: #8a6d3b !default;
|
||||||
|
$state-warning-bg: #fcf8e3 !default;
|
||||||
|
$state-warning-border: darken(adjust-hue($state-warning-bg, -10), 5%) !default;
|
||||||
|
|
||||||
|
$state-danger-text: #a94442 !default;
|
||||||
|
$state-danger-bg: #f2dede !default;
|
||||||
|
$state-danger-border: darken(adjust-hue($state-danger-bg, -10), 5%) !default;
|
||||||
|
|
||||||
|
|
||||||
|
//== Tooltips
|
||||||
|
//
|
||||||
|
//##
|
||||||
|
|
||||||
|
//** Tooltip max width
|
||||||
|
$tooltip-max-width: 200px !default;
|
||||||
|
//** Tooltip text color
|
||||||
|
$tooltip-color: #fff !default;
|
||||||
|
//** Tooltip background color
|
||||||
|
$tooltip-bg: #000 !default;
|
||||||
|
$tooltip-opacity: .9 !default;
|
||||||
|
|
||||||
|
//** Tooltip arrow width
|
||||||
|
$tooltip-arrow-width: 5px !default;
|
||||||
|
//** Tooltip arrow color
|
||||||
|
$tooltip-arrow-color: $tooltip-bg !default;
|
||||||
|
|
||||||
|
|
||||||
|
//== Popovers
|
||||||
|
//
|
||||||
|
//##
|
||||||
|
|
||||||
|
//** Popover body background color
|
||||||
|
$popover-bg: #fff !default;
|
||||||
|
//** Popover maximum width
|
||||||
|
$popover-max-width: 276px !default;
|
||||||
|
//** Popover border color
|
||||||
|
$popover-border-color: rgba(0,0,0,.2) !default;
|
||||||
|
//** Popover fallback border color
|
||||||
|
$popover-fallback-border-color: #ccc !default;
|
||||||
|
|
||||||
|
//** Popover title background color
|
||||||
|
$popover-title-bg: darken($popover-bg, 3%) !default;
|
||||||
|
|
||||||
|
//** Popover arrow width
|
||||||
|
$popover-arrow-width: 10px !default;
|
||||||
|
//** Popover arrow color
|
||||||
|
$popover-arrow-color: $popover-bg !default;
|
||||||
|
|
||||||
|
//** Popover outer arrow width
|
||||||
|
$popover-arrow-outer-width: ($popover-arrow-width + 1) !default;
|
||||||
|
//** Popover outer arrow color
|
||||||
|
$popover-arrow-outer-color: fade_in($popover-border-color, 0.05) !default;
|
||||||
|
//** Popover outer arrow fallback color
|
||||||
|
$popover-arrow-outer-fallback-color: darken($popover-fallback-border-color, 20%) !default;
|
||||||
|
|
||||||
|
|
||||||
|
//== Labels
|
||||||
|
//
|
||||||
|
//##
|
||||||
|
|
||||||
|
//** Default label background color
|
||||||
|
$label-default-bg: $gray-light !default;
|
||||||
|
//** Primary label background color
|
||||||
|
$label-primary-bg: $brand-primary !default;
|
||||||
|
//** Success label background color
|
||||||
|
$label-success-bg: $brand-success !default;
|
||||||
|
//** Info label background color
|
||||||
|
$label-info-bg: $brand-info !default;
|
||||||
|
//** Warning label background color
|
||||||
|
$label-warning-bg: $brand-warning !default;
|
||||||
|
//** Danger label background color
|
||||||
|
$label-danger-bg: $brand-danger !default;
|
||||||
|
|
||||||
|
//** Default label text color
|
||||||
|
$label-color: #fff !default;
|
||||||
|
//** Default text color of a linked label
|
||||||
|
$label-link-hover-color: #fff !default;
|
||||||
|
|
||||||
|
|
||||||
|
//== Modals
|
||||||
|
//
|
||||||
|
//##
|
||||||
|
|
||||||
|
//** Padding applied to the modal body
|
||||||
|
$modal-inner-padding: 15px !default;
|
||||||
|
|
||||||
|
//** Padding applied to the modal title
|
||||||
|
$modal-title-padding: 15px !default;
|
||||||
|
//** Modal title line-height
|
||||||
|
$modal-title-line-height: $line-height-base !default;
|
||||||
|
|
||||||
|
//** Background color of modal content area
|
||||||
|
$modal-content-bg: #fff !default;
|
||||||
|
//** Modal content border color
|
||||||
|
$modal-content-border-color: rgba(0,0,0,.2) !default;
|
||||||
|
//** Modal content border color **for IE8**
|
||||||
|
$modal-content-fallback-border-color: #999 !default;
|
||||||
|
|
||||||
|
//** Modal backdrop background color
|
||||||
|
$modal-backdrop-bg: #000 !default;
|
||||||
|
//** Modal backdrop opacity
|
||||||
|
$modal-backdrop-opacity: .5 !default;
|
||||||
|
//** Modal header border color
|
||||||
|
$modal-header-border-color: #e5e5e5 !default;
|
||||||
|
//** Modal footer border color
|
||||||
|
$modal-footer-border-color: $modal-header-border-color !default;
|
||||||
|
|
||||||
|
$modal-lg: 900px !default;
|
||||||
|
$modal-md: 600px !default;
|
||||||
|
$modal-sm: 300px !default;
|
||||||
|
|
||||||
|
|
||||||
|
//== Alerts
|
||||||
|
//
|
||||||
|
//## Define alert colors, border radius, and padding.
|
||||||
|
|
||||||
|
$alert-padding: 15px !default;
|
||||||
|
$alert-border-radius: $border-radius-base !default;
|
||||||
|
$alert-link-font-weight: bold !default;
|
||||||
|
|
||||||
|
$alert-success-bg: $state-success-bg !default;
|
||||||
|
$alert-success-text: $state-success-text !default;
|
||||||
|
$alert-success-border: $state-success-border !default;
|
||||||
|
|
||||||
|
$alert-info-bg: $state-info-bg !default;
|
||||||
|
$alert-info-text: $state-info-text !default;
|
||||||
|
$alert-info-border: $state-info-border !default;
|
||||||
|
|
||||||
|
$alert-warning-bg: $state-warning-bg !default;
|
||||||
|
$alert-warning-text: $state-warning-text !default;
|
||||||
|
$alert-warning-border: $state-warning-border !default;
|
||||||
|
|
||||||
|
$alert-danger-bg: $state-danger-bg !default;
|
||||||
|
$alert-danger-text: $state-danger-text !default;
|
||||||
|
$alert-danger-border: $state-danger-border !default;
|
||||||
|
|
||||||
|
|
||||||
|
//== Progress bars
|
||||||
|
//
|
||||||
|
//##
|
||||||
|
|
||||||
|
//** Background color of the whole progress component
|
||||||
|
$progress-bg: #f5f5f5 !default;
|
||||||
|
//** Progress bar text color
|
||||||
|
$progress-bar-color: #fff !default;
|
||||||
|
//** Variable for setting rounded corners on progress bar.
|
||||||
|
$progress-border-radius: $border-radius-base !default;
|
||||||
|
|
||||||
|
//** Default progress bar color
|
||||||
|
$progress-bar-bg: $brand-primary !default;
|
||||||
|
//** Success progress bar color
|
||||||
|
$progress-bar-success-bg: $brand-success !default;
|
||||||
|
//** Warning progress bar color
|
||||||
|
$progress-bar-warning-bg: $brand-warning !default;
|
||||||
|
//** Danger progress bar color
|
||||||
|
$progress-bar-danger-bg: $brand-danger !default;
|
||||||
|
//** Info progress bar color
|
||||||
|
$progress-bar-info-bg: $brand-info !default;
|
||||||
|
|
||||||
|
|
||||||
|
//== List group
|
||||||
|
//
|
||||||
|
//##
|
||||||
|
|
||||||
|
//** Background color on `.list-group-item`
|
||||||
|
$list-group-bg: #fff !default;
|
||||||
|
//** `.list-group-item` border color
|
||||||
|
$list-group-border: #ddd !default;
|
||||||
|
//** List group border radius
|
||||||
|
$list-group-border-radius: $border-radius-base !default;
|
||||||
|
|
||||||
|
//** Background color of single list items on hover
|
||||||
|
$list-group-hover-bg: #f5f5f5 !default;
|
||||||
|
//** Text color of active list items
|
||||||
|
$list-group-active-color: $component-active-color !default;
|
||||||
|
//** Background color of active list items
|
||||||
|
$list-group-active-bg: $component-active-bg !default;
|
||||||
|
//** Border color of active list elements
|
||||||
|
$list-group-active-border: $list-group-active-bg !default;
|
||||||
|
//** Text color for content within active list items
|
||||||
|
$list-group-active-text-color: lighten($list-group-active-bg, 40%) !default;
|
||||||
|
|
||||||
|
//** Text color of disabled list items
|
||||||
|
$list-group-disabled-color: $gray-light !default;
|
||||||
|
//** Background color of disabled list items
|
||||||
|
$list-group-disabled-bg: $gray-lighter !default;
|
||||||
|
//** Text color for content within disabled list items
|
||||||
|
$list-group-disabled-text-color: $list-group-disabled-color !default;
|
||||||
|
|
||||||
|
$list-group-link-color: #555 !default;
|
||||||
|
$list-group-link-hover-color: $list-group-link-color !default;
|
||||||
|
$list-group-link-heading-color: #333 !default;
|
||||||
|
|
||||||
|
|
||||||
|
//== Panels
|
||||||
|
//
|
||||||
|
//##
|
||||||
|
|
||||||
|
$panel-bg: #fff !default;
|
||||||
|
$panel-body-padding: 15px !default;
|
||||||
|
$panel-heading-padding: 10px 15px !default;
|
||||||
|
$panel-footer-padding: $panel-heading-padding !default;
|
||||||
|
$panel-border-radius: $border-radius-base !default;
|
||||||
|
|
||||||
|
//** Border color for elements within panels
|
||||||
|
$panel-inner-border: #ddd !default;
|
||||||
|
$panel-footer-bg: #f5f5f5 !default;
|
||||||
|
|
||||||
|
$panel-default-text: $gray-dark !default;
|
||||||
|
$panel-default-border: #ddd !default;
|
||||||
|
$panel-default-heading-bg: #f5f5f5 !default;
|
||||||
|
|
||||||
|
$panel-primary-text: #fff !default;
|
||||||
|
$panel-primary-border: $brand-primary !default;
|
||||||
|
$panel-primary-heading-bg: $brand-primary !default;
|
||||||
|
|
||||||
|
$panel-success-text: $state-success-text !default;
|
||||||
|
$panel-success-border: $state-success-border !default;
|
||||||
|
$panel-success-heading-bg: $state-success-bg !default;
|
||||||
|
|
||||||
|
$panel-info-text: $state-info-text !default;
|
||||||
|
$panel-info-border: $state-info-border !default;
|
||||||
|
$panel-info-heading-bg: $state-info-bg !default;
|
||||||
|
|
||||||
|
$panel-warning-text: $state-warning-text !default;
|
||||||
|
$panel-warning-border: $state-warning-border !default;
|
||||||
|
$panel-warning-heading-bg: $state-warning-bg !default;
|
||||||
|
|
||||||
|
$panel-danger-text: $state-danger-text !default;
|
||||||
|
$panel-danger-border: $state-danger-border !default;
|
||||||
|
$panel-danger-heading-bg: $state-danger-bg !default;
|
||||||
|
|
||||||
|
|
||||||
|
//== Thumbnails
|
||||||
|
//
|
||||||
|
//##
|
||||||
|
|
||||||
|
//** Padding around the thumbnail image
|
||||||
|
$thumbnail-padding: 4px !default;
|
||||||
|
//** Thumbnail background color
|
||||||
|
$thumbnail-bg: $body-bg !default;
|
||||||
|
//** Thumbnail border color
|
||||||
|
$thumbnail-border: #ddd !default;
|
||||||
|
//** Thumbnail border radius
|
||||||
|
$thumbnail-border-radius: $border-radius-base !default;
|
||||||
|
|
||||||
|
//** Custom text color for thumbnail captions
|
||||||
|
$thumbnail-caption-color: $text-color !default;
|
||||||
|
//** Padding around the thumbnail caption
|
||||||
|
$thumbnail-caption-padding: 9px !default;
|
||||||
|
|
||||||
|
|
||||||
|
//== Wells
|
||||||
|
//
|
||||||
|
//##
|
||||||
|
|
||||||
|
$well-bg: #f5f5f5 !default;
|
||||||
|
$well-border: darken($well-bg, 7%) !default;
|
||||||
|
|
||||||
|
|
||||||
|
//== Badges
|
||||||
|
//
|
||||||
|
//##
|
||||||
|
|
||||||
|
$badge-color: #fff !default;
|
||||||
|
//** Linked badge text color on hover
|
||||||
|
$badge-link-hover-color: #fff !default;
|
||||||
|
$badge-bg: $gray-light !default;
|
||||||
|
|
||||||
|
//** Badge text color in active nav link
|
||||||
|
$badge-active-color: $link-color !default;
|
||||||
|
//** Badge background color in active nav link
|
||||||
|
$badge-active-bg: #fff !default;
|
||||||
|
|
||||||
|
$badge-font-weight: bold !default;
|
||||||
|
$badge-line-height: 1 !default;
|
||||||
|
$badge-border-radius: 10px !default;
|
||||||
|
|
||||||
|
|
||||||
|
//== Breadcrumbs
|
||||||
|
//
|
||||||
|
//##
|
||||||
|
|
||||||
|
$breadcrumb-padding-vertical: 8px !default;
|
||||||
|
$breadcrumb-padding-horizontal: 15px !default;
|
||||||
|
//** Breadcrumb background color
|
||||||
|
$breadcrumb-bg: #f5f5f5 !default;
|
||||||
|
//** Breadcrumb text color
|
||||||
|
$breadcrumb-color: #ccc !default;
|
||||||
|
//** Text color of current page in the breadcrumb
|
||||||
|
$breadcrumb-active-color: $gray-light !default;
|
||||||
|
//** Textual separator for between breadcrumb elements
|
||||||
|
$breadcrumb-separator: "/" !default;
|
||||||
|
|
||||||
|
|
||||||
|
//== Carousel
|
||||||
|
//
|
||||||
|
//##
|
||||||
|
|
||||||
|
$carousel-text-shadow: 0 1px 2px rgba(0,0,0,.6) !default;
|
||||||
|
|
||||||
|
$carousel-control-color: #fff !default;
|
||||||
|
$carousel-control-width: 15% !default;
|
||||||
|
$carousel-control-opacity: .5 !default;
|
||||||
|
$carousel-control-font-size: 20px !default;
|
||||||
|
|
||||||
|
$carousel-indicator-active-bg: #fff !default;
|
||||||
|
$carousel-indicator-border-color: #fff !default;
|
||||||
|
|
||||||
|
$carousel-caption-color: #fff !default;
|
||||||
|
|
||||||
|
|
||||||
|
//== Close
|
||||||
|
//
|
||||||
|
//##
|
||||||
|
|
||||||
|
$close-font-weight: bold !default;
|
||||||
|
$close-color: #000 !default;
|
||||||
|
$close-text-shadow: 0 1px 0 #fff !default;
|
||||||
|
|
||||||
|
|
||||||
|
//== Code
|
||||||
|
//
|
||||||
|
//##
|
||||||
|
|
||||||
|
$code-color: #c7254e !default;
|
||||||
|
$code-bg: #f9f2f4 !default;
|
||||||
|
|
||||||
|
$kbd-color: #fff !default;
|
||||||
|
$kbd-bg: #333 !default;
|
||||||
|
|
||||||
|
$pre-bg: #f5f5f5 !default;
|
||||||
|
$pre-color: $gray-dark !default;
|
||||||
|
$pre-border-color: #ccc !default;
|
||||||
|
$pre-scrollable-max-height: 340px !default;
|
||||||
|
|
||||||
|
|
||||||
|
//== Type
|
||||||
|
//
|
||||||
|
//##
|
||||||
|
|
||||||
|
//** Horizontal offset for forms and lists.
|
||||||
|
$component-offset-horizontal: 180px !default;
|
||||||
|
//** Text muted color
|
||||||
|
$text-muted: $gray-light !default;
|
||||||
|
//** Abbreviations and acronyms border color
|
||||||
|
$abbr-border-color: $gray-light !default;
|
||||||
|
//** Headings small color
|
||||||
|
$headings-small-color: $gray-light !default;
|
||||||
|
//** Blockquote small color
|
||||||
|
$blockquote-small-color: $gray-light !default;
|
||||||
|
//** Blockquote font size
|
||||||
|
$blockquote-font-size: ($font-size-base * 1.25) !default;
|
||||||
|
//** Blockquote border color
|
||||||
|
$blockquote-border-color: $gray-lighter !default;
|
||||||
|
//** Page header border color
|
||||||
|
$page-header-border-color: $gray-lighter !default;
|
||||||
|
//** Width of horizontal description list titles
|
||||||
|
$dl-horizontal-offset: $component-offset-horizontal !default;
|
||||||
|
//** Point at which .dl-horizontal becomes horizontal
|
||||||
|
$dl-horizontal-breakpoint: $grid-float-breakpoint !default;
|
||||||
|
//** Horizontal line color.
|
||||||
|
$hr-border: $gray-lighter !default;
|
||||||
|
|
||||||
|
// BITTERS VARIABLES
|
||||||
|
|
||||||
|
// Breakpoints
|
||||||
|
$medium-screen: 600px;
|
||||||
|
$large-screen: 900px;
|
||||||
|
|
||||||
|
// Typography
|
||||||
|
$base-font-family: $helvetica;
|
||||||
|
$heading-font-family: $base-font-family;
|
||||||
|
|
||||||
|
// Font Sizes
|
||||||
|
$base-font-size: 1em;
|
||||||
|
|
||||||
|
// Line height
|
||||||
|
$base-line-height: 1.5;
|
||||||
|
$heading-line-height: 1.2;
|
||||||
|
|
||||||
|
// Other Sizes
|
||||||
|
$base-border-radius: 0px;
|
||||||
|
$base-spacing: $base-line-height * 1em;
|
||||||
|
$small-spacing: $base-spacing / 2;
|
||||||
|
$base-z-index: 0;
|
||||||
|
|
||||||
|
// Colors
|
||||||
|
$blue: #1565c0;
|
||||||
|
$dark-gray: #333;
|
||||||
|
$medium-gray: #999;
|
||||||
|
$light-gray: #ddd;
|
||||||
|
|
||||||
|
// Font Colors
|
||||||
|
$base-font-color: $dark-gray;
|
||||||
|
$action-color: $blue;
|
||||||
|
|
||||||
|
// Border
|
||||||
|
$base-border-color: $light-gray;
|
||||||
|
$base-border: 1px solid $base-border-color;
|
||||||
|
|
||||||
|
// Background Colors
|
||||||
|
$base-background-color: #fff;
|
||||||
|
$secondary-background-color: tint($base-border-color, 75%);
|
||||||
|
|
||||||
|
// Forms
|
||||||
|
$form-box-shadow: inset 0 1px 3px rgba(#000, 0.06);
|
||||||
|
$form-box-shadow-focus: $form-box-shadow, 0 0 5px adjust-color($action-color, $lightness: -5%, $alpha: -0.3);
|
||||||
|
|
||||||
|
// Animations
|
||||||
|
$base-duration: 150ms;
|
||||||
|
$base-timing: ease;
|
||||||
|
|
||||||
|
// Perficient Digital Variables
|
||||||
|
$heading-font-face: 'HalisR', sans-serif;
|
||||||
|
$primary-font-face: 'Lato', sans-serif;
|
||||||
|
|
||||||
|
$black: #000000;
|
||||||
|
$primary-color: #202526; // Dark Gray
|
||||||
|
$secondary-color: lighten($primary-color, 31%); // Gray
|
||||||
|
$accent-color-1: #EF0734; // Perficient Digital Red
|
||||||
|
$accent-color-2: #FFF200; // Perficient Digital Yellow
|
||||||
|
$accent-color-3: #2AB68F; // Perficient Digital Green
|
||||||
|
$white: #FFFFFF;
|
||||||
|
|
||||||
|
$primary-padding:1.5rem 3rem 1rem;
|
||||||
|
|
||||||
|
// Breakpoints Minimum Resolution
|
||||||
|
$tablet: 48em; // tablet
|
||||||
|
$desktop: 64em; // desktop
|
||||||
|
|
||||||
|
// Bourbon Omega Reset
|
||||||
|
|
||||||
|
@mixin omega-reset($nth) {
|
||||||
|
&:nth-child(#{$nth}) { margin-right: flex-gutter(); }
|
||||||
|
&:nth-child(#{$nth}+1) { clear: none }
|
||||||
|
}
|
47
app/assets/stylesheets/mailers/custom-mailer-styles.scss
Normal file
47
app/assets/stylesheets/mailers/custom-mailer-styles.scss
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
a {
|
||||||
|
text-decoration: underline;
|
||||||
|
color: $success-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.email-container {
|
||||||
|
.email-heading th {
|
||||||
|
font-family: 'Lato', Helvetica Neue, Helvetica, Ariel, sans-serif;
|
||||||
|
.prft-slash {
|
||||||
|
font-size: 100px;
|
||||||
|
font-weight: 200;
|
||||||
|
color: $success-color;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
.email-title {
|
||||||
|
text-transform: uppercase;
|
||||||
|
font-weight: 700;
|
||||||
|
font-size:18px;
|
||||||
|
vertical-align: sub;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.email-body * {
|
||||||
|
font-family: 'Lato', Helvetica Neue, Helvetica, Ariel, sans-serif;
|
||||||
|
font-size: 16px;
|
||||||
|
line-height: 1.5em;
|
||||||
|
padding-bottom: 20px;
|
||||||
|
font-weight:300;
|
||||||
|
word-break: break-word;
|
||||||
|
strong {
|
||||||
|
font-weight:bold;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.email-copyright {
|
||||||
|
font-family: 'Lato', Helvetica Neue, Helvetica, Ariel, sans-serif;
|
||||||
|
font-size: 10px;
|
||||||
|
color: #909090;
|
||||||
|
vertical-align: bottom;
|
||||||
|
}
|
||||||
|
.email-logo {
|
||||||
|
text-align: right;
|
||||||
|
vertical-align: bottom;
|
||||||
|
}
|
||||||
|
.email-bg {
|
||||||
|
background:#fef035 !important;
|
||||||
|
background-color:#fef035 !important;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
// foundation overrides
|
||||||
|
|
||||||
|
$success-color: #EF0734;
|
||||||
|
$global-width: 600px;
|
||||||
|
$body-font-family: inherit;
|
||||||
|
$body-background: #ffffff;
|
@ -0,0 +1,18 @@
|
|||||||
|
@import 'foundation-emails/scss/util/util',
|
||||||
|
'foundation-emails/scss/global',
|
||||||
|
|
||||||
|
'foundation_global_overrides',
|
||||||
|
|
||||||
|
'foundation-emails/scss/components/normalize',
|
||||||
|
'foundation-emails/scss/grid/grid',
|
||||||
|
'foundation-emails/scss/grid/block-grid',
|
||||||
|
'foundation-emails/scss/components/alignment',
|
||||||
|
'foundation-emails/scss/components/visibility',
|
||||||
|
'foundation-emails/scss/components/typography',
|
||||||
|
'foundation-emails/scss/components/button',
|
||||||
|
'foundation-emails/scss/components/callout',
|
||||||
|
'foundation-emails/scss/components/thumbnail',
|
||||||
|
'foundation-emails/scss/components/menu',
|
||||||
|
'foundation-emails/scss/components/outlook-first',
|
||||||
|
'foundation-emails/scss/components/media-query';
|
||||||
|
@import 'custom-mailer-styles';
|
31
app/assets/stylesheets/molecules/_admin.scss
Normal file
31
app/assets/stylesheets/molecules/_admin.scss
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
main {
|
||||||
|
@include outer-container;
|
||||||
|
.saveadd {
|
||||||
|
@include span-columns(12);
|
||||||
|
}
|
||||||
|
.savecancel {
|
||||||
|
@include span-columns(12);
|
||||||
|
}
|
||||||
|
label.error {
|
||||||
|
text-align: right;
|
||||||
|
padding-top: 0;
|
||||||
|
font-size: 0.8rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (min-width: $tablet) {
|
||||||
|
main {
|
||||||
|
@include outer-container;
|
||||||
|
.viewall {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
.saveadd {
|
||||||
|
@include span-columns(6);
|
||||||
|
}
|
||||||
|
.savecancel {
|
||||||
|
@include span-columns(6);
|
||||||
|
@include omega();
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
26
app/assets/stylesheets/molecules/_buttongroups.scss
Normal file
26
app/assets/stylesheets/molecules/_buttongroups.scss
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
.btn-group {
|
||||||
|
> button {
|
||||||
|
float: left;
|
||||||
|
background-color: $white;
|
||||||
|
color: $secondary-color;
|
||||||
|
border-width: 1px 0;
|
||||||
|
border-style: solid;
|
||||||
|
border-color: $secondary-color;
|
||||||
|
margin: 0;
|
||||||
|
&:first-child {
|
||||||
|
border-radius: 999px 0 0 999px;
|
||||||
|
border-width:1px 0 1px 1px;
|
||||||
|
}
|
||||||
|
&:last-child {
|
||||||
|
border-radius: 0 999px 999px 0;
|
||||||
|
border-width:1px 1px 1px 0;
|
||||||
|
}
|
||||||
|
&.selected {
|
||||||
|
background-color: $primary-color;
|
||||||
|
color:$white;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&:after {
|
||||||
|
@include clearfix;
|
||||||
|
}
|
||||||
|
}
|
110
app/assets/stylesheets/molecules/_buttons.scss
Normal file
110
app/assets/stylesheets/molecules/_buttons.scss
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
#{$all-buttons}, .btn {
|
||||||
|
appearance: none;
|
||||||
|
background-color: $primary-color;
|
||||||
|
border: 0;
|
||||||
|
border-radius: $base-border-radius;
|
||||||
|
color: #fff;
|
||||||
|
cursor: pointer;
|
||||||
|
display: inline-block;
|
||||||
|
font-family: $primary-font-face;
|
||||||
|
text-transform: uppercase;
|
||||||
|
font-size: 0.875rem;
|
||||||
|
letter-spacing: 0.2rem;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
font-weight: 600;
|
||||||
|
line-height: 1;
|
||||||
|
padding: 1.2em 2em;
|
||||||
|
text-decoration: none;
|
||||||
|
transition: background-color $base-duration $base-timing;
|
||||||
|
user-select: none;
|
||||||
|
vertical-align: middle;
|
||||||
|
white-space: nowrap;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
&:hover,
|
||||||
|
&:focus {
|
||||||
|
&:not([disabled]) {
|
||||||
|
background-color: $secondary-color;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&:disabled {
|
||||||
|
cursor: not-allowed;
|
||||||
|
opacity: 0.3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.secondary-btn,
|
||||||
|
input[type="submit"].secondary-btn,
|
||||||
|
button.secondary-btn {
|
||||||
|
background-color: $secondary-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tertiary-btn,
|
||||||
|
input[type="submit"].tertiary-btn,
|
||||||
|
button.tertiary-btn {
|
||||||
|
background-color: transparent;
|
||||||
|
color: $primary-color;
|
||||||
|
border: 1px solid $primary-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button-save {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button-cancel,
|
||||||
|
.tertiary-btn.button-cancel {
|
||||||
|
color: #ef0734;
|
||||||
|
border: 1px solid #ef0734;
|
||||||
|
display: none;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
&:not([disabled]) {
|
||||||
|
color: #fff;
|
||||||
|
background-color: #ef0734;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.answer-buttons {
|
||||||
|
.button-cancel {
|
||||||
|
margin-left: .5rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.disabled-button {
|
||||||
|
pointer-events: none;
|
||||||
|
opacity: 0.5;
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button-wrap {
|
||||||
|
margin-top: 3rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
// JS-enabled styles
|
||||||
|
html.no-js {
|
||||||
|
.tertiary-btn.button-edit {
|
||||||
|
border: none;
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
.button-save,
|
||||||
|
.button-cancel {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
html.js {
|
||||||
|
.button-edit {
|
||||||
|
@extend .btn;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (min-width: $screen-sm) {
|
||||||
|
html.no-js {
|
||||||
|
.tertiary-btn.button-edit {
|
||||||
|
display: inline-block;
|
||||||
|
padding-top: .75rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user