Compare commits

...

17 Commits

Author SHA1 Message Date
Mark Moser
8bfe455946 adds new local time helper gem
re: #78
2017-06-05 11:30:35 -05:00
Mark Moser
0f0e7ae75e css: starting quiz styles 2017-06-05 11:30:35 -05:00
Mark Moser
9f3e90386e css: general placement 2017-06-05 11:30:35 -05:00
Mark Moser
b961fe7553 admin a11y polish 2017-06-05 11:30:35 -05:00
Mark Moser
9368184aa8 a11y: other-labels 2017-06-05 11:30:35 -05:00
Mark Moser
d53d87f1bc a11y polish 2017-06-05 11:30:35 -05:00
Mark Moser
235b4314a4 correct error mesages for all question types 2017-06-05 11:30:35 -05:00
Mark Moser
4d71ac7166 html review: round 1 2017-06-05 11:30:35 -05:00
Mark Moser
2730ca10c8 css reset adjustments 2017-06-05 11:30:35 -05:00
Mark Moser
0b82cb1d01 a css reset 2017-06-05 11:30:34 -05:00
Mark Moser
39246ca138 update autoprefixer gem 2017-06-05 11:30:34 -05:00
Mark Moser
5e743ca2eb more headings 2017-06-05 11:30:34 -05:00
Mark Moser
0727440a31 html reset 2017-06-05 11:30:34 -05:00
Mark Moser
cb6f41fe29 questionable js cleanup 2017-06-05 11:30:34 -05:00
Mark Moser
2cc94ba296 a little js cleanup 2017-06-05 11:30:34 -05:00
Mark Moser
858c9b2eeb stripped out SCSS and bourbon 2017-06-05 11:30:34 -05:00
Mark Moser
8549bd2d15 linter adjustments and refactor prep 2017-06-05 11:30:34 -05:00
126 changed files with 1008 additions and 3651 deletions

View File

@ -1,21 +1,40 @@
# http://eslint.org/docs/user-guide/configuring ---
# http://eslint.org/docs/2.0.0/rules/ parser: esprima
env: env:
browser: true browser: true,
jquery: true jquery: true
extends: 'eslint:recommended' settings:
ecmascript: 6
plugins: plugins:
- ignore-erb - ignore-erb
rules:
# "off" or 0 - turn the rule off
# "warn" or 1 - turn the rule on as a warning (doesnt affect exit code)
# "error" or 2 - turn the rule on as an error (exit code is 1 when triggered)
# usually preferring warn because error can halt the build process and trips up rapid feedback
extends: "eslint:recommended"
rules: # http://eslint.org/docs/rules/
camelcase: warn
curly:
- warn
- all
indent: indent:
- error - warn
- 2 - 2
linebreak-style: linebreak-style:
- error - error
- unix - unix
no-trailing-spaces: no-console:
# console.error and console.warn are ok, but let's
# keep console.log out of production code.
- warn - warn
- allow:
- warn
- error
no-mixed-spaces-and-tabs:
- warn
- smart-tabs
no-trailing-spaces: warn
no-underscore-dangle: warn
quotes: off quotes: off
semi: semi: warn
- error
- always

View File

@ -1,11 +0,0 @@
scss_files: 'app/assets/stylesheets/**/*.scss'
linters:
StringQuotes:
enabled: false
LeadingZero:
style: 'include_zero'
SelectorFormat:
ignored_names:
QualifyingElement:
allow_element_with_attribute: true

View File

@ -14,13 +14,11 @@ gem 'mailjet', '~> 1.3.8'
gem 'puma', '~> 3.0' gem 'puma', '~> 3.0'
gem 'pundit' gem 'pundit'
gem 'sass-rails', '~> 5.0' gem 'sass-rails', '~> 5.0'
gem 'autoprefixer-rails', '~> 6'
gem 'settingslogic', '~> 2.0.9' gem 'settingslogic', '~> 2.0.9'
gem 'turbolinks', '~> 5' gem 'turbolinks', '~> 5'
gem 'uglifier', '>= 1.3.0' gem 'uglifier', '>= 1.3.0'
gem 'local_time'
# assets
gem 'bourbon'
gem 'neat'
# Foundation for Emails # Foundation for Emails
gem 'inky-rb', require: 'inky' gem 'inky-rb', require: 'inky'

View File

@ -1,39 +1,39 @@
GEM GEM
remote: https://rubygems.org/ remote: https://rubygems.org/
specs: specs:
actioncable (5.0.1) actioncable (5.0.2)
actionpack (= 5.0.1) actionpack (= 5.0.2)
nio4r (~> 1.2) nio4r (>= 1.2, < 3.0)
websocket-driver (~> 0.6.1) websocket-driver (~> 0.6.1)
actionmailer (5.0.1) actionmailer (5.0.2)
actionpack (= 5.0.1) actionpack (= 5.0.2)
actionview (= 5.0.1) actionview (= 5.0.2)
activejob (= 5.0.1) activejob (= 5.0.2)
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.1) actionpack (5.0.2)
actionview (= 5.0.1) actionview (= 5.0.2)
activesupport (= 5.0.1) activesupport (= 5.0.2)
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.1) actionview (5.0.2)
activesupport (= 5.0.1) activesupport (= 5.0.2)
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.3)
activejob (5.0.1) activejob (5.0.2)
activesupport (= 5.0.1) activesupport (= 5.0.2)
globalid (>= 0.3.6) globalid (>= 0.3.6)
activemodel (5.0.1) activemodel (5.0.2)
activesupport (= 5.0.1) activesupport (= 5.0.2)
activerecord (5.0.1) activerecord (5.0.2)
activemodel (= 5.0.1) activemodel (= 5.0.2)
activesupport (= 5.0.1) activesupport (= 5.0.2)
arel (~> 7.0) arel (~> 7.0)
activesupport (5.0.1) activesupport (5.0.2)
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)
@ -43,6 +43,8 @@ GEM
ansi (1.5.0) ansi (1.5.0)
arel (7.1.4) arel (7.1.4)
ast (2.3.0) ast (2.3.0)
autoprefixer-rails (6.7.7)
execjs
awesome_print (1.7.0) awesome_print (1.7.0)
bcrypt (3.1.11) bcrypt (3.1.11)
better_errors (2.1.1) better_errors (2.1.1)
@ -51,37 +53,41 @@ GEM
rack (>= 0.9.0) 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) brakeman (3.5.0)
sass (~> 3.4) builder (3.2.3)
thor (~> 0.19)
brakeman (3.4.1)
builder (3.2.2)
byebug (9.0.6) byebug (9.0.6)
choice (0.2.0) choice (0.2.0)
coderay (1.1.1) coderay (1.1.1)
concurrent-ruby (1.0.4) coffee-rails (4.2.1)
css_parser (1.4.7) coffee-script (>= 2.2.0)
railties (>= 4.0.0, < 5.2.x)
coffee-script (2.4.1)
coffee-script-source
execjs
coffee-script-source (1.12.2)
concurrent-ruby (1.0.5)
css_parser (1.4.9)
addressable addressable
debug_inspector (0.0.2) debug_inspector (0.0.2)
docile (1.1.5) docile (1.1.5)
domain_name (0.5.20161129) domain_name (0.5.20170223)
unf (>= 0.0.5, < 1.0.0) 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)
erubis (2.7.0) erubis (2.7.0)
eventmachine (1.2.1) eventmachine (1.2.3)
execjs (2.7.0) execjs (2.7.0)
faker (1.7.3) faker (1.7.3)
i18n (~> 0.5) i18n (~> 0.5)
ffi (1.9.14) ffi (1.9.18)
figaro (1.1.1) figaro (1.1.1)
thor (~> 0.14) thor (~> 0.14)
formatador (0.2.5) formatador (0.2.5)
foundation_emails (2.2.1.0) foundation_emails (2.2.1.0)
globalid (0.3.7) globalid (0.3.7)
activesupport (>= 4.1.0) activesupport (>= 4.1.0)
guard (2.14.0) guard (2.14.1)
formatador (>= 0.2.4) formatador (>= 0.2.4)
listen (>= 2.7, < 4.0) listen (>= 2.7, < 4.0)
lumberjack (~> 1.0) lumberjack (~> 1.0)
@ -112,12 +118,12 @@ GEM
http-cookie (1.0.3) http-cookie (1.0.3)
domain_name (~> 0.5) domain_name (~> 0.5)
http_parser.rb (0.6.0) http_parser.rb (0.6.0)
i18n (0.7.0) i18n (0.8.1)
inky-rb (1.3.7.2) inky-rb (1.3.7.2)
foundation_emails (~> 2) foundation_emails (~> 2)
nokogiri nokogiri
jbuilder (2.6.1) jbuilder (2.6.3)
activesupport (>= 3.0.0, < 5.1) activesupport (>= 3.0.0, < 5.2)
multi_json (~> 1.2) multi_json (~> 1.2)
jquery-rails (4.2.2) jquery-rails (4.2.2)
rails-dom-testing (>= 1, < 3) rails-dom-testing (>= 1, < 3)
@ -140,6 +146,8 @@ GEM
rb-fsevent (~> 0.9, >= 0.9.4) rb-fsevent (~> 0.9, >= 0.9.4)
rb-inotify (~> 0.9, >= 0.9.7) rb-inotify (~> 0.9, >= 0.9.7)
ruby_dep (~> 1.2) ruby_dep (~> 1.2)
local_time (1.0.3)
coffee-rails
loofah (2.0.3) loofah (2.0.3)
nokogiri (>= 1.5.9) nokogiri (>= 1.5.9)
lumberjack (1.0.11) lumberjack (1.0.11)
@ -155,32 +163,29 @@ GEM
mime-types-data (3.2016.0521) mime-types-data (3.2016.0521)
mini_portile2 (2.1.0) mini_portile2 (2.1.0)
minitest (5.10.1) minitest (5.10.1)
minitest-reporters (1.1.13) minitest-reporters (1.1.14)
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.5) mysql2 (0.4.5)
neat (1.8.0)
sass (>= 3.3)
thor (~> 0.19)
nenv (0.3.0) nenv (0.3.0)
netrc (0.11.0) netrc (0.11.0)
nio4r (1.2.1) nio4r (2.0.0)
nokogiri (1.7.0.1) nokogiri (1.7.0.1)
mini_portile2 (~> 2.1.0) mini_portile2 (~> 2.1.0)
notiffany (0.1.1) notiffany (0.1.1)
nenv (~> 0.1) nenv (~> 0.1)
shellany (~> 0.0) shellany (~> 0.0)
parser (2.3.3.1) parser (2.4.0.0)
ast (~> 2.2) ast (~> 2.2)
policy-assertions (0.0.3) policy-assertions (0.0.3)
activesupport (>= 3.0.0) activesupport (>= 3.0.0)
pundit (>= 1.0.0) pundit (>= 1.0.0)
powerpack (0.1.1) powerpack (0.1.1)
premailer (1.8.7) premailer (1.10.0)
css_parser (>= 1.4.5) css_parser (>= 1.4.9)
htmlentities (>= 4.0.0) htmlentities (>= 4.0.0)
premailer-rails (1.9.5) premailer-rails (1.9.5)
actionmailer (>= 3, < 6) actionmailer (>= 3, < 6)
@ -192,10 +197,10 @@ GEM
pry-byebug (3.4.2) pry-byebug (3.4.2)
byebug (~> 9.0) byebug (~> 9.0)
pry (~> 0.10) pry (~> 0.10)
pry-rails (0.3.4) pry-rails (0.3.5)
pry (>= 0.9.10) pry (>= 0.9.10)
public_suffix (2.0.5) public_suffix (2.0.5)
puma (3.6.2) puma (3.7.1)
pundit (1.1.0) pundit (1.1.0)
activesupport (>= 3.0.0) activesupport (>= 3.0.0)
rack (2.0.1) rack (2.0.1)
@ -203,17 +208,17 @@ GEM
rack rack
rack-test (0.6.3) rack-test (0.6.3)
rack (>= 1.0) rack (>= 1.0)
rails (5.0.1) rails (5.0.2)
actioncable (= 5.0.1) actioncable (= 5.0.2)
actionmailer (= 5.0.1) actionmailer (= 5.0.2)
actionpack (= 5.0.1) actionpack (= 5.0.2)
actionview (= 5.0.1) actionview (= 5.0.2)
activejob (= 5.0.1) activejob (= 5.0.2)
activemodel (= 5.0.1) activemodel (= 5.0.2)
activerecord (= 5.0.1) activerecord (= 5.0.2)
activesupport (= 5.0.1) activesupport (= 5.0.2)
bundler (>= 1.3.0, < 2.0) bundler (>= 1.3.0, < 2.0)
railties (= 5.0.1) railties (= 5.0.2)
sprockets-rails (>= 2.0.0) sprockets-rails (>= 2.0.0)
rails-controller-testing (1.0.1) rails-controller-testing (1.0.1)
actionpack (~> 5.x) actionpack (~> 5.x)
@ -229,18 +234,18 @@ GEM
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.1) railties (5.0.2)
actionpack (= 5.0.1) actionpack (= 5.0.2)
activesupport (= 5.0.1) activesupport (= 5.0.2)
method_source method_source
rake (>= 0.8.7) rake (>= 0.8.7)
thor (>= 0.18.1, < 2.0) thor (>= 0.18.1, < 2.0)
rainbow (2.2.1) rainbow (2.2.1)
rake (12.0.0) rake (12.0.0)
rb-fsevent (0.9.8) rb-fsevent (0.9.8)
rb-inotify (0.9.7) rb-inotify (0.9.8)
ffi (>= 0.5.0) ffi (>= 0.5.0)
rest-client (2.0.0) rest-client (2.0.1)
http-cookie (>= 1.0.2, < 2.0) http-cookie (>= 1.0.2, < 2.0)
mime-types (>= 1.16, < 4.0) mime-types (>= 1.16, < 4.0)
netrc (~> 0.8) netrc (~> 0.8)
@ -262,13 +267,13 @@ GEM
tilt (>= 1.1, < 3) tilt (>= 1.1, < 3)
settingslogic (2.0.9) settingslogic (2.0.9)
shellany (0.0.1) shellany (0.0.1)
simplecov (0.12.0) simplecov (0.13.0)
docile (~> 1.1.0) docile (~> 1.1.0)
json (>= 1.8, < 3) json (>= 1.8, < 3)
simplecov-html (~> 0.10.0) simplecov-html (~> 0.10.0)
simplecov-html (0.10.0) simplecov-html (0.10.0)
slop (3.6.0) slop (3.6.0)
spring (2.0.0) spring (2.0.1)
activesupport (>= 4.2) activesupport (>= 4.2)
spring-watcher-listen (2.0.1) spring-watcher-listen (2.0.1)
listen (>= 2.7, < 4.0) listen (>= 2.7, < 4.0)
@ -282,25 +287,25 @@ GEM
sprockets (>= 3.0.0) sprockets (>= 3.0.0)
table_print (1.5.6) table_print (1.5.6)
thor (0.19.4) thor (0.19.4)
thread_safe (0.3.5) thread_safe (0.3.6)
tilt (2.0.5) tilt (2.0.6)
turbolinks (5.0.1) 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.4) uglifier (3.1.4)
execjs (>= 0.3.0, < 3) execjs (>= 0.3.0, < 3)
unf (0.1.4) unf (0.1.4)
unf_ext unf_ext
unf_ext (0.0.7.2) unf_ext (0.0.7.2)
unicode-display_width (1.1.2) unicode-display_width (1.1.3)
web-console (3.4.0) web-console (3.4.0)
actionview (>= 5.0) actionview (>= 5.0)
activemodel (>= 5.0) activemodel (>= 5.0)
debug_inspector debug_inspector
railties (>= 5.0) railties (>= 5.0)
websocket-driver (0.6.4) websocket-driver (0.6.5)
websocket-extensions (>= 0.1.0) websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.2) websocket-extensions (0.1.2)
@ -308,11 +313,11 @@ PLATFORMS
ruby ruby
DEPENDENCIES DEPENDENCIES
autoprefixer-rails (~> 6)
awesome_print awesome_print
bcrypt (~> 3.1.7) bcrypt (~> 3.1.7)
better_errors better_errors
binding_of_caller binding_of_caller
bourbon
brakeman brakeman
byebug byebug
faker faker
@ -329,10 +334,10 @@ DEPENDENCIES
json (~> 2.0.2) json (~> 2.0.2)
kaminari kaminari
listen listen
local_time
mailjet (~> 1.3.8) mailjet (~> 1.3.8)
minitest-reporters minitest-reporters
mysql2 (>= 0.3.18, < 0.5) mysql2 (>= 0.3.18, < 0.5)
neat
policy-assertions policy-assertions
premailer-rails premailer-rails
pry-byebug pry-byebug

View File

@ -70,13 +70,18 @@ guard :minitest, spring: "bin/rails test", all_after_pass: true do
watch(%r{^app/views/(.*_mailer/)?([^/]+)\.erb$}) { ["test/mailers", "test/integration"] } watch(%r{^app/views/(.*_mailer/)?([^/]+)\.erb$}) { ["test/mailers", "test/integration"] }
end end
# ESLint
guard :shell, all_on_start: true do guard :shell, all_on_start: true do
# TODO: Annoyingly, all files are linted twice on start/full runs. Why? # ESLint
watch %r{app/assets/javascripts/*/.*} do |file| watch %r{app/assets/javascripts/*/.*} do |file|
system %(echo "ESLint:\033[32m #{file[0]}\033[0m") system %(echo "ESLint:\033[32m #{file[0]}\033[0m")
system %(./node_modules/eslint/bin/eslint.js #{file[0]}) system %(./node_modules/eslint/bin/eslint.js #{file[0]})
end end
# sass-lint
watch %r{app/assets/stylesheets/*/.*scss$} do |file|
system %(echo "sass-lint:\033[32m #{file[0]}\033[0m")
system %(sass-lint --cache --config .sass-lint.yml '#{file[0]}' --verbose --no-exit)
end
end end
guard :rubocop, cli: %w(-D -S -a) do guard :rubocop, cli: %w(-D -S -a) do

View File

@ -1,18 +0,0 @@
$(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();
});
});
});

View File

@ -1,27 +0,0 @@
function handleAjaxResponse($el, callback) {
var $header = $('header');
$el.on("ajax:success", function(e, data){
$header.after('<div class="success">' + data.message + '</div>');
callback(data);
}).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>');
}
});
}
function updateVotes(data){
$("[data-id=up-votes]").html(data.upCount);
$("[data-id=down-votes]").html(data.downCount);
$("[data-id=my-vote]").html(data.myVote);
}
$(document).ready(function() {
$('[data-id=ajax-action]').each(function(){ handleAjaxResponse($(this)); });
});
$(document).ready(function() {
$('[data-id=vote-count]').each(function(){ handleAjaxResponse($(this), updateVotes); });
});

View File

@ -14,9 +14,4 @@
//= require jquery_ujs //= require jquery_ujs
//= require turbolinks //= require turbolinks
//= require modernizr-lite/modernizr //= require modernizr-lite/modernizr
//= require local_time
//= require ajax-links
//= require forms/button-group
//= require forms/animations
//= require forms/textarea-limit

View File

@ -1,13 +0,0 @@
// Action Cable provides the framework to deal with WebSockets in Rails.
// You can generate new channels where WebSocket features live using the rails generate channel command.
//
//= require action_cable
//= require_self
//= require_tree ./channels
// (function() {
// this.App || (this.App = {});
//
// App.cable = ActionCable.createConsumer();
//
// }).call(this);

View File

@ -1,30 +0,0 @@
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');
});
});

View File

@ -1,8 +0,0 @@
/**
* Button Group Functionality
*/
$('.btn-group button').click(function() {
$(this).siblings().removeClass('selected');
$(this).addClass('selected');
});

View File

@ -1,25 +0,0 @@
$.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"));
});

View File

@ -1 +0,0 @@
//= require html5shiv/dist/html5shiv.min

View File

@ -12,6 +12,7 @@ function updateResults(elem) {
var iBody = document.createElement('body'); var iBody = document.createElement('body');
var codeFrame = document.createElement('iframe'); var codeFrame = document.createElement('iframe');
codeFrame.setAttribute("title", "live-code-results-" + resultsContainer.getAttribute("data-qid"));
codeFrame.setAttribute("width", "100%"); codeFrame.setAttribute("width", "100%");
codeFrame.setAttribute("height", "100%"); codeFrame.setAttribute("height", "100%");
resultsContainer.appendChild(codeFrame); resultsContainer.appendChild(codeFrame);
@ -27,6 +28,7 @@ function updateResults(elem) {
codeStyle.appendChild(rulesNode); codeStyle.appendChild(rulesNode);
iHead.appendChild(codeStyle); iHead.appendChild(codeStyle);
iDoc.setAttribute('lang', 'en');
iDoc.appendChild(iHead); iDoc.appendChild(iHead);
iBody.innerHTML = codeHtml; iBody.innerHTML = codeHtml;
iDoc.appendChild(iBody); iDoc.appendChild(iBody);

View File

@ -41,11 +41,11 @@
*/ */
var fillOutLines = function(codeLines, h, lineNo){ var fillOutLines = function(codeLines, h, lineNo){
while ( (codeLines.height() - h ) <= 0 ){ while ( (codeLines.height() - h ) <= 0 ){
if ( lineNo == opts.selectedLine ) if ( lineNo == opts.selectedLine ) {
codeLines.append("<div class='lineno lineselect'>" + lineNo + "</div>"); codeLines.append("<div class='lineno lineselect'>" + lineNo + "</div>");
else } else {
codeLines.append("<div class='lineno'>" + lineNo + "</div>"); codeLines.append("<div class='lineno'>" + lineNo + "</div>");
}
lineNo++; lineNo++;
} }
return lineNo; return lineNo;

View File

@ -1,95 +0,0 @@
/* 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);

View File

@ -12,15 +12,18 @@
* *
*/ */
@import 'bourbon'; @import 'settings/variables';
@import 'neat'; @import 'settings/fonts';
@import 'settings/mixins';
@import 'core/fonts'; /*= require normalize-css/normalize */
@import 'core/variables'; @import 'settings/reset';
@import 'core/animations';
@import 'atoms/**/*'; @import 'generic/typography';
@import 'molecules/**/*';
// @import 'organisms/**/*'; @import 'elements/body';
@import 'templates/**/*'; @import 'elements/progressbar';
@import 'pages/**/*'; @import 'elements/header';
@import 'elements/form-question';
// @import 'objects/';

View File

@ -1,8 +0,0 @@
.alert {
padding: 20px;
border-radius: 5px;
&.alert-success {
background-color: $accent-color-3;
color: $white;
}
}

View File

@ -1,61 +0,0 @@
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;
}
}

View File

@ -1,10 +0,0 @@
figure {
margin: 0;
}
img,
picture {
margin: 0;
max-width: 100%;
}

View File

@ -1,75 +0,0 @@
// 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%;
}

View File

@ -1,78 +0,0 @@
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;
}
}

View File

@ -0,0 +1,4 @@
# autoprefixer browsers list
> 1%
last 2 versions
IE > 8

View File

@ -1,28 +0,0 @@
@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;
}
}

View File

@ -1,163 +0,0 @@
//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;
}

View File

@ -1,948 +0,0 @@
$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 }
}

View File

@ -0,0 +1,15 @@
body {
display: flex;
flex-direction: column;
margin: 0;
padding: 0;
> {
& header,
& main,
& footer {
order: 2;
margin: $gutter $gutter 0;
}
}
}

View File

@ -0,0 +1,18 @@
.form-question {
textarea {
display: block;
margin-top: 1em;
border: 0;
border-bottom: 1px solid;
padding: 1em 0.5em;
width: 100%;
line-height: 1.5;
font-size: 1em;
box-sizing: border-box;
}
div {
margin: $gutter 0;
}
}

View File

@ -0,0 +1,21 @@
header {
position: relative;
padding: 0.375em 0 0.375em 1.5em;
text-transform: uppercase;
line-height: 1;
font-size: 1.25em;
font-weight: bold;
&::before {
display: block;
position: absolute;
top: 0;
bottom: 0;
left: 0;
transform: skewX(-16.5deg);
background-color: $pd-red;
width: 3px;
content: "";
transform-origin: bottom;
}
}

View File

@ -0,0 +1,7 @@
.progressbar {
order: 1;
margin: 0;
background-color: $turquoise;
padding: $gutter / 2 $gutter;
color: $white;
}

View File

@ -0,0 +1,14 @@
body {
@include primary-font;
font-size: 1em;
}
h1,
h2,
h3,
h4,
h5,
h6 {
@include heading-font;
margin: 0 0 $gutter;
}

View File

@ -1,47 +1,60 @@
// sass-lint:disable no-important
a { a {
text-decoration: underline; text-decoration: underline;
color: $success-color; color: $success-color;
} }
.email-container { .email-container {
.email-heading th { .email-heading {
font-family: 'Lato', Helvetica Neue, Helvetica, Ariel, sans-serif; th {
.prft-slash { font-family: 'Lato', Helvetica Neue, Helvetica, Ariel, sans-serif;
font-size: 100px;
font-weight: 200; .prft-slash {
color: $success-color; vertical-align: middle;
vertical-align: middle; color: $success-color;
} font-size: 100px;
.email-title { font-weight: 200;
text-transform: uppercase; }
font-weight: 700;
font-size:18px; .email-title {
vertical-align: sub; vertical-align: sub;
text-transform: uppercase;
font-size: 18px;
font-weight: 700;
}
} }
} }
.email-body * {
font-family: 'Lato', Helvetica Neue, Helvetica, Ariel, sans-serif; .email-body {
font-size: 16px; * {
line-height: 1.5em; padding-bottom: 20px;
padding-bottom: 20px; line-height: 1.5em;
font-weight:300; font-family: 'Lato', Helvetica Neue, Helvetica, Ariel, sans-serif;
word-break: break-word; font-size: 16px;
strong { font-weight: 300;
font-weight:bold; word-break: break-word;
strong {
font-weight: bold;
}
} }
} }
.email-copyright { .email-copyright {
vertical-align: bottom;
color: $dark-grey;
font-family: 'Lato', Helvetica Neue, Helvetica, Ariel, sans-serif; font-family: 'Lato', Helvetica Neue, Helvetica, Ariel, sans-serif;
font-size: 10px; font-size: 10px;
color: #909090;
vertical-align: bottom;
} }
.email-logo { .email-logo {
text-align: right;
vertical-align: bottom; vertical-align: bottom;
text-align: right;
} }
.email-bg { .email-bg {
background:#fef035 !important; background: $accent-color-2 !important;
background-color:#fef035 !important; background-color: $accent-color-2 !important;
} }
} }

View File

@ -1,6 +1,7 @@
// foundation overrides $dark-grey: #909090;
$success-color: #EF0734; // foundation overrides
$success-color: #ef0734;
$global-width: 600px; $global-width: 600px;
$body-font-family: inherit; $body-font-family: inherit;
$body-background: #ffffff; $body-background: #fff;

View File

@ -1,18 +1,21 @@
@import 'foundation-emails/scss/util/util', @import '../settings/variables';
'foundation-emails/scss/global',
'foundation_global_overrides', @import 'foundation-emails/scss/util/util';
@import 'foundation-emails/scss/global';
@import 'foundation_global_overrides';
@import 'foundation-emails/scss/components/normalize';
@import 'foundation-emails/scss/grid/grid';
@import 'foundation-emails/scss/grid/block-grid';
@import 'foundation-emails/scss/components/alignment';
@import 'foundation-emails/scss/components/visibility';
@import 'foundation-emails/scss/components/typography';
@import 'foundation-emails/scss/components/button';
@import 'foundation-emails/scss/components/callout';
@import 'foundation-emails/scss/components/thumbnail';
@import 'foundation-emails/scss/components/menu';
@import 'foundation-emails/scss/components/outlook-first';
@import 'foundation-emails/scss/components/media-query';
'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'; @import 'custom-mailer-styles';

View File

@ -1,57 +0,0 @@
.accordion {
margin-bottom: 0.75em;
[type="checkbox"]:checked + label,
[type="checkbox"]:checked ~ label:after,
[type="checkbox"]:not(:checked) + label,
[type="checkbox"]:not(:checked) ~ label:after,
[type="radio"]:checked + label,
[type="radio"]:checked ~ label:after,
[type="radio"]:not(:checked) + label,
[type="radio"]:not(:checked) ~ label:after {
content: "";
border: 0;
background-color: transparent;
}
[type="checkbox"]:hover:not(:disabled) + label:before,
[type="radio"]:hover:not(:disabled) + label:before,
[type="radio"]:not(:checked) ~ label:before,
[type="checkbox"]:not(:checked) ~ label:before,
[type="radio"]:checked ~ label:before,
[type="checkbox"]:checked ~ label:before {
background-color: transparent;
border: 0;
content: "+";
font-size: 1.3em;
line-height: 1;
}
[type="checkbox"]:hover:checked + label:before,
[type="radio"]:hover:checked + label:before,
[type="radio"]:checked ~ label:before,
[type="checkbox"]:checked ~ label:before {
background-color: transparent;
content: "-";
}
[type="radio"]:not(:checked) + label,
[type="checkbox"]:not(:checked) + label,
[type="radio"]:checked + label,
[type="checkbox"]:checked + label {
padding-left: 20px;
}
.accordion__copy {
display: none;
margin-top: 0.75em;
}
.accordion__toggle:checked ~ .accordion__copy {
background-color: $gray-lighter;
display: block;
padding: 2.5em 1.25em 1em 1.75em;
margin: -2.25em 0 2em -0.5em;
}
}

View File

@ -1,31 +0,0 @@
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;
}
}
}

View File

@ -1,118 +0,0 @@
.admin-review {
counter-reset: question;
float: left;
width: 66%;
form {
margin-left: 2.3em;
position: relative;
&::before {
content: counter(question) ') ';
counter-increment: question;
font-size: 1.25em;
left: -1.8em;
position: absolute;
top: 0.4em;
}
}
}
.review-comments {
float: right;
padding-left: 30px;
width: 33%;
> div {
margin-bottom: 30px;
}
form {
margin-bottom: 30px;
}
.comment-message {
margin-right: 5px;
}
.comment-author {
font-size: 0.85em;
font-weight: 700;
margin-bottom: 30px;
text-align: right;
&::before {
content: '- ';
}
}
.comment-edit-stamp {
color: rgba($gray-dark, 0.65);
font-size: 0.75em;
text-align: right;
}
.comment-edit-btn {
cursor: pointer;
display: inline-block;
font-size: 0.85em;
font-weight: bold;
padding: 2px 5px;
&:hover {
background-color: $gray-base;
color: $gray-lighter;
}
}
.comment-edit-form {
display: none;
margin: 30px 0;
padding: 10px 0;
}
[type="checkbox"] {
&:checked + .comment-edit-form {
display: block;
}
}
}
.review_meta {
@media screen and (min-width: 768px) {
display: flex;
& > div { flex: 1 1 auto; }
}
.review_meta__votes {
margin-bottom: 15px;
a { padding: 5px; }
}
.review_meta__vetos {
label {
display: inline-block;
margin-left: 15px;
}
.review-status-comments {
opacity: 0;
padding: 15px 0;
height: 0;
max-height: 0;
overflow: hidden;
transition: all 0.500s;
}
input:checked ~ .review-status-comments {
opacity: 1;
height: auto;
max-height: 9999px;
overflow: auto;
transition: all 0.7500s;
}
}
}

View File

@ -1,26 +0,0 @@
.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;
}
}

View File

@ -1,110 +0,0 @@
#{$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;
}
}
}

View File

@ -1,303 +0,0 @@
// TODO: Align colors with variables.scss
fieldset {
background-color: transparent;
border: none;
padding: 0;
margin: 0;
&:disabled {
label {
display: none;
}
.form-group-multiples {
label {
display: block;
}
}
}
}
legend {
font-weight: 300;
margin-bottom: $small-spacing / 2;
padding: 0;
}
label {
display: block;
font-weight: 300;
}
form.btn-center {
text-align: center;
}
#{$all-text-inputs} {
display: block;
font-size: $base-font-size;
border: none;
border-bottom: 1px solid $secondary-color;
box-shadow: none;
border-radius: $base-border-radius;
box-sizing: border-box;
margin-bottom: 1.4em;
padding: $base-spacing / 3;
width: 100%;
font-weight: 300;
font-family: $primary-font-face;
line-height: 1.5em;
&:focus {
outline: none;
box-shadow: none;
}
&:disabled {
background-color: shade($base-background-color, 5%);
cursor: default;
border-bottom-color: #bbb;
}
}
button:disabled,
input[type='submit']:disabled {
opacity: .3;
cursor: default;
}
textarea {
resize: vertical;
background: transparent;
padding: 0 0 3rem;
}
.summary_tpl textarea {
padding: 1rem 1rem 3rem;
}
[type="search"] {
appearance: none;
}
%multiple-choice {
display: inline;
margin-right: $small-spacing / 2;
&:not(:checked),
&:checked {
position: absolute;
left: -9999px;
+ label {
position: relative;
padding-left: 25px;
cursor: pointer;
&:after {
position: absolute;
line-height: 0.8;
color: $primary-color;
transition: all .2s;
}
}
&:disabled {
+ label {
&:before {
box-shadow: none;
border-color: #bbb;
background-color: #ddd;
}
}
}
}
&:not(:checked) {
+ label {
&:after {
opacity: 0;
transform: scale(0);
}
}
}
&:checked {
+ label {
&:before {
border: 1px solid $gray;
background: transparent;
}
&:after {
opacity: 1;
transform: scale(1);
}
}
&:disabled {
+ label {
&:after {
color: #999;
}
}
}
}
&:hover:not(:disabled) {
+ label {
&:before {
border: 2px solid $primary-color;
}
}
}
&:disabled {
+ label {
color: #aaa;
}
}
+ label {
&:before {
content: '';
position: absolute;
left:0;
top: 2px;
width: 20px;
height: 20px;
box-shadow: 0;
border: 1px solid $primary-color;
background: transparent;
box-sizing: border-box;
}
}
}
[type="radio"] {
@extend %multiple-choice;
&:not(:checked),
&:checked {
+ label {
&:after {
content: '';
position: absolute;
width: 8px;
height: 8px;
top: 8px;
left: 6px;
background-color: $primary-color;
border-radius: 100%;
}
}
}
+ label {
&:before {
border-radius: 50%;
}
}
&:not(:disabled) + label:before {
background-color: white;
}
&:disabled {
+ label {
&:after {
background-color: #888;
}
}
}
}
[type="checkbox"] {
@extend %multiple-choice;
&:not(:checked),
&:checked {
+ label {
&:after {
font-family: 'Zapf Dingbats', 'Menlo';
content: '\2714';
font-size: 13px;
top: 7px;
left: 5px;
}
}
}
&:not(:disabled) + label:before {
background-color: white;
}
}
[type="file"] {
margin-bottom: $small-spacing;
width: 100%;
}
select {
margin-bottom: 0.75em;
max-width: 100%;
width: auto; // needed?
background-color: $white;
border: 1px solid #aaa;
border-radius: 0px;
font-weight: 300;
font-family: $primary-font-face;
font-size: 1rem;
&::-ms-expand {
display: none;
}
&:not([multiple]) {
background-image: asset_data_url("icon-dropdownlist.png");
background-repeat: no-repeat;
background-position: right 10px bottom 50%;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
padding: 10px 40px 10px 10px;
}
option {
font-weight: 300;
font-family: $primary-font-face;
font-size: 1rem;
}
}
.form-group {
position: relative;
margin-bottom: 1.2rem;
label {
transition: 0.2s ease;
+ #{$all-text-inputs} {
background: transparent;
}
&.loaded {
left: 0;
top: 5px;
font-size: 1em;
position: absolute;
pointer-events: none;
}
&.animate {
font-size: 0.8em;
top: -10px;
}
}
}
label[for="answer_text"],
label[for="answer_live_code"] {
font-weight: 400;
font-style: italic;
}
.form-group-multiples { // radios, checks wrappers
margin-bottom: .5rem;
}
.button-group {
margin-top: 2rem;
}
.skills-app-form {
margin-top: 2rem;
}
.resolve-error {
animation-name: success-fadeout;
animation-duration: 1.5s;
animation-delay: 0;
animation-fill-mode: forwards;
}
html.no-js {
.chars {
display: none;
}
}

View File

@ -1,35 +0,0 @@
ul, ol {
margin: 0;
padding: 0 0 0 1em;
li {
line-height: 2em;
}
}
dl {
margin: 0;
}
dt {
font-weight: 600;
margin: 0;
}
dd {
margin: 0;
}
ul {
list-style-type: none;
list-style-position: inside;
li {
position:relative;
padding-left:1em;
&:before {
position: absolute;
top: 3px;
left:0;
content: asset_data_url('icon-unorderedlistbullet.png');
}
}
}

View File

@ -1,143 +0,0 @@
.code-input {
margin: 10px 0;
textarea {
font-family: "Lucida Console", Monaco, monospace;
font-size: 10px;
// line-height: 1.6em;
margin-bottom: 0;
min-height: 205px;
width: 100%;
}
}
.code-input textarea,
.questions_tpl .code-input textarea {
padding: 4px 0.2rem 0 2rem;
}
.code-input ~ button {
margin-left: 0;
clear: both;
display: block;
}
.code-results {
margin-bottom: -0.65em;
}
.results {
border: 1px solid $secondary-color;
clear: both;
margin: 10px 0;
min-height: 200px;
width: 100%;
background-color: #fff;
}
fieldset:disabled {
.results {
border-color: #bbb;
}
.code-results,
.code-input label {
display: block;
}
}
iframe {
border: 0;
height: 100%;
min-height: 190px;
width: 100%;
}
@media only screen and (min-width: $desktop) {
.code-input {
float: left;
margin: 10px 1%;
width: 32%;
&:nth-of-type(1) {
margin-left: 0;
}
&:nth-of-type(3) {
margin-right: 0;
}
}
}
// jQuery Lined Textarea Plugin
// http://alan.blog-city.com/jquerylinedtextarea.htm
//
// Copyright (c) 2010 Alan Williamson
//
// 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'
// });
.linedwrap {
border: 1px solid $secondary-color;
padding: 0;
position: relative;
}
fieldset:disabled .linedwrap {
border-color: #bbb;
}
.linedtextarea {
padding: 0;
margin: 0;
}
.linedtextarea textarea, .linedwrap .codelines .lineno {
font-size: 10pt;
font-family: "Lucida Console", Monaco, monospace;
line-height: normal !important;
}
.linedtextarea textarea {
padding-right: 0.3em;
padding-top: 0.3em;
border: 0 !important;
}
.linedwrap .lines {
margin-top: 0px;
overflow: hidden;
border-right: 1px solid #c0c0c0;
margin-right: 10px;
position: absolute;
left: 0.3rem;
}
.linedwrap .codelines {
padding-top: 5px;
}
.linedwrap .codelines .lineno {
color:#AAAAAA;
padding-right: 0.5em;
padding-top: 0.0em;
text-align: right;
white-space: nowrap;
}
.linedwrap .codelines .lineselect {
color: red;
}

View File

@ -1,17 +0,0 @@
nav {
margin: 15px 0;
padding: 0;
text-align: right;
a,
a:visited {
text-decoration: none;
padding: 15px;
margin: 0;
text-transform: uppercase;
&:hover {
background-color: $gray-lighter;
}
}
}

View File

@ -1,41 +0,0 @@
.progress {
position: absolute;
top: 0;
left: 0;
width: 100%;
max-height: 84px;
}
.progress-bar {
// background-color: $primary-color;
background-color: #39bd9a;
color:white;
text-align: right;
line-height: 8vw;
font-weight: 900;
min-width: 50px;
position: relative;
transform: skewX(-16.5deg);
span {
display: inline-block;
transform: skewX(16.5deg);
margin-right: .85rem;
font-size: 3vw;
line-height: 8vw;
}
}
@media screen and (min-width: 500px) {
.progress-bar span {
font-size: 16px;
}
}
@media only screen and (min-width: $desktop) {
.progress-bar,
.progress-bar span {
line-height: 84px;
max-height: 84px;
}
}

View File

@ -1,66 +0,0 @@
table {
border-collapse: collapse;
margin: $small-spacing 0;
width: 100%;
}
th {
border-bottom: 1px solid shade($base-border-color, 25%);
font-weight: 600;
padding: $small-spacing 0;
text-align: left;
a {
display: inline-block;
margin-right: 18px;
padding-right: 5px;
position: relative;
text-decoration: none;
&::after {
background-image: asset_data_url("ic_sort_black_24dp_2x.png");
background-repeat: no-repeat;
background-size: contain;
content: "";
display: block;
height: 18px;
left: 100%;
opacity: 0.5;
position: absolute;
top: 4px;
width: 18px;
}
&.asc {
&::after {
background-image: asset_data_url("ic_arrow_drop_up_black_24dp_2x.png");
height: 25px;
left: calc(100% - 5px);
opacity: 1;
top: 1px;
width: 25px;
}
}
&.desc {
&::after {
background-image: asset_data_url("ic_arrow_drop_down_black_24dp_2x.png");
height: 25px;
left: calc(100% - 5px);
opacity: 1;
top: 1px;
width: 25px;
}
}
}
}
td {
padding: $small-spacing 0;
}
tr,
td,
th {
vertical-align: middle;
}

View File

@ -1,58 +0,0 @@
.error {
text-align: center;
background-color: $accent-color-1;
color: #fff;
margin: 2rem 0 .5rem;
padding: .5rem 0;
}
.error-header {
@include outer-container;
.page-title {
display: inline-block;
h1 {
font-family: $heading-font-face;
font-size: 1.5rem;
}
}
.secondary-btn {
margin-top: 1rem;
}
}
.warning {
@extend .error;
background-color: #f39c12;
}
.success {
@extend .error;
background-color: $brand-success;
}
.notice {
@extend .error;
background-color: $brand-info;
}
[data-id="live-coder-finish-later"] {
.warning {
margin-top: 0;
margin-bottom: 2rem;
text-align: left;
padding: .5rem 1rem;
}
}
@media only screen and (min-width: $desktop) {
.error-header {
.page-title {
h1 {
font-size: 1.5rem;
}
}
.secondary-btn {
float:right;
}
}
}

View File

@ -1,32 +0,0 @@
.styleguide_tpl {
@include outer-container;
}
#halisr {
font-family: $heading-font-face;
font-size:2rem;
#primary-100 { font-weight: 100; }
#primary-200 { font-weight: 200; }
#primary-300 { font-weight: 300; }
#primary-400 { font-weight: 400; }
#primary-500 { font-weight: 500; }
#primary-600 { font-weight: 600; }
#primary-700 { font-weight: 700; }
#primary-800 { font-weight: 800; }
#primary-900 { font-weight: 900; }
}
#lato {
font-family: $primary-font-face;
font-size:2rem;
#secondary-100 { font-weight: 100; }
#secondary-300 { font-weight: 300; }
#secondary-500 { font-weight: 500; }
#secondary-700 { font-weight: 700; }
#secondary-900 { font-weight: 900; }
#secondary-100-i { font-weight: 100; font-style: italic; }
#secondary-300-i { font-weight: 300; font-style: italic; }
#secondary-500-i { font-weight: 500; font-style: italic; }
#secondary-700-i { font-weight: 700; font-style: italic; }
#secondary-900-i { font-weight: 900; font-style: italic; }
}

View File

@ -0,0 +1,163 @@
// sass-lint:disable function-name-format
//HALISR
@font-face {
font-family: 'HalisR';
font-weight: 100;
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-face {
font-family: 'HalisR';
font-weight: 200;
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-face {
font-family: 'HalisR';
font-weight: 300;
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-face {
font-family: 'HalisR';
font-weight: 500;
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-face {
font-family: 'HalisR';
font-weight: 600;
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-face {
font-family: 'HalisR';
font-weight: 700;
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-face {
font-family: 'HalisR';
font-weight: 900;
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');
}
//LATO
@font-face {
font-family: 'Lato';
font-weight: 100;
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-face {
font-family: 'Lato';
font-weight: 300;
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-face {
font-family: 'Lato';
font-weight: 500;
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-face {
font-family: 'Lato';
font-weight: 700;
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-face {
font-family: 'Lato';
font-weight: 900;
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-face {
font-family: 'Lato';
font-weight: 100;
font-style: italic;
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-face {
font-family: 'Lato';
font-weight: 300;
font-style: italic;
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-face {
font-family: 'Lato';
font-weight: 500;
font-style: italic;
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-face {
font-family: 'Lato';
font-weight: 700;
font-style: italic;
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-face {
font-family: 'Lato';
font-weight: 900;
font-style: italic;
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');
}

View File

@ -0,0 +1,9 @@
@mixin primary-font {
font-family: $primary-font-face;
font-weight: 300;
}
@mixin heading-font {
font-family: $heading-font-face;
font-weight: 100;
}

View File

@ -0,0 +1,27 @@
// normalize css is loaded, then these additions:
html {
margin: 0;
padding: 0;
font-size: 16px;
box-sizing: border-box;
}
main,
section,
article,
aside,
footer,
h1,
h2,
h3,
h4,
h5,
h6,
div,
p,
ul,
*::before,
*::after {
box-sizing: inherit;
}

View File

@ -0,0 +1,28 @@
// Breakpoints Minimum Resolution
$tablet: 48em; // tablet
$desktop: 64em; // desktop
$gutter: 32px;
$progressbar-height: $gutter * 2;
$heading-font-face: 'HalisR', sans-serif;
$primary-font-face: 'Lato', sans-serif;
//colors
$pd-red: #ef0734;
$pd-yellow: #fff200;
$pd-green: #2ab68f;
$black: #000;
$dark-grey: #202526;
$grey: lighten($dark-grey, 31%);
$white: #fff;
$turquoise: #39bd9a;
$primary-color: $dark-grey;
$secondary-color: $grey;
$accent-color-1: $pd-red;
$accent-color-2: $pd-yellow;
$accent-color-3: $pd-green;

View File

@ -1,44 +0,0 @@
footer {
width: 100%;
height: 112px;
@include outer-container;
}
.footer_title {
@include span-columns(6);
padding:2.5rem 0 1rem;
h2 {
font-family: $primary-font-face;
text-transform: uppercase;
font-weight: 700;
margin: 0 0 0 0;
font-size: 3vw;
}
}
.pd_logo {
@include span-columns(6);
@include omega();
text-align: right;
padding:1.5rem 0 1rem;
img {
max-height: 45px;
}
}
.footer_yellow-bar {
@include span-columns(12);
@include omega();
@include slantmix(0, 0, 1.5rem);
background-color:$accent-color-2;
}
@media only screen and (min-width: 480px) {
footer {
height: 116px;
}
}
@media screen and (min-width: 700px) {
.footer_title h2 {
font-size: 1.25rem;
}
}

View File

@ -1,30 +0,0 @@
header {
@include outer-container;
padding-top: 13vw;
&.no-progressbar {
padding-top: 52px;
}
&.no-progressbar.admin {
padding-top: 0;
}
}
.page-title {
@include omega();
text-transform: uppercase;
padding: 1rem 3rem .5rem;
div {
font: bold 1.25rem $primary-font-face;
}
}
@media screen and (min-width: $desktop) {
header {
padding-top: 135px;
}
.page-title {
padding:$primary-padding;
}
}

View File

@ -1,26 +0,0 @@
.intro_tpl {
@include outer-container;
padding:$primary-padding;
form {
margin-top: 3rem;
@include span-columns(12);
@include omega();
button[type='submit']
{
display: block;
width:100%;
margin-top: 3rem;
}
}
}
@media only screen and (min-width: $desktop) {
.intro_tpl {
padding:$primary-padding;
form {
@include span-columns(6);
@include shift(3);
@include omega();
}
}
}

View File

@ -1,70 +0,0 @@
.questions_tpl {
@include outer-container;
.prft-heading,
.content-well {
padding: 1rem 0;
@include outer-container;
.column-left,
.column-right {
@include span-columns(12);
@include omega();
}
}
.form-group {
position: relative;
textarea {
+ label {
position: absolute;
left: 3rem;
top: 1rem;
pointer-events: none;
}
&:focus,
&:valid {
+ label {
top: -10px;
font-size: 0.8em;
}
}
}
}
textarea {
padding: 1rem 0;
}
}
.btn-container-left,
.btn-container-right {
padding-top: 2rem;
}
.btn-container-left {
@include span-columns(5);
}
.btn-container-right {
@include span-columns(7);
@include omega();
text-align: right;
}
.btn-container-summary {
text-align: center;
}
@media only screen and (min-width: $desktop) {
.questions_tpl {
@include outer-container;
.prft-heading,
.content-well {
.column-left {
@include omega-reset(6n);
@include span-columns(6);
}
.column-right {
@include span-columns(6);
@include omega();
}
}
}
}

View File

@ -1,100 +0,0 @@
.summary_tpl {
@include outer-container;
padding: 2rem 0;
h2 {
font-size:1.875rem;
font-weight: 400;
}
.answer-sec {
// padding-top:2rem;
margin-bottom: 2rem;
transition: 0.3s ease;
// &.editable {
// background-color: #f2f2f2;
// }
.question-heading {
@include outer-container;
}
.question-title {
@include span-columns(12);
@include omega();
padding-top: .75rem;
}
h3 {
font-size: 1.25rem;
font-weight: 400;
}
.answer-buttons {
@include span-columns(12);
@include omega();
white-space: nowrap;
}
.answer-container {
padding:2rem 0;
textarea:not(:disabled) {
background-color: white;
}
}
}
}
.editable {
background-color: #f2f2f2;
padding: 2rem;
margin: 0 -2rem;
}
#summary-form {
margin-top: 3rem;
}
.success {
box-sizing: border-box;
text-align: center;
background-color: $accent-color-3;
color: #fff;
padding-top: .5rem;
padding-bottom: .5rem;
margin-bottom: .5rem;
animation-name: success-fadeout;
animation-duration: 1.5s;
animation-delay: 2s;
animation-fill-mode: forwards;
}
.text-answer.answer-container {
white-space: pre-line;
}
@media only screen and (min-width: $tablet) {
.summary_tpl {
.answer-sec {
.question-heading {
.question-title {
@include span-columns(8);
}
.answer-buttons {
@include span-columns(4);
@include omega();
text-align: right;
}
}
}
}
}
@media only screen and (min-width: $desktop) {
.summary_tpl {
.answer-sec {
.question-heading {
.question-title {
@include span-columns(9);
}
.answer-buttons {
@include span-columns(3);
}
}
}
}
}

View File

@ -28,7 +28,8 @@ class Candidate < ApplicationRecord
def interview? def interview?
return 'yes' if approved? return 'yes' if approved?
'no' if declined? return 'no' if declined?
'-'
end end
def build_reviews def build_reviews

View File

@ -1,4 +1,4 @@
<nav> <nav aria-label="Admin Menu">
<%= link_to("Users", admin_users_url) if policy(User).index? %> <%= link_to("Users", admin_users_url) if policy(User).index? %>
<% #= link_to("Departments", admin_departments_url) if policy(Department).index? %> <% #= link_to("Departments", admin_departments_url) if policy(Department).index? %>
<%= link_to("Quizzes", admin_quizzes_url) if policy(Quiz).index? %> <%= link_to("Quizzes", admin_quizzes_url) if policy(Quiz).index? %>

View File

@ -1,23 +1,20 @@
<% <% content_for :title, "Skills Assessment Admin" %>
content_for :main_class, "intro_tpl"
content_for :title, "Skills Assessment Admin"
%>
<h1>Admin Login</h1> <h1>Admin Login</h1>
<%= form_for :auth, url: admin_login_path do |form| %> <%= form_for :auth, url: admin_login_path do |form| %>
<% if flash[:error].present? %> <% if flash[:error].present? %>
<div class="form-group"> <div>
Need a <%= link_to "password reset", admin_reset_request_path %>? Need a <%= link_to "password reset", admin_reset_request_path %>?
</div> </div>
<% end %> <% end %>
<div class="form-group"> <div>
<%= form.label :email %> <%= form.label :email %>
<%= form.email_field :email %> <%= form.email_field :email %>
</div> </div>
<div class="form-group"> <div>
<%= form.label :password %> <%= form.label :password %>
<%= form.password_field :password %> <%= form.password_field :password %>
</div> </div>

View File

@ -1,22 +1,18 @@
<% <% content_for :title, "Skills Assessment Admin" %>
content_for :main_class, "intro_tpl"
content_for :title, "Skills Assessment Admin"
%>
<h1>Password Reset</h1> <h1>Password Reset</h1>
<%= form_for :auth, url: admin_reset_password_path do |form| %> <%= form_for :auth, url: admin_reset_password_path do |form| %>
<%= hidden_field_tag :reset_token, params[:reset_token] %> <div>
<div class="form-group">
<%= form.label :password %> <%= form.label :password %>
<%= form.password_field :password %> <%= form.password_field :password %>
</div> </div>
<div class="form-group"> <div>
<%= form.label :password_confirmation %> <%= form.label :password_confirmation %>
<%= form.password_field :password_confirmation %> <%= form.password_field :password_confirmation %>
</div> </div>
<%= submit_tag "Reset Password" %> <%= submit_tag "Reset Password" %>
<%= hidden_field_tag :reset_token, params[:reset_token] %>
<% end %> <% end %>

View File

@ -1,12 +1,9 @@
<% <% content_for :title, "Skills Assessment Admin" %>
content_for :main_class, "intro_tpl"
content_for :title, "Skills Assessment Admin"
%>
<h1>Password Reset</h1> <h1>Password Reset</h1>
<%= form_for :auth, url: admin_send_reset_path do |form| %> <%= form_for :auth, url: admin_send_reset_path do |form| %>
<div class="form-group"> <div>
<%= form.label :email %> <%= form.label :email %>
<%= form.email_field :email %> <%= form.email_field :email %>
</div> </div>

View File

@ -1,27 +1,29 @@
<%= render partial: 'shared/form_model_errors', locals: { obj: candidate } %> <%= render partial: 'shared/form_model_errors', locals: { obj: candidate } %>
<%= form_for candidate, url: action, method: :post do |form| %> <%= form_for candidate, url: action, method: :post do |form| %>
<div class="form-group"> <div>
<%= form.label :name, "Candidate name" %> <%= form.label :name, "Candidate name" %>
<%= form.text_field :name %> <%= form.text_field :name %>
</div> </div>
<div class="form-group"> <div>
<%= form.label :email, "Candidate email" %> <%= form.label :email, "Candidate email" %>
<%= form.email_field :email %> <%= form.email_field :email %>
</div> </div>
<div class="form-group"> <div>
<%= form.label :experience, "Years of experience" %> <%= form.label :experience, "Years of experience" %>
<%= form.select :experience, experience_options(candidate.experience), include_blank: false %> <%= form.select :experience, experience_options(candidate.experience), include_blank: false %>
</div> </div>
<div class="form-group"> <div>
<%= form.label :project, "Client or project" %> <%= form.label :project, "Client or project" %>
<%= form.text_field :project %> <%= form.text_field :project %>
</div> </div>
<div class="form-group"> <div role="group" aria-labelledby="position-type">
<span id="position-type">Position Type</span>
<%= form.radio_button :position, 'full-time' %> <%= form.radio_button :position, 'full-time' %>
<%= form.label "position_full-time", "Full-time" %> <%= form.label "position_full-time", "Full-time" %>
@ -29,12 +31,12 @@
<%= form.label :position_contract, "Contract" %> <%= form.label :position_contract, "Contract" %>
</div> </div>
<div class="form-group"> <div>
<%= form.label :skill_needs, "Specific skill needs" %> <%= form.label :skill_needs, "Specific skill needs" %>
<%= form.text_field :skill_needs %> <%= form.text_field :skill_needs %>
</div> </div>
<div class="form-group"> <div>
<%= form.label :quiz_id, "Quiz" %> <%= form.label :quiz_id, "Quiz" %>
<%= form.select :quiz_id, quiz_options(quizzes, candidate.quiz_id), include_blank: (quizzes.size > 1) %> <%= form.select :quiz_id, quiz_options(quizzes, candidate.quiz_id), include_blank: (quizzes.size > 1) %>
</div> </div>

View File

@ -1,10 +1,7 @@
<% <% content_for :title, "Edit Candidate - Skills Assessment Admin" %>
content_for :title, "Edit Candidate - Skills Assessment Admin"
%>
<main class="intro_tpl"> <h1>Edit: <%= @candidate.name %></h1>
<h1>Edit: <%= @candidate.name %></h1>
<p><strong>Test ID: </strong><%= @candidate.test_hash %></p>
<%= render partial: 'form', locals: { action: admin_update_candidate_path(@candidate.id), candidate: @candidate, quizzes: @quizzes } %> <div><strong>Test ID: </strong><%= @candidate.test_hash %></div>
</main>
<%= render partial: 'form', locals: { action: admin_update_candidate_path(@candidate.id), candidate: @candidate, quizzes: @quizzes } %>

View File

@ -2,39 +2,39 @@
content_for :section_title, "Candidates" content_for :section_title, "Candidates"
content_for :title, "Candidates - Skills Assessment Admin" content_for :title, "Candidates - Skills Assessment Admin"
%> %>
<main class="summary_tpl">
<%= link_to(admin_new_candidate_path, { class: 'secondary-btn' }) do %>
<button>Create New Candidate</button>
<% end if policy(Candidate).create? %>
<table cellspacing="0" cellpadding="0"> <h1>Candidates</h1>
<%= link_to("Create New Candidate", admin_new_candidate_path, { class: "" }) if policy(Candidate).create? %>
<table cellspacing="0" cellpadding="0">
<tr>
<th><%= sortable "name", "Candidate" %></th>
<th><%= sortable "test_hash", "Test ID" %></th>
<th><%= sortable "email" %></th>
<th><%= sortable "experience" %></th>
<th>Progress</th>
<th><%= sortable "completed_at", "Completed" %></th>
<th><%= sortable "reminded" %></th>
<th>Interview?</th>
</tr>
<% @candidates.each do |candidate| %>
<tr> <tr>
<th><%= sortable "name", "Candidate" %></th> <td><%= link_to candidate.name, admin_edit_candidate_path(candidate.id) %></td>
<th><%= sortable "test_hash", "Test ID" %></th> <td><%= candidate.test_hash %></td>
<th><%= sortable "email" %></th> <td>
<th><%= sortable "experience" %></th> <%= mail_to(candidate.email) %>
<th>Progress</th> <br />
<th><%= sortable "completed_at", "Completed" %></th> <%= link_to "resend welcome email", admin_resend_welcome_path(candidate.id), remote: true, class: '', data: { id: 'ajax-action' } %>
<th><%= sortable "reminded" %></th> </td>
<th>Interview?</th> <td><%= candidate.experience %> years</td>
<td><%= candidate.status %></td>
<td><%= candidate.completed ? link_to("Submitted", admin_result_path(candidate.test_hash)) : "" %></td>
<td><%= raw candidate.reminded ? "&check;" : "&middot;" %></td>
<td><%= candidate.interview? %></td>
</tr> </tr>
<% end %>
</table>
<% @candidates.each do |candidate| %> <%= paginate @candidates %>
<tr>
<td><%= link_to candidate.name, admin_edit_candidate_path(candidate.id) %></td>
<td><%= candidate.test_hash %></td>
<td>
<%= mail_to(candidate.email) %>
<br />
<%= link_to "resend welcome email", admin_resend_welcome_path(candidate.id), remote: true, class: '', data: { id: 'ajax-action' } %>
</td>
<td><%= candidate.experience %> years</td>
<td><%= candidate.status %></td>
<td><%= candidate.completed ? link_to("Submitted", admin_result_path(candidate.test_hash)) : "" %></td>
<td><%= candidate.reminded ? "Yes" : "" %></td>
<td><%= candidate.interview? %></td>
</tr>
<% end %>
</table>
<%= paginate @candidates %>
</main>

View File

@ -1,10 +1,6 @@
<% <% content_for :title, "New Candidate - Skills Assessment Admin" %>
content_for :title, "New Candidate - Skills Assessment Admin"
%>
<main class="intro_tpl"> <h1>New Candidate</h1>
<h1>New Candidate</h1>
<%= render partial: 'form', locals: <%= render partial: 'form', locals:
{ action: admin_create_candidate_path, candidate: @candidate, quizzes: @quizzes } %> { action: admin_create_candidate_path, candidate: @candidate, quizzes: @quizzes } %>
</main>

View File

@ -3,24 +3,27 @@
content_for :title, "Profile - Skills Assessment Admin" content_for :title, "Profile - Skills Assessment Admin"
%> %>
<h1>Edit Profile</h1>
<%= render partial: 'shared/form_model_errors', locals: {obj: @user} %> <%= render partial: 'shared/form_model_errors', locals: {obj: @user} %>
<%= form_for @user, url: admin_profile_url, method: :post do |form| %> <%= form_for @user, url: admin_profile_url, method: :post do |form| %>
<div class="form-group"> <div>
<%= form.label :name, "Full Name" %> <%= form.label :name, "Full Name" %>
<%= form.text_field :name %> <%= form.text_field :name %>
</div> </div>
<div class="form-group"> <div>
<%= form.label :email, "eMail" %> <%= form.label :email, "eMail" %>
<%= form.email_field :email %> <%= form.email_field :email %>
</div> </div>
<div class="form-group"> <div>
<%= form.label :password, "New Password" %> <%= form.label :password, "New Password" %>
<%= form.password_field :password %> <%= form.password_field :password %>
</div> </div>
<div class="form-group"> <div>
<%= form.label :password_confirmation, "New Password Confirmation" %> <%= form.label :password_confirmation, "New Password Confirmation" %>
<%= form.password_field :password_confirmation %> <%= form.password_field :password_confirmation %>
</div> </div>

View File

@ -3,7 +3,10 @@
content_for :title, "Profile - Skills Assessment Admin" content_for :title, "Profile - Skills Assessment Admin"
%> %>
<p>Name: <%= current_user.name %></p> <h1>Profile</h1>
<p>email: <%= current_user.email %></p>
<p>Role: <%= current_user.role %></p> <div>Name: <%= current_user.name %></div>
<%= link_to('Edit', admin_edit_profile_path, { class: 'btn' }) %> <div>email: <%= current_user.email %></div>
<div>Role: <%= current_user.role %></div>
<%= link_to('Edit', admin_edit_profile_path, { class: "" }) %>

View File

@ -9,10 +9,8 @@
</ul> </ul>
<% unless (disable ||= false) %> <% unless (disable ||= false) %>
<div class="form-group"> <div> Add option </div>
<div class="btn tertiary-btn" data-id="input_option_adder"> Add option </div> <div>
<li style="display: none;"> <%= text_field_tag 'question[multi_choice][]', nil, { disabled: (disable ||= false), data: { last: nil } } %>
<%= text_field_tag 'question[multi_choice][]', nil, { disabled: (disable ||= false), data: { last: nil } } %>
</li>
</div> </div>
<% end %> <% end %>

View File

@ -12,10 +12,8 @@
</ul> </ul>
<% unless (disable ||= false) %> <% unless (disable ||= false) %>
<div class="form-group"> <div>Add option</div>
<div class="btn tertiary-btn" data-id="input_option_adder"> Add option </div> <div>
<li style="display: none;"> <%= text_field_tag 'question[multi_choice][]', nil, { disabled: (disable ||= false), data: { last: nil } } %>
<%= text_field_tag 'question[multi_choice][]', nil, { disabled: (disable ||= false), data: { last: nil } } %>
</li>
</div> </div>
<% end %> <% end %>

View File

@ -1,45 +1,44 @@
<%= render partial: 'shared/form_model_errors', locals: { obj: question} %> <%= render partial: 'shared/form_model_errors', locals: { obj: question} %>
<%= form_for question, url: action do |form| %> <%= form_for question, url: action do |form| %>
<div class="form-group"> <div>
<%= form.label :quiz_id, 'Quiz' %> <%= form.label :quiz_id, 'Quiz' %>
<%= form.select :quiz_id, options_for_select(@quizzes.map{ |q| [q.name, q.id] }, question.quiz_id), include_blank: (@quizzes.size > 1) %> <%= form.select :quiz_id, options_for_select(@quizzes.map{ |q| [q.name, q.id] }, question.quiz_id), include_blank: (@quizzes.size > 1) %>
</div> </div>
<div class="form-group"> <div>
<%= form.label :category, 'Category' %> <%= form.label :category, 'Category' %>
<%= form.text_field :category %> <%= form.text_field :category %>
</div> </div>
<div class="form-group"> <div>
<%= form.label :sort, 'Sort' %> <%= form.label :sort, 'Sort' %>
<%= form.text_field :sort %> <%= form.text_field :sort %>
</div> </div>
<div class="form-group"> <div>
<%= form.check_box :active %> <%= form.check_box :active %>
<%= form.label :active, 'Active' %> <%= form.label :active, 'Active' %>
</div> </div>
<div class="form-group"> <div>
<%= form.label :question, "Question" %> <%= form.label :question, "Question" %>
<%= form.text_area :question %> <%= form.text_area :question %>
</div> </div>
<div class="form-group"> <div>
<%= form.label :attachment, "Attachment URL" %> <%= form.label :attachment, "Attachment URL" %>
<%= form.text_field :attachment %> <%= form.text_field :attachment %>
<% if @question.attachment.present? %> <%= image_tag @question.attachment if @question.attachment.present? %>
<p><%= image_tag @question.attachment %></p>
<% end %>
</div> </div>
<div class="form-group"> <div>
<%= form.label :input_type, 'Input Type' %> <%= form.label :input_type, 'Input Type' %>
<%= form.select :input_type, question_type_options(question.input_type), { include_blank: false }, { data: { qid: question.id } } %> <%= form.select :input_type, question_type_options(question.input_type), { include_blank: false }, { data: { qid: question.id } } %>
</div> </div>
<div class="form-group" data-id="input-options-wrapper"> <div>
<%= fields_for @question do |fields| %> <%= fields_for @question do |fields| %>
<% partial = question.input_type.blank? ? 'admin/question/text' : "admin/question/#{question.input_type}" %> <% partial = question.input_type.blank? ? 'admin/question/text' : "admin/question/#{question.input_type}" %>
<%= render partial: partial, locals: {question: question, fields: fields } %> <%= render partial: partial, locals: {question: question, fields: fields } %>

View File

@ -9,10 +9,8 @@
</ul> </ul>
<% unless (disable ||= false) %> <% unless (disable ||= false) %>
<div class="form-group"> <div>Add option</div>
<div class="btn tertiary-btn" data-id="input_option_adder"> Add option </div> <div>
<li style="display: none;"> <%= text_field_tag 'question[multi_choice][]', nil, { disabled: (disable ||= false), data: { last: nil } } %>
<%= text_field_tag 'question[multi_choice][]', nil, { disabled: (disable ||= false), data: { last: nil } } %>
</li>
</div> </div>
<% end %> <% end %>

View File

@ -1,21 +1,17 @@
<strong>Radio Options</strong> <strong>Radio Options</strong>
<ul data-id="input_option_list"> <ul>
<% question.input_options.each do | option | %> <% question.input_options.each do | option | %>
<li> <li>
<%= text_field_tag 'question[multi_choice][]', option, { disabled: (disable ||= false), data: { last: option } } %> <%= text_field_tag 'question[multi_choice][]', option, { disabled: (disable ||= false), data: { last: option } } %>
</li> </li>
<% end %> <% end %>
</ul>
<ul>
<li>Other: <input type="text" disabled="disabled" /></li> <li>Other: <input type="text" disabled="disabled" /></li>
</ul> </ul>
<% unless (disable ||= false) %> <% unless (disable ||= false) %>
<div class="form-group"> <div>Add option</div>
<div class="btn tertiary-btn" data-id="input_option_adder"> Add option </div> <div>
<li style="display: none;"> <%= text_field_tag 'question[multi_choice][]', nil, { disabled: (disable ||= false), data: { last: nil } } %>
<%= text_field_tag 'question[multi_choice][]', nil, { disabled: (disable ||= false), data: { last: nil } } %>
</li>
</div> </div>
<% end %> <% end %>

View File

@ -14,8 +14,8 @@
<td><%= question.question %></td> <td><%= question.question %></td>
<td><%= question.input_type %></td> <td><%= question.input_type %></td>
<td><%= question.category %></td> <td><%= question.category %></td>
<td><%= question.active unless question.active? %></td> <td><%= raw question.active? ? "&check;" : "&cross;" %></td>
<td><%= link_to 'Edit', admin_edit_question_path(question.to_i), { class: 'btn tertiary-btn' } %></td> <td><%= link_to 'Edit', admin_edit_question_path(question.to_i), { class: "" } %></td>
</tr> </tr>
<% end %> <% end %>
</table> </table>

View File

@ -4,4 +4,5 @@
%> %>
<h1><%= @question.quiz.name %></h1> <h1><%= @question.quiz.name %></h1>
<%= render partial: 'form', locals: {question: @question, action: admin_update_question_path } %> <%= render partial: 'form', locals: {question: @question, action: admin_update_question_path } %>

View File

@ -3,9 +3,11 @@
content_for :title, "Questions - Skills Assessment Admin" content_for :title, "Questions - Skills Assessment Admin"
%> %>
<h1>Questions</h1>
<% quizzes = @questions.group_by{ |q| q.quiz.name } %> <% quizzes = @questions.group_by{ |q| q.quiz.name } %>
<% quizzes.each do |quiz, questions| %> <% quizzes.each do |quiz, questions| %>
<h1><%= quiz %></h1> <h1><%= quiz %></h1>
<%= render partial: 'admin/question/table_list', locals: { questions: questions } %> <%= render partial: 'admin/question/table_list', locals: { questions: questions } %>
<%= link_to('Edit Quiz', admin_quiz_path(questions.first.quiz.to_i), { class: 'btn' }) %> <%= link_to('Edit Quiz', admin_quiz_path(questions.first.quiz.to_i), { class: "" }) %>
<% end %> <% end %>

View File

@ -3,4 +3,6 @@
content_for :title, "New Question - Skills Assessment Admin" content_for :title, "New Question - Skills Assessment Admin"
%> %>
<h1>New Question</h1>
<%= render partial: 'form', locals: {question: @question, action: admin_create_question_path } %> <%= render partial: 'form', locals: {question: @question, action: admin_create_question_path } %>

View File

@ -3,39 +3,30 @@
content_for :title, "Question - Skills Assessment Admin" content_for :title, "Question - Skills Assessment Admin"
%> %>
<table cellspacing="0" cellpadding="0"> <h1><%= @question.quiz.name %></h1>
<tr>
<th>Category</th>
<td><%= @question.category %></td>
</tr>
<tr>
<th>Type</th>
<td><%= @question.input_type %></td>
</tr>
<tr>
<th>Sort</th>
<td><%= @question.sort %></td>
</tr>
<tr>
<th></th>
<td>
<%= check_box_tag 'question_active', nil, @question.active?, {disabled: true} %>
<%= label_tag 'question_active', 'Active' %>
</td>
</tr>
</table>
<strong>Question</strong> <h2>Category</h2>
<p><%= @question.question %></p> <div><%= @question.category %></div>
<% if @question.attachment.present? %> <h2>Type</h2>
<p><%= image_tag @question.attachment %></p> <div><%= @question.input_type %></div>
<% end %>
<h2>Sort</h2>
<div><%= @question.sort %></div>
<div>
<%= check_box_tag 'question_active', nil, @question.active?, {disabled: true} %>
<%= label_tag 'question_active', 'Active' %>
</div>
<h2>Question</h2>
<div><%= @question.question %></div>
<div><%= image_tag @question.attachment if @question.attachment.present? %></div>
<%= fields_for @question do |fields| %> <%= fields_for @question do |fields| %>
<%= render partial: "admin/question/#{@question.input_type}", locals: {question: @question, disable: true, fields: fields } %> <%= render partial: "admin/question/#{@question.input_type}", locals: {question: @question, disable: true, fields: fields } %>
<% end %> <% end %>
<%= link_to('Edit', admin_edit_question_path(@question.to_i), { class: 'btn' }) %> <%= link_to('Edit', admin_edit_question_path(@question.to_i), { class: "" }) %>
<%= link_to('View Quiz', admin_quiz_path(@question.quiz_id), { class: "" }) %>
<%= link_to('View Quiz', admin_quiz_path(@question.quiz_id), { class: 'btn' }) %>

View File

@ -1,16 +1,16 @@
<%= render partial: 'shared/form_model_errors', locals: { obj: quiz} %> <%= render partial: 'shared/form_model_errors', locals: { obj: quiz} %>
<%= form_for quiz, url: action do |form| %> <%= form_for quiz, url: action do |form| %>
<div class="form-group"> <div>
<%= form.label :name, "Quiz Description" %> <%= form.label :name, "Quiz Description" %>
<%= form.text_field :name %> <%= form.text_field :name %>
</div> </div>
<div class="form-group"> <div>
<%= form.label :dept, 'Department' %> <%= form.label :dept, 'Department' %>
<%= form.text_field :dept %> <%= form.text_field :dept %>
</div> </div>
<div class="form-group"> <div>
<%= form.label :unit, 'Unit' %> <%= form.label :unit, 'Unit' %>
<%= form.text_field :unit %> <%= form.text_field :unit %>
</div> </div>

View File

@ -13,7 +13,7 @@
<td><%= quiz.dept %></td> <td><%= quiz.dept %></td>
<td><%= quiz.unit %></td> <td><%= quiz.unit %></td>
<td><%= quiz.questions.count %></td> <td><%= quiz.questions.count %></td>
<td><%= link_to 'edit', admin_edit_quiz_path(quiz.to_i), { class: 'btn tertiary-btn' } if policy(quiz).edit? %></td> <td><%= link_to 'edit', admin_edit_quiz_path(quiz.to_i), { class: "" } if policy(quiz).edit? %></td>
</tr> </tr>
<% end %> <% end %>
</table> </table>

View File

@ -1,5 +1,8 @@
<% <%
content_for :section_title, "Edit: #{@quiz.name}" content_for :section_title, "Edit: #{@quiz.name}"
content_for :title, "Quizzes - Skills Assessment Admin"
%> %>
<h1>Edit: <%=@quiz.name %></h1>
<%= render partial: 'form', locals: { quiz: @quiz, action: admin_update_quiz_path } %> <%= render partial: 'form', locals: { quiz: @quiz, action: admin_update_quiz_path } %>

View File

@ -3,5 +3,7 @@
content_for :title, "Quizzes - Skills Assessment Admin" content_for :title, "Quizzes - Skills Assessment Admin"
%> %>
<h1>Quizzes</h1>
<%= render partial: 'admin/quiz/table_list', locals: { quizzes: @quizzes } %> <%= render partial: 'admin/quiz/table_list', locals: { quizzes: @quizzes } %>
<%= link_to('New Quiz', admin_new_quiz_path, { class: 'btn' }) %> <%= link_to('New Quiz', admin_new_quiz_path, { class: "" }) %>

View File

@ -3,4 +3,6 @@
content_for :title, "New Quiz - Skills Assessment Admin" content_for :title, "New Quiz - Skills Assessment Admin"
%> %>
<h1>New Quiz</h1>
<%= render partial: 'form', locals: { quiz: @quiz, action: admin_create_quiz_path } %> <%= render partial: 'form', locals: { quiz: @quiz, action: admin_create_quiz_path } %>

View File

@ -3,10 +3,11 @@
content_for :title, "Quiz - Skills Assessment Admin" content_for :title, "Quiz - Skills Assessment Admin"
%> %>
<p><%= @quiz.name %></p> <h1><%= @quiz.name %></h1>
<p><%= @quiz.dept %></p>
<p><%= @quiz.unit %></p> <div><%= @quiz.dept %></div>
<%= link_to('Edit', admin_edit_quiz_path(@quiz.to_i), { class: 'btn' }) %> <div><%= @quiz.unit %></div>
<%= link_to('Edit', admin_edit_quiz_path(@quiz.to_i), { class: "" }) %>
<%= render partial: 'admin/question/table_list', locals: { questions: @quiz.questions, disable: true } %> <%= render partial: 'admin/question/table_list', locals: { questions: @quiz.questions, disable: true } %>
<%= link_to('New Question', admin_new_question_path, { class: 'btn' }) %> <%= link_to('New Question', admin_new_question_path, { class: "" }) %>

View File

@ -1,23 +1,20 @@
<div class="comment-message"> <div>
<%= comment.message %> <%= comment.message %>
<% if policy(comment).update? %> <% if policy(comment).update? %>
<label class="comment-edit-btn" for="comment-<%= comment.id %>">edit</label> <label class="" for="comment-<%= comment.id %>">edit</label>
<% end %> <% end %>
<% if comment.edits? %> <% if comment.edits? %>
<div class="comment-edit-stamp">Updated <%= time_ago_in_words(comment.updated_at) %> ago</div> <div>Updated <%= local_time_ago(comment.updated_at) %></div>
<% else %> <% else %>
<div class="comment-edit-stamp"><%= time_ago_in_words(comment.created_at) %> ago</div> <div><%= local_time_ago(comment.created_at) %></div>
<% end %> <% end %>
</div> </div>
<div class="comment-author"><%= comment.user.name %></div> <div><%= comment.user.name %></div>
<% if policy(comment).update? %> <% if policy(comment).update? %>
<input type="checkbox" id="comment-<%= comment.id %>"> <input type="checkbox" id="comment-<%= comment.id %>">
<div class="comment-edit-form"> <%= render partial: 'comment_form', locals: {comment: comment, test_hash: comment.test_hash } %>
<%= render partial: 'comment_form', locals: {comment: comment, test_hash: comment.test_hash } %>
</div>
<% end %> <% end %>

View File

@ -1,7 +1,7 @@
<% if comment.id.nil? %> <% if comment.id.nil? %>
<%= form_for comment, url: admin_create_comment_path(test_hash: test_hash), method: :post do |form| %> <%= form_for comment, url: admin_create_comment_path(test_hash: test_hash), method: :post do |form| %>
<div class="form-group"> <div>
<%= form.label :message, "New Comment" %> <%= form.label :message, "New Comment" %>
<%= form.text_area :message %> <%= form.text_area :message %>
</div> </div>
@ -12,7 +12,7 @@
<% else %> <% else %>
<%= form_for comment, url: admin_update_comment_path(test_hash: test_hash, id: comment.id), method: :post do |form| %> <%= form_for comment, url: admin_update_comment_path(test_hash: test_hash, id: comment.id), method: :post do |form| %>
<div class="form-group"> <div>
<%= form.label :message, "Update Comment" %> <%= form.label :message, "Update Comment" %>
<%= form.text_area :message %> <%= form.text_area :message %>
</div> </div>

View File

@ -1,7 +1,5 @@
<% # TODO: This should be extracted into a decorator, or something. It is only a quick hack solution. %>
<% if current_user.acts_as_reviewer? %> <% if current_user.acts_as_reviewer? %>
<div class="review_meta__votes" data-id="vote-count"> <div data-id="vote-count">
<strong>Votes: </strong> <strong>Votes: </strong>
<% if @candidate.pending? && current_user.commented_on?(@candidate.test_hash) %> <% if @candidate.pending? && current_user.commented_on?(@candidate.test_hash) %>
@ -27,18 +25,20 @@
<% end %> <% end %>
<% if current_user.acts_as_manager? %> <% if current_user.acts_as_manager? %>
<div class="review_meta__vetos"> <div>
<%= form_tag admin_interview_path(test_hash: @candidate.test_hash) do %> <%= form_tag admin_interview_path(test_hash: @candidate.test_hash) do %>
<strong>Interview: </strong> <div role="group" aria-labelledby="interview-status">
<strong id="interview-status">Interview: </strong>
<%= radio_button_tag :review_status, :approved, checked = @candidate.approved? %> <%= radio_button_tag :review_status, :approved, checked = @candidate.approved? %>
<%= label_tag :review_status_approved, "Yes" %> <%= label_tag :review_status_approved, "Yes" %>
<%= radio_button_tag :review_status, :declined, checked = @candidate.declined? %> <%= radio_button_tag :review_status, :declined, checked = @candidate.declined? %>
<%= label_tag :review_status_declined, "No" %> <%= label_tag :review_status_declined, "No" %>
</div>
<div class="review-status-comments"> <div>
<span>Review comments for recruiter</span> <%= label_tag :review_comments, "Review comments for recruiter" %>
<%= text_area_tag :review_comments, @candidate.review_comments %> <%= text_area_tag :review_comments, @candidate.review_comments %>
<%= submit_tag 'Send Request' %> <%= submit_tag 'Send Request' %>
</div> </div>

View File

@ -2,27 +2,29 @@
content_for :section_title, "Completed Tests" content_for :section_title, "Completed Tests"
content_for :title, "Quiz Results - Skills Assessment Admin" content_for :title, "Quiz Results - Skills Assessment Admin"
%> %>
<main class="summary_tpl">
<table cellspacing="0" cellpadding="0">
<tr>
<th><%= sortable "test_hash", "Test ID" %></th>
<th><%= sortable "name" %></th>
<th><%= sortable "project", "Client/Project" %></th>
<th>Recruiter</th>
<th><%= sortable "completed_at", "Submitted on" %></th>
<th>Interview?</th>
</tr>
<% @candidates.each do |candidate| %> <h1>Results</h1>
<tr>
<td><%= link_to candidate.test_hash, admin_result_path(candidate.test_hash) %></td> <table cellspacing="0" cellpadding="0">
<td><%= candidate.name if !candidate.pending? %></td> <tr>
<td><%= candidate.project %></td> <th><%= sortable "test_hash", "Test ID" %></th>
<td><%= mail_to(candidate.recruiter.email) %></td> <th><%= sortable "name" %></th>
<td><%= candidate.completed_at.strftime('%D') unless candidate.completed_at.nil? %></td> <th><%= sortable "project", "Client/Project" %></th>
<td><%= candidate.interview? %></td> <th>Recruiter</th>
</tr> <th><%= sortable "completed_at", "Submitted on" %></th>
<% end %> <th>Interview?</th>
</table> </tr>
<%= paginate @candidates %>
</main> <% @candidates.each do |candidate| %>
<tr>
<td><%= link_to candidate.test_hash, admin_result_path(candidate.test_hash) %></td>
<td><%= candidate.name if !candidate.pending? %></td>
<td><%= candidate.project %></td>
<td><%= mail_to(candidate.recruiter.email) %></td>
<td><%= candidate.completed_at.strftime('%D') unless candidate.completed_at.nil? %></td>
<td><%= candidate.interview? %></td>
</tr>
<% end %>
</table>
<%= paginate @candidates %>

View File

@ -2,65 +2,48 @@
content_for :title, "Quiz Review - Skills Assessment Admin" content_for :title, "Quiz Review - Skills Assessment Admin"
%> %>
<div class="summary_tpl"> <div>
<div class="admin-review"> <h1>Quiz Review</h1>
<h2 class="prft-heading">Quiz Review</h2>
<div class="review_meta"> <div>
<div> <% unless @candidate.pending? %>
<% unless @candidate.pending? %> <strong>Name:</strong> <%= @candidate.name %><br />
<strong>Name:</strong> <%= @candidate.name %><br />
<% end %>
<strong>Test ID:</strong> <%= @candidate.test_hash %><br />
<strong>Years of Experience:</strong> <%= @candidate.experience %><br />
<strong>Client/Project:</strong> <%= @candidate.project %><br />
<strong>Position Type:</strong> <%= @candidate.position %><br />
<strong>Skill Needs:</strong> <%= @candidate.skill_needs %><br />
<strong>Recruiter Email:</strong> <%= mail_to @candidate.recruiter.name, @candidate.recruiter.email %><br />
</div>
</div>
<% @quiz.each do |question| %>
<%= form_for(:answer, url: '#never-post', html:{id: 'summary-form'}) do |form| %>
<article class="answer-sec <%= question.input_type %>-type" data-qid="<%= question.question_id %>">
<div class="question-heading">
<div class="question-title">
<h3><%= question.question %></h3>
</div>
</div>
<div class="answer-container">
<% if question.attachment.present? %>
<%= image_tag question.attachment %>
<% end %>
<fieldset disabled class="answer-block">
<%= render partial: "quiz/#{question.input_type}", locals: {question: question, answer: question.answer, form: form} %>
</fieldset>
</div>
</article>
<% end #form_tag %>
<% end #questions loop %>
<%= link_to(admin_results_path, { class: 'secondary-btn' }) do %>
<button>Back to list</button>
<% end %> <% end %>
<strong>Test ID:</strong> <%= @candidate.test_hash %><br />
<strong>Years of Experience:</strong> <%= @candidate.experience %><br />
<strong>Client/Project:</strong> <%= @candidate.project %><br />
<strong>Position Type:</strong> <%= @candidate.position %><br />
<strong>Skill Needs:</strong> <%= @candidate.skill_needs %><br />
<strong>Recruiter Email:</strong> <%= mail_to @candidate.recruiter.name, @candidate.recruiter.email %><br />
</div> </div>
<div class="review-comments"> <% @quiz.each do |question| %>
<div> <%= form_for(:answer, url: '#never-post', html:{id: "summary-#{question.to_i}"}) do |form| %>
<h2 class="prft-heading">Voting</h2> <h2><%= question.question %></h2>
<div class="review_meta"> <%= image_tag question.attachment if question.attachment.present? %>
<div><%= render partial: 'voting' %></div>
</div>
</div>
<div> <fieldset disabled>
<h2 id="comment-header" class="prft-heading">Comments</h2> <legend>Response</legend>
<% if policy(QuizComment).new? %> <%= render partial: "quiz/#{question.input_type}", locals: {question: question, answer: question.answer, form: form} %>
<%= render partial: 'comment_form', locals: {comment: @comment, test_hash: @candidate.test_hash } %> </fieldset>
<% end %> <% end %>
<%= render partial: 'comment', collection: @comments, locals: { test_hash: @candidate.test_hash } %> <% end %>
<a href="#comment-header">Back to top</a>
</div> <%= link_to("Back to list", admin_results_path, { class: "" }) %>
</div>
<div>
<div>
<h1>Voting</h1>
<div><%= render partial: 'voting' %></div>
</div>
<div>
<h1 id="comment-header">Comments</h1>
<% if policy(QuizComment).new? %>
<%= render partial: 'comment_form', locals: {comment: @comment, test_hash: @candidate.test_hash } %>
<% end %>
<%= render partial: 'comment', collection: @comments, locals: { test_hash: @candidate.test_hash } %>
<a href="#comment-header">Back to top</a>
</div> </div>
</div> </div>

View File

@ -1,33 +1,38 @@
<%= render partial: 'shared/form_model_errors', locals: { obj: user} %> <%= render partial: 'shared/form_model_errors', locals: { obj: user} %>
<%= form_for user, url: action do |form| %> <%= form_for user, url: action do |form| %>
<div class="form-group"> <div>
<%= form.label :name, "Full Name" %> <%= form.label :name, "Full Name" %>
<%= form.text_field :name %> <%= form.text_field :name %>
</div> </div>
<div class="form-group"> <div>
<%= form.label :email, "eMail" %> <%= form.label :email, "eMail" %>
<%= form.email_field :email %> <%= form.email_field :email %>
</div> </div>
<div class="form-group"> <div>
<%= form.label :role, "Role" %> <%= form.label :role, "Role" %>
<%= form.select :role, admin_role_options(user.role), include_blank: false %> <%= form.select :role, admin_role_options(user.role), include_blank: false %>
</div> </div>
<div class="form-group"> <div role="group" aria-labelledby="assigned-quiz-list">
<div><strong>Quiz Review List</strong></div> <div id="assigned-quiz-list"><strong>Quiz Review List</strong></div>
<p> <p>
Quizzes this user should be reviewing the results of.<br /> Quizzes this user should be reviewing the results of.<br />
Admins and Recruiters should not have any checked, unless they are expected Admins and Recruiters should not have any checked, unless they are expected
to participate in the technical review for that quiz. to participate in the technical review for that quiz.
</p> </p>
<%= form.collection_check_boxes(:quiz_ids, Quiz.all, :id, :name, {}, {class: 'checkbox'}) do | quiz | %>
<div class="form-group-multiples"> <%= hidden_field_tag('user[quiz_ids][]') %>
<%= quiz.check_box( checked: user.quizzes.include?(quiz.object)) %> <ul>
<%= quiz.label %> <%= form.collection_check_boxes(:quiz_ids, Quiz.all, :id, :name, {include_hidden: false}, {class: ""}) do | quiz | %>
</div> <li>
<% end %> <%= quiz.check_box( checked: user.quizzes.include?(quiz.object)) %>
<%= quiz.label %>
</li>
<% end %>
</ul>
</div> </div>
<%= form.submit %> <%= form.submit %>

View File

@ -11,7 +11,7 @@
<td><%= link_to user.name, admin_user_path(user.to_i) %></td> <td><%= link_to user.name, admin_user_path(user.to_i) %></td>
<td><%= mail_to(user.email) %></td> <td><%= mail_to(user.email) %></td>
<td><%= user.role %></td> <td><%= user.role %></td>
<td><%= link_to 'edit', admin_edit_user_path(user.to_i), { class: 'btn tertiary-btn' } if policy(user).edit? %></td> <td><%= link_to 'edit', admin_edit_user_path(user.to_i), { class: "" } if policy(user).edit? %></td>
</tr> </tr>
<% end %> <% end %>
</table> </table>

View File

@ -1,5 +1,8 @@
<% <%
content_for :section_title, "Edit: #{@user.name}" content_for :section_title, "Edit: #{@user.name}"
content_for :title, "Users - Skills Assessment Admin"
%> %>
<h1>Edit <%= @user.name %></h1>
<%= render partial: 'form', locals: {user: @user, action: admin_update_user_path } %> <%= render partial: 'form', locals: {user: @user, action: admin_update_user_path } %>

View File

@ -1,7 +1,10 @@
<% <%
content_for :section_title, "Users" content_for :section_title, "Users"
content_for :title, "Users - Skills Assessment Admin"
%> %>
<h1>Users</h1> <h1>Users</h1>
<%= render partial: 'admin/user/table_list', locals: { users: @users } %> <%= render partial: 'admin/user/table_list', locals: { users: @users } %>
<%= link_to('New User', admin_new_user_path, { class: 'btn' }) if policy(User).create? %>
<%= link_to('New User', admin_new_user_path, { class: "" }) if policy(User).create? %>

View File

@ -1,5 +1,8 @@
<% <%
content_for :section_title, "New User" content_for :section_title, "Users"
content_for :title, "Users - Skills Assessment Admin"
%> %>
<h1>New User</h1>
<%= render partial: 'form', locals: {user: @user, action: admin_create_user_path } %> <%= render partial: 'form', locals: {user: @user, action: admin_create_user_path } %>

View File

@ -1,16 +1,17 @@
<% <%
content_for :section_title, "#{@user.name}" content_for :section_title, "Users"
content_for :title, "Users - Skills Assessment Admin"
%> %>
<p><%= @user.name %></p> <h1><%= @user.name %></h1>
<p><%= mail_to(@user.email) %></p> <div><%= mail_to(@user.email) %></div>
<p><%= @user.role %></p> <div><%= @user.role %></div>
<p>Quizzes:</p> <div>Quizzes:</div>
<ul> <ul>
<% @user.quizzes.each do |quiz| %> <% @user.quizzes.each do |quiz| %>
<li><%= quiz.name %></li> <li><%= quiz.name %></li>
<% end %> <% end %>
</ul> </ul>
<%= link_to('Edit', admin_edit_user_path(@user.to_i), { class: 'btn' }) %> <%= link_to('Edit', admin_edit_user_path(@user.to_i), { class: "" }) %>

View File

@ -1,20 +1,14 @@
<% content_for :title, "Skills Assessment" %> <% content_for :title, "Skills Assessment" %>
<main class="intro_tpl"> <h1>Let's Get Started</h1>
<h1 class="prft-heading">Let's Get Started</h1>
<p>
Hey there! Give us your Test ID, and we'll get you started.
</p>
<%= form_tag(validate_candidate_path) do %> <p>Hey there! Give us your Test ID, and we'll get you started.</p>
<div class="form-group">
<label for="userid">What's your Test ID?</label>
<input type="text" id="test_id" name="test_id" required/>
<% if flash[:error].present? %> <%= form_tag(validate_candidate_path) do %>
<div class="error"><%= flash[:error] %></div> <%= render partial: "shared/generic_flash" %>
<% end %>
</div> <label for="test_id">What's your Test ID?</label>
<button type="submit">Log in</button> <input type="text" id="test_id" name="test_id" required />
<% end %>
</main> <button type="submit">Log in</button>
<% end %>

View File

@ -1,11 +1,10 @@
<% content_for :title, "Skills Assessment" %> <% content_for :title, "Skills Assessment" %>
<main class="intro_tpl"> <h1>Oops!</h1>
<h1 class="prft-heading">Oops!</h1>
<p>
Looks like you hit the browser's Back button. You can't go backwards in the test,
but you'll have a chance at the end to review your answers and make changes.
</p>
<a href="<%= question_path %>"><button>Continue Test</button></a> <p>
</main> Looks like you hit the browser's Back button. You can't go backwards in the test,
but you'll have a chance at the end to review your answers and make changes.
</p>
<%= link_to "Continue Test", question_path, {class: ""} %>

View File

@ -1,11 +1,8 @@
<% content_for :title, "Saved! - Skills Assessment" %> <% content_for :title, "Saved! - Skills Assessment" %>
<main class="styleguide_tpl">
<p>
Your test results have been saved. You can visit again later with your Test ID to complete
the test starting from where you left off.
</p>
<div class="button-wrap"> <p>
<a class="btn primary-btn" href="<%= question_path %>">Return to test</a> Your test results have been saved. You can visit again later with your Test ID to complete
</div> the test starting from where you left off.
</main> </p>
<%= link_to "Return to test", question_path, {class: ""} %>

View File

@ -1,8 +1,8 @@
<% content_for :title, "Thank You - Skills Assessment" %> <% content_for :title, "Thank You - Skills Assessment" %>
<main class="styleguide_tpl">
<h1>Thank you!</h1> <h1>Thank you!</h1>
<p>
Your answers have been submitted. We will review and your recruiter <p>
will be in touch. Your answers have been submitted.
</p> We will review and your recruiter will be in touch.
</main> </p>

Some files were not shown because too many files have changed in this diff Show More