add bower

This commit is contained in:
sarah garcin
2015-04-27 14:50:11 +02:00
parent d69e29e3be
commit 9dfbaeb05a
336 changed files with 69324 additions and 0 deletions

View File

@@ -0,0 +1,33 @@
{
"name": "foundation",
"version": "5.5.1",
"main": [
"css/foundation.css",
"css/foundation.css.map",
"js/foundation.js"
],
"ignore": [],
"dependencies": {
"jquery": ">= 2.1.0",
"modernizr": ">= 2.7.2",
"fastclick": ">=0.6.11",
"jquery.cookie": "~1.4.0",
"jquery-placeholder": "~2.0.7"
},
"devDependencies": {
"jquery.autocomplete": "devbridge/jQuery-Autocomplete#1.2.9",
"lodash": "~2.4.1"
},
"private": true,
"homepage": "https://github.com/zurb/bower-foundation",
"_release": "5.5.1",
"_resolution": {
"type": "version",
"tag": "5.5.1",
"commit": "bf07a7551bc3e599404d9cb2eb2251a95c1ea782"
},
"_source": "git://github.com/zurb/bower-foundation.git",
"_target": "~5.5.1",
"_originalSource": "foundation",
"_direct": true
}

View File

@@ -0,0 +1,23 @@
{
"name": "foundation",
"version": "5.5.1",
"main": [
"css/foundation.css",
"css/foundation.css.map",
"js/foundation.js"
],
"ignore": [
],
"dependencies": {
"jquery": ">= 2.1.0",
"modernizr": ">= 2.7.2",
"fastclick": ">=0.6.11",
"jquery.cookie": "~1.4.0",
"jquery-placeholder": "~2.0.7"
},
"devDependencies": {
"jquery.autocomplete": "devbridge/jQuery-Autocomplete#1.2.9",
"lodash": "~2.4.1"
},
"private": true
}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,359 @@
/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
/**
* 1. Set default font family to sans-serif.
* 2. Prevent iOS text size adjust after orientation change, without disabling
* user zoom.
*/
html {
font-family: sans-serif;
/* 1 */
-ms-text-size-adjust: 100%;
/* 2 */
-webkit-text-size-adjust: 100%;
/* 2 */ }
/**
* Remove default margin.
*/
body {
margin: 0; }
/* HTML5 display definitions
========================================================================== */
/**
* Correct `block` display not defined for any HTML5 element in IE 8/9.
* Correct `block` display not defined for `details` or `summary` in IE 10/11
* and Firefox.
* Correct `block` display not defined for `main` in IE 11.
*/
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
main,
menu,
nav,
section,
summary {
display: block; }
/**
* 1. Correct `inline-block` display not defined in IE 8/9.
* 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
*/
audio,
canvas,
progress,
video {
display: inline-block;
/* 1 */
vertical-align: baseline;
/* 2 */ }
/**
* Prevent modern browsers from displaying `audio` without controls.
* Remove excess height in iOS 5 devices.
*/
audio:not([controls]) {
display: none;
height: 0; }
/**
* Address `[hidden]` styling not present in IE 8/9/10.
* Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
*/
[hidden],
template {
display: none; }
/* Links
========================================================================== */
/**
* Remove the gray background color from active links in IE 10.
*/
a {
background-color: transparent; }
/**
* Improve readability when focused and also mouse hovered in all browsers.
*/
a:active,
a:hover {
outline: 0; }
/* Text-level semantics
========================================================================== */
/**
* Address styling not present in IE 8/9/10/11, Safari, and Chrome.
*/
abbr[title] {
border-bottom: 1px dotted; }
/**
* Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
*/
b,
strong {
font-weight: bold; }
/**
* Address styling not present in Safari and Chrome.
*/
dfn {
font-style: italic; }
/**
* Address variable `h1` font-size and margin within `section` and `article`
* contexts in Firefox 4+, Safari, and Chrome.
*/
h1 {
font-size: 2em;
margin: 0.67em 0; }
/**
* Address styling not present in IE 8/9.
*/
mark {
background: #ff0;
color: #000; }
/**
* Address inconsistent and variable font size in all browsers.
*/
small {
font-size: 80%; }
/**
* Prevent `sub` and `sup` affecting `line-height` in all browsers.
*/
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline; }
sup {
top: -0.5em; }
sub {
bottom: -0.25em; }
/* Embedded content
========================================================================== */
/**
* Remove border when inside `a` element in IE 8/9/10.
*/
img {
border: 0; }
/**
* Correct overflow not hidden in IE 9/10/11.
*/
svg:not(:root) {
overflow: hidden; }
/* Grouping content
========================================================================== */
/**
* Address margin not present in IE 8/9 and Safari.
*/
figure {
margin: 1em 40px; }
/**
* Address differences between Firefox and other browsers.
*/
hr {
-moz-box-sizing: content-box;
box-sizing: content-box;
height: 0; }
/**
* Contain overflow in all browsers.
*/
pre {
overflow: auto; }
/**
* Address odd `em`-unit font size rendering in all browsers.
*/
code,
kbd,
pre,
samp {
font-family: monospace, monospace;
font-size: 1em; }
/* Forms
========================================================================== */
/**
* Known limitation: by default, Chrome and Safari on OS X allow very limited
* styling of `select`, unless a `border` property is set.
*/
/**
* 1. Correct color not being inherited.
* Known issue: affects color of disabled elements.
* 2. Correct font properties not being inherited.
* 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
*/
button,
input,
optgroup,
select,
textarea {
color: inherit;
/* 1 */
font: inherit;
/* 2 */
margin: 0;
/* 3 */ }
/**
* Address `overflow` set to `hidden` in IE 8/9/10/11.
*/
button {
overflow: visible; }
/**
* Address inconsistent `text-transform` inheritance for `button` and `select`.
* All other form control elements do not inherit `text-transform` values.
* Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
* Correct `select` style inheritance in Firefox.
*/
button,
select {
text-transform: none; }
/**
* 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
* and `video` controls.
* 2. Correct inability to style clickable `input` types in iOS.
* 3. Improve usability and consistency of cursor style between image-type
* `input` and others.
*/
button,
html input[type="button"],
input[type="reset"],
input[type="submit"] {
-webkit-appearance: button;
/* 2 */
cursor: pointer;
/* 3 */ }
/**
* Re-set default cursor for disabled elements.
*/
button[disabled],
html input[disabled] {
cursor: default; }
/**
* Remove inner padding and border in Firefox 4+.
*/
button::-moz-focus-inner,
input::-moz-focus-inner {
border: 0;
padding: 0; }
/**
* Address Firefox 4+ setting `line-height` on `input` using `!important` in
* the UA stylesheet.
*/
input {
line-height: normal; }
/**
* It's recommended that you don't attempt to style these elements.
* Firefox's implementation doesn't respect box-sizing, padding, or width.
*
* 1. Address box sizing set to `content-box` in IE 8/9/10.
* 2. Remove excess padding in IE 8/9/10.
*/
input[type="checkbox"],
input[type="radio"] {
box-sizing: border-box;
/* 1 */
padding: 0;
/* 2 */ }
/**
* Fix the cursor style for Chrome's increment/decrement buttons. For certain
* `font-size` values of the `input`, it causes the cursor style of the
* decrement button to change from `default` to `text`.
*/
input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button {
height: auto; }
/**
* 1. Address `appearance` set to `searchfield` in Safari and Chrome.
* 2. Address `box-sizing` set to `border-box` in Safari and Chrome
* (include `-moz` to future-proof).
*/
input[type="search"] {
-webkit-appearance: textfield;
/* 1 */
-moz-box-sizing: content-box;
-webkit-box-sizing: content-box;
/* 2 */
box-sizing: content-box; }
/**
* Remove inner padding and search cancel button in Safari and Chrome on OS X.
* Safari (but not Chrome) clips the cancel button when the search input has
* padding (and `textfield` appearance).
*/
input[type="search"]::-webkit-search-cancel-button,
input[type="search"]::-webkit-search-decoration {
-webkit-appearance: none; }
/**
* Define consistent border, margin, and padding.
*/
fieldset {
border: 1px solid #c0c0c0;
margin: 0 2px;
padding: 0.35em 0.625em 0.75em; }
/**
* 1. Correct `color` not being inherited in IE 8/9/10/11.
* 2. Remove padding so people aren't caught out if they zero out fieldsets.
*/
legend {
border: 0;
/* 1 */
padding: 0;
/* 2 */ }
/**
* Remove default vertical scrollbar in IE 8/9/10/11.
*/
textarea {
overflow: auto; }
/**
* Don't inherit the `font-weight` (applied by a rule above).
* NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
*/
optgroup {
font-weight: bold; }
/* Tables
========================================================================== */
/**
* Remove most spacing between table cells.
*/
table {
border-collapse: collapse;
border-spacing: 0; }
td,
th {
padding: 0; }
/*# sourceMappingURL=normalize.css.map */

View File

@@ -0,0 +1,7 @@
{
"version": 3,
"mappings": ";;;;;;AAQA,IAAK;EACH,WAAW,EAAE,UAAU;;EACvB,oBAAoB,EAAE,IAAI;;EAC1B,wBAAwB,EAAE,IAAI;;;;;;AAOhC,IAAK;EACH,MAAM,EAAE,CAAC;;;;;;;;;;AAaX;;;;;;;;;;;;OAYQ;EACN,OAAO,EAAE,KAAK;;;;;;AAQhB;;;KAGM;EACJ,OAAO,EAAE,YAAY;;EACrB,cAAc,EAAE,QAAQ;;;;;;;AAQ1B,qBAAsB;EACpB,OAAO,EAAE,IAAI;EACb,MAAM,EAAE,CAAC;;;;;;AAQX;QACS;EACP,OAAO,EAAE,IAAI;;;;;;;AAUf,CAAE;EACA,gBAAgB,EAAE,WAAW;;;;;AAO/B;OACQ;EACN,OAAO,EAAE,CAAC;;;;;;;AAUZ,WAAY;EACV,aAAa,EAAE,UAAU;;;;;AAO3B;MACO;EACL,WAAW,EAAE,IAAI;;;;;AAOnB,GAAI;EACF,UAAU,EAAE,MAAM;;;;;;AAQpB,EAAG;EACD,SAAS,EAAE,GAAG;EACd,MAAM,EAAE,QAAQ;;;;;AAOlB,IAAK;EACH,UAAU,EAAE,IAAI;EAChB,KAAK,EAAE,IAAI;;;;;AAOb,KAAM;EACJ,SAAS,EAAE,GAAG;;;;;AAOhB;GACI;EACF,SAAS,EAAE,GAAG;EACd,WAAW,EAAE,CAAC;EACd,QAAQ,EAAE,QAAQ;EAClB,cAAc,EAAE,QAAQ;;AAG1B,GAAI;EACF,GAAG,EAAE,MAAM;;AAGb,GAAI;EACF,MAAM,EAAE,OAAO;;;;;;;AAUjB,GAAI;EACF,MAAM,EAAE,CAAC;;;;;AAOX,cAAe;EACb,QAAQ,EAAE,MAAM;;;;;;;AAUlB,MAAO;EACL,MAAM,EAAE,QAAQ;;;;;AAOlB,EAAG;EACD,eAAe,EAAE,WAAW;EAC5B,UAAU,EAAE,WAAW;EACvB,MAAM,EAAE,CAAC;;;;;AAOX,GAAI;EACF,QAAQ,EAAE,IAAI;;;;;AAOhB;;;IAGK;EACH,WAAW,EAAE,oBAAoB;EACjC,SAAS,EAAE,GAAG;;;;;;;;;;;;;;AAkBhB;;;;QAIS;EACP,KAAK,EAAE,OAAO;;EACd,IAAI,EAAE,OAAO;;EACb,MAAM,EAAE,CAAC;;;;;;AAOX,MAAO;EACL,QAAQ,EAAE,OAAO;;;;;;;;AAUnB;MACO;EACL,cAAc,EAAE,IAAI;;;;;;;;;AAWtB;;;oBAGqB;EACnB,kBAAkB,EAAE,MAAM;;EAC1B,MAAM,EAAE,OAAO;;;;;;AAOjB;oBACqB;EACnB,MAAM,EAAE,OAAO;;;;;AAOjB;uBACwB;EACtB,MAAM,EAAE,CAAC;EACT,OAAO,EAAE,CAAC;;;;;;AAQZ,KAAM;EACJ,WAAW,EAAE,MAAM;;;;;;;;;AAWrB;mBACoB;EAClB,UAAU,EAAE,UAAU;;EACtB,OAAO,EAAE,CAAC;;;;;;;;AASZ;+CACgD;EAC9C,MAAM,EAAE,IAAI;;;;;;;AASd,oBAAqB;EACnB,kBAAkB,EAAE,SAAS;;EAC7B,eAAe,EAAE,WAAW;EAC5B,kBAAkB,EAAE,WAAW;;EAC/B,UAAU,EAAE,WAAW;;;;;;;AASzB;+CACgD;EAC9C,kBAAkB,EAAE,IAAI;;;;;AAO1B,QAAS;EACP,MAAM,EAAE,iBAAiB;EACzB,MAAM,EAAE,KAAK;EACb,OAAO,EAAE,qBAAqB;;;;;;AAQhC,MAAO;EACL,MAAM,EAAE,CAAC;;EACT,OAAO,EAAE,CAAC;;;;;;AAOZ,QAAS;EACP,QAAQ,EAAE,IAAI;;;;;;AAQhB,QAAS;EACP,WAAW,EAAE,IAAI;;;;;;;AAUnB,KAAM;EACJ,eAAe,EAAE,QAAQ;EACzB,cAAc,EAAE,CAAC;;AAGnB;EACG;EACD,OAAO,EAAE,CAAC",
"sources": ["../../../scss/normalize.scss"],
"names": [],
"file": "normalize.css"
}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,340 @@
;(function ($, window, document, undefined) {
'use strict';
Foundation.libs.abide = {
name : 'abide',
version : '5.5.1',
settings : {
live_validate : true,
validate_on_blur : true,
focus_on_invalid : true,
error_labels : true, // labels with a for="inputId" will recieve an `error` class
error_class : 'error',
timeout : 1000,
patterns : {
alpha : /^[a-zA-Z]+$/,
alpha_numeric : /^[a-zA-Z0-9]+$/,
integer : /^[-+]?\d+$/,
number : /^[-+]?\d*(?:[\.\,]\d+)?$/,
// amex, visa, diners
card : /^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})$/,
cvv : /^([0-9]){3,4}$/,
// http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html#valid-e-mail-address
email : /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+$/,
url : /^(https?|ftp|file|ssh):\/\/(((([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-zA-Z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-zA-Z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-zA-Z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-zA-Z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-zA-Z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-zA-Z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/,
// abc.de
domain : /^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,8}$/,
datetime : /^([0-2][0-9]{3})\-([0-1][0-9])\-([0-3][0-9])T([0-5][0-9])\:([0-5][0-9])\:([0-5][0-9])(Z|([\-\+]([0-1][0-9])\:00))$/,
// YYYY-MM-DD
date : /(?:19|20)[0-9]{2}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-9])|(?:(?!02)(?:0[1-9]|1[0-2])-(?:30))|(?:(?:0[13578]|1[02])-31))$/,
// HH:MM:SS
time : /^(0[0-9]|1[0-9]|2[0-3])(:[0-5][0-9]){2}$/,
dateISO : /^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}$/,
// MM/DD/YYYY
month_day_year : /^(0[1-9]|1[012])[- \/.](0[1-9]|[12][0-9]|3[01])[- \/.]\d{4}$/,
// DD/MM/YYYY
day_month_year : /^(0[1-9]|[12][0-9]|3[01])[- \/.](0[1-9]|1[012])[- \/.]\d{4}$/,
// #FFF or #FFFFFF
color : /^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/
},
validators : {
equalTo : function (el, required, parent) {
var from = document.getElementById(el.getAttribute(this.add_namespace('data-equalto'))).value,
to = el.value,
valid = (from === to);
return valid;
}
}
},
timer : null,
init : function (scope, method, options) {
this.bindings(method, options);
},
events : function (scope) {
var self = this,
form = self.S(scope).attr('novalidate', 'novalidate'),
settings = form.data(this.attr_name(true) + '-init') || {};
this.invalid_attr = this.add_namespace('data-invalid');
form
.off('.abide')
.on('submit.fndtn.abide validate.fndtn.abide', function (e) {
var is_ajax = /ajax/i.test(self.S(this).attr(self.attr_name()));
return self.validate(self.S(this).find('input, textarea, select').get(), e, is_ajax);
})
.on('reset', function () {
return self.reset($(this));
})
.find('input, textarea, select')
.off('.abide')
.on('blur.fndtn.abide change.fndtn.abide', function (e) {
if (settings.validate_on_blur === true) {
self.validate([this], e);
}
})
.on('keydown.fndtn.abide', function (e) {
if (settings.live_validate === true && e.which != 9) {
clearTimeout(self.timer);
self.timer = setTimeout(function () {
self.validate([this], e);
}.bind(this), settings.timeout);
}
});
},
reset : function (form) {
form.removeAttr(this.invalid_attr);
$(this.invalid_attr, form).removeAttr(this.invalid_attr);
$('.' + this.settings.error_class, form).not('small').removeClass(this.settings.error_class);
},
validate : function (els, e, is_ajax) {
var validations = this.parse_patterns(els),
validation_count = validations.length,
form = this.S(els[0]).closest('form'),
submit_event = /submit/.test(e.type);
// Has to count up to make sure the focus gets applied to the top error
for (var i = 0; i < validation_count; i++) {
if (!validations[i] && (submit_event || is_ajax)) {
if (this.settings.focus_on_invalid) {
els[i].focus();
}
form.trigger('invalid').trigger('invalid.fndtn.abide');
this.S(els[i]).closest('form').attr(this.invalid_attr, '');
return false;
}
}
if (submit_event || is_ajax) {
form.trigger('valid').trigger('valid.fndtn.abide');
}
form.removeAttr(this.invalid_attr);
if (is_ajax) {
return false;
}
return true;
},
parse_patterns : function (els) {
var i = els.length,
el_patterns = [];
while (i--) {
el_patterns.push(this.pattern(els[i]));
}
return this.check_validation_and_apply_styles(el_patterns);
},
pattern : function (el) {
var type = el.getAttribute('type'),
required = typeof el.getAttribute('required') === 'string';
var pattern = el.getAttribute('pattern') || '';
if (this.settings.patterns.hasOwnProperty(pattern) && pattern.length > 0) {
return [el, this.settings.patterns[pattern], required];
} else if (pattern.length > 0) {
return [el, new RegExp(pattern), required];
}
if (this.settings.patterns.hasOwnProperty(type)) {
return [el, this.settings.patterns[type], required];
}
pattern = /.*/;
return [el, pattern, required];
},
// TODO: Break this up into smaller methods, getting hard to read.
check_validation_and_apply_styles : function (el_patterns) {
var i = el_patterns.length,
validations = [],
form = this.S(el_patterns[0][0]).closest('[data-' + this.attr_name(true) + ']'),
settings = form.data(this.attr_name(true) + '-init') || {};
while (i--) {
var el = el_patterns[i][0],
required = el_patterns[i][2],
value = el.value.trim(),
direct_parent = this.S(el).parent(),
validator = el.getAttribute(this.add_namespace('data-abide-validator')),
is_radio = el.type === 'radio',
is_checkbox = el.type === 'checkbox',
label = this.S('label[for="' + el.getAttribute('id') + '"]'),
valid_length = (required) ? (el.value.length > 0) : true,
el_validations = [];
var parent, valid;
// support old way to do equalTo validations
if (el.getAttribute(this.add_namespace('data-equalto'))) { validator = 'equalTo' }
if (!direct_parent.is('label')) {
parent = direct_parent;
} else {
parent = direct_parent.parent();
}
if (validator) {
valid = this.settings.validators[validator].apply(this, [el, required, parent]);
el_validations.push(valid);
}
if (is_radio && required) {
el_validations.push(this.valid_radio(el, required));
} else if (is_checkbox && required) {
el_validations.push(this.valid_checkbox(el, required));
} else {
if (el_patterns[i][1].test(value) && valid_length ||
!required && el.value.length < 1 || $(el).attr('disabled')) {
el_validations.push(true);
} else {
el_validations.push(false);
}
el_validations = [el_validations.every(function (valid) {return valid;})];
if (el_validations[0]) {
this.S(el).removeAttr(this.invalid_attr);
el.setAttribute('aria-invalid', 'false');
el.removeAttribute('aria-describedby');
parent.removeClass(this.settings.error_class);
if (label.length > 0 && this.settings.error_labels) {
label.removeClass(this.settings.error_class).removeAttr('role');
}
$(el).triggerHandler('valid');
} else {
this.S(el).attr(this.invalid_attr, '');
el.setAttribute('aria-invalid', 'true');
// Try to find the error associated with the input
var errorElem = parent.find('small.' + this.settings.error_class, 'span.' + this.settings.error_class);
var errorID = errorElem.length > 0 ? errorElem[0].id : '';
if (errorID.length > 0) {
el.setAttribute('aria-describedby', errorID);
}
// el.setAttribute('aria-describedby', $(el).find('.error')[0].id);
parent.addClass(this.settings.error_class);
if (label.length > 0 && this.settings.error_labels) {
label.addClass(this.settings.error_class).attr('role', 'alert');
}
$(el).triggerHandler('invalid');
}
}
validations.push(el_validations[0]);
}
validations = [validations.every(function (valid) {return valid;})];
return validations;
},
valid_checkbox : function (el, required) {
var el = this.S(el),
valid = (el.is(':checked') || !required || el.get(0).getAttribute('disabled'));
if (valid) {
el.removeAttr(this.invalid_attr).parent().removeClass(this.settings.error_class);
} else {
el.attr(this.invalid_attr, '').parent().addClass(this.settings.error_class);
}
return valid;
},
valid_radio : function (el, required) {
var name = el.getAttribute('name'),
group = this.S(el).closest('[data-' + this.attr_name(true) + ']').find("[name='" + name + "']"),
count = group.length,
valid = false,
disabled = false;
// Has to count up to make sure the focus gets applied to the top error
for (var i=0; i < count; i++) {
if( group[i].getAttribute('disabled') ){
disabled=true;
valid=true;
} else {
if (group[i].checked){
valid = true;
} else {
if( disabled ){
valid = false;
}
}
}
}
// Has to count up to make sure the focus gets applied to the top error
for (var i = 0; i < count; i++) {
if (valid) {
this.S(group[i]).removeAttr(this.invalid_attr).parent().removeClass(this.settings.error_class);
} else {
this.S(group[i]).attr(this.invalid_attr, '').parent().addClass(this.settings.error_class);
}
}
return valid;
},
valid_equal : function (el, required, parent) {
var from = document.getElementById(el.getAttribute(this.add_namespace('data-equalto'))).value,
to = el.value,
valid = (from === to);
if (valid) {
this.S(el).removeAttr(this.invalid_attr);
parent.removeClass(this.settings.error_class);
if (label.length > 0 && settings.error_labels) {
label.removeClass(this.settings.error_class);
}
} else {
this.S(el).attr(this.invalid_attr, '');
parent.addClass(this.settings.error_class);
if (label.length > 0 && settings.error_labels) {
label.addClass(this.settings.error_class);
}
}
return valid;
},
valid_oneof : function (el, required, parent, doNotValidateOthers) {
var el = this.S(el),
others = this.S('[' + this.add_namespace('data-oneof') + ']'),
valid = others.filter(':checked').length > 0;
if (valid) {
el.removeAttr(this.invalid_attr).parent().removeClass(this.settings.error_class);
} else {
el.attr(this.invalid_attr, '').parent().addClass(this.settings.error_class);
}
if (!doNotValidateOthers) {
var _this = this;
others.each(function () {
_this.valid_oneof.call(_this, this, null, null, true);
});
}
return valid;
}
};
}(jQuery, window, window.document));

View File

@@ -0,0 +1,67 @@
;(function ($, window, document, undefined) {
'use strict';
Foundation.libs.accordion = {
name : 'accordion',
version : '5.5.1',
settings : {
content_class : 'content',
active_class : 'active',
multi_expand : false,
toggleable : true,
callback : function () {}
},
init : function (scope, method, options) {
this.bindings(method, options);
},
events : function () {
var self = this;
var S = this.S;
S(this.scope)
.off('.fndtn.accordion')
.on('click.fndtn.accordion', '[' + this.attr_name() + '] > .accordion-navigation > a', function (e) {
var accordion = S(this).closest('[' + self.attr_name() + ']'),
groupSelector = self.attr_name() + '=' + accordion.attr(self.attr_name()),
settings = accordion.data(self.attr_name(true) + '-init') || self.settings,
target = S('#' + this.href.split('#')[1]),
aunts = $('> .accordion-navigation', accordion),
siblings = aunts.children('.' + settings.content_class),
active_content = siblings.filter('.' + settings.active_class);
e.preventDefault();
if (accordion.attr(self.attr_name())) {
siblings = siblings.add('[' + groupSelector + '] dd > ' + '.' + settings.content_class);
aunts = aunts.add('[' + groupSelector + '] .accordion-navigation');
}
if (settings.toggleable && target.is(active_content)) {
target.parent('.accordion-navigation').toggleClass(settings.active_class, false);
target.toggleClass(settings.active_class, false);
settings.callback(target);
target.triggerHandler('toggled', [accordion]);
accordion.triggerHandler('toggled', [target]);
return;
}
if (!settings.multi_expand) {
siblings.removeClass(settings.active_class);
aunts.removeClass(settings.active_class);
}
target.addClass(settings.active_class).parent().addClass(settings.active_class);
settings.callback(target);
target.triggerHandler('toggled', [accordion]);
accordion.triggerHandler('toggled', [target]);
});
},
off : function () {},
reflow : function () {}
};
}(jQuery, window, window.document));

View File

@@ -0,0 +1,43 @@
;(function ($, window, document, undefined) {
'use strict';
Foundation.libs.alert = {
name : 'alert',
version : '5.5.1',
settings : {
callback : function () {}
},
init : function (scope, method, options) {
this.bindings(method, options);
},
events : function () {
var self = this,
S = this.S;
$(this.scope).off('.alert').on('click.fndtn.alert', '[' + this.attr_name() + '] .close', function (e) {
var alertBox = S(this).closest('[' + self.attr_name() + ']'),
settings = alertBox.data(self.attr_name(true) + '-init') || self.settings;
e.preventDefault();
if (Modernizr.csstransitions) {
alertBox.addClass('alert-close');
alertBox.on('transitionend webkitTransitionEnd oTransitionEnd', function (e) {
S(this).trigger('close').trigger('close.fndtn.alert').remove();
settings.callback();
});
} else {
alertBox.fadeOut(300, function () {
S(this).trigger('close').trigger('close.fndtn.alert').remove();
settings.callback();
});
}
});
},
reflow : function () {}
};
}(jQuery, window, window.document));

View File

@@ -0,0 +1,556 @@
;(function ($, window, document, undefined) {
'use strict';
Foundation.libs.clearing = {
name : 'clearing',
version : '5.5.1',
settings : {
templates : {
viewing : '<a href="#" class="clearing-close">&times;</a>' +
'<div class="visible-img" style="display: none"><div class="clearing-touch-label"></div><img src="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D" alt="" />' +
'<p class="clearing-caption"></p><a href="#" class="clearing-main-prev"><span></span></a>' +
'<a href="#" class="clearing-main-next"><span></span></a></div>'
},
// comma delimited list of selectors that, on click, will close clearing,
// add 'div.clearing-blackout, div.visible-img' to close on background click
close_selectors : '.clearing-close, div.clearing-blackout',
// Default to the entire li element.
open_selectors : '',
// Image will be skipped in carousel.
skip_selector : '',
touch_label : '',
// event initializers and locks
init : false,
locked : false
},
init : function (scope, method, options) {
var self = this;
Foundation.inherit(this, 'throttle image_loaded');
this.bindings(method, options);
if (self.S(this.scope).is('[' + this.attr_name() + ']')) {
this.assemble(self.S('li', this.scope));
} else {
self.S('[' + this.attr_name() + ']', this.scope).each(function () {
self.assemble(self.S('li', this));
});
}
},
events : function (scope) {
var self = this,
S = self.S,
$scroll_container = $('.scroll-container');
if ($scroll_container.length > 0) {
this.scope = $scroll_container;
}
S(this.scope)
.off('.clearing')
.on('click.fndtn.clearing', 'ul[' + this.attr_name() + '] li ' + this.settings.open_selectors,
function (e, current, target) {
var current = current || S(this),
target = target || current,
next = current.next('li'),
settings = current.closest('[' + self.attr_name() + ']').data(self.attr_name(true) + '-init'),
image = S(e.target);
e.preventDefault();
if (!settings) {
self.init();
settings = current.closest('[' + self.attr_name() + ']').data(self.attr_name(true) + '-init');
}
// if clearing is open and the current image is
// clicked, go to the next image in sequence
if (target.hasClass('visible') &&
current[0] === target[0] &&
next.length > 0 && self.is_open(current)) {
target = next;
image = S('img', target);
}
// set current and target to the clicked li if not otherwise defined.
self.open(image, current, target);
self.update_paddles(target);
})
.on('click.fndtn.clearing', '.clearing-main-next',
function (e) { self.nav(e, 'next') })
.on('click.fndtn.clearing', '.clearing-main-prev',
function (e) { self.nav(e, 'prev') })
.on('click.fndtn.clearing', this.settings.close_selectors,
function (e) { Foundation.libs.clearing.close(e, this) });
$(document).on('keydown.fndtn.clearing',
function (e) { self.keydown(e) });
S(window).off('.clearing').on('resize.fndtn.clearing',
function () { self.resize() });
this.swipe_events(scope);
},
swipe_events : function (scope) {
var self = this,
S = self.S;
S(this.scope)
.on('touchstart.fndtn.clearing', '.visible-img', function (e) {
if (!e.touches) { e = e.originalEvent; }
var data = {
start_page_x : e.touches[0].pageX,
start_page_y : e.touches[0].pageY,
start_time : (new Date()).getTime(),
delta_x : 0,
is_scrolling : undefined
};
S(this).data('swipe-transition', data);
e.stopPropagation();
})
.on('touchmove.fndtn.clearing', '.visible-img', function (e) {
if (!e.touches) {
e = e.originalEvent;
}
// Ignore pinch/zoom events
if (e.touches.length > 1 || e.scale && e.scale !== 1) {
return;
}
var data = S(this).data('swipe-transition');
if (typeof data === 'undefined') {
data = {};
}
data.delta_x = e.touches[0].pageX - data.start_page_x;
if (Foundation.rtl) {
data.delta_x = -data.delta_x;
}
if (typeof data.is_scrolling === 'undefined') {
data.is_scrolling = !!( data.is_scrolling || Math.abs(data.delta_x) < Math.abs(e.touches[0].pageY - data.start_page_y) );
}
if (!data.is_scrolling && !data.active) {
e.preventDefault();
var direction = (data.delta_x < 0) ? 'next' : 'prev';
data.active = true;
self.nav(e, direction);
}
})
.on('touchend.fndtn.clearing', '.visible-img', function (e) {
S(this).data('swipe-transition', {});
e.stopPropagation();
});
},
assemble : function ($li) {
var $el = $li.parent();
if ($el.parent().hasClass('carousel')) {
return;
}
$el.after('<div id="foundationClearingHolder"></div>');
var grid = $el.detach(),
grid_outerHTML = '';
if (grid[0] == null) {
return;
} else {
grid_outerHTML = grid[0].outerHTML;
}
var holder = this.S('#foundationClearingHolder'),
settings = $el.data(this.attr_name(true) + '-init'),
data = {
grid : '<div class="carousel">' + grid_outerHTML + '</div>',
viewing : settings.templates.viewing
},
wrapper = '<div class="clearing-assembled"><div>' + data.viewing +
data.grid + '</div></div>',
touch_label = this.settings.touch_label;
if (Modernizr.touch) {
wrapper = $(wrapper).find('.clearing-touch-label').html(touch_label).end();
}
holder.after(wrapper).remove();
},
open : function ($image, current, target) {
var self = this,
body = $(document.body),
root = target.closest('.clearing-assembled'),
container = self.S('div', root).first(),
visible_image = self.S('.visible-img', container),
image = self.S('img', visible_image).not($image),
label = self.S('.clearing-touch-label', container),
error = false;
// Event to disable scrolling on touch devices when Clearing is activated
$('body').on('touchmove', function (e) {
e.preventDefault();
});
image.error(function () {
error = true;
});
function startLoad() {
setTimeout(function () {
this.image_loaded(image, function () {
if (image.outerWidth() === 1 && !error) {
startLoad.call(this);
} else {
cb.call(this, image);
}
}.bind(this));
}.bind(this), 100);
}
function cb (image) {
var $image = $(image);
$image.css('visibility', 'visible');
// toggle the gallery
body.css('overflow', 'hidden');
root.addClass('clearing-blackout');
container.addClass('clearing-container');
visible_image.show();
this.fix_height(target)
.caption(self.S('.clearing-caption', visible_image), self.S('img', target))
.center_and_label(image, label)
.shift(current, target, function () {
target.closest('li').siblings().removeClass('visible');
target.closest('li').addClass('visible');
});
visible_image.trigger('opened.fndtn.clearing')
}
if (!this.locked()) {
visible_image.trigger('open.fndtn.clearing');
// set the image to the selected thumbnail
image
.attr('src', this.load($image))
.css('visibility', 'hidden');
startLoad.call(this);
}
},
close : function (e, el) {
e.preventDefault();
var root = (function (target) {
if (/blackout/.test(target.selector)) {
return target;
} else {
return target.closest('.clearing-blackout');
}
}($(el))),
body = $(document.body), container, visible_image;
if (el === e.target && root) {
body.css('overflow', '');
container = $('div', root).first();
visible_image = $('.visible-img', container);
visible_image.trigger('close.fndtn.clearing');
this.settings.prev_index = 0;
$('ul[' + this.attr_name() + ']', root)
.attr('style', '').closest('.clearing-blackout')
.removeClass('clearing-blackout');
container.removeClass('clearing-container');
visible_image.hide();
visible_image.trigger('closed.fndtn.clearing');
}
// Event to re-enable scrolling on touch devices
$('body').off('touchmove');
return false;
},
is_open : function (current) {
return current.parent().prop('style').length > 0;
},
keydown : function (e) {
var clearing = $('.clearing-blackout ul[' + this.attr_name() + ']'),
NEXT_KEY = this.rtl ? 37 : 39,
PREV_KEY = this.rtl ? 39 : 37,
ESC_KEY = 27;
if (e.which === NEXT_KEY) {
this.go(clearing, 'next');
}
if (e.which === PREV_KEY) {
this.go(clearing, 'prev');
}
if (e.which === ESC_KEY) {
this.S('a.clearing-close').trigger('click').trigger('click.fndtn.clearing');
}
},
nav : function (e, direction) {
var clearing = $('ul[' + this.attr_name() + ']', '.clearing-blackout');
e.preventDefault();
this.go(clearing, direction);
},
resize : function () {
var image = $('img', '.clearing-blackout .visible-img'),
label = $('.clearing-touch-label', '.clearing-blackout');
if (image.length) {
this.center_and_label(image, label);
image.trigger('resized.fndtn.clearing')
}
},
// visual adjustments
fix_height : function (target) {
var lis = target.parent().children(),
self = this;
lis.each(function () {
var li = self.S(this),
image = li.find('img');
if (li.height() > image.outerHeight()) {
li.addClass('fix-height');
}
})
.closest('ul')
.width(lis.length * 100 + '%');
return this;
},
update_paddles : function (target) {
target = target.closest('li');
var visible_image = target
.closest('.carousel')
.siblings('.visible-img');
if (target.next().length > 0) {
this.S('.clearing-main-next', visible_image).removeClass('disabled');
} else {
this.S('.clearing-main-next', visible_image).addClass('disabled');
}
if (target.prev().length > 0) {
this.S('.clearing-main-prev', visible_image).removeClass('disabled');
} else {
this.S('.clearing-main-prev', visible_image).addClass('disabled');
}
},
center_and_label : function (target, label) {
if (!this.rtl && label.length > 0) {
label.css({
marginLeft : -(label.outerWidth() / 2),
marginTop : -(target.outerHeight() / 2)-label.outerHeight()-10
});
} else {
label.css({
marginRight : -(label.outerWidth() / 2),
marginTop : -(target.outerHeight() / 2)-label.outerHeight()-10,
left: 'auto',
right: '50%'
});
}
return this;
},
// image loading and preloading
load : function ($image) {
var href;
if ($image[0].nodeName === 'A') {
href = $image.attr('href');
} else {
href = $image.closest('a').attr('href');
}
this.preload($image);
if (href) {
return href;
}
return $image.attr('src');
},
preload : function ($image) {
this
.img($image.closest('li').next())
.img($image.closest('li').prev());
},
img : function (img) {
if (img.length) {
var new_img = new Image(),
new_a = this.S('a', img);
if (new_a.length) {
new_img.src = new_a.attr('href');
} else {
new_img.src = this.S('img', img).attr('src');
}
}
return this;
},
// image caption
caption : function (container, $image) {
var caption = $image.attr('data-caption');
if (caption) {
container
.html(caption)
.show();
} else {
container
.text('')
.hide();
}
return this;
},
// directional methods
go : function ($ul, direction) {
var current = this.S('.visible', $ul),
target = current[direction]();
// Check for skip selector.
if (this.settings.skip_selector && target.find(this.settings.skip_selector).length != 0) {
target = target[direction]();
}
if (target.length) {
this.S('img', target)
.trigger('click', [current, target]).trigger('click.fndtn.clearing', [current, target])
.trigger('change.fndtn.clearing');
}
},
shift : function (current, target, callback) {
var clearing = target.parent(),
old_index = this.settings.prev_index || target.index(),
direction = this.direction(clearing, current, target),
dir = this.rtl ? 'right' : 'left',
left = parseInt(clearing.css('left'), 10),
width = target.outerWidth(),
skip_shift;
var dir_obj = {};
// we use jQuery animate instead of CSS transitions because we
// need a callback to unlock the next animation
// needs support for RTL **
if (target.index() !== old_index && !/skip/.test(direction)) {
if (/left/.test(direction)) {
this.lock();
dir_obj[dir] = left + width;
clearing.animate(dir_obj, 300, this.unlock());
} else if (/right/.test(direction)) {
this.lock();
dir_obj[dir] = left - width;
clearing.animate(dir_obj, 300, this.unlock());
}
} else if (/skip/.test(direction)) {
// the target image is not adjacent to the current image, so
// do we scroll right or not
skip_shift = target.index() - this.settings.up_count;
this.lock();
if (skip_shift > 0) {
dir_obj[dir] = -(skip_shift * width);
clearing.animate(dir_obj, 300, this.unlock());
} else {
dir_obj[dir] = 0;
clearing.animate(dir_obj, 300, this.unlock());
}
}
callback();
},
direction : function ($el, current, target) {
var lis = this.S('li', $el),
li_width = lis.outerWidth() + (lis.outerWidth() / 4),
up_count = Math.floor(this.S('.clearing-container').outerWidth() / li_width) - 1,
target_index = lis.index(target),
response;
this.settings.up_count = up_count;
if (this.adjacent(this.settings.prev_index, target_index)) {
if ((target_index > up_count) && target_index > this.settings.prev_index) {
response = 'right';
} else if ((target_index > up_count - 1) && target_index <= this.settings.prev_index) {
response = 'left';
} else {
response = false;
}
} else {
response = 'skip';
}
this.settings.prev_index = target_index;
return response;
},
adjacent : function (current_index, target_index) {
for (var i = target_index + 1; i >= target_index - 1; i--) {
if (i === current_index) {
return true;
}
}
return false;
},
// lock management
lock : function () {
this.settings.locked = true;
},
unlock : function () {
this.settings.locked = false;
},
locked : function () {
return this.settings.locked;
},
off : function () {
this.S(this.scope).off('.fndtn.clearing');
this.S(window).off('.fndtn.clearing');
},
reflow : function () {
this.init();
}
};
}(jQuery, window, window.document));

View File

@@ -0,0 +1,448 @@
;(function ($, window, document, undefined) {
'use strict';
Foundation.libs.dropdown = {
name : 'dropdown',
version : '5.5.1',
settings : {
active_class : 'open',
disabled_class : 'disabled',
mega_class : 'mega',
align : 'bottom',
is_hover : false,
hover_timeout : 150,
opened : function () {},
closed : function () {}
},
init : function (scope, method, options) {
Foundation.inherit(this, 'throttle');
$.extend(true, this.settings, method, options);
this.bindings(method, options);
},
events : function (scope) {
var self = this,
S = self.S;
S(this.scope)
.off('.dropdown')
.on('click.fndtn.dropdown', '[' + this.attr_name() + ']', function (e) {
var settings = S(this).data(self.attr_name(true) + '-init') || self.settings;
if (!settings.is_hover || Modernizr.touch) {
e.preventDefault();
if (S(this).parent('[data-reveal-id]')) {
e.stopPropagation();
}
self.toggle($(this));
}
})
.on('mouseenter.fndtn.dropdown', '[' + this.attr_name() + '], [' + this.attr_name() + '-content]', function (e) {
var $this = S(this),
dropdown,
target;
clearTimeout(self.timeout);
if ($this.data(self.data_attr())) {
dropdown = S('#' + $this.data(self.data_attr()));
target = $this;
} else {
dropdown = $this;
target = S('[' + self.attr_name() + '="' + dropdown.attr('id') + '"]');
}
var settings = target.data(self.attr_name(true) + '-init') || self.settings;
if (S(e.currentTarget).data(self.data_attr()) && settings.is_hover) {
self.closeall.call(self);
}
if (settings.is_hover) {
self.open.apply(self, [dropdown, target]);
}
})
.on('mouseleave.fndtn.dropdown', '[' + this.attr_name() + '], [' + this.attr_name() + '-content]', function (e) {
var $this = S(this);
var settings;
if ($this.data(self.data_attr())) {
settings = $this.data(self.data_attr(true) + '-init') || self.settings;
} else {
var target = S('[' + self.attr_name() + '="' + S(this).attr('id') + '"]'),
settings = target.data(self.attr_name(true) + '-init') || self.settings;
}
self.timeout = setTimeout(function () {
if ($this.data(self.data_attr())) {
if (settings.is_hover) {
self.close.call(self, S('#' + $this.data(self.data_attr())));
}
} else {
if (settings.is_hover) {
self.close.call(self, $this);
}
}
}.bind(this), settings.hover_timeout);
})
.on('click.fndtn.dropdown', function (e) {
var parent = S(e.target).closest('[' + self.attr_name() + '-content]');
var links = parent.find('a');
if (links.length > 0 && parent.attr('aria-autoclose') !== 'false') {
self.close.call(self, S('[' + self.attr_name() + '-content]'));
}
if (e.target !== document && !$.contains(document.documentElement, e.target)) {
return;
}
if (S(e.target).closest('[' + self.attr_name() + ']').length > 0) {
return;
}
if (!(S(e.target).data('revealId')) &&
(parent.length > 0 && (S(e.target).is('[' + self.attr_name() + '-content]') ||
$.contains(parent.first()[0], e.target)))) {
e.stopPropagation();
return;
}
self.close.call(self, S('[' + self.attr_name() + '-content]'));
})
.on('opened.fndtn.dropdown', '[' + self.attr_name() + '-content]', function () {
self.settings.opened.call(this);
})
.on('closed.fndtn.dropdown', '[' + self.attr_name() + '-content]', function () {
self.settings.closed.call(this);
});
S(window)
.off('.dropdown')
.on('resize.fndtn.dropdown', self.throttle(function () {
self.resize.call(self);
}, 50));
this.resize();
},
close : function (dropdown) {
var self = this;
dropdown.each(function () {
var original_target = $('[' + self.attr_name() + '=' + dropdown[0].id + ']') || $('aria-controls=' + dropdown[0].id + ']');
original_target.attr('aria-expanded', 'false');
if (self.S(this).hasClass(self.settings.active_class)) {
self.S(this)
.css(Foundation.rtl ? 'right' : 'left', '-99999px')
.attr('aria-hidden', 'true')
.removeClass(self.settings.active_class)
.prev('[' + self.attr_name() + ']')
.removeClass(self.settings.active_class)
.removeData('target');
self.S(this).trigger('closed').trigger('closed.fndtn.dropdown', [dropdown]);
}
});
dropdown.removeClass('f-open-' + this.attr_name(true));
},
closeall : function () {
var self = this;
$.each(self.S('.f-open-' + this.attr_name(true)), function () {
self.close.call(self, self.S(this));
});
},
open : function (dropdown, target) {
this
.css(dropdown
.addClass(this.settings.active_class), target);
dropdown.prev('[' + this.attr_name() + ']').addClass(this.settings.active_class);
dropdown.data('target', target.get(0)).trigger('opened').trigger('opened.fndtn.dropdown', [dropdown, target]);
dropdown.attr('aria-hidden', 'false');
target.attr('aria-expanded', 'true');
dropdown.focus();
dropdown.addClass('f-open-' + this.attr_name(true));
},
data_attr : function () {
if (this.namespace.length > 0) {
return this.namespace + '-' + this.name;
}
return this.name;
},
toggle : function (target) {
if (target.hasClass(this.settings.disabled_class)) {
return;
}
var dropdown = this.S('#' + target.data(this.data_attr()));
if (dropdown.length === 0) {
// No dropdown found, not continuing
return;
}
this.close.call(this, this.S('[' + this.attr_name() + '-content]').not(dropdown));
if (dropdown.hasClass(this.settings.active_class)) {
this.close.call(this, dropdown);
if (dropdown.data('target') !== target.get(0)) {
this.open.call(this, dropdown, target);
}
} else {
this.open.call(this, dropdown, target);
}
},
resize : function () {
var dropdown = this.S('[' + this.attr_name() + '-content].open');
var target = $(dropdown.data("target"));
if (dropdown.length && target.length) {
this.css(dropdown, target);
}
},
css : function (dropdown, target) {
var left_offset = Math.max((target.width() - dropdown.width()) / 2, 8),
settings = target.data(this.attr_name(true) + '-init') || this.settings;
this.clear_idx();
if (this.small()) {
var p = this.dirs.bottom.call(dropdown, target, settings);
dropdown.attr('style', '').removeClass('drop-left drop-right drop-top').css({
position : 'absolute',
width : '95%',
'max-width' : 'none',
top : p.top
});
dropdown.css(Foundation.rtl ? 'right' : 'left', left_offset);
} else {
this.style(dropdown, target, settings);
}
return dropdown;
},
style : function (dropdown, target, settings) {
var css = $.extend({position : 'absolute'},
this.dirs[settings.align].call(dropdown, target, settings));
dropdown.attr('style', '').css(css);
},
// return CSS property object
// `this` is the dropdown
dirs : {
// Calculate target offset
_base : function (t) {
var o_p = this.offsetParent(),
o = o_p.offset(),
p = t.offset();
p.top -= o.top;
p.left -= o.left;
//set some flags on the p object to pass along
p.missRight = false;
p.missTop = false;
p.missLeft = false;
p.leftRightFlag = false;
//lets see if the panel will be off the screen
//get the actual width of the page and store it
var actualBodyWidth;
if (document.getElementsByClassName('row')[0]) {
actualBodyWidth = document.getElementsByClassName('row')[0].clientWidth;
} else {
actualBodyWidth = window.outerWidth;
}
var actualMarginWidth = (window.outerWidth - actualBodyWidth) / 2;
var actualBoundary = actualBodyWidth;
if (!this.hasClass('mega')) {
//miss top
if (t.offset().top <= this.outerHeight()) {
p.missTop = true;
actualBoundary = window.outerWidth - actualMarginWidth;
p.leftRightFlag = true;
}
//miss right
if (t.offset().left + this.outerWidth() > t.offset().left + actualMarginWidth && t.offset().left - actualMarginWidth > this.outerWidth()) {
p.missRight = true;
p.missLeft = false;
}
//miss left
if (t.offset().left - this.outerWidth() <= 0) {
p.missLeft = true;
p.missRight = false;
}
}
return p;
},
top : function (t, s) {
var self = Foundation.libs.dropdown,
p = self.dirs._base.call(this, t);
this.addClass('drop-top');
if (p.missTop == true) {
p.top = p.top + t.outerHeight() + this.outerHeight();
this.removeClass('drop-top');
}
if (p.missRight == true) {
p.left = p.left - this.outerWidth() + t.outerWidth();
}
if (t.outerWidth() < this.outerWidth() || self.small() || this.hasClass(s.mega_menu)) {
self.adjust_pip(this, t, s, p);
}
if (Foundation.rtl) {
return {left : p.left - this.outerWidth() + t.outerWidth(),
top : p.top - this.outerHeight()};
}
return {left : p.left, top : p.top - this.outerHeight()};
},
bottom : function (t, s) {
var self = Foundation.libs.dropdown,
p = self.dirs._base.call(this, t);
if (p.missRight == true) {
p.left = p.left - this.outerWidth() + t.outerWidth();
}
if (t.outerWidth() < this.outerWidth() || self.small() || this.hasClass(s.mega_menu)) {
self.adjust_pip(this, t, s, p);
}
if (self.rtl) {
return {left : p.left - this.outerWidth() + t.outerWidth(), top : p.top + t.outerHeight()};
}
return {left : p.left, top : p.top + t.outerHeight()};
},
left : function (t, s) {
var p = Foundation.libs.dropdown.dirs._base.call(this, t);
this.addClass('drop-left');
if (p.missLeft == true) {
p.left = p.left + this.outerWidth();
p.top = p.top + t.outerHeight();
this.removeClass('drop-left');
}
return {left : p.left - this.outerWidth(), top : p.top};
},
right : function (t, s) {
var p = Foundation.libs.dropdown.dirs._base.call(this, t);
this.addClass('drop-right');
if (p.missRight == true) {
p.left = p.left - this.outerWidth();
p.top = p.top + t.outerHeight();
this.removeClass('drop-right');
} else {
p.triggeredRight = true;
}
var self = Foundation.libs.dropdown;
if (t.outerWidth() < this.outerWidth() || self.small() || this.hasClass(s.mega_menu)) {
self.adjust_pip(this, t, s, p);
}
return {left : p.left + t.outerWidth(), top : p.top};
}
},
// Insert rule to style psuedo elements
adjust_pip : function (dropdown, target, settings, position) {
var sheet = Foundation.stylesheet,
pip_offset_base = 8;
if (dropdown.hasClass(settings.mega_class)) {
pip_offset_base = position.left + (target.outerWidth() / 2) - 8;
} else if (this.small()) {
pip_offset_base += position.left - 8;
}
this.rule_idx = sheet.cssRules.length;
//default
var sel_before = '.f-dropdown.open:before',
sel_after = '.f-dropdown.open:after',
css_before = 'left: ' + pip_offset_base + 'px;',
css_after = 'left: ' + (pip_offset_base - 1) + 'px;';
if (position.missRight == true) {
pip_offset_base = dropdown.outerWidth() - 23;
sel_before = '.f-dropdown.open:before',
sel_after = '.f-dropdown.open:after',
css_before = 'left: ' + pip_offset_base + 'px;',
css_after = 'left: ' + (pip_offset_base - 1) + 'px;';
}
//just a case where right is fired, but its not missing right
if (position.triggeredRight == true) {
sel_before = '.f-dropdown.open:before',
sel_after = '.f-dropdown.open:after',
css_before = 'left:-12px;',
css_after = 'left:-14px;';
}
if (sheet.insertRule) {
sheet.insertRule([sel_before, '{', css_before, '}'].join(' '), this.rule_idx);
sheet.insertRule([sel_after, '{', css_after, '}'].join(' '), this.rule_idx + 1);
} else {
sheet.addRule(sel_before, css_before, this.rule_idx);
sheet.addRule(sel_after, css_after, this.rule_idx + 1);
}
},
// Remove old dropdown rule index
clear_idx : function () {
var sheet = Foundation.stylesheet;
if (typeof this.rule_idx !== 'undefined') {
sheet.deleteRule(this.rule_idx);
sheet.deleteRule(this.rule_idx);
delete this.rule_idx;
}
},
small : function () {
return matchMedia(Foundation.media_queries.small).matches &&
!matchMedia(Foundation.media_queries.medium).matches;
},
off : function () {
this.S(this.scope).off('.fndtn.dropdown');
this.S('html, body').off('.fndtn.dropdown');
this.S(window).off('.fndtn.dropdown');
this.S('[data-dropdown-content]').off('.fndtn.dropdown');
},
reflow : function () {}
};
}(jQuery, window, window.document));

View File

@@ -0,0 +1,77 @@
;(function ($, window, document, undefined) {
'use strict';
Foundation.libs.equalizer = {
name : 'equalizer',
version : '5.5.1',
settings : {
use_tallest : true,
before_height_change : $.noop,
after_height_change : $.noop,
equalize_on_stack : false
},
init : function (scope, method, options) {
Foundation.inherit(this, 'image_loaded');
this.bindings(method, options);
this.reflow();
},
events : function () {
this.S(window).off('.equalizer').on('resize.fndtn.equalizer', function (e) {
this.reflow();
}.bind(this));
},
equalize : function (equalizer) {
var isStacked = false,
vals = equalizer.find('[' + this.attr_name() + '-watch]:visible'),
settings = equalizer.data(this.attr_name(true) + '-init');
if (vals.length === 0) {
return;
}
var firstTopOffset = vals.first().offset().top;
settings.before_height_change();
equalizer.trigger('before-height-change').trigger('before-height-change.fndth.equalizer');
vals.height('inherit');
vals.each(function () {
var el = $(this);
if (el.offset().top !== firstTopOffset) {
isStacked = true;
}
});
if (settings.equalize_on_stack === false) {
if (isStacked) {
return;
}
};
var heights = vals.map(function () { return $(this).outerHeight(false) }).get();
if (settings.use_tallest) {
var max = Math.max.apply(null, heights);
vals.css('height', max);
} else {
var min = Math.min.apply(null, heights);
vals.css('height', min);
}
settings.after_height_change();
equalizer.trigger('after-height-change').trigger('after-height-change.fndtn.equalizer');
},
reflow : function () {
var self = this;
this.S('[' + this.attr_name() + ']', this.scope).each(function () {
var $eq_target = $(this);
self.image_loaded(self.S('img', this), function () {
self.equalize($eq_target)
});
});
}
};
})(jQuery, window, window.document);

View File

@@ -0,0 +1,354 @@
;(function ($, window, document, undefined) {
'use strict';
Foundation.libs.interchange = {
name : 'interchange',
version : '5.5.1',
cache : {},
images_loaded : false,
nodes_loaded : false,
settings : {
load_attr : 'interchange',
named_queries : {
'default' : 'only screen',
'small' : Foundation.media_queries['small'],
'small-only' : Foundation.media_queries['small-only'],
'medium' : Foundation.media_queries['medium'],
'medium-only' : Foundation.media_queries['medium-only'],
'large' : Foundation.media_queries['large'],
'large-only' : Foundation.media_queries['large-only'],
'xlarge' : Foundation.media_queries['xlarge'],
'xlarge-only' : Foundation.media_queries['xlarge-only'],
'xxlarge' : Foundation.media_queries['xxlarge'],
'landscape' : 'only screen and (orientation: landscape)',
'portrait' : 'only screen and (orientation: portrait)',
'retina' : 'only screen and (-webkit-min-device-pixel-ratio: 2),' +
'only screen and (min--moz-device-pixel-ratio: 2),' +
'only screen and (-o-min-device-pixel-ratio: 2/1),' +
'only screen and (min-device-pixel-ratio: 2),' +
'only screen and (min-resolution: 192dpi),' +
'only screen and (min-resolution: 2dppx)'
},
directives : {
replace : function (el, path, trigger) {
// The trigger argument, if called within the directive, fires
// an event named after the directive on the element, passing
// any parameters along to the event that you pass to trigger.
//
// ex. trigger(), trigger([a, b, c]), or trigger(a, b, c)
//
// This allows you to bind a callback like so:
// $('#interchangeContainer').on('replace', function (e, a, b, c) {
// console.log($(this).html(), a, b, c);
// });
if (/IMG/.test(el[0].nodeName)) {
var orig_path = el[0].src;
if (new RegExp(path, 'i').test(orig_path)) {
return;
}
el[0].src = path;
return trigger(el[0].src);
}
var last_path = el.data(this.data_attr + '-last-path'),
self = this;
if (last_path == path) {
return;
}
if (/\.(gif|jpg|jpeg|tiff|png)([?#].*)?/i.test(path)) {
$(el).css('background-image', 'url(' + path + ')');
el.data('interchange-last-path', path);
return trigger(path);
}
return $.get(path, function (response) {
el.html(response);
el.data(self.data_attr + '-last-path', path);
trigger();
});
}
}
},
init : function (scope, method, options) {
Foundation.inherit(this, 'throttle random_str');
this.data_attr = this.set_data_attr();
$.extend(true, this.settings, method, options);
this.bindings(method, options);
this.load('images');
this.load('nodes');
},
get_media_hash : function () {
var mediaHash = '';
for (var queryName in this.settings.named_queries ) {
mediaHash += matchMedia(this.settings.named_queries[queryName]).matches.toString();
}
return mediaHash;
},
events : function () {
var self = this, prevMediaHash;
$(window)
.off('.interchange')
.on('resize.fndtn.interchange', self.throttle(function () {
var currMediaHash = self.get_media_hash();
if (currMediaHash !== prevMediaHash) {
self.resize();
}
prevMediaHash = currMediaHash;
}, 50));
return this;
},
resize : function () {
var cache = this.cache;
if (!this.images_loaded || !this.nodes_loaded) {
setTimeout($.proxy(this.resize, this), 50);
return;
}
for (var uuid in cache) {
if (cache.hasOwnProperty(uuid)) {
var passed = this.results(uuid, cache[uuid]);
if (passed) {
this.settings.directives[passed
.scenario[1]].call(this, passed.el, passed.scenario[0], (function (passed) {
if (arguments[0] instanceof Array) {
var args = arguments[0];
} else {
var args = Array.prototype.slice.call(arguments, 0);
}
return function() {
passed.el.trigger(passed.scenario[1], args);
}
}(passed)));
}
}
}
},
results : function (uuid, scenarios) {
var count = scenarios.length;
if (count > 0) {
var el = this.S('[' + this.add_namespace('data-uuid') + '="' + uuid + '"]');
while (count--) {
var mq, rule = scenarios[count][2];
if (this.settings.named_queries.hasOwnProperty(rule)) {
mq = matchMedia(this.settings.named_queries[rule]);
} else {
mq = matchMedia(rule);
}
if (mq.matches) {
return {el : el, scenario : scenarios[count]};
}
}
}
return false;
},
load : function (type, force_update) {
if (typeof this['cached_' + type] === 'undefined' || force_update) {
this['update_' + type]();
}
return this['cached_' + type];
},
update_images : function () {
var images = this.S('img[' + this.data_attr + ']'),
count = images.length,
i = count,
loaded_count = 0,
data_attr = this.data_attr;
this.cache = {};
this.cached_images = [];
this.images_loaded = (count === 0);
while (i--) {
loaded_count++;
if (images[i]) {
var str = images[i].getAttribute(data_attr) || '';
if (str.length > 0) {
this.cached_images.push(images[i]);
}
}
if (loaded_count === count) {
this.images_loaded = true;
this.enhance('images');
}
}
return this;
},
update_nodes : function () {
var nodes = this.S('[' + this.data_attr + ']').not('img'),
count = nodes.length,
i = count,
loaded_count = 0,
data_attr = this.data_attr;
this.cached_nodes = [];
this.nodes_loaded = (count === 0);
while (i--) {
loaded_count++;
var str = nodes[i].getAttribute(data_attr) || '';
if (str.length > 0) {
this.cached_nodes.push(nodes[i]);
}
if (loaded_count === count) {
this.nodes_loaded = true;
this.enhance('nodes');
}
}
return this;
},
enhance : function (type) {
var i = this['cached_' + type].length;
while (i--) {
this.object($(this['cached_' + type][i]));
}
return $(window).trigger('resize').trigger('resize.fndtn.interchange');
},
convert_directive : function (directive) {
var trimmed = this.trim(directive);
if (trimmed.length > 0) {
return trimmed;
}
return 'replace';
},
parse_scenario : function (scenario) {
// This logic had to be made more complex since some users were using commas in the url path
// So we cannot simply just split on a comma
var directive_match = scenario[0].match(/(.+),\s*(\w+)\s*$/),
media_query = scenario[1];
if (directive_match) {
var path = directive_match[1],
directive = directive_match[2];
} else {
var cached_split = scenario[0].split(/,\s*$/),
path = cached_split[0],
directive = '';
}
return [this.trim(path), this.convert_directive(directive), this.trim(media_query)];
},
object : function (el) {
var raw_arr = this.parse_data_attr(el),
scenarios = [],
i = raw_arr.length;
if (i > 0) {
while (i--) {
var split = raw_arr[i].split(/\(([^\)]*?)(\))$/);
if (split.length > 1) {
var params = this.parse_scenario(split);
scenarios.push(params);
}
}
}
return this.store(el, scenarios);
},
store : function (el, scenarios) {
var uuid = this.random_str(),
current_uuid = el.data(this.add_namespace('uuid', true));
if (this.cache[current_uuid]) {
return this.cache[current_uuid];
}
el.attr(this.add_namespace('data-uuid'), uuid);
return this.cache[uuid] = scenarios;
},
trim : function (str) {
if (typeof str === 'string') {
return $.trim(str);
}
return str;
},
set_data_attr : function (init) {
if (init) {
if (this.namespace.length > 0) {
return this.namespace + '-' + this.settings.load_attr;
}
return this.settings.load_attr;
}
if (this.namespace.length > 0) {
return 'data-' + this.namespace + '-' + this.settings.load_attr;
}
return 'data-' + this.settings.load_attr;
},
parse_data_attr : function (el) {
var raw = el.attr(this.attr_name()).split(/\[(.*?)\]/),
i = raw.length,
output = [];
while (i--) {
if (raw[i].replace(/[\W\d]+/, '').length > 4) {
output.push(raw[i]);
}
}
return output;
},
reflow : function () {
this.load('images', true);
this.load('nodes', true);
}
};
}(jQuery, window, window.document));

View File

@@ -0,0 +1,932 @@
;(function ($, window, document, undefined) {
'use strict';
var Modernizr = Modernizr || false;
Foundation.libs.joyride = {
name : 'joyride',
version : '5.5.1',
defaults : {
expose : false, // turn on or off the expose feature
modal : true, // Whether to cover page with modal during the tour
keyboard : true, // enable left, right and esc keystrokes
tip_location : 'bottom', // 'top' or 'bottom' in relation to parent
nub_position : 'auto', // override on a per tooltip bases
scroll_speed : 1500, // Page scrolling speed in milliseconds, 0 = no scroll animation
scroll_animation : 'linear', // supports 'swing' and 'linear', extend with jQuery UI.
timer : 0, // 0 = no timer , all other numbers = timer in milliseconds
start_timer_on_click : true, // true or false - true requires clicking the first button start the timer
start_offset : 0, // the index of the tooltip you want to start on (index of the li)
next_button : true, // true or false to control whether a next button is used
prev_button : true, // true or false to control whether a prev button is used
tip_animation : 'fade', // 'pop' or 'fade' in each tip
pause_after : [], // array of indexes where to pause the tour after
exposed : [], // array of expose elements
tip_animation_fade_speed : 300, // when tipAnimation = 'fade' this is speed in milliseconds for the transition
cookie_monster : false, // true or false to control whether cookies are used
cookie_name : 'joyride', // Name the cookie you'll use
cookie_domain : false, // Will this cookie be attached to a domain, ie. '.notableapp.com'
cookie_expires : 365, // set when you would like the cookie to expire.
tip_container : 'body', // Where will the tip be attached
abort_on_close : true, // When true, the close event will not fire any callback
tip_location_patterns : {
top : ['bottom'],
bottom : [], // bottom should not need to be repositioned
left : ['right', 'top', 'bottom'],
right : ['left', 'top', 'bottom']
},
post_ride_callback : function () {}, // A method to call once the tour closes (canceled or complete)
post_step_callback : function () {}, // A method to call after each step
pre_step_callback : function () {}, // A method to call before each step
pre_ride_callback : function () {}, // A method to call before the tour starts (passed index, tip, and cloned exposed element)
post_expose_callback : function () {}, // A method to call after an element has been exposed
template : { // HTML segments for tip layout
link : '<a href="#close" class="joyride-close-tip">&times;</a>',
timer : '<div class="joyride-timer-indicator-wrap"><span class="joyride-timer-indicator"></span></div>',
tip : '<div class="joyride-tip-guide"><span class="joyride-nub"></span></div>',
wrapper : '<div class="joyride-content-wrapper"></div>',
button : '<a href="#" class="small button joyride-next-tip"></a>',
prev_button : '<a href="#" class="small button joyride-prev-tip"></a>',
modal : '<div class="joyride-modal-bg"></div>',
expose : '<div class="joyride-expose-wrapper"></div>',
expose_cover : '<div class="joyride-expose-cover"></div>'
},
expose_add_class : '' // One or more space-separated class names to be added to exposed element
},
init : function (scope, method, options) {
Foundation.inherit(this, 'throttle random_str');
this.settings = this.settings || $.extend({}, this.defaults, (options || method));
this.bindings(method, options)
},
go_next : function () {
if (this.settings.$li.next().length < 1) {
this.end();
} else if (this.settings.timer > 0) {
clearTimeout(this.settings.automate);
this.hide();
this.show();
this.startTimer();
} else {
this.hide();
this.show();
}
},
go_prev : function () {
if (this.settings.$li.prev().length < 1) {
// Do nothing if there are no prev element
} else if (this.settings.timer > 0) {
clearTimeout(this.settings.automate);
this.hide();
this.show(null, true);
this.startTimer();
} else {
this.hide();
this.show(null, true);
}
},
events : function () {
var self = this;
$(this.scope)
.off('.joyride')
.on('click.fndtn.joyride', '.joyride-next-tip, .joyride-modal-bg', function (e) {
e.preventDefault();
this.go_next()
}.bind(this))
.on('click.fndtn.joyride', '.joyride-prev-tip', function (e) {
e.preventDefault();
this.go_prev();
}.bind(this))
.on('click.fndtn.joyride', '.joyride-close-tip', function (e) {
e.preventDefault();
this.end(this.settings.abort_on_close);
}.bind(this))
.on('keyup.fndtn.joyride', function (e) {
// Don't do anything if keystrokes are disabled
// or if the joyride is not being shown
if (!this.settings.keyboard || !this.settings.riding) {
return;
}
switch (e.which) {
case 39: // right arrow
e.preventDefault();
this.go_next();
break;
case 37: // left arrow
e.preventDefault();
this.go_prev();
break;
case 27: // escape
e.preventDefault();
this.end(this.settings.abort_on_close);
}
}.bind(this));
$(window)
.off('.joyride')
.on('resize.fndtn.joyride', self.throttle(function () {
if ($('[' + self.attr_name() + ']').length > 0 && self.settings.$next_tip && self.settings.riding) {
if (self.settings.exposed.length > 0) {
var $els = $(self.settings.exposed);
$els.each(function () {
var $this = $(this);
self.un_expose($this);
self.expose($this);
});
}
if (self.is_phone()) {
self.pos_phone();
} else {
self.pos_default(false);
}
}
}, 100));
},
start : function () {
var self = this,
$this = $('[' + this.attr_name() + ']', this.scope),
integer_settings = ['timer', 'scrollSpeed', 'startOffset', 'tipAnimationFadeSpeed', 'cookieExpires'],
int_settings_count = integer_settings.length;
if (!$this.length > 0) {
return;
}
if (!this.settings.init) {
this.events();
}
this.settings = $this.data(this.attr_name(true) + '-init');
// non configureable settings
this.settings.$content_el = $this;
this.settings.$body = $(this.settings.tip_container);
this.settings.body_offset = $(this.settings.tip_container).position();
this.settings.$tip_content = this.settings.$content_el.find('> li');
this.settings.paused = false;
this.settings.attempts = 0;
this.settings.riding = true;
// can we create cookies?
if (typeof $.cookie !== 'function') {
this.settings.cookie_monster = false;
}
// generate the tips and insert into dom.
if (!this.settings.cookie_monster || this.settings.cookie_monster && !$.cookie(this.settings.cookie_name)) {
this.settings.$tip_content.each(function (index) {
var $this = $(this);
this.settings = $.extend({}, self.defaults, self.data_options($this));
// Make sure that settings parsed from data_options are integers where necessary
var i = int_settings_count;
while (i--) {
self.settings[integer_settings[i]] = parseInt(self.settings[integer_settings[i]], 10);
}
self.create({$li : $this, index : index});
});
// show first tip
if (!this.settings.start_timer_on_click && this.settings.timer > 0) {
this.show('init');
this.startTimer();
} else {
this.show('init');
}
}
},
resume : function () {
this.set_li();
this.show();
},
tip_template : function (opts) {
var $blank, content;
opts.tip_class = opts.tip_class || '';
$blank = $(this.settings.template.tip).addClass(opts.tip_class);
content = $.trim($(opts.li).html()) +
this.prev_button_text(opts.prev_button_text, opts.index) +
this.button_text(opts.button_text) +
this.settings.template.link +
this.timer_instance(opts.index);
$blank.append($(this.settings.template.wrapper));
$blank.first().attr(this.add_namespace('data-index'), opts.index);
$('.joyride-content-wrapper', $blank).append(content);
return $blank[0];
},
timer_instance : function (index) {
var txt;
if ((index === 0 && this.settings.start_timer_on_click && this.settings.timer > 0) || this.settings.timer === 0) {
txt = '';
} else {
txt = $(this.settings.template.timer)[0].outerHTML;
}
return txt;
},
button_text : function (txt) {
if (this.settings.tip_settings.next_button) {
txt = $.trim(txt) || 'Next';
txt = $(this.settings.template.button).append(txt)[0].outerHTML;
} else {
txt = '';
}
return txt;
},
prev_button_text : function (txt, idx) {
if (this.settings.tip_settings.prev_button) {
txt = $.trim(txt) || 'Previous';
// Add the disabled class to the button if it's the first element
if (idx == 0) {
txt = $(this.settings.template.prev_button).append(txt).addClass('disabled')[0].outerHTML;
} else {
txt = $(this.settings.template.prev_button).append(txt)[0].outerHTML;
}
} else {
txt = '';
}
return txt;
},
create : function (opts) {
this.settings.tip_settings = $.extend({}, this.settings, this.data_options(opts.$li));
var buttonText = opts.$li.attr(this.add_namespace('data-button')) || opts.$li.attr(this.add_namespace('data-text')),
prevButtonText = opts.$li.attr(this.add_namespace('data-button-prev')) || opts.$li.attr(this.add_namespace('data-prev-text')),
tipClass = opts.$li.attr('class'),
$tip_content = $(this.tip_template({
tip_class : tipClass,
index : opts.index,
button_text : buttonText,
prev_button_text : prevButtonText,
li : opts.$li
}));
$(this.settings.tip_container).append($tip_content);
},
show : function (init, is_prev) {
var $timer = null;
// are we paused?
if (this.settings.$li === undefined || ($.inArray(this.settings.$li.index(), this.settings.pause_after) === -1)) {
// don't go to the next li if the tour was paused
if (this.settings.paused) {
this.settings.paused = false;
} else {
this.set_li(init, is_prev);
}
this.settings.attempts = 0;
if (this.settings.$li.length && this.settings.$target.length > 0) {
if (init) { //run when we first start
this.settings.pre_ride_callback(this.settings.$li.index(), this.settings.$next_tip);
if (this.settings.modal) {
this.show_modal();
}
}
this.settings.pre_step_callback(this.settings.$li.index(), this.settings.$next_tip);
if (this.settings.modal && this.settings.expose) {
this.expose();
}
this.settings.tip_settings = $.extend({}, this.settings, this.data_options(this.settings.$li));
this.settings.timer = parseInt(this.settings.timer, 10);
this.settings.tip_settings.tip_location_pattern = this.settings.tip_location_patterns[this.settings.tip_settings.tip_location];
// scroll and hide bg if not modal
if (!/body/i.test(this.settings.$target.selector)) {
var joyridemodalbg = $('.joyride-modal-bg');
if (/pop/i.test(this.settings.tipAnimation)) {
joyridemodalbg.hide();
} else {
joyridemodalbg.fadeOut(this.settings.tipAnimationFadeSpeed);
}
this.scroll_to();
}
if (this.is_phone()) {
this.pos_phone(true);
} else {
this.pos_default(true);
}
$timer = this.settings.$next_tip.find('.joyride-timer-indicator');
if (/pop/i.test(this.settings.tip_animation)) {
$timer.width(0);
if (this.settings.timer > 0) {
this.settings.$next_tip.show();
setTimeout(function () {
$timer.animate({
width : $timer.parent().width()
}, this.settings.timer, 'linear');
}.bind(this), this.settings.tip_animation_fade_speed);
} else {
this.settings.$next_tip.show();
}
} else if (/fade/i.test(this.settings.tip_animation)) {
$timer.width(0);
if (this.settings.timer > 0) {
this.settings.$next_tip
.fadeIn(this.settings.tip_animation_fade_speed)
.show();
setTimeout(function () {
$timer.animate({
width : $timer.parent().width()
}, this.settings.timer, 'linear');
}.bind(this), this.settings.tip_animation_fade_speed);
} else {
this.settings.$next_tip.fadeIn(this.settings.tip_animation_fade_speed);
}
}
this.settings.$current_tip = this.settings.$next_tip;
// skip non-existant targets
} else if (this.settings.$li && this.settings.$target.length < 1) {
this.show(init, is_prev);
} else {
this.end();
}
} else {
this.settings.paused = true;
}
},
is_phone : function () {
return matchMedia(Foundation.media_queries.small).matches &&
!matchMedia(Foundation.media_queries.medium).matches;
},
hide : function () {
if (this.settings.modal && this.settings.expose) {
this.un_expose();
}
if (!this.settings.modal) {
$('.joyride-modal-bg').hide();
}
// Prevent scroll bouncing...wait to remove from layout
this.settings.$current_tip.css('visibility', 'hidden');
setTimeout($.proxy(function () {
this.hide();
this.css('visibility', 'visible');
}, this.settings.$current_tip), 0);
this.settings.post_step_callback(this.settings.$li.index(),
this.settings.$current_tip);
},
set_li : function (init, is_prev) {
if (init) {
this.settings.$li = this.settings.$tip_content.eq(this.settings.start_offset);
this.set_next_tip();
this.settings.$current_tip = this.settings.$next_tip;
} else {
if (is_prev) {
this.settings.$li = this.settings.$li.prev();
} else {
this.settings.$li = this.settings.$li.next();
}
this.set_next_tip();
}
this.set_target();
},
set_next_tip : function () {
this.settings.$next_tip = $('.joyride-tip-guide').eq(this.settings.$li.index());
this.settings.$next_tip.data('closed', '');
},
set_target : function () {
var cl = this.settings.$li.attr(this.add_namespace('data-class')),
id = this.settings.$li.attr(this.add_namespace('data-id')),
$sel = function () {
if (id) {
return $(document.getElementById(id));
} else if (cl) {
return $('.' + cl).first();
} else {
return $('body');
}
};
this.settings.$target = $sel();
},
scroll_to : function () {
var window_half, tipOffset;
window_half = $(window).height() / 2;
tipOffset = Math.ceil(this.settings.$target.offset().top - window_half + this.settings.$next_tip.outerHeight());
if (tipOffset != 0) {
$('html, body').stop().animate({
scrollTop : tipOffset
}, this.settings.scroll_speed, 'swing');
}
},
paused : function () {
return ($.inArray((this.settings.$li.index() + 1), this.settings.pause_after) === -1);
},
restart : function () {
this.hide();
this.settings.$li = undefined;
this.show('init');
},
pos_default : function (init) {
var $nub = this.settings.$next_tip.find('.joyride-nub'),
nub_width = Math.ceil($nub.outerWidth() / 2),
nub_height = Math.ceil($nub.outerHeight() / 2),
toggle = init || false;
// tip must not be "display: none" to calculate position
if (toggle) {
this.settings.$next_tip.css('visibility', 'hidden');
this.settings.$next_tip.show();
}
if (!/body/i.test(this.settings.$target.selector)) {
var topAdjustment = this.settings.tip_settings.tipAdjustmentY ? parseInt(this.settings.tip_settings.tipAdjustmentY) : 0,
leftAdjustment = this.settings.tip_settings.tipAdjustmentX ? parseInt(this.settings.tip_settings.tipAdjustmentX) : 0;
if (this.bottom()) {
if (this.rtl) {
this.settings.$next_tip.css({
top : (this.settings.$target.offset().top + nub_height + this.settings.$target.outerHeight() + topAdjustment),
left : this.settings.$target.offset().left + this.settings.$target.outerWidth() - this.settings.$next_tip.outerWidth() + leftAdjustment});
} else {
this.settings.$next_tip.css({
top : (this.settings.$target.offset().top + nub_height + this.settings.$target.outerHeight() + topAdjustment),
left : this.settings.$target.offset().left + leftAdjustment});
}
this.nub_position($nub, this.settings.tip_settings.nub_position, 'top');
} else if (this.top()) {
if (this.rtl) {
this.settings.$next_tip.css({
top : (this.settings.$target.offset().top - this.settings.$next_tip.outerHeight() - nub_height + topAdjustment),
left : this.settings.$target.offset().left + this.settings.$target.outerWidth() - this.settings.$next_tip.outerWidth()});
} else {
this.settings.$next_tip.css({
top : (this.settings.$target.offset().top - this.settings.$next_tip.outerHeight() - nub_height + topAdjustment),
left : this.settings.$target.offset().left + leftAdjustment});
}
this.nub_position($nub, this.settings.tip_settings.nub_position, 'bottom');
} else if (this.right()) {
this.settings.$next_tip.css({
top : this.settings.$target.offset().top + topAdjustment,
left : (this.settings.$target.outerWidth() + this.settings.$target.offset().left + nub_width + leftAdjustment)});
this.nub_position($nub, this.settings.tip_settings.nub_position, 'left');
} else if (this.left()) {
this.settings.$next_tip.css({
top : this.settings.$target.offset().top + topAdjustment,
left : (this.settings.$target.offset().left - this.settings.$next_tip.outerWidth() - nub_width + leftAdjustment)});
this.nub_position($nub, this.settings.tip_settings.nub_position, 'right');
}
if (!this.visible(this.corners(this.settings.$next_tip)) && this.settings.attempts < this.settings.tip_settings.tip_location_pattern.length) {
$nub.removeClass('bottom')
.removeClass('top')
.removeClass('right')
.removeClass('left');
this.settings.tip_settings.tip_location = this.settings.tip_settings.tip_location_pattern[this.settings.attempts];
this.settings.attempts++;
this.pos_default();
}
} else if (this.settings.$li.length) {
this.pos_modal($nub);
}
if (toggle) {
this.settings.$next_tip.hide();
this.settings.$next_tip.css('visibility', 'visible');
}
},
pos_phone : function (init) {
var tip_height = this.settings.$next_tip.outerHeight(),
tip_offset = this.settings.$next_tip.offset(),
target_height = this.settings.$target.outerHeight(),
$nub = $('.joyride-nub', this.settings.$next_tip),
nub_height = Math.ceil($nub.outerHeight() / 2),
toggle = init || false;
$nub.removeClass('bottom')
.removeClass('top')
.removeClass('right')
.removeClass('left');
if (toggle) {
this.settings.$next_tip.css('visibility', 'hidden');
this.settings.$next_tip.show();
}
if (!/body/i.test(this.settings.$target.selector)) {
if (this.top()) {
this.settings.$next_tip.offset({top : this.settings.$target.offset().top - tip_height - nub_height});
$nub.addClass('bottom');
} else {
this.settings.$next_tip.offset({top : this.settings.$target.offset().top + target_height + nub_height});
$nub.addClass('top');
}
} else if (this.settings.$li.length) {
this.pos_modal($nub);
}
if (toggle) {
this.settings.$next_tip.hide();
this.settings.$next_tip.css('visibility', 'visible');
}
},
pos_modal : function ($nub) {
this.center();
$nub.hide();
this.show_modal();
},
show_modal : function () {
if (!this.settings.$next_tip.data('closed')) {
var joyridemodalbg = $('.joyride-modal-bg');
if (joyridemodalbg.length < 1) {
var joyridemodalbg = $(this.settings.template.modal);
joyridemodalbg.appendTo('body');
}
if (/pop/i.test(this.settings.tip_animation)) {
joyridemodalbg.show();
} else {
joyridemodalbg.fadeIn(this.settings.tip_animation_fade_speed);
}
}
},
expose : function () {
var expose,
exposeCover,
el,
origCSS,
origClasses,
randId = 'expose-' + this.random_str(6);
if (arguments.length > 0 && arguments[0] instanceof $) {
el = arguments[0];
} else if (this.settings.$target && !/body/i.test(this.settings.$target.selector)) {
el = this.settings.$target;
} else {
return false;
}
if (el.length < 1) {
if (window.console) {
console.error('element not valid', el);
}
return false;
}
expose = $(this.settings.template.expose);
this.settings.$body.append(expose);
expose.css({
top : el.offset().top,
left : el.offset().left,
width : el.outerWidth(true),
height : el.outerHeight(true)
});
exposeCover = $(this.settings.template.expose_cover);
origCSS = {
zIndex : el.css('z-index'),
position : el.css('position')
};
origClasses = el.attr('class') == null ? '' : el.attr('class');
el.css('z-index', parseInt(expose.css('z-index')) + 1);
if (origCSS.position == 'static') {
el.css('position', 'relative');
}
el.data('expose-css', origCSS);
el.data('orig-class', origClasses);
el.attr('class', origClasses + ' ' + this.settings.expose_add_class);
exposeCover.css({
top : el.offset().top,
left : el.offset().left,
width : el.outerWidth(true),
height : el.outerHeight(true)
});
if (this.settings.modal) {
this.show_modal();
}
this.settings.$body.append(exposeCover);
expose.addClass(randId);
exposeCover.addClass(randId);
el.data('expose', randId);
this.settings.post_expose_callback(this.settings.$li.index(), this.settings.$next_tip, el);
this.add_exposed(el);
},
un_expose : function () {
var exposeId,
el,
expose,
origCSS,
origClasses,
clearAll = false;
if (arguments.length > 0 && arguments[0] instanceof $) {
el = arguments[0];
} else if (this.settings.$target && !/body/i.test(this.settings.$target.selector)) {
el = this.settings.$target;
} else {
return false;
}
if (el.length < 1) {
if (window.console) {
console.error('element not valid', el);
}
return false;
}
exposeId = el.data('expose');
expose = $('.' + exposeId);
if (arguments.length > 1) {
clearAll = arguments[1];
}
if (clearAll === true) {
$('.joyride-expose-wrapper,.joyride-expose-cover').remove();
} else {
expose.remove();
}
origCSS = el.data('expose-css');
if (origCSS.zIndex == 'auto') {
el.css('z-index', '');
} else {
el.css('z-index', origCSS.zIndex);
}
if (origCSS.position != el.css('position')) {
if (origCSS.position == 'static') {// this is default, no need to set it.
el.css('position', '');
} else {
el.css('position', origCSS.position);
}
}
origClasses = el.data('orig-class');
el.attr('class', origClasses);
el.removeData('orig-classes');
el.removeData('expose');
el.removeData('expose-z-index');
this.remove_exposed(el);
},
add_exposed : function (el) {
this.settings.exposed = this.settings.exposed || [];
if (el instanceof $ || typeof el === 'object') {
this.settings.exposed.push(el[0]);
} else if (typeof el == 'string') {
this.settings.exposed.push(el);
}
},
remove_exposed : function (el) {
var search, i;
if (el instanceof $) {
search = el[0]
} else if (typeof el == 'string') {
search = el;
}
this.settings.exposed = this.settings.exposed || [];
i = this.settings.exposed.length;
while (i--) {
if (this.settings.exposed[i] == search) {
this.settings.exposed.splice(i, 1);
return;
}
}
},
center : function () {
var $w = $(window);
this.settings.$next_tip.css({
top : ((($w.height() - this.settings.$next_tip.outerHeight()) / 2) + $w.scrollTop()),
left : ((($w.width() - this.settings.$next_tip.outerWidth()) / 2) + $w.scrollLeft())
});
return true;
},
bottom : function () {
return /bottom/i.test(this.settings.tip_settings.tip_location);
},
top : function () {
return /top/i.test(this.settings.tip_settings.tip_location);
},
right : function () {
return /right/i.test(this.settings.tip_settings.tip_location);
},
left : function () {
return /left/i.test(this.settings.tip_settings.tip_location);
},
corners : function (el) {
var w = $(window),
window_half = w.height() / 2,
//using this to calculate since scroll may not have finished yet.
tipOffset = Math.ceil(this.settings.$target.offset().top - window_half + this.settings.$next_tip.outerHeight()),
right = w.width() + w.scrollLeft(),
offsetBottom = w.height() + tipOffset,
bottom = w.height() + w.scrollTop(),
top = w.scrollTop();
if (tipOffset < top) {
if (tipOffset < 0) {
top = 0;
} else {
top = tipOffset;
}
}
if (offsetBottom > bottom) {
bottom = offsetBottom;
}
return [
el.offset().top < top,
right < el.offset().left + el.outerWidth(),
bottom < el.offset().top + el.outerHeight(),
w.scrollLeft() > el.offset().left
];
},
visible : function (hidden_corners) {
var i = hidden_corners.length;
while (i--) {
if (hidden_corners[i]) {
return false;
}
}
return true;
},
nub_position : function (nub, pos, def) {
if (pos === 'auto') {
nub.addClass(def);
} else {
nub.addClass(pos);
}
},
startTimer : function () {
if (this.settings.$li.length) {
this.settings.automate = setTimeout(function () {
this.hide();
this.show();
this.startTimer();
}.bind(this), this.settings.timer);
} else {
clearTimeout(this.settings.automate);
}
},
end : function (abort) {
if (this.settings.cookie_monster) {
$.cookie(this.settings.cookie_name, 'ridden', {expires : this.settings.cookie_expires, domain : this.settings.cookie_domain});
}
if (this.settings.timer > 0) {
clearTimeout(this.settings.automate);
}
if (this.settings.modal && this.settings.expose) {
this.un_expose();
}
// Unplug keystrokes listener
$(this.scope).off('keyup.joyride')
this.settings.$next_tip.data('closed', true);
this.settings.riding = false;
$('.joyride-modal-bg').hide();
this.settings.$current_tip.hide();
if (typeof abort === 'undefined' || abort === false) {
this.settings.post_step_callback(this.settings.$li.index(), this.settings.$current_tip);
this.settings.post_ride_callback(this.settings.$li.index(), this.settings.$current_tip);
}
$('.joyride-tip-guide').remove();
},
off : function () {
$(this.scope).off('.joyride');
$(window).off('.joyride');
$('.joyride-close-tip, .joyride-next-tip, .joyride-modal-bg').off('.joyride');
$('.joyride-tip-guide, .joyride-modal-bg').remove();
clearTimeout(this.settings.automate);
this.settings = {};
},
reflow : function () {}
};
}(jQuery, window, window.document));

View File

@@ -0,0 +1,703 @@
/*
* Foundation Responsive Library
* http://foundation.zurb.com
* Copyright 2014, ZURB
* Free to use under the MIT license.
* http://www.opensource.org/licenses/mit-license.php
*/
(function ($, window, document, undefined) {
'use strict';
var header_helpers = function (class_array) {
var i = class_array.length;
var head = $('head');
while (i--) {
if (head.has('.' + class_array[i]).length === 0) {
head.append('<meta class="' + class_array[i] + '" />');
}
}
};
header_helpers([
'foundation-mq-small',
'foundation-mq-small-only',
'foundation-mq-medium',
'foundation-mq-medium-only',
'foundation-mq-large',
'foundation-mq-large-only',
'foundation-mq-xlarge',
'foundation-mq-xlarge-only',
'foundation-mq-xxlarge',
'foundation-data-attribute-namespace']);
// Enable FastClick if present
$(function () {
if (typeof FastClick !== 'undefined') {
// Don't attach to body if undefined
if (typeof document.body !== 'undefined') {
FastClick.attach(document.body);
}
}
});
// private Fast Selector wrapper,
// returns jQuery object. Only use where
// getElementById is not available.
var S = function (selector, context) {
if (typeof selector === 'string') {
if (context) {
var cont;
if (context.jquery) {
cont = context[0];
if (!cont) {
return context;
}
} else {
cont = context;
}
return $(cont.querySelectorAll(selector));
}
return $(document.querySelectorAll(selector));
}
return $(selector, context);
};
// Namespace functions.
var attr_name = function (init) {
var arr = [];
if (!init) {
arr.push('data');
}
if (this.namespace.length > 0) {
arr.push(this.namespace);
}
arr.push(this.name);
return arr.join('-');
};
var add_namespace = function (str) {
var parts = str.split('-'),
i = parts.length,
arr = [];
while (i--) {
if (i !== 0) {
arr.push(parts[i]);
} else {
if (this.namespace.length > 0) {
arr.push(this.namespace, parts[i]);
} else {
arr.push(parts[i]);
}
}
}
return arr.reverse().join('-');
};
// Event binding and data-options updating.
var bindings = function (method, options) {
var self = this,
bind = function(){
var $this = S(this),
should_bind_events = !$this.data(self.attr_name(true) + '-init');
$this.data(self.attr_name(true) + '-init', $.extend({}, self.settings, (options || method), self.data_options($this)));
if (should_bind_events) {
self.events(this);
}
};
if (S(this.scope).is('[' + this.attr_name() +']')) {
bind.call(this.scope);
} else {
S('[' + this.attr_name() +']', this.scope).each(bind);
}
// # Patch to fix #5043 to move this *after* the if/else clause in order for Backbone and similar frameworks to have improved control over event binding and data-options updating.
if (typeof method === 'string') {
return this[method].call(this, options);
}
};
var single_image_loaded = function (image, callback) {
function loaded () {
callback(image[0]);
}
function bindLoad () {
this.one('load', loaded);
if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) {
var src = this.attr( 'src' ),
param = src.match( /\?/ ) ? '&' : '?';
param += 'random=' + (new Date()).getTime();
this.attr('src', src + param);
}
}
if (!image.attr('src')) {
loaded();
return;
}
if (image[0].complete || image[0].readyState === 4) {
loaded();
} else {
bindLoad.call(image);
}
};
/*
https://github.com/paulirish/matchMedia.js
*/
window.matchMedia = window.matchMedia || (function ( doc ) {
'use strict';
var bool,
docElem = doc.documentElement,
refNode = docElem.firstElementChild || docElem.firstChild,
// fakeBody required for <FF4 when executed in <head>
fakeBody = doc.createElement( 'body' ),
div = doc.createElement( 'div' );
div.id = 'mq-test-1';
div.style.cssText = 'position:absolute;top:-100em';
fakeBody.style.background = 'none';
fakeBody.appendChild(div);
return function (q) {
div.innerHTML = '&shy;<style media="' + q + '"> #mq-test-1 { width: 42px; }</style>';
docElem.insertBefore( fakeBody, refNode );
bool = div.offsetWidth === 42;
docElem.removeChild( fakeBody );
return {
matches : bool,
media : q
};
};
}( document ));
/*
* jquery.requestAnimationFrame
* https://github.com/gnarf37/jquery-requestAnimationFrame
* Requires jQuery 1.8+
*
* Copyright (c) 2012 Corey Frang
* Licensed under the MIT license.
*/
(function(jQuery) {
// requestAnimationFrame polyfill adapted from Erik Möller
// fixes from Paul Irish and Tino Zijdel
// http://paulirish.com/2011/requestanimationframe-for-smart-animating/
// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating
var animating,
lastTime = 0,
vendors = ['webkit', 'moz'],
requestAnimationFrame = window.requestAnimationFrame,
cancelAnimationFrame = window.cancelAnimationFrame,
jqueryFxAvailable = 'undefined' !== typeof jQuery.fx;
for (; lastTime < vendors.length && !requestAnimationFrame; lastTime++) {
requestAnimationFrame = window[ vendors[lastTime] + 'RequestAnimationFrame' ];
cancelAnimationFrame = cancelAnimationFrame ||
window[ vendors[lastTime] + 'CancelAnimationFrame' ] ||
window[ vendors[lastTime] + 'CancelRequestAnimationFrame' ];
}
function raf() {
if (animating) {
requestAnimationFrame(raf);
if (jqueryFxAvailable) {
jQuery.fx.tick();
}
}
}
if (requestAnimationFrame) {
// use rAF
window.requestAnimationFrame = requestAnimationFrame;
window.cancelAnimationFrame = cancelAnimationFrame;
if (jqueryFxAvailable) {
jQuery.fx.timer = function (timer) {
if (timer() && jQuery.timers.push(timer) && !animating) {
animating = true;
raf();
}
};
jQuery.fx.stop = function () {
animating = false;
};
}
} else {
// polyfill
window.requestAnimationFrame = function (callback) {
var currTime = new Date().getTime(),
timeToCall = Math.max(0, 16 - (currTime - lastTime)),
id = window.setTimeout(function () {
callback(currTime + timeToCall);
}, timeToCall);
lastTime = currTime + timeToCall;
return id;
};
window.cancelAnimationFrame = function (id) {
clearTimeout(id);
};
}
}( $ ));
function removeQuotes (string) {
if (typeof string === 'string' || string instanceof String) {
string = string.replace(/^['\\/"]+|(;\s?})+|['\\/"]+$/g, '');
}
return string;
}
window.Foundation = {
name : 'Foundation',
version : '5.5.1',
media_queries : {
'small' : S('.foundation-mq-small').css('font-family').replace(/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g, ''),
'small-only' : S('.foundation-mq-small-only').css('font-family').replace(/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g, ''),
'medium' : S('.foundation-mq-medium').css('font-family').replace(/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g, ''),
'medium-only' : S('.foundation-mq-medium-only').css('font-family').replace(/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g, ''),
'large' : S('.foundation-mq-large').css('font-family').replace(/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g, ''),
'large-only' : S('.foundation-mq-large-only').css('font-family').replace(/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g, ''),
'xlarge' : S('.foundation-mq-xlarge').css('font-family').replace(/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g, ''),
'xlarge-only' : S('.foundation-mq-xlarge-only').css('font-family').replace(/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g, ''),
'xxlarge' : S('.foundation-mq-xxlarge').css('font-family').replace(/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g, '')
},
stylesheet : $('<style></style>').appendTo('head')[0].sheet,
global : {
namespace : undefined
},
init : function (scope, libraries, method, options, response) {
var args = [scope, method, options, response],
responses = [];
// check RTL
this.rtl = /rtl/i.test(S('html').attr('dir'));
// set foundation global scope
this.scope = scope || this.scope;
this.set_namespace();
if (libraries && typeof libraries === 'string' && !/reflow/i.test(libraries)) {
if (this.libs.hasOwnProperty(libraries)) {
responses.push(this.init_lib(libraries, args));
}
} else {
for (var lib in this.libs) {
responses.push(this.init_lib(lib, libraries));
}
}
S(window).load(function () {
S(window)
.trigger('resize.fndtn.clearing')
.trigger('resize.fndtn.dropdown')
.trigger('resize.fndtn.equalizer')
.trigger('resize.fndtn.interchange')
.trigger('resize.fndtn.joyride')
.trigger('resize.fndtn.magellan')
.trigger('resize.fndtn.topbar')
.trigger('resize.fndtn.slider');
});
return scope;
},
init_lib : function (lib, args) {
if (this.libs.hasOwnProperty(lib)) {
this.patch(this.libs[lib]);
if (args && args.hasOwnProperty(lib)) {
if (typeof this.libs[lib].settings !== 'undefined') {
$.extend(true, this.libs[lib].settings, args[lib]);
} else if (typeof this.libs[lib].defaults !== 'undefined') {
$.extend(true, this.libs[lib].defaults, args[lib]);
}
return this.libs[lib].init.apply(this.libs[lib], [this.scope, args[lib]]);
}
args = args instanceof Array ? args : new Array(args);
return this.libs[lib].init.apply(this.libs[lib], args);
}
return function () {};
},
patch : function (lib) {
lib.scope = this.scope;
lib.namespace = this.global.namespace;
lib.rtl = this.rtl;
lib['data_options'] = this.utils.data_options;
lib['attr_name'] = attr_name;
lib['add_namespace'] = add_namespace;
lib['bindings'] = bindings;
lib['S'] = this.utils.S;
},
inherit : function (scope, methods) {
var methods_arr = methods.split(' '),
i = methods_arr.length;
while (i--) {
if (this.utils.hasOwnProperty(methods_arr[i])) {
scope[methods_arr[i]] = this.utils[methods_arr[i]];
}
}
},
set_namespace : function () {
// Description:
// Don't bother reading the namespace out of the meta tag
// if the namespace has been set globally in javascript
//
// Example:
// Foundation.global.namespace = 'my-namespace';
// or make it an empty string:
// Foundation.global.namespace = '';
//
//
// If the namespace has not been set (is undefined), try to read it out of the meta element.
// Otherwise use the globally defined namespace, even if it's empty ('')
var namespace = ( this.global.namespace === undefined ) ? $('.foundation-data-attribute-namespace').css('font-family') : this.global.namespace;
// Finally, if the namsepace is either undefined or false, set it to an empty string.
// Otherwise use the namespace value.
this.global.namespace = ( namespace === undefined || /false/i.test(namespace) ) ? '' : namespace;
},
libs : {},
// methods that can be inherited in libraries
utils : {
// Description:
// Fast Selector wrapper returns jQuery object. Only use where getElementById
// is not available.
//
// Arguments:
// Selector (String): CSS selector describing the element(s) to be
// returned as a jQuery object.
//
// Scope (String): CSS selector describing the area to be searched. Default
// is document.
//
// Returns:
// Element (jQuery Object): jQuery object containing elements matching the
// selector within the scope.
S : S,
// Description:
// Executes a function a max of once every n milliseconds
//
// Arguments:
// Func (Function): Function to be throttled.
//
// Delay (Integer): Function execution threshold in milliseconds.
//
// Returns:
// Lazy_function (Function): Function with throttling applied.
throttle : function (func, delay) {
var timer = null;
return function () {
var context = this, args = arguments;
if (timer == null) {
timer = setTimeout(function () {
func.apply(context, args);
timer = null;
}, delay);
}
};
},
// Description:
// Executes a function when it stops being invoked for n seconds
// Modified version of _.debounce() http://underscorejs.org
//
// Arguments:
// Func (Function): Function to be debounced.
//
// Delay (Integer): Function execution threshold in milliseconds.
//
// Immediate (Bool): Whether the function should be called at the beginning
// of the delay instead of the end. Default is false.
//
// Returns:
// Lazy_function (Function): Function with debouncing applied.
debounce : function (func, delay, immediate) {
var timeout, result;
return function () {
var context = this, args = arguments;
var later = function () {
timeout = null;
if (!immediate) {
result = func.apply(context, args);
}
};
var callNow = immediate && !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, delay);
if (callNow) {
result = func.apply(context, args);
}
return result;
};
},
// Description:
// Parses data-options attribute
//
// Arguments:
// El (jQuery Object): Element to be parsed.
//
// Returns:
// Options (Javascript Object): Contents of the element's data-options
// attribute.
data_options : function (el, data_attr_name) {
data_attr_name = data_attr_name || 'options';
var opts = {}, ii, p, opts_arr,
data_options = function (el) {
var namespace = Foundation.global.namespace;
if (namespace.length > 0) {
return el.data(namespace + '-' + data_attr_name);
}
return el.data(data_attr_name);
};
var cached_options = data_options(el);
if (typeof cached_options === 'object') {
return cached_options;
}
opts_arr = (cached_options || ':').split(';');
ii = opts_arr.length;
function isNumber (o) {
return !isNaN (o - 0) && o !== null && o !== '' && o !== false && o !== true;
}
function trim (str) {
if (typeof str === 'string') {
return $.trim(str);
}
return str;
}
while (ii--) {
p = opts_arr[ii].split(':');
p = [p[0], p.slice(1).join(':')];
if (/true/i.test(p[1])) {
p[1] = true;
}
if (/false/i.test(p[1])) {
p[1] = false;
}
if (isNumber(p[1])) {
if (p[1].indexOf('.') === -1) {
p[1] = parseInt(p[1], 10);
} else {
p[1] = parseFloat(p[1]);
}
}
if (p.length === 2 && p[0].length > 0) {
opts[trim(p[0])] = trim(p[1]);
}
}
return opts;
},
// Description:
// Adds JS-recognizable media queries
//
// Arguments:
// Media (String): Key string for the media query to be stored as in
// Foundation.media_queries
//
// Class (String): Class name for the generated <meta> tag
register_media : function (media, media_class) {
if (Foundation.media_queries[media] === undefined) {
$('head').append('<meta class="' + media_class + '"/>');
Foundation.media_queries[media] = removeQuotes($('.' + media_class).css('font-family'));
}
},
// Description:
// Add custom CSS within a JS-defined media query
//
// Arguments:
// Rule (String): CSS rule to be appended to the document.
//
// Media (String): Optional media query string for the CSS rule to be
// nested under.
add_custom_rule : function (rule, media) {
if (media === undefined && Foundation.stylesheet) {
Foundation.stylesheet.insertRule(rule, Foundation.stylesheet.cssRules.length);
} else {
var query = Foundation.media_queries[media];
if (query !== undefined) {
Foundation.stylesheet.insertRule('@media ' +
Foundation.media_queries[media] + '{ ' + rule + ' }');
}
}
},
// Description:
// Performs a callback function when an image is fully loaded
//
// Arguments:
// Image (jQuery Object): Image(s) to check if loaded.
//
// Callback (Function): Function to execute when image is fully loaded.
image_loaded : function (images, callback) {
var self = this,
unloaded = images.length;
if (unloaded === 0) {
callback(images);
}
images.each(function () {
single_image_loaded(self.S(this), function () {
unloaded -= 1;
if (unloaded === 0) {
callback(images);
}
});
});
},
// Description:
// Returns a random, alphanumeric string
//
// Arguments:
// Length (Integer): Length of string to be generated. Defaults to random
// integer.
//
// Returns:
// Rand (String): Pseudo-random, alphanumeric string.
random_str : function () {
if (!this.fidx) {
this.fidx = 0;
}
this.prefix = this.prefix || [(this.name || 'F'), (+new Date).toString(36)].join('-');
return this.prefix + (this.fidx++).toString(36);
},
// Description:
// Helper for window.matchMedia
//
// Arguments:
// mq (String): Media query
//
// Returns:
// (Boolean): Whether the media query passes or not
match : function (mq) {
return window.matchMedia(mq).matches;
},
// Description:
// Helpers for checking Foundation default media queries with JS
//
// Returns:
// (Boolean): Whether the media query passes or not
is_small_up : function () {
return this.match(Foundation.media_queries.small);
},
is_medium_up : function () {
return this.match(Foundation.media_queries.medium);
},
is_large_up : function () {
return this.match(Foundation.media_queries.large);
},
is_xlarge_up : function () {
return this.match(Foundation.media_queries.xlarge);
},
is_xxlarge_up : function () {
return this.match(Foundation.media_queries.xxlarge);
},
is_small_only : function () {
return !this.is_medium_up() && !this.is_large_up() && !this.is_xlarge_up() && !this.is_xxlarge_up();
},
is_medium_only : function () {
return this.is_medium_up() && !this.is_large_up() && !this.is_xlarge_up() && !this.is_xxlarge_up();
},
is_large_only : function () {
return this.is_medium_up() && this.is_large_up() && !this.is_xlarge_up() && !this.is_xxlarge_up();
},
is_xlarge_only : function () {
return this.is_medium_up() && this.is_large_up() && this.is_xlarge_up() && !this.is_xxlarge_up();
},
is_xxlarge_only : function () {
return this.is_medium_up() && this.is_large_up() && this.is_xlarge_up() && this.is_xxlarge_up();
}
}
};
$.fn.foundation = function () {
var args = Array.prototype.slice.call(arguments, 0);
return this.each(function () {
Foundation.init.apply(Foundation, [this].concat(args));
return this;
});
};
}(jQuery, window, window.document));

View File

@@ -0,0 +1,203 @@
;(function ($, window, document, undefined) {
'use strict';
Foundation.libs['magellan-expedition'] = {
name : 'magellan-expedition',
version : '5.5.1',
settings : {
active_class : 'active',
threshold : 0, // pixels from the top of the expedition for it to become fixes
destination_threshold : 20, // pixels from the top of destination for it to be considered active
throttle_delay : 30, // calculation throttling to increase framerate
fixed_top : 0, // top distance in pixels assigend to the fixed element on scroll
offset_by_height : true, // whether to offset the destination by the expedition height. Usually you want this to be true, unless your expedition is on the side.
duration : 700, // animation duration time
easing : 'swing' // animation easing
},
init : function (scope, method, options) {
Foundation.inherit(this, 'throttle');
this.bindings(method, options);
},
events : function () {
var self = this,
S = self.S,
settings = self.settings;
// initialize expedition offset
self.set_expedition_position();
S(self.scope)
.off('.magellan')
.on('click.fndtn.magellan', '[' + self.add_namespace('data-magellan-arrival') + '] a[href^="#"]', function (e) {
e.preventDefault();
var expedition = $(this).closest('[' + self.attr_name() + ']'),
settings = expedition.data('magellan-expedition-init'),
hash = this.hash.split('#').join(''),
target = $('a[name="' + hash + '"]');
if (target.length === 0) {
target = $('#' + hash);
}
// Account for expedition height if fixed position
var scroll_top = target.offset().top - settings.destination_threshold + 1;
if (settings.offset_by_height) {
scroll_top = scroll_top - expedition.outerHeight();
}
$('html, body').stop().animate({
'scrollTop' : scroll_top
}, settings.duration, settings.easing, function () {
if (history.pushState) {
history.pushState(null, null, '#' + hash);
} else {
location.hash = '#' + hash;
}
});
})
.on('scroll.fndtn.magellan', self.throttle(this.check_for_arrivals.bind(this), settings.throttle_delay));
$(window)
.on('resize.fndtn.magellan', self.throttle(this.set_expedition_position.bind(this), settings.throttle_delay));
},
check_for_arrivals : function () {
var self = this;
self.update_arrivals();
self.update_expedition_positions();
},
set_expedition_position : function () {
var self = this;
$('[' + this.attr_name() + '=fixed]', self.scope).each(function (idx, el) {
var expedition = $(this),
settings = expedition.data('magellan-expedition-init'),
styles = expedition.attr('styles'), // save styles
top_offset, fixed_top;
expedition.attr('style', '');
top_offset = expedition.offset().top + settings.threshold;
//set fixed-top by attribute
fixed_top = parseInt(expedition.data('magellan-fixed-top'));
if (!isNaN(fixed_top)) {
self.settings.fixed_top = fixed_top;
}
expedition.data(self.data_attr('magellan-top-offset'), top_offset);
expedition.attr('style', styles);
});
},
update_expedition_positions : function () {
var self = this,
window_top_offset = $(window).scrollTop();
$('[' + this.attr_name() + '=fixed]', self.scope).each(function () {
var expedition = $(this),
settings = expedition.data('magellan-expedition-init'),
styles = expedition.attr('style'), // save styles
top_offset = expedition.data('magellan-top-offset');
//scroll to the top distance
if (window_top_offset + self.settings.fixed_top >= top_offset) {
// Placeholder allows height calculations to be consistent even when
// appearing to switch between fixed/non-fixed placement
var placeholder = expedition.prev('[' + self.add_namespace('data-magellan-expedition-clone') + ']');
if (placeholder.length === 0) {
placeholder = expedition.clone();
placeholder.removeAttr(self.attr_name());
placeholder.attr(self.add_namespace('data-magellan-expedition-clone'), '');
expedition.before(placeholder);
}
expedition.css({position :'fixed', top : settings.fixed_top}).addClass('fixed');
} else {
expedition.prev('[' + self.add_namespace('data-magellan-expedition-clone') + ']').remove();
expedition.attr('style', styles).css('position', '').css('top', '').removeClass('fixed');
}
});
},
update_arrivals : function () {
var self = this,
window_top_offset = $(window).scrollTop();
$('[' + this.attr_name() + ']', self.scope).each(function () {
var expedition = $(this),
settings = expedition.data(self.attr_name(true) + '-init'),
offsets = self.offsets(expedition, window_top_offset),
arrivals = expedition.find('[' + self.add_namespace('data-magellan-arrival') + ']'),
active_item = false;
offsets.each(function (idx, item) {
if (item.viewport_offset >= item.top_offset) {
var arrivals = expedition.find('[' + self.add_namespace('data-magellan-arrival') + ']');
arrivals.not(item.arrival).removeClass(settings.active_class);
item.arrival.addClass(settings.active_class);
active_item = true;
return true;
}
});
if (!active_item) {
arrivals.removeClass(settings.active_class);
}
});
},
offsets : function (expedition, window_offset) {
var self = this,
settings = expedition.data(self.attr_name(true) + '-init'),
viewport_offset = window_offset;
return expedition.find('[' + self.add_namespace('data-magellan-arrival') + ']').map(function (idx, el) {
var name = $(this).data(self.data_attr('magellan-arrival')),
dest = $('[' + self.add_namespace('data-magellan-destination') + '=' + name + ']');
if (dest.length > 0) {
var top_offset = dest.offset().top - settings.destination_threshold;
if (settings.offset_by_height) {
top_offset = top_offset - expedition.outerHeight();
}
top_offset = Math.floor(top_offset);
return {
destination : dest,
arrival : $(this),
top_offset : top_offset,
viewport_offset : viewport_offset
}
}
}).sort(function (a, b) {
if (a.top_offset < b.top_offset) {
return -1;
}
if (a.top_offset > b.top_offset) {
return 1;
}
return 0;
});
},
data_attr : function (str) {
if (this.namespace.length > 0) {
return this.namespace + '-' + str;
}
return str;
},
off : function () {
this.S(this.scope).off('.magellan');
this.S(window).off('.magellan');
},
reflow : function () {
var self = this;
// remove placeholder expeditions used for height calculation purposes
$('[' + self.add_namespace('data-magellan-expedition-clone') + ']', self.scope).remove();
}
};
}(jQuery, window, window.document));

View File

@@ -0,0 +1,152 @@
;(function ($, window, document, undefined) {
'use strict';
Foundation.libs.offcanvas = {
name : 'offcanvas',
version : '5.5.1',
settings : {
open_method : 'move',
close_on_click : false
},
init : function (scope, method, options) {
this.bindings(method, options);
},
events : function () {
var self = this,
S = self.S,
move_class = '',
right_postfix = '',
left_postfix = '';
if (this.settings.open_method === 'move') {
move_class = 'move-';
right_postfix = 'right';
left_postfix = 'left';
} else if (this.settings.open_method === 'overlap_single') {
move_class = 'offcanvas-overlap-';
right_postfix = 'right';
left_postfix = 'left';
} else if (this.settings.open_method === 'overlap') {
move_class = 'offcanvas-overlap';
}
S(this.scope).off('.offcanvas')
.on('click.fndtn.offcanvas', '.left-off-canvas-toggle', function (e) {
self.click_toggle_class(e, move_class + right_postfix);
if (self.settings.open_method !== 'overlap') {
S('.left-submenu').removeClass(move_class + right_postfix);
}
$('.left-off-canvas-toggle').attr('aria-expanded', 'true');
})
.on('click.fndtn.offcanvas', '.left-off-canvas-menu a', function (e) {
var settings = self.get_settings(e);
var parent = S(this).parent();
if (settings.close_on_click && !parent.hasClass('has-submenu') && !parent.hasClass('back')) {
self.hide.call(self, move_class + right_postfix, self.get_wrapper(e));
parent.parent().removeClass(move_class + right_postfix);
} else if (S(this).parent().hasClass('has-submenu')) {
e.preventDefault();
S(this).siblings('.left-submenu').toggleClass(move_class + right_postfix);
} else if (parent.hasClass('back')) {
e.preventDefault();
parent.parent().removeClass(move_class + right_postfix);
}
$('.left-off-canvas-toggle').attr('aria-expanded', 'true');
})
.on('click.fndtn.offcanvas', '.right-off-canvas-toggle', function (e) {
self.click_toggle_class(e, move_class + left_postfix);
if (self.settings.open_method !== 'overlap') {
S('.right-submenu').removeClass(move_class + left_postfix);
}
$('.right-off-canvas-toggle').attr('aria-expanded', 'true');
})
.on('click.fndtn.offcanvas', '.right-off-canvas-menu a', function (e) {
var settings = self.get_settings(e);
var parent = S(this).parent();
if (settings.close_on_click && !parent.hasClass('has-submenu') && !parent.hasClass('back')) {
self.hide.call(self, move_class + left_postfix, self.get_wrapper(e));
parent.parent().removeClass(move_class + left_postfix);
} else if (S(this).parent().hasClass('has-submenu')) {
e.preventDefault();
S(this).siblings('.right-submenu').toggleClass(move_class + left_postfix);
} else if (parent.hasClass('back')) {
e.preventDefault();
parent.parent().removeClass(move_class + left_postfix);
}
$('.right-off-canvas-toggle').attr('aria-expanded', 'true');
})
.on('click.fndtn.offcanvas', '.exit-off-canvas', function (e) {
self.click_remove_class(e, move_class + left_postfix);
S('.right-submenu').removeClass(move_class + left_postfix);
if (right_postfix) {
self.click_remove_class(e, move_class + right_postfix);
S('.left-submenu').removeClass(move_class + left_postfix);
}
$('.right-off-canvas-toggle').attr('aria-expanded', 'true');
})
.on('click.fndtn.offcanvas', '.exit-off-canvas', function (e) {
self.click_remove_class(e, move_class + left_postfix);
$('.left-off-canvas-toggle').attr('aria-expanded', 'false');
if (right_postfix) {
self.click_remove_class(e, move_class + right_postfix);
$('.right-off-canvas-toggle').attr('aria-expanded', 'false');
}
});
},
toggle : function (class_name, $off_canvas) {
$off_canvas = $off_canvas || this.get_wrapper();
if ($off_canvas.is('.' + class_name)) {
this.hide(class_name, $off_canvas);
} else {
this.show(class_name, $off_canvas);
}
},
show : function (class_name, $off_canvas) {
$off_canvas = $off_canvas || this.get_wrapper();
$off_canvas.trigger('open').trigger('open.fndtn.offcanvas');
$off_canvas.addClass(class_name);
},
hide : function (class_name, $off_canvas) {
$off_canvas = $off_canvas || this.get_wrapper();
$off_canvas.trigger('close').trigger('close.fndtn.offcanvas');
$off_canvas.removeClass(class_name);
},
click_toggle_class : function (e, class_name) {
e.preventDefault();
var $off_canvas = this.get_wrapper(e);
this.toggle(class_name, $off_canvas);
},
click_remove_class : function (e, class_name) {
e.preventDefault();
var $off_canvas = this.get_wrapper(e);
this.hide(class_name, $off_canvas);
},
get_settings : function (e) {
var offcanvas = this.S(e.target).closest('[' + this.attr_name() + ']');
return offcanvas.data(this.attr_name(true) + '-init') || this.settings;
},
get_wrapper : function (e) {
var $off_canvas = this.S(e ? e.target : this.scope).closest('.off-canvas-wrap');
if ($off_canvas.length === 0) {
$off_canvas = this.S('.off-canvas-wrap');
}
return $off_canvas;
},
reflow : function () {}
};
}(jQuery, window, window.document));

View File

@@ -0,0 +1,476 @@
;(function ($, window, document, undefined) {
'use strict';
var noop = function () {};
var Orbit = function (el, settings) {
// Don't reinitialize plugin
if (el.hasClass(settings.slides_container_class)) {
return this;
}
var self = this,
container,
slides_container = el,
number_container,
bullets_container,
timer_container,
idx = 0,
animate,
timer,
locked = false,
adjust_height_after = false;
self.slides = function () {
return slides_container.children(settings.slide_selector);
};
self.slides().first().addClass(settings.active_slide_class);
self.update_slide_number = function (index) {
if (settings.slide_number) {
number_container.find('span:first').text(parseInt(index) + 1);
number_container.find('span:last').text(self.slides().length);
}
if (settings.bullets) {
bullets_container.children().removeClass(settings.bullets_active_class);
$(bullets_container.children().get(index)).addClass(settings.bullets_active_class);
}
};
self.update_active_link = function (index) {
var link = $('[data-orbit-link="' + self.slides().eq(index).attr('data-orbit-slide') + '"]');
link.siblings().removeClass(settings.bullets_active_class);
link.addClass(settings.bullets_active_class);
};
self.build_markup = function () {
slides_container.wrap('<div class="' + settings.container_class + '"></div>');
container = slides_container.parent();
slides_container.addClass(settings.slides_container_class);
if (settings.stack_on_small) {
container.addClass(settings.stack_on_small_class);
}
if (settings.navigation_arrows) {
container.append($('<a href="#"><span></span></a>').addClass(settings.prev_class));
container.append($('<a href="#"><span></span></a>').addClass(settings.next_class));
}
if (settings.timer) {
timer_container = $('<div>').addClass(settings.timer_container_class);
timer_container.append('<span>');
timer_container.append($('<div>').addClass(settings.timer_progress_class));
timer_container.addClass(settings.timer_paused_class);
container.append(timer_container);
}
if (settings.slide_number) {
number_container = $('<div>').addClass(settings.slide_number_class);
number_container.append('<span></span> ' + settings.slide_number_text + ' <span></span>');
container.append(number_container);
}
if (settings.bullets) {
bullets_container = $('<ol>').addClass(settings.bullets_container_class);
container.append(bullets_container);
bullets_container.wrap('<div class="orbit-bullets-container"></div>');
self.slides().each(function (idx, el) {
var bullet = $('<li>').attr('data-orbit-slide', idx).on('click', self.link_bullet);;
bullets_container.append(bullet);
});
}
};
self._goto = function (next_idx, start_timer) {
// if (locked) {return false;}
if (next_idx === idx) {return false;}
if (typeof timer === 'object') {timer.restart();}
var slides = self.slides();
var dir = 'next';
locked = true;
if (next_idx < idx) {dir = 'prev';}
if (next_idx >= slides.length) {
if (!settings.circular) {
return false;
}
next_idx = 0;
} else if (next_idx < 0) {
if (!settings.circular) {
return false;
}
next_idx = slides.length - 1;
}
var current = $(slides.get(idx));
var next = $(slides.get(next_idx));
current.css('zIndex', 2);
current.removeClass(settings.active_slide_class);
next.css('zIndex', 4).addClass(settings.active_slide_class);
slides_container.trigger('before-slide-change.fndtn.orbit');
settings.before_slide_change();
self.update_active_link(next_idx);
var callback = function () {
var unlock = function () {
idx = next_idx;
locked = false;
if (start_timer === true) {timer = self.create_timer(); timer.start();}
self.update_slide_number(idx);
slides_container.trigger('after-slide-change.fndtn.orbit', [{slide_number : idx, total_slides : slides.length}]);
settings.after_slide_change(idx, slides.length);
};
if (slides_container.outerHeight() != next.outerHeight() && settings.variable_height) {
slides_container.animate({'height': next.outerHeight()}, 250, 'linear', unlock);
} else {
unlock();
}
};
if (slides.length === 1) {callback(); return false;}
var start_animation = function () {
if (dir === 'next') {animate.next(current, next, callback);}
if (dir === 'prev') {animate.prev(current, next, callback);}
};
if (next.outerHeight() > slides_container.outerHeight() && settings.variable_height) {
slides_container.animate({'height': next.outerHeight()}, 250, 'linear', start_animation);
} else {
start_animation();
}
};
self.next = function (e) {
e.stopImmediatePropagation();
e.preventDefault();
self._goto(idx + 1);
};
self.prev = function (e) {
e.stopImmediatePropagation();
e.preventDefault();
self._goto(idx - 1);
};
self.link_custom = function (e) {
e.preventDefault();
var link = $(this).attr('data-orbit-link');
if ((typeof link === 'string') && (link = $.trim(link)) != '') {
var slide = container.find('[data-orbit-slide=' + link + ']');
if (slide.index() != -1) {self._goto(slide.index());}
}
};
self.link_bullet = function (e) {
var index = $(this).attr('data-orbit-slide');
if ((typeof index === 'string') && (index = $.trim(index)) != '') {
if (isNaN(parseInt(index))) {
var slide = container.find('[data-orbit-slide=' + index + ']');
if (slide.index() != -1) {self._goto(slide.index() + 1);}
} else {
self._goto(parseInt(index));
}
}
}
self.timer_callback = function () {
self._goto(idx + 1, true);
}
self.compute_dimensions = function () {
var current = $(self.slides().get(idx));
var h = current.outerHeight();
if (!settings.variable_height) {
self.slides().each(function(){
if ($(this).outerHeight() > h) { h = $(this).outerHeight(); }
});
}
slides_container.height(h);
};
self.create_timer = function () {
var t = new Timer(
container.find('.' + settings.timer_container_class),
settings,
self.timer_callback
);
return t;
};
self.stop_timer = function () {
if (typeof timer === 'object') {
timer.stop();
}
};
self.toggle_timer = function () {
var t = container.find('.' + settings.timer_container_class);
if (t.hasClass(settings.timer_paused_class)) {
if (typeof timer === 'undefined') {timer = self.create_timer();}
timer.start();
} else {
if (typeof timer === 'object') {timer.stop();}
}
};
self.init = function () {
self.build_markup();
if (settings.timer) {
timer = self.create_timer();
Foundation.utils.image_loaded(this.slides().children('img'), timer.start);
}
animate = new FadeAnimation(settings, slides_container);
if (settings.animation === 'slide') {
animate = new SlideAnimation(settings, slides_container);
}
container.on('click', '.' + settings.next_class, self.next);
container.on('click', '.' + settings.prev_class, self.prev);
if (settings.next_on_click) {
container.on('click', '.' + settings.slides_container_class + ' [data-orbit-slide]', self.link_bullet);
}
container.on('click', self.toggle_timer);
if (settings.swipe) {
container.on('touchstart.fndtn.orbit', function (e) {
if (!e.touches) {e = e.originalEvent;}
var data = {
start_page_x : e.touches[0].pageX,
start_page_y : e.touches[0].pageY,
start_time : (new Date()).getTime(),
delta_x : 0,
is_scrolling : undefined
};
container.data('swipe-transition', data);
e.stopPropagation();
})
.on('touchmove.fndtn.orbit', function (e) {
if (!e.touches) {
e = e.originalEvent;
}
// Ignore pinch/zoom events
if (e.touches.length > 1 || e.scale && e.scale !== 1) {
return;
}
var data = container.data('swipe-transition');
if (typeof data === 'undefined') {data = {};}
data.delta_x = e.touches[0].pageX - data.start_page_x;
if ( typeof data.is_scrolling === 'undefined') {
data.is_scrolling = !!( data.is_scrolling || Math.abs(data.delta_x) < Math.abs(e.touches[0].pageY - data.start_page_y) );
}
if (!data.is_scrolling && !data.active) {
e.preventDefault();
var direction = (data.delta_x < 0) ? (idx + 1) : (idx - 1);
data.active = true;
self._goto(direction);
}
})
.on('touchend.fndtn.orbit', function (e) {
container.data('swipe-transition', {});
e.stopPropagation();
})
}
container.on('mouseenter.fndtn.orbit', function (e) {
if (settings.timer && settings.pause_on_hover) {
self.stop_timer();
}
})
.on('mouseleave.fndtn.orbit', function (e) {
if (settings.timer && settings.resume_on_mouseout) {
timer.start();
}
});
$(document).on('click', '[data-orbit-link]', self.link_custom);
$(window).on('load resize', self.compute_dimensions);
Foundation.utils.image_loaded(this.slides().children('img'), self.compute_dimensions);
Foundation.utils.image_loaded(this.slides().children('img'), function () {
container.prev('.' + settings.preloader_class).css('display', 'none');
self.update_slide_number(0);
self.update_active_link(0);
slides_container.trigger('ready.fndtn.orbit');
});
};
self.init();
};
var Timer = function (el, settings, callback) {
var self = this,
duration = settings.timer_speed,
progress = el.find('.' + settings.timer_progress_class),
start,
timeout,
left = -1;
this.update_progress = function (w) {
var new_progress = progress.clone();
new_progress.attr('style', '');
new_progress.css('width', w + '%');
progress.replaceWith(new_progress);
progress = new_progress;
};
this.restart = function () {
clearTimeout(timeout);
el.addClass(settings.timer_paused_class);
left = -1;
self.update_progress(0);
};
this.start = function () {
if (!el.hasClass(settings.timer_paused_class)) {return true;}
left = (left === -1) ? duration : left;
el.removeClass(settings.timer_paused_class);
start = new Date().getTime();
progress.animate({'width' : '100%'}, left, 'linear');
timeout = setTimeout(function () {
self.restart();
callback();
}, left);
el.trigger('timer-started.fndtn.orbit')
};
this.stop = function () {
if (el.hasClass(settings.timer_paused_class)) {return true;}
clearTimeout(timeout);
el.addClass(settings.timer_paused_class);
var end = new Date().getTime();
left = left - (end - start);
var w = 100 - ((left / duration) * 100);
self.update_progress(w);
el.trigger('timer-stopped.fndtn.orbit');
};
};
var SlideAnimation = function (settings, container) {
var duration = settings.animation_speed;
var is_rtl = ($('html[dir=rtl]').length === 1);
var margin = is_rtl ? 'marginRight' : 'marginLeft';
var animMargin = {};
animMargin[margin] = '0%';
this.next = function (current, next, callback) {
current.animate({marginLeft : '-100%'}, duration);
next.animate(animMargin, duration, function () {
current.css(margin, '100%');
callback();
});
};
this.prev = function (current, prev, callback) {
current.animate({marginLeft : '100%'}, duration);
prev.css(margin, '-100%');
prev.animate(animMargin, duration, function () {
current.css(margin, '100%');
callback();
});
};
};
var FadeAnimation = function (settings, container) {
var duration = settings.animation_speed;
var is_rtl = ($('html[dir=rtl]').length === 1);
var margin = is_rtl ? 'marginRight' : 'marginLeft';
this.next = function (current, next, callback) {
next.css({'margin' : '0%', 'opacity' : '0.01'});
next.animate({'opacity' :'1'}, duration, 'linear', function () {
current.css('margin', '100%');
callback();
});
};
this.prev = function (current, prev, callback) {
prev.css({'margin' : '0%', 'opacity' : '0.01'});
prev.animate({'opacity' : '1'}, duration, 'linear', function () {
current.css('margin', '100%');
callback();
});
};
};
Foundation.libs = Foundation.libs || {};
Foundation.libs.orbit = {
name : 'orbit',
version : '5.5.1',
settings : {
animation : 'slide',
timer_speed : 10000,
pause_on_hover : true,
resume_on_mouseout : false,
next_on_click : true,
animation_speed : 500,
stack_on_small : false,
navigation_arrows : true,
slide_number : true,
slide_number_text : 'of',
container_class : 'orbit-container',
stack_on_small_class : 'orbit-stack-on-small',
next_class : 'orbit-next',
prev_class : 'orbit-prev',
timer_container_class : 'orbit-timer',
timer_paused_class : 'paused',
timer_progress_class : 'orbit-progress',
slides_container_class : 'orbit-slides-container',
preloader_class : 'preloader',
slide_selector : '*',
bullets_container_class : 'orbit-bullets',
bullets_active_class : 'active',
slide_number_class : 'orbit-slide-number',
caption_class : 'orbit-caption',
active_slide_class : 'active',
orbit_transition_class : 'orbit-transitioning',
bullets : true,
circular : true,
timer : true,
variable_height : false,
swipe : true,
before_slide_change : noop,
after_slide_change : noop
},
init : function (scope, method, options) {
var self = this;
this.bindings(method, options);
},
events : function (instance) {
var orbit_instance = new Orbit(this.S(instance), this.S(instance).data('orbit-init'));
this.S(instance).data(this.name + '-instance', orbit_instance);
},
reflow : function () {
var self = this;
if (self.S(self.scope).is('[data-orbit]')) {
var $el = self.S(self.scope);
var instance = $el.data(self.name + '-instance');
instance.compute_dimensions();
} else {
self.S('[data-orbit]', self.scope).each(function (idx, el) {
var $el = self.S(el);
var opts = self.data_options($el);
var instance = $el.data(self.name + '-instance');
instance.compute_dimensions();
});
}
}
};
}(jQuery, window, window.document));

View File

@@ -0,0 +1,471 @@
;(function ($, window, document, undefined) {
'use strict';
Foundation.libs.reveal = {
name : 'reveal',
version : '5.5.1',
locked : false,
settings : {
animation : 'fadeAndPop',
animation_speed : 250,
close_on_background_click : true,
close_on_esc : true,
dismiss_modal_class : 'close-reveal-modal',
multiple_opened : false,
bg_class : 'reveal-modal-bg',
root_element : 'body',
open : function(){},
opened : function(){},
close : function(){},
closed : function(){},
bg : $('.reveal-modal-bg'),
css : {
open : {
'opacity' : 0,
'visibility' : 'visible',
'display' : 'block'
},
close : {
'opacity' : 1,
'visibility' : 'hidden',
'display' : 'none'
}
}
},
init : function (scope, method, options) {
$.extend(true, this.settings, method, options);
this.bindings(method, options);
},
events : function (scope) {
var self = this,
S = self.S;
S(this.scope)
.off('.reveal')
.on('click.fndtn.reveal', '[' + this.add_namespace('data-reveal-id') + ']:not([disabled])', function (e) {
e.preventDefault();
if (!self.locked) {
var element = S(this),
ajax = element.data(self.data_attr('reveal-ajax'));
self.locked = true;
if (typeof ajax === 'undefined') {
self.open.call(self, element);
} else {
var url = ajax === true ? element.attr('href') : ajax;
self.open.call(self, element, {url : url});
}
}
});
S(document)
.on('click.fndtn.reveal', this.close_targets(), function (e) {
e.preventDefault();
if (!self.locked) {
var settings = S('[' + self.attr_name() + '].open').data(self.attr_name(true) + '-init') || self.settings,
bg_clicked = S(e.target)[0] === S('.' + settings.bg_class)[0];
if (bg_clicked) {
if (settings.close_on_background_click) {
e.stopPropagation();
} else {
return;
}
}
self.locked = true;
self.close.call(self, bg_clicked ? S('[' + self.attr_name() + '].open') : S(this).closest('[' + self.attr_name() + ']'));
}
});
if (S('[' + self.attr_name() + ']', this.scope).length > 0) {
S(this.scope)
// .off('.reveal')
.on('open.fndtn.reveal', this.settings.open)
.on('opened.fndtn.reveal', this.settings.opened)
.on('opened.fndtn.reveal', this.open_video)
.on('close.fndtn.reveal', this.settings.close)
.on('closed.fndtn.reveal', this.settings.closed)
.on('closed.fndtn.reveal', this.close_video);
} else {
S(this.scope)
// .off('.reveal')
.on('open.fndtn.reveal', '[' + self.attr_name() + ']', this.settings.open)
.on('opened.fndtn.reveal', '[' + self.attr_name() + ']', this.settings.opened)
.on('opened.fndtn.reveal', '[' + self.attr_name() + ']', this.open_video)
.on('close.fndtn.reveal', '[' + self.attr_name() + ']', this.settings.close)
.on('closed.fndtn.reveal', '[' + self.attr_name() + ']', this.settings.closed)
.on('closed.fndtn.reveal', '[' + self.attr_name() + ']', this.close_video);
}
return true;
},
// PATCH #3: turning on key up capture only when a reveal window is open
key_up_on : function (scope) {
var self = this;
// PATCH #1: fixing multiple keyup event trigger from single key press
self.S('body').off('keyup.fndtn.reveal').on('keyup.fndtn.reveal', function ( event ) {
var open_modal = self.S('[' + self.attr_name() + '].open'),
settings = open_modal.data(self.attr_name(true) + '-init') || self.settings ;
// PATCH #2: making sure that the close event can be called only while unlocked,
// so that multiple keyup.fndtn.reveal events don't prevent clean closing of the reveal window.
if ( settings && event.which === 27 && settings.close_on_esc && !self.locked) { // 27 is the keycode for the Escape key
self.close.call(self, open_modal);
}
});
return true;
},
// PATCH #3: turning on key up capture only when a reveal window is open
key_up_off : function (scope) {
this.S('body').off('keyup.fndtn.reveal');
return true;
},
open : function (target, ajax_settings) {
var self = this,
modal;
if (target) {
if (typeof target.selector !== 'undefined') {
// Find the named node; only use the first one found, since the rest of the code assumes there's only one node
modal = self.S('#' + target.data(self.data_attr('reveal-id'))).first();
} else {
modal = self.S(this.scope);
ajax_settings = target;
}
} else {
modal = self.S(this.scope);
}
var settings = modal.data(self.attr_name(true) + '-init');
settings = settings || this.settings;
if (modal.hasClass('open') && target.attr('data-reveal-id') == modal.attr('id')) {
return self.close(modal);
}
if (!modal.hasClass('open')) {
var open_modal = self.S('[' + self.attr_name() + '].open');
if (typeof modal.data('css-top') === 'undefined') {
modal.data('css-top', parseInt(modal.css('top'), 10))
.data('offset', this.cache_offset(modal));
}
this.key_up_on(modal); // PATCH #3: turning on key up capture only when a reveal window is open
modal.on('open.fndtn.reveal').trigger('open.fndtn.reveal');
if (open_modal.length < 1) {
this.toggle_bg(modal, true);
}
if (typeof ajax_settings === 'string') {
ajax_settings = {
url : ajax_settings
};
}
if (typeof ajax_settings === 'undefined' || !ajax_settings.url) {
if (open_modal.length > 0) {
if (settings.multiple_opened) {
this.to_back(open_modal);
} else {
this.hide(open_modal, settings.css.close);
}
}
this.show(modal, settings.css.open);
} else {
var old_success = typeof ajax_settings.success !== 'undefined' ? ajax_settings.success : null;
$.extend(ajax_settings, {
success : function (data, textStatus, jqXHR) {
if ( $.isFunction(old_success) ) {
var result = old_success(data, textStatus, jqXHR);
if (typeof result == 'string') {
data = result;
}
}
modal.html(data);
self.S(modal).foundation('section', 'reflow');
self.S(modal).children().foundation();
if (open_modal.length > 0) {
if (settings.multiple_opened) {
this.to_back(open_modal);
} else {
this.hide(open_modal, settings.css.close);
}
}
self.show(modal, settings.css.open);
}
});
$.ajax(ajax_settings);
}
}
self.S(window).trigger('resize');
},
close : function (modal) {
var modal = modal && modal.length ? modal : this.S(this.scope),
open_modals = this.S('[' + this.attr_name() + '].open'),
settings = modal.data(this.attr_name(true) + '-init') || this.settings;
if (open_modals.length > 0) {
this.locked = true;
this.key_up_off(modal); // PATCH #3: turning on key up capture only when a reveal window is open
modal.trigger('close').trigger('close.fndtn.reveal');
if ((settings.multiple_opened && open_modals.length === 1) || !settings.multiple_opened || modal.length > 1) {
this.toggle_bg(modal, false);
this.to_front(modal);
}
if (settings.multiple_opened) {
this.hide(modal, settings.css.close, settings);
this.to_front($($.makeArray(open_modals).reverse()[1]));
} else {
this.hide(open_modals, settings.css.close, settings);
}
}
},
close_targets : function () {
var base = '.' + this.settings.dismiss_modal_class;
if (this.settings.close_on_background_click) {
return base + ', .' + this.settings.bg_class;
}
return base;
},
toggle_bg : function (modal, state) {
if (this.S('.' + this.settings.bg_class).length === 0) {
this.settings.bg = $('<div />', {'class': this.settings.bg_class})
.appendTo('body').hide();
}
var visible = this.settings.bg.filter(':visible').length > 0;
if ( state != visible ) {
if ( state == undefined ? visible : !state ) {
this.hide(this.settings.bg);
} else {
this.show(this.settings.bg);
}
}
},
show : function (el, css) {
// is modal
if (css) {
var settings = el.data(this.attr_name(true) + '-init') || this.settings,
root_element = settings.root_element;
if (el.parent(root_element).length === 0) {
var placeholder = el.wrap('<div style="display: none;" />').parent();
el.on('closed.fndtn.reveal.wrapped', function () {
el.detach().appendTo(placeholder);
el.unwrap().unbind('closed.fndtn.reveal.wrapped');
});
el.detach().appendTo(root_element);
}
var animData = getAnimationData(settings.animation);
if (!animData.animate) {
this.locked = false;
}
if (animData.pop) {
css.top = $(window).scrollTop() - el.data('offset') + 'px';
var end_css = {
top: $(window).scrollTop() + el.data('css-top') + 'px',
opacity: 1
};
return setTimeout(function () {
return el
.css(css)
.animate(end_css, settings.animation_speed, 'linear', function () {
this.locked = false;
el.trigger('opened').trigger('opened.fndtn.reveal');
}.bind(this))
.addClass('open');
}.bind(this), settings.animation_speed / 2);
}
if (animData.fade) {
css.top = $(window).scrollTop() + el.data('css-top') + 'px';
var end_css = {opacity: 1};
return setTimeout(function () {
return el
.css(css)
.animate(end_css, settings.animation_speed, 'linear', function () {
this.locked = false;
el.trigger('opened').trigger('opened.fndtn.reveal');
}.bind(this))
.addClass('open');
}.bind(this), settings.animation_speed / 2);
}
return el.css(css).show().css({opacity : 1}).addClass('open').trigger('opened').trigger('opened.fndtn.reveal');
}
var settings = this.settings;
// should we animate the background?
if (getAnimationData(settings.animation).fade) {
return el.fadeIn(settings.animation_speed / 2);
}
this.locked = false;
return el.show();
},
to_back : function(el) {
el.addClass('toback');
},
to_front : function(el) {
el.removeClass('toback');
},
hide : function (el, css) {
// is modal
if (css) {
var settings = el.data(this.attr_name(true) + '-init');
settings = settings || this.settings;
var animData = getAnimationData(settings.animation);
if (!animData.animate) {
this.locked = false;
}
if (animData.pop) {
var end_css = {
top: - $(window).scrollTop() - el.data('offset') + 'px',
opacity: 0
};
return setTimeout(function () {
return el
.animate(end_css, settings.animation_speed, 'linear', function () {
this.locked = false;
el.css(css).trigger('closed').trigger('closed.fndtn.reveal');
}.bind(this))
.removeClass('open');
}.bind(this), settings.animation_speed / 2);
}
if (animData.fade) {
var end_css = {opacity : 0};
return setTimeout(function () {
return el
.animate(end_css, settings.animation_speed, 'linear', function () {
this.locked = false;
el.css(css).trigger('closed').trigger('closed.fndtn.reveal');
}.bind(this))
.removeClass('open');
}.bind(this), settings.animation_speed / 2);
}
return el.hide().css(css).removeClass('open').trigger('closed').trigger('closed.fndtn.reveal');
}
var settings = this.settings;
// should we animate the background?
if (getAnimationData(settings.animation).fade) {
return el.fadeOut(settings.animation_speed / 2);
}
return el.hide();
},
close_video : function (e) {
var video = $('.flex-video', e.target),
iframe = $('iframe', video);
if (iframe.length > 0) {
iframe.attr('data-src', iframe[0].src);
iframe.attr('src', iframe.attr('src'));
video.hide();
}
},
open_video : function (e) {
var video = $('.flex-video', e.target),
iframe = video.find('iframe');
if (iframe.length > 0) {
var data_src = iframe.attr('data-src');
if (typeof data_src === 'string') {
iframe[0].src = iframe.attr('data-src');
} else {
var src = iframe[0].src;
iframe[0].src = undefined;
iframe[0].src = src;
}
video.show();
}
},
data_attr : function (str) {
if (this.namespace.length > 0) {
return this.namespace + '-' + str;
}
return str;
},
cache_offset : function (modal) {
var offset = modal.show().height() + parseInt(modal.css('top'), 10);
modal.hide();
return offset;
},
off : function () {
$(this.scope).off('.fndtn.reveal');
},
reflow : function () {}
};
/*
* getAnimationData('popAndFade') // {animate: true, pop: true, fade: true}
* getAnimationData('fade') // {animate: true, pop: false, fade: true}
* getAnimationData('pop') // {animate: true, pop: true, fade: false}
* getAnimationData('foo') // {animate: false, pop: false, fade: false}
* getAnimationData(null) // {animate: false, pop: false, fade: false}
*/
function getAnimationData(str) {
var fade = /fade/i.test(str);
var pop = /pop/i.test(str);
return {
animate : fade || pop,
pop : pop,
fade : fade
};
}
}(jQuery, window, window.document));

View File

@@ -0,0 +1,263 @@
;(function ($, window, document, undefined) {
'use strict';
Foundation.libs.slider = {
name : 'slider',
version : '5.5.1',
settings : {
start : 0,
end : 100,
step : 1,
precision : null,
initial : null,
display_selector : '',
vertical : false,
trigger_input_change : false,
on_change : function () {}
},
cache : {},
init : function (scope, method, options) {
Foundation.inherit(this, 'throttle');
this.bindings(method, options);
this.reflow();
},
events : function () {
var self = this;
$(this.scope)
.off('.slider')
.on('mousedown.fndtn.slider touchstart.fndtn.slider pointerdown.fndtn.slider',
'[' + self.attr_name() + ']:not(.disabled, [disabled]) .range-slider-handle', function (e) {
if (!self.cache.active) {
e.preventDefault();
self.set_active_slider($(e.target));
}
})
.on('mousemove.fndtn.slider touchmove.fndtn.slider pointermove.fndtn.slider', function (e) {
if (!!self.cache.active) {
e.preventDefault();
if ($.data(self.cache.active[0], 'settings').vertical) {
var scroll_offset = 0;
if (!e.pageY) {
scroll_offset = window.scrollY;
}
self.calculate_position(self.cache.active, self.get_cursor_position(e, 'y') + scroll_offset);
} else {
self.calculate_position(self.cache.active, self.get_cursor_position(e, 'x'));
}
}
})
.on('mouseup.fndtn.slider touchend.fndtn.slider pointerup.fndtn.slider', function (e) {
self.remove_active_slider();
})
.on('change.fndtn.slider', function (e) {
self.settings.on_change();
});
self.S(window)
.on('resize.fndtn.slider', self.throttle(function (e) {
self.reflow();
}, 300));
},
get_cursor_position : function (e, xy) {
var pageXY = 'page' + xy.toUpperCase(),
clientXY = 'client' + xy.toUpperCase(),
position;
if (typeof e[pageXY] !== 'undefined') {
position = e[pageXY];
} else if (typeof e.originalEvent[clientXY] !== 'undefined') {
position = e.originalEvent[clientXY];
} else if (e.originalEvent.touches && e.originalEvent.touches[0] && typeof e.originalEvent.touches[0][clientXY] !== 'undefined') {
position = e.originalEvent.touches[0][clientXY];
} else if (e.currentPoint && typeof e.currentPoint[xy] !== 'undefined') {
position = e.currentPoint[xy];
}
return position;
},
set_active_slider : function ($handle) {
this.cache.active = $handle;
},
remove_active_slider : function () {
this.cache.active = null;
},
calculate_position : function ($handle, cursor_x) {
var self = this,
settings = $.data($handle[0], 'settings'),
handle_l = $.data($handle[0], 'handle_l'),
handle_o = $.data($handle[0], 'handle_o'),
bar_l = $.data($handle[0], 'bar_l'),
bar_o = $.data($handle[0], 'bar_o');
requestAnimationFrame(function () {
var pct;
if (Foundation.rtl && !settings.vertical) {
pct = self.limit_to(((bar_o + bar_l - cursor_x) / bar_l), 0, 1);
} else {
pct = self.limit_to(((cursor_x - bar_o) / bar_l), 0, 1);
}
pct = settings.vertical ? 1 - pct : pct;
var norm = self.normalized_value(pct, settings.start, settings.end, settings.step, settings.precision);
self.set_ui($handle, norm);
});
},
set_ui : function ($handle, value) {
var settings = $.data($handle[0], 'settings'),
handle_l = $.data($handle[0], 'handle_l'),
bar_l = $.data($handle[0], 'bar_l'),
norm_pct = this.normalized_percentage(value, settings.start, settings.end),
handle_offset = norm_pct * (bar_l - handle_l) - 1,
progress_bar_length = norm_pct * 100,
$handle_parent = $handle.parent(),
$hidden_inputs = $handle.parent().children('input[type=hidden]');
if (Foundation.rtl && !settings.vertical) {
handle_offset = -handle_offset;
}
handle_offset = settings.vertical ? -handle_offset + bar_l - handle_l + 1 : handle_offset;
this.set_translate($handle, handle_offset, settings.vertical);
if (settings.vertical) {
$handle.siblings('.range-slider-active-segment').css('height', progress_bar_length + '%');
} else {
$handle.siblings('.range-slider-active-segment').css('width', progress_bar_length + '%');
}
$handle_parent.attr(this.attr_name(), value).trigger('change').trigger('change.fndtn.slider');
$hidden_inputs.val(value);
if (settings.trigger_input_change) {
$hidden_inputs.trigger('change');
}
if (!$handle[0].hasAttribute('aria-valuemin')) {
$handle.attr({
'aria-valuemin' : settings.start,
'aria-valuemax' : settings.end
});
}
$handle.attr('aria-valuenow', value);
if (settings.display_selector != '') {
$(settings.display_selector).each(function () {
if (this.hasOwnProperty('value')) {
$(this).val(value);
} else {
$(this).text(value);
}
});
}
},
normalized_percentage : function (val, start, end) {
return Math.min(1, (val - start) / (end - start));
},
normalized_value : function (val, start, end, step, precision) {
var range = end - start,
point = val * range,
mod = (point - (point % step)) / step,
rem = point % step,
round = ( rem >= step * 0.5 ? step : 0);
return ((mod * step + round) + start).toFixed(precision);
},
set_translate : function (ele, offset, vertical) {
if (vertical) {
$(ele)
.css('-webkit-transform', 'translateY(' + offset + 'px)')
.css('-moz-transform', 'translateY(' + offset + 'px)')
.css('-ms-transform', 'translateY(' + offset + 'px)')
.css('-o-transform', 'translateY(' + offset + 'px)')
.css('transform', 'translateY(' + offset + 'px)');
} else {
$(ele)
.css('-webkit-transform', 'translateX(' + offset + 'px)')
.css('-moz-transform', 'translateX(' + offset + 'px)')
.css('-ms-transform', 'translateX(' + offset + 'px)')
.css('-o-transform', 'translateX(' + offset + 'px)')
.css('transform', 'translateX(' + offset + 'px)');
}
},
limit_to : function (val, min, max) {
return Math.min(Math.max(val, min), max);
},
initialize_settings : function (handle) {
var settings = $.extend({}, this.settings, this.data_options($(handle).parent())),
decimal_places_match_result;
if (settings.precision === null) {
decimal_places_match_result = ('' + settings.step).match(/\.([\d]*)/);
settings.precision = decimal_places_match_result && decimal_places_match_result[1] ? decimal_places_match_result[1].length : 0;
}
if (settings.vertical) {
$.data(handle, 'bar_o', $(handle).parent().offset().top);
$.data(handle, 'bar_l', $(handle).parent().outerHeight());
$.data(handle, 'handle_o', $(handle).offset().top);
$.data(handle, 'handle_l', $(handle).outerHeight());
} else {
$.data(handle, 'bar_o', $(handle).parent().offset().left);
$.data(handle, 'bar_l', $(handle).parent().outerWidth());
$.data(handle, 'handle_o', $(handle).offset().left);
$.data(handle, 'handle_l', $(handle).outerWidth());
}
$.data(handle, 'bar', $(handle).parent());
$.data(handle, 'settings', settings);
},
set_initial_position : function ($ele) {
var settings = $.data($ele.children('.range-slider-handle')[0], 'settings'),
initial = ((typeof settings.initial == 'number' && !isNaN(settings.initial)) ? settings.initial : Math.floor((settings.end - settings.start) * 0.5 / settings.step) * settings.step + settings.start),
$handle = $ele.children('.range-slider-handle');
this.set_ui($handle, initial);
},
set_value : function (value) {
var self = this;
$('[' + self.attr_name() + ']', this.scope).each(function () {
$(this).attr(self.attr_name(), value);
});
if (!!$(this.scope).attr(self.attr_name())) {
$(this.scope).attr(self.attr_name(), value);
}
self.reflow();
},
reflow : function () {
var self = this;
self.S('[' + this.attr_name() + ']').each(function () {
var handle = $(this).children('.range-slider-handle')[0],
val = $(this).attr(self.attr_name());
self.initialize_settings(handle);
if (val) {
self.set_ui($(handle), parseFloat(val));
} else {
self.set_initial_position($(this));
}
});
}
};
}(jQuery, window, window.document));

View File

@@ -0,0 +1,237 @@
;(function ($, window, document, undefined) {
'use strict';
Foundation.libs.tab = {
name : 'tab',
version : '5.5.1',
settings : {
active_class : 'active',
callback : function () {},
deep_linking : false,
scroll_to_content : true,
is_hover : false
},
default_tab_hashes : [],
init : function (scope, method, options) {
var self = this,
S = this.S;
this.bindings(method, options);
// store the initial href, which is used to allow correct behaviour of the
// browser back button when deep linking is turned on.
self.entry_location = window.location.href;
this.handle_location_hash_change();
// Store the default active tabs which will be referenced when the
// location hash is absent, as in the case of navigating the tabs and
// returning to the first viewing via the browser Back button.
S('[' + this.attr_name() + '] > .active > a', this.scope).each(function () {
self.default_tab_hashes.push(this.hash);
});
},
events : function () {
var self = this,
S = this.S;
var usual_tab_behavior = function (e) {
var settings = S(this).closest('[' + self.attr_name() + ']').data(self.attr_name(true) + '-init');
if (!settings.is_hover || Modernizr.touch) {
e.preventDefault();
e.stopPropagation();
self.toggle_active_tab(S(this).parent());
}
};
S(this.scope)
.off('.tab')
// Click event: tab title
.on('focus.fndtn.tab', '[' + this.attr_name() + '] > * > a', usual_tab_behavior )
.on('click.fndtn.tab', '[' + this.attr_name() + '] > * > a', usual_tab_behavior )
// Hover event: tab title
.on('mouseenter.fndtn.tab', '[' + this.attr_name() + '] > * > a', function (e) {
var settings = S(this).closest('[' + self.attr_name() + ']').data(self.attr_name(true) + '-init');
if (settings.is_hover) {
self.toggle_active_tab(S(this).parent());
}
});
// Location hash change event
S(window).on('hashchange.fndtn.tab', function (e) {
e.preventDefault();
self.handle_location_hash_change();
});
},
handle_location_hash_change : function () {
var self = this,
S = this.S;
S('[' + this.attr_name() + ']', this.scope).each(function () {
var settings = S(this).data(self.attr_name(true) + '-init');
if (settings.deep_linking) {
// Match the location hash to a label
var hash;
if (settings.scroll_to_content) {
hash = self.scope.location.hash;
} else {
// prefix the hash to prevent anchor scrolling
hash = self.scope.location.hash.replace('fndtn-', '');
}
if (hash != '') {
// Check whether the location hash references a tab content div or
// another element on the page (inside or outside the tab content div)
var hash_element = S(hash);
if (hash_element.hasClass('content') && hash_element.parent().hasClass('tabs-content')) {
// Tab content div
self.toggle_active_tab($('[' + self.attr_name() + '] > * > a[href=' + hash + ']').parent());
} else {
// Not the tab content div. If inside the tab content, find the
// containing tab and toggle it as active.
var hash_tab_container_id = hash_element.closest('.content').attr('id');
if (hash_tab_container_id != undefined) {
self.toggle_active_tab($('[' + self.attr_name() + '] > * > a[href=#' + hash_tab_container_id + ']').parent(), hash);
}
}
} else {
// Reference the default tab hashes which were initialized in the init function
for (var ind = 0; ind < self.default_tab_hashes.length; ind++) {
self.toggle_active_tab($('[' + self.attr_name() + '] > * > a[href=' + self.default_tab_hashes[ind] + ']').parent());
}
}
}
});
},
toggle_active_tab : function (tab, location_hash) {
var self = this,
S = self.S,
tabs = tab.closest('[' + this.attr_name() + ']'),
tab_link = tab.find('a'),
anchor = tab.children('a').first(),
target_hash = '#' + anchor.attr('href').split('#')[1],
target = S(target_hash),
siblings = tab.siblings(),
settings = tabs.data(this.attr_name(true) + '-init'),
interpret_keyup_action = function (e) {
// Light modification of Heydon Pickering's Practical ARIA Examples: http://heydonworks.com/practical_aria_examples/js/a11y.js
// define current, previous and next (possible) tabs
var $original = $(this);
var $prev = $(this).parents('li').prev().children('[role="tab"]');
var $next = $(this).parents('li').next().children('[role="tab"]');
var $target;
// find the direction (prev or next)
switch (e.keyCode) {
case 37:
$target = $prev;
break;
case 39:
$target = $next;
break;
default:
$target = false
break;
}
if ($target.length) {
$original.attr({
'tabindex' : '-1',
'aria-selected' : null
});
$target.attr({
'tabindex' : '0',
'aria-selected' : true
}).focus();
}
// Hide panels
$('[role="tabpanel"]')
.attr('aria-hidden', 'true');
// Show panel which corresponds to target
$('#' + $(document.activeElement).attr('href').substring(1))
.attr('aria-hidden', null);
},
go_to_hash = function(hash) {
// This function allows correct behaviour of the browser's back button when deep linking is enabled. Without it
// the user would get continually redirected to the default hash.
var is_entry_location = window.location.href === self.entry_location,
default_hash = settings.scroll_to_content ? self.default_tab_hashes[0] : is_entry_location ? window.location.hash :'fndtn-' + self.default_tab_hashes[0].replace('#', '')
if (!(is_entry_location && hash === default_hash)) {
window.location.hash = hash;
}
};
// allow usage of data-tab-content attribute instead of href
if (S(this).data(this.data_attr('tab-content'))) {
target_hash = '#' + S(this).data(this.data_attr('tab-content')).split('#')[1];
target = S(target_hash);
}
if (settings.deep_linking) {
if (settings.scroll_to_content) {
// retain current hash to scroll to content
go_to_hash(location_hash || target_hash);
if (location_hash == undefined || location_hash == target_hash) {
tab.parent()[0].scrollIntoView();
} else {
S(target_hash)[0].scrollIntoView();
}
} else {
// prefix the hashes so that the browser doesn't scroll down
if (location_hash != undefined) {
go_to_hash('fndtn-' + location_hash.replace('#', ''));
} else {
go_to_hash('fndtn-' + target_hash.replace('#', ''));
}
}
}
// WARNING: The activation and deactivation of the tab content must
// occur after the deep linking in order to properly refresh the browser
// window (notably in Chrome).
// Clean up multiple attr instances to done once
tab.addClass(settings.active_class).triggerHandler('opened');
tab_link.attr({'aria-selected' : 'true', tabindex : 0});
siblings.removeClass(settings.active_class)
siblings.find('a').attr({'aria-selected' : 'false', tabindex : -1});
target.siblings().removeClass(settings.active_class).attr({'aria-hidden' : 'true', tabindex : -1});
target.addClass(settings.active_class).attr('aria-hidden', 'false').removeAttr('tabindex');
settings.callback(tab);
target.triggerHandler('toggled', [tab]);
tabs.triggerHandler('toggled', [target]);
tab_link.off('keydown').on('keydown', interpret_keyup_action );
},
data_attr : function (str) {
if (this.namespace.length > 0) {
return this.namespace + '-' + str;
}
return str;
},
off : function () {},
reflow : function () {}
};
}(jQuery, window, window.document));

View File

@@ -0,0 +1,307 @@
;(function ($, window, document, undefined) {
'use strict';
Foundation.libs.tooltip = {
name : 'tooltip',
version : '5.5.1',
settings : {
additional_inheritable_classes : [],
tooltip_class : '.tooltip',
append_to : 'body',
touch_close_text : 'Tap To Close',
disable_for_touch : false,
hover_delay : 200,
show_on : 'all',
tip_template : function (selector, content) {
return '<span data-selector="' + selector + '" id="' + selector + '" class="'
+ Foundation.libs.tooltip.settings.tooltip_class.substring(1)
+ '" role="tooltip">' + content + '<span class="nub"></span></span>';
}
},
cache : {},
init : function (scope, method, options) {
Foundation.inherit(this, 'random_str');
this.bindings(method, options);
},
should_show : function (target, tip) {
var settings = $.extend({}, this.settings, this.data_options(target));
if (settings.show_on === 'all') {
return true;
} else if (this.small() && settings.show_on === 'small') {
return true;
} else if (this.medium() && settings.show_on === 'medium') {
return true;
} else if (this.large() && settings.show_on === 'large') {
return true;
}
return false;
},
medium : function () {
return matchMedia(Foundation.media_queries['medium']).matches;
},
large : function () {
return matchMedia(Foundation.media_queries['large']).matches;
},
events : function (instance) {
var self = this,
S = self.S;
self.create(this.S(instance));
$(this.scope)
.off('.tooltip')
.on('mouseenter.fndtn.tooltip mouseleave.fndtn.tooltip touchstart.fndtn.tooltip MSPointerDown.fndtn.tooltip',
'[' + this.attr_name() + ']', function (e) {
var $this = S(this),
settings = $.extend({}, self.settings, self.data_options($this)),
is_touch = false;
if (Modernizr.touch && /touchstart|MSPointerDown/i.test(e.type) && S(e.target).is('a')) {
return false;
}
if (/mouse/i.test(e.type) && self.ie_touch(e)) {
return false;
}
if ($this.hasClass('open')) {
if (Modernizr.touch && /touchstart|MSPointerDown/i.test(e.type)) {
e.preventDefault();
}
self.hide($this);
} else {
if (settings.disable_for_touch && Modernizr.touch && /touchstart|MSPointerDown/i.test(e.type)) {
return;
} else if (!settings.disable_for_touch && Modernizr.touch && /touchstart|MSPointerDown/i.test(e.type)) {
e.preventDefault();
S(settings.tooltip_class + '.open').hide();
is_touch = true;
}
if (/enter|over/i.test(e.type)) {
this.timer = setTimeout(function () {
var tip = self.showTip($this);
}.bind(this), self.settings.hover_delay);
} else if (e.type === 'mouseout' || e.type === 'mouseleave') {
clearTimeout(this.timer);
self.hide($this);
} else {
self.showTip($this);
}
}
})
.on('mouseleave.fndtn.tooltip touchstart.fndtn.tooltip MSPointerDown.fndtn.tooltip', '[' + this.attr_name() + '].open', function (e) {
if (/mouse/i.test(e.type) && self.ie_touch(e)) {
return false;
}
if ($(this).data('tooltip-open-event-type') == 'touch' && e.type == 'mouseleave') {
return;
} else if ($(this).data('tooltip-open-event-type') == 'mouse' && /MSPointerDown|touchstart/i.test(e.type)) {
self.convert_to_touch($(this));
} else {
self.hide($(this));
}
})
.on('DOMNodeRemoved DOMAttrModified', '[' + this.attr_name() + ']:not(a)', function (e) {
self.hide(S(this));
});
},
ie_touch : function (e) {
// How do I distinguish between IE11 and Windows Phone 8?????
return false;
},
showTip : function ($target) {
var $tip = this.getTip($target);
if (this.should_show($target, $tip)) {
return this.show($target);
}
return;
},
getTip : function ($target) {
var selector = this.selector($target),
settings = $.extend({}, this.settings, this.data_options($target)),
tip = null;
if (selector) {
tip = this.S('span[data-selector="' + selector + '"]' + settings.tooltip_class);
}
return (typeof tip === 'object') ? tip : false;
},
selector : function ($target) {
var id = $target.attr('id'),
dataSelector = $target.attr(this.attr_name()) || $target.attr('data-selector');
if ((id && id.length < 1 || !id) && typeof dataSelector != 'string') {
dataSelector = this.random_str(6);
$target
.attr('data-selector', dataSelector)
.attr('aria-describedby', dataSelector);
}
return (id && id.length > 0) ? id : dataSelector;
},
create : function ($target) {
var self = this,
settings = $.extend({}, this.settings, this.data_options($target)),
tip_template = this.settings.tip_template;
if (typeof settings.tip_template === 'string' && window.hasOwnProperty(settings.tip_template)) {
tip_template = window[settings.tip_template];
}
var $tip = $(tip_template(this.selector($target), $('<div></div>').html($target.attr('title')).html())),
classes = this.inheritable_classes($target);
$tip.addClass(classes).appendTo(settings.append_to);
if (Modernizr.touch) {
$tip.append('<span class="tap-to-close">' + settings.touch_close_text + '</span>');
$tip.on('touchstart.fndtn.tooltip MSPointerDown.fndtn.tooltip', function (e) {
self.hide($target);
});
}
$target.removeAttr('title').attr('title', '');
},
reposition : function (target, tip, classes) {
var width, nub, nubHeight, nubWidth, column, objPos;
tip.css('visibility', 'hidden').show();
width = target.data('width');
nub = tip.children('.nub');
nubHeight = nub.outerHeight();
nubWidth = nub.outerHeight();
if (this.small()) {
tip.css({'width' : '100%'});
} else {
tip.css({'width' : (width) ? width : 'auto'});
}
objPos = function (obj, top, right, bottom, left, width) {
return obj.css({
'top' : (top) ? top : 'auto',
'bottom' : (bottom) ? bottom : 'auto',
'left' : (left) ? left : 'auto',
'right' : (right) ? right : 'auto'
}).end();
};
objPos(tip, (target.offset().top + target.outerHeight() + 10), 'auto', 'auto', target.offset().left);
if (this.small()) {
objPos(tip, (target.offset().top + target.outerHeight() + 10), 'auto', 'auto', 12.5, $(this.scope).width());
tip.addClass('tip-override');
objPos(nub, -nubHeight, 'auto', 'auto', target.offset().left);
} else {
var left = target.offset().left;
if (Foundation.rtl) {
nub.addClass('rtl');
left = target.offset().left + target.outerWidth() - tip.outerWidth();
}
objPos(tip, (target.offset().top + target.outerHeight() + 10), 'auto', 'auto', left);
tip.removeClass('tip-override');
if (classes && classes.indexOf('tip-top') > -1) {
if (Foundation.rtl) {
nub.addClass('rtl');
}
objPos(tip, (target.offset().top - tip.outerHeight()), 'auto', 'auto', left)
.removeClass('tip-override');
} else if (classes && classes.indexOf('tip-left') > -1) {
objPos(tip, (target.offset().top + (target.outerHeight() / 2) - (tip.outerHeight() / 2)), 'auto', 'auto', (target.offset().left - tip.outerWidth() - nubHeight))
.removeClass('tip-override');
nub.removeClass('rtl');
} else if (classes && classes.indexOf('tip-right') > -1) {
objPos(tip, (target.offset().top + (target.outerHeight() / 2) - (tip.outerHeight() / 2)), 'auto', 'auto', (target.offset().left + target.outerWidth() + nubHeight))
.removeClass('tip-override');
nub.removeClass('rtl');
}
}
tip.css('visibility', 'visible').hide();
},
small : function () {
return matchMedia(Foundation.media_queries.small).matches &&
!matchMedia(Foundation.media_queries.medium).matches;
},
inheritable_classes : function ($target) {
var settings = $.extend({}, this.settings, this.data_options($target)),
inheritables = ['tip-top', 'tip-left', 'tip-bottom', 'tip-right', 'radius', 'round'].concat(settings.additional_inheritable_classes),
classes = $target.attr('class'),
filtered = classes ? $.map(classes.split(' '), function (el, i) {
if ($.inArray(el, inheritables) !== -1) {
return el;
}
}).join(' ') : '';
return $.trim(filtered);
},
convert_to_touch : function ($target) {
var self = this,
$tip = self.getTip($target),
settings = $.extend({}, self.settings, self.data_options($target));
if ($tip.find('.tap-to-close').length === 0) {
$tip.append('<span class="tap-to-close">' + settings.touch_close_text + '</span>');
$tip.on('click.fndtn.tooltip.tapclose touchstart.fndtn.tooltip.tapclose MSPointerDown.fndtn.tooltip.tapclose', function (e) {
self.hide($target);
});
}
$target.data('tooltip-open-event-type', 'touch');
},
show : function ($target) {
var $tip = this.getTip($target);
if ($target.data('tooltip-open-event-type') == 'touch') {
this.convert_to_touch($target);
}
this.reposition($target, $tip, $target.attr('class'));
$target.addClass('open');
$tip.fadeIn(150);
},
hide : function ($target) {
var $tip = this.getTip($target);
$tip.fadeOut(150, function () {
$tip.find('.tap-to-close').remove();
$tip.off('click.fndtn.tooltip.tapclose MSPointerDown.fndtn.tapclose');
$target.removeClass('open');
});
},
off : function () {
var self = this;
this.S(this.scope).off('.fndtn.tooltip');
this.S(this.settings.tooltip_class).each(function (i) {
$('[' + self.attr_name() + ']').eq(i).attr('title', $(this).text());
}).remove();
},
reflow : function () {}
};
}(jQuery, window, window.document));

View File

@@ -0,0 +1,452 @@
;(function ($, window, document, undefined) {
'use strict';
Foundation.libs.topbar = {
name : 'topbar',
version : '5.5.1',
settings : {
index : 0,
sticky_class : 'sticky',
custom_back_text : true,
back_text : 'Back',
mobile_show_parent_link : true,
is_hover : true,
scrolltop : true, // jump to top when sticky nav menu toggle is clicked
sticky_on : 'all'
},
init : function (section, method, options) {
Foundation.inherit(this, 'add_custom_rule register_media throttle');
var self = this;
self.register_media('topbar', 'foundation-mq-topbar');
this.bindings(method, options);
self.S('[' + this.attr_name() + ']', this.scope).each(function () {
var topbar = $(this),
settings = topbar.data(self.attr_name(true) + '-init'),
section = self.S('section, .top-bar-section', this);
topbar.data('index', 0);
var topbarContainer = topbar.parent();
if (topbarContainer.hasClass('fixed') || self.is_sticky(topbar, topbarContainer, settings) ) {
self.settings.sticky_class = settings.sticky_class;
self.settings.sticky_topbar = topbar;
topbar.data('height', topbarContainer.outerHeight());
topbar.data('stickyoffset', topbarContainer.offset().top);
} else {
topbar.data('height', topbar.outerHeight());
}
if (!settings.assembled) {
self.assemble(topbar);
}
if (settings.is_hover) {
self.S('.has-dropdown', topbar).addClass('not-click');
} else {
self.S('.has-dropdown', topbar).removeClass('not-click');
}
// Pad body when sticky (scrolled) or fixed.
self.add_custom_rule('.f-topbar-fixed { padding-top: ' + topbar.data('height') + 'px }');
if (topbarContainer.hasClass('fixed')) {
self.S('body').addClass('f-topbar-fixed');
}
});
},
is_sticky : function (topbar, topbarContainer, settings) {
var sticky = topbarContainer.hasClass(settings.sticky_class);
var smallMatch = matchMedia(Foundation.media_queries.small).matches;
var medMatch = matchMedia(Foundation.media_queries.medium).matches;
var lrgMatch = matchMedia(Foundation.media_queries.large).matches;
if (sticky && settings.sticky_on === 'all') {
return true;
}
if (sticky && this.small() && settings.sticky_on.indexOf('small') !== -1) {
if (smallMatch && !medMatch && !lrgMatch) { return true; }
}
if (sticky && this.medium() && settings.sticky_on.indexOf('medium') !== -1) {
if (smallMatch && medMatch && !lrgMatch) { return true; }
}
if (sticky && this.large() && settings.sticky_on.indexOf('large') !== -1) {
if (smallMatch && medMatch && lrgMatch) { return true; }
}
// fix for iOS browsers
if (sticky && navigator.userAgent.match(/(iPad|iPhone|iPod)/g)) {
return true;
}
return false;
},
toggle : function (toggleEl) {
var self = this,
topbar;
if (toggleEl) {
topbar = self.S(toggleEl).closest('[' + this.attr_name() + ']');
} else {
topbar = self.S('[' + this.attr_name() + ']');
}
var settings = topbar.data(this.attr_name(true) + '-init');
var section = self.S('section, .top-bar-section', topbar);
if (self.breakpoint()) {
if (!self.rtl) {
section.css({left : '0%'});
$('>.name', section).css({left : '100%'});
} else {
section.css({right : '0%'});
$('>.name', section).css({right : '100%'});
}
self.S('li.moved', section).removeClass('moved');
topbar.data('index', 0);
topbar
.toggleClass('expanded')
.css('height', '');
}
if (settings.scrolltop) {
if (!topbar.hasClass('expanded')) {
if (topbar.hasClass('fixed')) {
topbar.parent().addClass('fixed');
topbar.removeClass('fixed');
self.S('body').addClass('f-topbar-fixed');
}
} else if (topbar.parent().hasClass('fixed')) {
if (settings.scrolltop) {
topbar.parent().removeClass('fixed');
topbar.addClass('fixed');
self.S('body').removeClass('f-topbar-fixed');
window.scrollTo(0, 0);
} else {
topbar.parent().removeClass('expanded');
}
}
} else {
if (self.is_sticky(topbar, topbar.parent(), settings)) {
topbar.parent().addClass('fixed');
}
if (topbar.parent().hasClass('fixed')) {
if (!topbar.hasClass('expanded')) {
topbar.removeClass('fixed');
topbar.parent().removeClass('expanded');
self.update_sticky_positioning();
} else {
topbar.addClass('fixed');
topbar.parent().addClass('expanded');
self.S('body').addClass('f-topbar-fixed');
}
}
}
},
timer : null,
events : function (bar) {
var self = this,
S = this.S;
S(this.scope)
.off('.topbar')
.on('click.fndtn.topbar', '[' + this.attr_name() + '] .toggle-topbar', function (e) {
e.preventDefault();
self.toggle(this);
})
.on('click.fndtn.topbar', '.top-bar .top-bar-section li a[href^="#"],[' + this.attr_name() + '] .top-bar-section li a[href^="#"]', function (e) {
var li = $(this).closest('li');
if (self.breakpoint() && !li.hasClass('back') && !li.hasClass('has-dropdown')) {
self.toggle();
}
})
.on('click.fndtn.topbar', '[' + this.attr_name() + '] li.has-dropdown', function (e) {
var li = S(this),
target = S(e.target),
topbar = li.closest('[' + self.attr_name() + ']'),
settings = topbar.data(self.attr_name(true) + '-init');
if (target.data('revealId')) {
self.toggle();
return;
}
if (self.breakpoint()) {
return;
}
if (settings.is_hover && !Modernizr.touch) {
return;
}
e.stopImmediatePropagation();
if (li.hasClass('hover')) {
li
.removeClass('hover')
.find('li')
.removeClass('hover');
li.parents('li.hover')
.removeClass('hover');
} else {
li.addClass('hover');
$(li).siblings().removeClass('hover');
if (target[0].nodeName === 'A' && target.parent().hasClass('has-dropdown')) {
e.preventDefault();
}
}
})
.on('click.fndtn.topbar', '[' + this.attr_name() + '] .has-dropdown>a', function (e) {
if (self.breakpoint()) {
e.preventDefault();
var $this = S(this),
topbar = $this.closest('[' + self.attr_name() + ']'),
section = topbar.find('section, .top-bar-section'),
dropdownHeight = $this.next('.dropdown').outerHeight(),
$selectedLi = $this.closest('li');
topbar.data('index', topbar.data('index') + 1);
$selectedLi.addClass('moved');
if (!self.rtl) {
section.css({left : -(100 * topbar.data('index')) + '%'});
section.find('>.name').css({left : 100 * topbar.data('index') + '%'});
} else {
section.css({right : -(100 * topbar.data('index')) + '%'});
section.find('>.name').css({right : 100 * topbar.data('index') + '%'});
}
topbar.css('height', $this.siblings('ul').outerHeight(true) + topbar.data('height'));
}
});
S(window).off('.topbar').on('resize.fndtn.topbar', self.throttle(function () {
self.resize.call(self);
}, 50)).trigger('resize').trigger('resize.fndtn.topbar').load(function () {
// Ensure that the offset is calculated after all of the pages resources have loaded
S(this).trigger('resize.fndtn.topbar');
});
S('body').off('.topbar').on('click.fndtn.topbar', function (e) {
var parent = S(e.target).closest('li').closest('li.hover');
if (parent.length > 0) {
return;
}
S('[' + self.attr_name() + '] li.hover').removeClass('hover');
});
// Go up a level on Click
S(this.scope).on('click.fndtn.topbar', '[' + this.attr_name() + '] .has-dropdown .back', function (e) {
e.preventDefault();
var $this = S(this),
topbar = $this.closest('[' + self.attr_name() + ']'),
section = topbar.find('section, .top-bar-section'),
settings = topbar.data(self.attr_name(true) + '-init'),
$movedLi = $this.closest('li.moved'),
$previousLevelUl = $movedLi.parent();
topbar.data('index', topbar.data('index') - 1);
if (!self.rtl) {
section.css({left : -(100 * topbar.data('index')) + '%'});
section.find('>.name').css({left : 100 * topbar.data('index') + '%'});
} else {
section.css({right : -(100 * topbar.data('index')) + '%'});
section.find('>.name').css({right : 100 * topbar.data('index') + '%'});
}
if (topbar.data('index') === 0) {
topbar.css('height', '');
} else {
topbar.css('height', $previousLevelUl.outerHeight(true) + topbar.data('height'));
}
setTimeout(function () {
$movedLi.removeClass('moved');
}, 300);
});
// Show dropdown menus when their items are focused
S(this.scope).find('.dropdown a')
.focus(function () {
$(this).parents('.has-dropdown').addClass('hover');
})
.blur(function () {
$(this).parents('.has-dropdown').removeClass('hover');
});
},
resize : function () {
var self = this;
self.S('[' + this.attr_name() + ']').each(function () {
var topbar = self.S(this),
settings = topbar.data(self.attr_name(true) + '-init');
var stickyContainer = topbar.parent('.' + self.settings.sticky_class);
var stickyOffset;
if (!self.breakpoint()) {
var doToggle = topbar.hasClass('expanded');
topbar
.css('height', '')
.removeClass('expanded')
.find('li')
.removeClass('hover');
if (doToggle) {
self.toggle(topbar);
}
}
if (self.is_sticky(topbar, stickyContainer, settings)) {
if (stickyContainer.hasClass('fixed')) {
// Remove the fixed to allow for correct calculation of the offset.
stickyContainer.removeClass('fixed');
stickyOffset = stickyContainer.offset().top;
if (self.S(document.body).hasClass('f-topbar-fixed')) {
stickyOffset -= topbar.data('height');
}
topbar.data('stickyoffset', stickyOffset);
stickyContainer.addClass('fixed');
} else {
stickyOffset = stickyContainer.offset().top;
topbar.data('stickyoffset', stickyOffset);
}
}
});
},
breakpoint : function () {
return !matchMedia(Foundation.media_queries['topbar']).matches;
},
small : function () {
return matchMedia(Foundation.media_queries['small']).matches;
},
medium : function () {
return matchMedia(Foundation.media_queries['medium']).matches;
},
large : function () {
return matchMedia(Foundation.media_queries['large']).matches;
},
assemble : function (topbar) {
var self = this,
settings = topbar.data(this.attr_name(true) + '-init'),
section = self.S('section, .top-bar-section', topbar);
// Pull element out of the DOM for manipulation
section.detach();
self.S('.has-dropdown>a', section).each(function () {
var $link = self.S(this),
$dropdown = $link.siblings('.dropdown'),
url = $link.attr('href'),
$titleLi;
if (!$dropdown.find('.title.back').length) {
if (settings.mobile_show_parent_link == true && url) {
$titleLi = $('<li class="title back js-generated"><h5><a href="javascript:void(0)"></a></h5></li><li class="parent-link hide-for-large-up"><a class="parent-link js-generated" href="' + url + '">' + $link.html() +'</a></li>');
} else {
$titleLi = $('<li class="title back js-generated"><h5><a href="javascript:void(0)"></a></h5>');
}
// Copy link to subnav
if (settings.custom_back_text == true) {
$('h5>a', $titleLi).html(settings.back_text);
} else {
$('h5>a', $titleLi).html('&laquo; ' + $link.html());
}
$dropdown.prepend($titleLi);
}
});
// Put element back in the DOM
section.appendTo(topbar);
// check for sticky
this.sticky();
this.assembled(topbar);
},
assembled : function (topbar) {
topbar.data(this.attr_name(true), $.extend({}, topbar.data(this.attr_name(true)), {assembled : true}));
},
height : function (ul) {
var total = 0,
self = this;
$('> li', ul).each(function () {
total += self.S(this).outerHeight(true);
});
return total;
},
sticky : function () {
var self = this;
this.S(window).on('scroll', function () {
self.update_sticky_positioning();
});
},
update_sticky_positioning : function () {
var klass = '.' + this.settings.sticky_class,
$window = this.S(window),
self = this;
if (self.settings.sticky_topbar && self.is_sticky(this.settings.sticky_topbar, this.settings.sticky_topbar.parent(), this.settings)) {
var distance = this.settings.sticky_topbar.data('stickyoffset');
if (!self.S(klass).hasClass('expanded')) {
if ($window.scrollTop() > (distance)) {
if (!self.S(klass).hasClass('fixed')) {
self.S(klass).addClass('fixed');
self.S('body').addClass('f-topbar-fixed');
}
} else if ($window.scrollTop() <= distance) {
if (self.S(klass).hasClass('fixed')) {
self.S(klass).removeClass('fixed');
self.S('body').removeClass('f-topbar-fixed');
}
}
}
}
},
off : function () {
this.S(this.scope).off('.fndtn.topbar');
this.S(window).off('.fndtn.topbar');
},
reflow : function () {}
};
}(jQuery, window, window.document));

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,8 @@
/*!
* jQuery Cookie Plugin v1.4.1
* https://github.com/carhartl/jquery-cookie
*
* Copyright 2013 Klaus Hartl
* Released under the MIT license
*/
!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a("object"==typeof exports?require("jquery"):jQuery)}(function(a){function b(a){return h.raw?a:encodeURIComponent(a)}function c(a){return h.raw?a:decodeURIComponent(a)}function d(a){return b(h.json?JSON.stringify(a):String(a))}function e(a){0===a.indexOf('"')&&(a=a.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\"));try{return a=decodeURIComponent(a.replace(g," ")),h.json?JSON.parse(a):a}catch(b){}}function f(b,c){var d=h.raw?b:e(b);return a.isFunction(c)?c(d):d}var g=/\+/g,h=a.cookie=function(e,g,i){if(void 0!==g&&!a.isFunction(g)){if(i=a.extend({},h.defaults,i),"number"==typeof i.expires){var j=i.expires,k=i.expires=new Date;k.setTime(+k+864e5*j)}return document.cookie=[b(e),"=",d(g),i.expires?"; expires="+i.expires.toUTCString():"",i.path?"; path="+i.path:"",i.domain?"; domain="+i.domain:"",i.secure?"; secure":""].join("")}for(var l=e?void 0:{},m=document.cookie?document.cookie.split("; "):[],n=0,o=m.length;o>n;n++){var p=m[n].split("="),q=c(p.shift()),r=p.join("=");if(e&&e===q){l=f(r,g);break}e||void 0===(r=f(r))||(l[q]=r)}return l};h.defaults={},a.removeCookie=function(b,c){return void 0===a.cookie(b)?!1:(a.cookie(b,"",a.extend({},c,{expires:-1})),!a.cookie(b))}});

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,2 @@
/*! http://mths.be/placeholder v2.0.9 by @mathias */
!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a(jQuery)}(function(a){function b(b){var c={},d=/^jQuery\d+$/;return a.each(b.attributes,function(a,b){b.specified&&!d.test(b.name)&&(c[b.name]=b.value)}),c}function c(b,c){var d=this,f=a(d);if(d.value==f.attr("placeholder")&&f.hasClass("placeholder"))if(f.data("placeholder-password")){if(f=f.hide().nextAll('input[type="password"]:first').show().attr("id",f.removeAttr("id").data("placeholder-id")),b===!0)return f[0].value=c;f.focus()}else d.value="",f.removeClass("placeholder"),d==e()&&d.select()}function d(){var d,e=this,f=a(e),g=this.id;if(""===e.value){if("password"===e.type){if(!f.data("placeholder-textinput")){try{d=f.clone().attr({type:"text"})}catch(h){d=a("<input>").attr(a.extend(b(this),{type:"text"}))}d.removeAttr("name").data({"placeholder-password":f,"placeholder-id":g}).bind("focus.placeholder",c),f.data({"placeholder-textinput":d,"placeholder-id":g}).before(d)}f=f.removeAttr("id").hide().prevAll('input[type="text"]:first').attr("id",g).show()}f.addClass("placeholder"),f[0].value=f.attr("placeholder")}else f.removeClass("placeholder")}function e(){try{return document.activeElement}catch(a){}}var f,g,h="[object OperaMini]"==Object.prototype.toString.call(window.operamini),i="placeholder"in document.createElement("input")&&!h,j="placeholder"in document.createElement("textarea")&&!h,k=a.valHooks,l=a.propHooks;i&&j?(g=a.fn.placeholder=function(){return this},g.input=g.textarea=!0):(g=a.fn.placeholder=function(){var a=this;return a.filter((i?"textarea":":input")+"[placeholder]").not(".placeholder").bind({"focus.placeholder":c,"blur.placeholder":d}).data("placeholder-enabled",!0).trigger("blur.placeholder"),a},g.input=i,g.textarea=j,f={get:function(b){var c=a(b),d=c.data("placeholder-password");return d?d[0].value:c.data("placeholder-enabled")&&c.hasClass("placeholder")?"":b.value},set:function(b,f){var g=a(b),h=g.data("placeholder-password");return h?h[0].value=f:g.data("placeholder-enabled")?(""===f?(b.value=f,b!=e()&&d.call(b)):g.hasClass("placeholder")?c.call(b,!0,f)||(b.value=f):b.value=f,g):b.value=f}},i||(k.input=f,l.value=f),j||(k.textarea=f,l.value=f),a(function(){a(document).delegate("form","submit.placeholder",function(){var b=a(".placeholder",this).each(c);setTimeout(function(){b.each(d)},10)})}),a(window).bind("beforeunload.placeholder",function(){a(".placeholder").each(function(){this.value=""})}))});

View File

@@ -0,0 +1,45 @@
@charset "UTF-8";
// Foundation by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
// Make sure the charset is set appropriately
// Behold, here are all the Foundation components.
@import "foundation/components/grid";
@import "foundation/components/accordion";
@import "foundation/components/alert-boxes";
@import "foundation/components/block-grid";
@import "foundation/components/breadcrumbs";
@import "foundation/components/button-groups";
@import "foundation/components/buttons";
@import "foundation/components/clearing";
@import "foundation/components/dropdown";
@import "foundation/components/dropdown-buttons";
@import "foundation/components/flex-video";
@import "foundation/components/forms";
@import "foundation/components/icon-bar";
@import "foundation/components/inline-lists";
@import "foundation/components/joyride";
@import "foundation/components/keystrokes";
@import "foundation/components/labels";
@import "foundation/components/magellan";
@import "foundation/components/orbit";
@import "foundation/components/pagination";
@import "foundation/components/panels";
@import "foundation/components/pricing-tables";
@import "foundation/components/progress-bars";
@import "foundation/components/range-slider";
@import "foundation/components/reveal";
@import "foundation/components/side-nav";
@import "foundation/components/split-buttons";
@import "foundation/components/sub-nav";
@import "foundation/components/switches";
@import "foundation/components/tables";
@import "foundation/components/tabs";
@import "foundation/components/thumbs";
@import "foundation/components/tooltips";
@import "foundation/components/top-bar";
@import "foundation/components/type";
@import "foundation/components/offcanvas";
@import "foundation/components/visibility";

View File

@@ -0,0 +1,146 @@
// Foundation by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
// This is the default html and body font-size for the base rem value.
$rem-base: 16px !default;
// IMPORT ONCE
// We use this to prevent styles from being loaded multiple times for components that rely on other components.
$modules: () !default;
@mixin exports($name) {
// Import from global scope
$modules: $modules !global;
// Check if a module is already on the list
$module_index: index($modules, $name);
@if (($module_index == null) or ($module_index == false)) {
$modules: append($modules, $name) !global;
@content;
}
}
//
// @functions
//
// RANGES
// We use these functions to define ranges for various things, like media queries.
@function lower-bound($range){
@if length($range) <= 0 {
@return 0;
}
@return nth($range,1);
}
@function upper-bound($range) {
@if length($range) < 2 {
@return 999999999999;
}
@return nth($range, 2);
}
// STRIP UNIT
// It strips the unit of measure and returns it
@function strip-unit($num) {
@return $num / ($num * 0 + 1);
}
// TEXT INPUT TYPES
@function text-inputs( $types: all, $selector: input ) {
$return: ();
$all-text-input-types:
text
password
date
datetime
datetime-local
month
week
email
number
search
tel
time
url
color
textarea;
@if $types == all { $types: $all-text-input-types; }
@each $type in $types {
@if $type == textarea {
@if $selector == input {
$return: append($return, unquote('#{$type}'), comma)
} @else {
$return: append($return, unquote('#{$type}#{$selector}'), comma)
}
} @else {
$return: append($return, unquote('#{$selector}[type="#{$type}"]'), comma)
}
}
@return $return;
}
// CONVERT TO REM
@function convert-to-rem($value, $base-value: $rem-base) {
$value: strip-unit($value) / strip-unit($base-value) * 1rem;
@if ($value == 0rem) { $value: 0; } // Turn 0rem into 0
@return $value;
}
@function data($attr) {
@if $namespace {
@return '[data-' + $namespace + '-' + $attr + ']';
}
@return '[data-' + $attr + ']';
}
// REM CALC
// New Syntax, allows to optionally calculate on a different base value to counter compounding effect of rem's.
// Call with 1, 2, 3 or 4 parameters, 'px' is not required but supported:
//
// rem-calc(10 20 30px 40);
//
// Space delimited, if you want to delimit using comma's, wrap it in another pair of brackets
//
// rem-calc((10, 20, 30, 40px));
//
// Optionally call with a different base (eg: 8px) to calculate rem.
//
// rem-calc(16px 32px 48px, 8px);
//
// If you require to comma separate your list
//
// rem-calc((16px, 32px, 48), 8px);
@function rem-calc($values, $base-value: $rem-base) {
$max: length($values);
@if $max == 1 { @return convert-to-rem(nth($values, 1), $base-value); }
$remValues: ();
@for $i from 1 through $max {
$remValues: append($remValues, convert-to-rem(nth($values, $i), $base-value));
}
@return $remValues;
}
// OLD EM CALC
// Deprecated: We'll drop support for this in 5.1.0, use rem-calc()
@function emCalc($values){
@return rem-calc($values);
}
// OLD EM CALC
// Deprecated: We'll drop support for this in 5.1.0, use rem-calc()
@function em-calc($values){
@return rem-calc($values);
}

View File

@@ -0,0 +1,157 @@
// Foundation by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
@import "global";
//
// @variables
//
$include-html-accordion-classes: $include-html-classes !default;
$accordion-navigation-padding: rem-calc(16) !default;
$accordion-navigation-bg-color: $silver !default;
$accordion-navigation-hover-bg-color: scale-color($accordion-navigation-bg-color, $lightness: -5%) !default;
$accordion-navigation-active-bg-color: scale-color($accordion-navigation-bg-color, $lightness: -3%) !default;
$accordion-navigation-font-color: $jet !default;
$accordion-navigation-font-size: rem-calc(16) !default;
$accordion-navigation-font-family: $body-font-family !default;
$accordion-content-padding: ($column-gutter/2) !default;
$accordion-content-active-bg-color: $white !default;
// Mixin: accordion-container()
// Decription: Responsible for the container component of accordions, generating styles relating to a margin of zero and a clearfix
// Explicit Dependencies: a clearfix mixin *is* defined.
// Implicit Dependencies: None
@mixin accordion-container() {
@include clearfix;
margin-bottom: 0;
}
// Mixin: accordion-navigation( $bg, $hover-bg, $active-bg, $padding, $active_class, $font-color, $font-size, $font-family){
// @params $bg-color: [ color or string ]: Specify the background color for the navigation element
// @params $hover-bg-color [ color or string ]: Specify the background color for the navigation element when hovered
// @params $active-bg [ color or string ]: Specify the background color for the navigation element when clicked and not released.
// @params $active_class [ string ]: Specify the class name used to keep track of which accordion tab should be visible
// @params $font-color [ color or string ]: Color of the font for accordion
// @params $font-size [ number ]: Specifiy the font-size of the text inside the navigation element
// @params $font-family [ string ]: Specify the font family for the text of the navigation of the accorion
@mixin accordion-navigation( $bg: $accordion-navigation-bg-color, $hover-bg: $accordion-navigation-hover-bg-color, $active-bg: $accordion-navigation-active-bg-color, $padding: $accordion-navigation-padding, $active_class: 'active', $font-color: $accordion-navigation-font-color, $font-size: $accordion-navigation-font-size, $font-family: $accordion-navigation-font-family ){
display: block;
margin-bottom: 0 !important;
@if type-of($active_class) != "string" {
@warn "`#{$active_class}` isn't a valid string. A valid string is needed to correctly be interpolated as a CSS class. CSS classes cannot start with a number or consist of only numbers. CSS will not be generated for the active state of this navigation component."
}
@else {
&.#{ $active_class } > a {
background: $active-bg;
}
}
> a {
background: $bg;
color: $font-color;
@if type-of($padding) != number {
@warn "`#{$padding}` was read as #{type-of($padding)}";
@if $accordion-navigation-padding != null {
@warn "#{$padding} was read as a #{type-of($padding)}";
@warn "`#{$padding}` isn't a valid number. $accordion-navigation-padding (#{$accordion-navigation-padding}) will be used instead.)";
padding: $accordion-navigation-padding;
}
@else {
@warn "`#{$padding}` isn't a valid number and $accordion-navigation-padding is missing. A value of `null` is returned to not output an invalid value for padding";
padding: null;
}
}
@else {
padding: $padding;
}
display: block;
font-family: $font-family;
@if type-of($font-size) != number {
@warn "`#{$font-size}` was read as a #{type-of($font-size)}";
@if $accordion-navigation-font-size != null {
@warn "`#{$font-size}` is not a valid number. The value of $accordion-navigation-font-size will be used instead (#{$accordion-navigation-font-size}).";
font-size: $accordion-navigation-font-size;
}
@else{
@warn "`#{$font-size}` is not a valid number and the default value of $accordion-navigation-font-size is not defined. A value of `null` will be returned to not generate an invalid value for font-size.";
font-size: null;
}
}
@else {
font-size: $font-size;
}
&:hover {
background: $hover-bg;
}
}
}
// Mixin: accordion-content($bg, $padding, $active-class)
// @params $padding [ number ]: Padding for the content of the container
// @params $bg [ color ]: Background color for the content when it's visible
// @params $active_class [ string ]: Class name used to keep track of which accordion tab should be visible.
@mixin accordion-content($bg: $accordion-content-active-bg-color, $padding: $accordion-content-padding, $active_class: 'active'){
display: none;
@if type-of($padding) != "number" {
@warn "#{$padding} was read as a #{type-of($padding)}";
@if $accordion-content-padding != null {
@warn "`#{$padding}` isn't a valid number. $accordion-content-padding used instead";
padding: $accordion-content-padding;
} @else {
@warn "`#{$padding}` isn't a valid number and the default value of $accordion-content-padding is not defined. A value of `null` is returned to not output an invalid value for padding.";
padding: null;
}
} @else {
padding: $padding;
}
@if type-of($active_class) != "string" {
@warn "`#{$active_class}` isn't a valid string. A valid string is needed to correctly be interpolated as a CSS class. CSS classes cannot start with a number or consist of only numbers. CSS will not be generated for the active state of the content. "
}
@else {
&.#{$active_class} {
display: block;
background: $bg;
}
}
}
@include exports("accordion") {
@if $include-html-accordion-classes {
.accordion {
@include clearfix;
margin-bottom: 0;
.accordion-navigation, dd {
display: block;
margin-bottom: 0 !important;
&.active > a { background: $accordion-navigation-active-bg-color; }
> a {
background: $accordion-navigation-bg-color;
color: $accordion-navigation-font-color;
padding: $accordion-navigation-padding;
display: block;
font-family: $accordion-navigation-font-family;
font-size: $accordion-navigation-font-size;
&:hover { background: $accordion-navigation-hover-bg-color; }
}
> .content {
display: none;
padding: $accordion-content-padding;
&.active {
display: block;
background: $accordion-content-active-bg-color;
}
}
}
}
}
}

View File

@@ -0,0 +1,128 @@
// Foundation by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
@import "global";
//
// Alert Box Variables
//
$include-html-alert-classes: $include-html-classes !default;
// We use this to control alert padding.
$alert-padding-top: rem-calc(14) !default;
$alert-padding-default-float: $alert-padding-top !default;
$alert-padding-opposite-direction: $alert-padding-top + rem-calc(10) !default;
$alert-padding-bottom: $alert-padding-top !default;
// We use these to control text style.
$alert-font-weight: $font-weight-normal !default;
$alert-font-size: rem-calc(13) !default;
$alert-font-color: $white !default;
$alert-font-color-alt: scale-color($secondary-color, $lightness: -66%) !default;
// We use this for close hover effect.
$alert-function-factor: -14% !default;
// We use these to control border styles.
$alert-border-style: solid !default;
$alert-border-width: 1px !default;
$alert-border-color: scale-color($primary-color, $lightness: $alert-function-factor) !default;
$alert-bottom-margin: rem-calc(20) !default;
// We use these to style the close buttons
$alert-close-color: $oil !default;
$alert-close-top: 50% !default;
$alert-close-position: rem-calc(4) !default;
$alert-close-font-size: rem-calc(22) !default;
$alert-close-opacity: 0.3 !default;
$alert-close-opacity-hover: 0.5 !default;
$alert-close-padding: 0 6px 4px !default;
$alert-close-background: inherit !default;
// We use this to control border radius
$alert-radius: $global-radius !default;
$alert-transition-speed: 300ms !default;
$alert-transition-ease: ease-out !default;
//
// Alert Mixins
//
// We use this mixin to create a default alert base.
@mixin alert-base {
border-style: $alert-border-style;
border-width: $alert-border-width;
display: block;
font-weight: $alert-font-weight;
margin-bottom: $alert-bottom-margin;
position: relative;
padding: $alert-padding-top $alert-padding-opposite-direction $alert-padding-bottom $alert-padding-default-float;
font-size: $alert-font-size;
@include single-transition(opacity, $alert-transition-speed, $alert-transition-ease)
}
// We use this mixin to add alert styles
//
// $bg - The background of the alert. Default: $primary-color.
@mixin alert-style($bg:$primary-color) {
// This finds the lightness percentage of the background color.
$bg-lightness: lightness($bg);
// We control which background color and border come through.
background-color: $bg;
border-color: scale-color($bg, $lightness: $alert-function-factor);
// We control the text color for you based on the background color.
@if $bg-lightness > 70% { color: $alert-font-color-alt; }
@else { color: $alert-font-color; }
}
// We use this to create the close button.
@mixin alert-close {
font-size: $alert-close-font-size;
padding: $alert-close-padding;
line-height: .9;
position: absolute;
top: $alert-close-top;
margin-top: -($alert-close-font-size / 2);
#{$opposite-direction}: $alert-close-position;
color: $alert-close-color;
opacity: $alert-close-opacity;
background: $alert-close-background;
&:hover,
&:focus { opacity: $alert-close-opacity-hover; }
}
// We use this to quickly create alerts with a single mixin.
//
// $bg - Background of alert. Default: $primary-color.
// $radius - Radius of alert box. Default: false.
@mixin alert($bg:$primary-color, $radius:false) {
@include alert-base;
@include alert-style($bg);
@include radius($radius);
}
@include exports("alert-box") {
@if $include-html-alert-classes {
.alert-box {
@include alert;
.close { @include alert-close; }
&.radius { @include radius($alert-radius); }
&.round { @include radius($global-rounded); }
&.success { @include alert-style($success-color); }
&.alert { @include alert-style($alert-color); }
&.secondary { @include alert-style($secondary-color); }
&.warning { @include alert-style($warning-color); }
&.info { @include alert-style($info-color); }
&.alert-close { opacity: 0}
}
}
}

View File

@@ -0,0 +1,133 @@
// Foundation by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
@import "global";
//
// Block Grid Variables
//
$include-html-block-grid-classes: $include-html-classes !default;
$include-xl-html-block-grid-classes: false !default;
// We use this to control the maximum number of block grid elements per row
$block-grid-elements: 12 !default;
$block-grid-default-spacing: rem-calc(20) !default;
$align-block-grid-to-grid: false !default;
@if $align-block-grid-to-grid {
$block-grid-default-spacing: $column-gutter;
}
// Enables media queries for block-grid classes. Set to false if writing semantic HTML.
$block-grid-media-queries: true !default;
//
// Block Grid Mixins
//
// Create a custom block grid
//
// $per-row - # of items to display per row. Default: false.
// $spacing - # of ems to use as padding on each block item. Default: rem-calc(20).
// $include-spacing - Adds padding to our list item. Default: true.
// $base-style - Apply a base style to block grid. Default: true.
@mixin block-grid(
$per-row:false,
$spacing:$block-grid-default-spacing,
$include-spacing:true,
$base-style:true) {
@if $base-style {
display: block;
padding: 0;
@if $align-block-grid-to-grid {
margin: 0;
} @else {
margin: 0 (-$spacing/2);
}
@include clearfix;
&>li {
display: block;
height: auto;
float: $default-float;
@if $include-spacing {
padding: 0 ($spacing/2) $spacing;
}
}
}
@if $per-row {
&>li {
width: 100%/$per-row;
@if $include-spacing {
padding: 0 ($spacing/2) $spacing;
}
list-style: none;
&:nth-of-type(1n) { clear: none; }
&:nth-of-type(#{$per-row}n+1) { clear: both; }
@if $align-block-grid-to-grid {
@include block-grid-aligned($per-row, $spacing);
}
}
}
}
@mixin block-grid-aligned($per-row, $spacing) {
@for $i from 1 through $block-grid-elements {
@if $per-row >= $i {
$grid-column: '+' + $i;
@if $per-row == $i {
$grid-column: '';
}
&:nth-of-type(#{$per-row}n#{unquote($grid-column)}) {
padding-left: ($spacing - (($spacing / $per-row) * ($per-row - ($i - 1))));
padding-right: ($spacing - (($spacing / $per-row) * $i));
}
}
}
}
// Generate presentational markup for block grid.
//
// $size - Name of class to use, i.e. "large" will generate .large-block-grid-1, .large-block-grid-2, etc.
@mixin block-grid-html-classes($size,$include-spacing) {
@for $i from 1 through $block-grid-elements {
.#{$size}-block-grid-#{($i)} {
@include block-grid($i,$block-grid-default-spacing,$include-spacing,false);
}
}
}
@include exports("block-grid") {
@if $include-html-block-grid-classes {
[class*="block-grid-"] { @include block-grid; }
@if $block-grid-media-queries {
@media #{$small-up} {
@include block-grid-html-classes($size:small,$include-spacing:false);
}
@media #{$medium-up} {
@include block-grid-html-classes($size:medium,$include-spacing:false);
}
@media #{$large-up} {
@include block-grid-html-classes($size:large,$include-spacing:false);
}
@if $include-xl-html-block-grid-classes {
@media #{$xlarge-up} {
@include block-grid-html-classes($size:xlarge,$include-spacing:false);
}
@media #{$xxlarge-up} {
@include block-grid-html-classes($size:xxlarge,$include-spacing:false);
}
}
}
}
}

View File

@@ -0,0 +1,132 @@
// Foundation by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
@import "global";
//
// Breadcrumb Variables
//
$include-html-nav-classes: $include-html-classes !default;
// We use this to set the background color for the breadcrumb container.
$crumb-bg: scale-color($secondary-color, $lightness: 55%) !default;
// We use these to set the padding around the breadcrumbs.
$crumb-padding: rem-calc(9 14 9) !default;
$crumb-side-padding: rem-calc(12) !default;
// We use these to control border styles.
$crumb-function-factor: -10% !default;
$crumb-border-size: 1px !default;
$crumb-border-style: solid !default;
$crumb-border-color: scale-color($crumb-bg, $lightness: $crumb-function-factor) !default;
$crumb-radius: $global-radius !default;
// We use these to set various text styles for breadcrumbs.
$crumb-font-size: rem-calc(11) !default;
$crumb-font-color: $primary-color !default;
$crumb-font-color-current: $oil !default;
$crumb-font-color-unavailable: $aluminum !default;
$crumb-font-transform: uppercase !default;
$crumb-link-decor: underline !default;
// We use these to control the slash between breadcrumbs
$crumb-slash-color: $base !default;
$crumb-slash: "/" !default;
//
// Breadcrumb Mixins
//
// We use this mixin to create a container around our breadcrumbs
@mixin crumb-container {
display: block;
padding: $crumb-padding;
overflow: hidden;
margin-#{$default-float}: 0;
list-style: none;
border-style: $crumb-border-style;
border-width: $crumb-border-size;
// We control which background color and border come through.
background-color: $crumb-bg;
border-color: $crumb-border-color;
}
// We use this mixin to create breadcrumb styles from list items.
@mixin crumbs {
// A normal state will make the links look and act like clickable breadcrumbs.
margin: 0;
float: $default-float;
font-size: $crumb-font-size;
line-height: $crumb-font-size;
text-transform: $crumb-font-transform;
color: $crumb-font-color;
&:hover a, &:focus a { text-decoration: $crumb-link-decor; }
a {
color: $crumb-font-color;
}
// Current is for the link of the current page
&.current {
cursor: $cursor-default-value;
color: $crumb-font-color-current;
a {
cursor: $cursor-default-value;
color: $crumb-font-color-current;
}
&:hover, &:hover a,
&:focus, &:focus a { text-decoration: none; }
}
// Unavailable removed color and link styles so it looks inactive.
&.unavailable {
color: $crumb-font-color-unavailable;
a { color: $crumb-font-color-unavailable; }
&:hover,
&:hover a,
&:focus,
a:focus {
text-decoration: none;
color: $crumb-font-color-unavailable;
cursor: $cursor-disabled-value;
}
}
&:before {
content: "#{$crumb-slash}";
color: $crumb-slash-color;
margin: 0 $crumb-side-padding;
position: relative;
top: 1px;
}
&:first-child:before {
content: " ";
margin: 0;
}
}
@include exports("breadcrumbs") {
@if $include-html-nav-classes {
.breadcrumbs {
@include crumb-container;
@include radius($crumb-radius);
&>* {
@include crumbs;
}
}
}
}
/* Accessibility - hides the forward slash */
[aria-label="breadcrumbs"] [aria-hidden="true"]:after {
content: "/";
}

View File

@@ -0,0 +1,200 @@
// Foundation by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
@import "global";
@import "buttons";
//
// Button Group Variables
//
$include-html-button-classes: $include-html-classes !default;
// Sets the margin for the right side by default, and the left margin if right-to-left direction is used
$button-bar-margin-opposite: rem-calc(10) !default;
$button-group-border-width: 1px !default;
//
// Button Group Mixins
//
// We use this to add styles for a button group container
@mixin button-group-container($styles:true, $float:false) {
@if $styles {
list-style: none;
margin: 0;
#{$default-float}: 0;
@include clearfix();
}
@if $float {
float: #{$default-float};
margin-#{$opposite-direction}: $button-bar-margin-opposite;
& div { overflow: hidden; }
}
}
// We use this to control styles for button groups
@mixin button-group-style($radius:false, $even:false, $float:false, $orientation:horizontal) {
> button, .button {
border-#{$default-float}: $button-group-border-width solid;
border-color: rgba(255, 255, 255, 0.5);
}
&:first-child {
button, .button {
border-#{$default-float}: 0;
}
}
// We use this to control the flow, or remove those styles completely.
@if $float {
margin: 0;
float: $float;
display: list-item;
// Make sure the first child doesn't get the negative margin.
&:first-child { margin-#{$default-float}: 0; }
}
@else {
margin: 0 -2px;
display: inline-block;
}
@if $orientation == vertical {
display:block;
margin:0;
> button, .button {
border-top: $button-group-border-width solid;
border-color: rgba(255, 255, 255, 0.5);
border-left-width: 0;
margin:0;
display: block;
}
> button {
width: 100%;
}
&:first-child {
button, .button {
border-top: 0;
}
}
}
// We use these to control left and right radius on first/last buttons in the group.
@if $radius == true {
&,
& > a,
& > button,
& > .button { @include radius(0); }
&:first-child,
&:first-child > a,
&:first-child > button,
&:first-child > .button {
@if $orientation == vertical {
@include side-radius(top, $button-radius);
}
@else {
@include side-radius($default-float, $button-radius);
}
}
&:last-child,
&:last-child > a,
&:last-child > button,
&:last-child > .button {
@if $orientation == vertical {
@include side-radius(bottom, $button-radius);
}
@else {
@include side-radius($opposite-direction, $button-radius);
}
}
}
@else if $radius {
&,
& > a,
& > button,
& > .button { @include radius(0); }
&:first-child,
&:first-child > a,
&:first-child > button,
&:first-child > .button {
@if $orientation == vertical {
@include side-radius(top, $radius);
}
@else {
@include side-radius($default-float, $radius);
}
}
&:last-child,
&:last-child > a,
&:last-child > button,
&:last-child > .button {
@if $orientation == vertical {
@include side-radius(bottom, $radius);
}
@else {
@include side-radius($opposite-direction, $radius);
}
}
}
// We use this to make the buttons even width across their container
@if $even {
width: percentage((100/$even) / 100);
button, .button { width: 100%; }
}
}
@include exports("button-group") {
@if $include-html-button-classes {
.button-group { @include button-group-container;
@for $i from 2 through 8 {
&.even-#{$i} li { @include button-group-style($even:$i, $float:null); }
}
& > li { @include button-group-style(); }
&.stack {
& > li { @include button-group-style($orientation:vertical); float: none; }
}
&.stack-for-small {
& > li {
@include button-group-style($orientation:horizontal);
@media #{$small-only} {
@include button-group-style($orientation:vertical);
}
}
}
&.radius > * { @include button-group-style($radius:$button-radius, $float:null); }
&.radius.stack > * { @include button-group-style($radius:$button-radius, $float:null, $orientation:vertical); }
&.radius.stack-for-small > * {
@media #{$medium-up} {
@include button-group-style($radius:$button-radius, $orientation:horizontal);
}
@media #{$small-only} {
@include button-group-style($radius:$button-radius, $orientation:vertical);
}
}
&.round > * { @include button-group-style($radius:$button-round, $float:null); }
&.round.stack > * { @include button-group-style($radius:$button-med, $float:null, $orientation:vertical); }
&.round.stack-for-small > * {
@media #{$medium-up} {
@include button-group-style($radius:$button-round, $orientation:horizontal);
}
@media #{$small-only} {
@include button-group-style($radius:$button-med, $orientation:vertical);
}
}
}
.button-bar {
@include clearfix;
.button-group { @include button-group-container($styles:false, $float:true); }
}
}
}

View File

@@ -0,0 +1,260 @@
// Foundation by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
@import "global";
//
// @variables
//
$include-html-button-classes: $include-html-classes !default;
// We use these to build padding for buttons.
$button-tny: rem-calc(10) !default;
$button-sml: rem-calc(14) !default;
$button-med: rem-calc(16) !default;
$button-lrg: rem-calc(18) !default;
// We use this to control the display property.
$button-display: inline-block !default;
$button-margin-bottom: rem-calc(20) !default;
// We use these to control button text styles.
$button-font-family: $body-font-family !default;
$button-font-color: $white !default;
$button-font-color-alt: $oil !default;
$button-font-tny: rem-calc(11) !default;
$button-font-sml: rem-calc(13) !default;
$button-font-med: rem-calc(16) !default;
$button-font-lrg: rem-calc(20) !default;
$button-font-weight: $font-weight-normal !default;
$button-font-align: center !default;
// We use these to control various hover effects.
$button-function-factor: -20% !default;
// We use these to control button border styles.
$button-border-width: 0 !default;
$button-border-style: solid !default;
$button-bg-color: $primary-color !default;
$button-bg-hover: scale-color($button-bg-color, $lightness: $button-function-factor) !default;
$button-border-color: $button-bg-hover !default;
$secondary-button-bg-hover: scale-color($secondary-color, $lightness: $button-function-factor) !default;
$secondary-button-border-color: $secondary-button-bg-hover !default;
$success-button-bg-hover: scale-color($success-color, $lightness: $button-function-factor) !default;
$success-button-border-color: $success-button-bg-hover !default;
$alert-button-bg-hover: scale-color($alert-color, $lightness: $button-function-factor) !default;
$alert-button-border-color: $alert-button-bg-hover !default;
$warning-button-bg-hover: scale-color($warning-color, $lightness: $button-function-factor) !default;
$warning-button-border-color: $warning-button-bg-hover !default;
$info-button-bg-hover: scale-color($info-color, $lightness: $button-function-factor) !default;
$info-button-border-color: $info-button-bg-hover !default;
// We use this to set the default radius used throughout the core.
$button-radius: $global-radius !default;
$button-round: $global-rounded !default;
// We use this to set default opacity and cursor for disabled buttons.
$button-disabled-opacity: 0.7 !default;
$button-disabled-cursor: $cursor-default-value !default;
//
// @MIXIN
//
// We use this mixin to create a default button base.
//
// $style - Sets base styles. Can be set to false. Default: true.
// $display - Used to control display property. Default: $button-display || inline-block
@mixin button-base($style:true, $display:$button-display) {
@if $style {
border-style: $button-border-style;
border-width: $button-border-width;
cursor: $cursor-pointer-value;
font-family: $button-font-family;
font-weight: $button-font-weight;
line-height: normal;
margin: 0 0 $button-margin-bottom;
position: relative;
text-decoration: none;
text-align: $button-font-align;
-webkit-appearance: none;
-moz-appearance: none;
border-radius:0;
}
@if $display { display: $display; }
}
// @MIXIN
//
// We use this mixin to add button size styles
//
// $padding - Used to build padding for buttons Default: $button-med ||= rem-calc(12)
// $full-width - We can set $full-width:true to remove side padding extend width - Default: false
@mixin button-size($padding:$button-med, $full-width:false) {
// We control which padding styles come through,
// these can be turned off by setting $padding:false
@if $padding {
padding-top: $padding;
padding-#{$opposite-direction}: $padding * 2;
padding-bottom: $padding + rem-calc(1);
padding-#{$default-float}: $padding * 2;
// We control the font-size based on mixin input.
@if $padding == $button-med { font-size: $button-font-med; }
@else if $padding == $button-tny { font-size: $button-font-tny; }
@else if $padding == $button-sml { font-size: $button-font-sml; }
@else if $padding == $button-lrg { font-size: $button-font-lrg; }
}
// We can set $full-width:true to remove side padding extend width.
@if $full-width {
// We still need to check if $padding is set.
@if $padding {
padding-top: $padding;
padding-bottom: $padding + rem-calc(1);
} @else if $padding == false {
padding-top:0;
padding-bottom:0;
}
padding-right: 0;
padding-left: 0;
width: 100%;
}
}
// @MIXIN
//
// we use this mixin to create the button hover and border colors
// @MIXIN
//
// We use this mixin to add button color styles
//
// $bg - Background color. We can set $bg:false for a transparent background. Default: $primary-color.
// $radius - If true, set to button radius which is $button-radius || explicitly set radius amount in px (ex. $radius:10px). Default: false
// $disabled - We can set $disabled:true to create a disabled transparent button. Default: false
// $bg-hover - Button Hover Background Color. Default: $button-bg-hover
// $border-color - Button Border Color. Default: $button-border-color
@mixin button-style($bg:$button-bg-color, $radius:false, $disabled:false, $bg-hover:null, $border-color:null) {
// We control which background styles are used,
// these can be removed by setting $bg:false
@if $bg {
@if $bg-hover == null {
$bg-hover: if($bg == $button-bg-color, $button-bg-hover, scale-color($bg, $lightness: $button-function-factor));
}
@if $border-color == null {
$border-color: if($bg == $button-bg-color, $button-border-color, scale-color($bg, $lightness: $button-function-factor));
}
// This find the lightness percentage of the background color.
$bg-lightness: lightness($bg);
$bg-hover-lightness: lightness($bg-hover);
background-color: $bg;
border-color: $border-color;
&:hover,
&:focus { background-color: $bg-hover; }
// We control the text color for you based on the background color.
color: if($bg-lightness > 70%, $button-font-color-alt, $button-font-color);
&:hover,
&:focus {
color: if($bg-hover-lightness > 70%, $button-font-color-alt, $button-font-color);
}
}
// We can set $disabled:true to create a disabled transparent button.
@if $disabled {
cursor: $button-disabled-cursor;
opacity: $button-disabled-opacity;
box-shadow: none;
&:hover,
&:focus { background-color: $bg; }
}
// We can control how much button radius is used.
@if $radius == true { @include radius($button-radius); }
@else if $radius { @include radius($radius); }
}
// @MIXIN
//
// We use this to quickly create buttons with a single mixin. As @jaredhardy puts it, "the kitchen sink mixin"
//
// $padding - Used to build padding for buttons Default: $button-med ||= rem-calc(12)
// $bg - Primary color set in settings file. Default: $button-bg.
// $radius - If true, set to button radius which is $global-radius || explicitly set radius amount in px (ex. $radius:10px). Default:false.
// $full-width - We can set $full-width:true to remove side padding extend width. Default:false.
// $disabled - We can set $disabled:true to create a disabled transparent button. Default:false.
// $is-prefix - Not used? Default:false.
// $bg-hover - Button Hover Color - Default null - see button-style mixin
// $border-color - Button Border Color - Default null - see button-style mixin
// $transition - We can control whether or not to include the background-color transition property - Default:true.
@mixin button($padding:$button-med, $bg:$button-bg-color, $radius:false, $full-width:false, $disabled:false, $is-prefix:false, $bg-hover:null, $border-color:null, $transition: true) {
@include button-base;
@include button-size($padding, $full-width);
@include button-style($bg, $radius, $disabled, $bg-hover, $border-color);
@if $transition {
@include single-transition(background-color);
}
}
@include exports("button") {
@if $include-html-button-classes {
// Default styles applied outside of media query
button, .button {
@include button-base;
@include button-size;
@include button-style;
@include single-transition(background-color);
&.secondary { @include button-style($bg:$secondary-color, $bg-hover:$secondary-button-bg-hover, $border-color:$secondary-button-border-color); }
&.success { @include button-style($bg:$success-color, $bg-hover:$success-button-bg-hover, $border-color:$success-button-border-color); }
&.alert { @include button-style($bg:$alert-color, $bg-hover:$alert-button-bg-hover, $border-color:$alert-button-border-color); }
&.warning { @include button-style($bg:$warning-color, $bg-hover:$warning-button-bg-hover, $border-color:$warning-button-border-color); }
&.info { @include button-style($bg:$info-color, $bg-hover:$info-button-bg-hover, $border-color:$info-button-border-color); }
&.large { @include button-size($padding:$button-lrg); }
&.small { @include button-size($padding:$button-sml); }
&.tiny { @include button-size($padding:$button-tny); }
&.expand { @include button-size($padding:null,$full-width:true); }
&.left-align { text-align: left; text-indent: rem-calc(12); }
&.right-align { text-align: right; padding-right: rem-calc(12); }
&.radius { @include button-style($bg:false, $radius:true); }
&.round { @include button-style($bg:false, $radius:$button-round); }
&.disabled, &[disabled] { @include button-style($bg:$button-bg-color, $disabled:true, $bg-hover:$button-bg-hover, $border-color:$button-border-color);
&.secondary { @include button-style($bg:$secondary-color, $disabled:true, $bg-hover:$secondary-button-bg-hover, $border-color:$secondary-button-border-color); }
&.success { @include button-style($bg:$success-color, $disabled:true, $bg-hover:$success-button-bg-hover, $border-color:$success-button-border-color); }
&.alert { @include button-style($bg:$alert-color, $disabled:true, $bg-hover:$alert-button-bg-hover, $border-color:$alert-button-border-color); }
&.warning { @include button-style($bg:$warning-color, $disabled:true, $bg-hover:$warning-button-bg-hover, $border-color:$warning-button-border-color); }
&.info { @include button-style($bg:$info-color, $disabled:true, $bg-hover:$info-button-bg-hover, $border-color:$info-button-border-color); }
}
}
//firefox 2px fix
button::-moz-focus-inner {border:0; padding:0;}
@media #{$medium-up} {
button, .button {
@include button-base($style:false, $display:inline-block);
@include button-size($padding:false, $full-width:false);
}
}
}
}

View File

@@ -0,0 +1,256 @@
// Foundation by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
@import "global";
//
// @variables
//
$include-html-clearing-classes: $include-html-classes !default;
// We use these to set the background colors for parts of Clearing.
$clearing-bg: $oil !default;
$clearing-caption-bg: $clearing-bg !default;
$clearing-carousel-bg: rgba(51,51,51,0.8) !default;
$clearing-img-bg: $clearing-bg !default;
// We use these to style the close button
$clearing-close-color: $iron !default;
$clearing-close-size: 30px !default;
// We use these to style the arrows
$clearing-arrow-size: 12px !default;
$clearing-arrow-color: $clearing-close-color !default;
// We use these to style captions
$clearing-caption-font-color: $iron !default;
$clearing-caption-font-size: 0.875em !default;
$clearing-caption-padding: 10px 30px 20px !default;
// We use these to make the image and carousel height and style
$clearing-active-img-height: 85% !default;
$clearing-carousel-height: 120px !default;
$clearing-carousel-thumb-width: 120px !default;
$clearing-carousel-thumb-active-border: 1px solid rgb(255,255,255) !default;
@include exports("clearing") {
@if $include-html-clearing-classes {
// We decided to not create a mixin for Clearing because it relies
// on predefined classes and structure to work properly.
// The variables above should give enough control.
/* Clearing Styles */
.clearing-thumbs, #{data('clearing')} {
@include clearfix;
margin-bottom: 0;
margin-#{$default-float}: 0;
list-style: none;
li {
float: $default-float;
margin-#{$opposite-direction}: 10px;
}
&[class*="block-grid-"] li {
margin-#{$opposite-direction}: 0;
}
}
.clearing-blackout {
background: $clearing-bg;
position: fixed;
width: 100%;
height: 100%;
top: 0;
#{$default-float}: 0;
z-index: 998;
.clearing-close { display: block; }
}
.clearing-container {
position: relative;
z-index: 998;
height: 100%;
overflow: hidden;
margin: 0;
}
.clearing-touch-label {
position: absolute;
top: 50%;
left: 50%;
color: $base;
font-size: 0.6em;
}
.visible-img {
height: 95%;
position: relative;
img {
position: absolute;
#{$default-float}: 50%;
top: 50%;
@if $default-float == left {
transform: translateY(-50%) translateX(-50%);
-webkit-transform: translateY(-50%) translateX(-50%);
-ms-transform: translateY(-50%) translateX(-50%);
}
@else {
transform: translateY(-50%) translateX(50%);
-webkit-transform: translateY(-50%) translateX(50%);
-ms-transform: translateY(-50%) translateX(50%);
};
max-height: 100%;
max-width: 100%;
}
}
.clearing-caption {
color: $clearing-caption-font-color;
font-size: $clearing-caption-font-size;
line-height: 1.3;
margin-bottom: 0;
text-align: center;
bottom: 0;
background: $clearing-caption-bg;
width: 100%;
padding: $clearing-caption-padding;
position: absolute;
#{$default-float}: 0;
}
.clearing-close {
z-index: 999;
padding-#{$default-float}: 20px;
padding-top: 10px;
font-size: $clearing-close-size;
line-height: 1;
color: $clearing-close-color;
display: none;
&:hover,
&:focus { color: $iron; }
}
.clearing-assembled .clearing-container { height: 100%;
.carousel > ul { display: none; }
}
// If you want to show a lightbox, but only have a single image come through as the thumbnail
.clearing-feature li {
display: none;
&.clearing-featured-img {
display: block;
}
}
// Large screen overrides
@media #{$medium-up} {
.clearing-main-prev,
.clearing-main-next {
position: absolute;
height: 100%;
width: 40px;
top: 0;
& > span {
position: absolute;
top: 50%;
display: block;
width: 0;
height: 0;
border: solid $clearing-arrow-size;
&:hover { opacity: 0.8; }
}
}
.clearing-main-prev {
#{$default-float}: 0;
& > span {
#{$default-float}: 5px;
border-color: transparent;
border-#{$opposite-direction}-color: $clearing-arrow-color;
}
}
.clearing-main-next {
#{$opposite-direction}: 0;
& > span {
border-color: transparent;
border-#{$default-float}-color: $clearing-arrow-color;
}
}
.clearing-main-prev.disabled,
.clearing-main-next.disabled { opacity: 0.3; }
.clearing-assembled .clearing-container {
.carousel {
background: $clearing-carousel-bg;
height: $clearing-carousel-height;
margin-top: 10px;
text-align: center;
& > ul {
display: inline-block;
z-index: 999;
height: 100%;
position: relative;
float: none;
li {
display: block;
width: $clearing-carousel-thumb-width;
min-height: inherit;
float: $default-float;
overflow: hidden;
margin-#{$opposite-direction}: 0;
padding: 0;
position: relative;
cursor: $cursor-pointer-value;
opacity: 0.4;
clear: none;
&.fix-height {
img {
height: 100%;
max-width: none;
}
}
a.th {
border: none;
box-shadow: none;
display: block;
}
img {
cursor: $cursor-pointer-value !important;
width: 100% !important;
}
&.visible { opacity: 1; }
&:hover { opacity: 0.8; }
}
}
}
.visible-img {
background: $clearing-img-bg;
overflow: hidden;
height: $clearing-active-img-height;
}
}
.clearing-close {
position: absolute;
top: 10px;
#{$opposite-direction}: 20px;
padding-#{$default-float}: 0;
padding-top: 0;
}
}
}
}

View File

@@ -0,0 +1,131 @@
// Foundation by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
@import "global";
//
// @variables
//
$include-html-button-classes: $include-html-classes !default;
// We use these to set the color of the pip in dropdown buttons
$dropdown-button-pip-color: $white !default;
$dropdown-button-pip-color-alt: $oil !default;
// We use these to set the size of the pip in dropdown buttons
$button-pip-tny: rem-calc(6) !default;
$button-pip-sml: rem-calc(7) !default;
$button-pip-med: rem-calc(9) !default;
$button-pip-lrg: rem-calc(11) !default;
// We use these to style tiny dropdown buttons
$dropdown-button-padding-tny: $button-pip-tny * 7 !default;
$dropdown-button-pip-size-tny: $button-pip-tny !default;
$dropdown-button-pip-opposite-tny: $button-pip-tny * 3 !default;
$dropdown-button-pip-top-tny: (-$button-pip-tny / 2) + rem-calc(1) !default;
// We use these to style small dropdown buttons
$dropdown-button-padding-sml: $button-pip-sml * 7 !default;
$dropdown-button-pip-size-sml: $button-pip-sml !default;
$dropdown-button-pip-opposite-sml: $button-pip-sml * 3 !default;
$dropdown-button-pip-top-sml: (-$button-pip-sml / 2) + rem-calc(1) !default;
// We use these to style medium dropdown buttons
$dropdown-button-padding-med: $button-pip-med * 6 + rem-calc(3) !default;
$dropdown-button-pip-size-med: $button-pip-med - rem-calc(3) !default;
$dropdown-button-pip-opposite-med: $button-pip-med * 2.5 !default;
$dropdown-button-pip-top-med: (-$button-pip-med / 2) + rem-calc(2) !default;
// We use these to style large dropdown buttons
$dropdown-button-padding-lrg: $button-pip-lrg * 5 + rem-calc(3) !default;
$dropdown-button-pip-size-lrg: $button-pip-lrg - rem-calc(6) !default;
$dropdown-button-pip-opposite-lrg: $button-pip-lrg * 2.5 !default;
$dropdown-button-pip-top-lrg: (-$button-pip-lrg / 2) + rem-calc(3) !default;
// @mixins
//
// Dropdown Button Mixin
//
// We use this mixin to build off of the button mixin and add dropdown button styles
//
// $padding - Determines the size of button you're working with. Default: medium. Options [tiny, small, medium, large]
// $pip-color - Color of the little triangle that points to the dropdown. Default: $white.
// $base-style - Add in base-styles. This can be set to false. Default:true
@mixin dropdown-button($padding:medium, $pip-color:$white, $base-style:true) {
// We add in base styles, but they can be negated by setting to 'false'.
@if $base-style {
position: relative;
outline: none;
// This creates the base styles for the triangle pip
&::after {
position: absolute;
content: "";
width: 0;
height: 0;
display: block;
border-style: solid;
border-color: $dropdown-button-pip-color transparent transparent transparent;
top: 50%;
}
}
// If we're dealing with tiny buttons, use these styles
@if $padding == tiny {
padding-#{$opposite-direction}: $dropdown-button-padding-tny;
&:after {
border-width: $dropdown-button-pip-size-tny;
#{$opposite-direction}: $dropdown-button-pip-opposite-tny;
margin-top: $dropdown-button-pip-top-tny;
}
}
// If we're dealing with small buttons, use these styles
@if $padding == small {
padding-#{$opposite-direction}: $dropdown-button-padding-sml;
&::after {
border-width: $dropdown-button-pip-size-sml;
#{$opposite-direction}: $dropdown-button-pip-opposite-sml;
margin-top: $dropdown-button-pip-top-sml;
}
}
// If we're dealing with default (medium) buttons, use these styles
@if $padding == medium {
padding-#{$opposite-direction}: $dropdown-button-padding-med;
&::after {
border-width: $dropdown-button-pip-size-med;
#{$opposite-direction}: $dropdown-button-pip-opposite-med;
margin-top: $dropdown-button-pip-top-med;
}
}
// If we're dealing with large buttons, use these styles
@if $padding == large {
padding-#{$opposite-direction}: $dropdown-button-padding-lrg;
&::after {
border-width: $dropdown-button-pip-size-lrg;
#{$opposite-direction}: $dropdown-button-pip-opposite-lrg;
margin-top: $dropdown-button-pip-top-lrg;
}
}
// We can control the pip color. We didn't use logic in this case, just set it and forget it.
@if $pip-color {
&::after { border-color: $pip-color transparent transparent transparent; }
}
}
@include exports("dropdown-button") {
@if $include-html-button-classes {
.dropdown.button, button.dropdown { @include dropdown-button;
&.tiny { @include dropdown-button(tiny,$base-style:false); }
&.small { @include dropdown-button(small,$base-style:false); }
&.large { @include dropdown-button(large,$base-style:false); }
&.secondary:after { border-color: $dropdown-button-pip-color-alt transparent transparent transparent; }
}
}
}

View File

@@ -0,0 +1,262 @@
// Foundation by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
@import "global";
//
// @variables
//
$include-html-dropdown-classes: $include-html-classes !default;
// We use these to controls height and width styles.
$f-dropdown-max-width: 200px !default;
$f-dropdown-height: auto !default;
$f-dropdown-max-height: none !default;
// Used for bottom position
$f-dropdown-margin-top: 2px !default;
// Used for right position
$f-dropdown-margin-left: $f-dropdown-margin-top !default;
// Used for left position
$f-dropdown-margin-right: $f-dropdown-margin-top !default;
// Used for top position
$f-dropdown-margin-bottom: $f-dropdown-margin-top !default;
// We use this to control the background color
$f-dropdown-bg: $white !default;
// We use this to set the border styles for dropdowns.
$f-dropdown-border-style: solid !default;
$f-dropdown-border-width: 1px !default;
$f-dropdown-border-color: scale-color($white, $lightness: -20%) !default;
// We use these to style the triangle pip.
$f-dropdown-triangle-size: 6px !default;
$f-dropdown-triangle-color: $white !default;
$f-dropdown-triangle-side-offset: 10px !default;
// We use these to control styles for the list elements.
$f-dropdown-list-style: none !default;
$f-dropdown-font-color: $charcoal !default;
$f-dropdown-font-size: rem-calc(14) !default;
$f-dropdown-list-padding: rem-calc(5, 10) !default;
$f-dropdown-line-height: rem-calc(18) !default;
$f-dropdown-list-hover-bg: $smoke !default;
$dropdown-mobile-default-float: 0 !default;
// We use this to control the styles for when the dropdown has custom content.
$f-dropdown-content-padding: rem-calc(20) !default;
// Default radius for dropdown.
$f-dropdown-radius: $global-radius !default;
//
// @mixins
//
//
// NOTE: Make default max-width change between list and content types. Can add more width with classes, maybe .small, .medium, .large, etc.;
// We use this to style the dropdown container element.
// $content-list - Sets list-style. Default: list. Options: [list, content]
// $triangle - Sets if dropdown has triangle. Default:true.
// $max-width - Default: $f-dropdown-max-width || 200px.
@mixin dropdown-container($content:list, $triangle:true, $max-width:$f-dropdown-max-width) {
position: absolute;
left: -9999px;
list-style: $f-dropdown-list-style;
margin-#{$default-float}: 0;
outline: none;
> *:first-child { margin-top: 0; }
> *:last-child { margin-bottom: 0; }
@if $content == list {
width: 100%;
max-height: $f-dropdown-max-height;
height: $f-dropdown-height;
background: $f-dropdown-bg;
border: $f-dropdown-border-style $f-dropdown-border-width $f-dropdown-border-color;
font-size: $f-dropdown-font-size;
z-index: 89;
}
@else if $content == content {
padding: $f-dropdown-content-padding;
width: 100%;
height: $f-dropdown-height;
max-height: $f-dropdown-max-height;
background: $f-dropdown-bg;
border: $f-dropdown-border-style $f-dropdown-border-width $f-dropdown-border-color;
font-size: $f-dropdown-font-size;
z-index: 89;
}
@if $triangle == bottom {
margin-top: $f-dropdown-margin-top;
&:before {
@include css-triangle($f-dropdown-triangle-size, $f-dropdown-triangle-color, bottom);
position: absolute;
top: -($f-dropdown-triangle-size * 2);
#{$default-float}: $f-dropdown-triangle-side-offset;
z-index: 89;
}
&:after {
@include css-triangle($f-dropdown-triangle-size + 1, $f-dropdown-border-color, bottom);
position: absolute;
top: -(($f-dropdown-triangle-size + 1) * 2);
#{$default-float}: $f-dropdown-triangle-side-offset - 1;
z-index: 88;
}
&.right:before {
#{$default-float}: auto;
#{$opposite-direction}: $f-dropdown-triangle-side-offset;
}
&.right:after {
#{$default-float}: auto;
#{$opposite-direction}: $f-dropdown-triangle-side-offset - 1;
}
}
@if $triangle == $default-float {
margin-top: 0;
margin-#{$default-float}: $f-dropdown-margin-right;
&:before {
@include css-triangle($f-dropdown-triangle-size, $f-dropdown-triangle-color, #{$opposite-direction});
position: absolute;
top: $f-dropdown-triangle-side-offset;
#{$default-float}: -($f-dropdown-triangle-size * 2);
z-index: 89;
}
&:after {
@include css-triangle($f-dropdown-triangle-size + 1, $f-dropdown-border-color, #{$opposite-direction});
position: absolute;
top: $f-dropdown-triangle-side-offset - 1;
#{$default-float}: -($f-dropdown-triangle-size * 2) - 2;
z-index: 88;
}
}
@if $triangle == $opposite-direction {
margin-top: 0;
margin-#{$default-float}: -$f-dropdown-margin-right;
&:before {
@include css-triangle($f-dropdown-triangle-size, $f-dropdown-triangle-color, #{$default-float});
position: absolute;
top: $f-dropdown-triangle-side-offset;
#{$opposite-direction}: -($f-dropdown-triangle-size * 2);
#{$default-float}: auto;
z-index: 89;
}
&:after {
@include css-triangle($f-dropdown-triangle-size + 1, $f-dropdown-border-color, #{$default-float});
position: absolute;
top: $f-dropdown-triangle-side-offset - 1;
#{$opposite-direction}: -($f-dropdown-triangle-size * 2) - 2;
#{$default-float}: auto;
z-index: 88;
}
}
@if $triangle == top {
margin-top: -$f-dropdown-margin-bottom;
margin-left: 0;
&:before {
@include css-triangle($f-dropdown-triangle-size, $f-dropdown-triangle-color, top);
position: absolute;
top: auto;
bottom: -($f-dropdown-triangle-size * 2);
#{$default-float}: $f-dropdown-triangle-side-offset;
#{$opposite-direction}: auto;
z-index: 89;
}
&:after {
@include css-triangle($f-dropdown-triangle-size + 1, $f-dropdown-border-color, top);
position: absolute;
top: auto;
bottom: -($f-dropdown-triangle-size * 2) - 2;
#{$default-float}: $f-dropdown-triangle-side-offset - 1;
#{$opposite-direction}: auto;
z-index: 88;
}
}
@if $max-width { max-width: $max-width; }
@else { max-width: $f-dropdown-max-width; }
}
// @MIXIN
//
// We use this to style the list elements or content inside the dropdown.
@mixin dropdown-style {
font-size: $f-dropdown-font-size;
cursor: $cursor-pointer-value;
line-height: $f-dropdown-line-height;
margin: 0;
&:hover,
&:focus { background: $f-dropdown-list-hover-bg; }
&.radius { @include radius($f-dropdown-radius); }
a {
display: block;
padding: $f-dropdown-list-padding;
color: $f-dropdown-font-color;
}
}
@include exports("dropdown") {
@if $include-html-dropdown-classes {
/* Foundation Dropdowns */
.f-dropdown {
@include dropdown-container(list, bottom);
&.drop-#{$opposite-direction} {
@include dropdown-container(list, #{$default-float});
}
&.drop-#{$default-float} {
@include dropdown-container(list, #{$opposite-direction});
}
&.drop-top {
@include dropdown-container(list, top);
}
// max-width: none;
li { @include dropdown-style; }
// You can also put custom content in these dropdowns
&.content { @include dropdown-container(content, $triangle:false); }
// Sizes
&.tiny { max-width: 200px; }
&.small { max-width: 300px; }
&.medium { max-width: 500px; }
&.large { max-width: 800px; }
&.mega {
width:100%!important;
max-width:100%!important;
&.open{
left:0!important;
}
}
}
}
}

View File

@@ -0,0 +1,51 @@
// Foundation by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
@import "global";
//
// @variables
//
$include-html-media-classes: $include-html-classes !default;
// We use these to control video container padding and margins
$flex-video-padding-top: rem-calc(25) !default;
$flex-video-padding-bottom: 67.5% !default;
$flex-video-margin-bottom: rem-calc(16) !default;
// We use this to control widescreen bottom padding
$flex-video-widescreen-padding-bottom: 56.34% !default;
//
// @mixins
//
@mixin flex-video-container {
position: relative;
padding-top: $flex-video-padding-top;
padding-bottom: $flex-video-padding-bottom;
height: 0;
margin-bottom: $flex-video-margin-bottom;
overflow: hidden;
&.widescreen { padding-bottom: $flex-video-widescreen-padding-bottom; }
&.vimeo { padding-top: 0; }
iframe,
object,
embed,
video {
position: absolute;
top: 0;
#{$default-float}: 0;
width: 100%;
height: 100%;
}
}
@include exports("flex-video") {
@if $include-html-media-classes {
.flex-video { @include flex-video-container; }
}
}

View File

@@ -0,0 +1,577 @@
// Foundation by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
@import "global";
@import "buttons";
//
// @variables
//
$include-html-form-classes: $include-html-classes !default;
// We use this to set the base for lots of form spacing and positioning styles
$form-spacing: rem-calc(16) !default;
// We use these to style the labels in different ways
$form-label-pointer: pointer !default;
$form-label-font-size: rem-calc(14) !default;
$form-label-font-weight: $font-weight-normal !default;
$form-label-line-height: 1.5 !default;
$form-label-font-color: scale-color($black, $lightness: 30%) !default;
$form-label-small-transform: capitalize !default;
$form-label-bottom-margin: 0 !default;
$input-font-family: inherit !default;
$input-font-color: rgba(0,0,0,0.75) !default;
$input-font-size: rem-calc(14) !default;
$input-bg-color: $white !default;
$input-focus-bg-color: scale-color($white, $lightness: -2%) !default;
$input-border-color: scale-color($white, $lightness: -20%) !default;
$input-focus-border-color: scale-color($white, $lightness: -40%) !default;
$input-border-style: solid !default;
$input-border-width: 1px !default;
$input-border-radius: $global-radius !default;
$input-disabled-bg: $gainsboro !default;
$input-disabled-cursor: $cursor-default-value !default;
$input-box-shadow: inset 0 1px 2px rgba(0,0,0,0.1) !default;
$input-include-glowing-effect: false !default;
// We use these to style the fieldset border and spacing.
$fieldset-border-style: solid !default;
$fieldset-border-width: 1px !default;
$fieldset-border-color: $gainsboro !default;
$fieldset-padding: rem-calc(20) !default;
$fieldset-margin: rem-calc(18 0) !default;
// We use these to style the legends when you use them
$legend-bg: $white !default;
$legend-font-weight: $font-weight-bold !default;
$legend-padding: rem-calc(0 3) !default;
// We use these to style the prefix and postfix input elements
$input-prefix-bg: scale-color($white, $lightness: -5%) !default;
$input-prefix-border-color: scale-color($white, $lightness: -20%) !default;
$input-prefix-border-size: 1px !default;
$input-prefix-border-type: solid !default;
$input-prefix-overflow: visible !default;
$input-prefix-font-color: $oil !default;
$input-prefix-font-color-alt: $white !default;
// We use this setting to turn on/off HTML5 number spinners (the up/down arrows)
$input-number-spinners: true !default;
// We use these to style the error states for inputs and labels
$input-error-message-padding: rem-calc(6 9 9) !default;
$input-error-message-top: -1px !default;
$input-error-message-font-size: rem-calc(12) !default;
$input-error-message-font-weight: $font-weight-normal !default;
$input-error-message-font-style: italic !default;
$input-error-message-font-color: $white !default;
$input-error-message-bg-color: $alert-color !default;
$input-error-message-font-color-alt: $oil !default;
// We use this to style the glowing effect of inputs when focused
$glowing-effect-fade-time: 0.45s !default;
$glowing-effect-color: $input-focus-border-color !default;
// Select variables
$select-bg-color: $ghost !default;
$select-hover-bg-color: scale-color($select-bg-color, $lightness: -3%) !default;
//
// @MIXINS
//
// We use this mixin to give us form styles for rows inside of forms
@mixin form-row-base {
.row { margin: 0 ((-$form-spacing) / 2);
.column,
.columns { padding: 0 ($form-spacing / 2); }
// Use this to collapse the margins of a form row
&.collapse { margin: 0;
.column,
.columns { padding: 0; }
input {
@include side-radius($opposite-direction, 0);
}
}
}
input.column,
input.columns,
textarea.column,
textarea.columns { padding-#{$default-float}: ($form-spacing / 2); }
}
// @MIXIN
//
// We use this mixin to give all basic form elements their style
@mixin form-element {
background-color: $input-bg-color;
font-family: $input-font-family;
border: {
style: $input-border-style;
width: $input-border-width;
color: $input-border-color;
}
box-shadow: $input-box-shadow;
color: $input-font-color;
display: block;
font-size: $input-font-size;
margin: 0 0 $form-spacing 0;
padding: $form-spacing / 2;
height: ($input-font-size + ($form-spacing * 1.5) - rem-calc(1));
width: 100%;
@include box-sizing(border-box);
@if $input-include-glowing-effect {
@include block-glowing-effect(focus, $glowing-effect-fade-time, $glowing-effect-color);
}
// Basic focus styles
&:focus {
background: $input-focus-bg-color;
border-color: $input-focus-border-color;
outline: none;
}
// Disbaled Styles
&:disabled {
background-color: $input-disabled-bg;
cursor: $input-disabled-cursor;
}
// Disabled background input background color
&[disabled],
&[readonly],
fieldset[disabled] & {
background-color: $input-disabled-bg;
cursor: $input-disabled-cursor;
}
}
// @MIXIN
//
// We use this mixin to create form labels
//
// $alignment - Alignment options. Default: false. Options: [right, inline, false]
// $base-style - Control whether or not the base styles come through. Default: true.
@mixin form-label($alignment:false, $base-style:true) {
// Control whether or not the base styles come through.
@if $base-style {
font-size: $form-label-font-size;
color: $form-label-font-color;
cursor: $form-label-pointer;
display: block;
font-weight: $form-label-font-weight;
line-height: $form-label-line-height;
margin-bottom: $form-label-bottom-margin;
}
// Alignment options
@if $alignment == right {
float: none !important;
text-align: right;
}
@else if $alignment == inline {
margin: 0 0 $form-spacing 0;
padding: $form-spacing / 2 + rem-calc($input-border-width) 0;
}
}
// We use this mixin to create postfix/prefix form Labels
@mixin prefix-postfix-base {
display: block;
position: relative;
z-index: 2;
text-align: center;
width: 100%;
padding-top: 0;
padding-bottom: 0;
border-style: $input-prefix-border-type;
border-width: $input-prefix-border-size;
overflow: $input-prefix-overflow;
font-size: $form-label-font-size;
height: ($input-font-size + ($form-spacing * 1.5) - rem-calc(1));
line-height: ($input-font-size + ($form-spacing * 1.5) - rem-calc(1));
}
// @MIXIN
//
// We use this mixin to create prefix label styles
// $bg - Default:$input-prefix-bg || scale-color($white, $lightness: -5%) !default;
// $is-button - Toggle position settings if prefix is a button. Default:false
//
@mixin prefix($bg:$input-prefix-bg, $border:$input-prefix-border-color, $is-button:false) {
@if $bg {
$bg-lightness: lightness($bg);
background: $bg;
border-#{$opposite-direction}: none;
// Control the font color based on background brightness
@if $bg-lightness > 70% or $bg == yellow { color: $input-prefix-font-color; }
@else { color: $input-prefix-font-color-alt; }
}
@if $border {
border-color: $border;
}
@if $is-button {
padding-#{$default-float}: 0;
padding-#{$opposite-direction}: 0;
padding-top: 0;
padding-bottom: 0;
text-align: center;
border: none;
}
}
// @MIXIN
//
// We use this mixin to create postfix label styles
// $bg - Default:$input-prefix-bg || scale-color($white, $lightness: -5%) !default;
// $is-button - Toggle position settings if prefix is a button. Default: false
@mixin postfix($bg:$input-prefix-bg, $border:$input-prefix-border-color, $is-button:false) {
@if $bg {
$bg-lightness: lightness($bg);
background: $bg;
border-#{$default-float}: none;
// Control the font color based on background brightness
@if $bg-lightness > 70% or $bg == yellow { color: $input-prefix-font-color; }
@else { color: $input-prefix-font-color-alt; }
}
@if $border {
border-color: $border;
}
@if $is-button {
padding-#{$default-float}: 0;
padding-#{$opposite-direction}: 0;
padding-top: 0;
padding-bottom: 0;
text-align: center;
border: none;
}
}
// We use this mixin to style fieldsets
@mixin fieldset {
border: $fieldset-border-width $fieldset-border-style $fieldset-border-color;
padding: $fieldset-padding;
margin: $fieldset-margin;
// and legend styles
legend {
font-weight: $legend-font-weight;
background: $legend-bg;
padding: $legend-padding;
margin: 0;
margin-#{$default-float}: rem-calc(-3);
}
}
// @MIXIN
//
// We use this mixin to control border and background color of error inputs
// $color - Default: $alert-color (found in settings file)
@mixin form-error-color($color:$alert-color) {
border-color: $color;
background-color: rgba($color, 0.1);
// Go back to normal on focus
&:focus {
background: $input-focus-bg-color;
border-color: $input-focus-border-color;
}
}
// @MIXIN
//
// We use this simple mixin to style labels for error inputs
// $color - Default:$alert-color. Found in settings file
@mixin form-label-error-color($color:$alert-color) { color: $color; }
// @MIXIN
//
// We use this mixin to create error message styles
// $bg - Default: $alert-color (Found in settings file)
@mixin form-error-message($bg:$input-error-message-bg-color) {
display: block;
padding: $input-error-message-padding;
margin-top: $input-error-message-top;
margin-bottom: $form-spacing;
font-size: $input-error-message-font-size;
font-weight: $input-error-message-font-weight;
font-style: $input-error-message-font-style;
// We can control the text color based on the brightness of the background.
$bg-lightness: lightness($bg);
background: $bg;
@if $bg-lightness < 70% or $bg == yellow { color: $input-error-message-font-color; }
@else { color: $input-error-message-font-color-alt; }
}
// We use this mixin to style select elements
@mixin form-select {
-webkit-appearance: none !important;
border-radius: 0;
background-color: $select-bg-color;
// Hide the dropdown arrow shown in newer IE versions
&::-ms-expand {
display: none;
}
// The custom arrow has some fake horizontal padding so we can align it
// from the right side of the element without relying on CSS3
background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMTJweCIgeT0iMHB4IiB3aWR0aD0iMjRweCIgaGVpZ2h0PSIzcHgiIHZpZXdCb3g9IjAgMCA2IDMiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDYgMyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHBvbHlnb24gcG9pbnRzPSI1Ljk5MiwwIDIuOTkyLDMgLTAuMDA4LDAgIi8+PC9zdmc+);
// We can safely use leftmost and rightmost now
background-position: if($text-direction == 'rtl', 0%, 100%) center;
background-repeat: no-repeat;
border: {
style: $input-border-style;
width: $input-border-width;
color: $input-border-color;
}
padding: ($form-spacing / 2);
font-size: $input-font-size;
font-family: $body-font-family;
color: $input-font-color;
line-height: normal;
@include radius(0);
&.radius { @include radius($global-radius); }
&:hover {
background-color: $select-hover-bg-color;
border-color: $input-focus-border-color;
}
// Disabled Styles
&:disabled {
background-color: $input-disabled-bg;
cursor: $input-disabled-cursor;
}
}
// We use this mixin to turn on/off HTML5 number spinners
@mixin html5number($browser, $on:true) {
@if $on==false {
@if $browser==webkit {
-webkit-appearance: none;
margin: 0;
} @else if $browser==moz {
-moz-appearance: textfield;
}
}
}
@include exports("form") {
@if $include-html-form-classes {
/* Standard Forms */
form { margin: 0 0 $form-spacing; }
/* Using forms within rows, we need to set some defaults */
form .row { @include form-row-base; }
/* Label Styles */
label { @include form-label;
&.right { @include form-label(right,false); }
&.inline { @include form-label(inline,false); }
/* Styles for required inputs */
small {
text-transform: $form-label-small-transform;
color: scale-color($form-label-font-color, $lightness: 15%);
}
}
/* Attach elements to the beginning or end of an input */
.prefix,
.postfix { @include prefix-postfix-base; }
/* Adjust padding, alignment and radius if pre/post element is a button */
.postfix.button { @include button-size(false,false); @include postfix(false, false, true); }
.prefix.button { @include button-size(false,false); @include prefix(false, false, true); }
.prefix.button.radius { @include radius(0); @include side-radius($default-float, $button-radius); }
.postfix.button.radius { @include radius(0); @include side-radius($opposite-direction, $button-radius); }
.prefix.button.round { @include radius(0); @include side-radius($default-float, $button-round); }
.postfix.button.round { @include radius(0); @include side-radius($opposite-direction, $button-round); }
/* Separate prefix and postfix styles when on span or label so buttons keep their own */
span.prefix,label.prefix { @include prefix(); }
span.postfix,label.postfix { @include postfix(); }
/* We use this to get basic styling on all basic form elements */
#{text-inputs(all, 'input')} {
-webkit-appearance: none;
border-radius: 0;
@include form-element;
@if $input-include-glowing-effect == false {
@include single-transition(all, 0.15s, linear);
}
&.radius {
@include radius($input-border-radius);
}
}
form {
.row {
.prefix-radius.row.collapse {
input,
textarea,
select,
button { @include radius(0); @include side-radius($opposite-direction, $button-radius); }
.prefix { @include radius(0); @include side-radius($default-float, $button-radius); }
}
.postfix-radius.row.collapse {
input,
textarea,
select,
button { @include radius(0); @include side-radius($default-float, $button-radius); }
.postfix { @include radius(0); @include side-radius($opposite-direction, $button-radius); }
}
.prefix-round.row.collapse {
input,
textarea,
select,
button { @include radius(0); @include side-radius($opposite-direction, $button-round); }
.prefix { @include radius(0); @include side-radius($default-float, $button-round); }
}
.postfix-round.row.collapse {
input,
textarea,
select,
button { @include radius(0); @include side-radius($default-float, $button-round); }
.postfix { @include radius(0); @include side-radius($opposite-direction, $button-round); }
}
}
}
input[type="submit"] {
-webkit-appearance: none;
border-radius: 0;
}
/* Respect enforced amount of rows for textarea */
textarea[rows] {
height: auto;
}
/* Not allow resize out of parent */
textarea {
max-width: 100%;
}
/* Add height value for select elements to match text input height */
select {
@include form-select;
height: ($input-font-size + ($form-spacing * 1.5) - rem-calc(1));
&[multiple] {
height: auto;
}
}
/* Adjust margin for form elements below */
input[type="file"],
input[type="checkbox"],
input[type="radio"],
select {
margin: 0 0 $form-spacing 0;
}
input[type="checkbox"] + label,
input[type="radio"] + label {
display: inline-block;
margin-#{$default-float}: $form-spacing * .5;
margin-#{$opposite-direction}: $form-spacing;
margin-bottom: 0;
vertical-align: baseline;
}
/* Normalize file input width */
input[type="file"] {
width:100%;
}
/* HTML5 Number spinners settings */
input[type=number] {
@include html5number(moz, $input-number-spinners)
}
input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button {
@include html5number(webkit, $input-number-spinners);
}
/* We add basic fieldset styling */
fieldset {
@include fieldset;
}
/* Error Handling */
#{data('abide')} {
.error small.error, .error span.error, span.error, small.error {
@include form-error-message;
}
span.error, small.error { display: none; }
}
span.error, small.error {
@include form-error-message;
}
.error {
input,
textarea,
select {
margin-bottom: 0;
}
input[type="checkbox"],
input[type="radio"] {
margin-bottom: $form-spacing
}
label,
label.error {
@include form-label-error-color;
}
small.error {
@include form-error-message;
}
> label {
> small {
color: scale-color($form-label-font-color, $lightness: 15%);
background: transparent;
padding: 0;
text-transform: $form-label-small-transform;
font-style: normal;
font-size: 60%;
margin: 0;
display: inline;
}
}
span.error-message {
display: block;
}
}
input.error,
textarea.error,
select.error {
margin-bottom: 0;
}
label.error { @include form-label-error-color; }
}
}

View File

@@ -0,0 +1,480 @@
// Foundation by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
@import "../functions";
//
// Foundation Variables
//
// Data attribute namespace
// styles get applied to [data-mysite-plugin], etc
$namespace: false !default;
// The default font-size is set to 100% of the browser style sheet (usually 16px)
// for compatibility with browser-based text zoom or user-set defaults.
// Since the typical default browser font-size is 16px, that makes the calculation for grid size.
// If you want your base font-size to be different and not have it affect the grid breakpoints,
// set $rem-base to $base-font-size and make sure $base-font-size is a px value.
$base-font-size: 100% !default;
// $base-line-height is 24px while $base-font-size is 16px
$base-line-height: 1.5 !default;
//
// Global Foundation Mixins
//
// @mixins
//
// We use this to control border radius.
// $radius - Default: $global-radius || 4px
@mixin radius($radius:$global-radius) {
@if $radius {
border-radius: $radius;
}
}
// @mixins
//
// We use this to create equal side border radius on elements.
// $side - Options: left, right, top, bottom
@mixin side-radius($side, $radius:$global-radius) {
@if ($side == left or $side == right) {
-webkit-border-bottom-#{$side}-radius: $radius;
-webkit-border-top-#{$side}-radius: $radius;
border-bottom-#{$side}-radius: $radius;
border-top-#{$side}-radius: $radius;
} @else {
-webkit-#{$side}-left-radius: $radius;
-webkit-#{$side}-right-radius: $radius;
border-#{$side}-left-radius: $radius;
border-#{$side}-right-radius: $radius;
}
}
// @mixins
//
// We can control whether or not we have inset shadows edges.
// $active - Default: true, Options: false
@mixin inset-shadow($active:true) {
box-shadow: $shiny-edge-size $shiny-edge-color inset;
@if $active { &:active {
box-shadow: $shiny-edge-size $shiny-edge-active-color inset; } }
}
// @mixins
//
// We use this to add transitions to elements
// $property - Default: all, Options: http://www.w3.org/TR/css3-transitions/#animatable-properties
// $speed - Default: 300ms
// $ease - Default:ease-out, Options: http://css-tricks.com/almanac/properties/t/transition-timing-function/
@mixin single-transition($property:all, $speed:300ms, $ease:ease-out) {
transition: $property $speed $ease;
}
// @mixins
//
// We use this to add box-sizing across browser prefixes
@mixin box-sizing($type:border-box) {
-webkit-box-sizing: $type; // Android < 2.3, iOS < 4
-moz-box-sizing: $type; // Firefox < 29
box-sizing: $type; // Chrome, IE 8+, Opera, Safari 5.1
}
// @mixins
//
// We use this to create isosceles triangles
// $triangle-size - Used to set border-size. No default, set a px or em size.
// $triangle-color - Used to set border-color which makes up triangle. No default
// $triangle-direction - Used to determine which direction triangle points. Options: top, bottom, left, right
@mixin css-triangle($triangle-size, $triangle-color, $triangle-direction) {
content: "";
display: block;
width: 0;
height: 0;
border: inset $triangle-size;
@if ($triangle-direction == top) {
border-color: $triangle-color transparent transparent transparent;
border-top-style: solid;
}
@if ($triangle-direction == bottom) {
border-color: transparent transparent $triangle-color transparent;
border-bottom-style: solid;
}
@if ($triangle-direction == left) {
border-color: transparent transparent transparent $triangle-color;
border-left-style: solid;
}
@if ($triangle-direction == right) {
border-color: transparent $triangle-color transparent transparent;
border-right-style: solid;
}
}
// @mixins
//
// We use this to create the icon with three lines aka the hamburger icon, the menu-icon or the navicon
// $width - Width of hamburger icon in rem
// $left - If false, icon will be centered horizontally || explicitly set value in rem
// $top - If false, icon will be centered vertically || explicitly set value in rem
// $thickness - thickness of lines in hamburger icon, set value in px
// $gap - spacing between the lines in hamburger icon, set value in px
// $color - icon color
// $hover-color - icon color during hover
// $offcanvas - Set to true of @include in offcanvas
@mixin hamburger($width, $left, $top, $thickness, $gap, $color, $hover-color, $offcanvas) {
span::after {
content: "";
position: absolute;
display: block;
height: 0;
@if $offcanvas {
@if $top {
top: $top;
}
@else {
top: 50%;
margin-top: (-$width/2);
}
@if $left {
left: $left;
}
@else {
left: ($tabbar-menu-icon-width - $width)/2;
}
}
@else {
top: 50%;
margin-top: -($width/2);
#{$opposite-direction}: $topbar-link-padding;
}
box-shadow:
0 0 0 $thickness $color,
0 $gap + $thickness 0 $thickness $color,
0 (2 * $gap + 2*$thickness) 0 $thickness $color;
width: $width;
}
span:hover:after {
box-shadow:
0 0 0 $thickness $hover-color,
0 $gap + $thickness 0 $thickness $hover-color,
0 (2 * $gap + 2*$thickness) 0 $thickness $hover-color;
}
}
// We use this to do clear floats
@mixin clearfix {
&:before, &:after { content: " "; display: table; }
&:after { clear: both; }
}
// @mixins
//
// We use this to add a glowing effect to block elements
// $selector - Used for selector state. Default: focus, Options: hover, active, visited
// $fade-time - Default: 300ms
// $glowing-effect-color - Default: fade-out($primary-color, .25)
@mixin block-glowing-effect($selector:focus, $fade-time:300ms, $glowing-effect-color:fade-out($primary-color, .25)) {
transition: box-shadow $fade-time, border-color $fade-time ease-in-out;
&:#{$selector} {
box-shadow: 0 0 5px $glowing-effect-color;
border-color: $glowing-effect-color;
}
}
// @mixins
//
// We use this to translate elements in 2D
// $horizontal: Default: 0
// $vertical: Default: 0
@mixin translate2d($horizontal:0, $vertical:0) {
transform: translate($horizontal,$vertical)
}
// @mixins
//
// Makes an element visually hidden, but accessible.
// @see http://snook.ca/archives/html_and_css/hiding-content-for-accessibility
@mixin element-invisible {
position: absolute !important;
height: 1px;
width: 1px;
overflow: hidden;
clip: rect(1px, 1px, 1px, 1px);
}
// @mixins
//
// Turns off the element-invisible effect.
@mixin element-invisible-off {
position: static !important;
height: auto;
width: auto;
overflow: visible;
clip: auto;
}
$white : #FFFFFF !default;
$ghost : #FAFAFA !default;
$snow : #F9F9F9 !default;
$vapor : #F6F6F6 !default;
$white-smoke : #F5F5F5 !default;
$silver : #EFEFEF !default;
$smoke : #EEEEEE !default;
$gainsboro : #DDDDDD !default;
$iron : #CCCCCC !default;
$base : #AAAAAA !default;
$aluminum : #999999 !default;
$jumbo : #888888 !default;
$monsoon : #777777 !default;
$steel : #666666 !default;
$charcoal : #555555 !default;
$tuatara : #444444 !default;
$oil : #333333 !default;
$jet : #222222 !default;
$black : #000000 !default;
// We use these as default colors throughout
$primary-color: #008CBA !default; // bondi-blue
$secondary-color: #e7e7e7 !default; // white-lilac
$alert-color: #f04124 !default; // cinnabar
$success-color: #43AC6A !default; // sea-green
$warning-color: #f08a24 !default; // carrot
$info-color: #a0d3e8 !default; // cornflower
// We use these to define default font stacks
$font-family-sans-serif: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif !default;
$font-family-serif: Georgia, Cambria, "Times New Roman", Times, serif !default;
$font-family-monospace: Consolas, "Liberation Mono", Courier, monospace !default;
// We use these to define default font weights
$font-weight-normal: normal !default;
$font-weight-bold: bold !default;
// We use these to control various global styles
$body-bg: #fff !default;
$body-font-color: #222 !default;
$body-font-family: $font-family-sans-serif !default;
$body-font-weight: $font-weight-normal !default;
$body-font-style: normal !default;
// We use this to control font-smoothing
$font-smoothing: antialiased !default;
// We use these to control text direction settings
$text-direction: ltr !default;
$default-float: left !default;
$opposite-direction: right !default;
@if $text-direction == ltr {
$default-float: left;
$opposite-direction: right;
} @else {
$default-float: right;
$opposite-direction: left;
}
// We use these to make sure border radius matches unless we want it different.
$global-radius: 3px !default;
$global-rounded: 1000px !default;
// We use these to control inset shadow shiny edges and depressions.
$shiny-edge-size: 0 1px 0 !default;
$shiny-edge-color: rgba(#fff, .5) !default;
$shiny-edge-active-color: rgba(#000, .2) !default;
// We use this to control whether or not CSS classes come through in the gem files.
$include-html-classes: true !default;
$include-print-styles: true !default;
$include-html-global-classes: $include-html-classes !default;
$column-gutter: rem-calc(30) !default;
// Media Query Ranges
$small-range: (0, 40em) !default;
$medium-range: (40.063em, 64em) !default;
$large-range: (64.063em, 90em) !default;
$xlarge-range: (90.063em, 120em) !default;
$xxlarge-range: (120.063em, 99999999em) !default;
$screen: "only screen" !default;
$landscape: "#{$screen} and (orientation: landscape)" !default;
$portrait: "#{$screen} and (orientation: portrait)" !default;
$small-up: $screen !default;
$small-only: "#{$screen} and (max-width: #{upper-bound($small-range)})" !default;
$medium-up: "#{$screen} and (min-width:#{lower-bound($medium-range)})" !default;
$medium-only: "#{$screen} and (min-width:#{lower-bound($medium-range)}) and (max-width:#{upper-bound($medium-range)})" !default;
$large-up: "#{$screen} and (min-width:#{lower-bound($large-range)})" !default;
$large-only: "#{$screen} and (min-width:#{lower-bound($large-range)}) and (max-width:#{upper-bound($large-range)})" !default;
$xlarge-up: "#{$screen} and (min-width:#{lower-bound($xlarge-range)})" !default;
$xlarge-only: "#{$screen} and (min-width:#{lower-bound($xlarge-range)}) and (max-width:#{upper-bound($xlarge-range)})" !default;
$xxlarge-up: "#{$screen} and (min-width:#{lower-bound($xxlarge-range)})" !default;
$xxlarge-only: "#{$screen} and (min-width:#{lower-bound($xxlarge-range)}) and (max-width:#{upper-bound($xxlarge-range)})" !default;
// Legacy
$small: $medium-up;
$medium: $medium-up;
$large: $large-up;
//We use this as cursors values for enabling the option of having custom cursors in the whole site's stylesheet
$cursor-auto-value: auto !default;
$cursor-crosshair-value: crosshair !default;
$cursor-default-value: default !default;
$cursor-disabled-value: not-allowed !default;
$cursor-pointer-value: pointer !default;
$cursor-help-value: help !default;
$cursor-text-value: text !default;
@include exports("global") {
// Meta styles are included in all builds, as they are a dependancy of the Javascript.
// Used to provide media query values for javascript components.
// Forward slash placed around everything to convince PhantomJS to read the value.
meta.foundation-version {
font-family: "/5.5.1/";
}
meta.foundation-mq-small {
font-family: "/" + unquote($small-up) + "/";
width: lower-bound($small-range);
}
meta.foundation-mq-small-only {
font-family: "/" + unquote($small-only) + "/";
width: lower-bound($small-range);
}
meta.foundation-mq-medium {
font-family: "/" + unquote($medium-up) + "/";
width: lower-bound($medium-range);
}
meta.foundation-mq-medium-only {
font-family: "/" + unquote($medium-only) + "/";
width: lower-bound($medium-range);
}
meta.foundation-mq-large {
font-family: "/" + unquote($large-up) + "/";
width: lower-bound($large-range);
}
meta.foundation-mq-large-only {
font-family: "/" + unquote($large-only) + "/";
width: lower-bound($large-range);
}
meta.foundation-mq-xlarge {
font-family: "/" + unquote($xlarge-up) + "/";
width: lower-bound($xlarge-range);
}
meta.foundation-mq-xlarge-only {
font-family: "/" + unquote($xlarge-only) + "/";
width: lower-bound($xlarge-range);
}
meta.foundation-mq-xxlarge {
font-family: "/" + unquote($xxlarge-up) + "/";
width: lower-bound($xxlarge-range);
}
meta.foundation-data-attribute-namespace {
font-family: #{$namespace};
}
@if $include-html-global-classes {
// Must be 100% for off canvas to work
html, body { height: 100%; }
// Set box-sizing globally to handle padding and border widths
*,
*:before,
*:after {
@include box-sizing(border-box);
}
html,
body { font-size: $base-font-size; }
// Default body styles
body {
background: $body-bg;
color: $body-font-color;
padding: 0;
margin: 0;
font-family: $body-font-family;
font-weight: $body-font-weight;
font-style: $body-font-style;
line-height: $base-line-height; // Set to $base-line-height to take on browser default of 150%
position: relative;
cursor: $cursor-auto-value;
}
a:hover { cursor: $cursor-pointer-value; }
// Grid Defaults to get images and embeds to work properly
img { max-width: 100%; height: auto; }
img { -ms-interpolation-mode: bicubic; }
#map_canvas,
.map_canvas {
img,
embed,
object { max-width: none !important;
}
}
// Miscellaneous useful HTML classes
.left { float: left !important; }
.right { float: right !important; }
.clearfix { @include clearfix; }
// Hide visually and from screen readers
.hide {
display: none;
}
// Hide visually and from screen readers, but maintain layout
.invisible { visibility: hidden; }
// Font smoothing
// Antialiased font smoothing works best for light text on a dark background.
// Apply to single elements instead of globally to body.
// Note this only applies to webkit-based desktop browsers and Firefox 25 (and later) on the Mac.
.antialiased { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }
// Get rid of gap under images by making them display: inline-block; by default
img {
display: inline-block;
vertical-align: middle;
}
//
// Global resets for forms
//
// Make sure textarea takes on height automatically
textarea { height: auto; min-height: 50px; }
// Make select elements 100% width by default
select { width: 100%; }
}
}

View File

@@ -0,0 +1,289 @@
// Foundation by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
@import "global";
//
// @variables
//
$include-html-grid-classes: $include-html-classes !default;
$include-xl-html-grid-classes: false !default;
$row-width: rem-calc(1000) !default;
$total-columns: 12 !default;
$last-child-float: $opposite-direction !default;
//
// Grid Functions
//
// Deprecated: We'll drop support for this in 5.1, use grid-calc()
@function gridCalc($colNumber, $totalColumns) {
@warn "gridCalc() is deprecated, use grid-calc()";
@return grid-calc($colNumber, $totalColumns);
}
// @FUNCTION
// $colNumber - Found in settings file
// $totalColumns - Found in settings file
@function grid-calc($colNumber, $totalColumns) {
@return percentage(($colNumber / $totalColumns));
}
//
// @mixins
//
// For creating container, nested, and collapsed rows.
//
//
// $behavior - Any special behavior for this row? Default: false. Options: nest, collapse, nest-collapse, false.
@mixin grid-row($behavior: false) {
// use @include grid-row(nest); to include a nested row
@if $behavior == nest {
width: auto;
margin-#{$default-float}: -($column-gutter/2);
margin-#{$opposite-direction}: -($column-gutter/2);
margin-top: 0;
margin-bottom: 0;
max-width: none;
}
// use @include grid-row(collapse); to collapsed a container row margins
@else if $behavior == collapse {
width: 100%;
margin: 0;
max-width: $row-width;
}
// use @include grid-row(nest-collapse); to collapse outer margins on a nested row
@else if $behavior == nest-collapse {
width: auto;
margin: 0;
max-width: none;
}
// use @include grid-row; to use a container row
@else {
width: 100%;
margin-#{$default-float}: auto;
margin-#{$opposite-direction}: auto;
margin-top: 0;
margin-bottom: 0;
max-width: $row-width;
}
// Clearfix for all rows
@include clearfix();
}
// Creates a column, should be used inside of a media query to control layouts
//
// $columns - The number of columns this should be
// $last-column - Is this the last column? Default: false.
// $center - Center these columns? Default: false.
// $offset - # of columns to offset. Default: false.
// $push - # of columns to push. Default: false.
// $pull - # of columns to pull. Default: false.
// $collapse - Get rid of gutter padding on column? Default: false.
// $float - Should this float? Default: true. Options: true, false, left, right.
@mixin grid-column(
$columns:false,
$last-column:false,
$center:false,
$offset:false,
$push:false,
$pull:false,
$collapse:false,
$float:true,
$position:false) {
// If positioned for default .column, include relative position
// push and pull require position set
@if $position or $push or $pull {
position: relative;
}
// If collapsed, get rid of gutter padding
@if $collapse {
padding-left: 0;
padding-right: 0;
}
// Gutter padding whenever a column isn't set to collapse
// (use $collapse:null to do nothing)
@else if $collapse == false {
padding-left: ($column-gutter / 2);
padding-right: ($column-gutter / 2);
}
// If a column number is given, calculate width
@if $columns {
width: grid-calc($columns, $total-columns);
// If last column, float naturally instead of to the right
@if $last-column { float: $opposite-direction; }
}
// Source Ordering, adds left/right depending on which you use.
@if $push { #{$default-float}: grid-calc($push, $total-columns); #{$opposite-direction}: auto; }
@if $pull { #{$opposite-direction}: grid-calc($pull, $total-columns); #{$default-float}: auto; }
@if $float {
@if $float == left or $float == true { float: $default-float; }
@else if $float == right { float: $opposite-direction; }
@else { float: none; }
}
// If centered, get rid of float and add appropriate margins
@if $center {
margin-#{$default-float}: auto;
margin-#{$opposite-direction}: auto;
float: none;
}
// If offset, calculate appropriate margins
@if $offset { margin-#{$default-float}: grid-calc($offset, $total-columns) !important; }
}
// Create presentational classes for grid
//
// $size - Name of class to use, i.e. "large" will generate .large-1, .large-2, etc.
@mixin grid-html-classes($size) {
@for $i from 0 through $total-columns - 1 {
.#{$size}-push-#{$i} {
@include grid-column($push:$i, $collapse:null, $float:false);
}
.#{$size}-pull-#{$i} {
@include grid-column($pull:$i, $collapse:null, $float:false);
}
}
.column,
.columns { @include grid-column($columns:false, $position:true); }
@for $i from 1 through $total-columns {
.#{$size}-#{$i} { @include grid-column($columns:$i,$collapse:null,$float:false); }
}
@for $i from 0 through $total-columns - 1 {
.#{$size}-offset-#{$i} { @include grid-column($offset:$i, $collapse:null,$float:false); }
}
.#{$size}-reset-order {
margin-#{$default-float}: 0;
margin-#{$opposite-direction}: 0;
left: auto;
right: auto;
float: $default-float;
}
.column.#{$size}-centered,
.columns.#{$size}-centered { @include grid-column($center:true, $collapse:null, $float:false); }
.column.#{$size}-uncentered,
.columns.#{$size}-uncentered {
margin-#{$default-float}: 0;
margin-#{$opposite-direction}: 0;
float: $default-float;
}
// Fighting [class*="column"] + [class*="column"]:last-child
.column.#{$size}-centered:last-child,
.columns.#{$size}-centered:last-child{
float: none;
}
// Fighting .column.<previous-size>-centered:last-child
.column.#{$size}-uncentered:last-child,
.columns.#{$size}-uncentered:last-child {
float: $default-float;
}
.column.#{$size}-uncentered.opposite,
.columns.#{$size}-uncentered.opposite {
float: $opposite-direction;
}
.row {
&.#{$size}-collapse {
> .column,
> .columns { @include grid-column($collapse:true, $float:false); }
.row {margin-left:0; margin-right:0;}
}
&.#{$size}-uncollapse {
> .column,
> .columns {
@include grid-column;
}
}
}
}
@include exports("grid") {
@if $include-html-grid-classes {
.row {
@include grid-row;
&.collapse {
> .column,
> .columns { @include grid-column($collapse:true, $float:false); }
.row {margin-left:0; margin-right:0;}
}
.row { @include grid-row($behavior:nest);
&.collapse { @include grid-row($behavior:nest-collapse); }
}
}
.column,
.columns { @include grid-column($columns:$total-columns); }
[class*="column"] + [class*="column"]:last-child { float: $last-child-float; }
[class*="column"] + [class*="column"].end { float: $default-float; }
@media #{$small-up} {
@include grid-html-classes($size:small);
}
@media #{$medium-up} {
@include grid-html-classes($size:medium);
// Old push and pull classes
@for $i from 0 through $total-columns - 1 {
.push-#{$i} {
@include grid-column($push:$i, $collapse:null, $float:false);
}
.pull-#{$i} {
@include grid-column($pull:$i, $collapse:null, $float:false);
}
}
}
@media #{$large-up} {
@include grid-html-classes($size:large);
@for $i from 0 through $total-columns - 1 {
.push-#{$i} {
@include grid-column($push:$i, $collapse:null, $float:false);
}
.pull-#{$i} {
@include grid-column($pull:$i, $collapse:null, $float:false);
}
}
}
}
@if $include-xl-html-grid-classes {
@media #{$xlarge-up} {
@include grid-html-classes($size:xlarge);
}
@media #{$xxlarge-up} {
@include grid-html-classes($size:xxlarge);
}
}
}

View File

@@ -0,0 +1,359 @@
// Foundation by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
@import "global";
// @name
// @dependencies _global.scss
$include-html-icon-bar-classes: $include-html-classes !default;
// @variables
// We use these to style the icon-bar and items
$icon-bar-bg: $oil !default;
$icon-bar-font-color: $white !default;
$icon-bar-font-color-hover: $icon-bar-font-color !default;
$icon-bar-font-size: 1rem !default;
$icon-bar-hover-color: $primary-color !default;
$icon-bar-icon-color: $white !default;
$icon-bar-icon-color-hover: $icon-bar-icon-color !default;
$icon-bar-icon-size: 1.875rem !default;
$icon-bar-image-width: 1.875rem !default;
$icon-bar-image-height: 1.875rem !default;
$icon-bar-active-color: $primary-color !default;
$icon-bar-item-padding: 1.25rem !default;
// We use this to set default opacity and cursor for disabled icons.
$icon-bar-disabled-opacity: 0.7 !default;
$icon-bar-disabled-cursor: $cursor-disabled-value !default;
//
// @mixins
//
// We use this mixin to create the base styles for our Icon bar element.
//
@mixin icon-bar-base() {
width: 100%;
font-size: 0;
display: inline-block;
& > * {
text-align: center;
font-size: $icon-bar-font-size;
width: 25%;
margin: 0 auto;
display: block;
padding: $icon-bar-item-padding;
float: left;
i, img {
display: block;
margin: 0 auto;
& + label {
margin-top: .0625rem;
}
}
i {
font-size: $icon-bar-icon-size;
vertical-align: middle;
}
img {
width: $icon-bar-image-width;
height: $icon-bar-image-height;
}
}
&.label-right > * {
i, img {
margin: 0 .0625rem 0 0;
display: inline-block;
& + label {
margin-top: 0;
}
}
label { display: inline-block; }
}
&.vertical.label-right > * {
text-align: left;
}
&.vertical, &.small-vertical{
height: 100%;
width: auto;
.item {
width: auto;
margin: auto;
float: none;
}
}
&.medium-vertical {
@media #{$medium-up} {
height: 100%;
width: auto;
.item {
width: auto;
margin: auto;
float: none;
}
}
}
&.large-vertical {
@media #{$large-up} {
height: 100%;
width: auto;
.item {
width: auto;
margin: auto;
float: none;
}
}
}
}
// We use this mixin to create the size styles for icon bars.
@mixin icon-bar-size(
$padding: $icon-bar-item-padding,
$font-size: $icon-bar-font-size,
$icon-size: $icon-bar-icon-size,
$image-width: $icon-bar-image-width,
$image-height: $icon-bar-image-height) {
& > * {
font-size: $font-size;
padding: $padding;
i, img {
& + label {
margin-top: .0625rem;
}
}
i {
font-size: $icon-size;
}
img {
width: $image-width;
height: $image-height;
}
}
}
@mixin icon-bar-style(
$bar-bg:$icon-bar-bg,
$bar-font-color:$icon-bar-font-color,
$bar-font-color-hover:$icon-bar-font-color-hover,
$bar-hover-color:$icon-bar-hover-color,
$bar-icon-color:$icon-bar-icon-color,
$bar-icon-color-hover:$icon-bar-icon-color-hover,
$bar-active-color:$icon-bar-active-color,
$base-style:true,
$disabled:false) {
@if $base-style {
background: $bar-bg;
& > * {
label { color: $bar-font-color; }
i { color: $bar-icon-color; }
}
& > a:hover {
background: $bar-hover-color;
label { color: $bar-font-color-hover; }
i { color: $bar-icon-color-hover; }
}
& > a.active {
background: $bar-active-color;
label { color: $bar-font-color-hover; }
i { color: $bar-icon-color-hover; }
}
}
@if $disabled {
.item.disabled {
opacity: $icon-bar-disabled-opacity;
cursor: $icon-bar-disabled-cursor;
pointer-events: none;
>* {
opacity: $icon-bar-disabled-opacity;
cursor: $icon-bar-disabled-cursor;
}
}
}
}
// We use this to quickly create icon bars with a single mixin
// $height - The overall calculated height of the icon bar (horizontal)
// $bar-bg - the background color of the bar
// $bar-font-color - the font color
// $bar-hover-color - okay these are pretty obvious variables
// $bar-icon-color - maybe we could skip explaining them all? Okay this one does change icon color if you use an icon font
// $bar-active-color - the color of an active / hover state
// $base-style - Apply base styles? Default: true.
// $disabled - Allow disabled icons? Default: false.
@mixin icon-bar(
$bar-bg:$icon-bar-bg,
$bar-font-color:$icon-bar-font-color,
$bar-font-color-hover:$icon-bar-font-color-hover,
$bar-hover-color:$icon-bar-hover-color,
$bar-icon-color:$icon-bar-icon-color,
$bar-icon-color-hover:$icon-bar-icon-color-hover,
$bar-active-color:$icon-bar-active-color,
$padding: $icon-bar-item-padding,
$font-size: $icon-bar-font-size,
$icon-size: $icon-bar-icon-size,
$image-width: $icon-bar-image-width,
$image-height: $icon-bar-image-height,
$base-style:true,
$disabled:true) {
@include icon-bar-base();
@include icon-bar-size($padding, $font-size, $icon-size, $image-width, $image-height);
@include icon-bar-style($bar-bg, $bar-font-color, $bar-font-color-hover, $bar-hover-color, $bar-icon-color, $bar-icon-color-hover, $bar-active-color, $base-style, $disabled);
}
@include exports("icon-bar") {
@if $include-html-icon-bar-classes {
.icon-bar {
@include icon-bar;
}
}
}
@if $include-html-icon-bar-classes {
// toolbar styles
.icon-bar {
// Counts
&.two-up {
.item { width: 50%; }
&.vertical .item, &.small-vertical .item { width: auto; }
&.medium-vertical .item {
@media #{$medium-up} {
width: auto;
}
}
&.large-vertical .item {
@media #{$large-up} {
width: auto;
}
}
}
&.three-up {
.item { width: 33.3333%; }
&.vertical .item, &.small-vertical .item { width: auto; }
&.medium-vertical .item {
@media #{$medium-up} {
width: auto;
}
}
&.large-vertical .item {
@media #{$large-up} {
width: auto;
}
}
}
&.four-up {
.item { width: 25%; }
&.vertical .item, &.small-vertical .item { width: auto; }
&.medium-vertical .item {
@media #{$medium-up} {
width: auto;
}
}
&.large-vertical .item {
@media #{$large-up} {
width: auto;
}
}
}
&.five-up {
.item { width: 20%; }
&.vertical .item, &.small-vertical .item { width: auto; }
&.medium-vertical .item {
@media #{$medium-up} {
width: auto;
}
}
&.large-vertical .item {
@media #{$large-up} {
width: auto;
}
}
}
&.six-up {
.item { width: 16.66667%; }
&.vertical .item, &.small-vertical .item { width: auto; }
&.medium-vertical .item {
@media #{$medium-up} {
width: auto;
}
}
&.large-vertical .item {
@media #{$large-up} {
width: auto;
}
}
}
&.seven-up {
.item { width: 14.28571%; }
&.vertical .item, &.small-vertical .item { width: auto; }
&.medium-vertical .item {
@media #{$medium-up} {
width: auto;
}
}
&.large-vertical .item {
@media #{$large-up} {
width: auto;
}
}
}
&.eight-up {
.item { width: 12.5%; }
&.vertical .item, &.small-vertical .item { width: auto; }
&.medium-vertical .item {
@media #{$medium-up} {
width: auto;
}
}
&.large-vertical .item {
@media #{$large-up} {
width: auto;
}
}
}
}
}

View File

@@ -0,0 +1,57 @@
// Foundation by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
@import "global";
//
// @variables
//
$include-html-inline-list-classes: $include-html-classes !default;
// We use this to control the margins and padding of the inline list.
$inline-list-top-margin: 0 !default;
$inline-list-opposite-margin: 0 !default;
$inline-list-bottom-margin: rem-calc(17) !default;
$inline-list-default-float-margin: rem-calc(-22) !default;
$inline-list-default-float-list-margin: rem-calc(22) !default;
$inline-list-padding: 0 !default;
// We use this to control the overflow of the inline list.
$inline-list-overflow: hidden !default;
// We use this to control the list items
$inline-list-display: block !default;
// We use this to control any elements within list items
$inline-list-children-display: block !default;
//
// @mixins
//
// We use this mixin to create inline lists
@mixin inline-list {
margin: $inline-list-top-margin auto $inline-list-bottom-margin auto;
margin-#{$default-float}: $inline-list-default-float-margin;
margin-#{$opposite-direction}: $inline-list-opposite-margin;
padding: $inline-list-padding;
list-style: none;
overflow: $inline-list-overflow;
& > li {
list-style: none;
float: $default-float;
margin-#{$default-float}: $inline-list-default-float-list-margin;
display: $inline-list-display;
&>* { display: $inline-list-children-display; }
}
}
@include exports("inline-list") {
@if $include-html-inline-list-classes {
.inline-list {
@include inline-list();
}
}
}

View File

@@ -0,0 +1,222 @@
// Foundation by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
@import "global";
//
// @variables
//
$include-html-joyride-classes: $include-html-classes !default;
// Controlling default Joyride styles
$joyride-tip-bg: $oil !default;
$joyride-tip-default-width: 300px !default;
$joyride-tip-padding: rem-calc(18 20 24) !default;
$joyride-tip-border: solid 1px $charcoal !default;
$joyride-tip-radius: 4px !default;
$joyride-tip-position-offset: 22px !default;
// Here, we're setting the tip font styles
$joyride-tip-font-color: $white !default;
$joyride-tip-font-size: rem-calc(14) !default;
$joyride-tip-header-weight: $font-weight-bold !default;
// This changes the nub size
$joyride-tip-nub-size: 10px !default;
// This adjusts the styles for the timer when its enabled
$joyride-tip-timer-width: 50px !default;
$joyride-tip-timer-height: 3px !default;
$joyride-tip-timer-color: $steel !default;
// This changes up the styles for the close button
$joyride-tip-close-color: $monsoon !default;
$joyride-tip-close-size: 24px !default;
$joyride-tip-close-weight: $font-weight-normal !default;
// When Joyride is filling the screen, we use this style for the bg
$joyride-screenfill: rgba(0,0,0,0.5) !default;
// We decided not to make a mixin for this because it relies on
// predefined classes to work properly.
@include exports("joyride") {
@if $include-html-joyride-classes {
/* Foundation Joyride */
.joyride-list { display: none; }
/* Default styles for the container */
.joyride-tip-guide {
display: none;
position: absolute;
background: $joyride-tip-bg;
color: $joyride-tip-font-color;
z-index: 101;
top: 0;
#{$default-float}: 2.5%;
font-family: inherit;
font-weight: $font-weight-normal;
width: 95%;
}
.lt-ie9 .joyride-tip-guide {
max-width:800px;
#{$default-float}: 50%;
margin-#{$default-float}:-400px;
}
.joyride-content-wrapper {
width: 100%;
padding: $joyride-tip-padding;
.button { margin-bottom: 0 !important; }
.joyride-prev-tip { margin-right: 10px; }
}
/* Add a little css triangle pip, older browser just miss out on the fanciness of it */
.joyride-tip-guide {
.joyride-nub {
display: block;
position: absolute;
#{$default-float}: $joyride-tip-position-offset;
width: 0;
height: 0;
border: $joyride-tip-nub-size solid $joyride-tip-bg;
&.top {
border-top-style: solid;
border-color: $joyride-tip-bg;
border-top-color: transparent !important;
border-#{$default-float}-color: transparent !important;
border-#{$opposite-direction}-color: transparent !important;
top: -($joyride-tip-nub-size*2);
}
&.bottom {
border-bottom-style: solid;
border-color: $joyride-tip-bg !important;
border-bottom-color: transparent !important;
border-#{$default-float}-color: transparent !important;
border-#{$opposite-direction}-color: transparent !important;
bottom: -($joyride-tip-nub-size*2);
}
&.right { right: -($joyride-tip-nub-size*2); }
&.left { left: -($joyride-tip-nub-size*2); }
}
}
/* Typography */
.joyride-tip-guide h1,
.joyride-tip-guide h2,
.joyride-tip-guide h3,
.joyride-tip-guide h4,
.joyride-tip-guide h5,
.joyride-tip-guide h6 {
line-height: 1.25;
margin: 0;
font-weight: $joyride-tip-header-weight;
color: $joyride-tip-font-color;
}
.joyride-tip-guide p {
margin: rem-calc(0 0 18 0);
font-size: $joyride-tip-font-size;
line-height: 1.3;
}
.joyride-timer-indicator-wrap {
width: $joyride-tip-timer-width;
height: $joyride-tip-timer-height;
border: $joyride-tip-border;
position: absolute;
#{$opposite-direction}: rem-calc(17);
bottom: rem-calc(16);
}
.joyride-timer-indicator {
display: block;
width: 0;
height: inherit;
background: $joyride-tip-timer-color;
}
.joyride-close-tip {
position: absolute;
#{$opposite-direction}: 12px;
top: 10px;
color: $joyride-tip-close-color !important;
text-decoration: none;
font-size: $joyride-tip-close-size;
font-weight: $joyride-tip-close-weight;
line-height: .5 !important;
&:hover,
&:focus { color: $smoke !important; }
}
.joyride-modal-bg {
position: fixed;
height: 100%;
width: 100%;
background: transparent;
background: $joyride-screenfill;
z-index: 100;
display: none;
top: 0;
#{$default-float}: 0;
cursor: $cursor-pointer-value;
}
.joyride-expose-wrapper {
background-color: $white;
position: absolute;
border-radius: 3px;
z-index: 102;
box-shadow: 0 0 15px $white;
}
.joyride-expose-cover {
background: transparent;
border-radius: 3px;
position: absolute;
z-index: 9999;
top: 0;
left: 0;
}
/* Styles for screens that are at least 768px; */
@media #{$small} {
.joyride-tip-guide { width: $joyride-tip-default-width; #{$default-float}: inherit;
.joyride-nub {
&.bottom {
border-color: $joyride-tip-bg !important;
border-bottom-color: transparent !important;
border-#{$default-float}-color: transparent !important;
border-#{$opposite-direction}-color: transparent !important;
bottom: -($joyride-tip-nub-size*2);
}
&.right {
border-color: $joyride-tip-bg !important;
border-top-color: transparent !important;
border-right-color: transparent !important; border-bottom-color: transparent !important;
top: $joyride-tip-position-offset;
left: auto;
right: -($joyride-tip-nub-size*2);
}
&.left {
border-color: $joyride-tip-bg !important;
border-top-color: transparent !important;
border-left-color: transparent !important;
border-bottom-color: transparent !important;
top: $joyride-tip-position-offset;
left: -($joyride-tip-nub-size*2);
right: auto;
}
}
}
}
}
}

View File

@@ -0,0 +1,61 @@
// Foundation by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
@import "global";
//
// @variables
//
$include-html-keystroke-classes: $include-html-classes !default;
// We use these to control text styles.
$keystroke-font: "Consolas", "Menlo", "Courier", monospace !default;
$keystroke-font-size: inherit !default;
$keystroke-font-color: $jet !default;
$keystroke-font-color-alt: $white !default;
$keystroke-function-factor: -7% !default;
// We use this to control keystroke padding.
$keystroke-padding: rem-calc(2 4 0) !default;
// We use these to control background and border styles.
$keystroke-bg: scale-color($white, $lightness: $keystroke-function-factor) !default;
$keystroke-border-style: solid !default;
$keystroke-border-width: 1px !default;
$keystroke-border-color: scale-color($keystroke-bg, $lightness: $keystroke-function-factor) !default;
$keystroke-radius: $global-radius !default;
//
// @mixins
//
// We use this mixin to create keystroke styles.
// $bg - Default: $keystroke-bg || scale-color($white, $lightness: $keystroke-function-factor) !default;
@mixin keystroke($bg:$keystroke-bg) {
// This find the lightness percentage of the background color.
$bg-lightness: lightness($bg);
background-color: $bg;
border-color: scale-color($bg, $lightness: $keystroke-function-factor);
// We adjust the font color based on the brightness of the background.
@if $bg-lightness > 70% { color: $keystroke-font-color; }
@else { color: $keystroke-font-color-alt; }
border-style: $keystroke-border-style;
border-width: $keystroke-border-width;
margin: 0;
font-family: $keystroke-font;
font-size: $keystroke-font-size;
padding: $keystroke-padding;
}
@include exports("keystroke") {
@if $include-html-keystroke-classes {
.keystroke,
kbd {
@include keystroke;
@include radius($keystroke-radius);
}
}
}

View File

@@ -0,0 +1,106 @@
// Foundation by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
@import "global";
//
// @variables
//
$include-html-label-classes: $include-html-classes !default;
// We use these to style the labels
$label-padding: rem-calc(4 8 4) !default;
$label-radius: $global-radius !default;
// We use these to style the label text
$label-font-sizing: rem-calc(11) !default;
$label-font-weight: $font-weight-normal !default;
$label-font-color: $oil !default;
$label-font-color-alt: $white !default;
$label-font-family: $body-font-family !default;
//
// @mixins
//
// We use this mixin to create a default label base.
@mixin label-base {
font-weight: $label-font-weight;
font-family: $label-font-family;
text-align: center;
text-decoration: none;
line-height: 1;
white-space: nowrap;
display: inline-block;
position: relative;
margin-bottom: auto;
}
// @mixins
//
// We use this mixin to add label size styles.
// $padding - Used to determine label padding. Default: $label-padding || rem-calc(4 8 4) !default
// $text-size - Used to determine label text-size. Default: $text-size found in settings
@mixin label-size($padding:$label-padding, $text-size:$label-font-sizing) {
@if $padding { padding: $padding; }
@if $text-size { font-size: $text-size; }
}
// @mixins
//
// We use this mixin to add label styles.
// $bg - Default: $primary-color (found in settings file)
// $radius - Default: false, Options: true, sets radius to $global-radius (found in settings file)
@mixin label-style($bg:$primary-color, $radius:false) {
// We control which background color comes through
@if $bg {
// This find the lightness percentage of the background color.
$bg-lightness: lightness($bg);
background-color: $bg;
// We control the text color for you based on the background color.
@if $bg-lightness < 70% { color: $label-font-color-alt; }
@else { color: $label-font-color; }
}
// We use this to control the radius on labels.
@if $radius == true { @include radius($label-radius); }
@else if $radius { @include radius($radius); }
}
// @mixins
//
// We use this to add close buttons to alerts
// $padding - Default: $label-padding,
// $text-size - Default: $label-font-sizing,
// $bg - Default: $primary-color(found in settings file)
// $radius - Default: false, Options: true which sets radius to $global-radius (found in settings file)
@mixin label($padding:$label-padding, $text-size:$label-font-sizing, $bg:$primary-color, $radius:false) {
@include label-base;
@include label-size($padding, $text-size);
@include label-style($bg, $radius);
}
@include exports("label") {
@if $include-html-label-classes {
.label {
@include label-base;
@include label-size;
@include label-style;
&.radius { @include label-style(false, true); }
&.round { @include label-style(false, $radius:1000px); }
&.alert { @include label-style($alert-color); }
&.warning { @include label-style($warning-color); }
&.success { @include label-style($success-color); }
&.secondary { @include label-style($secondary-color); }
&.info { @include label-style($info-color); }
}
}
}

View File

@@ -0,0 +1,34 @@
// Foundation by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
@import "global";
//
// @variables
//
$include-html-magellan-classes: $include-html-classes !default;
$magellan-bg: $white !default;
$magellan-padding: 10px !default;
@include exports("magellan") {
@if $include-html-magellan-classes {
#{data('magellan-expedition')}, #{data('magellan-expedition-clone')} {
background: $magellan-bg;
z-index: 50;
min-width: 100%;
padding: $magellan-padding;
.sub-nav {
margin-bottom: 0;
dd { margin-bottom: 0; }
a {
line-height: 1.8em;
}
}
}
}
}

View File

@@ -0,0 +1,515 @@
// Foundation by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
@import "global";
@import "type";
// Off Canvas Tab Bar Variables
$include-html-off-canvas-classes: $include-html-classes !default;
$tabbar-bg: $oil !default;
$tabbar-height: rem-calc(45) !default;
$tabbar-icon-width: $tabbar-height !default;
$tabbar-line-height: $tabbar-height !default;
$tabbar-color: $white !default;
$tabbar-middle-padding: 0 rem-calc(10) !default;
// Off Canvas Divider Styles
$tabbar-left-section-border: solid 1px scale-color($tabbar-bg, $lightness: -50%) !default;
$tabbar-right-section-border: $tabbar-left-section-border;
// Off Canvas Tab Bar Headers
$tabbar-header-color: $white !default;
$tabbar-header-weight: $font-weight-bold !default;
$tabbar-header-line-height: $tabbar-height !default;
$tabbar-header-margin: 0 !default;
// Off Canvas Menu Variables
$off-canvas-width: rem-calc(250) !default;
$off-canvas-bg: $oil !default;
$off-canvas-bg-hover: scale-color($tabbar-bg, $lightness: -30%) !default;
// Off Canvas Menu List Variables
$off-canvas-label-padding: 0.3rem rem-calc(15) !default;
$off-canvas-label-color: $aluminum !default;
$off-canvas-label-text-transform: uppercase !default;
$off-canvas-label-font-size: rem-calc(12) !default;
$off-canvas-label-font-weight: $font-weight-bold !default;
$off-canvas-label-bg: $tuatara !default;
$off-canvas-label-border-top: 1px solid scale-color($off-canvas-label-bg, $lightness: 14%) !default;
$off-canvas-label-border-bottom: none !default;
$off-canvas-label-margin:0 !default;
$off-canvas-link-padding: rem-calc(10, 15) !default;
$off-canvas-link-color: rgba($white, 0.7) !default;
$off-canvas-link-border-bottom: 1px solid scale-color($off-canvas-bg, $lightness: -25%) !default;
$off-canvas-back-bg: #444 !default;
$off-canvas-back-border-top: $off-canvas-label-border-top !default;
$off-canvas-back-border-bottom: $off-canvas-label-border-bottom !default;
$off-canvas-back-hover-bg: scale-color($off-canvas-back-bg, $lightness: -30%) !default;
$off-canvas-back-hover-border-top: 1px solid scale-color($off-canvas-label-bg, $lightness: 14%) !default;
$off-canvas-back-hover-border-bottom: none !default;
// Off Canvas Menu Icon Variables
$tabbar-menu-icon-color: $white !default;
$tabbar-menu-icon-hover: scale-color($tabbar-menu-icon-color, $lightness: -30%) !default;
$tabbar-menu-icon-text-indent: rem-calc(35) !default;
$tabbar-menu-icon-width: $tabbar-icon-width !default;
$tabbar-menu-icon-height: $tabbar-height !default;
$tabbar-menu-icon-padding: 0 !default;
$tabbar-hamburger-icon-width: rem-calc(16) !default;
$tabbar-hamburger-icon-left: false !default;
$tabbar-hamburger-icon-top: false !default;
$tabbar-hamburger-icon-thickness: 1px !default;
$tabbar-hamburger-icon-gap: 6px !default;
// Off Canvas Back-Link Overlay
$off-canvas-overlay-transition: background 300ms ease !default;
$off-canvas-overlay-cursor: pointer !default;
$off-canvas-overlay-box-shadow: -4px 0 4px rgba($black, 0.5), 4px 0 4px rgba($black, 0.5) !default;
$off-canvas-overlay-background: rgba($white, 0.2) !default;
$off-canvas-overlay-background-hover: rgba($white, 0.05) !default;
// Transition Variables
$menu-slide: "transform 500ms ease" !default;
// MIXINS
// Remove transition flicker on phones
@mixin kill-flicker {
// -webkit-transform: translateZ(0x);
-webkit-backface-visibility: hidden;
}
// Basic properties for the content wraps
@mixin wrap-base {
position: relative;
width: 100%;
}
@mixin translate3d($tx,$ty,$tz) {
-ms-transform: translate($tx,$ty);
-webkit-transform: translate3d($tx,$ty,$tz);
-moz-transform: translate3d($tx,$ty,$tz);
-ms-transform: translate3d($tx,$ty,$tz);
-o-transform: translate3d($tx,$ty,$tz);
transform: translate3d($tx,$ty,$tz)
}
// basic styles for off-canvas menu container
@mixin off-canvas-menu($position) {
@include kill-flicker;
* { @include kill-flicker; }
width: $off-canvas-width;
top: 0;
bottom: 0;
position: absolute;
overflow-x: hidden;
overflow-y: auto;
background: $off-canvas-bg;
z-index: 1001;
box-sizing: content-box;
transition: transform 500ms ease 0s;
-webkit-overflow-scrolling: touch;
-ms-overflow-style: -ms-autohiding-scrollbar;
@if $position == left {
@include translate3d(-100%,0,0);
left: 0;
}
@if $position == right {
@include translate3d(100%,0,0);
right: 0;
}
}
// OFF CANVAS WRAP
// Wrap visible content and prevent scroll bars
@mixin off-canvas-wrap {
@include kill-flicker;
@include wrap-base;
overflow: hidden;
&.move-right,
&.move-left { min-height: 100%; -webkit-overflow-scrolling: touch; }
}
// INNER WRAP
// Main content area that moves to reveal the off-canvas nav
@mixin inner-wrap {
// @include kill-flicker;
// removed for now till chrome fixes backface issue
@include wrap-base;
@include clearfix;
-webkit-transition: -webkit-#{$menu-slide};
-moz-transition: -moz-#{$menu-slide};
-ms-transition: -ms-#{$menu-slide};
-o-transition: -o-#{$menu-slide};
transition: #{$menu-slide};
}
// TAB BAR
// This is the tab bar base
@mixin tab-bar-base {
@include kill-flicker;
// base styles
background: $tabbar-bg;
color: $tabbar-color;
height: $tabbar-height;
line-height: $tabbar-line-height;
// make sure it's below the .exit-off-canvas link
position: relative;
// z-index: 999;
// Typography
h1,h2,h3,h4,h5,h6 {
color: $tabbar-header-color;
font-weight: $tabbar-header-weight;
line-height: $tabbar-header-line-height;
margin: $tabbar-header-margin;
}
h1,h2,h3,h4 { font-size: $h5-font-size; }
}
// SMALL SECTIONS
// These are small sections on the left and right that contain the off-canvas toggle buttons;
@mixin tabbar-small-section($position) {
width: $tabbar-icon-width;
height: $tabbar-height;
position: absolute;
top: 0;
@if $position == left {
border-right: $tabbar-left-section-border;
// box-shadow: 1px 0 0 scale-color($tabbar-bg, $lightness: 13%);
left: 0;
}
@if $position == right {
border-left: $tabbar-right-section-border;
// box-shadow: -1px 0 0 scale-color($tabbar-bg, $lightness: -50%);
right:0;
}
}
@mixin tab-bar-section {
padding: $tabbar-middle-padding;
position: absolute;
text-align: center;
height: $tabbar-height;
top: 0;
@media #{$medium-up} {
&.left { text-align: left; }
&.right { text-align: right; }
}
// still need to make these non-presentational
&.left {
left: 0;
right: $tabbar-icon-width;
}
&.right {
left: $tabbar-icon-width;
right: 0;
}
&.middle {
left: $tabbar-icon-width;
right: $tabbar-icon-width;
}
}
// OFF CANVAS LIST
// This is the list of links in the off-canvas menu
@mixin off-canvas-list {
list-style-type: none;
padding:0;
margin:0;
li {
label {
display: block;
padding: $off-canvas-label-padding;
color: $off-canvas-label-color;
text-transform: $off-canvas-label-text-transform;
font-size: $off-canvas-label-font-size;
font-weight: $off-canvas-label-font-weight;
background: $off-canvas-label-bg;
border-top: $off-canvas-label-border-top;
border-bottom: $off-canvas-label-border-bottom;
margin: $off-canvas-label-margin;
}
a {
display: block;
padding: $off-canvas-link-padding;
color: $off-canvas-link-color;
border-bottom: $off-canvas-link-border-bottom;
transition: background 300ms ease;
&:hover {
background: $off-canvas-bg-hover;
}
}
}
}
// BACK LINK
// This is an overlay that, when clicked, will toggle off the off canvas menu
@mixin back-link {
@include kill-flicker;
transition: $off-canvas-overlay-transition;
cursor: $off-canvas-overlay-cursor;
box-shadow: $off-canvas-overlay-box-shadow;
// fill the screen
display: block;
position: absolute;
background: $off-canvas-overlay-background;
top: 0;
bottom: 0;
left:0;
right:0;
z-index: 1002;
-webkit-tap-highlight-color: rgba(0,0,0,0);
@media #{$medium-up} {
&:hover {
background: $off-canvas-overlay-background-hover;
}
}
}
//
// DEFAULT CLASSES
//
@include exports("offcanvas") {
@if $include-html-off-canvas-classes {
.off-canvas-wrap { @include off-canvas-wrap; }
.inner-wrap { @include inner-wrap; }
.tab-bar { @include tab-bar-base; }
.left-small { @include tabbar-small-section($position: left); }
.right-small { @include tabbar-small-section($position: right); }
.tab-bar-section { @include tab-bar-section; }
// MENU BUTTON
// This is a little bonus. You don't need it for off canvas to work. Mixins to be written in the future.
.tab-bar .menu-icon {
text-indent: $tabbar-menu-icon-text-indent;
width: $tabbar-menu-icon-width;
height: $tabbar-menu-icon-height;
display: block;
padding: $tabbar-menu-icon-padding;
color: $tabbar-menu-icon-color;
position: relative;
transform: translate3d(0,0,0);
// @include for the hamburger menu-icon
//
// Arguments as follows: ($width, $left, $top, $thickness, $gap, $color, $hover-color)
// $width - Width of hamburger icon in rem Default: $tabbar-hamburger-icon-width.
// $left - If false, icon will be centered horizontally || explicitly set value in rem Default: $tabbar-hamburger-icon-left= False
// $top - If false, icon will be centered vertically || explicitly set value in rem Default: = False
// $thickness - thickness of lines in hamburger icon, set value in px Default: $tabbar-hamburger-icon-thickness = 1px
// $gap - spacing between the lines in hamburger icon, set value in px Default: $tabbar-hamburger-icon-gap = 6px
// $color - icon color Default: $tabbar-menu-icon-color
// $hover-color - icon color when hovered Default: $tabbar-menu-icon-hover
// $offcanvas - Set to true
@include hamburger($tabbar-hamburger-icon-width, $tabbar-hamburger-icon-left, $tabbar-hamburger-icon-top, $tabbar-hamburger-icon-thickness, $tabbar-hamburger-icon-gap, $tabbar-menu-icon-color, $tabbar-menu-icon-hover, true)
}
.left-off-canvas-menu { @include off-canvas-menu($position: left); }
.right-off-canvas-menu { @include off-canvas-menu($position: right); }
ul.off-canvas-list { @include off-canvas-list; }
// ANIMATION CLASSES
// These classes are added with JS and trigger the actual animation.
.move-right {
> .inner-wrap {
@include translate3d($off-canvas-width,0,0);
}
.exit-off-canvas { @include back-link;}
}
.move-left {
> .inner-wrap {
@include translate3d(-($off-canvas-width),0,0);
}
.exit-off-canvas { @include back-link; }
}
.offcanvas-overlap {
.left-off-canvas-menu, .right-off-canvas-menu {
-ms-transform: none;
-webkit-transform: none;
-moz-transform: none;
-o-transform: none;
transform: none;
z-index: 1003;
}
.exit-off-canvas { @include back-link; }
}
.offcanvas-overlap-left {
.right-off-canvas-menu {
-ms-transform: none;
-webkit-transform: none;
-moz-transform: none;
-o-transform: none;
transform: none;
z-index: 1003;
}
.exit-off-canvas { @include back-link; }
}
.offcanvas-overlap-right {
.left-off-canvas-menu {
-ms-transform: none;
-webkit-transform: none;
-moz-transform: none;
-o-transform: none;
transform: none;
z-index: 1003;
}
.exit-off-canvas { @include back-link; }
}
// Older browsers
.no-csstransforms {
.left-off-canvas-menu { left: -($off-canvas-width); }
.right-off-canvas-menu { right: -($off-canvas-width); }
.move-left > .inner-wrap { right: $off-canvas-width; }
.move-right > .inner-wrap { left: $off-canvas-width; }
}
}
}
//
// Off-Canvas Submenu Classes
//
@mixin off-canvas-submenu($position) {
@include kill-flicker;
* { @include kill-flicker; }
width: $off-canvas-width;
top: 0;
bottom: 0;
position: absolute;
margin: 0;
overflow-x: hidden;
overflow-y: auto;
background: $off-canvas-bg;
z-index: 1002;
box-sizing: content-box;
-webkit-overflow-scrolling: touch;
@if $position == left {
@include translate3d(-100%,0,0);
left: 0;
}
@if $position == right {
@include translate3d(100%,0,0);
right: 0;
}
-webkit-transition: -webkit-#{$menu-slide};
-moz-transition: -moz-#{$menu-slide};
-ms-transition: -ms-#{$menu-slide};
-o-transition: -o-#{$menu-slide};
transition: #{$menu-slide};
//back button style like label
.back > a {
padding: $off-canvas-label-padding;
color: $off-canvas-label-color;
text-transform: $off-canvas-label-text-transform;
font-weight: $off-canvas-label-font-weight;
background: $off-canvas-back-bg;
border-top: $off-canvas-back-border-top;
border-bottom: $off-canvas-back-border-bottom;
&:hover {
background: $off-canvas-back-hover-bg;
border-top: $off-canvas-back-hover-border-top;
border-bottom: $off-canvas-back-hover-border-bottom;
}
margin: $off-canvas-label-margin;
@if $position == right {
@if $text-direction == rtl {
&:before {
@include icon-double-arrows($position: left);
}
} @else {
&:after {
@include icon-double-arrows($position: right);
}
}
}
@if $position == left {
@if $text-direction == rtl {
&:after {
@include icon-double-arrows($position: right);
}
} @else {
&:before {
@include icon-double-arrows($position: left);
}
}
}
}
}
//Left double angle quote or Right double angle quote chars
@mixin icon-double-arrows ($position){
@if $position == left {
content: "\AB";
@if $text-direction == rtl {
margin-left: 0.5rem;
} @else {
margin-right: 0.5rem;
}
}
@if $position == right {
content: "\BB";
@if $text-direction == rtl {
margin-right: 0.5rem;
} @else {
margin-left: 0.5rem;
}
}
display: inline;
}
@if $include-html-off-canvas-classes {
.left-submenu {
@include off-canvas-submenu($position: left);
&.move-right, &.offcanvas-overlap-right, &.offcanvas-overlap {
@include translate3d(0%,0,0);
}
}
.right-submenu {
@include off-canvas-submenu($position: right);
&.move-left, &.offcanvas-overlap-left, &.offcanvas-overlap {
@include translate3d(0%,0,0);
}
}
@if $text-direction == rtl {
.left-off-canvas-menu ul.off-canvas-list li.has-submenu > a:before {
@include icon-double-arrows($position: left);
}
.right-off-canvas-menu ul.off-canvas-list li.has-submenu > a:after {
@include icon-double-arrows($position: right);
}
} @else {
.left-off-canvas-menu ul.off-canvas-list li.has-submenu > a:after {
@include icon-double-arrows($position: right);
}
.right-off-canvas-menu ul.off-canvas-list li.has-submenu > a:before {
@include icon-double-arrows($position: left);
}
}
}

View File

@@ -0,0 +1,368 @@
// Foundation by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
@import "global";
// @variables
//
$include-html-orbit-classes: $include-html-classes !default;
// We use these to control the caption styles
$orbit-container-bg: none !default;
$orbit-caption-bg: rgba(51,51,51, 0.8) !default;
$orbit-caption-font-color: $white !default;
$orbit-caption-font-size: rem-calc(14) !default;
$orbit-caption-position: "bottom" !default; // Supported values: "bottom", "under"
$orbit-caption-padding: rem-calc(10 14) !default;
$orbit-caption-height: auto !default;
// We use these to control the left/right nav styles
$orbit-nav-bg: transparent !default;
$orbit-nav-bg-hover: rgba(0,0,0,0.3) !default;
$orbit-nav-arrow-color: $white !default;
$orbit-nav-arrow-color-hover: $white !default;
// We use these to control the timer styles
$orbit-timer-bg: rgba(255,255,255,0.3) !default;
$orbit-timer-show-progress-bar: true !default;
// We use these to control the bullet nav styles
$orbit-bullet-nav-color: $iron !default;
$orbit-bullet-nav-color-active: $aluminum !default;
$orbit-bullet-radius: rem-calc(9) !default;
// We use these to controls the style of slide numbers
$orbit-slide-number-bg: rgba(0,0,0,0) !default;
$orbit-slide-number-font-color: $white !default;
$orbit-slide-number-padding: rem-calc(5) !default;
// Graceful Loading Wrapper and preloader
$wrapper-class: "slideshow-wrapper" !default;
$preloader-class: "preloader" !default;
// Hide controls on small
$orbit-nav-hide-for-small: true !default;
$orbit-bullet-hide-for-small: true !default;
$orbit-timer-hide-for-small: true !default;
@include exports("orbit") {
@if $include-html-orbit-classes {
@-webkit-keyframes rotate {
from { -webkit-transform: rotate(0deg); }
to { -webkit-transform: rotate(360deg); }
}
@-moz-keyframes rotate {
from { -moz-transform: rotate(0deg); }
to { -moz-transform: rotate(360deg); }
}
@-o-keyframes rotate {
from { -o-transform: rotate(0deg); }
to { -o-transform: rotate(360deg); }
}
@keyframes rotate {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
/* Orbit Graceful Loading */
.#{$wrapper-class} {
position: relative;
ul {
// Prevent bullets showing before .orbit-container is loaded
list-style-type: none;
margin: 0;
// Hide all list items
li,
li .orbit-caption { display: none; }
// ...except for the first one
li:first-child { display: block; }
}
.orbit-container { background-color: transparent;
// Show images when .orbit-container is loaded
li { display: block;
.orbit-caption { display: block; }
}
.orbit-bullets li {
display: inline-block;
}
}
// Orbit preloader
.#{$preloader-class} {
display: block;
width: 40px;
height: 40px;
position: absolute;
top: 50%;
left: 50%;
margin-top: -20px;
margin-left: -20px;
border: solid 3px;
border-color: $charcoal $white;
@include radius(1000px);
animation-name: rotate;
animation-duration: 1.5s;
animation-iteration-count: infinite;
animation-timing-function: linear;
}
}
.orbit-container {
overflow: hidden;
width: 100%;
position: relative;
background: $orbit-container-bg;
.orbit-slides-container {
list-style: none;
margin: 0;
padding: 0;
position: relative;
// Prevents images (and captions) from disappearing after first rotation on Chrome for Android
-webkit-transform: translateZ(0);
img { display: block; max-width: 100%; }
&>* {
position: absolute;
top: 0;
width: 100%;
@if $text-direction == rtl {
margin-right: 100%;
}
@else {
margin-left: 100%;
}
&:first-child {
@if $text-direction == rtl {
margin-right: 0;
}
@else {
margin-left: 0;
}
}
.orbit-caption {
@if $orbit-caption-position == "bottom" {
position: absolute;
bottom: 0;
} @else if $orbit-caption-position == "under" {
position: relative;
}
background-color: $orbit-caption-bg;
color: $orbit-caption-font-color;
width: 100%;
padding: $orbit-caption-padding;
font-size: $orbit-caption-font-size;
}
}
}
.orbit-slide-number {
position: absolute;
top: 10px;
#{$default-float}: 10px;
font-size: 12px;
span { font-weight: 700; padding: $orbit-slide-number-padding;}
color: $orbit-slide-number-font-color;
background: $orbit-slide-number-bg;
z-index: 10;
}
.orbit-timer {
position: absolute;
top: 12px;
#{$opposite-direction}: 10px;
height: 6px;
width: 100px;
z-index: 10;
.orbit-progress {
@if $orbit-timer-show-progress-bar {
height: 3px;
background-color: $orbit-timer-bg;
display: block;
width: 0;
position: relative;
right: 20px;
top: 5px;
}
}
// Play button
& > span {
display: none;
position: absolute;
top: 0;
#{$opposite-direction}: 0;
width: 11px;
height: 14px;
border: solid 4px $white;
border-top: none;
border-bottom: none;
}
// Pause button
&.paused {
& > span {
#{$opposite-direction}: -4px;
top: 0;
width: 11px;
height: 14px;
border: inset 8px;
border-left-style: solid;
border-color: transparent;
border-left-color: $white;
&.dark {
border-left-color: $oil;
}
}
}
}
&:hover .orbit-timer > span { display: block; }
// Let's get those controls to be right in the center on each side
.orbit-prev,
.orbit-next {
position: absolute;
top: 45%;
margin-top: -25px;
width: 36px;
height: 60px;
line-height: 50px;
color: white;
background-color: $orbit-nav-bg;
text-indent: -9999px !important;
z-index: 10;
&:hover {
background-color: $orbit-nav-bg-hover;
}
& > span {
position: absolute;
top: 50%;
margin-top: -10px;
display: block;
width: 0;
height: 0;
border: inset 10px;
}
}
.orbit-prev { #{$default-float}: 0;
& > span {
border-#{$opposite-direction}-style: solid;
border-color: transparent;
border-#{$opposite-direction}-color: $orbit-nav-arrow-color;
}
&:hover > span {
border-#{$opposite-direction}-color: $orbit-nav-arrow-color-hover;
}
}
.orbit-next { #{$opposite-direction}: 0;
& > span {
border-color: transparent;
border-#{$default-float}-style: solid;
border-#{$default-float}-color: $orbit-nav-arrow-color;
#{$default-float}: 50%;
margin-#{$default-float}: -4px;
}
&:hover > span {
border-#{$default-float}-color: $orbit-nav-arrow-color-hover;
}
}
}
.orbit-bullets-container { text-align: center; }
.orbit-bullets {
margin: 0 auto 30px auto;
overflow: hidden;
position: relative;
top: 10px;
float: none;
text-align: center;
display: block;
li {
cursor:pointer;
display: inline-block;
width: $orbit-bullet-radius;
height: $orbit-bullet-radius;
background: $orbit-bullet-nav-color;
// float: $default-float;
float: none;
margin-#{$opposite-direction}: 6px;
@include radius(1000px);
&.active {
background: $orbit-bullet-nav-color-active;
}
&:last-child { margin-#{$opposite-direction}: 0; }
}
}
.touch {
.orbit-container {
.orbit-prev,
.orbit-next { display: none; }
}
.orbit-bullets { display: none; }
}
@media #{$medium-up} {
.touch {
.orbit-container {
.orbit-prev,
.orbit-next { display: inherit; }
}
.orbit-bullets { display: block; }
}
}
@media #{$small-only} {
.orbit-stack-on-small {
.orbit-slides-container {height: auto !important;}
.orbit-slides-container > * {
position: relative;
margin:0 !important;
opacity:1 !important;
}
.orbit-slide-number {
display: none;
}
}
@if $orbit-timer-hide-for-small {
.orbit-timer{display: none;}
}
@if $orbit-nav-hide-for-small {
.orbit-next,.orbit-prev{display: none;}
}
@if $orbit-bullet-hide-for-small {
.orbit-bullets{display: none;}
}
}
}
}

View File

@@ -0,0 +1,162 @@
// Foundation by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
@import "global";
//
// @variables
//
$include-pagination-classes: $include-html-classes !default;
// We use these to control the pagination container
$pagination-height: rem-calc(24) !default;
$pagination-margin: rem-calc(-5) !default;
// We use these to set the list-item properties
$pagination-li-float: $default-float !default;
$pagination-li-height: rem-calc(24) !default;
$pagination-li-font-color: $jet !default;
$pagination-li-font-size: rem-calc(14) !default;
$pagination-li-margin: rem-calc(5) !default;
// We use these for the pagination anchor links
$pagination-link-pad: rem-calc(1 10 1) !default;
$pagination-link-font-color: $aluminum !default;
$pagination-link-active-bg: scale-color($white, $lightness: -10%) !default;
// We use these for disabled anchor links
$pagination-link-unavailable-cursor: default !default;
$pagination-link-unavailable-font-color: $aluminum !default;
$pagination-link-unavailable-bg-active: transparent !default;
// We use these for currently selected anchor links
$pagination-link-current-background: $primary-color !default;
$pagination-link-current-font-color: $white !default;
$pagination-link-current-font-weight: $font-weight-bold !default;
$pagination-link-current-cursor: default !default;
$pagination-link-current-active-bg: $primary-color !default;
// @mixins
//
// Style the pagination container. Currently only used when centering elements.
// $center - Default: false, Options: true
@mixin pagination-container($center:false) {
@if $center { text-align: center; }
}
// @mixins
// Style unavailable list items
@mixin pagination-unavailable-item {
a, button {
cursor: $pagination-link-unavailable-cursor;
color: $pagination-link-unavailable-font-color;
}
&:hover a,
& a:focus,
&:hover button,
& button:focus
{ background: $pagination-link-unavailable-bg-active; }
}
// @mixins
// Style the current list item. Do not assume that the current item has
// an anchor <a> element.
// $has-anchor - Default: true, Options: false
@mixin pagination-current-item($has-anchor: true) {
@if $has-anchor {
a, button {
background: $pagination-link-current-background;
color: $pagination-link-current-font-color;
font-weight: $pagination-link-current-font-weight;
cursor: $pagination-link-current-cursor;
&:hover,
&:focus { background: $pagination-link-current-active-bg; }
}
} @else {
height: auto;
padding: $pagination-link-pad;
background: $pagination-link-current-background;
color: $pagination-link-current-font-color;
font-weight: $pagination-link-current-font-weight;
cursor: $pagination-link-current-cursor;
@include radius;
&:hover,
&:focus { background: $pagination-link-current-active-bg; }
}
}
// @mixins
//
// We use this mixin to set the properties for the creating Foundation pagination
// $center - Left or center align the li elements. Default: false
// $base-style - Sets base styles for pagination. Default: true, Options: false
// $use-default-classes - Makes unavailable & current classes available for use. Default: true
@mixin pagination($center:false, $base-style:true, $use-default-classes:true) {
@if $base-style {
display: block;
min-height: $pagination-height;
margin-#{$default-float}: $pagination-margin;
li {
height: $pagination-li-height;
color: $pagination-li-font-color;
font-size: $pagination-li-font-size;
margin-#{$default-float}: $pagination-li-margin;
a, button {
display: block;
padding: $pagination-link-pad;
color: $pagination-link-font-color;
background: none;
@include radius;
font-weight: normal;
font-size: 1em;
line-height: inherit;
@include single-transition(background-color);
}
&:hover a,
a:focus,
&:hover button,
button:focus
{ background: $pagination-link-active-bg; }
@if $use-default-classes {
&.unavailable { @include pagination-unavailable-item(); }
&.current { @include pagination-current-item(); }
}
}
}
// Left or center align the li elements
li {
@if $center {
float: none;
display: inline-block;
} @else {
float: $pagination-li-float;
display: block;
}
}
}
@include exports("pagination") {
@if $include-pagination-classes {
ul.pagination {
@include pagination;
}
/* Pagination centred wrapper */
.pagination-centered {
@include pagination-container(true);
ul.pagination {
@include pagination(true, false);
}
}
}
}

View File

@@ -0,0 +1,101 @@
// Foundation by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
@import "global";
//
// @variables
//
$include-html-panel-classes: $include-html-classes !default;
// We use these to control the background and border styles
$panel-bg: scale-color($white, $lightness: -5%) !default;
$panel-border-style: solid !default;
$panel-border-size: 1px !default;
// We use this % to control how much we darken things on hover
$panel-function-factor: -11% !default;
$panel-border-color: scale-color($panel-bg, $lightness: $panel-function-factor) !default;
// We use these to set default inner padding and bottom margin
$panel-margin-bottom: rem-calc(20) !default;
$panel-padding: rem-calc(20) !default;
// We use these to set default font colors
$panel-font-color: $oil !default;
$panel-font-color-alt: $white !default;
$panel-header-adjust: true !default;
$callout-panel-link-color: $primary-color !default;
$callout-panel-link-color-hover: scale-color($callout-panel-link-color, $lightness: -14%) !default;
//
// @mixins
//
// We use this mixin to create panels.
// $bg - Sets the panel background color. Default: $panel-pg || scale-color($white, $lightness: -5%) !default
// $padding - Sets the panel padding amount. Default: $panel-padding || rem-calc(20)
// $adjust - Sets the font color based on the darkness of the bg & resets header line-heights for panels. Default: $panel-header-adjust || true
@mixin panel($bg:$panel-bg, $padding:$panel-padding, $adjust:$panel-header-adjust) {
@if $bg {
$bg-lightness: lightness($bg);
border-style: $panel-border-style;
border-width: $panel-border-size;
border-color: scale-color($bg, $lightness: $panel-function-factor);
margin-bottom: $panel-margin-bottom;
padding: $padding;
background: $bg;
@if $bg-lightness >= 50% { color: $panel-font-color; }
@else { color: $panel-font-color-alt; }
// Respect the padding, fool.
&>:first-child { margin-top: 0; }
&>:last-child { margin-bottom: 0; }
@if $adjust {
// We set the font color based on the darkness of the bg.
@if $bg-lightness >= 50% {
h1,h2,h3,h4,h5,h6,p,li,dl { color: $panel-font-color; }
}
@else {
h1,h2,h3,h4,h5,h6,p,li,dl { color: $panel-font-color-alt; }
}
// reset header line-heights for panels
h1,h2,h3,h4,h5,h6 {
line-height: 1; margin-bottom: rem-calc(20) / 2;
&.subheader { line-height: 1.4; }
}
}
}
}
@include exports("panel") {
@if $include-html-panel-classes {
/* Panels */
.panel { @include panel;
&.callout {
@include panel(scale-color($primary-color, $lightness: 94%));
a:not(.button) {
color: $callout-panel-link-color;
&:hover,
&:focus {
color: $callout-panel-link-color-hover;
}
}
}
&.radius {
@include radius;
}
}
}
}

View File

@@ -0,0 +1,150 @@
// Foundation by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
@import "global";
//
// @variables
//
$include-html-pricing-classes: $include-html-classes !default;
// We use this to control the border color
$price-table-border: solid 1px $gainsboro !default;
// We use this to control the bottom margin of the pricing table
$price-table-margin-bottom: rem-calc(20) !default;
// We use these to control the title styles
$price-title-bg: $oil !default;
$price-title-padding: rem-calc(15 20) !default;
$price-title-align: center !default;
$price-title-color: $smoke !default;
$price-title-weight: $font-weight-normal !default;
$price-title-size: rem-calc(16) !default;
$price-title-font-family: $body-font-family !default;
// We use these to control the price styles
$price-money-bg: $vapor !default;
$price-money-padding: rem-calc(15 20) !default;
$price-money-align: center !default;
$price-money-color: $oil !default;
$price-money-weight: $font-weight-normal !default;
$price-money-size: rem-calc(32) !default;
$price-money-font-family: $body-font-family !default;
// We use these to control the description styles
$price-bg: $white !default;
$price-desc-color: $monsoon !default;
$price-desc-padding: rem-calc(15) !default;
$price-desc-align: center !default;
$price-desc-font-size: rem-calc(12) !default;
$price-desc-weight: $font-weight-normal !default;
$price-desc-line-height: 1.4 !default;
$price-desc-bottom-border: dotted 1px $gainsboro !default;
// We use these to control the list item styles
$price-item-color: $oil !default;
$price-item-padding: rem-calc(15) !default;
$price-item-align: center !default;
$price-item-font-size: rem-calc(14) !default;
$price-item-weight: $font-weight-normal !default;
$price-item-bottom-border: dotted 1px $gainsboro !default;
// We use these to control the CTA area styles
$price-cta-bg: $white !default;
$price-cta-align: center !default;
$price-cta-padding: rem-calc(20 20 0) !default;
// @mixins
//
// We use this to create the container element for the pricing tables
@mixin pricing-table-container {
border: $price-table-border;
margin-#{$default-float}: 0;
margin-bottom: $price-table-margin-bottom;
& * {
list-style: none;
line-height: 1;
}
}
// @mixins
//
// We use this mixin to create the pricing table title styles
@mixin pricing-table-title {
background-color: $price-title-bg;
padding: $price-title-padding;
text-align: $price-title-align;
color: $price-title-color;
font-weight: $price-title-weight;
font-size: $price-title-size;
font-family: $price-title-font-family;
}
// @mixins
//
// We use this mixin to control the pricing table price styles
@mixin pricing-table-price {
background-color: $price-money-bg;
padding: $price-money-padding;
text-align: $price-money-align;
color: $price-money-color;
font-weight: $price-money-weight;
font-size: $price-money-size;
font-family: $price-money-font-family;
}
// @mixins
//
// We use this mixin to create the description styles for the pricing table
@mixin pricing-table-description {
background-color: $price-bg;
padding: $price-desc-padding;
text-align: $price-desc-align;
color: $price-desc-color;
font-size: $price-desc-font-size;
font-weight: $price-desc-weight;
line-height: $price-desc-line-height;
border-bottom: $price-desc-bottom-border;
}
// @mixins
//
// We use this mixin to style the bullet items in the pricing table
@mixin pricing-table-bullet {
background-color: $price-bg;
padding: $price-item-padding;
text-align: $price-item-align;
color: $price-item-color;
font-size: $price-item-font-size;
font-weight: $price-item-weight;
border-bottom: $price-item-bottom-border;
}
// @mixins
//
// We use this mixin to style the CTA area of the pricing tables
@mixin pricing-table-cta {
background-color: $price-cta-bg;
text-align: $price-cta-align;
padding: $price-cta-padding;
}
@include exports("pricing-table") {
@if $include-html-pricing-classes {
/* Pricing Tables */
.pricing-table {
@include pricing-table-container;
.title { @include pricing-table-title; }
.price { @include pricing-table-price; }
.description { @include pricing-table-description; }
.bullet-item { @include pricing-table-bullet; }
.cta-button { @include pricing-table-cta; }
}
}
}

View File

@@ -0,0 +1,79 @@
// Foundation by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
@import "global";
//
// @variables
//
$include-html-media-classes: $include-html-classes !default;
// We use this to set the progress bar height
$progress-bar-height: rem-calc(25) !default;
$progress-bar-color: $vapor !default;
// We use these to control the border styles
$progress-bar-border-color: scale-color($white, $lightness: 20%) !default;
$progress-bar-border-size: 1px !default;
$progress-bar-border-style: solid !default;
$progress-bar-border-radius: $global-radius !default;
// We use these to control the margin & padding
$progress-bar-pad: rem-calc(2) !default;
$progress-bar-margin-bottom: rem-calc(10) !default;
// We use these to set the meter colors
$progress-meter-color: $primary-color !default;
$progress-meter-secondary-color: $secondary-color !default;
$progress-meter-success-color: $success-color !default;
$progress-meter-alert-color: $alert-color !default;
// @mixins
//
// We use this to set up the progress bar container
@mixin progress-container {
background-color: $progress-bar-color;
height: $progress-bar-height;
border: $progress-bar-border-size $progress-bar-border-style $progress-bar-border-color;
padding: $progress-bar-pad;
margin-bottom: $progress-bar-margin-bottom;
}
// @mixins
//
// $bg - Default: $progress-meter-color || $primary-color
@mixin progress-meter($bg:$progress-meter-color) {
background: $bg;
height: 100%;
display: block;
}
@include exports("progress-bar") {
@if $include-html-media-classes {
/* Progress Bar */
.progress {
@include progress-container;
// Meter
.meter {
@include progress-meter;
}
&.secondary .meter { @include progress-meter($bg:$progress-meter-secondary-color); }
&.success .meter { @include progress-meter($bg:$progress-meter-success-color); }
&.alert .meter { @include progress-meter($bg:$progress-meter-alert-color); }
&.radius { @include radius($progress-bar-border-radius);
.meter { @include radius($progress-bar-border-radius - 1); }
}
&.round { @include radius(1000px);
.meter { @include radius(999px); }
}
}
}
}

View File

@@ -0,0 +1,170 @@
// Foundation by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
@import "global";
//
// @name _range-slider.scss
// @dependencies _global.scss
//
//
// @variables
//
$include-html-range-slider-classes: $include-html-classes !default;
// These variabels define the slider bar styles
$range-slider-bar-width: 100% !default;
$range-slider-bar-height: rem-calc(16) !default;
$range-slider-bar-border-width: 1px !default;
$range-slider-bar-border-style: solid !default;
$range-slider-bar-border-color: $gainsboro !default;
$range-slider-radius: $global-radius !default;
$range-slider-round: $global-rounded !default;
$range-slider-bar-bg-color: $ghost !default;
$range-slider-active-segment-bg-color: scale-color($secondary-color, $lightness: -1%) !default;
// Vertical bar styles
$range-slider-vertical-bar-width: rem-calc(16) !default;
$range-slider-vertical-bar-height: rem-calc(200) !default;
// These variabels define the slider handle styles
$range-slider-handle-width: rem-calc(32) !default;
$range-slider-handle-height: rem-calc(22) !default;
$range-slider-handle-position-top: rem-calc(-5) !default;
$range-slider-handle-bg-color: $primary-color !default;
$range-slider-handle-border-width: 1px !default;
$range-slider-handle-border-style: solid !default;
$range-slider-handle-border-color: none !default;
$range-slider-handle-radius: $global-radius !default;
$range-slider-handle-round: $global-rounded !default;
$range-slider-handle-bg-hover-color: scale-color($primary-color, $lightness: -12%) !default;
$range-slider-handle-cursor: pointer !default;
$range-slider-disabled-opacity: 0.7 !default;
$range-slider-disabled-cursor: $cursor-disabled-value !default;
//
// @mixins
//
@mixin range-slider-bar-base($vertical: false) {
position: relative;
border: $range-slider-bar-border-width $range-slider-bar-border-style $range-slider-bar-border-color;
margin: rem-calc(20 0);
-ms-touch-action: none;
touch-action: none;
@if $vertical == true {
display: inline-block;
width: $range-slider-vertical-bar-width;
height: $range-slider-vertical-bar-height;
} @else {
display: block;
width: $range-slider-bar-width;
height: $range-slider-bar-height;
}
}
@mixin range-slider-bar-style(
$bg: true,
$radius: false,
$round: false,
$disabled: false) {
@if $bg == true { background: $range-slider-bar-bg-color; }
@if $radius == true { @include radius($range-slider-radius); }
@if $round == true { @include radius($range-slider-round); }
@if $disabled == true {
cursor: $range-slider-disabled-cursor;
opacity: $range-slider-disabled-opacity;
}
}
@mixin range-slider-bar(
$bg: $range-slider-bar-bg-color,
$radius:false) {
@include range-slider-bar-base;
@include range-slider-bar-style;
}
@mixin range-slider-handle-base() {
display: inline-block;
position: absolute;
z-index: 1;
top: $range-slider-handle-position-top;
width: $range-slider-handle-width;
height: $range-slider-handle-height;
border: $range-slider-handle-border-width $range-slider-handle-border-style $range-slider-handle-border-color;
cursor: $range-slider-handle-cursor;
// This removes the 300ms touch delay on Windows 8
-ms-touch-action: manipulation;
touch-action: manipulation;
}
@mixin range-slider-handle-style(
$bg: true,
$radius: false,
$round: false,
$disabled: false) {
@if $bg == true { background: $range-slider-handle-bg-color; }
@if $radius == true { @include radius($range-slider-radius); }
@if $round == true { @include radius($range-slider-round); }
@if $disabled == true {
cursor: $cursor-default-value;
opacity: $range-slider-disabled-opacity;
}
&:hover {
background: $range-slider-handle-bg-hover-color;
}
}
@mixin range-slider-handle() {
@include range-slider-handle-base;
@include range-slider-handle-style;
}
// CSS Generation
@include exports("range-slider-bar") {
@if $include-html-range-slider-classes {
.range-slider {
@include range-slider-bar-base;
@include range-slider-bar-style($bg:true, $radius:false);
&.vertical-range {
@include range-slider-bar-base($vertical: true);
.range-slider-handle {
margin-top: 0;
margin-#{$default-float}: -($range-slider-handle-width / 4);
position: absolute;
bottom: -($range-slider-vertical-bar-height - $range-slider-handle-width);
}
.range-slider-active-segment {
width: $range-slider-bar-height - rem-calc((strip-unit($range-slider-bar-border-width) * 2));
height: auto;
bottom: 0;
}
}
&.radius {
@include range-slider-bar-style($radius:true);
.range-slider-handle { @include range-slider-handle-style($radius: true); }
}
&.round {
@include range-slider-bar-style($round:true);
.range-slider-handle { @include range-slider-handle-style($round: true); }
}
&.disabled, &[disabled] {
@include range-slider-bar-style($disabled:true);
.range-slider-handle { @include range-slider-handle-style($disabled: true); }
}
}
.range-slider-active-segment {
display: inline-block;
position: absolute;
height: $range-slider-bar-height - rem-calc((strip-unit($range-slider-bar-border-width) * 2));
background: $range-slider-active-segment-bg-color;
}
.range-slider-handle {
@include range-slider-handle-base;
@include range-slider-handle-style($bg:true, $radius: false);
}
}
}

View File

@@ -0,0 +1,209 @@
// Foundation by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
@import "global";
@import "grid";
//
// @name _reveal.scss
// @dependencies _global.scss
//
$include-html-reveal-classes: $include-html-classes !default;
// We use these to control the style of the reveal overlay.
$reveal-overlay-bg: rgba($black, .45) !default;
$reveal-overlay-bg-old: $black !default;
// We use these to control the style of the modal itself.
$reveal-modal-bg: $white !default;
$reveal-position-top: rem-calc(100) !default;
$reveal-default-width: 80% !default;
$reveal-max-width: $row-width !default;
$reveal-modal-padding: rem-calc(20) !default;
$reveal-box-shadow: 0 0 10px rgba($black,.4) !default;
// We use these to style the reveal close button
$reveal-close-font-size: rem-calc(40) !default;
$reveal-close-top: rem-calc(10) !default;
$reveal-close-side: rem-calc(22) !default;
$reveal-close-color: $base !default;
$reveal-close-weight: $font-weight-bold !default;
// We use this to set the default radius used throughout the core.
$reveal-radius: $global-radius !default;
$reveal-round: $global-rounded !default;
// We use these to control the modal border
$reveal-border-style: solid !default;
$reveal-border-width: 1px !default;
$reveal-border-color: $steel !default;
$reveal-modal-class: "reveal-modal" !default;
$close-reveal-modal-class: "close-reveal-modal" !default;
// Set base z-index
$z-index-base: 1005;
//
// @mixins
//
// We use this to create the reveal background overlay styles
@mixin reveal-bg( $include-z-index-value: true ) {
position: fixed;
// position: absolute; // allows modal background to extend beyond window position
top: 0;
bottom: 0;
left: 0;
right: 0;
background: $reveal-overlay-bg-old; // Autoprefixer should be used to avoid such variables needed when Foundation for Sites can do so in the near future.
background: $reveal-overlay-bg;
z-index: if( $include-z-index-value, $z-index-base - 1, auto );
display: none;
#{$default-float}: 0;
}
// We use this mixin to create the structure of a reveal modal
//
// $base-style - Provides reveal base styles, can be set to false to override. Default: true, Options: false
// $width - Sets reveal width Default: $reveal-default-width || 80%
//
@mixin reveal-modal-base( $base-style: true, $width:$reveal-default-width, $max-width:$reveal-max-width, $border-radius: $reveal-radius) {
@if $base-style {
visibility: hidden;
display: none;
position: absolute;
z-index: $z-index-base;
width: 100%;
top:0;
border-radius: $border-radius;
#{$default-float}: 0;
@media #{$small-only} {
min-height:100vh;
}
// Make sure rows don't have a min-width on them
.column, .columns { min-width: 0; }
// Get rid of margin from first and last element inside modal
& > :first-child { margin-top: 0; }
& > :last-child { margin-bottom: 0; }
}
@if $width {
@media #{$medium-up} {
width: $width;
max-width: $max-width;
left: 0;
right: 0;
margin: 0 auto;
}
}
}
// We use this to style the reveal modal defaults
//
// $bg - Sets background color of reveal modal. Default: $reveal-modal-bg || $white
// $padding - Padding to apply to reveal modal. Default: $reveal-modal-padding.
// $border - Choose whether reveal uses a border. Default: true, Options: false
// $border-style - Set reveal border style. Default: $reveal-border-style || solid
// $border-width - Width of border (i.e. 1px). Default: $reveal-border-width.
// $border-color - Color of border. Default: $reveal-border-color.
// $box-shadow - Choose whether or not to include the default box-shadow. Default: true, Options: false
// $radius - If true, set to modal radius which is $global-radius || explicitly set radius amount in px (ex. $radius:10px). Default: false
// $top-offset - Default: $reveal-position-top || 50px
@mixin reveal-modal-style(
$bg:false,
$padding:false,
$border:false,
$border-style:$reveal-border-style,
$border-width:$reveal-border-width,
$border-color:$reveal-border-color,
$box-shadow:false,
$radius:false,
$top-offset:false) {
@if $bg { background-color: $bg; }
@if $padding != false { padding: $padding; }
@if $border { border: $border-style $border-width $border-color; }
// We can choose whether or not to include the default box-shadow.
@if $box-shadow {
box-shadow: $reveal-box-shadow;
}
// We can control how much radius is used on the modal
@if $radius == true { @include radius($reveal-radius); }
@else if $radius { @include radius($radius); }
@if $top-offset {
@media #{$medium-up} {
top: $top-offset;
}
}
}
// We use this to create a close button for the reveal modal
//
// $color - Default: $reveal-close-color || $base
@mixin reveal-close($color:$reveal-close-color) {
font-size: $reveal-close-font-size;
line-height: 1;
position: absolute;
top: $reveal-close-top;
#{$opposite-direction}: $reveal-close-side;
color: $color;
font-weight: $reveal-close-weight;
cursor: $cursor-pointer-value;
}
@include exports("reveal") {
@if $include-html-reveal-classes {
// Reveal Modals
.reveal-modal-bg { @include reveal-bg; }
.#{$reveal-modal-class} {
@include reveal-modal-base;
@include reveal-modal-style(
$bg:$reveal-modal-bg,
$padding:$reveal-modal-padding * 1.5,
$border:true,
$box-shadow:true,
$radius:false,
$top-offset:$reveal-position-top
);
&.radius { @include reveal-modal-style($radius:true); }
&.round { @include reveal-modal-style($radius:$reveal-round); }
&.collapse { @include reveal-modal-style($padding:0); }
&.tiny { @include reveal-modal-base(false, 30%); }
&.small { @include reveal-modal-base(false, 40%); }
&.medium { @include reveal-modal-base(false, 60%); }
&.large { @include reveal-modal-base(false, 70%); }
&.xlarge { @include reveal-modal-base(false, 95%); }
&.full {
@include reveal-modal-base(false, 100%);
top:0;
left:0;
height:100%;
height: 100vh;
min-height:100vh;
max-width: none !important;
margin-left: 0 !important;
}
// Modals pushed to back
&.toback {
z-index: $z-index-base - 2;
}
.#{$close-reveal-modal-class} { @include reveal-close; }
}
}
}

View File

@@ -0,0 +1,116 @@
// Foundation by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
@import "global";
//
// @variables
//
$include-html-nav-classes: $include-html-classes !default;
// We use this to control padding.
$side-nav-padding: rem-calc(14 0) !default;
// We use these to control list styles.
$side-nav-list-type: none !default;
$side-nav-list-position: outside !default;
$side-nav-list-margin: rem-calc(0 0 7 0) !default;
// We use these to control link styles.
$side-nav-link-color: $primary-color !default;
$side-nav-link-color-active: scale-color($side-nav-link-color, $lightness: 30%) !default;
$side-nav-link-color-hover: scale-color($side-nav-link-color, $lightness: 30%) !default;
$side-nav-link-bg-hover: hsla(0, 0, 0, 0.025) !default;
$side-nav-link-margin: 0 !default;
$side-nav-link-padding: rem-calc(7 14) !default;
$side-nav-font-size: rem-calc(14) !default;
$side-nav-font-weight: $font-weight-normal !default;
$side-nav-font-weight-active: $side-nav-font-weight !default;
$side-nav-font-family: $body-font-family !default;
$side-nav-font-family-active: $side-nav-font-family !default;
// We use these to control heading styles.
$side-nav-heading-color: $side-nav-link-color !default;
$side-nav-heading-font-size: $side-nav-font-size !default;
$side-nav-heading-font-weight: bold !default;
$side-nav-heading-text-transform: uppercase !default;
// We use these to control border styles
$side-nav-divider-size: 1px !default;
$side-nav-divider-style: solid !default;
$side-nav-divider-color: scale-color($white, $lightness: 10%) !default;
//
// @mixins
//
// We use this to style the side-nav
//
// $divider-color - Border color of divider. Default: $side-nav-divider-color.
// $font-size - Font size of nav items. Default: $side-nav-font-size.
// $link-color - Color of navigation links. Default: $side-nav-link-color.
// $link-color-hover - Color of navigation links when hovered. Default: $side-nav-link-color-hover.
@mixin side-nav(
$divider-color:$side-nav-divider-color,
$font-size:$side-nav-font-size,
$link-color:$side-nav-link-color,
$link-color-hover:$side-nav-link-color-hover,
$link-bg-hover:$side-nav-link-bg-hover) {
display: block;
margin: 0;
padding: $side-nav-padding;
list-style-type: $side-nav-list-type;
list-style-position: $side-nav-list-position;
font-family: $side-nav-font-family;
li {
margin: $side-nav-list-margin;
font-size: $font-size;
font-weight: $side-nav-font-weight;
a:not(.button) {
display: block;
color: $link-color;
margin: $side-nav-link-margin;
padding: $side-nav-link-padding;
&:hover,
&:focus {
background: $link-bg-hover;
color: $link-color-hover;
}
}
&.active > a:first-child:not(.button) {
color: $side-nav-link-color-active;
font-weight: $side-nav-font-weight-active;
font-family: $side-nav-font-family-active;
}
&.divider {
border-top: $side-nav-divider-size $side-nav-divider-style;
height: 0;
padding: 0;
list-style: none;
border-top-color: $divider-color;
}
&.heading {
color: $side-nav-heading-color;
font: {
size: $side-nav-heading-font-size;
weight: $side-nav-heading-font-weight;
}
text-transform: $side-nav-heading-text-transform;
}
}
}
@include exports("side-nav") {
@if $include-html-nav-classes {
.side-nav { @include side-nav; }
}
}

View File

@@ -0,0 +1,203 @@
// Foundation by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
@import "global";
@import "buttons";
@import "dropdown-buttons";
//
// @name _split-buttons.scss
// @dependencies _buttons.scss, _global.scss
//
//
// @variables
//
$include-html-button-classes: $include-html-classes !default;
// We use these to control different shared styles for Split Buttons
$split-button-function-factor: 10% !default;
$split-button-pip-color: $white !default;
$split-button-pip-color-alt: $oil !default;
$split-button-active-bg-tint: rgba(0,0,0,0.1) !default;
// We use these to control tiny split buttons
$split-button-padding-tny: $button-pip-tny * 10 !default;
$split-button-span-width-tny: $button-pip-tny * 6 !default;
$split-button-pip-size-tny: $button-pip-tny !default;
$split-button-pip-top-tny: $button-pip-tny * 2 !default;
$split-button-pip-default-float-tny: rem-calc(-6) !default;
// We use these to control small split buttons
$split-button-padding-sml: $button-pip-sml * 10 !default;
$split-button-span-width-sml: $button-pip-sml * 6 !default;
$split-button-pip-size-sml: $button-pip-sml !default;
$split-button-pip-top-sml: $button-pip-sml * 1.5 !default;
$split-button-pip-default-float-sml: rem-calc(-6) !default;
// We use these to control medium split buttons
$split-button-padding-med: $button-pip-med * 9 !default;
$split-button-span-width-med: $button-pip-med * 5.5 !default;
$split-button-pip-size-med: $button-pip-med - rem-calc(3) !default;
$split-button-pip-top-med: $button-pip-med * 1.5 !default;
$split-button-pip-default-float-med: rem-calc(-6) !default;
// We use these to control large split buttons
$split-button-padding-lrg: $button-pip-lrg * 8 !default;
$split-button-span-width-lrg: $button-pip-lrg * 5 !default;
$split-button-pip-size-lrg: $button-pip-lrg - rem-calc(6) !default;
$split-button-pip-top-lrg: $button-pip-lrg + rem-calc(5) !default;
$split-button-pip-default-float-lrg: rem-calc(-6) !default;
//
// @mixins
//
// We use this mixin to create split buttons that build upon the button mixins
//
// $padding - Type of padding to apply. Default: medium. Options: tiny, small, medium, large.
// $pip-color - Color of the triangle. Default: $split-button-pip-color.
// $span-border - Border color of button divider. Default: $primary-color.
// $base-style - Apply base style to split button. Default: true.
@mixin split-button(
$padding:medium,
$pip-color:$split-button-pip-color,
$span-border:$primary-color,
$base-style:true) {
// With this, we can control whether or not the base styles come through.
@if $base-style {
position: relative;
// Styling for the split arrow clickable area
span {
display: block;
height: 100%;
position: absolute;
#{$opposite-direction}: 0;
top: 0;
border-#{$default-float}: solid 1px;
// Building the triangle pip indicator
&:after {
position: absolute;
content: "";
width: 0;
height: 0;
display: block;
border-style: inset;
top: 50%;
#{$default-float}: 50%;
}
&:active { background-color: $split-button-active-bg-tint; }
}
}
// Control the border color for the span area of the split button
@if $span-border {
span {
border-#{$default-float}-color: rgba(255,255,255,0.5);
}
}
// Style of the button and clickable area for tiny sizes
@if $padding == tiny {
padding-#{$opposite-direction}: $split-button-padding-tny;
span { width: $split-button-span-width-tny;
&:after {
border-top-style: solid;
border-width: $split-button-pip-size-tny;
top: 48%;
margin-#{$default-float}: $split-button-pip-default-float-tny;
}
}
}
// Style of the button and clickable area for small sizes
@else if $padding == small {
padding-#{$opposite-direction}: $split-button-padding-sml;
span { width: $split-button-span-width-sml;
&:after {
border-top-style: solid;
border-width: $split-button-pip-size-sml;
top: 48%;
margin-#{$default-float}: $split-button-pip-default-float-sml;
}
}
}
// Style of the button and clickable area for default (medium) sizes
@else if $padding == medium {
padding-#{$opposite-direction}: $split-button-padding-med;
span { width: $split-button-span-width-med;
&:after {
border-top-style: solid;
border-width: $split-button-pip-size-med;
top: 48%;
margin-#{$default-float}: $split-button-pip-default-float-med;
}
}
}
// Style of the button and clickable area for large sizes
@else if $padding == large {
padding-#{$opposite-direction}: $split-button-padding-lrg;
span { width: $split-button-span-width-lrg;
&:after {
border-top-style: solid;
border-width: $split-button-pip-size-lrg;
top: 48%;
margin-#{$default-float}: $split-button-pip-default-float-lrg;
}
}
}
// Control the color of the triangle pip
@if $pip-color {
span:after { border-color: $pip-color transparent transparent transparent; }
}
}
@include exports("split-button") {
@if $include-html-button-classes {
.split.button { @include split-button;
&.secondary { @include split-button(false, $split-button-pip-color, $secondary-color, false); }
&.alert { @include split-button(false, false, $alert-color, false); }
&.success { @include split-button(false, false, $success-color, false); }
&.tiny { @include split-button(tiny, false, false, false); }
&.small { @include split-button(small, false, false, false); }
&.large { @include split-button(large, false, false, false); }
&.expand { padding-left: 2rem; }
&.secondary { @include split-button(false, $split-button-pip-color-alt, false, false); }
&.radius span { @include side-radius($opposite-direction, $global-radius); }
&.round span { @include side-radius($opposite-direction, 1000px); }
&.no-pip{
span:before{ border-style:none; }
span:after{ border-style:none; }
span>i{
top: 50%;
display: block;
position: absolute;
left: 50%;
margin-left: -0.28889em;
margin-top: -0.48889em;
}
}
}
}
}

View File

@@ -0,0 +1,122 @@
// Foundation by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
@import "global";
//
// @name _sub-nav.scss
// @dependencies _global.scss
//
//
// @variables
//
$include-html-nav-classes: $include-html-classes !default;
// We use these to control margin and padding
$sub-nav-list-margin: rem-calc(-4 0 18) !default;
$sub-nav-list-padding-top: rem-calc(4) !default;
// We use this to control the definition
$sub-nav-font-family: $body-font-family !default;
$sub-nav-font-size: rem-calc(14) !default;
$sub-nav-font-color: $aluminum !default;
$sub-nav-font-weight: $font-weight-normal !default;
$sub-nav-text-decoration: none !default;
$sub-nav-padding: rem-calc(3 16) !default;
$sub-nav-border-radius: 3px !default;
$sub-nav-font-color-hover: scale-color($sub-nav-font-color, $lightness: -25%) !default;
// We use these to control the active item styles
$sub-nav-active-font-weight: $font-weight-normal !default;
$sub-nav-active-bg: $primary-color !default;
$sub-nav-active-bg-hover: scale-color($sub-nav-active-bg, $lightness: -14%) !default;
$sub-nav-active-color: $white !default;
$sub-nav-active-padding: $sub-nav-padding !default;
$sub-nav-active-cursor: default !default;
$sub-nav-item-divider: "" !default;
$sub-nav-item-divider-margin: rem-calc(12) !default;
//
// @mixins
//
// Create a sub-nav item
//
// $font-color - Font color. Default: $sub-nav-font-color.
// $font-size - Font size. Default: $sub-nav-font-size.
// $active-bg - Background of active nav item. Default: $sub-nav-active-bg.
// $active-bg-hover - Background of active nav item, when hovered. Default: $sub-nav-active-bg-hover.
@mixin sub-nav(
$font-color: $sub-nav-font-color,
$font-size: $sub-nav-font-size,
$active-bg: $sub-nav-active-bg,
$active-bg-hover: $sub-nav-active-bg-hover) {
display: block;
width: auto;
overflow: hidden;
margin-bottom: $sub-nav-list-margin;
padding-top: $sub-nav-list-padding-top;
dt {
text-transform: uppercase;
}
dt,
dd,
li {
float: $default-float;
margin-#{$default-float}: rem-calc(16);
margin-bottom: 0;
font-family: $sub-nav-font-family;
font-weight: $sub-nav-font-weight;
font-size: $font-size;
color: $font-color;
a {
text-decoration: $sub-nav-text-decoration;
color: $sub-nav-font-color;
padding: $sub-nav-padding;
&:hover {
color: $sub-nav-font-color-hover;
}
}
&.active a {
@include radius($sub-nav-border-radius);
font-weight: $sub-nav-active-font-weight;
background: $active-bg;
padding: $sub-nav-active-padding;
cursor: $sub-nav-active-cursor;
color: $sub-nav-active-color;
&:hover {
background: $active-bg-hover;
}
}
@if $sub-nav-item-divider != "" {
margin-#{$default-float}: 0;
&:before {
content: "#{$sub-nav-item-divider}";
margin: 0 $sub-nav-item-divider-margin;
}
&:first-child:before {
content: "";
margin: 0;
}
}
}
}
@include exports("sub-nav") {
@if $include-html-nav-classes {
.sub-nav { @include sub-nav; }
}
}

View File

@@ -0,0 +1,238 @@
// Foundation by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
@import "global";
//
// @name
// @dependencies _global.scss
//
//
// @variables
//
$include-html-form-classes: $include-html-classes !default;
// Controlling background color for the switch container
$switch-bg: $gainsboro !default;
// We use these to control the switch heights for our default classes
$switch-height-tny: 1.5rem !default;
$switch-height-sml: 1.75rem !default;
$switch-height-med: 2rem !default;
$switch-height-lrg: 2.5rem !default;
$switch-bottom-margin: 1.5rem !default;
// We use these to style the switch-paddle
$switch-paddle-bg: $white !default;
$switch-paddle-transition-speed: .15s !default;
$switch-paddle-transition-ease: ease-out !default;
$switch-active-color: $primary-color !default;
//
// @mixins
//
// We use this mixin to create the base styles for our switch element.
//
// $transition-speed - Time in ms for switch to toggle. Default: $switch-paddle-transition-speed.
// $transition-ease - Easing function to use for animation (i.e. ease-out). Default: $switch-paddle-transition-ease.
@mixin switch-base(
$transition-speed:$switch-paddle-transition-speed,
$transition-ease:$switch-paddle-transition-ease) {
padding: 0;
border: none;
position: relative;
outline: 0;
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
// Default label styles for type and transition
label {
display: block;
margin-bottom: ($switch-height-med / 2);
position: relative;
color: transparent;
background: $switch-bg;
text-indent: 100%;
width: $switch-height-med * 2; height: $switch-height-med;
cursor: pointer;
// Transition for the switch label to follow paddle
@include single-transition(left, $transition-speed, $transition-ease);
}
// So that we don't need to recreate the form with any JS, we use the
// existing checkbox or radio button, but we cleverly position and hide it.
input {
opacity: 0;
position: absolute;
top: 9px;
left: 10px;
padding:0;
& + label { margin-left: 0; margin-right: 0; }
}
// The paddle for the switch is created from an after psuedoclass
// content element. This is sized and positioned, and reacts to
// the state of the input.
label:after {
content: "";
display: block;
background: $switch-paddle-bg;
position: absolute;
top: .25rem;
left: .25rem;
width: $switch-height-med - 0.5rem;
height: $switch-height-med - 0.5rem;
-webkit-transition: left $transition-speed $transition-ease;
-moz-transition: left $transition-speed $transition-ease;
-o-transition: translate3d(0,0,0);
transition: left $transition-speed $transition-ease;
-webkit-transform: translate3d(0,0,0);
-moz-transform: translate3d(0,0,0);
-o-transform: translate3d(0,0,0);
transform: translate3d(0,0,0);
}
input:checked + label {
background: $switch-active-color;
}
input:checked + label:after {
left: $switch-height-med + 0.25rem;
}
}
// We use this mixin to create the size styles for switches.
//
// $height - Height (in px) of the switch. Default: $switch-height-med.
// $font-size - Font size of text in switch. Default: $switch-font-size-med.
// $line-height - Line height of switch. Default: 2.3rem.
@mixin switch-size($height: $switch-height-med) {
label {
width: $height * 2;
height: $height;
}
label:after {
width: $height - 0.5rem;
height: $height - 0.5rem;
}
input:checked + label:after {
left: $height + 0.25rem;
}
}
// We use this mixin to add color and other fanciness to the switches.
//
// $paddle-bg - Background of switch paddle. Default: $switch-paddle-bg.
// $active-color - Background color of positive side of switch. Default: $switch-positive-color.
// $negative-color - Background color of negative side of switch. Default: $switch-negative-color.
// $radius - Radius to apply to switch. Default: false.
// $base-style - Apply base styles? Default: true.
@mixin switch-style(
$paddle-bg:$switch-paddle-bg,
$active-color:$switch-active-color,
$radius:false,
$base-style:true) {
@if $base-style {
label {
color: transparent;
background: $switch-bg;
}
label:after {
background: $paddle-bg;
}
input:checked + label {
background: $active-color;
}
}
// Setting up the radius for switches
@if $radius == true {
label {
border-radius: 2rem;
}
label:after {
border-radius: 2rem;
}
}
@else if $radius {
label {
border-radius: $radius;
}
label:after {
border-radius: $radius;
}
}
}
// We use this to quickly create switches with a single mixin
//
// $transition-speed - Time in ms for switch to toggle. Default: $switch-paddle-transition-speed.
// $transition-ease - Easing function to use for animation (i.e. ease-out). Default: $switch-paddle-transition-ease.
// $height - Height (in px) of the switch. Default: $switch-height-med.
// $paddle-bg - Background of switch paddle. Default: $switch-paddle-bg.
// $active-color - Background color of an active switch. Default: $switch-active-color.
// $radius - Radius to apply to switch. Default: false.
// $base-style - Apply base styles? Default: true.
@mixin switch(
$transition-speed: $switch-paddle-transition-speed,
$transition-ease: $switch-paddle-transition-ease,
$height: $switch-height-med,
$paddle-bg: $switch-paddle-bg,
$active-color: $switch-active-color,
$radius:false,
$base-style:true) {
@include switch-base($transition-speed, $transition-ease);
@include switch-size($height);
@include switch-style($paddle-bg, $active-color, $radius, $base-style);
}
@include exports("switch") {
@if $include-html-form-classes {
.switch {
@include switch;
// Large radio switches
&.large { @include switch-size($switch-height-lrg); }
// Small radio switches
&.small { @include switch-size($switch-height-sml); }
// Tiny radio switches
&.tiny { @include switch-size($switch-height-tny); }
// Add a radius to the switch
&.radius {
label { @include radius(4px); }
label:after { @include radius(3px); }
}
// Make the switch completely round, like a pill
&.round { @include radius(1000px);
label { @include radius(2rem); }
label:after { @include radius(2rem); }
}
}
}
}

View File

@@ -0,0 +1,135 @@
// Foundation by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
@import "global";
//
// @name _tables.scss
// @dependencies _global.scss
//
//
// @variables
//
$include-html-table-classes: $include-html-classes !default;
// These control the background color for the table and even rows
$table-bg: $white !default;
$table-even-row-bg: $snow !default;
// These control the table cell border style
$table-border-style: solid !default;
$table-border-size: 1px !default;
$table-border-color: $gainsboro !default;
// These control the table head styles
$table-head-bg: $white-smoke !default;
$table-head-font-size: rem-calc(14) !default;
$table-head-font-color: $jet !default;
$table-head-font-weight: $font-weight-bold !default;
$table-head-padding: rem-calc(8 10 10) !default;
// These control the table foot styles
$table-foot-bg: $table-head-bg !default;
$table-foot-font-size: $table-head-font-size !default;
$table-foot-font-color: $table-head-font-color !default;
$table-foot-font-weight: $table-head-font-weight !default;
$table-foot-padding: $table-head-padding !default;
// These control the caption
$table-caption-bg: transparent !default;
$table-caption-font-color: $table-head-font-color !default;
$table-caption-font-size: rem-calc(16) !default;
$table-caption-font-weight: bold !default;
// These control the row padding and font styles
$table-row-padding: rem-calc(9 10) !default;
$table-row-font-size: rem-calc(14) !default;
$table-row-font-color: $jet !default;
$table-line-height: rem-calc(18) !default;
// These are for controlling the layout, display and margin of tables
$table-layout: auto !default;
$table-display: table-cell !default;
$table-margin-bottom: rem-calc(20) !default;
//
// @mixins
//
@mixin table {
background: $table-bg;
margin-bottom: $table-margin-bottom;
border: $table-border-style $table-border-size $table-border-color;
table-layout: $table-layout;
caption {
background: $table-caption-bg;
color: $table-caption-font-color;
font: {
size: $table-caption-font-size;
weight: $table-caption-font-weight;
}
}
thead {
background: $table-head-bg;
tr {
th,
td {
padding: $table-head-padding;
font-size: $table-head-font-size;
font-weight: $table-head-font-weight;
color: $table-head-font-color;
}
}
}
tfoot {
background: $table-foot-bg;
tr {
th,
td {
padding: $table-foot-padding;
font-size: $table-foot-font-size;
font-weight: $table-foot-font-weight;
color: $table-foot-font-color;
}
}
}
tr {
th,
td {
padding: $table-row-padding;
font-size: $table-row-font-size;
color: $table-row-font-color;
text-align: $default-float;
}
&.even,
&.alt,
&:nth-of-type(even) { background: $table-even-row-bg; }
}
thead tr th,
tfoot tr th,
tfoot tr td,
tbody tr th,
tbody tr td,
tr td { display: $table-display; line-height: $table-line-height; }
}
@include exports("table") {
@if $include-html-table-classes {
table {
@include table;
}
}
}

View File

@@ -0,0 +1,125 @@
// Foundation by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
@import "global";
@import "grid";
//
// @variables
//
$include-html-tabs-classes: $include-html-classes !default;
$tabs-navigation-padding: rem-calc(16) !default;
$tabs-navigation-bg-color: $silver !default;
$tabs-navigation-active-bg-color: $white !default;
$tabs-navigation-hover-bg-color: scale-color($tabs-navigation-bg-color, $lightness: -6%) !default;
$tabs-navigation-font-color: $jet !default;
$tabs-navigation-active-font-color: $tabs-navigation-font-color !default;
$tabs-navigation-font-size: rem-calc(16) !default;
$tabs-navigation-font-family: $body-font-family !default;
$tabs-content-margin-bottom: rem-calc(24) !default;
$tabs-content-padding: ($column-gutter/2) !default;
$tabs-vertical-navigation-margin-bottom: 1.25rem !default;
@include exports("tab") {
@if $include-html-tabs-classes {
.tabs {
@include clearfix;
margin-bottom: 0 !important;
margin-left: 0;
dd, .tab-title {
position: relative;
margin-bottom: 0 !important;
list-style: none;
float: $default-float;
> a {
display: block;
background: {
color: $tabs-navigation-bg-color;
}
color: $tabs-navigation-font-color;
padding: $tabs-navigation-padding $tabs-navigation-padding * 2;
font-family: $tabs-navigation-font-family;
font-size: $tabs-navigation-font-size;
&:hover {
background: {
color: $tabs-navigation-hover-bg-color;
}
}
&:focus{
outline: none;
}
}
&.active a {
background: {
color: $tabs-navigation-active-bg-color;
}
color:$tabs-navigation-active-font-color;
}
}
&.radius {
dd:first-child, .tab:first-child {
a { @include side-radius($default-float, $global-radius); }
}
dd:last-child, .tab:last-child {
a { @include side-radius($opposite-direction, $global-radius); }
}
}
&.vertical {
dd, .tab-title {
position: inherit;
float: none;
display: block;
top: auto;
}
}
}
.tabs-content {
@include clearfix;
margin-bottom: $tabs-content-margin-bottom;
width: 100%;
> .content {
display: none;
float: $default-float;
padding: $tabs-content-padding 0;
width: 100%;
&.active { display: block; float: none; }
&.contained { padding: $tabs-content-padding; }
}
&.vertical {
display: block;
> .content { padding: 0 $tabs-content-padding; }
}
}
@media #{$medium-up} {
.tabs {
&.vertical {
width: 20%;
max-width: 20%;
float: $default-float;
margin: 0 0 $tabs-vertical-navigation-margin-bottom;
}
}
.tabs-content {
&.vertical {
width: 80%;
max-width: 80%;
float: $default-float;
margin-#{$default-float}: -1px;
padding-#{$default-float}: 1rem;
}
}
}
.no-js {
.tabs-content > .content {
display: block;
float: none;
}
}
}
}

View File

@@ -0,0 +1,66 @@
// Foundation by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
@import "global";
//
// @name _thumbs.scss
// @dependencies _globals.scss
//
//
// @variables
//
$include-html-media-classes: $include-html-classes !default;
// We use these to control border styles
$thumb-border-style: solid !default;
$thumb-border-width: 4px !default;
$thumb-border-color: $white !default;
$thumb-box-shadow: 0 0 0 1px rgba($black,.2) !default;
$thumb-box-shadow-hover: 0 0 6px 1px rgba($primary-color,0.5) !default;
// Radius and transition speed for thumbs
$thumb-radius: $global-radius !default;
$thumb-transition-speed: 200ms !default;
//
// @mixins
//
// We use this to create image thumbnail styles.
//
// $border-width - Width of border around thumbnail. Default: $thumb-border-width.
// $box-shadow - Box shadow to apply to thumbnail. Default: $thumb-box-shadow.
// $box-shadow-hover - Box shadow to apply on hover. Default: $thumb-box-shadow-hover.
@mixin thumb(
$border-width:$thumb-border-width,
$box-shadow:$thumb-box-shadow,
$box-shadow-hover:$thumb-box-shadow-hover) {
line-height: 0;
display: inline-block;
border: $thumb-border-style $border-width $thumb-border-color;
max-width: 100%;
box-shadow: $box-shadow;
&:hover,
&:focus {
box-shadow: $box-shadow-hover;
}
}
@include exports("thumb") {
@if $include-html-media-classes {
/* Image Thumbnails */
.th {
@include thumb;
@include single-transition(all,$thumb-transition-speed,ease-out);
&.radius { @include radius($thumb-radius); }
}
}
}

View File

@@ -0,0 +1,72 @@
// Foundation by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
// toolbar styles
@import "global";
.toolbar {
background: $oil;
width: 100%;
font-size: 0;
display: inline-block;
&.label-bottom .tab .tab-content {
i, img { margin-bottom: 10px; }
}
&.label-right .tab .tab-content {
i, img { margin-right: 10px; display: inline-block;}
label { display: inline-block; }
}
&.vertical.label-right .tab .tab-content {
text-align: left;
}
&.vertical {
height: 100%;
width: auto;
.tab {
width: auto;
margin: auto;
float: none;
}
}
.tab {
text-align: center;
width: 25%;
margin: 0 auto;
display: block;
padding: 20px;
float: left;
&:hover {
background: rgba($white, 0.1);
}
}
}
.toolbar .tab-content {
font-size: 16px;
text-align: center;
label { color: $iron; }
i {
font-size: 30px;
display: block;
margin: 0 auto;
color: $iron;
vertical-align: middle;
}
img {
width: 30px;
height: 30px;
display: block;
margin: 0 auto;
}
}

View File

@@ -0,0 +1,142 @@
// Foundation by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
@import "global";
//
// Tooltip Variables
//
$include-html-tooltip-classes: $include-html-classes !default;
$has-tip-border-bottom: dotted 1px $iron !default;
$has-tip-font-weight: $font-weight-bold !default;
$has-tip-font-color: $oil !default;
$has-tip-border-bottom-hover: dotted 1px scale-color($primary-color, $lightness: -55%) !default;
$has-tip-font-color-hover: $primary-color !default;
$has-tip-cursor-type: help !default;
$tooltip-padding: rem-calc(12) !default;
$tooltip-bg: $oil !default;
$tooltip-font-size: rem-calc(14) !default;
$tooltip-font-weight: $font-weight-normal !default;
$tooltip-font-color: $white !default;
$tooltip-line-height: 1.3 !default;
$tooltip-close-font-size: rem-calc(10) !default;
$tooltip-close-font-weight: $font-weight-normal !default;
$tooltip-close-font-color: $monsoon !default;
$tooltip-font-size-sml: rem-calc(14) !default;
$tooltip-radius: $global-radius !default;
$tooltip-rounded: $global-rounded !default;
$tooltip-pip-size: 5px !default;
$tooltip-max-width: 300px !default;
@include exports("tooltip") {
@if $include-html-tooltip-classes {
/* Tooltips */
.has-tip {
border-bottom: $has-tip-border-bottom;
cursor: $has-tip-cursor-type;
font-weight: $has-tip-font-weight;
color: $has-tip-font-color;
&:hover,
&:focus {
border-bottom: $has-tip-border-bottom-hover;
color: $has-tip-font-color-hover;
}
&.tip-left,
&.tip-right { float: none !important; }
}
.tooltip {
display: none;
position: absolute;
z-index: 1006;
font-weight: $tooltip-font-weight;
font-size: $tooltip-font-size;
line-height: $tooltip-line-height;
padding: $tooltip-padding;
max-width: $tooltip-max-width;
#{$default-float}: 50%;
width: 100%;
color: $tooltip-font-color;
background: $tooltip-bg;
&>.nub {
display: block;
#{$default-float}: $tooltip-pip-size;
position: absolute;
width: 0;
height: 0;
border: solid $tooltip-pip-size;
border-color: transparent transparent $tooltip-bg transparent;
top: -($tooltip-pip-size * 2);
pointer-events: none;
&.rtl {
left: auto;
#{$opposite-direction}: $tooltip-pip-size;
}
}
&.radius {
@include radius($tooltip-radius);
}
&.round {
@include radius($tooltip-rounded);
&>.nub {
left: 2rem;
}
}
&.opened {
color: $has-tip-font-color-hover !important;
border-bottom: $has-tip-border-bottom-hover !important;
}
}
.tap-to-close {
display: block;
font-size: $tooltip-close-font-size;
color: $tooltip-close-font-color;
font-weight: $tooltip-close-font-weight;
}
@media #{$small} {
.tooltip {
&>.nub {
border-color: transparent transparent $tooltip-bg transparent;
top: -($tooltip-pip-size * 2);
}
&.tip-top>.nub {
border-color: $tooltip-bg transparent transparent transparent;
top: auto;
bottom: -($tooltip-pip-size * 2);
}
&.tip-left,
&.tip-right { float: none !important; }
&.tip-left>.nub {
border-color: transparent transparent transparent $tooltip-bg;
right: -($tooltip-pip-size * 2);
left: auto;
top: 50%;
margin-top: -$tooltip-pip-size;
}
&.tip-right>.nub {
border-color: transparent $tooltip-bg transparent transparent;
right: auto;
left: -($tooltip-pip-size * 2);
top: 50%;
margin-top: -$tooltip-pip-size;
}
}
}
}
}

View File

@@ -0,0 +1,696 @@
// Foundation by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
@import "global";
@import "grid";
@import "buttons";
@import "forms";
//
// Top Bar Variables
//
$include-html-top-bar-classes: $include-html-classes !default;
// Background color for the top bar
$topbar-bg-color: $oil !default;
$topbar-bg: $topbar-bg-color !default;
// Height and margin
$topbar-height: rem-calc(45) !default;
$topbar-margin-bottom: 0 !default;
// Controlling the styles for the title in the top bar
$topbar-title-weight: $font-weight-normal !default;
$topbar-title-font-size: rem-calc(17) !default;
// Set the link colors and styles for top-level nav
$topbar-link-color: $white !default;
$topbar-link-color-hover: $white !default;
$topbar-link-color-active: $white !default;
$topbar-link-color-active-hover: $white !default;
$topbar-link-weight: $font-weight-normal !default;
$topbar-link-font-size: rem-calc(13) !default;
$topbar-link-hover-lightness: -10% !default; // Darken by 10%
$topbar-link-bg: $topbar-bg !default;
$topbar-link-bg-hover: $oil !default;
$topbar-link-bg-color-hover: $charcoal !default;
$topbar-link-bg-active: $primary-color !default;
$topbar-link-bg-active-hover: scale-color($primary-color, $lightness: -14%) !default;
$topbar-link-font-family: $body-font-family !default;
$topbar-link-text-transform: none !default;
$topbar-link-padding: ($topbar-height / 3) !default;
$topbar-back-link-size: rem-calc(18) !default;
$topbar-link-dropdown-padding: rem-calc(20) !default;
$topbar-button-font-size: 0.75rem !default;
$topbar-button-top: 7px !default;
// Style the top bar dropdown elements
$topbar-dropdown-bg: $oil !default;
$topbar-dropdown-link-color: $white !default;
$topbar-dropdown-link-color-hover: $topbar-link-color-hover !default;
$topbar-dropdown-link-bg: $oil !default;
$topbar-dropdown-link-bg-hover: $oil !default;
$topbar-dropdown-link-weight: $font-weight-normal !default;
$topbar-dropdown-toggle-size: 5px !default;
$topbar-dropdown-toggle-color: $white !default;
$topbar-dropdown-toggle-alpha: 0.4 !default;
$topbar-dropdown-label-color: $monsoon !default;
$topbar-dropdown-label-text-transform: uppercase !default;
$topbar-dropdown-label-font-weight: $font-weight-bold !default;
$topbar-dropdown-label-font-size: rem-calc(10) !default;
$topbar-dropdown-label-bg: $oil !default;
// Top menu icon styles
$topbar-menu-link-transform: uppercase !default;
$topbar-menu-link-font-size: rem-calc(13) !default;
$topbar-menu-link-weight: $font-weight-bold !default;
$topbar-menu-link-color: $white !default;
$topbar-menu-icon-color: $white !default;
$topbar-menu-link-color-toggled: $jumbo !default;
$topbar-menu-icon-color-toggled: $jumbo !default;
$topbar-menu-icon-position: $opposite-direction !default; // Change to $default-float for a left menu icon
// Transitions and breakpoint styles
$topbar-transition-speed: 300ms !default;
// Using rem-calc for the below breakpoint causes issues with top bar
$topbar-breakpoint: #{lower-bound($medium-range)} !default; // Change to 9999px for always mobile layout
$topbar-media-query: $medium-up !default;
// Top-bar input styles
$topbar-input-height: rem-calc(28) !default;
// Divider Styles
$topbar-divider-border-bottom: solid 1px scale-color($topbar-bg-color, $lightness: 13%) !default;
$topbar-divider-border-top: solid 1px scale-color($topbar-bg-color, $lightness: -50%) !default;
// Sticky Class
$topbar-sticky-class: ".sticky" !default;
$topbar-arrows: true !default; //Set false to remove the triangle icon from the menu item
$topbar-dropdown-arrows: true !default; //Set false to remove the \00bb >> text from dropdown subnavigation li
// Accessibility mixins for hiding and showing the menu dropdown items
@mixin topbar-hide-dropdown {
// Makes an element visually hidden by default, but visible when focused.
display: block;
@include element-invisible();
}
@mixin topbar-show-dropdown {
display: block;
@include element-invisible-off();
position: absolute !important; // Reset the position from static to absolute
}
@include exports("top-bar") {
@if $include-html-top-bar-classes {
// Used to provide media query values for javascript components.
// This class is generated despite the value of $include-html-top-bar-classes
// to ensure width calculations work correctly.
meta.foundation-mq-topbar {
font-family: "/" + unquote($topbar-media-query) + "/";
width: $topbar-breakpoint;
}
/* Wrapped around .top-bar to contain to grid width */
.contain-to-grid {
width: 100%;
background: $topbar-bg;
.top-bar { margin-bottom: $topbar-margin-bottom; }
}
// Wrapped around .top-bar to make it stick to the top
.fixed {
width: 100%;
#{$default-float}: 0;
position: fixed;
top: 0;
z-index: 99;
&.expanded:not(.top-bar) {
overflow-y: auto;
height: auto;
width: 100%;
max-height: 100%;
.title-area {
position: fixed;
width: 100%;
z-index: 99;
}
// Ensure you can scroll the menu on small screens
.top-bar-section {
z-index: 98;
margin-top: $topbar-height;
}
}
}
.top-bar {
overflow: hidden;
height: $topbar-height;
line-height: $topbar-height;
position: relative;
background: $topbar-bg;
margin-bottom: $topbar-margin-bottom;
// Topbar Global list Styles
ul {
margin-bottom: 0;
list-style: none;
}
.row { max-width: none; }
form,
input { margin-bottom: 0; }
input {
height: $topbar-input-height;
padding-top: .35rem;
padding-bottom: .35rem;
font-size: $topbar-button-font-size;
}
.button, button {
padding-top: .35rem + rem-calc(1);
padding-bottom: .35rem + rem-calc(1);
margin-bottom: 0;
font-size: $topbar-button-font-size;
// position: relative;
// top: -1px;
// Corrects a slight misalignment when put next to an input field
@media #{$small-only} {
position: relative;
top: -1px;
}
}
// Title Area
.title-area {
position: relative;
margin: 0;
}
.name {
height: $topbar-height;
margin: 0;
font-size: $rem-base;
// @if $topbar-menu-icon-position == $default-float {float: $opposite-direction;}
h1, h2, h3, h4, p, span {
line-height: $topbar-height;
font-size: $topbar-title-font-size;
margin: 0;
a {
font-weight: $topbar-title-weight;
color: $topbar-link-color;
width: 75%;
display: block;
padding: 0 $topbar-link-padding;
}
}
}
// Menu toggle button on small devices
.toggle-topbar {
position: absolute;
#{$topbar-menu-icon-position}: 0;
top: 0;
a {
color: $topbar-link-color;
text-transform: $topbar-menu-link-transform;
font-size: $topbar-menu-link-font-size;
font-weight: $topbar-menu-link-weight;
position: relative;
display: block;
padding: 0 $topbar-link-padding;
height: $topbar-height;
line-height: $topbar-height;
}
// Adding the class "menu-icon" will add the 3-line icon people love and adore.
&.menu-icon {
top: 50%;
margin-top: -16px;
a {
@if $text-direction == rtl {
text-indent: -58px;
}
height: 34px;
line-height: 33px;
padding: 0 $topbar-link-padding+rem-calc(25) 0 $topbar-link-padding;
color: $topbar-menu-link-color;
position: relative;
& {
// @include hamburger icon
//
// We use this to create the icon with three lines aka the hamburger icon, the menu-icon or the navicon
// $width - Width of hamburger icon
// $left - If false, icon will be centered horizontally || explicitly set value in rem
// $top - If false, icon will be centered vertically || explicitly set value in rem
// $thickness - thickness of lines in hamburger icon, set value in px
// $gap - spacing between the lines in hamburger icon, set value in px
// $color - icon color
// $hover-color - icon color during hover, here it isn't set b/c it would override $topbar-menu-icon-color-toggled
// $offcanvas - Set to false of @include in topbar
@include hamburger(16px, false, 0, 1px, 6px, $topbar-menu-icon-color, "", false);
}
}
}
}
// Change things up when the top-bar is expanded
&.expanded {
height: auto;
background: transparent;
.title-area { background: $topbar-bg; }
.toggle-topbar {
a { color: $topbar-menu-link-color-toggled;
span::after {
// Shh, don't tell, but box-shadows create the menu icon :)
// Change the color of the bars when the menu is expanded, using given thickness from hamburger() above
box-shadow: 0 0 0 1px $topbar-menu-icon-color-toggled,
0 7px 0 1px $topbar-menu-icon-color-toggled,
0 14px 0 1px $topbar-menu-icon-color-toggled;
}
}
}
}
}
// Right and Left Navigation that stacked by default
.top-bar-section {
#{$default-float}: 0;
position: relative;
width: auto;
@include single-transition($default-float, $topbar-transition-speed);
ul {
padding: 0;
width: 100%;
height: auto;
display: block;
font-size: $rem-base;
margin: 0;
}
.divider,
[role="separator"] {
border-top: $topbar-divider-border-top;
clear: both;
height: 1px;
width: 100%;
}
ul li {
background: $topbar-dropdown-bg;
& > a {
display: block;
width: 100%;
color: $topbar-link-color;
padding: 12px 0 12px 0;
padding-#{$default-float}: $topbar-link-padding;
font-family: $topbar-link-font-family;
font-size: $topbar-link-font-size;
font-weight: $topbar-link-weight;
text-transform: $topbar-link-text-transform;
&.button {
font-size: $topbar-link-font-size;
padding-#{$opposite-direction}: $topbar-link-padding;
padding-#{$default-float}: $topbar-link-padding;
@include button-style($bg:$primary-color);
}
&.button.secondary { @include button-style($bg:$secondary-color); }
&.button.success { @include button-style($bg:$success-color); }
&.button.alert { @include button-style($bg:$alert-color); }
&.button.warning { @include button-style($bg:$warning-color); }
}
> button {
font-size: $topbar-link-font-size;
padding-#{$opposite-direction}: $topbar-link-padding;
padding-#{$default-float}: $topbar-link-padding;
@include button-style($bg:$primary-color);
&.secondary { @include button-style($bg:$secondary-color); }
&.success { @include button-style($bg:$success-color); }
&.alert { @include button-style($bg:$alert-color); }
&.warning { @include button-style($bg:$warning-color); }
}
// Apply the hover link color when it has that class
&:hover:not(.has-form) > a {
background-color: $topbar-link-bg-color-hover;
@if ($topbar-link-bg-hover) {
background: $topbar-link-bg-hover;
}
color: $topbar-link-color-hover;
}
// Apply the active link color when it has that class
&.active > a {
background: $topbar-link-bg-active;
color: $topbar-link-color-active;
&:hover {
background: $topbar-link-bg-active-hover;
color: $topbar-link-color-active-hover;
}
}
}
// Add some extra padding for list items contains buttons
.has-form { padding: $topbar-link-padding; }
// Styling for list items that have a dropdown within them.
.has-dropdown {
position: relative;
& > a {
&:after {
@if ($topbar-arrows){
@include css-triangle($topbar-dropdown-toggle-size, rgba($topbar-dropdown-toggle-color, $topbar-dropdown-toggle-alpha), $default-float);
}
margin-#{$opposite-direction}: $topbar-link-padding;
margin-top: -($topbar-dropdown-toggle-size / 2) - 2;
position: absolute;
top: 50%;
#{$opposite-direction}: 0;
}
}
&.moved { position: static;
& > .dropdown {
@include topbar-show-dropdown();
width: 100%;
}
& > a:after {
display: none;
}
}
}
// Styling elements inside of dropdowns
.dropdown {
padding: 0;
position: absolute;
#{$default-float}: 100%;
top: 0;
z-index: 99;
@include topbar-hide-dropdown();
li {
width: 100%;
height: auto;
a {
font-weight: $topbar-dropdown-link-weight;
padding: 8px $topbar-link-padding;
&.parent-link {
font-weight: $topbar-link-weight;
}
}
&.title h5, &.parent-link {
// Back Button
margin-bottom: 0;
margin-top: 0;
font-size: $topbar-back-link-size;
a {
color: $topbar-link-color;
// line-height: ($topbar-height / 2);
display: block;
&:hover { background:none; }
}
}
&.has-form { padding: 8px $topbar-link-padding; }
.button, button { top: auto; }
}
label {
padding: 8px $topbar-link-padding 2px;
margin-bottom: 0;
text-transform: $topbar-dropdown-label-text-transform;
color: $topbar-dropdown-label-color;
font-weight: $topbar-dropdown-label-font-weight;
font-size: $topbar-dropdown-label-font-size;
}
}
}
.js-generated { display: block; }
// Top Bar styles intended for screen sizes above the breakpoint.
@media #{$topbar-media-query} {
.top-bar {
background: $topbar-bg;
@include clearfix;
overflow: visible;
.toggle-topbar { display: none; }
.title-area { float: $default-float; }
.name h1 a,
.name h2 a,
.name h3 a,
.name h4 a,
.name h5 a,
.name h6 a { width: auto; }
input,
.button,
button {
font-size: rem-calc(14);
position: relative;
height: $topbar-input-height;
top: (($topbar-height - $topbar-input-height) / 2);
}
&.expanded { background: $topbar-bg; }
}
.contain-to-grid .top-bar {
max-width: $row-width;
margin: 0 auto;
margin-bottom: $topbar-margin-bottom;
}
.top-bar-section {
@include single-transition(none,0,0);
#{$default-float}: 0 !important;
ul {
width: auto;
height: auto !important;
display: inline;
li {
float: $default-float;
.js-generated { display: none; }
}
}
li {
&.hover {
> a:not(.button) {
background-color: $topbar-link-bg-color-hover;
@if ($topbar-link-bg-hover) {
background: $topbar-link-bg-hover;
}
color: $topbar-link-color-hover;
}
}
&:not(.has-form) {
a:not(.button) {
padding: 0 $topbar-link-padding;
line-height: $topbar-height;
background: $topbar-link-bg;
&:hover {
background-color: $topbar-link-bg-color-hover;
@if ($topbar-link-bg-hover) {
background: $topbar-link-bg-hover;
}
}
}
}
&.active:not(.has-form) {
a:not(.button) {
padding: 0 $topbar-link-padding;
line-height: $topbar-height;
color: $topbar-link-color-active;
background: $topbar-link-bg-active;
&:hover {
background: $topbar-link-bg-active-hover;
color: $topbar-link-color-active-hover;
}
}
}
}
.has-dropdown {
@if($topbar-arrows){
& > a {
padding-#{$opposite-direction}: $topbar-link-padding + $topbar-link-dropdown-padding !important;
&:after {
@include css-triangle($topbar-dropdown-toggle-size, rgba($topbar-dropdown-toggle-color, $topbar-dropdown-toggle-alpha), top);
margin-top: -($topbar-dropdown-toggle-size / 2);
top: ($topbar-height / 2);
}
}
}
&.moved { position: relative;
& > .dropdown {
@include topbar-hide-dropdown();
}
}
&.hover, &.not-click:hover {
& > .dropdown {
@include topbar-show-dropdown();
}
}
> a:focus + .dropdown {
@include topbar-show-dropdown();
}
.dropdown li.has-dropdown {
& > a {
@if ($topbar-dropdown-arrows){
&:after {
border: none;
content: "\00bb";
top: 1rem;
margin-top: -1px;
#{$opposite-direction}: 5px;
line-height: 1.2;
}
}
}
}
}
.dropdown {
#{$default-float}: 0;
top: auto;
background: transparent;
min-width: 100%;
li {
a {
color: $topbar-dropdown-link-color;
line-height: $topbar-height;
white-space: nowrap;
padding: 12px $topbar-link-padding;
background: $topbar-dropdown-link-bg;
}
&:not(.has-form):not(.active) {
& > a:not(.button) {
color: $topbar-dropdown-link-color;
background: $topbar-dropdown-link-bg;
}
&:hover > a:not(.button) {
color: $topbar-dropdown-link-color-hover;
background-color: $topbar-link-bg-color-hover;
@if ($topbar-dropdown-link-bg-hover) {
background: $topbar-dropdown-link-bg-hover;
}
}
}
label {
white-space: nowrap;
background: $topbar-dropdown-label-bg;
}
// Second Level Dropdowns
.dropdown {
#{$default-float}: 100%;
top: 0;
}
}
}
& > ul > .divider,
& > ul > [role="separator"] {
border-bottom: none;
border-top: none;
border-#{$opposite-direction}: $topbar-divider-border-bottom;
clear: none;
height: $topbar-height;
width: 0;
}
.has-form {
background: $topbar-link-bg;
padding: 0 $topbar-link-padding;
height: $topbar-height;
}
// Position overrides for ul.right and ul.left
.#{$opposite-direction} {
li .dropdown {
#{$default-float}: auto;
#{$opposite-direction}: 0;
li .dropdown { #{$opposite-direction}: 100%; }
}
}
.#{$default-float} {
li .dropdown {
#{$opposite-direction}: auto;
#{$default-float}: 0;
li .dropdown { #{$default-float}: 100%; }
}
}
}
// Degrade gracefully when Javascript is disabled. Displays dropdown and changes
// background & text color on hover.
.no-js .top-bar-section {
ul li {
// Apply the hover link color when it has that class
&:hover > a {
background-color: $topbar-link-bg-color-hover;
@if ($topbar-link-bg-hover) {
background: $topbar-link-bg-hover;
}
color: $topbar-link-color-hover;
}
// Apply the active link color when it has that class
&:active > a {
background: $topbar-link-bg-active;
color: $topbar-link-color-active;
}
}
.has-dropdown {
&:hover {
& > .dropdown {
@include topbar-show-dropdown();
}
}
> a:focus + .dropdown {
@include topbar-show-dropdown();
}
}
}
}
}
}

View File

@@ -0,0 +1,464 @@
// Foundation by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
@import "global";
$include-html-type-classes: $include-html-classes !default;
// We use these to control header font styles
$header-font-family: $body-font-family !default;
$header-font-weight: $font-weight-normal !default;
$header-font-style: normal !default;
$header-font-color: $jet !default;
$header-line-height: 1.4 !default;
$header-top-margin: .2rem !default;
$header-bottom-margin: .5rem !default;
$header-text-rendering: optimizeLegibility !default;
// We use these to control header font sizes
$h1-font-size: rem-calc(44) !default;
$h2-font-size: rem-calc(37) !default;
$h3-font-size: rem-calc(27) !default;
$h4-font-size: rem-calc(23) !default;
$h5-font-size: rem-calc(18) !default;
$h6-font-size: 1rem !default;
// We use these to control header size reduction on small screens
$h1-font-reduction: rem-calc(10) !default;
$h2-font-reduction: rem-calc(10) !default;
$h3-font-reduction: rem-calc(5) !default;
$h4-font-reduction: rem-calc(5) !default;
$h5-font-reduction: 0 !default;
$h6-font-reduction: 0 !default;
// These control how subheaders are styled.
$subheader-line-height: 1.4 !default;
$subheader-font-color: scale-color($header-font-color, $lightness: 35%) !default;
$subheader-font-weight: $font-weight-normal !default;
$subheader-top-margin: .2rem !default;
$subheader-bottom-margin: .5rem !default;
// A general <small> styling
$small-font-size: 60% !default;
$small-font-color: scale-color($header-font-color, $lightness: 35%) !default;
// We use these to style paragraphs
$paragraph-font-family: inherit !default;
$paragraph-font-weight: $font-weight-normal !default;
$paragraph-font-size: 1rem !default;
$paragraph-line-height: 1.6 !default;
$paragraph-margin-bottom: rem-calc(20) !default;
$paragraph-aside-font-size: rem-calc(14) !default;
$paragraph-aside-line-height: 1.35 !default;
$paragraph-aside-font-style: italic !default;
$paragraph-text-rendering: optimizeLegibility !default;
// We use these to style <code> tags
$code-color: $oil !default;
$code-font-family: $font-family-monospace !default;
$code-font-weight: $font-weight-normal !default;
$code-background-color: scale-color($secondary-color, $lightness: 70%) !default;
$code-border-size: 1px !default;
$code-border-style: solid !default;
$code-border-color: scale-color($code-background-color, $lightness: -10%) !default;
$code-padding: rem-calc(2) rem-calc(5) rem-calc(1) !default;
// We use these to style anchors
$anchor-text-decoration: none !default;
$anchor-text-decoration-hover: none !default;
$anchor-font-color: $primary-color !default;
$anchor-font-color-hover: scale-color($anchor-font-color, $lightness: -14%) !default;
// We use these to style the <hr> element
$hr-border-width: 1px !default;
$hr-border-style: solid !default;
$hr-border-color: $gainsboro !default;
$hr-margin: rem-calc(20) !default;
// We use these to style lists
$list-font-family: $paragraph-font-family !default;
$list-font-size: $paragraph-font-size !default;
$list-line-height: $paragraph-line-height !default;
$list-margin-bottom: $paragraph-margin-bottom !default;
$list-style-position: outside !default;
$list-side-margin: 1.1rem !default;
$list-ordered-side-margin: 1.4rem !default;
$list-side-margin-no-bullet: 0 !default;
$list-nested-margin: rem-calc(20) !default;
$definition-list-header-weight: $font-weight-bold !default;
$definition-list-header-margin-bottom: .3rem !default;
$definition-list-margin-bottom: rem-calc(12) !default;
// We use these to style blockquotes
$blockquote-font-color: scale-color($header-font-color, $lightness: 35%) !default;
$blockquote-padding: rem-calc(9 20 0 19) !default;
$blockquote-border: 1px solid $gainsboro !default;
$blockquote-cite-font-size: rem-calc(13) !default;
$blockquote-cite-font-color: scale-color($header-font-color, $lightness: 23%) !default;
$blockquote-cite-link-color: $blockquote-cite-font-color !default;
// Acronym styles
$acronym-underline: 1px dotted $gainsboro !default;
// We use these to control padding and margin
$microformat-padding: rem-calc(10 12) !default;
$microformat-margin: rem-calc(0 0 20 0) !default;
// We use these to control the border styles
$microformat-border-width: 1px !default;
$microformat-border-style: solid !default;
$microformat-border-color: $gainsboro !default;
// We use these to control full name font styles
$microformat-fullname-font-weight: $font-weight-bold !default;
$microformat-fullname-font-size: rem-calc(15) !default;
// We use this to control the summary font styles
$microformat-summary-font-weight: $font-weight-bold !default;
// We use this to control abbr padding
$microformat-abbr-padding: rem-calc(0 1) !default;
// We use this to control abbr font styles
$microformat-abbr-font-weight: $font-weight-bold !default;
$microformat-abbr-font-decoration: none !default;
// Text alignment class names
$align-class-names:
small-only,
small,
medium-only,
medium,
large-only,
large,
xlarge-only,
xlarge,
xxlarge-only,
xxlarge;
// Text alignment breakpoints
$align-class-breakpoints:
$small-only,
$small-up,
$medium-only,
$medium-up,
$large-only,
$large-up,
$xlarge-only,
$xlarge-up,
$xxlarge-only,
$xxlarge-up;
// Generates text align and justify classes
@mixin align-classes{
.text-left { text-align: left !important; }
.text-right { text-align: right !important; }
.text-center { text-align: center !important; }
.text-justify { text-align: justify !important; }
@for $i from 1 through length($align-class-names) {
@media #{(nth($align-class-breakpoints, $i))} {
.#{(nth($align-class-names, $i))}-text-left { text-align: left !important; }
.#{(nth($align-class-names, $i))}-text-right { text-align: right !important; }
.#{(nth($align-class-names, $i))}-text-center { text-align: center !important; }
.#{(nth($align-class-names, $i))}-text-justify { text-align: justify !important; }
}
}
}
//
// Typography Placeholders
//
// These will throw a deprecation warning if used within a media query.
@mixin lead {
font-size: $paragraph-font-size + rem-calc(3.5);
line-height: 1.6;
}
@mixin subheader {
line-height: $subheader-line-height;
color: $subheader-font-color;
font-weight: $subheader-font-weight;
margin-top: $subheader-top-margin;
margin-bottom: $subheader-bottom-margin;
}
@include exports("type") {
@if $include-html-type-classes {
// Responsive Text alignment
@include align-classes;
/* Typography resets */
div,
dl,
dt,
dd,
ul,
ol,
li,
h1,
h2,
h3,
h4,
h5,
h6,
pre,
form,
p,
blockquote,
th,
td {
margin:0;
padding:0;
}
/* Default Link Styles */
a {
color: $anchor-font-color;
text-decoration: $anchor-text-decoration;
line-height: inherit;
&:hover,
&:focus {
color: $anchor-font-color-hover;
@if $anchor-text-decoration-hover != $anchor-text-decoration {
text-decoration: $anchor-text-decoration-hover;
}
}
img { border:none; }
}
/* Default paragraph styles */
p {
font-family: $paragraph-font-family;
font-weight: $paragraph-font-weight;
font-size: $paragraph-font-size;
line-height: $paragraph-line-height;
margin-bottom: $paragraph-margin-bottom;
text-rendering: $paragraph-text-rendering;
&.lead { @include lead; }
& aside {
font-size: $paragraph-aside-font-size;
line-height: $paragraph-aside-line-height;
font-style: $paragraph-aside-font-style;
}
}
/* Default header styles */
h1, h2, h3, h4, h5, h6 {
font-family: $header-font-family;
font-weight: $header-font-weight;
font-style: $header-font-style;
color: $header-font-color;
text-rendering: $header-text-rendering;
margin-top: $header-top-margin;
margin-bottom: $header-bottom-margin;
line-height: $header-line-height;
small {
font-size: $small-font-size;
color: $small-font-color;
line-height: 0;
}
}
h1 { font-size: $h1-font-size - $h1-font-reduction; }
h2 { font-size: $h2-font-size - $h2-font-reduction; }
h3 { font-size: $h3-font-size - $h3-font-reduction; }
h4 { font-size: $h4-font-size - $h4-font-reduction; }
h5 { font-size: $h5-font-size - $h5-font-reduction; }
h6 { font-size: $h6-font-size - $h6-font-reduction; }
.subheader { @include subheader; }
hr {
border: $hr-border-style $hr-border-color;
border-width: $hr-border-width 0 0;
clear: both;
margin: $hr-margin 0 ($hr-margin - rem-calc($hr-border-width));
height: 0;
}
/* Helpful Typography Defaults */
em,
i {
font-style: italic;
line-height: inherit;
}
strong,
b {
font-weight: $font-weight-bold;
line-height: inherit;
}
small {
font-size: $small-font-size;
line-height: inherit;
}
code {
font-family: $code-font-family;
font-weight: $code-font-weight;
color: $code-color;
background-color: $code-background-color;
border-width: $code-border-size;
border-style: $code-border-style;
border-color: $code-border-color;
padding: $code-padding;
}
/* Lists */
ul,
ol,
dl {
font-size: $list-font-size;
line-height: $list-line-height;
margin-bottom: $list-margin-bottom;
list-style-position: $list-style-position;
font-family: $list-font-family;
}
ul {
margin-#{$default-float}: $list-side-margin;
&.no-bullet {
margin-#{$default-float}: $list-side-margin-no-bullet;
li {
ul,
ol {
margin-#{$default-float}: $list-nested-margin;
margin-bottom: 0;
list-style: none;
}
}
}
}
/* Unordered Lists */
ul {
li {
ul,
ol {
margin-#{$default-float}: $list-nested-margin;
margin-bottom: 0;
}
}
&.square,
&.circle,
&.disc {
li ul { list-style: inherit; }
}
&.square { list-style-type: square; margin-#{$default-float}: $list-side-margin;}
&.circle { list-style-type: circle; margin-#{$default-float}: $list-side-margin;}
&.disc { list-style-type: disc; margin-#{$default-float}: $list-side-margin;}
&.no-bullet { list-style: none; }
}
/* Ordered Lists */
ol {
margin-#{$default-float}: $list-ordered-side-margin;
li {
ul,
ol {
margin-#{$default-float}: $list-nested-margin;
margin-bottom: 0;
}
}
}
/* Definition Lists */
dl {
dt {
margin-bottom: $definition-list-header-margin-bottom;
font-weight: $definition-list-header-weight;
}
dd { margin-bottom: $definition-list-margin-bottom; }
}
/* Abbreviations */
abbr,
acronym {
text-transform: uppercase;
font-size: 90%;
color: $body-font-color;
cursor: $cursor-help-value;
}
abbr {
text-transform: none;
&[title] {
border-bottom: $acronym-underline;
}
}
/* Blockquotes */
blockquote {
margin: 0 0 $paragraph-margin-bottom;
padding: $blockquote-padding;
border-#{$default-float}: $blockquote-border;
cite {
display: block;
font-size: $blockquote-cite-font-size;
color: $blockquote-cite-font-color;
&:before {
content: "\2014 \0020";
}
a,
a:visited {
color: $blockquote-cite-link-color;
}
}
}
blockquote,
blockquote p {
line-height: $paragraph-line-height;
color: $blockquote-font-color;
}
/* Microformats */
.vcard {
display: inline-block;
margin: $microformat-margin;
border: $microformat-border-width $microformat-border-style $microformat-border-color;
padding: $microformat-padding;
li {
margin: 0;
display: block;
}
.fn {
font-weight: $microformat-fullname-font-weight;
font-size: $microformat-fullname-font-size;
}
}
.vevent {
.summary { font-weight: $microformat-summary-font-weight; }
abbr {
cursor: $cursor-default-value;
text-decoration: $microformat-abbr-font-decoration;
font-weight: $microformat-abbr-font-weight;
border: none;
padding: $microformat-abbr-padding;
}
}
@media #{$medium-up} {
h1,h2,h3,h4,h5,h6 { line-height: $header-line-height; }
h1 { font-size: $h1-font-size; }
h2 { font-size: $h2-font-size; }
h3 { font-size: $h3-font-size; }
h4 { font-size: $h4-font-size; }
h5 { font-size: $h5-font-size; }
h6 { font-size: $h6-font-size; }
}
}
}

View File

@@ -0,0 +1,474 @@
// Foundation by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
@import "global";
//
// Foundation Visibility Classes
//
$include-html-visibility-classes: $include-html-classes !default;
$include-accessibility-classes: true !default;
$include-table-visibility-classes: true !default;
$include-legacy-visibility-classes: true !default;
//
// Media Class Names
//
// Visibility Breakpoints
$visibility-breakpoint-sizes:
small,
medium,
large,
xlarge,
xxlarge;
$visibility-breakpoint-queries:
unquote($small-up),
unquote($medium-up),
unquote($large-up),
unquote($xlarge-up),
unquote($xxlarge-up);
@mixin visibility-loop {
@each $current-visibility-breakpoint in $visibility-breakpoint-sizes {
$visibility-inherit-list: ();
$visibility-none-list: ();
$visibility-visible-list: ();
$visibility-hidden-list: ();
$visibility-table-list: ();
$visibility-table-header-group-list: ();
$visibility-table-row-group-list: ();
$visibility-table-row-list: ();
$visibility-table-cell-list: ();
@each $visibility-comparison-breakpoint in $visibility-breakpoint-sizes {
@if index($visibility-breakpoint-sizes, $visibility-comparison-breakpoint) < index($visibility-breakpoint-sizes, $current-visibility-breakpoint) {
// Smaller than current breakpoint
$visibility-inherit-list: append($visibility-inherit-list, unquote(
'.hide-for-#{$visibility-comparison-breakpoint}-only, .show-for-#{$visibility-comparison-breakpoint}-up'
), comma);
$visibility-none-list: append($visibility-none-list, unquote(
'.show-for-#{$visibility-comparison-breakpoint}-only, .hide-for-#{$visibility-comparison-breakpoint}-up'
), comma);
$visibility-visible-list: append($visibility-visible-list, unquote(
'.hidden-for-#{$visibility-comparison-breakpoint}-only, .visible-for-#{$visibility-comparison-breakpoint}-up'
), comma);
$visibility-hidden-list: append($visibility-hidden-list, unquote(
'.visible-for-#{$visibility-comparison-breakpoint}-only, .hidden-for-#{$visibility-comparison-breakpoint}-up'
), comma);
$visibility-table-list: append($visibility-table-list, unquote(
'table.hide-for-#{$visibility-comparison-breakpoint}-only, table.show-for-#{$visibility-comparison-breakpoint}-up'
), comma);
$visibility-table-header-group-list: append($visibility-table-header-group-list, unquote(
'thead.hide-for-#{$visibility-comparison-breakpoint}-only, thead.show-for-#{$visibility-comparison-breakpoint}-up'
), comma);
$visibility-table-row-group-list: append($visibility-table-row-group-list, unquote(
'tbody.hide-for-#{$visibility-comparison-breakpoint}-only, tbody.show-for-#{$visibility-comparison-breakpoint}-up'
), comma);
$visibility-table-row-list: append($visibility-table-row-list, unquote(
'tr.hide-for-#{$visibility-comparison-breakpoint}-only, tr.show-for-#{$visibility-comparison-breakpoint}-up'
), comma);
$visibility-table-cell-list: append($visibility-table-cell-list, unquote(
'th.hide-for-#{$visibility-comparison-breakpoint}-only, td.hide-for-#{$visibility-comparison-breakpoint}-only, th.show-for-#{$visibility-comparison-breakpoint}-up, td.show-for-#{$visibility-comparison-breakpoint}-up'
), comma);
// Foundation 4 compatibility:
// Include .show/hide-for-[size] and .show/hide-for-[size]-down classes
// for small, medium, and large breakpoints only
@if $include-legacy-visibility-classes and index((small, medium, large), $visibility-comparison-breakpoint) != false {
$visibility-inherit-list: append($visibility-inherit-list, unquote(
'.hide-for-#{$visibility-comparison-breakpoint}, .hide-for-#{$visibility-comparison-breakpoint}-down'
), comma);
$visibility-none-list: append($visibility-none-list, unquote(
'.show-for-#{$visibility-comparison-breakpoint}, .show-for-#{$visibility-comparison-breakpoint}-down'
), comma);
$visibility-visible-list: append($visibility-visible-list, unquote(
'.hidden-for-#{$visibility-comparison-breakpoint}, .hidden-for-#{$visibility-comparison-breakpoint}-down'
), comma);
$visibility-hidden-list: append($visibility-hidden-list, unquote(
'.visible-for-#{$visibility-comparison-breakpoint}, .visible-for-#{$visibility-comparison-breakpoint}-down'
), comma);
$visibility-table-list: append($visibility-table-list, unquote(
'table.hide-for-#{$visibility-comparison-breakpoint}, table.hide-for-#{$visibility-comparison-breakpoint}-down'
), comma);
$visibility-table-header-group-list: append($visibility-table-header-group-list, unquote(
'thead.hide-for-#{$visibility-comparison-breakpoint}, thead.hide-for-#{$visibility-comparison-breakpoint}-down'
), comma);
$visibility-table-row-group-list: append($visibility-table-row-group-list, unquote(
'tbody.hide-for-#{$visibility-comparison-breakpoint}, tbody.hide-for-#{$visibility-comparison-breakpoint}-down'
), comma);
$visibility-table-row-list: append($visibility-table-row-list, unquote(
'tr.hide-for-#{$visibility-comparison-breakpoint}, tr.hide-for-#{$visibility-comparison-breakpoint}-down'
), comma);
$visibility-table-cell-list: append($visibility-table-cell-list, unquote(
'th.hide-for-#{$visibility-comparison-breakpoint}, td.hide-for-#{$visibility-comparison-breakpoint}, th.hide-for-#{$visibility-comparison-breakpoint}-down, td.hide-for-#{$visibility-comparison-breakpoint}-down'
), comma);
}
} @else if index($visibility-breakpoint-sizes, $visibility-comparison-breakpoint) > index($visibility-breakpoint-sizes, $current-visibility-breakpoint) {
// Larger than current breakpoint
$visibility-inherit-list: append($visibility-inherit-list, unquote(
'.hide-for-#{$visibility-comparison-breakpoint}-only, .hide-for-#{$visibility-comparison-breakpoint}-up'
), comma);
$visibility-none-list: append($visibility-none-list, unquote(
'.show-for-#{$visibility-comparison-breakpoint}-only, .show-for-#{$visibility-comparison-breakpoint}-up'
), comma);
$visibility-visible-list: append($visibility-visible-list, unquote(
'.hidden-for-#{$visibility-comparison-breakpoint}-only, .hidden-for-#{$visibility-comparison-breakpoint}-up'
), comma);
$visibility-hidden-list: append($visibility-hidden-list, unquote(
'.visible-for-#{$visibility-comparison-breakpoint}-only, .visible-for-#{$visibility-comparison-breakpoint}-up'
), comma);
$visibility-table-list: append($visibility-table-list, unquote(
'table.hide-for-#{$visibility-comparison-breakpoint}-only, table.hide-for-#{$visibility-comparison-breakpoint}-up'
), comma);
$visibility-table-header-group-list: append($visibility-table-header-group-list, unquote(
'thead.hide-for-#{$visibility-comparison-breakpoint}-only, thead.hide-for-#{$visibility-comparison-breakpoint}-up'
), comma);
$visibility-table-row-group-list: append($visibility-table-row-group-list, unquote(
'tbody.hide-for-#{$visibility-comparison-breakpoint}-only, tbody.hide-for-#{$visibility-comparison-breakpoint}-up'
), comma);
$visibility-table-row-list: append($visibility-table-row-list, unquote(
'tr.hide-for-#{$visibility-comparison-breakpoint}-only, tr.hide-for-#{$visibility-comparison-breakpoint}-up'
), comma);
$visibility-table-cell-list: append($visibility-table-cell-list, unquote(
'th.hide-for-#{$visibility-comparison-breakpoint}-only, td.hide-for-#{$visibility-comparison-breakpoint}-only, th.hide-for-#{$visibility-comparison-breakpoint}-up, td.hide-for-#{$visibility-comparison-breakpoint}-up'
), comma);
// Foundation 4 compatibility:
// Include .show/hide-for-[size] and .show/hide-for-[size]-down classes
// for small, medium, and large breakpoints only
@if $include-legacy-visibility-classes and index((small, medium, large), $visibility-comparison-breakpoint) != false {
$visibility-inherit-list: append($visibility-inherit-list, unquote(
'.hide-for-#{$visibility-comparison-breakpoint}, .show-for-#{$visibility-comparison-breakpoint}-down'
), comma);
$visibility-none-list: append($visibility-none-list, unquote(
'.show-for-#{$visibility-comparison-breakpoint}, .hide-for-#{$visibility-comparison-breakpoint}-down'
), comma);
$visibility-visible-list: append($visibility-visible-list, unquote(
'.hidden-for-#{$visibility-comparison-breakpoint}, .visible-for-#{$visibility-comparison-breakpoint}-down'
), comma);
$visibility-hidden-list: append($visibility-hidden-list, unquote(
'.visible-for-#{$visibility-comparison-breakpoint}, .hidden-for-#{$visibility-comparison-breakpoint}-down'
), comma);
$visibility-table-list: append($visibility-table-list, unquote(
'table.hide-for-#{$visibility-comparison-breakpoint}, table.show-for-#{$visibility-comparison-breakpoint}-down'
), comma);
$visibility-table-header-group-list: append($visibility-table-header-group-list, unquote(
'thead.hide-for-#{$visibility-comparison-breakpoint}, thead.show-for-#{$visibility-comparison-breakpoint}-down'
), comma);
$visibility-table-row-group-list: append($visibility-table-row-group-list, unquote(
'tbody.hide-for-#{$visibility-comparison-breakpoint}, tbody.show-for-#{$visibility-comparison-breakpoint}-down'
), comma);
$visibility-table-row-list: append($visibility-table-row-list, unquote(
'tr.hide-for-#{$visibility-comparison-breakpoint}, tr.show-for-#{$visibility-comparison-breakpoint}-down'
), comma);
$visibility-table-cell-list: append($visibility-table-cell-list, unquote(
'th.hide-for-#{$visibility-comparison-breakpoint}, td.hide-for-#{$visibility-comparison-breakpoint}, th.show-for-#{$visibility-comparison-breakpoint}-down, td.show-for-#{$visibility-comparison-breakpoint}-down'
), comma);
}
} @else {
// Current breakpoint
$visibility-inherit-list: append($visibility-inherit-list, unquote(
'.show-for-#{$visibility-comparison-breakpoint}-only, .show-for-#{$visibility-comparison-breakpoint}-up'
), comma);
$visibility-none-list: append($visibility-none-list, unquote(
'.hide-for-#{$visibility-comparison-breakpoint}-only, .hide-for-#{$visibility-comparison-breakpoint}-up'
), comma);
$visibility-visible-list: append($visibility-visible-list, unquote(
'.visible-for-#{$visibility-comparison-breakpoint}-only, .visible-for-#{$visibility-comparison-breakpoint}-up'
), comma);
$visibility-hidden-list: append($visibility-hidden-list, unquote(
'.hidden-for-#{$visibility-comparison-breakpoint}-only, .hidden-for-#{$visibility-comparison-breakpoint}-up'
), comma);
$visibility-table-list: append($visibility-table-list, unquote(
'table.show-for-#{$visibility-comparison-breakpoint}-only, table.show-for-#{$visibility-comparison-breakpoint}-up'
), comma);
$visibility-table-header-group-list: append($visibility-table-header-group-list, unquote(
'thead.show-for-#{$visibility-comparison-breakpoint}-only, thead.show-for-#{$visibility-comparison-breakpoint}-up'
), comma);
$visibility-table-row-group-list: append($visibility-table-row-group-list, unquote(
'tbody.show-for-#{$visibility-comparison-breakpoint}-only, tbody.show-for-#{$visibility-comparison-breakpoint}-up'
), comma);
$visibility-table-row-list: append($visibility-table-row-list, unquote(
'tr.show-for-#{$visibility-comparison-breakpoint}-only, tr.show-for-#{$visibility-comparison-breakpoint}-up'
), comma);
$visibility-table-cell-list: append($visibility-table-cell-list, unquote(
'th.show-for-#{$visibility-comparison-breakpoint}-only, td.show-for-#{$visibility-comparison-breakpoint}-only, th.show-for-#{$visibility-comparison-breakpoint}-up, td.show-for-#{$visibility-comparison-breakpoint}-up'
), comma);
// Foundation 4 compatibility:
// Include .show/hide-for-[size] and .show/hide-for-[size]-down classes
// for small, medium, and large breakpoints only
@if $include-legacy-visibility-classes and index((small, medium, large), $visibility-comparison-breakpoint) != false {
$visibility-inherit-list: append($visibility-inherit-list, unquote(
'.show-for-#{$visibility-comparison-breakpoint}, .show-for-#{$visibility-comparison-breakpoint}-down'
), comma);
$visibility-none-list: append($visibility-none-list, unquote(
'.hide-for-#{$visibility-comparison-breakpoint}, .hide-for-#{$visibility-comparison-breakpoint}-down'
), comma);
$visibility-visible-list: append($visibility-visible-list, unquote(
'.visible-for-#{$visibility-comparison-breakpoint}, .visible-for-#{$visibility-comparison-breakpoint}-down'
), comma);
$visibility-hidden-list: append($visibility-hidden-list, unquote(
'.hidden-for-#{$visibility-comparison-breakpoint}, .hidden-for-#{$visibility-comparison-breakpoint}-down'
), comma);
$visibility-table-list: append($visibility-table-list, unquote(
'table.show-for-#{$visibility-comparison-breakpoint}, table.show-for-#{$visibility-comparison-breakpoint}-down'
), comma);
$visibility-table-header-group-list: append($visibility-table-header-group-list, unquote(
'thead.show-for-#{$visibility-comparison-breakpoint}, thead.show-for-#{$visibility-comparison-breakpoint}-down'
), comma);
$visibility-table-row-group-list: append($visibility-table-row-group-list, unquote(
'tbody.show-for-#{$visibility-comparison-breakpoint}, tbody.show-for-#{$visibility-comparison-breakpoint}-down'
), comma);
$visibility-table-row-list: append($visibility-table-row-list, unquote(
'tr.show-for-#{$visibility-comparison-breakpoint}, tr.show-for-#{$visibility-comparison-breakpoint}-down'
), comma);
$visibility-table-cell-list: append($visibility-table-cell-list, unquote(
'th.show-for-#{$visibility-comparison-breakpoint}, td.show-for-#{$visibility-comparison-breakpoint}, th.show-for-#{$visibility-comparison-breakpoint}-down, td.show-for-#{$visibility-comparison-breakpoint}-down'
), comma);
}
}
}
/* #{$current-visibility-breakpoint} displays */
@media #{nth($visibility-breakpoint-queries, index($visibility-breakpoint-sizes, $current-visibility-breakpoint))} {
#{$visibility-inherit-list} {
display: inherit !important;
}
#{$visibility-none-list} {
display: none !important;
}
@if $include-accessibility-classes != false {
#{$visibility-visible-list} {
@include element-invisible-off;
}
#{$visibility-hidden-list} {
@include element-invisible;
}
}
@if $include-table-visibility-classes != false {
#{$visibility-table-list} {
display: table !important;
}
#{$visibility-table-header-group-list} {
display: table-header-group !important;
}
#{$visibility-table-row-group-list} {
display: table-row-group !important;
}
#{$visibility-table-row-list} {
display: table-row;
}
#{$visibility-table-cell-list} {
display: table-cell !important;
}
}
}
}
}
@if $include-html-visibility-classes != false {
@include visibility-loop;
/* Orientation targeting */
.show-for-landscape,
.hide-for-portrait { display: inherit !important; }
.hide-for-landscape,
.show-for-portrait { display: none !important; }
/* Specific visibility for tables */
table {
&.hide-for-landscape,
&.show-for-portrait { display: table !important; }
}
thead {
&.hide-for-landscape,
&.show-for-portrait { display: table-header-group !important; }
}
tbody {
&.hide-for-landscape,
&.show-for-portrait { display: table-row-group !important; }
}
tr {
&.hide-for-landscape,
&.show-for-portrait { display: table-row !important; }
}
td,
th {
&.hide-for-landscape,
&.show-for-portrait { display: table-cell !important; }
}
@media #{$landscape} {
.show-for-landscape,
.hide-for-portrait { display: inherit !important; }
.hide-for-landscape,
.show-for-portrait { display: none !important; }
/* Specific visibility for tables */
table {
&.show-for-landscape,
&.hide-for-portrait { display: table !important; }
}
thead {
&.show-for-landscape,
&.hide-for-portrait { display: table-header-group !important; }
}
tbody {
&.show-for-landscape,
&.hide-for-portrait { display: table-row-group !important; }
}
tr {
&.show-for-landscape,
&.hide-for-portrait { display: table-row !important; }
}
td,
th {
&.show-for-landscape,
&.hide-for-portrait { display: table-cell !important; }
}
}
@media #{$portrait} {
.show-for-portrait,
.hide-for-landscape { display: inherit !important; }
.hide-for-portrait,
.show-for-landscape { display: none !important; }
/* Specific visibility for tables */
table {
&.show-for-portrait,
&.hide-for-landscape { display: table !important; }
}
thead {
&.show-for-portrait,
&.hide-for-landscape { display: table-header-group !important; }
}
tbody {
&.show-for-portrait,
&.hide-for-landscape { display: table-row-group !important; }
}
tr {
&.show-for-portrait,
&.hide-for-landscape { display: table-row !important; }
}
td,
th {
&.show-for-portrait,
&.hide-for-landscape { display: table-cell !important; }
}
}
/* Touch-enabled device targeting */
.show-for-touch { display: none !important; }
.hide-for-touch { display: inherit !important; }
.touch .show-for-touch { display: inherit !important; }
.touch .hide-for-touch { display: none !important; }
/* Specific visibility for tables */
table.hide-for-touch { display: table !important; }
.touch table.show-for-touch { display: table !important; }
thead.hide-for-touch { display: table-header-group !important; }
.touch thead.show-for-touch { display: table-header-group !important; }
tbody.hide-for-touch { display: table-row-group !important; }
.touch tbody.show-for-touch { display: table-row-group !important; }
tr.hide-for-touch { display: table-row !important; }
.touch tr.show-for-touch { display: table-row !important; }
td.hide-for-touch { display: table-cell !important; }
.touch td.show-for-touch { display: table-cell !important; }
th.hide-for-touch { display: table-cell !important; }
.touch th.show-for-touch { display: table-cell !important; }
// Only include these styles if you want them.
@if $include-print-styles {
/*
* Print styles.
*
* Inlined to avoid required HTTP connection: www.phpied.com/delay-loading-your-print-css/
* Credit to Paul Irish and HTML5 Boilerplate (html5boilerplate.com)
*/
.print-only { display: none !important; }
@media print {
* {
background: transparent !important;
color: $black !important; /* Black prints faster: h5bp.com/s */
box-shadow: none !important;
text-shadow: none !important;
}
.show-for-print { display: block; }
.hide-for-print { display: none; }
table.show-for-print { display: table !important; }
thead.show-for-print { display: table-header-group !important; }
tbody.show-for-print { display: table-row-group !important; }
tr.show-for-print { display: table-row !important; }
td.show-for-print { display: table-cell !important; }
th.show-for-print { display: table-cell !important; }
a,
a:visited { text-decoration: underline;}
a[href]:after { content: " (" attr(href) ")"; }
abbr[title]:after { content: " (" attr(title) ")"; }
// Don't show links for images, or javascript/internal links
.ir a:after,
a[href^="javascript:"]:after,
a[href^="#"]:after { content: ""; }
pre,
blockquote {
border: 1px solid $aluminum;
page-break-inside: avoid;
}
thead { display: table-header-group; /* h5bp.com/t */ }
tr,
img { page-break-inside: avoid; }
img { max-width: 100% !important; }
@page { margin: 0.5cm; }
p,
h2,
h3 {
orphans: 3;
widows: 3;
}
h2,
h3 { page-break-after: avoid; }
.hide-on-print { display: none !important; }
.print-only { display: block !important; }
.hide-for-print { display: none !important; }
.show-for-print { display: inherit !important; }
}
}
/* Print visibility */
@media print {
.show-for-print { display: block; }
.hide-for-print { display: none; }
table.show-for-print { display: table !important; }
thead.show-for-print { display: table-header-group !important; }
tbody.show-for-print { display: table-row-group !important; }
tr.show-for-print { display: table-row !important; }
td.show-for-print { display: table-cell !important; }
th.show-for-print { display: table-cell !important; }
}
}

View File

@@ -0,0 +1,427 @@
/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
/**
* 1. Set default font family to sans-serif.
* 2. Prevent iOS text size adjust after orientation change, without disabling
* user zoom.
*/
html {
font-family: sans-serif; /* 1 */
-ms-text-size-adjust: 100%; /* 2 */
-webkit-text-size-adjust: 100%; /* 2 */
}
/**
* Remove default margin.
*/
body {
margin: 0;
}
/* HTML5 display definitions
========================================================================== */
/**
* Correct `block` display not defined for any HTML5 element in IE 8/9.
* Correct `block` display not defined for `details` or `summary` in IE 10/11
* and Firefox.
* Correct `block` display not defined for `main` in IE 11.
*/
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
main,
menu,
nav,
section,
summary {
display: block;
}
/**
* 1. Correct `inline-block` display not defined in IE 8/9.
* 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
*/
audio,
canvas,
progress,
video {
display: inline-block; /* 1 */
vertical-align: baseline; /* 2 */
}
/**
* Prevent modern browsers from displaying `audio` without controls.
* Remove excess height in iOS 5 devices.
*/
audio:not([controls]) {
display: none;
height: 0;
}
/**
* Address `[hidden]` styling not present in IE 8/9/10.
* Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
*/
[hidden],
template {
display: none;
}
/* Links
========================================================================== */
/**
* Remove the gray background color from active links in IE 10.
*/
a {
background-color: transparent;
}
/**
* Improve readability when focused and also mouse hovered in all browsers.
*/
a:active,
a:hover {
outline: 0;
}
/* Text-level semantics
========================================================================== */
/**
* Address styling not present in IE 8/9/10/11, Safari, and Chrome.
*/
abbr[title] {
border-bottom: 1px dotted;
}
/**
* Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
*/
b,
strong {
font-weight: bold;
}
/**
* Address styling not present in Safari and Chrome.
*/
dfn {
font-style: italic;
}
/**
* Address variable `h1` font-size and margin within `section` and `article`
* contexts in Firefox 4+, Safari, and Chrome.
*/
h1 {
font-size: 2em;
margin: 0.67em 0;
}
/**
* Address styling not present in IE 8/9.
*/
mark {
background: #ff0;
color: #000;
}
/**
* Address inconsistent and variable font size in all browsers.
*/
small {
font-size: 80%;
}
/**
* Prevent `sub` and `sup` affecting `line-height` in all browsers.
*/
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sup {
top: -0.5em;
}
sub {
bottom: -0.25em;
}
/* Embedded content
========================================================================== */
/**
* Remove border when inside `a` element in IE 8/9/10.
*/
img {
border: 0;
}
/**
* Correct overflow not hidden in IE 9/10/11.
*/
svg:not(:root) {
overflow: hidden;
}
/* Grouping content
========================================================================== */
/**
* Address margin not present in IE 8/9 and Safari.
*/
figure {
margin: 1em 40px;
}
/**
* Address differences between Firefox and other browsers.
*/
hr {
-moz-box-sizing: content-box;
box-sizing: content-box;
height: 0;
}
/**
* Contain overflow in all browsers.
*/
pre {
overflow: auto;
}
/**
* Address odd `em`-unit font size rendering in all browsers.
*/
code,
kbd,
pre,
samp {
font-family: monospace, monospace;
font-size: 1em;
}
/* Forms
========================================================================== */
/**
* Known limitation: by default, Chrome and Safari on OS X allow very limited
* styling of `select`, unless a `border` property is set.
*/
/**
* 1. Correct color not being inherited.
* Known issue: affects color of disabled elements.
* 2. Correct font properties not being inherited.
* 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
*/
button,
input,
optgroup,
select,
textarea {
color: inherit; /* 1 */
font: inherit; /* 2 */
margin: 0; /* 3 */
}
/**
* Address `overflow` set to `hidden` in IE 8/9/10/11.
*/
button {
overflow: visible;
}
/**
* Address inconsistent `text-transform` inheritance for `button` and `select`.
* All other form control elements do not inherit `text-transform` values.
* Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
* Correct `select` style inheritance in Firefox.
*/
button,
select {
text-transform: none;
}
/**
* 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
* and `video` controls.
* 2. Correct inability to style clickable `input` types in iOS.
* 3. Improve usability and consistency of cursor style between image-type
* `input` and others.
*/
button,
html input[type="button"], /* 1 */
input[type="reset"],
input[type="submit"] {
-webkit-appearance: button; /* 2 */
cursor: pointer; /* 3 */
}
/**
* Re-set default cursor for disabled elements.
*/
button[disabled],
html input[disabled] {
cursor: default;
}
/**
* Remove inner padding and border in Firefox 4+.
*/
button::-moz-focus-inner,
input::-moz-focus-inner {
border: 0;
padding: 0;
}
/**
* Address Firefox 4+ setting `line-height` on `input` using `!important` in
* the UA stylesheet.
*/
input {
line-height: normal;
}
/**
* It's recommended that you don't attempt to style these elements.
* Firefox's implementation doesn't respect box-sizing, padding, or width.
*
* 1. Address box sizing set to `content-box` in IE 8/9/10.
* 2. Remove excess padding in IE 8/9/10.
*/
input[type="checkbox"],
input[type="radio"] {
box-sizing: border-box; /* 1 */
padding: 0; /* 2 */
}
/**
* Fix the cursor style for Chrome's increment/decrement buttons. For certain
* `font-size` values of the `input`, it causes the cursor style of the
* decrement button to change from `default` to `text`.
*/
input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button {
height: auto;
}
/**
* 1. Address `appearance` set to `searchfield` in Safari and Chrome.
* 2. Address `box-sizing` set to `border-box` in Safari and Chrome
* (include `-moz` to future-proof).
*/
input[type="search"] {
-webkit-appearance: textfield; /* 1 */
-moz-box-sizing: content-box;
-webkit-box-sizing: content-box; /* 2 */
box-sizing: content-box;
}
/**
* Remove inner padding and search cancel button in Safari and Chrome on OS X.
* Safari (but not Chrome) clips the cancel button when the search input has
* padding (and `textfield` appearance).
*/
input[type="search"]::-webkit-search-cancel-button,
input[type="search"]::-webkit-search-decoration {
-webkit-appearance: none;
}
/**
* Define consistent border, margin, and padding.
*/
fieldset {
border: 1px solid #c0c0c0;
margin: 0 2px;
padding: 0.35em 0.625em 0.75em;
}
/**
* 1. Correct `color` not being inherited in IE 8/9/10/11.
* 2. Remove padding so people aren't caught out if they zero out fieldsets.
*/
legend {
border: 0; /* 1 */
padding: 0; /* 2 */
}
/**
* Remove default vertical scrollbar in IE 8/9/10/11.
*/
textarea {
overflow: auto;
}
/**
* Don't inherit the `font-weight` (applied by a rule above).
* NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
*/
optgroup {
font-weight: bold;
}
/* Tables
========================================================================== */
/**
* Remove most spacing between table cells.
*/
table {
border-collapse: collapse;
border-spacing: 0;
}
td,
th {
padding: 0;
}