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:
browser: true
browser: true,
jquery: true
extends: 'eslint:recommended'
settings:
ecmascript: 6
plugins:
- 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:
- error
- warn
- 2
linebreak-style:
- error
- unix
no-trailing-spaces:
no-console:
# console.error and console.warn are ok, but let's
# keep console.log out of production code.
- warn
- allow:
- warn
- error
no-mixed-spaces-and-tabs:
- warn
- smart-tabs
no-trailing-spaces: warn
no-underscore-dangle: warn
quotes: off
semi:
- error
- always
semi: warn

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 'pundit'
gem 'sass-rails', '~> 5.0'
gem 'autoprefixer-rails', '~> 6'
gem 'settingslogic', '~> 2.0.9'
gem 'turbolinks', '~> 5'
gem 'uglifier', '>= 1.3.0'
# assets
gem 'bourbon'
gem 'neat'
gem 'local_time'
# Foundation for Emails
gem 'inky-rb', require: 'inky'

View File

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

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

View File

@ -41,11 +41,11 @@
*/
var fillOutLines = function(codeLines, h, lineNo){
while ( (codeLines.height() - h ) <= 0 ){
if ( lineNo == opts.selectedLine )
if ( lineNo == opts.selectedLine ) {
codeLines.append("<div class='lineno lineselect'>" + lineNo + "</div>");
else
} else {
codeLines.append("<div class='lineno'>" + lineNo + "</div>");
}
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 'neat';
@import 'settings/variables';
@import 'settings/fonts';
@import 'settings/mixins';
@import 'core/fonts';
@import 'core/variables';
@import 'core/animations';
/*= require normalize-css/normalize */
@import 'settings/reset';
@import 'atoms/**/*';
@import 'molecules/**/*';
// @import 'organisms/**/*';
@import 'templates/**/*';
@import 'pages/**/*';
@import 'generic/typography';
@import 'elements/body';
@import 'elements/progressbar';
@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 {
text-decoration: underline;
color: $success-color;
}
.email-container {
.email-heading th {
font-family: 'Lato', Helvetica Neue, Helvetica, Ariel, sans-serif;
.prft-slash {
font-size: 100px;
font-weight: 200;
color: $success-color;
vertical-align: middle;
}
.email-title {
text-transform: uppercase;
font-weight: 700;
font-size:18px;
vertical-align: sub;
.email-heading {
th {
font-family: 'Lato', Helvetica Neue, Helvetica, Ariel, sans-serif;
.prft-slash {
vertical-align: middle;
color: $success-color;
font-size: 100px;
font-weight: 200;
}
.email-title {
vertical-align: sub;
text-transform: uppercase;
font-size: 18px;
font-weight: 700;
}
}
}
.email-body * {
font-family: 'Lato', Helvetica Neue, Helvetica, Ariel, sans-serif;
font-size: 16px;
line-height: 1.5em;
padding-bottom: 20px;
font-weight:300;
word-break: break-word;
strong {
font-weight:bold;
.email-body {
* {
padding-bottom: 20px;
line-height: 1.5em;
font-family: 'Lato', Helvetica Neue, Helvetica, Ariel, sans-serif;
font-size: 16px;
font-weight: 300;
word-break: break-word;
strong {
font-weight: bold;
}
}
}
.email-copyright {
vertical-align: bottom;
color: $dark-grey;
font-family: 'Lato', Helvetica Neue, Helvetica, Ariel, sans-serif;
font-size: 10px;
color: #909090;
vertical-align: bottom;
}
.email-logo {
text-align: right;
vertical-align: bottom;
text-align: right;
}
.email-bg {
background:#fef035 !important;
background-color:#fef035 !important;
background: $accent-color-2 !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;
$body-font-family: inherit;
$body-background: #ffffff;
$body-background: #fff;

View File

@ -1,18 +1,21 @@
@import 'foundation-emails/scss/util/util',
'foundation-emails/scss/global',
@import '../settings/variables';
'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';

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?
return 'yes' if approved?
'no' if declined?
return 'no' if declined?
'-'
end
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("Departments", admin_departments_url) if policy(Department).index? %>
<%= link_to("Quizzes", admin_quizzes_url) if policy(Quiz).index? %>

View File

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

View File

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

View File

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

View File

@ -1,27 +1,29 @@
<%= render partial: 'shared/form_model_errors', locals: { obj: candidate } %>
<%= form_for candidate, url: action, method: :post do |form| %>
<div class="form-group">
<div>
<%= form.label :name, "Candidate name" %>
<%= form.text_field :name %>
</div>
<div class="form-group">
<div>
<%= form.label :email, "Candidate email" %>
<%= form.email_field :email %>
</div>
<div class="form-group">
<div>
<%= form.label :experience, "Years of experience" %>
<%= form.select :experience, experience_options(candidate.experience), include_blank: false %>
</div>
<div class="form-group">
<div>
<%= form.label :project, "Client or project" %>
<%= form.text_field :project %>
</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.label "position_full-time", "Full-time" %>
@ -29,12 +31,12 @@
<%= form.label :position_contract, "Contract" %>
</div>
<div class="form-group">
<div>
<%= form.label :skill_needs, "Specific skill needs" %>
<%= form.text_field :skill_needs %>
</div>
<div class="form-group">
<div>
<%= form.label :quiz_id, "Quiz" %>
<%= form.select :quiz_id, quiz_options(quizzes, candidate.quiz_id), include_blank: (quizzes.size > 1) %>
</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>
<p><strong>Test ID: </strong><%= @candidate.test_hash %></p>
<h1>Edit: <%= @candidate.name %></h1>
<%= render partial: 'form', locals: { action: admin_update_candidate_path(@candidate.id), candidate: @candidate, quizzes: @quizzes } %>
</main>
<div><strong>Test ID: </strong><%= @candidate.test_hash %></div>
<%= 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 :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>
<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>
<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><%= raw candidate.reminded ? "&check;" : "&middot;" %></td>
<td><%= candidate.interview? %></td>
</tr>
<% end %>
</table>
<% @candidates.each do |candidate| %>
<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>
<%= paginate @candidates %>

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:
{ action: admin_create_candidate_path, candidate: @candidate, quizzes: @quizzes } %>
</main>
<%= render partial: 'form', locals:
{ action: admin_create_candidate_path, candidate: @candidate, quizzes: @quizzes } %>

View File

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

View File

@ -3,7 +3,10 @@
content_for :title, "Profile - Skills Assessment Admin"
%>
<p>Name: <%= current_user.name %></p>
<p>email: <%= current_user.email %></p>
<p>Role: <%= current_user.role %></p>
<%= link_to('Edit', admin_edit_profile_path, { class: 'btn' }) %>
<h1>Profile</h1>
<div>Name: <%= current_user.name %></div>
<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>
<% unless (disable ||= false) %>
<div class="form-group">
<div class="btn tertiary-btn" data-id="input_option_adder"> Add option </div>
<li style="display: none;">
<%= text_field_tag 'question[multi_choice][]', nil, { disabled: (disable ||= false), data: { last: nil } } %>
</li>
<div> Add option </div>
<div>
<%= text_field_tag 'question[multi_choice][]', nil, { disabled: (disable ||= false), data: { last: nil } } %>
</div>
<% end %>

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -3,9 +3,11 @@
content_for :title, "Questions - Skills Assessment Admin"
%>
<h1>Questions</h1>
<% quizzes = @questions.group_by{ |q| q.quiz.name } %>
<% quizzes.each do |quiz, questions| %>
<h1><%= quiz %></h1>
<%= 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 %>

View File

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

View File

@ -3,39 +3,30 @@
content_for :title, "Question - Skills Assessment Admin"
%>
<table cellspacing="0" cellpadding="0">
<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>
<h1><%= @question.quiz.name %></h1>
<strong>Question</strong>
<p><%= @question.question %></p>
<h2>Category</h2>
<div><%= @question.category %></div>
<% if @question.attachment.present? %>
<p><%= image_tag @question.attachment %></p>
<% end %>
<h2>Type</h2>
<div><%= @question.input_type %></div>
<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| %>
<%= render partial: "admin/question/#{@question.input_type}", locals: {question: @question, disable: true, fields: fields } %>
<% end %>
<%= link_to('Edit', admin_edit_question_path(@question.to_i), { class: 'btn' }) %>
<%= link_to('View Quiz', admin_quiz_path(@question.quiz_id), { class: 'btn' }) %>
<%= link_to('Edit', admin_edit_question_path(@question.to_i), { class: "" }) %>
<%= link_to('View Quiz', admin_quiz_path(@question.quiz_id), { class: "" }) %>

View File

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

View File

@ -13,7 +13,7 @@
<td><%= quiz.dept %></td>
<td><%= quiz.unit %></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>
<% end %>
</table>

View File

@ -1,5 +1,8 @@
<%
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 } %>

View File

@ -3,5 +3,7 @@
content_for :title, "Quizzes - Skills Assessment Admin"
%>
<h1>Quizzes</h1>
<%= 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"
%>
<h1>New Quiz</h1>
<%= render partial: 'form', locals: { quiz: @quiz, action: admin_create_quiz_path } %>

View File

@ -3,10 +3,11 @@
content_for :title, "Quiz - Skills Assessment Admin"
%>
<p><%= @quiz.name %></p>
<p><%= @quiz.dept %></p>
<p><%= @quiz.unit %></p>
<%= link_to('Edit', admin_edit_quiz_path(@quiz.to_i), { class: 'btn' }) %>
<h1><%= @quiz.name %></h1>
<div><%= @quiz.dept %></div>
<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 } %>
<%= 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 %>
<% if policy(comment).update? %>
<label class="comment-edit-btn" for="comment-<%= comment.id %>">edit</label>
<label class="" for="comment-<%= comment.id %>">edit</label>
<% end %>
<% 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 %>
<div class="comment-edit-stamp"><%= time_ago_in_words(comment.created_at) %> ago</div>
<div><%= local_time_ago(comment.created_at) %></div>
<% end %>
</div>
<div class="comment-author"><%= comment.user.name %></div>
<div><%= comment.user.name %></div>
<% if policy(comment).update? %>
<input type="checkbox" id="comment-<%= comment.id %>">
<div class="comment-edit-form">
<%= render partial: 'comment_form', locals: {comment: comment, test_hash: comment.test_hash } %>
</div>
<%= render partial: 'comment_form', locals: {comment: comment, test_hash: comment.test_hash } %>
<% end %>

View File

@ -1,7 +1,7 @@
<% if comment.id.nil? %>
<%= 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.text_area :message %>
</div>
@ -12,7 +12,7 @@
<% else %>
<%= 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.text_area :message %>
</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? %>
<div class="review_meta__votes" data-id="vote-count">
<div data-id="vote-count">
<strong>Votes: </strong>
<% if @candidate.pending? && current_user.commented_on?(@candidate.test_hash) %>
@ -27,18 +25,20 @@
<% end %>
<% if current_user.acts_as_manager? %>
<div class="review_meta__vetos">
<div>
<%= 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? %>
<%= label_tag :review_status_approved, "Yes" %>
<%= radio_button_tag :review_status, :approved, checked = @candidate.approved? %>
<%= label_tag :review_status_approved, "Yes" %>
<%= radio_button_tag :review_status, :declined, checked = @candidate.declined? %>
<%= label_tag :review_status_declined, "No" %>
<%= radio_button_tag :review_status, :declined, checked = @candidate.declined? %>
<%= label_tag :review_status_declined, "No" %>
</div>
<div class="review-status-comments">
<span>Review comments for recruiter</span>
<div>
<%= label_tag :review_comments, "Review comments for recruiter" %>
<%= text_area_tag :review_comments, @candidate.review_comments %>
<%= submit_tag 'Send Request' %>
</div>

View File

@ -2,27 +2,29 @@
content_for :section_title, "Completed Tests"
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| %>
<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 %>
</main>
<h1>Results</h1>
<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| %>
<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"
%>
<div class="summary_tpl">
<div class="admin-review">
<h2 class="prft-heading">Quiz Review</h2>
<div>
<h1>Quiz Review</h1>
<div class="review_meta">
<div>
<% unless @candidate.pending? %>
<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>
<div>
<% unless @candidate.pending? %>
<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 class="review-comments">
<div>
<h2 class="prft-heading">Voting</h2>
<div class="review_meta">
<div><%= render partial: 'voting' %></div>
</div>
</div>
<% @quiz.each do |question| %>
<%= form_for(:answer, url: '#never-post', html:{id: "summary-#{question.to_i}"}) do |form| %>
<h2><%= question.question %></h2>
<%= image_tag question.attachment if question.attachment.present? %>
<div>
<h2 id="comment-header" class="prft-heading">Comments</h2>
<% 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>
<fieldset disabled>
<legend>Response</legend>
<%= render partial: "quiz/#{question.input_type}", locals: {question: question, answer: question.answer, form: form} %>
</fieldset>
<% end %>
<% end %>
<%= 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>

View File

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

View File

@ -11,7 +11,7 @@
<td><%= link_to user.name, admin_user_path(user.to_i) %></td>
<td><%= mail_to(user.email) %></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>
<% end %>
</table>

View File

@ -1,5 +1,8 @@
<%
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 } %>

View File

@ -1,7 +1,10 @@
<%
content_for :section_title, "Users"
content_for :title, "Users - Skills Assessment Admin"
%>
<h1>Users</h1>
<%= 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 } %>

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>
<p><%= mail_to(@user.email) %></p>
<p><%= @user.role %></p>
<h1><%= @user.name %></h1>
<div><%= mail_to(@user.email) %></div>
<div><%= @user.role %></div>
<p>Quizzes:</p>
<div>Quizzes:</div>
<ul>
<% @user.quizzes.each do |quiz| %>
<li><%= quiz.name %></li>
<% end %>
</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" %>
<main class="intro_tpl">
<h1 class="prft-heading">Let's Get Started</h1>
<p>
Hey there! Give us your Test ID, and we'll get you started.
</p>
<h1>Let's Get Started</h1>
<%= form_tag(validate_candidate_path) do %>
<div class="form-group">
<label for="userid">What's your Test ID?</label>
<input type="text" id="test_id" name="test_id" required/>
<p>Hey there! Give us your Test ID, and we'll get you started.</p>
<% if flash[:error].present? %>
<div class="error"><%= flash[:error] %></div>
<% end %>
</div>
<button type="submit">Log in</button>
<% end %>
</main>
<%= form_tag(validate_candidate_path) do %>
<%= render partial: "shared/generic_flash" %>
<label for="test_id">What's your Test ID?</label>
<input type="text" id="test_id" name="test_id" required />
<button type="submit">Log in</button>
<% end %>

View File

@ -1,11 +1,10 @@
<% content_for :title, "Skills Assessment" %>
<main class="intro_tpl">
<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>
<h1>Oops!</h1>
<a href="<%= question_path %>"><button>Continue Test</button></a>
</main>
<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>
<%= link_to "Continue Test", question_path, {class: ""} %>

View File

@ -1,11 +1,8 @@
<% 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">
<a class="btn primary-btn" href="<%= question_path %>">Return to test</a>
</div>
</main>
<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>
<%= link_to "Return to test", question_path, {class: ""} %>

View File

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

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