mirror of
https://github.com/wahyd4/cdnjs.git
synced 2026-08-09 04:46:00 +10:00
Update Foundation to 4.3.2
This commit is contained in:
+4727
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
+410
@@ -0,0 +1,410 @@
|
||||
/*! normalize.css v2.1.2 | MIT License | git.io/normalize */
|
||||
|
||||
/* ==========================================================================
|
||||
HTML5 display definitions
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Correct `block` display not defined in IE 8/9.
|
||||
*/
|
||||
|
||||
article,
|
||||
aside,
|
||||
details,
|
||||
figcaption,
|
||||
figure,
|
||||
footer,
|
||||
header,
|
||||
hgroup,
|
||||
main,
|
||||
nav,
|
||||
section,
|
||||
summary {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/**
|
||||
* Correct `inline-block` display not defined in IE 8/9.
|
||||
*/
|
||||
|
||||
audio,
|
||||
canvas,
|
||||
video {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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.
|
||||
* Hide the `template` element in IE, Safari, and Firefox < 22.
|
||||
*/
|
||||
|
||||
[hidden],
|
||||
template {
|
||||
display: none;
|
||||
}
|
||||
|
||||
script {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Base
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* 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;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Links
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove the gray background color from active links in IE 10.
|
||||
*/
|
||||
|
||||
a {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address `outline` inconsistency between Chrome and other browsers.
|
||||
*/
|
||||
|
||||
a:focus {
|
||||
outline: thin dotted;
|
||||
}
|
||||
|
||||
/**
|
||||
* Improve readability when focused and also mouse hovered in all browsers.
|
||||
*/
|
||||
|
||||
a:active,
|
||||
a:hover {
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Typography
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Address variable `h1` font-size and margin within `section` and `article`
|
||||
* contexts in Firefox 4+, Safari 5, and Chrome.
|
||||
*/
|
||||
|
||||
h1 {
|
||||
font-size: 2em;
|
||||
margin: 0.67em 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address styling not present in IE 8/9, Safari 5, and Chrome.
|
||||
*/
|
||||
|
||||
abbr[title] {
|
||||
border-bottom: 1px dotted;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome.
|
||||
*/
|
||||
|
||||
b,
|
||||
strong {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address styling not present in Safari 5 and Chrome.
|
||||
*/
|
||||
|
||||
dfn {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address differences between Firefox and other browsers.
|
||||
*/
|
||||
|
||||
hr {
|
||||
-moz-box-sizing: content-box;
|
||||
box-sizing: content-box;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address styling not present in IE 8/9.
|
||||
*/
|
||||
|
||||
mark {
|
||||
background: #ff0;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
/**
|
||||
* Correct font family set oddly in Safari 5 and Chrome.
|
||||
*/
|
||||
|
||||
code,
|
||||
kbd,
|
||||
pre,
|
||||
samp {
|
||||
font-family: monospace, serif;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
/**
|
||||
* Improve readability of pre-formatted text in all browsers.
|
||||
*/
|
||||
|
||||
pre {
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set consistent quote types.
|
||||
*/
|
||||
|
||||
q {
|
||||
quotes: "\201C" "\201D" "\2018" "\2019";
|
||||
}
|
||||
|
||||
/**
|
||||
* 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.
|
||||
*/
|
||||
|
||||
img {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Correct overflow displayed oddly in IE 9.
|
||||
*/
|
||||
|
||||
svg:not(:root) {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Figures
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Address margin not present in IE 8/9 and Safari 5.
|
||||
*/
|
||||
|
||||
figure {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Forms
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* 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.
|
||||
* 2. Remove padding so people aren't caught out if they zero out fieldsets.
|
||||
*/
|
||||
|
||||
legend {
|
||||
border: 0; /* 1 */
|
||||
padding: 0; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct font family not being inherited in all browsers.
|
||||
* 2. Correct font size not being inherited in all browsers.
|
||||
* 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome.
|
||||
*/
|
||||
|
||||
button,
|
||||
input,
|
||||
select,
|
||||
textarea {
|
||||
font-family: inherit; /* 1 */
|
||||
font-size: 100%; /* 2 */
|
||||
margin: 0; /* 3 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Address Firefox 4+ setting `line-height` on `input` using `!important` in
|
||||
* the UA stylesheet.
|
||||
*/
|
||||
|
||||
button,
|
||||
input {
|
||||
line-height: normal;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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 Chrome, Safari 5+, and IE 8+.
|
||||
* Correct `select` style inheritance in Firefox 4+ and Opera.
|
||||
*/
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Address box sizing set to `content-box` in IE 8/9.
|
||||
* 2. Remove excess padding in IE 8/9.
|
||||
*/
|
||||
|
||||
input[type="checkbox"],
|
||||
input[type="radio"] {
|
||||
box-sizing: border-box; /* 1 */
|
||||
padding: 0; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome.
|
||||
* 2. Address `box-sizing` set to `border-box` in Safari 5 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 5 and Chrome
|
||||
* on OS X.
|
||||
*/
|
||||
|
||||
input[type="search"]::-webkit-search-cancel-button,
|
||||
input[type="search"]::-webkit-search-decoration {
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove inner padding and border in Firefox 4+.
|
||||
*/
|
||||
|
||||
button::-moz-focus-inner,
|
||||
input::-moz-focus-inner {
|
||||
border: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Remove default vertical scrollbar in IE 8/9.
|
||||
* 2. Improve readability and alignment in all browsers.
|
||||
*/
|
||||
|
||||
textarea {
|
||||
overflow: auto; /* 1 */
|
||||
vertical-align: top; /* 2 */
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Tables
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove most spacing between table cells.
|
||||
*/
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
/*! normalize.css v2.1.2 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden],template{display:none}script{display:none !important}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}a{background:transparent}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{font-size:2em;margin:.67em 0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}mark{background:#ff0;color:#000}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:0}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}button,input{line-height:normal}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}
|
||||
+15
File diff suppressed because one or more lines are too long
@@ -0,0 +1,194 @@
|
||||
/*jslint unparam: true, browser: true, indent: 2 */
|
||||
|
||||
;(function ($, window, document, undefined) {
|
||||
'use strict';
|
||||
|
||||
Foundation.libs.abide = {
|
||||
name : 'abide',
|
||||
|
||||
version : '4.3.2',
|
||||
|
||||
settings : {
|
||||
live_validate : true,
|
||||
focus_on_invalid : true,
|
||||
timeout : 1000,
|
||||
patterns : {
|
||||
alpha: /[a-zA-Z]+/,
|
||||
alpha_numeric : /[a-zA-Z0-9]+/,
|
||||
integer: /-?\d+/,
|
||||
number: /-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?/,
|
||||
|
||||
// generic password: upper-case, lower-case, number/special character, and min 8 characters
|
||||
password : /(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/,
|
||||
|
||||
// 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,6}$/,
|
||||
|
||||
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])[- \/.](19|20)\d\d/,
|
||||
|
||||
// #FFF or #FFFFFF
|
||||
color: /^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/
|
||||
}
|
||||
},
|
||||
|
||||
timer : null,
|
||||
|
||||
init : function (scope, method, options) {
|
||||
if (typeof method === 'object') {
|
||||
$.extend(true, this.settings, method);
|
||||
}
|
||||
|
||||
if (typeof method !== 'string') {
|
||||
if (!this.settings.init) { this.events(); }
|
||||
|
||||
} else {
|
||||
return this[method].call(this, options);
|
||||
}
|
||||
},
|
||||
|
||||
events : function () {
|
||||
var self = this,
|
||||
forms = $('form[data-abide]', this.scope).attr('novalidate', 'novalidate');
|
||||
|
||||
forms
|
||||
.on('submit validate', function (e) {
|
||||
return self.validate($(this).find('input, textarea, select').get(), e);
|
||||
});
|
||||
|
||||
this.settings.init = true;
|
||||
|
||||
if (!this.settings.live_validate) return;
|
||||
|
||||
forms
|
||||
.find('input, textarea, select')
|
||||
.on('blur change', function (e) {
|
||||
self.validate([this], e);
|
||||
})
|
||||
.on('keydown', function (e) {
|
||||
clearTimeout(self.timer);
|
||||
self.timer = setTimeout(function () {
|
||||
self.validate([this], e);
|
||||
}.bind(this), self.settings.timeout);
|
||||
});
|
||||
},
|
||||
|
||||
validate : function (els, e) {
|
||||
var validations = this.parse_patterns(els),
|
||||
validation_count = validations.length,
|
||||
form = $(els[0]).closest('form');
|
||||
|
||||
for (var i=0; i < validation_count; i++) {
|
||||
if (!validations[i] && /submit/.test(e.type)) {
|
||||
if (this.settings.focus_on_invalid) els[i].focus();
|
||||
form.trigger('invalid');
|
||||
$(els[i]).closest('form').attr('data-invalid', '');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (/submit/.test(e.type)) {
|
||||
form.trigger('valid');
|
||||
}
|
||||
|
||||
form.removeAttr('data-invalid');
|
||||
|
||||
return true;
|
||||
},
|
||||
|
||||
parse_patterns : function (els) {
|
||||
var count = els.length,
|
||||
el_patterns = [];
|
||||
|
||||
for (var i = count - 1; i >= 0; 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';
|
||||
|
||||
if (this.settings.patterns.hasOwnProperty(type)) {
|
||||
return [el, this.settings.patterns[type], required];
|
||||
}
|
||||
|
||||
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];
|
||||
}
|
||||
|
||||
pattern = /.*/;
|
||||
|
||||
return [el, pattern, required];
|
||||
},
|
||||
|
||||
check_validation_and_apply_styles : function (el_patterns) {
|
||||
var count = el_patterns.length,
|
||||
validations = [];
|
||||
|
||||
for (var i = count - 1; i >= 0; i--) {
|
||||
var el = el_patterns[i][0],
|
||||
required = el_patterns[i][2],
|
||||
value = el.value,
|
||||
is_radio = el.type === "radio",
|
||||
valid_length = (required) ? (el.value.length > 0) : true;
|
||||
|
||||
if (is_radio && required) {
|
||||
validations.push(this.valid_radio(el, required));
|
||||
} else {
|
||||
if (el_patterns[i][1].test(value) && valid_length ||
|
||||
!required && el.value.length < 1) {
|
||||
$(el).removeAttr('data-invalid').parent().removeClass('error');
|
||||
validations.push(true);
|
||||
} else {
|
||||
$(el).attr('data-invalid', '').parent().addClass('error');
|
||||
validations.push(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return validations;
|
||||
},
|
||||
|
||||
valid_radio : function (el, required) {
|
||||
var name = el.getAttribute('name'),
|
||||
group = document.getElementsByName(name),
|
||||
count = group.length,
|
||||
valid = false;
|
||||
|
||||
for (var i=0; i < count; i++) {
|
||||
if (group[i].checked) valid = true;
|
||||
}
|
||||
|
||||
for (var i=0; i < count; i++) {
|
||||
if (valid) {
|
||||
$(group[i]).removeAttr('data-invalid').parent().removeClass('error');
|
||||
} else {
|
||||
$(group[i]).attr('data-invalid', '').parent().addClass('error');
|
||||
}
|
||||
}
|
||||
|
||||
return valid;
|
||||
}
|
||||
};
|
||||
}(Foundation.zj, this, this.document));
|
||||
@@ -0,0 +1 @@
|
||||
(function(c,b,a,d){Foundation.libs.abide={name:"abide",version:"4.3.2",settings:{live_validate:true,focus_on_invalid:true,timeout:1000,patterns:{alpha:/[a-zA-Z]+/,alpha_numeric:/[a-zA-Z0-9]+/,integer:/-?\d+/,number:/-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?/,password:/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/,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}$/,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})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?/,domain:/^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}$/,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))/,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))/,time:/(0[0-9]|1[0-9]|2[0-3])(:[0-5][0-9]){2}/,dateISO:/\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}/,month_day_year:/(0[1-9]|1[012])[- \/.](0[1-9]|[12][0-9]|3[01])[- \/.](19|20)\d\d/,color:/^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/}},timer:null,init:function(f,g,e){if(typeof g==="object"){c.extend(true,this.settings,g)}if(typeof g!=="string"){if(!this.settings.init){this.events()}}else{return this[g].call(this,e)}},events:function(){var f=this,e=c("form[data-abide]",this.scope).attr("novalidate","novalidate");e.on("submit validate",function(g){return f.validate(c(this).find("input, textarea, select").get(),g)});this.settings.init=true;if(!this.settings.live_validate){return}e.find("input, textarea, select").on("blur change",function(g){f.validate([this],g)}).on("keydown",function(g){clearTimeout(f.timer);f.timer=setTimeout(function(){f.validate([this],g)}.bind(this),f.settings.timeout)})},validate:function(j,l){var h=this.parse_patterns(j),g=h.length,k=c(j[0]).closest("form");for(var f=0;f<g;f++){if(!h[f]&&/submit/.test(l.type)){if(this.settings.focus_on_invalid){j[f].focus()}k.trigger("invalid");c(j[f]).closest("form").attr("data-invalid","");return false}}if(/submit/.test(l.type)){k.trigger("valid")}k.removeAttr("data-invalid");return true},parse_patterns:function(g){var h=g.length,e=[];for(var f=h-1;f>=0;f--){e.push(this.pattern(g[f]))}return this.check_validation_and_apply_styles(e)},pattern:function(f){var e=f.getAttribute("type"),h=typeof f.getAttribute("required")==="string";if(this.settings.patterns.hasOwnProperty(e)){return[f,this.settings.patterns[e],h]}var g=f.getAttribute("pattern")||"";if(this.settings.patterns.hasOwnProperty(g)&&g.length>0){return[f,this.settings.patterns[g],h]}else{if(g.length>0){return[f,new RegExp(g),h]}}g=/.*/;return[f,g,h]},check_validation_and_apply_styles:function(g){var j=g.length,f=[];for(var h=j-1;h>=0;h--){var e=g[h][0],l=g[h][2],m=e.value,n=e.type==="radio",k=(l)?(e.value.length>0):true;if(n&&l){f.push(this.valid_radio(e,l))}else{if(g[h][1].test(m)&&k||!l&&e.value.length<1){c(e).removeAttr("data-invalid").parent().removeClass("error");f.push(true)}else{c(e).attr("data-invalid","").parent().addClass("error");f.push(false)}}}return f},valid_radio:function(g,l){var e=g.getAttribute("name"),k=a.getElementsByName(e),j=k.length,h=false;for(var f=0;f<j;f++){if(k[f].checked){h=true}}for(var f=0;f<j;f++){if(h){c(k[f]).removeAttr("data-invalid").parent().removeClass("error")}else{c(k[f]).attr("data-invalid","").parent().addClass("error")}}return h}}}(Foundation.zj,this,this.document));
|
||||
@@ -0,0 +1,57 @@
|
||||
/*jslint unparam: true, browser: true, indent: 2 */
|
||||
|
||||
;(function ($, window, document, undefined) {
|
||||
'use strict';
|
||||
|
||||
Foundation.libs.alerts = {
|
||||
name : 'alerts',
|
||||
|
||||
version : '4.3.2',
|
||||
|
||||
settings : {
|
||||
animation: 'fadeOut',
|
||||
speed: 300, // fade out speed
|
||||
callback: function (){}
|
||||
},
|
||||
|
||||
init : function (scope, method, options) {
|
||||
this.scope = scope || this.scope;
|
||||
Foundation.inherit(this, 'data_options');
|
||||
|
||||
if (typeof method === 'object') {
|
||||
$.extend(true, this.settings, method);
|
||||
}
|
||||
|
||||
if (typeof method !== 'string') {
|
||||
if (!this.settings.init) { this.events(); }
|
||||
|
||||
return this.settings.init;
|
||||
} else {
|
||||
return this[method].call(this, options);
|
||||
}
|
||||
},
|
||||
|
||||
events : function () {
|
||||
var self = this;
|
||||
|
||||
$(this.scope).on('click.fndtn.alerts', '[data-alert] a.close', function (e) {
|
||||
var alertBox = $(this).closest("[data-alert]"),
|
||||
settings = $.extend({}, self.settings, self.data_options(alertBox));
|
||||
|
||||
e.preventDefault();
|
||||
alertBox[settings.animation](settings.speed, function () {
|
||||
$(this).remove();
|
||||
settings.callback();
|
||||
});
|
||||
});
|
||||
|
||||
this.settings.init = true;
|
||||
},
|
||||
|
||||
off : function () {
|
||||
$(this.scope).off('.fndtn.alerts');
|
||||
},
|
||||
|
||||
reflow : function () {}
|
||||
};
|
||||
}(Foundation.zj, this, this.document));
|
||||
@@ -0,0 +1 @@
|
||||
(function(c,b,a,d){Foundation.libs.alerts={name:"alerts",version:"4.3.2",settings:{animation:"fadeOut",speed:300,callback:function(){}},init:function(f,g,e){this.scope=f||this.scope;Foundation.inherit(this,"data_options");if(typeof g==="object"){c.extend(true,this.settings,g)}if(typeof g!=="string"){if(!this.settings.init){this.events()}return this.settings.init}else{return this[g].call(this,e)}},events:function(){var e=this;c(this.scope).on("click.fndtn.alerts","[data-alert] a.close",function(h){var f=c(this).closest("[data-alert]"),g=c.extend({},e.settings,e.data_options(f));h.preventDefault();f[g.animation](g.speed,function(){c(this).remove();g.callback()})});this.settings.init=true},off:function(){c(this.scope).off(".fndtn.alerts")},reflow:function(){}}}(Foundation.zj,this,this.document));
|
||||
@@ -0,0 +1,516 @@
|
||||
/*jslint unparam: true, browser: true, indent: 2 */
|
||||
|
||||
;(function ($, window, document, undefined) {
|
||||
'use strict';
|
||||
|
||||
Foundation.libs.clearing = {
|
||||
name : 'clearing',
|
||||
|
||||
version: '4.3.2',
|
||||
|
||||
settings : {
|
||||
templates : {
|
||||
viewing : '<a href="#" class="clearing-close">×</a>' +
|
||||
'<div class="visible-img" style="display: none"><img src="//:0">' +
|
||||
'<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',
|
||||
|
||||
// event initializers and locks
|
||||
init : false,
|
||||
locked : false
|
||||
},
|
||||
|
||||
init : function (scope, method, options) {
|
||||
var self = this;
|
||||
Foundation.inherit(this, 'set_data get_data remove_data throttle data_options');
|
||||
|
||||
if (typeof method === 'object') {
|
||||
options = $.extend(true, this.settings, method);
|
||||
}
|
||||
|
||||
if (typeof method !== 'string') {
|
||||
$(this.scope).find('ul[data-clearing]').each(function () {
|
||||
var $el = $(this),
|
||||
options = options || {},
|
||||
lis = $el.find('li'),
|
||||
settings = self.get_data($el);
|
||||
|
||||
if (!settings && lis.length > 0) {
|
||||
options.$parent = $el.parent();
|
||||
|
||||
self.set_data($el, $.extend({}, self.settings, options, self.data_options($el)));
|
||||
|
||||
self.assemble($el.find('li'));
|
||||
|
||||
if (!self.settings.init) {
|
||||
self.events().swipe_events();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return this.settings.init;
|
||||
} else {
|
||||
// fire method
|
||||
return this[method].call(this, options);
|
||||
}
|
||||
},
|
||||
|
||||
// event binding and initial setup
|
||||
|
||||
events : function () {
|
||||
var self = this;
|
||||
|
||||
$(this.scope)
|
||||
.on('click.fndtn.clearing', 'ul[data-clearing] li',
|
||||
function (e, current, target) {
|
||||
var current = current || $(this),
|
||||
target = target || current,
|
||||
next = current.next('li'),
|
||||
settings = self.get_data(current.parent()),
|
||||
image = $(e.target);
|
||||
|
||||
e.preventDefault();
|
||||
if (!settings) self.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 = target.find('img');
|
||||
}
|
||||
|
||||
// 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) { this.nav(e, 'next') }.bind(this))
|
||||
.on('click.fndtn.clearing', '.clearing-main-prev',
|
||||
function (e) { this.nav(e, 'prev') }.bind(this))
|
||||
.on('click.fndtn.clearing', this.settings.close_selectors,
|
||||
function (e) { Foundation.libs.clearing.close(e, this) })
|
||||
.on('keydown.fndtn.clearing',
|
||||
function (e) { this.keydown(e) }.bind(this));
|
||||
|
||||
$(window).on('resize.fndtn.clearing',
|
||||
function () { this.resize() }.bind(this));
|
||||
|
||||
this.settings.init = true;
|
||||
return this;
|
||||
},
|
||||
|
||||
swipe_events : function () {
|
||||
var self = this;
|
||||
|
||||
$(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
|
||||
};
|
||||
|
||||
$(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 = $(this).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) ? 'next' : 'prev';
|
||||
data.active = true;
|
||||
self.nav(e, direction);
|
||||
}
|
||||
})
|
||||
.on('touchend.fndtn.clearing', '.visible-img', function(e) {
|
||||
$(this).data('swipe-transition', {});
|
||||
e.stopPropagation();
|
||||
});
|
||||
},
|
||||
|
||||
assemble : function ($li) {
|
||||
var $el = $li.parent();
|
||||
$el.after('<div id="foundationClearingHolder"></div>');
|
||||
|
||||
var holder = $('#foundationClearingHolder'),
|
||||
settings = this.get_data($el),
|
||||
grid = $el.detach(),
|
||||
data = {
|
||||
grid: '<div class="carousel">' + this.outerHTML(grid[0]) + '</div>',
|
||||
viewing: settings.templates.viewing
|
||||
},
|
||||
wrapper = '<div class="clearing-assembled"><div>' + data.viewing +
|
||||
data.grid + '</div></div>';
|
||||
|
||||
return holder.after(wrapper).remove();
|
||||
},
|
||||
|
||||
// event callbacks
|
||||
|
||||
open : function ($image, current, target) {
|
||||
var root = target.closest('.clearing-assembled'),
|
||||
container = root.find('div').first(),
|
||||
visible_image = container.find('.visible-img'),
|
||||
image = visible_image.find('img').not($image);
|
||||
|
||||
if (!this.locked()) {
|
||||
// set the image to the selected thumbnail
|
||||
image
|
||||
.attr('src', this.load($image))
|
||||
.css('visibility', 'hidden');
|
||||
|
||||
this.loaded(image, function () {
|
||||
image.css('visibility', 'visible');
|
||||
// toggle the gallery
|
||||
root.addClass('clearing-blackout');
|
||||
container.addClass('clearing-container');
|
||||
visible_image.show();
|
||||
this.fix_height(target)
|
||||
.caption(visible_image.find('.clearing-caption'), $image)
|
||||
.center(image)
|
||||
.shift(current, target, function () {
|
||||
target.siblings().removeClass('visible');
|
||||
target.addClass('visible');
|
||||
});
|
||||
}.bind(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))), container, visible_image;
|
||||
|
||||
if (el === e.target && root) {
|
||||
container = root.find('div').first();
|
||||
visible_image = container.find('.visible-img');
|
||||
this.settings.prev_index = 0;
|
||||
root.find('ul[data-clearing]')
|
||||
.attr('style', '').closest('.clearing-blackout')
|
||||
.removeClass('clearing-blackout');
|
||||
container.removeClass('clearing-container');
|
||||
visible_image.hide();
|
||||
}
|
||||
|
||||
return false;
|
||||
},
|
||||
|
||||
is_open : function (current) {
|
||||
return current.parent().prop('style').length > 0;
|
||||
},
|
||||
|
||||
keydown : function (e) {
|
||||
var clearing = $('.clearing-blackout').find('ul[data-clearing]');
|
||||
|
||||
if (e.which === 39) this.go(clearing, 'next');
|
||||
if (e.which === 37) this.go(clearing, 'prev');
|
||||
if (e.which === 27) $('a.clearing-close').trigger('click');
|
||||
},
|
||||
|
||||
nav : function (e, direction) {
|
||||
var clearing = $('.clearing-blackout').find('ul[data-clearing]');
|
||||
|
||||
e.preventDefault();
|
||||
this.go(clearing, direction);
|
||||
},
|
||||
|
||||
resize : function () {
|
||||
var image = $('.clearing-blackout .visible-img').find('img');
|
||||
|
||||
if (image.length) {
|
||||
this.center(image);
|
||||
}
|
||||
},
|
||||
|
||||
// visual adjustments
|
||||
fix_height : function (target) {
|
||||
var lis = target.parent().children(),
|
||||
self = this;
|
||||
|
||||
lis.each(function () {
|
||||
var li = $(this),
|
||||
image = li.find('img');
|
||||
|
||||
if (li.height() > self.outerHeight(image)) {
|
||||
li.addClass('fix-height');
|
||||
}
|
||||
})
|
||||
.closest('ul')
|
||||
.width(lis.length * 100 + '%');
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
update_paddles : function (target) {
|
||||
var visible_image = target
|
||||
.closest('.carousel')
|
||||
.siblings('.visible-img');
|
||||
|
||||
if (target.next().length > 0) {
|
||||
visible_image
|
||||
.find('.clearing-main-next')
|
||||
.removeClass('disabled');
|
||||
} else {
|
||||
visible_image
|
||||
.find('.clearing-main-next')
|
||||
.addClass('disabled');
|
||||
}
|
||||
|
||||
if (target.prev().length > 0) {
|
||||
visible_image
|
||||
.find('.clearing-main-prev')
|
||||
.removeClass('disabled');
|
||||
} else {
|
||||
visible_image
|
||||
.find('.clearing-main-prev')
|
||||
.addClass('disabled');
|
||||
}
|
||||
},
|
||||
|
||||
center : function (target) {
|
||||
if (!this.rtl) {
|
||||
target.css({
|
||||
marginLeft : -(this.outerWidth(target) / 2),
|
||||
marginTop : -(this.outerHeight(target) / 2)
|
||||
});
|
||||
} else {
|
||||
target.css({
|
||||
marginRight : -(this.outerWidth(target) / 2),
|
||||
marginTop : -(this.outerHeight(target) / 2)
|
||||
});
|
||||
}
|
||||
return this;
|
||||
},
|
||||
|
||||
// image loading and preloading
|
||||
|
||||
load : function ($image) {
|
||||
if ($image[0].nodeName === "A") {
|
||||
var href = $image.attr('href');
|
||||
} else {
|
||||
var href = $image.parent().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());
|
||||
},
|
||||
|
||||
loaded : function (image, callback) {
|
||||
// based on jquery.imageready.js
|
||||
// @weblinc, @jsantell, (c) 2012
|
||||
|
||||
function loaded () {
|
||||
callback();
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
},
|
||||
|
||||
img : function (img) {
|
||||
if (img.length) {
|
||||
var new_img = new Image(),
|
||||
new_a = img.find('a');
|
||||
|
||||
if (new_a.length) {
|
||||
new_img.src = new_a.attr('href');
|
||||
} else {
|
||||
new_img.src = img.find('img').attr('src');
|
||||
}
|
||||
}
|
||||
return this;
|
||||
},
|
||||
|
||||
// image caption
|
||||
|
||||
caption : function (container, $image) {
|
||||
var caption = $image.data('caption');
|
||||
|
||||
if (caption) {
|
||||
container
|
||||
.html(caption)
|
||||
.show();
|
||||
} else {
|
||||
container
|
||||
.text('')
|
||||
.hide();
|
||||
}
|
||||
return this;
|
||||
},
|
||||
|
||||
// directional methods
|
||||
|
||||
go : function ($ul, direction) {
|
||||
var current = $ul.find('.visible'),
|
||||
target = current[direction]();
|
||||
|
||||
if (target.length) {
|
||||
target
|
||||
.find('img')
|
||||
.trigger('click', [current, target]);
|
||||
}
|
||||
},
|
||||
|
||||
shift : function (current, target, callback) {
|
||||
var clearing = target.parent(),
|
||||
old_index = this.settings.prev_index || target.index(),
|
||||
direction = this.direction(clearing, current, target),
|
||||
left = parseInt(clearing.css('left'), 10),
|
||||
width = this.outerWidth(target),
|
||||
skip_shift;
|
||||
|
||||
// we use jQuery animate instead of CSS transitions because we
|
||||
// need a callback to unlock the next animation
|
||||
if (target.index() !== old_index && !/skip/.test(direction)){
|
||||
if (/left/.test(direction)) {
|
||||
this.lock();
|
||||
clearing.animate({left : left + width}, 300, this.unlock());
|
||||
} else if (/right/.test(direction)) {
|
||||
this.lock();
|
||||
clearing.animate({left : left - width}, 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) {
|
||||
clearing.animate({left : -(skip_shift * width)}, 300, this.unlock());
|
||||
} else {
|
||||
clearing.animate({left : 0}, 300, this.unlock());
|
||||
}
|
||||
}
|
||||
|
||||
callback();
|
||||
},
|
||||
|
||||
direction : function ($el, current, target) {
|
||||
var lis = $el.find('li'),
|
||||
li_width = this.outerWidth(lis) + (this.outerWidth(lis) / 4),
|
||||
up_count = Math.floor(this.outerWidth($('.clearing-container')) / 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;
|
||||
},
|
||||
|
||||
// plugin management/browser quirks
|
||||
|
||||
outerHTML : function (el) {
|
||||
// support FireFox < 11
|
||||
return el.outerHTML || new XMLSerializer().serializeToString(el);
|
||||
},
|
||||
|
||||
off : function () {
|
||||
$(this.scope).off('.fndtn.clearing');
|
||||
$(window).off('.fndtn.clearing');
|
||||
this.remove_data(); // empty settings cache
|
||||
this.settings.init = false;
|
||||
},
|
||||
|
||||
reflow : function () {
|
||||
this.init();
|
||||
}
|
||||
};
|
||||
|
||||
}(Foundation.zj, this, this.document));
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,74 @@
|
||||
/*!
|
||||
* jQuery Cookie Plugin v1.3
|
||||
* https://github.com/carhartl/jquery-cookie
|
||||
*
|
||||
* Copyright 2011, Klaus Hartl
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
* http://www.opensource.org/licenses/mit-license.php
|
||||
* http://www.opensource.org/licenses/GPL-2.0
|
||||
*
|
||||
* Modified to work with Zepto.js by ZURB
|
||||
*/
|
||||
(function ($, document, undefined) {
|
||||
|
||||
var pluses = /\+/g;
|
||||
|
||||
function raw(s) {
|
||||
return s;
|
||||
}
|
||||
|
||||
function decoded(s) {
|
||||
return decodeURIComponent(s.replace(pluses, ' '));
|
||||
}
|
||||
|
||||
var config = $.cookie = function (key, value, options) {
|
||||
|
||||
// write
|
||||
if (value !== undefined) {
|
||||
options = $.extend({}, config.defaults, options);
|
||||
|
||||
if (value === null) {
|
||||
options.expires = -1;
|
||||
}
|
||||
|
||||
if (typeof options.expires === 'number') {
|
||||
var days = options.expires, t = options.expires = new Date();
|
||||
t.setDate(t.getDate() + days);
|
||||
}
|
||||
|
||||
value = config.json ? JSON.stringify(value) : String(value);
|
||||
|
||||
return (document.cookie = [
|
||||
encodeURIComponent(key), '=', config.raw ? value : encodeURIComponent(value),
|
||||
options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
|
||||
options.path ? '; path=' + options.path : '',
|
||||
options.domain ? '; domain=' + options.domain : '',
|
||||
options.secure ? '; secure' : ''
|
||||
].join(''));
|
||||
}
|
||||
|
||||
// read
|
||||
var decode = config.raw ? raw : decoded;
|
||||
var cookies = document.cookie.split('; ');
|
||||
for (var i = 0, l = cookies.length; i < l; i++) {
|
||||
var parts = cookies[i].split('=');
|
||||
if (decode(parts.shift()) === key) {
|
||||
var cookie = decode(parts.join('='));
|
||||
return config.json ? JSON.parse(cookie) : cookie;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
};
|
||||
|
||||
config.defaults = {};
|
||||
|
||||
$.removeCookie = function (key, options) {
|
||||
if ($.cookie(key) !== null) {
|
||||
$.cookie(key, null, options);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
})(Foundation.zj, document);
|
||||
@@ -0,0 +1,12 @@
|
||||
/*!
|
||||
* jQuery Cookie Plugin v1.3
|
||||
* https://github.com/carhartl/jquery-cookie
|
||||
*
|
||||
* Copyright 2011, Klaus Hartl
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
* http://www.opensource.org/licenses/mit-license.php
|
||||
* http://www.opensource.org/licenses/GPL-2.0
|
||||
*
|
||||
* Modified to work with Zepto.js by ZURB
|
||||
*/
|
||||
(function(f,b,g){var a=/\+/g;function e(h){return h}function c(h){return decodeURIComponent(h.replace(a," "))}var d=f.cookie=function(p,o,u){if(o!==g){u=f.extend({},d.defaults,u);if(o===null){u.expires=-1}if(typeof u.expires==="number"){var q=u.expires,s=u.expires=new Date();s.setDate(s.getDate()+q)}o=d.json?JSON.stringify(o):String(o);return(b.cookie=[encodeURIComponent(p),"=",d.raw?o:encodeURIComponent(o),u.expires?"; expires="+u.expires.toUTCString():"",u.path?"; path="+u.path:"",u.domain?"; domain="+u.domain:"",u.secure?"; secure":""].join(""))}var h=d.raw?e:c;var r=b.cookie.split("; ");for(var n=0,k=r.length;n<k;n++){var m=r[n].split("=");if(h(m.shift())===p){var j=h(m.join("="));return d.json?JSON.parse(j):j}}return null};d.defaults={};f.removeCookie=function(i,h){if(f.cookie(i)!==null){f.cookie(i,null,h);return true}return false}})(Foundation.zj,document);
|
||||
@@ -0,0 +1,183 @@
|
||||
/*jslint unparam: true, browser: true, indent: 2 */
|
||||
|
||||
;(function ($, window, document, undefined) {
|
||||
'use strict';
|
||||
|
||||
Foundation.libs.dropdown = {
|
||||
name : 'dropdown',
|
||||
|
||||
version : '4.3.2',
|
||||
|
||||
settings : {
|
||||
activeClass: 'open',
|
||||
is_hover: false,
|
||||
opened: function(){},
|
||||
closed: function(){}
|
||||
},
|
||||
|
||||
init : function (scope, method, options) {
|
||||
this.scope = scope || this.scope;
|
||||
Foundation.inherit(this, 'throttle scrollLeft data_options');
|
||||
|
||||
if (typeof method === 'object') {
|
||||
$.extend(true, this.settings, method);
|
||||
}
|
||||
|
||||
if (typeof method !== 'string') {
|
||||
|
||||
if (!this.settings.init) {
|
||||
this.events();
|
||||
}
|
||||
|
||||
return this.settings.init;
|
||||
} else {
|
||||
return this[method].call(this, options);
|
||||
}
|
||||
},
|
||||
|
||||
events : function () {
|
||||
var self = this;
|
||||
|
||||
$(this.scope)
|
||||
.on('click.fndtn.dropdown', '[data-dropdown]', function (e) {
|
||||
var settings = $.extend({}, self.settings, self.data_options($(this)));
|
||||
e.preventDefault();
|
||||
|
||||
if (!settings.is_hover) self.toggle($(this));
|
||||
})
|
||||
.on('mouseenter', '[data-dropdown]', function (e) {
|
||||
var settings = $.extend({}, self.settings, self.data_options($(this)));
|
||||
if (settings.is_hover) self.toggle($(this));
|
||||
})
|
||||
.on('mouseleave', '[data-dropdown-content]', function (e) {
|
||||
var target = $('[data-dropdown="' + $(this).attr('id') + '"]'),
|
||||
settings = $.extend({}, self.settings, self.data_options(target));
|
||||
if (settings.is_hover) self.close.call(self, $(this));
|
||||
})
|
||||
.on('opened.fndtn.dropdown', '[data-dropdown-content]', this.settings.opened)
|
||||
.on('closed.fndtn.dropdown', '[data-dropdown-content]', this.settings.closed);
|
||||
|
||||
$(document).on('click.fndtn.dropdown', function (e) {
|
||||
var parent = $(e.target).closest('[data-dropdown-content]');
|
||||
|
||||
if ($(e.target).data('dropdown') || $(e.target).parent().data('dropdown')) {
|
||||
return;
|
||||
}
|
||||
if (!($(e.target).data('revealId')) &&
|
||||
(parent.length > 0 && ($(e.target).is('[data-dropdown-content]') ||
|
||||
$.contains(parent.first()[0], e.target)))) {
|
||||
e.stopPropagation();
|
||||
return;
|
||||
}
|
||||
|
||||
self.close.call(self, $('[data-dropdown-content]'));
|
||||
});
|
||||
|
||||
$(window).on('resize.fndtn.dropdown', self.throttle(function () {
|
||||
self.resize.call(self);
|
||||
}, 50)).trigger('resize');
|
||||
|
||||
this.settings.init = true;
|
||||
},
|
||||
|
||||
close: function (dropdown) {
|
||||
var self = this;
|
||||
dropdown.each(function () {
|
||||
if ($(this).hasClass(self.settings.activeClass)) {
|
||||
$(this)
|
||||
.css(Foundation.rtl ? 'right':'left', '-99999px')
|
||||
.removeClass(self.settings.activeClass);
|
||||
$(this).trigger('closed');
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
open: function (dropdown, target) {
|
||||
this
|
||||
.css(dropdown
|
||||
.addClass(this.settings.activeClass), target);
|
||||
dropdown.trigger('opened');
|
||||
},
|
||||
|
||||
toggle : function (target) {
|
||||
var dropdown = $('#' + target.data('dropdown'));
|
||||
if (dropdown.length === 0) {
|
||||
// No dropdown found, not continuing
|
||||
return;
|
||||
}
|
||||
|
||||
this.close.call(this, $('[data-dropdown-content]').not(dropdown));
|
||||
|
||||
if (dropdown.hasClass(this.settings.activeClass)) {
|
||||
this.close.call(this, dropdown);
|
||||
} else {
|
||||
this.close.call(this, $('[data-dropdown-content]'))
|
||||
this.open.call(this, dropdown, target);
|
||||
}
|
||||
},
|
||||
|
||||
resize : function () {
|
||||
var dropdown = $('[data-dropdown-content].open'),
|
||||
target = $("[data-dropdown='" + dropdown.attr('id') + "']");
|
||||
|
||||
if (dropdown.length && target.length) {
|
||||
this.css(dropdown, target);
|
||||
}
|
||||
},
|
||||
|
||||
css : function (dropdown, target) {
|
||||
var offset_parent = dropdown.offsetParent();
|
||||
// if (offset_parent.length > 0 && /body/i.test(dropdown.offsetParent()[0].nodeName)) {
|
||||
var position = target.offset();
|
||||
position.top -= offset_parent.offset().top;
|
||||
position.left -= offset_parent.offset().left;
|
||||
// } else {
|
||||
// var position = target.position();
|
||||
// }
|
||||
|
||||
if (this.small()) {
|
||||
dropdown.css({
|
||||
position : 'absolute',
|
||||
width: '95%',
|
||||
'max-width': 'none',
|
||||
top: position.top + this.outerHeight(target)
|
||||
});
|
||||
dropdown.css(Foundation.rtl ? 'right':'left', '2.5%');
|
||||
} else {
|
||||
if (!Foundation.rtl && $(window).width() > this.outerWidth(dropdown) + target.offset().left && !this.data_options(target).align_right) {
|
||||
var left = position.left;
|
||||
if (dropdown.hasClass('right')) {
|
||||
dropdown.removeClass('right');
|
||||
}
|
||||
} else {
|
||||
if (!dropdown.hasClass('right')) {
|
||||
dropdown.addClass('right');
|
||||
}
|
||||
var left = position.left - (this.outerWidth(dropdown) - this.outerWidth(target));
|
||||
}
|
||||
|
||||
dropdown.attr('style', '').css({
|
||||
position : 'absolute',
|
||||
top: position.top + this.outerHeight(target),
|
||||
left: left
|
||||
});
|
||||
}
|
||||
|
||||
return dropdown;
|
||||
},
|
||||
|
||||
small : function () {
|
||||
return $(window).width() < 768 || $('html').hasClass('lt-ie9');
|
||||
},
|
||||
|
||||
off: function () {
|
||||
$(this.scope).off('.fndtn.dropdown');
|
||||
$('html, body').off('.fndtn.dropdown');
|
||||
$(window).off('.fndtn.dropdown');
|
||||
$('[data-dropdown-content]').off('.fndtn.dropdown');
|
||||
this.settings.init = false;
|
||||
},
|
||||
|
||||
reflow : function () {}
|
||||
};
|
||||
}(Foundation.zj, this, this.document));
|
||||
@@ -0,0 +1 @@
|
||||
(function(c,b,a,d){Foundation.libs.dropdown={name:"dropdown",version:"4.3.2",settings:{activeClass:"open",is_hover:false,opened:function(){},closed:function(){}},init:function(f,g,e){this.scope=f||this.scope;Foundation.inherit(this,"throttle scrollLeft data_options");if(typeof g==="object"){c.extend(true,this.settings,g)}if(typeof g!=="string"){if(!this.settings.init){this.events()}return this.settings.init}else{return this[g].call(this,e)}},events:function(){var e=this;c(this.scope).on("click.fndtn.dropdown","[data-dropdown]",function(g){var f=c.extend({},e.settings,e.data_options(c(this)));g.preventDefault();if(!f.is_hover){e.toggle(c(this))}}).on("mouseenter","[data-dropdown]",function(g){var f=c.extend({},e.settings,e.data_options(c(this)));if(f.is_hover){e.toggle(c(this))}}).on("mouseleave","[data-dropdown-content]",function(h){var g=c('[data-dropdown="'+c(this).attr("id")+'"]'),f=c.extend({},e.settings,e.data_options(g));if(f.is_hover){e.close.call(e,c(this))}}).on("opened.fndtn.dropdown","[data-dropdown-content]",this.settings.opened).on("closed.fndtn.dropdown","[data-dropdown-content]",this.settings.closed);c(a).on("click.fndtn.dropdown",function(g){var f=c(g.target).closest("[data-dropdown-content]");if(c(g.target).data("dropdown")||c(g.target).parent().data("dropdown")){return}if(!(c(g.target).data("revealId"))&&(f.length>0&&(c(g.target).is("[data-dropdown-content]")||c.contains(f.first()[0],g.target)))){g.stopPropagation();return}e.close.call(e,c("[data-dropdown-content]"))});c(b).on("resize.fndtn.dropdown",e.throttle(function(){e.resize.call(e)},50)).trigger("resize");this.settings.init=true},close:function(f){var e=this;f.each(function(){if(c(this).hasClass(e.settings.activeClass)){c(this).css(Foundation.rtl?"right":"left","-99999px").removeClass(e.settings.activeClass);c(this).trigger("closed")}})},open:function(f,e){this.css(f.addClass(this.settings.activeClass),e);f.trigger("opened")},toggle:function(e){var f=c("#"+e.data("dropdown"));if(f.length===0){return}this.close.call(this,c("[data-dropdown-content]").not(f));if(f.hasClass(this.settings.activeClass)){this.close.call(this,f)}else{this.close.call(this,c("[data-dropdown-content]"));this.open.call(this,f,e)}},resize:function(){var f=c("[data-dropdown-content].open"),e=c("[data-dropdown='"+f.attr("id")+"']");if(f.length&&e.length){this.css(f,e)}},css:function(i,h){var f=i.offsetParent();var e=h.offset();e.top-=f.offset().top;e.left-=f.offset().left;if(this.small()){i.css({position:"absolute",width:"95%","max-width":"none",top:e.top+this.outerHeight(h)});i.css(Foundation.rtl?"right":"left","2.5%")}else{if(!Foundation.rtl&&c(b).width()>this.outerWidth(i)+h.offset().left&&!this.data_options(h).align_right){var g=e.left;if(i.hasClass("right")){i.removeClass("right")}}else{if(!i.hasClass("right")){i.addClass("right")}var g=e.left-(this.outerWidth(i)-this.outerWidth(h))}i.attr("style","").css({position:"absolute",top:e.top+this.outerHeight(h),left:g})}return i},small:function(){return c(b).width()<768||c("html").hasClass("lt-ie9")},off:function(){c(this.scope).off(".fndtn.dropdown");c("html, body").off(".fndtn.dropdown");c(b).off(".fndtn.dropdown");c("[data-dropdown-content]").off(".fndtn.dropdown");this.settings.init=false},reflow:function(){}}}(Foundation.zj,this,this.document));
|
||||
@@ -0,0 +1,556 @@
|
||||
(function ($, window, document, undefined) {
|
||||
'use strict';
|
||||
|
||||
Foundation.libs.forms = {
|
||||
name : 'forms',
|
||||
|
||||
version: '4.3.2',
|
||||
|
||||
cache: {},
|
||||
|
||||
settings: {
|
||||
disable_class: 'no-custom',
|
||||
last_combo : null
|
||||
},
|
||||
|
||||
init: function (scope, method, options) {
|
||||
|
||||
if (typeof method === 'object') {
|
||||
$.extend(true, this.settings, method);
|
||||
}
|
||||
|
||||
if (typeof method !== 'string') {
|
||||
if (!this.settings.init) {
|
||||
this.events();
|
||||
}
|
||||
|
||||
this.assemble();
|
||||
|
||||
return this.settings.init;
|
||||
} else {
|
||||
return this[method].call(this, options);
|
||||
}
|
||||
},
|
||||
|
||||
assemble: function () {
|
||||
|
||||
var forms = this;
|
||||
|
||||
$('form.custom input[type="radio"],[type="checkbox"]', $(this.scope))
|
||||
.not('[data-customforms="disabled"]')
|
||||
.not('.' + this.settings.disable_class)
|
||||
.each(function(idx, sel){
|
||||
forms.set_custom_markup(sel);
|
||||
})
|
||||
.change(function(){
|
||||
forms.set_custom_markup(this);
|
||||
});
|
||||
|
||||
$('form.custom select', $(this.scope))
|
||||
.not('[data-customforms="disabled"]')
|
||||
.not('.' + this.settings.disable_class)
|
||||
.not('[multiple=multiple]')
|
||||
.each(this.append_custom_select);
|
||||
},
|
||||
|
||||
events: function () {
|
||||
var self = this;
|
||||
|
||||
$(this.scope)
|
||||
.on('click.fndtn.forms', 'form.custom span.custom.checkbox', function (e) {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
self.toggle_checkbox($(this));
|
||||
})
|
||||
.on('click.fndtn.forms', 'form.custom span.custom.radio', function (e) {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
self.toggle_radio($(this));
|
||||
})
|
||||
.on('change.fndtn.forms', 'form.custom select', function (e, force_refresh) {
|
||||
if ($(this).is('[data-customforms="disabled"]')) return;
|
||||
self.refresh_custom_select($(this), force_refresh);
|
||||
})
|
||||
.on('click.fndtn.forms', 'form.custom label', function (e) {
|
||||
if ($(e.target).is('label')) {
|
||||
var $associatedElement = $('#' + self.escape($(this).attr('for'))).not('[data-customforms="disabled"]'),
|
||||
$customCheckbox,
|
||||
$customRadio;
|
||||
|
||||
if ($associatedElement.length !== 0) {
|
||||
if ($associatedElement.attr('type') === 'checkbox') {
|
||||
e.preventDefault();
|
||||
$customCheckbox = $(this).find('span.custom.checkbox');
|
||||
//the checkbox might be outside after the label or inside of another element
|
||||
if ($customCheckbox.length === 0) {
|
||||
$customCheckbox = $associatedElement.add(this).siblings('span.custom.checkbox').first();
|
||||
}
|
||||
self.toggle_checkbox($customCheckbox);
|
||||
} else if ($associatedElement.attr('type') === 'radio') {
|
||||
e.preventDefault();
|
||||
$customRadio = $(this).find('span.custom.radio');
|
||||
//the radio might be outside after the label or inside of another element
|
||||
if ($customRadio.length === 0) {
|
||||
$customRadio = $associatedElement.add(this).siblings('span.custom.radio').first();
|
||||
}
|
||||
self.toggle_radio($customRadio);
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
.on('mousedown.fndtn.forms', 'form.custom div.custom.dropdown', function () {
|
||||
return false;
|
||||
})
|
||||
.on('click.fndtn.forms', 'form.custom div.custom.dropdown a.current, form.custom div.custom.dropdown a.selector', function (e) {
|
||||
var $this = $(this),
|
||||
$dropdown = $this.closest('div.custom.dropdown'),
|
||||
$select = getFirstPrevSibling($dropdown, 'select');
|
||||
|
||||
// make sure other dropdowns close
|
||||
if (!$dropdown.hasClass('open')) $(self.scope).trigger('click');
|
||||
|
||||
e.preventDefault();
|
||||
if (false === $select.is(':disabled')) {
|
||||
$dropdown.toggleClass('open');
|
||||
|
||||
if ($dropdown.hasClass('open')) {
|
||||
$(self.scope).on('click.fndtn.forms.customdropdown', function () {
|
||||
$dropdown.removeClass('open');
|
||||
$(self.scope).off('.fndtn.forms.customdropdown');
|
||||
});
|
||||
} else {
|
||||
$(self.scope).on('.fndtn.forms.customdropdown');
|
||||
}
|
||||
return false;
|
||||
}
|
||||
})
|
||||
.on('click.fndtn.forms touchend.fndtn.forms', 'form.custom div.custom.dropdown li', function (e) {
|
||||
var $this = $(this),
|
||||
$customDropdown = $this.closest('div.custom.dropdown'),
|
||||
$select = getFirstPrevSibling($customDropdown, 'select'),
|
||||
selectedIndex = 0;
|
||||
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
|
||||
if (!$(this).hasClass('disabled')) {
|
||||
$('div.dropdown').not($customDropdown).removeClass('open');
|
||||
|
||||
var $oldThis = $this.closest('ul')
|
||||
.find('li.selected');
|
||||
$oldThis.removeClass('selected');
|
||||
|
||||
$this.addClass('selected');
|
||||
|
||||
$customDropdown.removeClass('open')
|
||||
.find('a.current')
|
||||
.text($this.text());
|
||||
|
||||
$this.closest('ul').find('li').each(function (index) {
|
||||
if ($this[0] === this) {
|
||||
selectedIndex = index;
|
||||
}
|
||||
});
|
||||
$select[0].selectedIndex = selectedIndex;
|
||||
|
||||
//store the old value in data
|
||||
$select.data('prevalue', $oldThis.html());
|
||||
|
||||
// Kick off full DOM change event
|
||||
if (typeof (document.createEvent) != 'undefined') {
|
||||
var event = document.createEvent('HTMLEvents');
|
||||
event.initEvent('change', true, true);
|
||||
$select[0].dispatchEvent(event);
|
||||
} else {
|
||||
$select[0].fireEvent('onchange'); // for IE
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
$(window).on('keydown', function (e) {
|
||||
var focus = document.activeElement,
|
||||
self = Foundation.libs.forms,
|
||||
dropdown = $('.custom.dropdown'),
|
||||
select = getFirstPrevSibling(dropdown, 'select'),
|
||||
inputs = $('input,select,textarea,button'); // Zepto-compatible jQuery(":input")
|
||||
|
||||
if (dropdown.length > 0 && dropdown.hasClass('open')) {
|
||||
e.preventDefault();
|
||||
|
||||
if (e.which === 9) {
|
||||
$(inputs[$(inputs).index(select) + 1]).focus();
|
||||
dropdown.removeClass('open');
|
||||
}
|
||||
|
||||
if (e.which === 13) {
|
||||
dropdown.find('li.selected').trigger('click');
|
||||
}
|
||||
|
||||
if (e.which === 27) {
|
||||
dropdown.removeClass('open');
|
||||
}
|
||||
|
||||
if (e.which >= 65 && e.which <= 90) {
|
||||
var next = self.go_to(dropdown, e.which),
|
||||
current = dropdown.find('li.selected');
|
||||
|
||||
if (next) {
|
||||
current.removeClass('selected');
|
||||
self.scrollTo(next.addClass('selected'), 300);
|
||||
}
|
||||
}
|
||||
|
||||
if (e.which === 38) {
|
||||
var current = dropdown.find('li.selected'),
|
||||
prev = current.prev(':not(.disabled)');
|
||||
|
||||
if (prev.length > 0) {
|
||||
prev.parent()[0].scrollTop = prev.parent().scrollTop() - self.outerHeight(prev);
|
||||
current.removeClass('selected');
|
||||
prev.addClass('selected');
|
||||
}
|
||||
} else if (e.which === 40) {
|
||||
var current = dropdown.find('li.selected'),
|
||||
next = current.next(':not(.disabled)');
|
||||
|
||||
if (next.length > 0) {
|
||||
next.parent()[0].scrollTop = next.parent().scrollTop() + self.outerHeight(next);
|
||||
current.removeClass('selected');
|
||||
next.addClass('selected');
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
$(window).on('keyup', function (e) {
|
||||
var focus = document.activeElement,
|
||||
dropdown = $('.custom.dropdown');
|
||||
|
||||
if (focus === dropdown.find('.current')[0]) {
|
||||
dropdown.find('.selector').focus().click();
|
||||
}
|
||||
});
|
||||
|
||||
this.settings.init = true;
|
||||
},
|
||||
|
||||
go_to: function (dropdown, character) {
|
||||
var lis = dropdown.find('li'),
|
||||
count = lis.length;
|
||||
|
||||
if (count > 0) {
|
||||
for (var i = 0; i < count; i++) {
|
||||
var first_letter = lis.eq(i).text().charAt(0).toLowerCase();
|
||||
if (first_letter === String.fromCharCode(character).toLowerCase()) return lis.eq(i);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
scrollTo: function (el, duration) {
|
||||
if (duration < 0) return;
|
||||
var parent = el.parent();
|
||||
var li_height = this.outerHeight(el);
|
||||
var difference = (li_height * (el.index())) - parent.scrollTop();
|
||||
var perTick = difference / duration * 10;
|
||||
|
||||
this.scrollToTimerCache = setTimeout(function () {
|
||||
if (!isNaN(parseInt(perTick, 10))) {
|
||||
parent[0].scrollTop = parent.scrollTop() + perTick;
|
||||
this.scrollTo(el, duration - 10);
|
||||
}
|
||||
}.bind(this), 10);
|
||||
},
|
||||
|
||||
set_custom_markup: function (sel) {
|
||||
var $this = $(sel),
|
||||
type = $this.attr('type'),
|
||||
$span = $this.next('span.custom.' + type);
|
||||
|
||||
if (!$this.parent().hasClass('switch')) {
|
||||
$this.addClass('hidden-field');
|
||||
}
|
||||
|
||||
if ($span.length === 0) {
|
||||
$span = $('<span class="custom ' + type + '"></span>').insertAfter($this);
|
||||
}
|
||||
|
||||
$span.toggleClass('checked', $this.is(':checked'));
|
||||
$span.toggleClass('disabled', $this.is(':disabled'));
|
||||
},
|
||||
|
||||
append_custom_select: function (idx, sel) {
|
||||
var self = Foundation.libs.forms,
|
||||
$this = $(sel),
|
||||
$customSelect = $this.next('div.custom.dropdown'),
|
||||
$customList = $customSelect.find('ul'),
|
||||
$selectCurrent = $customSelect.find(".current"),
|
||||
$selector = $customSelect.find(".selector"),
|
||||
$options = $this.find('option'),
|
||||
$selectedOption = $options.filter(':selected'),
|
||||
copyClasses = $this.attr('class') ? $this.attr('class').split(' ') : [],
|
||||
maxWidth = 0,
|
||||
liHtml = '',
|
||||
$listItems,
|
||||
$currentSelect = false;
|
||||
|
||||
if ($customSelect.length === 0) {
|
||||
var customSelectSize = $this.hasClass('small') ? 'small' : $this.hasClass('medium') ? 'medium' : $this.hasClass('large') ? 'large' : $this.hasClass('expand') ? 'expand' : '';
|
||||
|
||||
$customSelect = $('<div class="' + ['custom', 'dropdown', customSelectSize].concat(copyClasses).filter(function (item, idx, arr) {
|
||||
if (item === '') return false;
|
||||
return arr.indexOf(item) === idx;
|
||||
}).join(' ') + '"><a href="#" class="selector"></a><ul /></div>');
|
||||
|
||||
$selector = $customSelect.find(".selector");
|
||||
$customList = $customSelect.find("ul");
|
||||
|
||||
liHtml = $options.map(function () {
|
||||
var copyClasses = $(this).attr('class') ? $(this).attr('class') : '';
|
||||
return "<li class='" + copyClasses + "'>" + $(this).html() + "</li>";
|
||||
}).get().join('');
|
||||
|
||||
$customList.append(liHtml);
|
||||
|
||||
$currentSelect = $customSelect
|
||||
.prepend('<a href="#" class="current">' + ($selectedOption.html() || '') + '</a>')
|
||||
.find(".current");
|
||||
|
||||
$this.after($customSelect)
|
||||
.addClass('hidden-field');
|
||||
} else {
|
||||
liHtml = $options.map(function () {
|
||||
return "<li>" + $(this).html() + "</li>";
|
||||
})
|
||||
.get().join('');
|
||||
|
||||
$customList.html('')
|
||||
.append(liHtml);
|
||||
|
||||
} // endif $customSelect.length === 0
|
||||
|
||||
self.assign_id($this, $customSelect);
|
||||
$customSelect.toggleClass('disabled', $this.is(':disabled'));
|
||||
$listItems = $customList.find('li');
|
||||
|
||||
// cache list length
|
||||
self.cache[$customSelect.data('id')] = $listItems.length;
|
||||
|
||||
$options.each(function (index) {
|
||||
if (this.selected) {
|
||||
$listItems.eq(index).addClass('selected');
|
||||
|
||||
if ($currentSelect) {
|
||||
$currentSelect.html($(this).html());
|
||||
}
|
||||
}
|
||||
if ($(this).is(':disabled')) {
|
||||
$listItems.eq(index).addClass('disabled');
|
||||
}
|
||||
});
|
||||
|
||||
//
|
||||
// If we're not specifying a predetermined form size.
|
||||
//
|
||||
if (!$customSelect.is('.small, .medium, .large, .expand')) {
|
||||
|
||||
// ------------------------------------------------------------------------------------
|
||||
// This is a work-around for when elements are contained within hidden parents.
|
||||
// For example, when custom-form elements are inside of a hidden reveal modal.
|
||||
//
|
||||
// We need to display the current custom list element as well as hidden parent elements
|
||||
// in order to properly calculate the list item element's width property.
|
||||
// -------------------------------------------------------------------------------------
|
||||
|
||||
$customSelect.addClass('open');
|
||||
//
|
||||
// Quickly, display all parent elements.
|
||||
// This should help us calcualate the width of the list item's within the drop down.
|
||||
//
|
||||
var self = Foundation.libs.forms;
|
||||
self.hidden_fix.adjust($customList);
|
||||
|
||||
maxWidth = (self.outerWidth($listItems) > maxWidth) ? self.outerWidth($listItems) : maxWidth;
|
||||
|
||||
Foundation.libs.forms.hidden_fix.reset();
|
||||
|
||||
$customSelect.removeClass('open');
|
||||
|
||||
} // endif
|
||||
|
||||
},
|
||||
|
||||
assign_id: function ($select, $customSelect) {
|
||||
var id = [+new Date(), Foundation.random_str(5)].join('-');
|
||||
$select.attr('data-id', id);
|
||||
$customSelect.attr('data-id', id);
|
||||
},
|
||||
|
||||
refresh_custom_select: function ($select, force_refresh) {
|
||||
var self = this;
|
||||
var maxWidth = 0,
|
||||
$customSelect = $select.next(),
|
||||
$options = $select.find('option'),
|
||||
$customList = $customSelect.find('ul'),
|
||||
$listItems = $customSelect.find('li');
|
||||
|
||||
if ($options.length !== this.cache[$customSelect.data('id')] || force_refresh) {
|
||||
$customList.html('');
|
||||
|
||||
// rebuild and re-populate all at once
|
||||
var customSelectHtml = '';
|
||||
$options.each(function () {
|
||||
var $this = $(this), thisHtml = $this.html(), thisSelected = this.selected;
|
||||
customSelectHtml += '<li class="' + (thisSelected ? ' selected ' : '') + ($this.is(':disabled') ? ' disabled ' : '') + '">' + thisHtml + '</li>';
|
||||
if (thisSelected) {
|
||||
$customSelect.find('.current').html(thisHtml);
|
||||
}
|
||||
});
|
||||
|
||||
$customList.html(customSelectHtml);
|
||||
|
||||
// fix width
|
||||
$customSelect.removeAttr('style');
|
||||
$customList.removeAttr('style');
|
||||
$customSelect.find('li').each(function () {
|
||||
$customSelect.addClass('open');
|
||||
if (self.outerWidth($(this)) > maxWidth) {
|
||||
maxWidth = self.outerWidth($(this));
|
||||
}
|
||||
$customSelect.removeClass('open');
|
||||
});
|
||||
|
||||
$listItems = $customSelect.find('li');
|
||||
// cache list length
|
||||
this.cache[$customSelect.data('id')] = $listItems.length;
|
||||
}
|
||||
},
|
||||
|
||||
refresh_custom_selection: function ($select) {
|
||||
var selectedValue = $('option:selected', $select).text();
|
||||
$('a.current', $select.next()).text(selectedValue);
|
||||
},
|
||||
|
||||
toggle_checkbox: function ($element) {
|
||||
var $input = $element.prev(),
|
||||
input = $input[0];
|
||||
|
||||
if (false === $input.is(':disabled')) {
|
||||
input.checked = ((input.checked) ? false : true);
|
||||
$element.toggleClass('checked');
|
||||
|
||||
$input.trigger('change');
|
||||
}
|
||||
},
|
||||
|
||||
toggle_radio: function ($element) {
|
||||
var $input = $element.prev(),
|
||||
$form = $input.closest('form.custom'),
|
||||
input = $input[0];
|
||||
|
||||
if (false === $input.is(':disabled')) {
|
||||
$form.find('input[type="radio"][name="' + this.escape($input.attr('name')) + '"]')
|
||||
.next().not($element).removeClass('checked');
|
||||
|
||||
if (!$element.hasClass('checked')) {
|
||||
$element.toggleClass('checked');
|
||||
}
|
||||
|
||||
input.checked = $element.hasClass('checked');
|
||||
|
||||
$input.trigger('change');
|
||||
}
|
||||
},
|
||||
|
||||
escape: function (text) {
|
||||
if (!text) return '';
|
||||
return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
|
||||
},
|
||||
|
||||
hidden_fix: {
|
||||
/**
|
||||
* Sets all hidden parent elements and self to visibile.
|
||||
*
|
||||
* @method adjust
|
||||
* @param {jQuery Object} $child
|
||||
*/
|
||||
|
||||
// We'll use this to temporarily store style properties.
|
||||
tmp: [],
|
||||
|
||||
// We'll use this to set hidden parent elements.
|
||||
hidden: null,
|
||||
|
||||
adjust: function ($child) {
|
||||
// Internal reference.
|
||||
var _self = this;
|
||||
|
||||
// Set all hidden parent elements, including this element.
|
||||
_self.hidden = $child.parents();
|
||||
_self.hidden = _self.hidden.add($child).filter(":hidden");
|
||||
|
||||
// Loop through all hidden elements.
|
||||
_self.hidden.each(function () {
|
||||
|
||||
// Cache the element.
|
||||
var $elem = $(this);
|
||||
|
||||
// Store the style attribute.
|
||||
// Undefined if element doesn't have a style attribute.
|
||||
_self.tmp.push($elem.attr('style'));
|
||||
|
||||
// Set the element's display property to block,
|
||||
// but ensure it's visibility is hidden.
|
||||
$elem.css({
|
||||
'visibility': 'hidden',
|
||||
'display': 'block'
|
||||
});
|
||||
});
|
||||
|
||||
}, // end adjust
|
||||
|
||||
/**
|
||||
* Resets the elements previous state.
|
||||
*
|
||||
* @method reset
|
||||
*/
|
||||
reset: function () {
|
||||
// Internal reference.
|
||||
var _self = this;
|
||||
// Loop through our hidden element collection.
|
||||
_self.hidden.each(function (i) {
|
||||
// Cache this element.
|
||||
var $elem = $(this),
|
||||
_tmp = _self.tmp[i]; // Get the stored 'style' value for this element.
|
||||
|
||||
// If the stored value is undefined.
|
||||
if (_tmp === undefined)
|
||||
// Remove the style attribute.
|
||||
$elem.removeAttr('style');
|
||||
else
|
||||
// Otherwise, reset the element style attribute.
|
||||
$elem.attr('style', _tmp);
|
||||
});
|
||||
// Reset the tmp array.
|
||||
_self.tmp = [];
|
||||
// Reset the hidden elements variable.
|
||||
_self.hidden = null;
|
||||
|
||||
} // end reset
|
||||
},
|
||||
|
||||
off: function () {
|
||||
$(this.scope).off('.fndtn.forms');
|
||||
},
|
||||
|
||||
reflow : function () {}
|
||||
};
|
||||
|
||||
var getFirstPrevSibling = function($el, selector) {
|
||||
var $el = $el.prev();
|
||||
while ($el.length) {
|
||||
if ($el.is(selector)) return $el;
|
||||
$el = $el.prev();
|
||||
}
|
||||
return $();
|
||||
};
|
||||
}(Foundation.zj, this, this.document));
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,280 @@
|
||||
/*jslint unparam: true, browser: true, indent: 2 */
|
||||
|
||||
;(function ($, window, document, undefined) {
|
||||
'use strict';
|
||||
|
||||
Foundation.libs.interchange = {
|
||||
name : 'interchange',
|
||||
|
||||
version : '4.2.4',
|
||||
|
||||
cache : {},
|
||||
|
||||
images_loaded : false,
|
||||
|
||||
settings : {
|
||||
load_attr : 'interchange',
|
||||
|
||||
named_queries : {
|
||||
'default' : 'only screen and (min-width: 1px)',
|
||||
small : 'only screen and (min-width: 768px)',
|
||||
medium : 'only screen and (min-width: 1280px)',
|
||||
large : 'only screen and (min-width: 1440px)',
|
||||
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) {
|
||||
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 el.trigger('replace', [el[0].src, orig_path]);
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
init : function (scope, method, options) {
|
||||
Foundation.inherit(this, 'throttle');
|
||||
|
||||
if (typeof method === 'object') {
|
||||
$.extend(true, this.settings, method);
|
||||
}
|
||||
|
||||
this.events();
|
||||
this.images();
|
||||
|
||||
if (typeof method !== 'string') {
|
||||
return this.settings.init;
|
||||
} else {
|
||||
return this[method].call(this, options);
|
||||
}
|
||||
},
|
||||
|
||||
events : function () {
|
||||
var self = this;
|
||||
|
||||
$(window).on('resize.fndtn.interchange', self.throttle(function () {
|
||||
self.resize.call(self);
|
||||
}, 50));
|
||||
},
|
||||
|
||||
resize : function () {
|
||||
var cache = this.cache;
|
||||
|
||||
if(!this.images_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]](passed.el, passed.scenario[0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
results : function (uuid, scenarios) {
|
||||
var count = scenarios.length;
|
||||
|
||||
if (count > 0) {
|
||||
var el = $('[data-uuid="' + uuid + '"]');
|
||||
|
||||
for (var i = count - 1; i >= 0; i--) {
|
||||
var mq, rule = scenarios[i][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[i]};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
},
|
||||
|
||||
images : function (force_update) {
|
||||
if (typeof this.cached_images === 'undefined' || force_update) {
|
||||
return this.update_images();
|
||||
}
|
||||
|
||||
return this.cached_images;
|
||||
},
|
||||
|
||||
update_images : function () {
|
||||
var images = document.getElementsByTagName('img'),
|
||||
count = images.length,
|
||||
loaded_count = 0,
|
||||
data_attr = 'data-' + this.settings.load_attr;
|
||||
|
||||
this.cached_images = [];
|
||||
this.images_loaded = false;
|
||||
|
||||
for (var i = count - 1; i >= 0; i--) {
|
||||
this.loaded($(images[i]), function (image) {
|
||||
loaded_count++;
|
||||
if (image) {
|
||||
var str = image.getAttribute(data_attr) || '';
|
||||
|
||||
if (str.length > 0) {
|
||||
this.cached_images.push(image);
|
||||
}
|
||||
}
|
||||
|
||||
if(loaded_count === count) {
|
||||
this.images_loaded = true;
|
||||
this.enhance();
|
||||
}
|
||||
}.bind(this));
|
||||
}
|
||||
|
||||
return 'deferred';
|
||||
},
|
||||
|
||||
// based on jquery.imageready.js
|
||||
// @weblinc, @jsantell, (c) 2012
|
||||
|
||||
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);
|
||||
}
|
||||
},
|
||||
|
||||
enhance : function () {
|
||||
var count = this.images().length;
|
||||
|
||||
for (var i = count - 1; i >= 0; i--) {
|
||||
this._object($(this.images()[i]));
|
||||
}
|
||||
|
||||
return $(window).trigger('resize');
|
||||
},
|
||||
|
||||
parse_params : function (path, directive, mq) {
|
||||
return [this.trim(path), this.convert_directive(directive), this.trim(mq)];
|
||||
},
|
||||
|
||||
convert_directive : function (directive) {
|
||||
var trimmed = this.trim(directive);
|
||||
|
||||
if (trimmed.length > 0) {
|
||||
return trimmed;
|
||||
}
|
||||
|
||||
return 'replace';
|
||||
},
|
||||
|
||||
_object : function(el) {
|
||||
var raw_arr = this.parse_data_attr(el),
|
||||
scenarios = [], count = raw_arr.length;
|
||||
|
||||
if (count > 0) {
|
||||
for (var i = count - 1; i >= 0; i--) {
|
||||
var split = raw_arr[i].split(/\((.*?)(\))$/);
|
||||
|
||||
if (split.length > 1) {
|
||||
var cached_split = split[0].split(','),
|
||||
params = this.parse_params(cached_split[0],
|
||||
cached_split[1], split[1]);
|
||||
|
||||
scenarios.push(params);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return this.store(el, scenarios);
|
||||
},
|
||||
|
||||
uuid : function (separator) {
|
||||
var delim = separator || "-";
|
||||
|
||||
function S4() {
|
||||
return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
|
||||
}
|
||||
|
||||
return (S4() + S4() + delim + S4() + delim + S4()
|
||||
+ delim + S4() + delim + S4() + S4() + S4());
|
||||
},
|
||||
|
||||
store : function (el, scenarios) {
|
||||
var uuid = this.uuid(),
|
||||
current_uuid = el.data('uuid');
|
||||
|
||||
if (current_uuid) return this.cache[current_uuid];
|
||||
|
||||
el.attr('data-uuid', uuid);
|
||||
|
||||
return this.cache[uuid] = scenarios;
|
||||
},
|
||||
|
||||
trim : function(str) {
|
||||
if (typeof str === 'string') {
|
||||
return $.trim(str);
|
||||
}
|
||||
|
||||
return str;
|
||||
},
|
||||
|
||||
parse_data_attr : function (el) {
|
||||
var raw = el.data(this.settings.load_attr).split(/\[(.*?)\]/),
|
||||
count = raw.length, output = [];
|
||||
|
||||
for (var i = count - 1; i >= 0; i--) {
|
||||
if (raw[i].replace(/[\W\d]+/, '').length > 4) {
|
||||
output.push(raw[i]);
|
||||
}
|
||||
}
|
||||
|
||||
return output;
|
||||
},
|
||||
|
||||
reflow : function () {
|
||||
this.images(true);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}(Foundation.zj, this, this.document));
|
||||
@@ -0,0 +1 @@
|
||||
(function(c,b,a,d){Foundation.libs.interchange={name:"interchange",version:"4.2.4",cache:{},images_loaded:false,settings:{load_attr:"interchange",named_queries:{"default":"only screen and (min-width: 1px)",small:"only screen and (min-width: 768px)",medium:"only screen and (min-width: 1280px)",large:"only screen and (min-width: 1440px)",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(f,g){if(/IMG/.test(f[0].nodeName)){var e=f[0].src;if(new RegExp(g,"i").test(e)){return}f[0].src=g;return f.trigger("replace",[f[0].src,e])}}}},init:function(f,g,e){Foundation.inherit(this,"throttle");if(typeof g==="object"){c.extend(true,this.settings,g)}this.events();this.images();if(typeof g!=="string"){return this.settings.init}else{return this[g].call(this,e)}},events:function(){var e=this;c(b).on("resize.fndtn.interchange",e.throttle(function(){e.resize.call(e)},50))},resize:function(){var e=this.cache;if(!this.images_loaded){setTimeout(c.proxy(this.resize,this),50);return}for(var f in e){if(e.hasOwnProperty(f)){var g=this.results(f,e[f]);if(g){this.settings.directives[g.scenario[1]](g.el,g.scenario[0])}}}},results:function(h,l){var j=l.length;if(j>0){var g=c('[data-uuid="'+h+'"]');for(var e=j-1;e>=0;e--){var f,k=l[e][2];if(this.settings.named_queries.hasOwnProperty(k)){f=matchMedia(this.settings.named_queries[k])}else{f=matchMedia(k)}if(f.matches){return{el:g,scenario:l[e]}}}}return false},images:function(e){if(typeof this.cached_images==="undefined"||e){return this.update_images()}return this.cached_images},update_images:function(){var e=a.getElementsByTagName("img"),j=e.length,h=0,g="data-"+this.settings.load_attr;this.cached_images=[];this.images_loaded=false;for(var f=j-1;f>=0;f--){this.loaded(c(e[f]),function(i){h++;if(i){var k=i.getAttribute(g)||"";if(k.length>0){this.cached_images.push(i)}}if(h===j){this.images_loaded=true;this.enhance()}}.bind(this))}return"deferred"},loaded:function(g,h){function e(){h(g[0])}function f(){this.one("load",e);if(/MSIE (\d+\.\d+);/.test(navigator.userAgent)){var j=this.attr("src"),i=j.match(/\?/)?"&":"?";i+="random="+(new Date()).getTime();this.attr("src",j+i)}}if(!g.attr("src")){e();return}if(g[0].complete||g[0].readyState===4){e()}else{f.call(g)}},enhance:function(){var f=this.images().length;for(var e=f-1;e>=0;e--){this._object(c(this.images()[e]))}return c(b).trigger("resize")},parse_params:function(f,g,e){return[this.trim(f),this.convert_directive(g),this.trim(e)]},convert_directive:function(f){var e=this.trim(f);if(e.length>0){return e}return"replace"},_object:function(h){var k=this.parse_data_attr(h),m=[],j=k.length;if(j>0){for(var g=j-1;g>=0;g--){var f=k[g].split(/\((.*?)(\))$/);if(f.length>1){var e=f[0].split(","),l=this.parse_params(e[0],e[1],f[1]);m.push(l)}}}return this.store(h,m)},uuid:function(f){var g=f||"-";function e(){return(((1+Math.random())*65536)|0).toString(16).substring(1)}return(e()+e()+g+e()+g+e()+g+e()+g+e()+e()+e())},store:function(f,h){var e=this.uuid(),g=f.data("uuid");if(g){return this.cache[g]}f.attr("data-uuid",e);return this.cache[e]=h},trim:function(e){if(typeof e==="string"){return c.trim(e)}return e},parse_data_attr:function(h){var f=h.data(this.settings.load_attr).split(/\[(.*?)\]/),j=f.length,e=[];for(var g=j-1;g>=0;g--){if(f[g].replace(/[\W\d]+/,"").length>4){e.push(f[g])}}return e},reflow:function(){this.images(true)}}}(Foundation.zj,this,this.document));
|
||||
@@ -0,0 +1,852 @@
|
||||
/*jslint unparam: true, browser: true, indent: 2 */
|
||||
|
||||
(function ($, window, document, undefined) {
|
||||
'use strict';
|
||||
|
||||
var Modernizr = Modernizr || false;
|
||||
|
||||
Foundation.libs.joyride = {
|
||||
name : 'joyride',
|
||||
|
||||
version : '4.3.2',
|
||||
|
||||
defaults : {
|
||||
expose : false, // turn on or off the expose feature
|
||||
modal : false, // Whether to cover page with modal during the tour
|
||||
tipLocation : 'bottom', // 'top' or 'bottom' in relation to parent
|
||||
nubPosition : 'auto', // override on a per tooltip bases
|
||||
scrollSpeed : 300, // Page scrolling speed in milliseconds, 0 = no scroll animation
|
||||
timer : 0, // 0 = no timer , all other numbers = timer in milliseconds
|
||||
startTimerOnClick : true, // true or false - true requires clicking the first button start the timer
|
||||
startOffset : 0, // the index of the tooltip you want to start on (index of the li)
|
||||
nextButton : true, // true or false to control whether a next button is used
|
||||
tipAnimation : 'fade', // 'pop' or 'fade' in each tip
|
||||
pauseAfter : [], // array of indexes where to pause the tour after
|
||||
exposed : [], // array of expose elements
|
||||
tipAnimationFadeSpeed: 300, // when tipAnimation = 'fade' this is speed in milliseconds for the transition
|
||||
cookieMonster : false, // true or false to control whether cookies are used
|
||||
cookieName : 'joyride', // Name the cookie you'll use
|
||||
cookieDomain : false, // Will this cookie be attached to a domain, ie. '.notableapp.com'
|
||||
cookieExpires : 365, // set when you would like the cookie to expire.
|
||||
tipContainer : 'body', // Where will the tip be attached
|
||||
postRideCallback : function (){}, // A method to call once the tour closes (canceled or complete)
|
||||
postStepCallback : function (){}, // A method to call after each step
|
||||
preStepCallback : function (){}, // A method to call before each step
|
||||
preRideCallback : function (){}, // A method to call before the tour starts (passed index, tip, and cloned exposed element)
|
||||
postExposeCallback : 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">×</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>',
|
||||
modal : '<div class="joyride-modal-bg"></div>',
|
||||
expose : '<div class="joyride-expose-wrapper"></div>',
|
||||
exposeCover: '<div class="joyride-expose-cover"></div>'
|
||||
},
|
||||
exposeAddClass : '' // One or more space-separated class names to be added to exposed element
|
||||
},
|
||||
|
||||
settings : {},
|
||||
|
||||
init : function (scope, method, options) {
|
||||
this.scope = scope || this.scope;
|
||||
Foundation.inherit(this, 'throttle data_options scrollTo scrollLeft delay');
|
||||
|
||||
if (typeof method === 'object') {
|
||||
$.extend(true, this.settings, this.defaults, method);
|
||||
} else {
|
||||
$.extend(true, this.settings, this.defaults, options);
|
||||
}
|
||||
|
||||
if (typeof method !== 'string') {
|
||||
if (!this.settings.init) this.events();
|
||||
|
||||
return this.settings.init;
|
||||
} else {
|
||||
return this[method].call(this, options);
|
||||
}
|
||||
},
|
||||
|
||||
events : function () {
|
||||
var self = this;
|
||||
|
||||
$(this.scope)
|
||||
.on('click.joyride', '.joyride-next-tip, .joyride-modal-bg', function (e) {
|
||||
e.preventDefault();
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
}.bind(this))
|
||||
|
||||
.on('click.joyride', '.joyride-close-tip', function (e) {
|
||||
e.preventDefault();
|
||||
this.end();
|
||||
}.bind(this));
|
||||
|
||||
$(window).on('resize.fndtn.joyride', self.throttle(function () {
|
||||
if ($('[data-joyride]').length > 0 && self.settings.$next_tip) {
|
||||
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, true);
|
||||
}
|
||||
}
|
||||
}, 100));
|
||||
|
||||
this.settings.init = true;
|
||||
},
|
||||
|
||||
start : function () {
|
||||
var self = this,
|
||||
$this = $(this.scope).find('[data-joyride]'),
|
||||
integer_settings = ['timer', 'scrollSpeed', 'startOffset', 'tipAnimationFadeSpeed', 'cookieExpires'],
|
||||
int_settings_count = integer_settings.length;
|
||||
|
||||
if (!this.settings.init) this.events();
|
||||
|
||||
// non configureable settings
|
||||
this.settings.$content_el = $this;
|
||||
this.settings.$body = $(this.settings.tipContainer);
|
||||
this.settings.body_offset = $(this.settings.tipContainer).position();
|
||||
this.settings.$tip_content = this.settings.$content_el.find('> li');
|
||||
this.settings.paused = false;
|
||||
this.settings.attempts = 0;
|
||||
|
||||
this.settings.tipLocationPatterns = {
|
||||
top: ['bottom'],
|
||||
bottom: [], // bottom should not need to be repositioned
|
||||
left: ['right', 'top', 'bottom'],
|
||||
right: ['left', 'top', 'bottom']
|
||||
};
|
||||
|
||||
// can we create cookies?
|
||||
if (typeof $.cookie !== 'function') {
|
||||
this.settings.cookieMonster = false;
|
||||
}
|
||||
|
||||
// generate the tips and insert into dom.
|
||||
if (!this.settings.cookieMonster || this.settings.cookieMonster && $.cookie(this.settings.cookieName) === null) {
|
||||
this.settings.$tip_content.each(function (index) {
|
||||
var $this = $(this);
|
||||
$.extend(true, self.settings, self.data_options($this));
|
||||
// Make sure that settings parsed from data_options are integers where necessary
|
||||
for (var i = int_settings_count - 1; i >= 0; 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.startTimerOnClick && 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.button_text(opts.button_text) +
|
||||
this.settings.template.link +
|
||||
this.timer_instance(opts.index);
|
||||
|
||||
$blank.append($(this.settings.template.wrapper));
|
||||
$blank.first().attr('data-index', opts.index);
|
||||
$('.joyride-content-wrapper', $blank).append(content);
|
||||
|
||||
return $blank[0];
|
||||
},
|
||||
|
||||
timer_instance : function (index) {
|
||||
var txt;
|
||||
|
||||
if ((index === 0 && this.settings.startTimerOnClick && this.settings.timer > 0) || this.settings.timer === 0) {
|
||||
txt = '';
|
||||
} else {
|
||||
txt = this.outerHTML($(this.settings.template.timer)[0]);
|
||||
}
|
||||
return txt;
|
||||
},
|
||||
|
||||
button_text : function (txt) {
|
||||
if (this.settings.nextButton) {
|
||||
txt = $.trim(txt) || 'Next';
|
||||
txt = this.outerHTML($(this.settings.template.button).append(txt)[0]);
|
||||
} else {
|
||||
txt = '';
|
||||
}
|
||||
return txt;
|
||||
},
|
||||
|
||||
create : function (opts) {
|
||||
var buttonText = opts.$li.attr('data-button') || opts.$li.attr('data-text'),
|
||||
tipClass = opts.$li.attr('class'),
|
||||
$tip_content = $(this.tip_template({
|
||||
tip_class : tipClass,
|
||||
index : opts.index,
|
||||
button_text : buttonText,
|
||||
li : opts.$li
|
||||
}));
|
||||
|
||||
$(this.settings.tipContainer).append($tip_content);
|
||||
},
|
||||
|
||||
show : function (init) {
|
||||
var $timer = null;
|
||||
|
||||
// are we paused?
|
||||
if (this.settings.$li === undefined
|
||||
|| ($.inArray(this.settings.$li.index(), this.settings.pauseAfter) === -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);
|
||||
}
|
||||
|
||||
this.settings.attempts = 0;
|
||||
|
||||
if (this.settings.$li.length && this.settings.$target.length > 0) {
|
||||
if (init) { //run when we first start
|
||||
this.settings.preRideCallback(this.settings.$li.index(), this.settings.$next_tip);
|
||||
if (this.settings.modal) {
|
||||
this.show_modal();
|
||||
}
|
||||
}
|
||||
|
||||
this.settings.preStepCallback(this.settings.$li.index(), this.settings.$next_tip);
|
||||
|
||||
if (this.settings.modal && this.settings.expose) {
|
||||
this.expose();
|
||||
}
|
||||
|
||||
this.settings.tipSettings = $.extend(this.settings, this.data_options(this.settings.$li));
|
||||
|
||||
this.settings.timer = parseInt(this.settings.timer, 10);
|
||||
|
||||
this.settings.tipSettings.tipLocationPattern = this.settings.tipLocationPatterns[this.settings.tipSettings.tipLocation];
|
||||
|
||||
// scroll if not modal
|
||||
if (!/body/i.test(this.settings.$target.selector)) {
|
||||
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.tipAnimation)) {
|
||||
|
||||
$timer.width(0);
|
||||
|
||||
if (this.settings.timer > 0) {
|
||||
|
||||
this.settings.$next_tip.show();
|
||||
|
||||
this.delay(function () {
|
||||
$timer.animate({
|
||||
width: $timer.parent().width()
|
||||
}, this.settings.timer, 'linear');
|
||||
}.bind(this), this.settings.tipAnimationFadeSpeed);
|
||||
|
||||
} else {
|
||||
this.settings.$next_tip.show();
|
||||
|
||||
}
|
||||
|
||||
|
||||
} else if (/fade/i.test(this.settings.tipAnimation)) {
|
||||
|
||||
$timer.width(0);
|
||||
|
||||
if (this.settings.timer > 0) {
|
||||
|
||||
this.settings.$next_tip
|
||||
.fadeIn(this.settings.tipAnimationFadeSpeed)
|
||||
.show();
|
||||
|
||||
this.delay(function () {
|
||||
$timer.animate({
|
||||
width: $timer.parent().width()
|
||||
}, this.settings.timer, 'linear');
|
||||
}.bind(this), this.settings.tipAnimationFadeSpeed);
|
||||
|
||||
} else {
|
||||
this.settings.$next_tip.fadeIn(this.settings.tipAnimationFadeSpeed);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
this.settings.$current_tip = this.settings.$next_tip;
|
||||
|
||||
// skip non-existant targets
|
||||
} else if (this.settings.$li && this.settings.$target.length < 1) {
|
||||
|
||||
this.show();
|
||||
|
||||
} else {
|
||||
|
||||
this.end();
|
||||
|
||||
}
|
||||
} else {
|
||||
|
||||
this.settings.paused = true;
|
||||
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
is_phone : function () {
|
||||
if (Modernizr) {
|
||||
return Modernizr.mq('only screen and (max-width: 767px)') || $('.lt-ie9').length > 0;
|
||||
}
|
||||
|
||||
return ($(window).width() < 767);
|
||||
},
|
||||
|
||||
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.postStepCallback(this.settings.$li.index(),
|
||||
this.settings.$current_tip);
|
||||
},
|
||||
|
||||
set_li : function (init) {
|
||||
if (init) {
|
||||
this.settings.$li = this.settings.$tip_content.eq(this.settings.startOffset);
|
||||
this.set_next_tip();
|
||||
this.settings.$current_tip = this.settings.$next_tip;
|
||||
} 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[data-index='" + this.settings.$li.index() + "']");
|
||||
this.settings.$next_tip.data('closed', '');
|
||||
},
|
||||
|
||||
set_target : function () {
|
||||
var cl = this.settings.$li.attr('data-class'),
|
||||
id = this.settings.$li.attr('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.outerHeight(this.settings.$next_tip));
|
||||
if (tipOffset > 0) {
|
||||
this.scrollTo($('html, body'), tipOffset, this.settings.scrollSpeed);
|
||||
}
|
||||
},
|
||||
|
||||
paused : function () {
|
||||
return ($.inArray((this.settings.$li.index() + 1), this.settings.pauseAfter) === -1);
|
||||
},
|
||||
|
||||
restart : function () {
|
||||
this.hide();
|
||||
this.settings.$li = undefined;
|
||||
this.show('init');
|
||||
},
|
||||
|
||||
pos_default : function (init, resizing) {
|
||||
var half_fold = Math.ceil($(window).height() / 2),
|
||||
tip_position = this.settings.$next_tip.offset(),
|
||||
$nub = this.settings.$next_tip.find('.joyride-nub'),
|
||||
nub_width = Math.ceil(this.outerWidth($nub) / 2),
|
||||
nub_height = Math.ceil(this.outerHeight($nub) / 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 (typeof resizing === 'undefined') {
|
||||
resizing = false;
|
||||
}
|
||||
|
||||
if (!/body/i.test(this.settings.$target.selector)) {
|
||||
|
||||
if (this.bottom()) {
|
||||
var leftOffset = this.settings.$target.offset().left;
|
||||
if (Foundation.rtl) {
|
||||
leftOffset = this.settings.$target.offset().width - this.settings.$next_tip.width() + leftOffset;
|
||||
}
|
||||
this.settings.$next_tip.css({
|
||||
top: (this.settings.$target.offset().top + nub_height + this.outerHeight(this.settings.$target)),
|
||||
left: leftOffset});
|
||||
|
||||
this.nub_position($nub, this.settings.tipSettings.nubPosition, 'top');
|
||||
|
||||
} else if (this.top()) {
|
||||
var leftOffset = this.settings.$target.offset().left;
|
||||
if (Foundation.rtl) {
|
||||
leftOffset = this.settings.$target.offset().width - this.settings.$next_tip.width() + leftOffset;
|
||||
}
|
||||
this.settings.$next_tip.css({
|
||||
top: (this.settings.$target.offset().top - this.outerHeight(this.settings.$next_tip) - nub_height),
|
||||
left: leftOffset});
|
||||
|
||||
this.nub_position($nub, this.settings.tipSettings.nubPosition, 'bottom');
|
||||
|
||||
} else if (this.right()) {
|
||||
|
||||
this.settings.$next_tip.css({
|
||||
top: this.settings.$target.offset().top,
|
||||
left: (this.outerWidth(this.settings.$target) + this.settings.$target.offset().left + nub_width)});
|
||||
|
||||
this.nub_position($nub, this.settings.tipSettings.nubPosition, 'left');
|
||||
|
||||
} else if (this.left()) {
|
||||
|
||||
this.settings.$next_tip.css({
|
||||
top: this.settings.$target.offset().top,
|
||||
left: (this.settings.$target.offset().left - this.outerWidth(this.settings.$next_tip) - nub_width)});
|
||||
|
||||
this.nub_position($nub, this.settings.tipSettings.nubPosition, 'right');
|
||||
|
||||
}
|
||||
|
||||
if (!this.visible(this.corners(this.settings.$next_tip)) && this.settings.attempts < this.settings.tipSettings.tipLocationPattern.length) {
|
||||
|
||||
$nub.removeClass('bottom')
|
||||
.removeClass('top')
|
||||
.removeClass('right')
|
||||
.removeClass('left');
|
||||
|
||||
this.settings.tipSettings.tipLocation = this.settings.tipSettings.tipLocationPattern[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.outerHeight(this.settings.$next_tip),
|
||||
tip_offset = this.settings.$next_tip.offset(),
|
||||
target_height = this.outerHeight(this.settings.$target),
|
||||
$nub = $('.joyride-nub', this.settings.$next_tip),
|
||||
nub_height = Math.ceil(this.outerHeight($nub) / 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) {
|
||||
$('body').append(this.settings.template.modal).show();
|
||||
}
|
||||
|
||||
if (/pop/i.test(this.settings.tipAnimation)) {
|
||||
joyridemodalbg.show();
|
||||
} else {
|
||||
joyridemodalbg.fadeIn(this.settings.tipAnimationFadeSpeed);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
expose : function () {
|
||||
var expose,
|
||||
exposeCover,
|
||||
el,
|
||||
origCSS,
|
||||
origClasses,
|
||||
randId = 'expose-'+Math.floor(Math.random()*10000);
|
||||
|
||||
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: this.outerWidth(el, true),
|
||||
height: this.outerHeight(el, true)
|
||||
});
|
||||
|
||||
exposeCover = $(this.settings.template.exposeCover);
|
||||
|
||||
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.exposeAddClass);
|
||||
|
||||
exposeCover.css({
|
||||
top: el.offset().top,
|
||||
left: el.offset().left,
|
||||
width: this.outerWidth(el, true),
|
||||
height: this.outerHeight(el, true)
|
||||
});
|
||||
|
||||
this.settings.$body.append(exposeCover);
|
||||
expose.addClass(randId);
|
||||
exposeCover.addClass(randId);
|
||||
el.data('expose', randId);
|
||||
this.settings.postExposeCallback(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, count;
|
||||
if (el instanceof $) {
|
||||
search = el[0]
|
||||
} else if (typeof el == 'string'){
|
||||
search = el;
|
||||
}
|
||||
|
||||
this.settings.exposed = this.settings.exposed || [];
|
||||
count = this.settings.exposed.length;
|
||||
|
||||
for (var i=0; i < count; 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.outerHeight(this.settings.$next_tip)) / 2) + $w.scrollTop()),
|
||||
left : ((($w.width() - this.outerWidth(this.settings.$next_tip)) / 2) + this.scrollLeft($w))
|
||||
});
|
||||
|
||||
return true;
|
||||
},
|
||||
|
||||
bottom : function () {
|
||||
return /bottom/i.test(this.settings.tipSettings.tipLocation);
|
||||
},
|
||||
|
||||
top : function () {
|
||||
return /top/i.test(this.settings.tipSettings.tipLocation);
|
||||
},
|
||||
|
||||
right : function () {
|
||||
return /right/i.test(this.settings.tipSettings.tipLocation);
|
||||
},
|
||||
|
||||
left : function () {
|
||||
return /left/i.test(this.settings.tipSettings.tipLocation);
|
||||
},
|
||||
|
||||
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() + this.scrollLeft(w),
|
||||
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(),
|
||||
this.scrollLeft(w) > 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 () {
|
||||
if (this.settings.cookieMonster) {
|
||||
$.cookie(this.settings.cookieName, 'ridden', { expires: this.settings.cookieExpires, domain: this.settings.cookieDomain });
|
||||
}
|
||||
|
||||
if (this.settings.timer > 0) {
|
||||
clearTimeout(this.settings.automate);
|
||||
}
|
||||
|
||||
if (this.settings.modal && this.settings.expose) {
|
||||
this.un_expose();
|
||||
}
|
||||
|
||||
this.settings.$next_tip.data('closed', true);
|
||||
|
||||
$('.joyride-modal-bg').hide();
|
||||
this.settings.$current_tip.hide();
|
||||
this.settings.postStepCallback(this.settings.$li.index(), this.settings.$current_tip);
|
||||
this.settings.postRideCallback(this.settings.$li.index(), this.settings.$current_tip);
|
||||
$('.joyride-tip-guide').remove();
|
||||
},
|
||||
|
||||
outerHTML : function (el) {
|
||||
// support FireFox < 11
|
||||
return el.outerHTML || new XMLSerializer().serializeToString(el);
|
||||
},
|
||||
|
||||
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 () {}
|
||||
};
|
||||
}(Foundation.zj, this, this.document));
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,464 @@
|
||||
/*
|
||||
* Foundation Responsive Library
|
||||
* http://foundation.zurb.com
|
||||
* Copyright 2013, ZURB
|
||||
* Free to use under the MIT license.
|
||||
* http://www.opensource.org/licenses/mit-license.php
|
||||
*/
|
||||
|
||||
/*jslint unparam: true, browser: true, indent: 2 */
|
||||
|
||||
// Accommodate running jQuery or Zepto in noConflict() mode by
|
||||
// using an anonymous function to redefine the $ shorthand name.
|
||||
// See http://docs.jquery.com/Using_jQuery_with_Other_Libraries
|
||||
// and http://zeptojs.com/
|
||||
var libFuncName = null;
|
||||
|
||||
if (typeof jQuery === "undefined" &&
|
||||
typeof Zepto === "undefined" &&
|
||||
typeof $ === "function") {
|
||||
libFuncName = $;
|
||||
} else if (typeof jQuery === "function") {
|
||||
libFuncName = jQuery;
|
||||
} else if (typeof Zepto === "function") {
|
||||
libFuncName = Zepto;
|
||||
} else {
|
||||
throw new TypeError();
|
||||
}
|
||||
|
||||
(function ($, window, document, undefined) {
|
||||
'use strict';
|
||||
|
||||
/*
|
||||
matchMedia() polyfill - Test a CSS media
|
||||
type/query in JS. Authors & copyright (c) 2012:
|
||||
Scott Jehl, Paul Irish, Nicholas Zakas.
|
||||
Dual MIT/BSD license
|
||||
|
||||
https://github.com/paulirish/matchMedia.js
|
||||
*/
|
||||
|
||||
$('head').append('<meta class="foundation-mq-small">');
|
||||
$('head').append('<meta class="foundation-mq-medium">');
|
||||
$('head').append('<meta class="foundation-mq-large">');
|
||||
|
||||
window.matchMedia = window.matchMedia || (function( doc, undefined ) {
|
||||
|
||||
"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 = "­<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 ));
|
||||
|
||||
// add dusty browser stuff
|
||||
if (!Array.prototype.filter) {
|
||||
Array.prototype.filter = function(fun /*, thisp */) {
|
||||
"use strict";
|
||||
|
||||
if (this == null) {
|
||||
throw new TypeError();
|
||||
}
|
||||
|
||||
var t = Object(this),
|
||||
len = t.length >>> 0;
|
||||
if (typeof fun !== "function") {
|
||||
return;
|
||||
}
|
||||
|
||||
var res = [],
|
||||
thisp = arguments[1];
|
||||
for (var i = 0; i < len; i++) {
|
||||
if (i in t) {
|
||||
var val = t[i]; // in case fun mutates this
|
||||
if (fun && fun.call(thisp, val, i, t)) {
|
||||
res.push(val);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
}
|
||||
|
||||
if (!Function.prototype.bind) {
|
||||
Function.prototype.bind = function (oThis) {
|
||||
if (typeof this !== "function") {
|
||||
// closest thing possible to the ECMAScript 5 internal IsCallable function
|
||||
throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");
|
||||
}
|
||||
|
||||
var aArgs = Array.prototype.slice.call(arguments, 1),
|
||||
fToBind = this,
|
||||
fNOP = function () {},
|
||||
fBound = function () {
|
||||
return fToBind.apply(this instanceof fNOP && oThis
|
||||
? this
|
||||
: oThis,
|
||||
aArgs.concat(Array.prototype.slice.call(arguments)));
|
||||
};
|
||||
|
||||
fNOP.prototype = this.prototype;
|
||||
fBound.prototype = new fNOP();
|
||||
|
||||
return fBound;
|
||||
};
|
||||
}
|
||||
|
||||
if (!Array.prototype.indexOf) {
|
||||
Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {
|
||||
"use strict";
|
||||
if (this == null) {
|
||||
throw new TypeError();
|
||||
}
|
||||
var t = Object(this);
|
||||
var len = t.length >>> 0;
|
||||
if (len === 0) {
|
||||
return -1;
|
||||
}
|
||||
var n = 0;
|
||||
if (arguments.length > 1) {
|
||||
n = Number(arguments[1]);
|
||||
if (n != n) { // shortcut for verifying if it's NaN
|
||||
n = 0;
|
||||
} else if (n != 0 && n != Infinity && n != -Infinity) {
|
||||
n = (n > 0 || -1) * Math.floor(Math.abs(n));
|
||||
}
|
||||
}
|
||||
if (n >= len) {
|
||||
return -1;
|
||||
}
|
||||
var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);
|
||||
for (; k < len; k++) {
|
||||
if (k in t && t[k] === searchElement) {
|
||||
return k;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
// fake stop() for zepto.
|
||||
$.fn.stop = $.fn.stop || function() {
|
||||
return this;
|
||||
};
|
||||
|
||||
window.Foundation = {
|
||||
name : 'Foundation',
|
||||
|
||||
version : '4.3.2',
|
||||
|
||||
cache : {},
|
||||
|
||||
media_queries : {
|
||||
small : $('.foundation-mq-small').css('font-family').replace(/\'/g, ''),
|
||||
medium : $('.foundation-mq-medium').css('font-family').replace(/\'/g, ''),
|
||||
large : $('.foundation-mq-large').css('font-family').replace(/\'/g, '')
|
||||
},
|
||||
|
||||
stylesheet : $('<style></style>').appendTo('head')[0].sheet,
|
||||
|
||||
init : function (scope, libraries, method, options, response, /* internal */ nc) {
|
||||
var library_arr,
|
||||
args = [scope, method, options, response],
|
||||
responses = [],
|
||||
nc = nc || false;
|
||||
|
||||
// disable library error catching,
|
||||
// used for development only
|
||||
if (nc) this.nc = nc;
|
||||
|
||||
// check RTL
|
||||
this.rtl = /rtl/i.test($('html').attr('dir'));
|
||||
|
||||
// set foundation global scope
|
||||
this.scope = scope || this.scope;
|
||||
|
||||
if (libraries && typeof libraries === 'string' && !/reflow/i.test(libraries)) {
|
||||
if (/off/i.test(libraries)) return this.off();
|
||||
|
||||
library_arr = libraries.split(' ');
|
||||
|
||||
if (library_arr.length > 0) {
|
||||
for (var i = library_arr.length - 1; i >= 0; i--) {
|
||||
responses.push(this.init_lib(library_arr[i], args));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (/reflow/i.test(libraries)) args[1] = 'reflow';
|
||||
|
||||
for (var lib in this.libs) {
|
||||
responses.push(this.init_lib(lib, args));
|
||||
}
|
||||
}
|
||||
|
||||
// if first argument is callback, add to args
|
||||
if (typeof libraries === 'function') {
|
||||
args.unshift(libraries);
|
||||
}
|
||||
|
||||
return this.response_obj(responses, args);
|
||||
},
|
||||
|
||||
response_obj : function (response_arr, args) {
|
||||
for (var i = 0, len = args.length; i < len; i++) {
|
||||
if (typeof args[i] === 'function') {
|
||||
return args[i]({
|
||||
errors: response_arr.filter(function (s) {
|
||||
if (typeof s === 'string') return s;
|
||||
})
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return response_arr;
|
||||
},
|
||||
|
||||
init_lib : function (lib, args) {
|
||||
return this.trap(function () {
|
||||
if (this.libs.hasOwnProperty(lib)) {
|
||||
this.patch(this.libs[lib]);
|
||||
return this.libs[lib].init.apply(this.libs[lib], args);
|
||||
} else {
|
||||
return function () {};
|
||||
}
|
||||
}.bind(this), lib);
|
||||
},
|
||||
|
||||
trap : function (fun, lib) {
|
||||
if (!this.nc) {
|
||||
try {
|
||||
return fun();
|
||||
} catch (e) {
|
||||
return this.error({name: lib, message: 'could not be initialized', more: e.name + ' ' + e.message});
|
||||
}
|
||||
}
|
||||
|
||||
return fun();
|
||||
},
|
||||
|
||||
patch : function (lib) {
|
||||
this.fix_outer(lib);
|
||||
lib.scope = this.scope;
|
||||
lib.rtl = this.rtl;
|
||||
},
|
||||
|
||||
inherit : function (scope, methods) {
|
||||
var methods_arr = methods.split(' ');
|
||||
|
||||
for (var i = methods_arr.length - 1; i >= 0; i--) {
|
||||
if (this.lib_methods.hasOwnProperty(methods_arr[i])) {
|
||||
this.libs[scope.name][methods_arr[i]] = this.lib_methods[methods_arr[i]];
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
random_str : function (length) {
|
||||
var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');
|
||||
|
||||
if (!length) {
|
||||
length = Math.floor(Math.random() * chars.length);
|
||||
}
|
||||
|
||||
var str = '';
|
||||
for (var i = 0; i < length; i++) {
|
||||
str += chars[Math.floor(Math.random() * chars.length)];
|
||||
}
|
||||
return str;
|
||||
},
|
||||
|
||||
libs : {},
|
||||
|
||||
// methods that can be inherited in libraries
|
||||
lib_methods : {
|
||||
set_data : function (node, data) {
|
||||
// this.name references the name of the library calling this method
|
||||
var id = [this.name,+new Date(),Foundation.random_str(5)].join('-');
|
||||
|
||||
Foundation.cache[id] = data;
|
||||
node.attr('data-' + this.name + '-id', id);
|
||||
return data;
|
||||
},
|
||||
|
||||
get_data : function (node) {
|
||||
return Foundation.cache[node.attr('data-' + this.name + '-id')];
|
||||
},
|
||||
|
||||
remove_data : function (node) {
|
||||
if (node) {
|
||||
delete Foundation.cache[node.attr('data-' + this.name + '-id')];
|
||||
node.attr('data-' + this.name + '-id', '');
|
||||
} else {
|
||||
$('[data-' + this.name + '-id]').each(function () {
|
||||
delete Foundation.cache[$(this).attr('data-' + this.name + '-id')];
|
||||
$(this).attr('data-' + this.name + '-id', '');
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
throttle : function(fun, delay) {
|
||||
var timer = null;
|
||||
return function () {
|
||||
var context = this, args = arguments;
|
||||
clearTimeout(timer);
|
||||
timer = setTimeout(function () {
|
||||
fun.apply(context, args);
|
||||
}, delay);
|
||||
};
|
||||
},
|
||||
|
||||
// parses data-options attribute on nodes and turns
|
||||
// them into an object
|
||||
data_options : function (el) {
|
||||
var opts = {}, ii, p,
|
||||
opts_arr = (el.attr('data-options') || ':').split(';'),
|
||||
opts_len = 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;
|
||||
}
|
||||
|
||||
// parse options
|
||||
for (ii = opts_len - 1; ii >= 0; ii--) {
|
||||
p = opts_arr[ii].split(':');
|
||||
|
||||
if (/true/i.test(p[1])) p[1] = true;
|
||||
if (/false/i.test(p[1])) p[1] = false;
|
||||
if (isNumber(p[1])) p[1] = parseInt(p[1], 10);
|
||||
|
||||
if (p.length === 2 && p[0].length > 0) {
|
||||
opts[trim(p[0])] = trim(p[1]);
|
||||
}
|
||||
}
|
||||
|
||||
return opts;
|
||||
},
|
||||
|
||||
delay : function (fun, delay) {
|
||||
return setTimeout(fun, delay);
|
||||
},
|
||||
|
||||
// animated scrolling
|
||||
scrollTo : function (el, to, duration) {
|
||||
if (duration < 0) return;
|
||||
var difference = to - $(window).scrollTop();
|
||||
var perTick = difference / duration * 10;
|
||||
|
||||
this.scrollToTimerCache = setTimeout(function() {
|
||||
if (!isNaN(parseInt(perTick, 10))) {
|
||||
window.scrollTo(0, $(window).scrollTop() + perTick);
|
||||
this.scrollTo(el, to, duration - 10);
|
||||
}
|
||||
}.bind(this), 10);
|
||||
},
|
||||
|
||||
// not supported in core Zepto
|
||||
scrollLeft : function (el) {
|
||||
if (!el.length) return;
|
||||
return ('scrollLeft' in el[0]) ? el[0].scrollLeft : el[0].pageXOffset;
|
||||
},
|
||||
|
||||
// test for empty object or array
|
||||
empty : function (obj) {
|
||||
if (obj.length && obj.length > 0) return false;
|
||||
if (obj.length && obj.length === 0) return true;
|
||||
|
||||
for (var key in obj) {
|
||||
if (hasOwnProperty.call(obj, key)) return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
},
|
||||
|
||||
addCustomRule : function(rule, media) {
|
||||
if(media === undefined) {
|
||||
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 + ' }');
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
fix_outer : function (lib) {
|
||||
lib.outerHeight = function (el, bool) {
|
||||
if (typeof Zepto === 'function') {
|
||||
return el.height();
|
||||
}
|
||||
|
||||
if (typeof bool !== 'undefined') {
|
||||
return el.outerHeight(bool);
|
||||
}
|
||||
|
||||
return el.outerHeight();
|
||||
};
|
||||
|
||||
lib.outerWidth = function (el, bool) {
|
||||
if (typeof Zepto === 'function') {
|
||||
return el.width();
|
||||
}
|
||||
|
||||
if (typeof bool !== 'undefined') {
|
||||
return el.outerWidth(bool);
|
||||
}
|
||||
|
||||
return el.outerWidth();
|
||||
};
|
||||
},
|
||||
|
||||
error : function (error) {
|
||||
return error.name + ' ' + error.message + '; ' + error.more;
|
||||
},
|
||||
|
||||
// remove all foundation events.
|
||||
off: function () {
|
||||
$(this.scope).off('.fndtn');
|
||||
$(window).off('.fndtn');
|
||||
return true;
|
||||
},
|
||||
|
||||
zj : $
|
||||
};
|
||||
|
||||
$.fn.foundation = function () {
|
||||
var args = Array.prototype.slice.call(arguments, 0);
|
||||
|
||||
return this.each(function () {
|
||||
Foundation.init.apply(Foundation, [this].concat(args));
|
||||
return this;
|
||||
});
|
||||
};
|
||||
|
||||
}(libFuncName, this, this.document));
|
||||
@@ -0,0 +1,136 @@
|
||||
/*jslint unparam: true, browser: true, indent: 2 */
|
||||
|
||||
;(function ($, window, document, undefined) {
|
||||
'use strict';
|
||||
|
||||
Foundation.libs.magellan = {
|
||||
name : 'magellan',
|
||||
|
||||
version : '4.3.2',
|
||||
|
||||
settings : {
|
||||
activeClass: 'active',
|
||||
threshold: 0
|
||||
},
|
||||
|
||||
init : function (scope, method, options) {
|
||||
this.scope = scope || this.scope;
|
||||
Foundation.inherit(this, 'data_options');
|
||||
|
||||
if (typeof method === 'object') {
|
||||
$.extend(true, this.settings, method);
|
||||
}
|
||||
|
||||
if (typeof method !== 'string') {
|
||||
if (!this.settings.init) {
|
||||
this.fixed_magellan = $("[data-magellan-expedition]");
|
||||
this.set_threshold();
|
||||
this.last_destination = $('[data-magellan-destination]').last();
|
||||
this.events();
|
||||
}
|
||||
|
||||
return this.settings.init;
|
||||
} else {
|
||||
return this[method].call(this, options);
|
||||
}
|
||||
},
|
||||
|
||||
events : function () {
|
||||
var self = this;
|
||||
$(this.scope).on('arrival.fndtn.magellan', '[data-magellan-arrival]', function (e) {
|
||||
var $destination = $(this),
|
||||
$expedition = $destination.closest('[data-magellan-expedition]'),
|
||||
activeClass = $expedition.attr('data-magellan-active-class')
|
||||
|| self.settings.activeClass;
|
||||
|
||||
$destination
|
||||
.closest('[data-magellan-expedition]')
|
||||
.find('[data-magellan-arrival]')
|
||||
.not($destination)
|
||||
.removeClass(activeClass);
|
||||
$destination.addClass(activeClass);
|
||||
});
|
||||
|
||||
this.fixed_magellan
|
||||
.on('update-position.fndtn.magellan', function(){
|
||||
var $el = $(this);
|
||||
// $el.data("magellan-fixed-position","");
|
||||
// $el.data("magellan-top-offset", "");
|
||||
})
|
||||
.trigger('update-position');
|
||||
|
||||
$(window)
|
||||
.on('resize.fndtn.magellan', function() {
|
||||
this.fixed_magellan.trigger('update-position');
|
||||
}.bind(this))
|
||||
|
||||
.on('scroll.fndtn.magellan', function() {
|
||||
var windowScrollTop = $(window).scrollTop();
|
||||
self.fixed_magellan.each(function() {
|
||||
var $expedition = $(this);
|
||||
if (typeof $expedition.data('magellan-top-offset') === 'undefined') {
|
||||
$expedition.data('magellan-top-offset', $expedition.offset().top);
|
||||
}
|
||||
if (typeof $expedition.data('magellan-fixed-position') === 'undefined') {
|
||||
$expedition.data('magellan-fixed-position', false)
|
||||
}
|
||||
var fixed_position = (windowScrollTop + self.settings.threshold) > $expedition.data("magellan-top-offset");
|
||||
var attr = $expedition.attr('data-magellan-top-offset');
|
||||
|
||||
if ($expedition.data("magellan-fixed-position") != fixed_position) {
|
||||
$expedition.data("magellan-fixed-position", fixed_position);
|
||||
if (fixed_position) {
|
||||
$expedition.addClass('fixed');
|
||||
$expedition.css({position:"fixed", top:0});
|
||||
} else {
|
||||
$expedition.removeClass('fixed');
|
||||
$expedition.css({position:"", top:""});
|
||||
}
|
||||
if (fixed_position && typeof attr != 'undefined' && attr != false) {
|
||||
$expedition.css({position:"fixed", top:attr + "px"});
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
if (this.last_destination.length > 0) {
|
||||
$(window).on('scroll.fndtn.magellan', function (e) {
|
||||
var windowScrollTop = $(window).scrollTop(),
|
||||
scrolltopPlusHeight = windowScrollTop + $(window).height(),
|
||||
lastDestinationTop = Math.ceil(self.last_destination.offset().top);
|
||||
|
||||
$('[data-magellan-destination]').each(function () {
|
||||
var $destination = $(this),
|
||||
destination_name = $destination.attr('data-magellan-destination'),
|
||||
topOffset = $destination.offset().top - windowScrollTop;
|
||||
|
||||
if (topOffset <= self.settings.threshold) {
|
||||
$("[data-magellan-arrival='" + destination_name + "']").trigger('arrival');
|
||||
}
|
||||
// In large screens we may hit the bottom of the page and dont reach the top of the last magellan-destination, so lets force it
|
||||
if (scrolltopPlusHeight >= $(self.scope).height() && lastDestinationTop > windowScrollTop && lastDestinationTop < scrolltopPlusHeight) {
|
||||
$('[data-magellan-arrival]').last().trigger('arrival');
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
this.settings.init = true;
|
||||
},
|
||||
|
||||
set_threshold : function () {
|
||||
if (typeof this.settings.threshold !== 'number') {
|
||||
this.settings.threshold = (this.fixed_magellan.length > 0) ?
|
||||
this.outerHeight(this.fixed_magellan, true) : 0;
|
||||
}
|
||||
},
|
||||
|
||||
off : function () {
|
||||
$(this.scope).off('.fndtn.magellan');
|
||||
$(window).off('.fndtn.magellan');
|
||||
},
|
||||
|
||||
reflow : function () {}
|
||||
};
|
||||
}(Foundation.zj, this, this.document));
|
||||
@@ -0,0 +1 @@
|
||||
(function(c,b,a,d){Foundation.libs.magellan={name:"magellan",version:"4.3.2",settings:{activeClass:"active",threshold:0},init:function(f,g,e){this.scope=f||this.scope;Foundation.inherit(this,"data_options");if(typeof g==="object"){c.extend(true,this.settings,g)}if(typeof g!=="string"){if(!this.settings.init){this.fixed_magellan=c("[data-magellan-expedition]");this.set_threshold();this.last_destination=c("[data-magellan-destination]").last();this.events()}return this.settings.init}else{return this[g].call(this,e)}},events:function(){var e=this;c(this.scope).on("arrival.fndtn.magellan","[data-magellan-arrival]",function(i){var g=c(this),h=g.closest("[data-magellan-expedition]"),f=h.attr("data-magellan-active-class")||e.settings.activeClass;g.closest("[data-magellan-expedition]").find("[data-magellan-arrival]").not(g).removeClass(f);g.addClass(f)});this.fixed_magellan.on("update-position.fndtn.magellan",function(){var f=c(this)}).trigger("update-position");c(b).on("resize.fndtn.magellan",function(){this.fixed_magellan.trigger("update-position")}.bind(this)).on("scroll.fndtn.magellan",function(){var f=c(b).scrollTop();e.fixed_magellan.each(function(){var h=c(this);if(typeof h.data("magellan-top-offset")==="undefined"){h.data("magellan-top-offset",h.offset().top)}if(typeof h.data("magellan-fixed-position")==="undefined"){h.data("magellan-fixed-position",false)}var i=(f+e.settings.threshold)>h.data("magellan-top-offset");var g=h.attr("data-magellan-top-offset");if(h.data("magellan-fixed-position")!=i){h.data("magellan-fixed-position",i);if(i){h.addClass("fixed");h.css({position:"fixed",top:0})}else{h.removeClass("fixed");h.css({position:"",top:""})}if(i&&typeof g!="undefined"&&g!=false){h.css({position:"fixed",top:g+"px"})}}})});if(this.last_destination.length>0){c(b).on("scroll.fndtn.magellan",function(h){var g=c(b).scrollTop(),f=g+c(b).height(),i=Math.ceil(e.last_destination.offset().top);c("[data-magellan-destination]").each(function(){var l=c(this),k=l.attr("data-magellan-destination"),j=l.offset().top-g;if(j<=e.settings.threshold){c("[data-magellan-arrival='"+k+"']").trigger("arrival")}if(f>=c(e.scope).height()&&i>g&&i<f){c("[data-magellan-arrival]").last().trigger("arrival")}})})}this.settings.init=true},set_threshold:function(){if(typeof this.settings.threshold!=="number"){this.settings.threshold=(this.fixed_magellan.length>0)?this.outerHeight(this.fixed_magellan,true):0}},off:function(){c(this.scope).off(".fndtn.magellan");c(b).off(".fndtn.magellan")},reflow:function(){}}}(Foundation.zj,this,this.document));
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,432 @@
|
||||
;(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;
|
||||
|
||||
slides_container.children().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(slides_container.children().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 = $('a[data-orbit-link="'+slides_container.children().eq(index).attr('data-orbit-slide')+'"]');
|
||||
link.parents('ul').find('[data-orbit-link]').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.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);
|
||||
slides_container.children().each(function(idx, el) {
|
||||
var bullet = $('<li>').attr('data-orbit-slide', idx);
|
||||
bullets_container.append(bullet);
|
||||
});
|
||||
}
|
||||
|
||||
if (settings.stack_on_small) {
|
||||
container.addClass(settings.stack_on_small_class);
|
||||
}
|
||||
|
||||
self.update_slide_number(0);
|
||||
self.update_active_link(0);
|
||||
};
|
||||
|
||||
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 = slides_container.children();
|
||||
|
||||
var dir = 'next';
|
||||
locked = true;
|
||||
if (next_idx < idx) {dir = 'prev';}
|
||||
if (next_idx >= slides.length) {next_idx = 0;}
|
||||
else if (next_idx < 0) {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('orbit:before-slide-change');
|
||||
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('orbit:after-slide-change',[{slide_number: idx, total_slides: slides.length}]);
|
||||
settings.after_slide_change(idx, slides.length);
|
||||
};
|
||||
if (slides_container.height() != next.height() && settings.variable_height) {
|
||||
slides_container.animate({'height': next.height()}, 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.height() > slides_container.height() && settings.variable_height) {
|
||||
slides_container.animate({'height': next.height()}, 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)) != "") {
|
||||
self._goto(parseInt(index));
|
||||
}
|
||||
}
|
||||
|
||||
self.timer_callback = function() {
|
||||
self._goto(idx + 1, true);
|
||||
}
|
||||
|
||||
self.compute_dimensions = function() {
|
||||
var current = $(slides_container.children().get(idx));
|
||||
var h = current.height();
|
||||
if (!settings.variable_height) {
|
||||
slides_container.children().each(function(){
|
||||
if ($(this).height() > h) { h = $(this).height(); }
|
||||
});
|
||||
}
|
||||
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(); 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);
|
||||
container.on('click', '[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('resize', self.compute_dimensions);
|
||||
$(window).on('load', self.compute_dimensions);
|
||||
$(window).on('load', function(){
|
||||
container.prev('.preloader').css('display', 'none');
|
||||
});
|
||||
slides_container.trigger('orbit:ready');
|
||||
};
|
||||
|
||||
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('orbit:timer-started')
|
||||
};
|
||||
|
||||
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('orbit:timer-stopped');
|
||||
};
|
||||
};
|
||||
|
||||
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) {
|
||||
next.animate(animMargin, duration, 'linear', function() {
|
||||
current.css(margin, '100%');
|
||||
callback();
|
||||
});
|
||||
};
|
||||
|
||||
this.prev = function(current, prev, callback) {
|
||||
prev.css(margin, '-100%');
|
||||
prev.animate(animMargin, duration, 'linear', 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: '4.3.2',
|
||||
|
||||
settings: {
|
||||
animation: 'slide',
|
||||
timer_speed: 10000,
|
||||
pause_on_hover: true,
|
||||
resume_on_mouseout: false,
|
||||
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',
|
||||
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,
|
||||
timer: true,
|
||||
variable_height: false,
|
||||
swipe: true,
|
||||
before_slide_change: noop,
|
||||
after_slide_change: noop
|
||||
},
|
||||
|
||||
init: function (scope, method, options) {
|
||||
var self = this;
|
||||
Foundation.inherit(self, 'data_options');
|
||||
|
||||
if (typeof method === 'object') {
|
||||
$.extend(true, self.settings, method);
|
||||
}
|
||||
|
||||
if ($(scope).is('[data-orbit]')) {
|
||||
var $el = $(scope);
|
||||
var opts = self.data_options($el);
|
||||
new Orbit($el, $.extend({},self.settings, opts));
|
||||
}
|
||||
|
||||
$('[data-orbit]', scope).each(function(idx, el) {
|
||||
var $el = $(el);
|
||||
var opts = self.data_options($el);
|
||||
new Orbit($el, $.extend({},self.settings, opts));
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
}(Foundation.zj, this, this.document));
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,426 @@
|
||||
/*
|
||||
* The MIT License
|
||||
*
|
||||
* Copyright (c) 2012 James Allardice
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
|
||||
// Defines the global Placeholders object along with various utility methods
|
||||
(function (global) {
|
||||
|
||||
"use strict";
|
||||
|
||||
// Cross-browser DOM event binding
|
||||
function addEventListener(elem, event, fn) {
|
||||
if (elem.addEventListener) {
|
||||
return elem.addEventListener(event, fn, false);
|
||||
}
|
||||
if (elem.attachEvent) {
|
||||
return elem.attachEvent("on" + event, fn);
|
||||
}
|
||||
}
|
||||
|
||||
// Check whether an item is in an array (we don't use Array.prototype.indexOf so we don't clobber any existing polyfills - this is a really simple alternative)
|
||||
function inArray(arr, item) {
|
||||
var i, len;
|
||||
for (i = 0, len = arr.length; i < len; i++) {
|
||||
if (arr[i] === item) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// Move the caret to the index position specified. Assumes that the element has focus
|
||||
function moveCaret(elem, index) {
|
||||
var range;
|
||||
if (elem.createTextRange) {
|
||||
range = elem.createTextRange();
|
||||
range.move("character", index);
|
||||
range.select();
|
||||
} else if (elem.selectionStart) {
|
||||
elem.focus();
|
||||
elem.setSelectionRange(index, index);
|
||||
}
|
||||
}
|
||||
|
||||
// Attempt to change the type property of an input element
|
||||
function changeType(elem, type) {
|
||||
try {
|
||||
elem.type = type;
|
||||
return true;
|
||||
} catch (e) {
|
||||
// You can't change input type in IE8 and below
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Expose public methods
|
||||
global.Placeholders = {
|
||||
Utils: {
|
||||
addEventListener: addEventListener,
|
||||
inArray: inArray,
|
||||
moveCaret: moveCaret,
|
||||
changeType: changeType
|
||||
}
|
||||
};
|
||||
|
||||
}(this));
|
||||
|
||||
(function (global) {
|
||||
|
||||
"use strict";
|
||||
|
||||
var validTypes = [
|
||||
"text",
|
||||
"search",
|
||||
"url",
|
||||
"tel",
|
||||
"email",
|
||||
"password",
|
||||
"number",
|
||||
"textarea"
|
||||
],
|
||||
|
||||
// The list of keycodes that are not allowed when the polyfill is configured to hide-on-input
|
||||
badKeys = [
|
||||
|
||||
// The following keys all cause the caret to jump to the end of the input value
|
||||
27, // Escape
|
||||
33, // Page up
|
||||
34, // Page down
|
||||
35, // End
|
||||
36, // Home
|
||||
|
||||
// Arrow keys allow you to move the caret manually, which should be prevented when the placeholder is visible
|
||||
37, // Left
|
||||
38, // Up
|
||||
39, // Right
|
||||
40, // Down
|
||||
|
||||
// The following keys allow you to modify the placeholder text by removing characters, which should be prevented when the placeholder is visible
|
||||
8, // Backspace
|
||||
46 // Delete
|
||||
],
|
||||
|
||||
// Styling variables
|
||||
placeholderStyleColor = "#ccc",
|
||||
placeholderClassName = "placeholdersjs",
|
||||
classNameRegExp = new RegExp("(?:^|\\s)" + placeholderClassName + "(?!\\S)"),
|
||||
|
||||
// These will hold references to all elements that can be affected. NodeList objects are live, so we only need to get those references once
|
||||
inputs, textareas,
|
||||
|
||||
// The various data-* attributes used by the polyfill
|
||||
ATTR_CURRENT_VAL = "data-placeholder-value",
|
||||
ATTR_ACTIVE = "data-placeholder-active",
|
||||
ATTR_INPUT_TYPE = "data-placeholder-type",
|
||||
ATTR_FORM_HANDLED = "data-placeholder-submit",
|
||||
ATTR_EVENTS_BOUND = "data-placeholder-bound",
|
||||
ATTR_OPTION_FOCUS = "data-placeholder-focus",
|
||||
ATTR_OPTION_LIVE = "data-placeholder-live",
|
||||
|
||||
// Various other variables used throughout the rest of the script
|
||||
test = document.createElement("input"),
|
||||
head = document.getElementsByTagName("head")[0],
|
||||
root = document.documentElement,
|
||||
Placeholders = global.Placeholders,
|
||||
Utils = Placeholders.Utils,
|
||||
hideOnInput, liveUpdates, keydownVal, styleElem, styleRules, placeholder, timer, form, elem, len, i;
|
||||
|
||||
// No-op (used in place of public methods when native support is detected)
|
||||
function noop() {}
|
||||
|
||||
// Hide the placeholder value on a single element. Returns true if the placeholder was hidden and false if it was not (because it wasn't visible in the first place)
|
||||
function hidePlaceholder(elem) {
|
||||
var type;
|
||||
if (elem.value === elem.getAttribute(ATTR_CURRENT_VAL) && elem.getAttribute(ATTR_ACTIVE) === "true") {
|
||||
elem.setAttribute(ATTR_ACTIVE, "false");
|
||||
elem.value = "";
|
||||
elem.className = elem.className.replace(classNameRegExp, "");
|
||||
|
||||
// If the polyfill has changed the type of the element we need to change it back
|
||||
type = elem.getAttribute(ATTR_INPUT_TYPE);
|
||||
if (type) {
|
||||
elem.type = type;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// Show the placeholder value on a single element. Returns true if the placeholder was shown and false if it was not (because it was already visible)
|
||||
function showPlaceholder(elem) {
|
||||
var type,
|
||||
val = elem.getAttribute(ATTR_CURRENT_VAL);
|
||||
if (elem.value === "" && val) {
|
||||
elem.setAttribute(ATTR_ACTIVE, "true");
|
||||
elem.value = val;
|
||||
elem.className += " " + placeholderClassName;
|
||||
|
||||
// If the type of element needs to change, change it (e.g. password inputs)
|
||||
type = elem.getAttribute(ATTR_INPUT_TYPE);
|
||||
if (type) {
|
||||
elem.type = "text";
|
||||
} else if (elem.type === "password") {
|
||||
if (Utils.changeType(elem, "text")) {
|
||||
elem.setAttribute(ATTR_INPUT_TYPE, "password");
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function handleElem(node, callback) {
|
||||
|
||||
var handleInputs, handleTextareas, elem, len, i;
|
||||
|
||||
// Check if the passed in node is an input/textarea (in which case it can't have any affected descendants)
|
||||
if (node && node.getAttribute(ATTR_CURRENT_VAL)) {
|
||||
callback(node);
|
||||
} else {
|
||||
|
||||
// If an element was passed in, get all affected descendants. Otherwise, get all affected elements in document
|
||||
handleInputs = node ? node.getElementsByTagName("input") : inputs;
|
||||
handleTextareas = node ? node.getElementsByTagName("textarea") : textareas;
|
||||
|
||||
// Run the callback for each element
|
||||
for (i = 0, len = handleInputs.length + handleTextareas.length; i < len; i++) {
|
||||
elem = i < handleInputs.length ? handleInputs[i] : handleTextareas[i - handleInputs.length];
|
||||
callback(elem);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Return all affected elements to their normal state (remove placeholder value if present)
|
||||
function disablePlaceholders(node) {
|
||||
handleElem(node, hidePlaceholder);
|
||||
}
|
||||
|
||||
// Show the placeholder value on all appropriate elements
|
||||
function enablePlaceholders(node) {
|
||||
handleElem(node, showPlaceholder);
|
||||
}
|
||||
|
||||
// Returns a function that is used as a focus event handler
|
||||
function makeFocusHandler(elem) {
|
||||
return function () {
|
||||
|
||||
// Only hide the placeholder value if the (default) hide-on-focus behaviour is enabled
|
||||
if (hideOnInput && elem.value === elem.getAttribute(ATTR_CURRENT_VAL) && elem.getAttribute(ATTR_ACTIVE) === "true") {
|
||||
|
||||
// Move the caret to the start of the input (this mimics the behaviour of all browsers that do not hide the placeholder on focus)
|
||||
Utils.moveCaret(elem, 0);
|
||||
|
||||
} else {
|
||||
|
||||
// Remove the placeholder
|
||||
hidePlaceholder(elem);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
// Returns a function that is used as a blur event handler
|
||||
function makeBlurHandler(elem) {
|
||||
return function () {
|
||||
showPlaceholder(elem);
|
||||
};
|
||||
}
|
||||
|
||||
// Functions that are used as a event handlers when the hide-on-input behaviour has been activated - very basic implementation of the "input" event
|
||||
function makeKeydownHandler(elem) {
|
||||
return function (e) {
|
||||
keydownVal = elem.value;
|
||||
|
||||
//Prevent the use of the arrow keys (try to keep the cursor before the placeholder)
|
||||
if (elem.getAttribute(ATTR_ACTIVE) === "true") {
|
||||
if (keydownVal === elem.getAttribute(ATTR_CURRENT_VAL) && Utils.inArray(badKeys, e.keyCode)) {
|
||||
if (e.preventDefault) {
|
||||
e.preventDefault();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
function makeKeyupHandler(elem) {
|
||||
return function () {
|
||||
var type;
|
||||
|
||||
if (elem.getAttribute(ATTR_ACTIVE) === "true" && elem.value !== keydownVal) {
|
||||
|
||||
// Remove the placeholder
|
||||
elem.className = elem.className.replace(classNameRegExp, "");
|
||||
elem.value = elem.value.replace(elem.getAttribute(ATTR_CURRENT_VAL), "");
|
||||
elem.setAttribute(ATTR_ACTIVE, false);
|
||||
|
||||
// If the type of element needs to change, change it (e.g. password inputs)
|
||||
type = elem.getAttribute(ATTR_INPUT_TYPE);
|
||||
if (type) {
|
||||
elem.type = type;
|
||||
}
|
||||
}
|
||||
|
||||
// If the element is now empty we need to show the placeholder
|
||||
if (elem.value === "") {
|
||||
elem.blur();
|
||||
Utils.moveCaret(elem, 0);
|
||||
}
|
||||
};
|
||||
}
|
||||
function makeClickHandler(elem) {
|
||||
return function () {
|
||||
if (elem === document.activeElement && elem.value === elem.getAttribute(ATTR_CURRENT_VAL) && elem.getAttribute(ATTR_ACTIVE) === "true") {
|
||||
Utils.moveCaret(elem, 0);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
// Returns a function that is used as a submit event handler on form elements that have children affected by this polyfill
|
||||
function makeSubmitHandler(form) {
|
||||
return function () {
|
||||
|
||||
// Turn off placeholders on all appropriate descendant elements
|
||||
disablePlaceholders(form);
|
||||
};
|
||||
}
|
||||
|
||||
// Bind event handlers to an element that we need to affect with the polyfill
|
||||
function newElement(elem) {
|
||||
|
||||
// If the element is part of a form, make sure the placeholder string is not submitted as a value
|
||||
if (elem.form) {
|
||||
form = elem.form;
|
||||
|
||||
// Set a flag on the form so we know it's been handled (forms can contain multiple inputs)
|
||||
if (!form.getAttribute(ATTR_FORM_HANDLED)) {
|
||||
Utils.addEventListener(form, "submit", makeSubmitHandler(form));
|
||||
form.setAttribute(ATTR_FORM_HANDLED, "true");
|
||||
}
|
||||
}
|
||||
|
||||
// Bind event handlers to the element so we can hide/show the placeholder as appropriate
|
||||
Utils.addEventListener(elem, "focus", makeFocusHandler(elem));
|
||||
Utils.addEventListener(elem, "blur", makeBlurHandler(elem));
|
||||
|
||||
// If the placeholder should hide on input rather than on focus we need additional event handlers
|
||||
if (hideOnInput) {
|
||||
Utils.addEventListener(elem, "keydown", makeKeydownHandler(elem));
|
||||
Utils.addEventListener(elem, "keyup", makeKeyupHandler(elem));
|
||||
Utils.addEventListener(elem, "click", makeClickHandler(elem));
|
||||
}
|
||||
|
||||
// Remember that we've bound event handlers to this element
|
||||
elem.setAttribute(ATTR_EVENTS_BOUND, "true");
|
||||
elem.setAttribute(ATTR_CURRENT_VAL, placeholder);
|
||||
|
||||
// If the element doesn't have a value, set it to the placeholder string
|
||||
showPlaceholder(elem);
|
||||
}
|
||||
|
||||
Placeholders.nativeSupport = test.placeholder !== void 0;
|
||||
|
||||
if (!Placeholders.nativeSupport) {
|
||||
|
||||
// Get references to all the input and textarea elements currently in the DOM (live NodeList objects to we only need to do this once)
|
||||
inputs = document.getElementsByTagName("input");
|
||||
textareas = document.getElementsByTagName("textarea");
|
||||
|
||||
// Get any settings declared as data-* attributes on the root element (currently the only options are whether to hide the placeholder on focus or input and whether to auto-update)
|
||||
hideOnInput = root.getAttribute(ATTR_OPTION_FOCUS) === "false";
|
||||
liveUpdates = root.getAttribute(ATTR_OPTION_LIVE) !== "false";
|
||||
|
||||
// Create style element for placeholder styles (instead of directly setting style properties on elements - allows for better flexibility alongside user-defined styles)
|
||||
styleElem = document.createElement("style");
|
||||
styleElem.type = "text/css";
|
||||
|
||||
// Create style rules as text node
|
||||
styleRules = document.createTextNode("." + placeholderClassName + " { color:" + placeholderStyleColor + "; }");
|
||||
|
||||
// Append style rules to newly created stylesheet
|
||||
if (styleElem.styleSheet) {
|
||||
styleElem.styleSheet.cssText = styleRules.nodeValue;
|
||||
} else {
|
||||
styleElem.appendChild(styleRules);
|
||||
}
|
||||
|
||||
// Prepend new style element to the head (before any existing stylesheets, so user-defined rules take precedence)
|
||||
head.insertBefore(styleElem, head.firstChild);
|
||||
|
||||
// Set up the placeholders
|
||||
for (i = 0, len = inputs.length + textareas.length; i < len; i++) {
|
||||
elem = i < inputs.length ? inputs[i] : textareas[i - inputs.length];
|
||||
|
||||
// Get the value of the placeholder attribute, if any. IE10 emulating IE7 fails with getAttribute, hence the use of the attributes node
|
||||
placeholder = elem.attributes.placeholder;
|
||||
if (placeholder) {
|
||||
|
||||
// IE returns an empty object instead of undefined if the attribute is not present
|
||||
placeholder = placeholder.nodeValue;
|
||||
|
||||
// Only apply the polyfill if this element is of a type that supports placeholders, and has a placeholder attribute with a non-empty value
|
||||
if (placeholder && Utils.inArray(validTypes, elem.type)) {
|
||||
newElement(elem);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// If enabled, the polyfill will repeatedly check for changed/added elements and apply to those as well
|
||||
timer = setInterval(function () {
|
||||
for (i = 0, len = inputs.length + textareas.length; i < len; i++) {
|
||||
elem = i < inputs.length ? inputs[i] : textareas[i - inputs.length];
|
||||
|
||||
// Only apply the polyfill if this element is of a type that supports placeholders, and has a placeholder attribute with a non-empty value
|
||||
placeholder = elem.attributes.placeholder;
|
||||
if (placeholder) {
|
||||
placeholder = placeholder.nodeValue;
|
||||
if (placeholder && Utils.inArray(validTypes, elem.type)) {
|
||||
|
||||
// If the element hasn't had event handlers bound to it then add them
|
||||
if (!elem.getAttribute(ATTR_EVENTS_BOUND)) {
|
||||
newElement(elem);
|
||||
}
|
||||
|
||||
// If the placeholder value has changed or not been initialised yet we need to update the display
|
||||
if (placeholder !== elem.getAttribute(ATTR_CURRENT_VAL) || (elem.type === "password" && !elem.getAttribute(ATTR_INPUT_TYPE))) {
|
||||
|
||||
// Attempt to change the type of password inputs (fails in IE < 9)
|
||||
if (elem.type === "password" && !elem.getAttribute(ATTR_INPUT_TYPE) && Utils.changeType(elem, "text")) {
|
||||
elem.setAttribute(ATTR_INPUT_TYPE, "password");
|
||||
}
|
||||
|
||||
// If the placeholder value has changed and the placeholder is currently on display we need to change it
|
||||
if (elem.value === elem.getAttribute(ATTR_CURRENT_VAL)) {
|
||||
elem.value = placeholder;
|
||||
}
|
||||
|
||||
// Keep a reference to the current placeholder value in case it changes via another script
|
||||
elem.setAttribute(ATTR_CURRENT_VAL, placeholder);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// If live updates are not enabled cancel the timer
|
||||
if (!liveUpdates) {
|
||||
clearInterval(timer);
|
||||
}
|
||||
}, 100);
|
||||
}
|
||||
|
||||
// Expose public methods
|
||||
Placeholders.disable = Placeholders.nativeSupport ? noop : disablePlaceholders;
|
||||
Placeholders.enable = Placeholders.nativeSupport ? noop : enablePlaceholders;
|
||||
|
||||
}(this));
|
||||
@@ -0,0 +1 @@
|
||||
(function(d){function e(h,g,f){if(h.addEventListener){return h.addEventListener(g,f,false)}if(h.attachEvent){return h.attachEvent("on"+g,f)}}function c(g,j){var h,f;for(h=0,f=g.length;h<f;h++){if(g[h]===j){return true}}return false}function b(h,g){var f;if(h.createTextRange){f=h.createTextRange();f.move("character",g);f.select()}else{if(h.selectionStart){h.focus();h.setSelectionRange(g,g)}}}function a(g,f){try{g.type=f;return true}catch(h){return false}}d.Placeholders={Utils:{addEventListener:e,inArray:c,moveCaret:b,changeType:a}}}(this));(function(c){var L=["text","search","url","tel","email","password","number","textarea"],t=[27,33,34,35,36,37,38,39,40,8,46],s="#ccc",I="placeholdersjs",y=new RegExp("(?:^|\\s)"+I+"(?!\\S)"),z,n,C="data-placeholder-value",N="data-placeholder-active",k="data-placeholder-type",A="data-placeholder-submit",o="data-placeholder-bound",h="data-placeholder-focus",P="data-placeholder-live",l=document.createElement("input"),r=document.getElementsByTagName("head")[0],D=document.documentElement,x=c.Placeholders,O=x.Utils,E,a,j,m,g,F,G,J,Q,u,R;function S(){}function q(T){var i;if(T.value===T.getAttribute(C)&&T.getAttribute(N)==="true"){T.setAttribute(N,"false");T.value="";T.className=T.className.replace(y,"");i=T.getAttribute(k);if(i){T.type=i}return true}return false}function M(T){var i,U=T.getAttribute(C);if(T.value===""&&U){T.setAttribute(N,"true");T.value=U;T.className+=" "+I;i=T.getAttribute(k);if(i){T.type="text"}else{if(T.type==="password"){if(O.changeType(T,"text")){T.setAttribute(k,"password")}}}return true}return false}function H(X,Z){var V,Y,W,T,U;if(X&&X.getAttribute(C)){Z(X)}else{V=X?X.getElementsByTagName("input"):z;Y=X?X.getElementsByTagName("textarea"):n;for(U=0,T=V.length+Y.length;U<T;U++){W=U<V.length?V[U]:Y[U-V.length];Z(W)}}}function B(i){H(i,q)}function f(i){H(i,M)}function b(i){return function(){if(E&&i.value===i.getAttribute(C)&&i.getAttribute(N)==="true"){O.moveCaret(i,0)}else{q(i)}}}function w(i){return function(){M(i)}}function e(i){return function(T){j=i.value;if(i.getAttribute(N)==="true"){if(j===i.getAttribute(C)&&O.inArray(t,T.keyCode)){if(T.preventDefault){T.preventDefault()}return false}}}}function K(i){return function(){var T;if(i.getAttribute(N)==="true"&&i.value!==j){i.className=i.className.replace(y,"");i.value=i.value.replace(i.getAttribute(C),"");i.setAttribute(N,false);T=i.getAttribute(k);if(T){i.type=T}}if(i.value===""){i.blur();O.moveCaret(i,0)}}}function d(i){return function(){if(i===document.activeElement&&i.value===i.getAttribute(C)&&i.getAttribute(N)==="true"){O.moveCaret(i,0)}}}function p(i){return function(){B(i)}}function v(i){if(i.form){J=i.form;if(!J.getAttribute(A)){O.addEventListener(J,"submit",p(J));J.setAttribute(A,"true")}}O.addEventListener(i,"focus",b(i));O.addEventListener(i,"blur",w(i));if(E){O.addEventListener(i,"keydown",e(i));O.addEventListener(i,"keyup",K(i));O.addEventListener(i,"click",d(i))}i.setAttribute(o,"true");i.setAttribute(C,F);M(i)}x.nativeSupport=l.placeholder!==void 0;if(!x.nativeSupport){z=document.getElementsByTagName("input");n=document.getElementsByTagName("textarea");E=D.getAttribute(h)==="false";a=D.getAttribute(P)!=="false";m=document.createElement("style");m.type="text/css";g=document.createTextNode("."+I+" { color:"+s+"; }");if(m.styleSheet){m.styleSheet.cssText=g.nodeValue}else{m.appendChild(g)}r.insertBefore(m,r.firstChild);for(R=0,u=z.length+n.length;R<u;R++){Q=R<z.length?z[R]:n[R-z.length];F=Q.attributes.placeholder;if(F){F=F.nodeValue;if(F&&O.inArray(L,Q.type)){v(Q)}}}G=setInterval(function(){for(R=0,u=z.length+n.length;R<u;R++){Q=R<z.length?z[R]:n[R-z.length];F=Q.attributes.placeholder;if(F){F=F.nodeValue;if(F&&O.inArray(L,Q.type)){if(!Q.getAttribute(o)){v(Q)}if(F!==Q.getAttribute(C)||(Q.type==="password"&&!Q.getAttribute(k))){if(Q.type==="password"&&!Q.getAttribute(k)&&O.changeType(Q,"text")){Q.setAttribute(k,"password")}if(Q.value===Q.getAttribute(C)){Q.value=F}Q.setAttribute(C,F)}}}}if(!a){clearInterval(G)}},100)}x.disable=x.nativeSupport?S:B;x.enable=x.nativeSupport?S:f}(this));
|
||||
@@ -0,0 +1,353 @@
|
||||
/*jslint unparam: true, browser: true, indent: 2 */
|
||||
|
||||
;(function ($, window, document, undefined) {
|
||||
'use strict';
|
||||
|
||||
Foundation.libs.reveal = {
|
||||
name : 'reveal',
|
||||
|
||||
version : '4.3.2',
|
||||
|
||||
locked : false,
|
||||
|
||||
settings : {
|
||||
animation: 'fadeAndPop',
|
||||
animationSpeed: 250,
|
||||
closeOnBackgroundClick: true,
|
||||
closeOnEsc: true,
|
||||
dismissModalClass: 'close-reveal-modal',
|
||||
bgClass: 'reveal-modal-bg',
|
||||
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) {
|
||||
Foundation.inherit(this, 'data_options delay');
|
||||
|
||||
if (typeof method === 'object') {
|
||||
$.extend(true, this.settings, method);
|
||||
} else if (typeof options !== 'undefined') {
|
||||
$.extend(true, this.settings, options);
|
||||
}
|
||||
|
||||
if (typeof method !== 'string') {
|
||||
this.events();
|
||||
|
||||
return this.settings.init;
|
||||
} else {
|
||||
return this[method].call(this, options);
|
||||
}
|
||||
},
|
||||
|
||||
events : function () {
|
||||
var self = this;
|
||||
|
||||
$(this.scope)
|
||||
.off('.fndtn.reveal')
|
||||
.on('click.fndtn.reveal', '[data-reveal-id]', function (e) {
|
||||
e.preventDefault();
|
||||
|
||||
if (!self.locked) {
|
||||
var element = $(this),
|
||||
ajax = element.data('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});
|
||||
}
|
||||
}
|
||||
})
|
||||
.on('click.fndtn.reveal touchend', this.close_targets(), function (e) {
|
||||
e.preventDefault();
|
||||
if (!self.locked) {
|
||||
var settings = $.extend({}, self.settings, self.data_options($('.reveal-modal.open'))),
|
||||
bgClicked = $(e.target)[0] === $('.' + settings.bgClass)[0];
|
||||
if (bgClicked && !settings.closeOnBackgroundClick) {
|
||||
return;
|
||||
}
|
||||
|
||||
self.locked = true;
|
||||
self.close.call(self, bgClicked ? $('.reveal-modal.open') : $(this).closest('.reveal-modal'));
|
||||
}
|
||||
});
|
||||
|
||||
if($(this.scope).hasClass('reveal-modal')) {
|
||||
$(this.scope)
|
||||
.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 {
|
||||
$(this.scope)
|
||||
.on('open.fndtn.reveal', '.reveal-modal', this.settings.open)
|
||||
.on('opened.fndtn.reveal', '.reveal-modal', this.settings.opened)
|
||||
.on('opened.fndtn.reveal', '.reveal-modal', this.open_video)
|
||||
.on('close.fndtn.reveal', '.reveal-modal', this.settings.close)
|
||||
.on('closed.fndtn.reveal', '.reveal-modal', this.settings.closed)
|
||||
.on('closed.fndtn.reveal', '.reveal-modal', this.close_video);
|
||||
}
|
||||
|
||||
$( 'body' ).bind( 'keyup.reveal', function ( event ) {
|
||||
var open_modal = $('.reveal-modal.open'),
|
||||
settings = $.extend({}, self.settings, self.data_options(open_modal));
|
||||
if ( event.which === 27 && settings.closeOnEsc) { // 27 is the keycode for the Escape key
|
||||
open_modal.foundation('reveal', 'close');
|
||||
}
|
||||
});
|
||||
|
||||
return true;
|
||||
},
|
||||
|
||||
open : function (target, ajax_settings) {
|
||||
if (target) {
|
||||
if (typeof target.selector !== 'undefined') {
|
||||
var modal = $('#' + target.data('reveal-id'));
|
||||
} else {
|
||||
var modal = $(this.scope);
|
||||
|
||||
ajax_settings = target;
|
||||
}
|
||||
} else {
|
||||
var modal = $(this.scope);
|
||||
}
|
||||
|
||||
if (!modal.hasClass('open')) {
|
||||
var open_modal = $('.reveal-modal.open');
|
||||
|
||||
if (typeof modal.data('css-top') === 'undefined') {
|
||||
modal.data('css-top', parseInt(modal.css('top'), 10))
|
||||
.data('offset', this.cache_offset(modal));
|
||||
}
|
||||
|
||||
modal.trigger('open');
|
||||
|
||||
if (open_modal.length < 1) {
|
||||
this.toggle_bg();
|
||||
}
|
||||
|
||||
if (typeof ajax_settings === 'undefined' || !ajax_settings.url) {
|
||||
this.hide(open_modal, this.settings.css.close);
|
||||
this.show(modal, this.settings.css.open);
|
||||
} else {
|
||||
var self = this,
|
||||
old_success = typeof ajax_settings.success !== 'undefined' ? ajax_settings.success : null;
|
||||
|
||||
$.extend(ajax_settings, {
|
||||
success: function (data, textStatus, jqXHR) {
|
||||
if ( $.isFunction(old_success) ) {
|
||||
old_success(data, textStatus, jqXHR);
|
||||
}
|
||||
|
||||
modal.html(data);
|
||||
$(modal).foundation('section', 'reflow');
|
||||
|
||||
self.hide(open_modal, self.settings.css.close);
|
||||
self.show(modal, self.settings.css.open);
|
||||
}
|
||||
});
|
||||
|
||||
$.ajax(ajax_settings);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
close : function (modal) {
|
||||
|
||||
var modal = modal && modal.length ? modal : $(this.scope),
|
||||
open_modals = $('.reveal-modal.open');
|
||||
|
||||
if (open_modals.length > 0) {
|
||||
this.locked = true;
|
||||
modal.trigger('close');
|
||||
this.toggle_bg();
|
||||
this.hide(open_modals, this.settings.css.close);
|
||||
}
|
||||
},
|
||||
|
||||
close_targets : function () {
|
||||
var base = '.' + this.settings.dismissModalClass;
|
||||
|
||||
if (this.settings.closeOnBackgroundClick) {
|
||||
return base + ', .' + this.settings.bgClass;
|
||||
}
|
||||
|
||||
return base;
|
||||
},
|
||||
|
||||
toggle_bg : function () {
|
||||
if ($('.' + this.settings.bgClass).length === 0) {
|
||||
this.settings.bg = $('<div />', {'class': this.settings.bgClass})
|
||||
.appendTo('body');
|
||||
}
|
||||
|
||||
if (this.settings.bg.filter(':visible').length > 0) {
|
||||
this.hide(this.settings.bg);
|
||||
} else {
|
||||
this.show(this.settings.bg);
|
||||
}
|
||||
},
|
||||
|
||||
show : function (el, css) {
|
||||
// is modal
|
||||
if (css) {
|
||||
if (el.parent('body').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('body');
|
||||
}
|
||||
|
||||
if (/pop/i.test(this.settings.animation)) {
|
||||
css.top = $(window).scrollTop() - el.data('offset') + 'px';
|
||||
var end_css = {
|
||||
top: $(window).scrollTop() + el.data('css-top') + 'px',
|
||||
opacity: 1
|
||||
};
|
||||
|
||||
return this.delay(function () {
|
||||
return el
|
||||
.css(css)
|
||||
.animate(end_css, this.settings.animationSpeed, 'linear', function () {
|
||||
this.locked = false;
|
||||
el.trigger('opened');
|
||||
}.bind(this))
|
||||
.addClass('open');
|
||||
}.bind(this), this.settings.animationSpeed / 2);
|
||||
}
|
||||
|
||||
if (/fade/i.test(this.settings.animation)) {
|
||||
var end_css = {opacity: 1};
|
||||
|
||||
return this.delay(function () {
|
||||
return el
|
||||
.css(css)
|
||||
.animate(end_css, this.settings.animationSpeed, 'linear', function () {
|
||||
this.locked = false;
|
||||
el.trigger('opened');
|
||||
}.bind(this))
|
||||
.addClass('open');
|
||||
}.bind(this), this.settings.animationSpeed / 2);
|
||||
}
|
||||
|
||||
return el.css(css).show().css({opacity: 1}).addClass('open').trigger('opened');
|
||||
}
|
||||
|
||||
// should we animate the background?
|
||||
if (/fade/i.test(this.settings.animation)) {
|
||||
return el.fadeIn(this.settings.animationSpeed / 2);
|
||||
}
|
||||
|
||||
return el.show();
|
||||
},
|
||||
|
||||
hide : function (el, css) {
|
||||
// is modal
|
||||
if (css) {
|
||||
if (/pop/i.test(this.settings.animation)) {
|
||||
var end_css = {
|
||||
top: - $(window).scrollTop() - el.data('offset') + 'px',
|
||||
opacity: 0
|
||||
};
|
||||
|
||||
return this.delay(function () {
|
||||
return el
|
||||
.animate(end_css, this.settings.animationSpeed, 'linear', function () {
|
||||
this.locked = false;
|
||||
el.css(css).trigger('closed');
|
||||
}.bind(this))
|
||||
.removeClass('open');
|
||||
}.bind(this), this.settings.animationSpeed / 2);
|
||||
}
|
||||
|
||||
if (/fade/i.test(this.settings.animation)) {
|
||||
var end_css = {opacity: 0};
|
||||
|
||||
return this.delay(function () {
|
||||
return el
|
||||
.animate(end_css, this.settings.animationSpeed, 'linear', function () {
|
||||
this.locked = false;
|
||||
el.css(css).trigger('closed');
|
||||
}.bind(this))
|
||||
.removeClass('open');
|
||||
}.bind(this), this.settings.animationSpeed / 2);
|
||||
}
|
||||
|
||||
return el.hide().css(css).removeClass('open').trigger('closed');
|
||||
}
|
||||
|
||||
// should we animate the background?
|
||||
if (/fade/i.test(this.settings.animation)) {
|
||||
return el.fadeOut(this.settings.animationSpeed / 2);
|
||||
}
|
||||
|
||||
return el.hide();
|
||||
},
|
||||
|
||||
close_video : function (e) {
|
||||
var video = $(this).find('.flex-video'),
|
||||
iframe = video.find('iframe');
|
||||
|
||||
if (iframe.length > 0) {
|
||||
iframe.attr('data-src', iframe[0].src);
|
||||
iframe.attr('src', 'about:blank');
|
||||
video.hide();
|
||||
}
|
||||
},
|
||||
|
||||
open_video : function (e) {
|
||||
var video = $(this).find('.flex-video'),
|
||||
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();
|
||||
}
|
||||
},
|
||||
|
||||
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 () {}
|
||||
};
|
||||
}(Foundation.zj, this, this.document));
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,430 @@
|
||||
/*jslint unparam: true, browser: true, indent: 2 */
|
||||
|
||||
;
|
||||
(function($, window, document) {
|
||||
'use strict';
|
||||
|
||||
Foundation.libs.section = {
|
||||
name : 'section',
|
||||
|
||||
version : '4.3.2',
|
||||
|
||||
settings: {
|
||||
deep_linking: false,
|
||||
small_breakpoint: 768,
|
||||
one_up: true,
|
||||
multi_expand: false,
|
||||
section_selector: '[data-section]',
|
||||
region_selector: 'section, .section, [data-section-region]',
|
||||
title_selector: '.title, [data-section-title]',
|
||||
//marker: container is resized
|
||||
resized_data_attr: 'data-section-resized',
|
||||
//marker: container should apply accordion style
|
||||
small_style_data_attr: 'data-section-small-style',
|
||||
content_selector: '.content, [data-section-content]',
|
||||
nav_selector: '[data-section="vertical-nav"], [data-section="horizontal-nav"]',
|
||||
active_class: 'active',
|
||||
callback: function() {}
|
||||
},
|
||||
|
||||
init: function(scope, method, options) {
|
||||
var self = this;
|
||||
Foundation.inherit(this, 'throttle data_options position_right offset_right');
|
||||
|
||||
if (typeof method === 'object') {
|
||||
$.extend(true, self.settings, method);
|
||||
}
|
||||
|
||||
if (typeof method !== 'string') {
|
||||
this.events();
|
||||
return true;
|
||||
} else {
|
||||
return this[method].call(this, options);
|
||||
}
|
||||
},
|
||||
|
||||
events: function() {
|
||||
var self = this;
|
||||
|
||||
//combine titles selector from settings for click event binding
|
||||
var click_title_selectors = [],
|
||||
section_selector = self.settings.section_selector,
|
||||
region_selectors = self.settings.region_selector.split(","),
|
||||
title_selectors = self.settings.title_selector.split(",");
|
||||
|
||||
for (var i = 0, len = region_selectors.length; i < len; i++) {
|
||||
var region_selector = region_selectors[i];
|
||||
|
||||
for (var j = 0, len1 = title_selectors.length; j < len1; j++) {
|
||||
var title_selector = section_selector + ">" + region_selector + ">" + title_selectors[j];
|
||||
|
||||
click_title_selectors.push(title_selector + " a"); //or we can not do preventDefault for click event of <a>
|
||||
click_title_selectors.push(title_selector);
|
||||
}
|
||||
}
|
||||
|
||||
$(self.scope)
|
||||
.on('click.fndtn.section', click_title_selectors.join(","), function(e) {
|
||||
var title = $(this).closest(self.settings.title_selector);
|
||||
|
||||
self.close_navs(title);
|
||||
if (title.siblings(self.settings.content_selector).length > 0) {
|
||||
self.toggle_active.call(title[0], e);
|
||||
}
|
||||
});
|
||||
|
||||
$(window)
|
||||
.on('resize.fndtn.section', self.throttle(function() { self.resize(); }, 30))
|
||||
.on('hashchange.fndtn.section', self.set_active_from_hash);
|
||||
|
||||
$(document).on('click.fndtn.section', function (e) {
|
||||
if (e.isPropagationStopped && e.isPropagationStopped()) return;
|
||||
if (e.target === document) return;
|
||||
self.close_navs($(e.target).closest(self.settings.title_selector));
|
||||
});
|
||||
|
||||
$(window).triggerHandler('resize.fndtn.section');
|
||||
$(window).triggerHandler('hashchange.fndtn.section');
|
||||
},
|
||||
|
||||
//close nav !one_up on click elsewhere
|
||||
close_navs: function(except_nav_with_title) {
|
||||
var self = Foundation.libs.section,
|
||||
navsToClose = $(self.settings.nav_selector)
|
||||
.filter(function() { return !$.extend({},
|
||||
self.settings, self.data_options($(this))).one_up; });
|
||||
|
||||
if (except_nav_with_title.length > 0) {
|
||||
var section = except_nav_with_title.parent().parent();
|
||||
|
||||
if (self.is_horizontal_nav(section) || self.is_vertical_nav(section)) {
|
||||
//exclude current nav from list
|
||||
navsToClose = navsToClose.filter(function() { return this !== section[0]; });
|
||||
}
|
||||
}
|
||||
//close navs on click on title
|
||||
navsToClose.children(self.settings.region_selector).removeClass(self.settings.active_class);
|
||||
},
|
||||
|
||||
toggle_active: function(e) {
|
||||
var $this = $(this),
|
||||
self = Foundation.libs.section,
|
||||
region = $this.parent(),
|
||||
content = $this.siblings(self.settings.content_selector),
|
||||
section = region.parent(),
|
||||
settings = $.extend({}, self.settings, self.data_options(section)),
|
||||
prev_active_region = section.children(self.settings.region_selector).filter("." + self.settings.active_class);
|
||||
|
||||
//for anchors inside [data-section-title]
|
||||
if (!settings.deep_linking && content.length > 0) {
|
||||
e.preventDefault();
|
||||
}
|
||||
|
||||
e.stopPropagation(); //do not catch same click again on parent
|
||||
|
||||
if (!region.hasClass(self.settings.active_class)) {
|
||||
if (!self.is_accordion(section) || (self.is_accordion(section) && !self.settings.multi_expand)) {
|
||||
prev_active_region.removeClass(self.settings.active_class);
|
||||
prev_active_region.trigger('closed.fndtn.section');
|
||||
}
|
||||
region.addClass(self.settings.active_class);
|
||||
//force resize for better performance (do not wait timer)
|
||||
self.resize(region.find(self.settings.section_selector).not("[" + self.settings.resized_data_attr + "]"), true);
|
||||
region.trigger('opened.fndtn.section');
|
||||
} else if (region.hasClass(self.settings.active_class) && self.is_accordion(section) || !settings.one_up && (self.small(section) || self.is_vertical_nav(section) || self.is_horizontal_nav(section) || self.is_accordion(section))) {
|
||||
region.removeClass(self.settings.active_class);
|
||||
region.trigger('closed.fndtn.section');
|
||||
}
|
||||
settings.callback(section);
|
||||
},
|
||||
|
||||
check_resize_timer: null,
|
||||
|
||||
//main function that sets title and content positions; runs for :not(.resized) and :visible once when window width is medium up
|
||||
//sections:
|
||||
// selected sections to resize, are defined on resize forced by visibility changes
|
||||
//ensure_has_active_region:
|
||||
// is true when we force resize for no resized sections that were hidden and became visible,
|
||||
// these sections can have no selected region, because all regions were hidden along with section on executing set_active_from_hash
|
||||
resize: function(sections, ensure_has_active_region) {
|
||||
|
||||
var self = Foundation.libs.section,
|
||||
section_container = $(self.settings.section_selector),
|
||||
is_small_window = self.small(section_container),
|
||||
//filter for section resize
|
||||
should_be_resized = function (section, now_is_hidden) {
|
||||
return !self.is_accordion(section) &&
|
||||
!section.is("[" + self.settings.resized_data_attr + "]") &&
|
||||
(!is_small_window || self.is_horizontal_tabs(section)) &&
|
||||
now_is_hidden === (section.css('display') === 'none' ||
|
||||
!section.parent().is(':visible'));
|
||||
};
|
||||
|
||||
sections = sections || $(self.settings.section_selector);
|
||||
|
||||
clearTimeout(self.check_resize_timer);
|
||||
|
||||
if (!is_small_window) {
|
||||
sections.removeAttr(self.settings.small_style_data_attr);
|
||||
}
|
||||
|
||||
//resize
|
||||
sections.filter(function() { return should_be_resized($(this), false); })
|
||||
.each(function() {
|
||||
var section = $(this),
|
||||
regions = section.children(self.settings.region_selector),
|
||||
titles = regions.children(self.settings.title_selector),
|
||||
content = regions.children(self.settings.content_selector),
|
||||
titles_max_height = 0;
|
||||
|
||||
if (ensure_has_active_region &&
|
||||
section.children(self.settings.region_selector).filter("." + self.settings.active_class).length == 0) {
|
||||
var settings = $.extend({}, self.settings, self.data_options(section));
|
||||
|
||||
if (!settings.deep_linking && (settings.one_up || !self.is_horizontal_nav(section) &&
|
||||
!self.is_vertical_nav(section) && !self.is_accordion(section))) {
|
||||
regions.filter(":visible").first().addClass(self.settings.active_class);
|
||||
}
|
||||
}
|
||||
|
||||
if (self.is_horizontal_tabs(section) || self.is_auto(section)) {
|
||||
// region: position relative
|
||||
// title: position absolute
|
||||
// content: position static
|
||||
var titles_sum_width = 0;
|
||||
|
||||
titles.each(function() {
|
||||
var title = $(this);
|
||||
|
||||
if (title.is(":visible")) {
|
||||
title.css(!self.rtl ? 'left' : 'right', titles_sum_width);
|
||||
var title_h_border_width = parseInt(title.css("border-" + (self.rtl ? 'left' : 'right') + "-width"), 10);
|
||||
|
||||
if (title_h_border_width.toString() === 'Nan') {
|
||||
title_h_border_width = 0;
|
||||
}
|
||||
|
||||
titles_sum_width += self.outerWidth(title) - title_h_border_width;
|
||||
titles_max_height = Math.max(titles_max_height, self.outerHeight(title));
|
||||
}
|
||||
});
|
||||
titles.css('height', titles_max_height);
|
||||
regions.each(function() {
|
||||
var region = $(this),
|
||||
region_content = region.children(self.settings.content_selector),
|
||||
content_top_border_width = parseInt(region_content.css("border-top-width"), 10);
|
||||
|
||||
if (content_top_border_width.toString() === 'Nan') {
|
||||
content_top_border_width = 0;
|
||||
}
|
||||
|
||||
region.css('padding-top', titles_max_height - content_top_border_width);
|
||||
});
|
||||
|
||||
section.css("min-height", titles_max_height);
|
||||
} else if (self.is_horizontal_nav(section)) {
|
||||
var first = true;
|
||||
// region: positon relative, float left
|
||||
// title: position static
|
||||
// content: position absolute
|
||||
titles.each(function() {
|
||||
titles_max_height = Math.max(titles_max_height, self.outerHeight($(this)));
|
||||
});
|
||||
|
||||
regions.each(function() {
|
||||
var region = $(this);
|
||||
|
||||
region.css("margin-left", "-" + (first ? section : region.children(self.settings.title_selector)).css("border-left-width"));
|
||||
first = false;
|
||||
});
|
||||
|
||||
regions.css("margin-top", "-" + section.css("border-top-width"));
|
||||
titles.css('height', titles_max_height);
|
||||
content.css('top', titles_max_height);
|
||||
section.css("min-height", titles_max_height);
|
||||
} else if (self.is_vertical_tabs(section)) {
|
||||
var titles_sum_height = 0;
|
||||
// region: position relative, for .active: fixed padding==title.width
|
||||
// title: fixed width, position absolute
|
||||
// content: position static
|
||||
titles.each(function() {
|
||||
var title = $(this);
|
||||
|
||||
if (title.is(":visible")) {
|
||||
title.css('top', titles_sum_height);
|
||||
var title_top_border_width = parseInt(title.css("border-top-width"), 10);
|
||||
|
||||
if (title_top_border_width.toString() === 'Nan') {
|
||||
title_top_border_width = 0;
|
||||
}
|
||||
|
||||
titles_sum_height += self.outerHeight(title) - title_top_border_width;
|
||||
}
|
||||
});
|
||||
|
||||
content.css('min-height', titles_sum_height + 1);
|
||||
} else if (self.is_vertical_nav(section)) {
|
||||
var titles_max_width = 0,
|
||||
first1 = true;
|
||||
// region: positon relative
|
||||
// title: position static
|
||||
// content: position absolute
|
||||
titles.each(function() {
|
||||
titles_max_width = Math.max(titles_max_width, self.outerWidth($(this)));
|
||||
});
|
||||
|
||||
regions.each(function () {
|
||||
var region = $(this);
|
||||
|
||||
region.css("margin-top", "-" + (first1 ? section : region.children(self.settings.title_selector)).css("border-top-width"));
|
||||
first1 = false;
|
||||
});
|
||||
|
||||
titles.css('width', titles_max_width);
|
||||
content.css(!self.rtl ? 'left' : 'right', titles_max_width);
|
||||
section.css('width', titles_max_width);
|
||||
}
|
||||
|
||||
section.attr(self.settings.resized_data_attr, true);
|
||||
});
|
||||
|
||||
//wait elements to become visible then resize
|
||||
if ($(self.settings.section_selector).filter(function() { return should_be_resized($(this), true); }).length > 0)
|
||||
self.check_resize_timer = setTimeout(function() {
|
||||
self.resize(sections.filter(function() { return should_be_resized($(this), false); }), true);
|
||||
}, 700);
|
||||
|
||||
if (is_small_window) {
|
||||
sections.attr(self.settings.small_style_data_attr, true);
|
||||
}
|
||||
},
|
||||
|
||||
is_vertical_nav: function(el) {
|
||||
return /vertical-nav/i.test(el.data('section'));
|
||||
},
|
||||
|
||||
is_horizontal_nav: function(el) {
|
||||
return /horizontal-nav/i.test(el.data('section'));
|
||||
},
|
||||
|
||||
is_accordion: function(el) {
|
||||
return /accordion/i.test(el.data('section'));
|
||||
},
|
||||
|
||||
is_horizontal_tabs: function(el) {
|
||||
return /^tabs$/i.test(el.data('section'));
|
||||
},
|
||||
|
||||
is_vertical_tabs: function(el) {
|
||||
return /vertical-tabs/i.test(el.data('section'));
|
||||
},
|
||||
|
||||
is_auto: function (el) {
|
||||
var data_section = el.data('section');
|
||||
return data_section === '' || /auto/i.test(data_section);
|
||||
},
|
||||
|
||||
set_active_from_hash: function() {
|
||||
var self = Foundation.libs.section,
|
||||
hash = window.location.hash.substring(1),
|
||||
sections = $(self.settings.section_selector);
|
||||
|
||||
var selectedSection;
|
||||
|
||||
sections.each(function() {
|
||||
var section = $(this),
|
||||
regions = section.children(self.settings.region_selector);
|
||||
regions.each(function() {
|
||||
var region = $(this),
|
||||
data_slug = region.children(self.settings.content_selector).data('slug');
|
||||
if (new RegExp(data_slug, 'i').test(hash)) {
|
||||
selectedSection=section;
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
if (selectedSection != null) {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
if (selectedSection != null) {
|
||||
sections.each(function() {
|
||||
if (selectedSection == $(this)) {
|
||||
var section = $(this),
|
||||
settings = $.extend({}, self.settings, self.data_options(section)),
|
||||
regions = section.children(self.settings.region_selector),
|
||||
set_active_from_hash = settings.deep_linking && hash.length > 0,
|
||||
selected = false;
|
||||
|
||||
regions.each(function() {
|
||||
var region = $(this);
|
||||
|
||||
if (selected) {
|
||||
region.removeClass(self.settings.active_class);
|
||||
} else if (set_active_from_hash) {
|
||||
var data_slug = region.children(self.settings.content_selector).data('slug');
|
||||
|
||||
if (data_slug && new RegExp(data_slug, 'i').test(hash)) {
|
||||
if (!region.hasClass(self.settings.active_class))
|
||||
region.addClass(self.settings.active_class);
|
||||
selected = true;
|
||||
} else {
|
||||
region.removeClass(self.settings.active_class);
|
||||
}
|
||||
} else if (region.hasClass(self.settings.active_class)) {
|
||||
selected = true;
|
||||
}
|
||||
});
|
||||
|
||||
if (!selected && (settings.one_up || !self.is_horizontal_nav(section) &&
|
||||
!self.is_vertical_nav(section) && !self.is_accordion(section)))
|
||||
regions.filter(":visible").first().addClass(self.settings.active_class);
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
reflow: function() {
|
||||
var self = Foundation.libs.section;
|
||||
|
||||
$(self.settings.section_selector).removeAttr(self.settings.resized_data_attr);
|
||||
self.throttle(function() { self.resize(); }, 30)();
|
||||
},
|
||||
|
||||
small: function(el) {
|
||||
var settings = $.extend({}, this.settings, this.data_options(el));
|
||||
|
||||
if (this.is_horizontal_tabs(el)) {
|
||||
return false;
|
||||
}
|
||||
if (el && this.is_accordion(el)) {
|
||||
return true;
|
||||
}
|
||||
if ($('html').hasClass('lt-ie9')) {
|
||||
return true;
|
||||
}
|
||||
if ($('html').hasClass('ie8compat')) {
|
||||
return true;
|
||||
}
|
||||
return $(this.scope).width() < settings.small_breakpoint;
|
||||
},
|
||||
|
||||
off: function() {
|
||||
$(this.scope).off('.fndtn.section');
|
||||
$(window).off('.fndtn.section');
|
||||
$(document).off('.fndtn.section');
|
||||
}
|
||||
};
|
||||
|
||||
//resize selected sections
|
||||
$.fn.reflow_section = function(ensure_has_active_region) {
|
||||
var section = this,
|
||||
self = Foundation.libs.section;
|
||||
|
||||
section.removeAttr(self.settings.resized_data_attr);
|
||||
self.throttle(function() { self.resize(section, ensure_has_active_region); }, 30)();
|
||||
return this;
|
||||
};
|
||||
|
||||
}(Foundation.zj, window, document));
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,209 @@
|
||||
/*jslint unparam: true, browser: true, indent: 2 */
|
||||
|
||||
;(function ($, window, document, undefined) {
|
||||
'use strict';
|
||||
|
||||
Foundation.libs.tooltips = {
|
||||
name : 'tooltips',
|
||||
|
||||
version : '4.3.2',
|
||||
|
||||
settings : {
|
||||
selector : '.has-tip',
|
||||
additionalInheritableClasses : [],
|
||||
tooltipClass : '.tooltip',
|
||||
touchCloseText: 'tap to close',
|
||||
appendTo: 'body',
|
||||
'disable-for-touch': false,
|
||||
tipTemplate : function (selector, content) {
|
||||
return '<span data-selector="' + selector + '" class="'
|
||||
+ Foundation.libs.tooltips.settings.tooltipClass.substring(1)
|
||||
+ '">' + content + '<span class="nub"></span></span>';
|
||||
}
|
||||
},
|
||||
|
||||
cache : {},
|
||||
|
||||
init : function (scope, method, options) {
|
||||
Foundation.inherit(this, 'data_options');
|
||||
var self = this;
|
||||
|
||||
if (typeof method === 'object') {
|
||||
$.extend(true, this.settings, method);
|
||||
} else if (typeof options !== 'undefined') {
|
||||
$.extend(true, this.settings, options);
|
||||
}
|
||||
|
||||
if (typeof method !== 'string') {
|
||||
if (Modernizr.touch) {
|
||||
$(this.scope)
|
||||
.on('click.fndtn.tooltip touchstart.fndtn.tooltip touchend.fndtn.tooltip',
|
||||
'[data-tooltip]', function (e) {
|
||||
var settings = $.extend({}, self.settings, self.data_options($(this)));
|
||||
if (!settings['disable-for-touch']) {
|
||||
e.preventDefault();
|
||||
$(settings.tooltipClass).hide();
|
||||
self.showOrCreateTip($(this));
|
||||
}
|
||||
})
|
||||
.on('click.fndtn.tooltip touchstart.fndtn.tooltip touchend.fndtn.tooltip',
|
||||
this.settings.tooltipClass, function (e) {
|
||||
e.preventDefault();
|
||||
$(this).fadeOut(150);
|
||||
});
|
||||
} else {
|
||||
$(this.scope)
|
||||
.on('mouseenter.fndtn.tooltip mouseleave.fndtn.tooltip',
|
||||
'[data-tooltip]', function (e) {
|
||||
var $this = $(this);
|
||||
|
||||
if (/enter|over/i.test(e.type)) {
|
||||
self.showOrCreateTip($this);
|
||||
} else if (e.type === 'mouseout' || e.type === 'mouseleave') {
|
||||
self.hide($this);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// $(this.scope).data('fndtn-tooltips', true);
|
||||
} else {
|
||||
return this[method].call(this, options);
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
showOrCreateTip : function ($target) {
|
||||
var $tip = this.getTip($target);
|
||||
|
||||
if ($tip && $tip.length > 0) {
|
||||
return this.show($target);
|
||||
}
|
||||
|
||||
return this.create($target);
|
||||
},
|
||||
|
||||
getTip : function ($target) {
|
||||
var selector = this.selector($target),
|
||||
tip = null;
|
||||
|
||||
if (selector) {
|
||||
tip = $('span[data-selector="' + selector + '"]' + this.settings.tooltipClass);
|
||||
}
|
||||
|
||||
return (typeof tip === 'object') ? tip : false;
|
||||
},
|
||||
|
||||
selector : function ($target) {
|
||||
var id = $target.attr('id'),
|
||||
dataSelector = $target.attr('data-tooltip') || $target.attr('data-selector');
|
||||
|
||||
if ((id && id.length < 1 || !id) && typeof dataSelector != 'string') {
|
||||
dataSelector = 'tooltip' + Math.random().toString(36).substring(7);
|
||||
$target.attr('data-selector', dataSelector);
|
||||
}
|
||||
|
||||
return (id && id.length > 0) ? id : dataSelector;
|
||||
},
|
||||
|
||||
create : function ($target) {
|
||||
var $tip = $(this.settings.tipTemplate(this.selector($target), $('<div></div>').html($target.attr('title')).html())),
|
||||
classes = this.inheritable_classes($target);
|
||||
|
||||
$tip.addClass(classes).appendTo(this.settings.appendTo);
|
||||
if (Modernizr.touch) {
|
||||
$tip.append('<span class="tap-to-close">'+this.settings.touchCloseText+'</span>');
|
||||
}
|
||||
$target.removeAttr('title').attr('title','');
|
||||
this.show($target);
|
||||
},
|
||||
|
||||
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 = this.outerHeight(nub);
|
||||
nubWidth = this.outerHeight(nub);
|
||||
|
||||
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',
|
||||
'width' : (width) ? width : 'auto'
|
||||
}).end();
|
||||
};
|
||||
|
||||
objPos(tip, (target.offset().top + this.outerHeight(target) + 10), 'auto', 'auto', target.offset().left, width);
|
||||
|
||||
if ($(window).width() < 767) {
|
||||
objPos(tip, (target.offset().top + this.outerHeight(target) + 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) {
|
||||
left = target.offset().left + target.offset().width - this.outerWidth(tip);
|
||||
}
|
||||
objPos(tip, (target.offset().top + this.outerHeight(target) + 10), 'auto', 'auto', left, width);
|
||||
tip.removeClass('tip-override');
|
||||
if (classes && classes.indexOf('tip-top') > -1) {
|
||||
objPos(tip, (target.offset().top - this.outerHeight(tip)), 'auto', 'auto', left, width)
|
||||
.removeClass('tip-override');
|
||||
} else if (classes && classes.indexOf('tip-left') > -1) {
|
||||
objPos(tip, (target.offset().top + (this.outerHeight(target) / 2) - nubHeight*2.5), 'auto', 'auto', (target.offset().left - this.outerWidth(tip) - nubHeight), width)
|
||||
.removeClass('tip-override');
|
||||
} else if (classes && classes.indexOf('tip-right') > -1) {
|
||||
objPos(tip, (target.offset().top + (this.outerHeight(target) / 2) - nubHeight*2.5), 'auto', 'auto', (target.offset().left + this.outerWidth(target) + nubHeight), width)
|
||||
.removeClass('tip-override');
|
||||
}
|
||||
}
|
||||
|
||||
tip.css('visibility', 'visible').hide();
|
||||
},
|
||||
|
||||
inheritable_classes : function (target) {
|
||||
var inheritables = ['tip-top', 'tip-left', 'tip-bottom', 'tip-right', 'noradius'].concat(this.settings.additionalInheritableClasses),
|
||||
classes = target.attr('class'),
|
||||
filtered = classes ? $.map(classes.split(' '), function (el, i) {
|
||||
if ($.inArray(el, inheritables) !== -1) {
|
||||
return el;
|
||||
}
|
||||
}).join(' ') : '';
|
||||
|
||||
return $.trim(filtered);
|
||||
},
|
||||
|
||||
show : function ($target) {
|
||||
var $tip = this.getTip($target);
|
||||
|
||||
this.reposition($target, $tip, $target.attr('class'));
|
||||
$tip.fadeIn(150);
|
||||
},
|
||||
|
||||
hide : function ($target) {
|
||||
var $tip = this.getTip($target);
|
||||
|
||||
$tip.fadeOut(150);
|
||||
},
|
||||
|
||||
// deprecate reload
|
||||
reload : function () {
|
||||
var $self = $(this);
|
||||
|
||||
return ($self.data('fndtn-tooltips')) ? $self.foundationTooltips('destroy').foundationTooltips('init') : $self.foundationTooltips('init');
|
||||
},
|
||||
|
||||
off : function () {
|
||||
$(this.scope).off('.fndtn.tooltip');
|
||||
$(this.settings.tooltipClass).each(function (i) {
|
||||
$('[data-tooltip]').get(i).attr('title', $(this).text());
|
||||
}).remove();
|
||||
},
|
||||
|
||||
reflow : function () {}
|
||||
};
|
||||
}(Foundation.zj, this, this.document));
|
||||
@@ -0,0 +1 @@
|
||||
(function(c,b,a,d){Foundation.libs.tooltips={name:"tooltips",version:"4.3.2",settings:{selector:".has-tip",additionalInheritableClasses:[],tooltipClass:".tooltip",touchCloseText:"tap to close",appendTo:"body","disable-for-touch":false,tipTemplate:function(e,f){return'<span data-selector="'+e+'" class="'+Foundation.libs.tooltips.settings.tooltipClass.substring(1)+'">'+f+'<span class="nub"></span></span>'}},cache:{},init:function(g,h,f){Foundation.inherit(this,"data_options");var e=this;if(typeof h==="object"){c.extend(true,this.settings,h)}else{if(typeof f!=="undefined"){c.extend(true,this.settings,f)}}if(typeof h!=="string"){if(Modernizr.touch){c(this.scope).on("click.fndtn.tooltip touchstart.fndtn.tooltip touchend.fndtn.tooltip","[data-tooltip]",function(j){var i=c.extend({},e.settings,e.data_options(c(this)));if(!i["disable-for-touch"]){j.preventDefault();c(i.tooltipClass).hide();e.showOrCreateTip(c(this))}}).on("click.fndtn.tooltip touchstart.fndtn.tooltip touchend.fndtn.tooltip",this.settings.tooltipClass,function(i){i.preventDefault();c(this).fadeOut(150)})}else{c(this.scope).on("mouseenter.fndtn.tooltip mouseleave.fndtn.tooltip","[data-tooltip]",function(j){var i=c(this);if(/enter|over/i.test(j.type)){e.showOrCreateTip(i)}else{if(j.type==="mouseout"||j.type==="mouseleave"){e.hide(i)}}})}}else{return this[h].call(this,f)}},showOrCreateTip:function(e){var f=this.getTip(e);if(f&&f.length>0){return this.show(e)}return this.create(e)},getTip:function(f){var e=this.selector(f),g=null;if(e){g=c('span[data-selector="'+e+'"]'+this.settings.tooltipClass)}return(typeof g==="object")?g:false},selector:function(e){var g=e.attr("id"),f=e.attr("data-tooltip")||e.attr("data-selector");if((g&&g.length<1||!g)&&typeof f!="string"){f="tooltip"+Math.random().toString(36).substring(7);e.attr("data-selector",f)}return(g&&g.length>0)?g:f},create:function(e){var g=c(this.settings.tipTemplate(this.selector(e),c("<div></div>").html(e.attr("title")).html())),f=this.inheritable_classes(e);g.addClass(f).appendTo(this.settings.appendTo);if(Modernizr.touch){g.append('<span class="tap-to-close">'+this.settings.touchCloseText+"</span>")}e.removeAttr("title").attr("title","");this.show(e)},reposition:function(j,m,h){var e,n,l,i,g,k;m.css("visibility","hidden").show();e=j.data("width");n=m.children(".nub");l=this.outerHeight(n);i=this.outerHeight(n);k=function(t,s,p,o,r,q){return t.css({top:(s)?s:"auto",bottom:(o)?o:"auto",left:(r)?r:"auto",right:(p)?p:"auto",width:(q)?q:"auto"}).end()};k(m,(j.offset().top+this.outerHeight(j)+10),"auto","auto",j.offset().left,e);if(c(b).width()<767){k(m,(j.offset().top+this.outerHeight(j)+10),"auto","auto",12.5,c(this.scope).width());m.addClass("tip-override");k(n,-l,"auto","auto",j.offset().left)}else{var f=j.offset().left;if(Foundation.rtl){f=j.offset().left+j.offset().width-this.outerWidth(m)}k(m,(j.offset().top+this.outerHeight(j)+10),"auto","auto",f,e);m.removeClass("tip-override");if(h&&h.indexOf("tip-top")>-1){k(m,(j.offset().top-this.outerHeight(m)),"auto","auto",f,e).removeClass("tip-override")}else{if(h&&h.indexOf("tip-left")>-1){k(m,(j.offset().top+(this.outerHeight(j)/2)-l*2.5),"auto","auto",(j.offset().left-this.outerWidth(m)-l),e).removeClass("tip-override")}else{if(h&&h.indexOf("tip-right")>-1){k(m,(j.offset().top+(this.outerHeight(j)/2)-l*2.5),"auto","auto",(j.offset().left+this.outerWidth(j)+l),e).removeClass("tip-override")}}}}m.css("visibility","visible").hide()},inheritable_classes:function(h){var g=["tip-top","tip-left","tip-bottom","tip-right","noradius"].concat(this.settings.additionalInheritableClasses),f=h.attr("class"),e=f?c.map(f.split(" "),function(k,j){if(c.inArray(k,g)!==-1){return k}}).join(" "):"";return c.trim(e)},show:function(e){var f=this.getTip(e);this.reposition(e,f,e.attr("class"));f.fadeIn(150)},hide:function(e){var f=this.getTip(e);f.fadeOut(150)},reload:function(){var e=c(this);return(e.data("fndtn-tooltips"))?e.foundationTooltips("destroy").foundationTooltips("init"):e.foundationTooltips("init")},off:function(){c(this.scope).off(".fndtn.tooltip");c(this.settings.tooltipClass).each(function(e){c("[data-tooltip]").get(e).attr("title",c(this).text())}).remove()},reflow:function(){}}}(Foundation.zj,this,this.document));
|
||||
@@ -0,0 +1,370 @@
|
||||
/*jslint unparam: true, browser: true, indent: 2 */
|
||||
|
||||
;(function ($, window, document, undefined) {
|
||||
'use strict';
|
||||
|
||||
Foundation.libs.topbar = {
|
||||
name : 'topbar',
|
||||
|
||||
version: '4.3.2',
|
||||
|
||||
settings : {
|
||||
index : 0,
|
||||
stickyClass : 'sticky',
|
||||
custom_back_text: true,
|
||||
back_text: 'Back',
|
||||
is_hover: true,
|
||||
mobile_show_parent_link: false,
|
||||
scrolltop : true, // jump to top when sticky nav menu toggle is clicked
|
||||
init : false
|
||||
},
|
||||
|
||||
init : function (section, method, options) {
|
||||
Foundation.inherit(this, 'data_options addCustomRule');
|
||||
var self = this;
|
||||
|
||||
if (typeof method === 'object') {
|
||||
$.extend(true, this.settings, method);
|
||||
} else if (typeof options !== 'undefined') {
|
||||
$.extend(true, this.settings, options);
|
||||
}
|
||||
|
||||
if (typeof method !== 'string') {
|
||||
|
||||
$('.top-bar, [data-topbar]').each(function () {
|
||||
$.extend(true, self.settings, self.data_options($(this)));
|
||||
self.settings.$w = $(window);
|
||||
self.settings.$topbar = $(this);
|
||||
self.settings.$section = self.settings.$topbar.find('section');
|
||||
self.settings.$titlebar = self.settings.$topbar.children('ul').first();
|
||||
self.settings.$topbar.data('index', 0);
|
||||
|
||||
var topbarContainer = self.settings.$topbar.parent();
|
||||
if(topbarContainer.hasClass('fixed') || topbarContainer.hasClass(self.settings.stickyClass)) {
|
||||
self.settings.$topbar.data('height', self.outerHeight(topbarContainer));
|
||||
self.settings.$topbar.data('stickyoffset', topbarContainer.offset().top);
|
||||
} else {
|
||||
self.settings.$topbar.data('height', self.outerHeight(self.settings.$topbar));
|
||||
}
|
||||
|
||||
var breakpoint = $("<div class='top-bar-js-breakpoint'/>").insertAfter(self.settings.$topbar);
|
||||
self.settings.breakPoint = breakpoint.width();
|
||||
breakpoint.remove();
|
||||
|
||||
self.assemble();
|
||||
|
||||
if (self.settings.is_hover) {
|
||||
self.settings.$topbar.find('.has-dropdown').addClass('not-click');
|
||||
}
|
||||
|
||||
// Pad body when sticky (scrolled) or fixed.
|
||||
self.addCustomRule('.f-topbar-fixed { padding-top: ' + self.settings.$topbar.data('height') + 'px }');
|
||||
|
||||
if (self.settings.$topbar.parent().hasClass('fixed')) {
|
||||
$('body').addClass('f-topbar-fixed');
|
||||
}
|
||||
});
|
||||
|
||||
if (!self.settings.init) {
|
||||
this.events();
|
||||
}
|
||||
|
||||
return this.settings.init;
|
||||
} else {
|
||||
// fire method
|
||||
return this[method].call(this, options);
|
||||
}
|
||||
},
|
||||
|
||||
toggle: function() {
|
||||
var self = this;
|
||||
var topbar = $('.top-bar, [data-topbar]'),
|
||||
section = topbar.find('section, .section');
|
||||
|
||||
if (self.breakpoint()) {
|
||||
if (!self.rtl) {
|
||||
section.css({left: '0%'});
|
||||
section.find('>.name').css({left: '100%'});
|
||||
} else {
|
||||
section.css({right: '0%'});
|
||||
section.find('>.name').css({right: '100%'});
|
||||
}
|
||||
|
||||
section.find('li.moved').removeClass('moved');
|
||||
topbar.data('index', 0);
|
||||
|
||||
topbar
|
||||
.toggleClass('expanded')
|
||||
.css('height', '');
|
||||
}
|
||||
|
||||
if(self.settings.scrolltop)
|
||||
{
|
||||
if (!topbar.hasClass('expanded')) {
|
||||
if (topbar.hasClass('fixed')) {
|
||||
topbar.parent().addClass('fixed');
|
||||
topbar.removeClass('fixed');
|
||||
$('body').addClass('f-topbar-fixed');
|
||||
}
|
||||
} else if (topbar.parent().hasClass('fixed')) {
|
||||
if (self.settings.scrolltop) {
|
||||
topbar.parent().removeClass('fixed');
|
||||
topbar.addClass('fixed');
|
||||
$('body').removeClass('f-topbar-fixed');
|
||||
|
||||
window.scrollTo(0,0);
|
||||
} else {
|
||||
topbar.parent().removeClass('expanded');
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if(topbar.parent().hasClass(self.settings.stickyClass)) {
|
||||
topbar.parent().addClass('fixed');
|
||||
}
|
||||
|
||||
if(topbar.parent().hasClass('fixed')) {
|
||||
if (!topbar.hasClass('expanded')) {
|
||||
topbar.removeClass('fixed');
|
||||
topbar.parent().removeClass('expanded');
|
||||
self.updateStickyPositioning();
|
||||
} else {
|
||||
topbar.addClass('fixed');
|
||||
topbar.parent().addClass('expanded');
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
timer : null,
|
||||
|
||||
events : function () {
|
||||
var self = this;
|
||||
$(this.scope)
|
||||
.off('.fndtn.topbar')
|
||||
.on('click.fndtn.topbar', '.top-bar .toggle-topbar, [data-topbar] .toggle-topbar', function (e) {
|
||||
e.preventDefault();
|
||||
self.toggle();
|
||||
})
|
||||
|
||||
.on('click.fndtn.topbar', '.top-bar li.has-dropdown', function (e) {
|
||||
var li = $(this),
|
||||
target = $(e.target),
|
||||
topbar = li.closest('[data-topbar], .top-bar'),
|
||||
is_hover = topbar.data('topbar');
|
||||
|
||||
if(target.data('revealId')) {
|
||||
self.toggle();
|
||||
return;
|
||||
}
|
||||
|
||||
if (self.breakpoint()) return;
|
||||
if (self.settings.is_hover && !Modernizr.touch) return;
|
||||
|
||||
e.stopImmediatePropagation();
|
||||
|
||||
if (target[0].nodeName === 'A' && target.parent().hasClass('has-dropdown')) {
|
||||
e.preventDefault();
|
||||
}
|
||||
|
||||
if (li.hasClass('hover')) {
|
||||
li
|
||||
.removeClass('hover')
|
||||
.find('li')
|
||||
.removeClass('hover');
|
||||
|
||||
li.parents('li.hover')
|
||||
.removeClass('hover');
|
||||
} else {
|
||||
li.addClass('hover');
|
||||
}
|
||||
})
|
||||
|
||||
.on('click.fndtn.topbar', '.top-bar .has-dropdown>a, [data-topbar] .has-dropdown>a', function (e) {
|
||||
if (self.breakpoint() && $(window).width() != self.settings.breakPoint) {
|
||||
|
||||
e.preventDefault();
|
||||
|
||||
var $this = $(this),
|
||||
topbar = $this.closest('.top-bar, [data-topbar]'),
|
||||
section = topbar.find('section, .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', self.outerHeight($this.siblings('ul'), true) + self.settings.$topbar.data('height'));
|
||||
}
|
||||
});
|
||||
|
||||
$(window).on('resize.fndtn.topbar', function () {
|
||||
if (typeof self.settings.$topbar === 'undefined') { return; }
|
||||
var stickyContainer = self.settings.$topbar.parent('.' + this.settings.stickyClass);
|
||||
var stickyOffset;
|
||||
|
||||
if (!self.breakpoint()) {
|
||||
var doToggle = self.settings.$topbar.hasClass('expanded');
|
||||
$('.top-bar, [data-topbar]')
|
||||
.css('height', '')
|
||||
.removeClass('expanded')
|
||||
.find('li')
|
||||
.removeClass('hover');
|
||||
|
||||
if(doToggle) {
|
||||
self.toggle();
|
||||
}
|
||||
}
|
||||
|
||||
if(stickyContainer.length > 0) {
|
||||
if(stickyContainer.hasClass('fixed')) {
|
||||
// Remove the fixed to allow for correct calculation of the offset.
|
||||
stickyContainer.removeClass('fixed');
|
||||
|
||||
stickyOffset = stickyContainer.offset().top;
|
||||
if($(document.body).hasClass('f-topbar-fixed')) {
|
||||
stickyOffset -= self.settings.$topbar.data('height');
|
||||
}
|
||||
|
||||
self.settings.$topbar.data('stickyoffset', stickyOffset);
|
||||
stickyContainer.addClass('fixed');
|
||||
} else {
|
||||
stickyOffset = stickyContainer.offset().top;
|
||||
self.settings.$topbar.data('stickyoffset', stickyOffset);
|
||||
}
|
||||
}
|
||||
}.bind(this));
|
||||
|
||||
$('body').on('click.fndtn.topbar', function (e) {
|
||||
var parent = $(e.target).closest('li').closest('li.hover');
|
||||
|
||||
if (parent.length > 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
$('.top-bar li, [data-topbar] li').removeClass('hover');
|
||||
});
|
||||
|
||||
// Go up a level on Click
|
||||
$(this.scope).on('click.fndtn', '.top-bar .has-dropdown .back, [data-topbar] .has-dropdown .back', function (e) {
|
||||
e.preventDefault();
|
||||
|
||||
var $this = $(this),
|
||||
topbar = $this.closest('.top-bar, [data-topbar]'),
|
||||
section = topbar.find('section, .section'),
|
||||
$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', self.outerHeight($previousLevelUl, true) + self.settings.$topbar.data('height'));
|
||||
}
|
||||
|
||||
setTimeout(function () {
|
||||
$movedLi.removeClass('moved');
|
||||
}, 300);
|
||||
});
|
||||
},
|
||||
|
||||
breakpoint : function () {
|
||||
return $(document).width() <= this.settings.breakPoint || $('html').hasClass('lt-ie9');
|
||||
},
|
||||
|
||||
assemble : function () {
|
||||
var self = this;
|
||||
// Pull element out of the DOM for manipulation
|
||||
this.settings.$section.detach();
|
||||
|
||||
this.settings.$section.find('.has-dropdown>a').each(function () {
|
||||
var $link = $(this),
|
||||
$dropdown = $link.siblings('.dropdown'),
|
||||
url = $link.attr('href');
|
||||
|
||||
if (self.settings.mobile_show_parent_link && url && url.length > 1) {
|
||||
var $titleLi = $('<li class="title back js-generated"><h5><a href="#"></a></h5></li><li><a class="parent-link js-generated" href="' + url + '">' + $link.text() +'</a></li>');
|
||||
} else {
|
||||
var $titleLi = $('<li class="title back js-generated"><h5><a href="#"></a></h5></li>');
|
||||
}
|
||||
|
||||
// Copy link to subnav
|
||||
if (self.settings.custom_back_text == true) {
|
||||
$titleLi.find('h5>a').html(self.settings.back_text);
|
||||
} else {
|
||||
$titleLi.find('h5>a').html('« ' + $link.html());
|
||||
}
|
||||
$dropdown.prepend($titleLi);
|
||||
});
|
||||
|
||||
// Put element back in the DOM
|
||||
this.settings.$section.appendTo(this.settings.$topbar);
|
||||
|
||||
// check for sticky
|
||||
this.sticky();
|
||||
},
|
||||
|
||||
height : function (ul) {
|
||||
var total = 0,
|
||||
self = this;
|
||||
|
||||
ul.find('> li').each(function () { total += self.outerHeight($(this), true); });
|
||||
|
||||
return total;
|
||||
},
|
||||
|
||||
sticky : function () {
|
||||
var $window = $(window),
|
||||
self = this;
|
||||
|
||||
$window.scroll(function() {
|
||||
self.updateStickyPositioning();
|
||||
});
|
||||
},
|
||||
|
||||
updateStickyPositioning: function() {
|
||||
var klass = '.' + this.settings.stickyClass;
|
||||
var $window = $(window);
|
||||
|
||||
if ($(klass).length > 0) {
|
||||
var distance = this.settings.$topbar.data('stickyoffset');
|
||||
if (!$(klass).hasClass('expanded')) {
|
||||
if ($window.scrollTop() > (distance)) {
|
||||
if (!$(klass).hasClass('fixed')) {
|
||||
$(klass).addClass('fixed');
|
||||
$('body').addClass('f-topbar-fixed');
|
||||
}
|
||||
} else if ($window.scrollTop() <= distance) {
|
||||
if ($(klass).hasClass('fixed')) {
|
||||
$(klass).removeClass('fixed');
|
||||
$('body').removeClass('f-topbar-fixed');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
off : function () {
|
||||
$(this.scope).off('.fndtn.topbar');
|
||||
$(window).off('.fndtn.topbar');
|
||||
},
|
||||
|
||||
reflow : function () {}
|
||||
};
|
||||
}(Foundation.zj, this, this.document));
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+9789
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
+2000
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "foundation",
|
||||
"filename": "js/foundation.min.js",
|
||||
"version": "4.3.1",
|
||||
"version": "4.3.2",
|
||||
"description": "The most advanced responsive front-end framework in the world. Quickly create prototypes and production code for sites and apps that work on any kind of device.",
|
||||
"homepage": "http://foundation.zurb.com",
|
||||
"keywords": [
|
||||
|
||||
Reference in New Issue
Block a user