/home/arranoyd/eventrify/wp-content/themes/uptime/style/js/theme.js
(function($) {
/*!
* Leap Bootstrap Theme
* Copyright 2018-2020 Medium Rare (undefined)
*/
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('aos'), require('jquery'), require('jquery-countdown'), require('scrollmonitor'), require('flickity'), require('ion-rangeslider'), require('isotope-layout'), require('jarallax'), require('plyr'), require('prismjs'), require('smooth-scroll'), require('@tanem/svg-injector'), require('twitter-fetcher'), require('typed.js'), require('smartwizard')) :
typeof define === 'function' && define.amd ? define(['exports', 'aos', 'jquery', 'jquery-countdown', 'scrollmonitor', 'flickity', 'ion-rangeslider', 'isotope-layout', 'jarallax', 'plyr', 'prismjs', 'smooth-scroll', '@tanem/svg-injector', 'twitter-fetcher', 'typed.js', 'smartwizard'], factory) :
(global = global || self, factory(global.theme = {}, global.AOS, global.jQuery, null, global.scrollMonitor, global.Flickity, null, global.Isotope, global.jarallax, global.Plyr, global.Prism, global.SmoothScroll, global.twitterFetcher, global.Typed));
}(this, (function (exports, AOS, jQuery$1, jqueryCountdown, scrollMonitor, Flickity, ionRangeslider, Isotope$1, jarallax, Plyr, Prism, SmoothScroll, twitterFetcher, Typed) { 'use strict';
AOS = AOS && Object.prototype.hasOwnProperty.call(AOS, 'default') ? AOS['default'] : AOS;
jQuery$1 = jQuery$1 && Object.prototype.hasOwnProperty.call(jQuery$1, 'default') ? jQuery$1['default'] : jQuery$1;
scrollMonitor = scrollMonitor && Object.prototype.hasOwnProperty.call(scrollMonitor, 'default') ? scrollMonitor['default'] : scrollMonitor;
Flickity = Flickity && Object.prototype.hasOwnProperty.call(Flickity, 'default') ? Flickity['default'] : Flickity;
Isotope$1 = Isotope$1 && Object.prototype.hasOwnProperty.call(Isotope$1, 'default') ? Isotope$1['default'] : Isotope$1;
jarallax = jarallax && Object.prototype.hasOwnProperty.call(jarallax, 'default') ? jarallax['default'] : jarallax;
Plyr = Plyr && Object.prototype.hasOwnProperty.call(Plyr, 'default') ? Plyr['default'] : Plyr;
Prism = Prism && Object.prototype.hasOwnProperty.call(Prism, 'default') ? Prism['default'] : Prism;
SmoothScroll = SmoothScroll && Object.prototype.hasOwnProperty.call(SmoothScroll, 'default') ? SmoothScroll['default'] : SmoothScroll;
twitterFetcher = twitterFetcher && Object.prototype.hasOwnProperty.call(twitterFetcher, 'default') ? twitterFetcher['default'] : twitterFetcher;
Typed = Typed && Object.prototype.hasOwnProperty.call(Typed, 'default') ? Typed['default'] : Typed;
//
AOS.init({
once: true
});
//
(function ($) {
if ('objectFit' in document.documentElement.style === false) {
$('.bg-image').each(function attachBg() {
var img = $(this);
var src = img.attr('src');
var classes = img.get(0).classList; // Replaces the default <img.bg-image> element with a <div.bg-image>
// to attach background using legacy friendly CSS rules
img.before($("<div class=\"" + classes + "\" style=\"background: url(" + src + "); background-size: cover; background-position: 50% 50%;\"></div>")); // Removes original <img.bg-image> as it is no longer required
img.remove();
});
}
})(jQuery$1);
function _defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, descriptor.key, descriptor);
}
}
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
if (staticProps) _defineProperties(Constructor, staticProps);
return Constructor;
}
var mrCountdown = function ($) {
/**
* Check for countdown dependency
* countdown - https://github.com/hilios/jQuery.countdown/
*/
if (typeof $.fn.countdown !== 'function') {
throw new Error('mrCountdown requires jquery.countdown.js (https://github.com/hilios/jQuery.countdown/)');
}
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
var NAME = 'mrCountdown';
var VERSION = '1.1.0';
var DATA_KEY = 'mr.countdown';
var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api';
var JQUERY_NO_CONFLICT = $.fn[NAME];
var Event = {
LOAD_DATA_API: "load" + EVENT_KEY + DATA_API_KEY
};
var Default = {
DAYS_TEXT: 'days',
ELAPSED: 'Timer Done',
Y_FMT: '%Y',
MTHS_FMT: '%m',
W_FMT: '%w',
D_FMT: '%D',
H_FMT: '%H',
MINS_FMT: '%M',
S_FMT: '%S',
Y_LABEL_FMT: '%!Y:Year,Years;',
MTHS_LABEL_FMT: '%!m:Month,Months;',
W_LABEL_FMT: '%!w:Week,Weeks;',
D_LABEL_FMT: '%!d:Day,Days;',
H_LABEL_FMT: '%!H:Hour,Hours;',
MINS_LABEL_FMT: '%!M:Minute,Minutes;',
S_LABEL_FMT: '%!S:Second,Seconds;'
};
var CSS = {
D_NONE: 'd-none'
};
var Selector = {
COUNTDOWN: '[data-countdown-date]',
ACTIVE: '[data-active-state]',
ELAPSED: '[data-elapsed-state]',
DATE_ATTR: 'data-countdown-date',
DAYS_TEXT_ATTR: 'data-days-text',
DATE_FORMAT_ATTR: 'data-date-format',
DATE_FALLBACK_ATTR: 'data-date-fallback',
Y_EL: '[data-years]',
MTHS_EL: '[data-months]',
W_EL: '[data-weeks]',
D_EL: '[data-days]',
H_EL: '[data-hours]',
MINS_EL: '[data-minutes]',
S_EL: '[data-seconds]',
Y_LABEL_EL: '[data-years-label]',
MTHS_LABEL_EL: '[data-months-label]',
W_LABEL_EL: '[data-weeks-label]',
D_LABEL_EL: '[data-days-label]',
H_LABEL_EL: '[data-hours-label]',
MINS_LABEL_EL: '[data-minutes-label]',
S_LABEL_EL: '[data-seconds-label]'
};
var Options = {
FORMAT: 'format',
DETAILED: 'detailed'
};
/**
* ------------------------------------------------------------------------
* Class Definition
* ------------------------------------------------------------------------
*/
var Countdown = /*#__PURE__*/function () {
function Countdown(element) {
// The current countdown element
this.element = element;
var $element = $(element);
this.date = $element.attr(Selector.DATE_ATTR);
this.daysText = $element.attr(Selector.DAYS_TEXT_ATTR) || Default.DAYS_TEXT;
this.countdownText = "%D " + this.daysText + " %H:%M:%S";
this.dateFormat = $element.attr(Selector.DATE_FORMAT_ATTR) || this.countdownText;
this.fallback = $element.attr(Selector.DATE_FALLBACK_ATTR) || Default.ELAPSED; // Options for detailed mode
this.detailed = this.element.getAttribute("data-" + Options.DETAILED) !== null;
if (this.detailed) {
this.years = {
show: $element.find(Selector.Y_EL).length,
element: $element.find(Selector.Y_EL),
format: $element.find(Selector.Y_EL).data(Options.FORMAT) || Default.Y_FMT,
label: {
show: $element.find(Selector.Y_LABEL_EL).length,
element: $element.find(Selector.Y_LABEL_EL),
format: $element.find(Selector.Y_LABEL_EL).data(Options.FORMAT) || Default.Y_LABEL_FMT
}
};
this.months = {
show: $element.find(Selector.MTHS_EL).length,
element: $element.find(Selector.MTHS_EL),
format: $element.find(Selector.MTHS_EL).data(Options.FORMAT) || Default.MTHS_FMT,
label: {
show: $element.find(Selector.MTHS_LABEL_EL).length,
element: $element.find(Selector.MTHS_LABEL_EL),
format: $element.find(Selector.MTHS_LABEL_EL).data(Options.FORMAT) || Default.MTHS_LABEL_FMT
}
};
this.weeks = {
show: $element.find(Selector.W_EL).length,
element: $element.find(Selector.W_EL),
format: $element.find(Selector.W_EL).data(Options.FORMAT) || Default.W_FMT,
label: {
show: $element.find(Selector.W_LABEL_EL).length,
element: $element.find(Selector.W_LABEL_EL),
format: $element.find(Selector.W_LABEL_EL).data(Options.FORMAT) || Default.W_LABEL_FMT
}
};
this.days = {
show: $element.find(Selector.D_EL).length,
element: $element.find(Selector.D_EL),
format: $element.find(Selector.D_EL).data(Options.FORMAT) || Default.D_FMT,
label: {
show: $element.find(Selector.D_LABEL_EL).length,
element: $element.find(Selector.D_LABEL_EL),
format: $element.find(Selector.D_LABEL_EL).data(Options.FORMAT) || Default.D_LABEL_FMT
}
};
this.hours = {
show: $element.find(Selector.H_EL).length,
element: $element.find(Selector.H_EL),
format: $element.find(Selector.H_EL).data(Options.FORMAT) || Default.H_FMT,
label: {
show: $element.find(Selector.H_LABEL_EL).length,
element: $element.find(Selector.H_LABEL_EL),
format: $element.find(Selector.H_LABEL_EL).data(Options.FORMAT) || Default.H_LABEL_FMT
}
};
this.minutes = {
show: $element.find(Selector.MINS_EL).length,
element: $element.find(Selector.MINS_EL),
format: $element.find(Selector.MINS_EL).data(Options.FORMAT) || Default.MINS_FMT,
label: {
show: $element.find(Selector.MINS_LABEL_EL).length,
element: $element.find(Selector.MINS_LABEL_EL),
format: $element.find(Selector.MINS_LABEL_EL).data(Options.FORMAT) || Default.MINS_LABEL_FMT
}
};
this.seconds = {
show: $element.find(Selector.S_EL).length,
element: $element.find(Selector.S_EL),
format: $element.find(Selector.S_EL).data(Options.FORMAT) || Default.S_FMT,
label: {
show: $element.find(Selector.S_LABEL_EL).length,
element: $element.find(Selector.S_LABEL_EL),
format: $element.find(Selector.S_LABEL_EL).data(Options.FORMAT) || Default.S_LABEL_FMT
}
};
}
this.initCountdown();
} // getters
var _proto = Countdown.prototype;
_proto.initCountdown = function initCountdown() {
var _this = this;
var element = $(this.element);
if (this.detailed) {
element.countdown(this.date, function (event) {
if (!event.elapsed) {
if (_this.years.show) {
_this.years.element.text(event.strftime(_this.years.format));
}
if (_this.years.label.show) {
_this.years.label.element.text(event.strftime(_this.years.label.format));
}
if (_this.months.show) {
_this.months.element.text(event.strftime(_this.months.format));
}
if (_this.months.label.show) {
_this.months.label.element.text(event.strftime(_this.months.label.format));
}
if (_this.weeks.show) {
_this.weeks.element.text(event.strftime(_this.weeks.format));
}
if (_this.weeks.label.show) {
_this.weeks.label.element.text(event.strftime(_this.weeks.label.format));
}
if (_this.days.show) {
_this.days.element.text(event.strftime(_this.days.format));
}
if (_this.days.label.show) {
_this.days.label.element.text(event.strftime(_this.days.label.format));
}
if (_this.hours.show) {
_this.hours.element.text(event.strftime(_this.hours.format));
}
if (_this.hours.label.show) {
_this.hours.label.element.text(event.strftime(_this.hours.label.format));
}
if (_this.minutes.show) {
_this.minutes.element.text(event.strftime(_this.minutes.format));
}
if (_this.minutes.label.show) {
_this.minutes.label.element.text(event.strftime(_this.minutes.label.format));
}
if (_this.seconds.show) {
_this.seconds.element.text(event.strftime(_this.seconds.format));
}
if (_this.seconds.label.show) {
_this.seconds.label.element.text(event.strftime(_this.seconds.label.format));
}
} else {
// If the countdown has elapsed (event.elapsed):
element.find(Selector.ELAPSED).removeClass(CSS.D_NONE);
element.find(Selector.ACTIVE).addClass(CSS.D_NONE);
}
});
} else {
$(this.element).countdown(this.date, function (event) {
if (event.elapsed) {
element.text(_this.fallback);
} else {
element.text(event.strftime(_this.dateFormat));
}
});
}
};
Countdown.jQueryInterface = function jQueryInterface() {
return this.each(function jqEachCountdown() {
var $element = $(this);
var data = $element.data(DATA_KEY);
if (!data) {
data = new Countdown(this);
$element.data(DATA_KEY, data);
}
});
};
_createClass(Countdown, null, [{
key: "VERSION",
get: function get() {
return VERSION;
}
}]);
return Countdown;
}(); // END Class definition
/**
* ------------------------------------------------------------------------
* Initialise by data attribute
* ------------------------------------------------------------------------
*/
$(window).on(Event.LOAD_DATA_API, function () {
var cdownsOnPage = $.makeArray($(Selector.COUNTDOWN));
/* eslint-disable no-plusplus */
for (var i = cdownsOnPage.length; i--;) {
var $countdown = $(cdownsOnPage[i]);
Countdown.jQueryInterface.call($countdown, $countdown.data());
}
});
/**
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
*/
/* eslint-disable no-param-reassign */
$.fn[NAME] = Countdown.jQueryInterface;
$.fn[NAME].Constructor = Countdown;
$.fn[NAME].noConflict = function CountdownNoConflict() {
$.fn[NAME] = JQUERY_NO_CONFLICT;
return Countdown.jQueryInterface;
};
/* eslint-enable no-param-reassign */
return Countdown;
}(jQuery$1);
var __assign=undefined&&undefined.__assign||function(){return (__assign=Object.assign||function(t){for(var i,a=1,s=arguments.length;a<s;a++)for(var n in i=arguments[a])Object.prototype.hasOwnProperty.call(i,n)&&(t[n]=i[n]);return t}).apply(this,arguments)},CountUp=function(){function t(t,i,a){var s=this;this.target=t,this.endVal=i,this.options=a,this.version="2.0.4",this.defaults={startVal:0,decimalPlaces:0,duration:2,useEasing:!0,useGrouping:!0,smartEasingThreshold:999,smartEasingAmount:333,separator:",",decimal:".",prefix:"",suffix:""},this.finalEndVal=null,this.useEasing=!0,this.countDown=!1,this.error="",this.startVal=0,this.paused=!0,this.count=function(t){s.startTime||(s.startTime=t);var i=t-s.startTime;s.remaining=s.duration-i,s.useEasing?s.countDown?s.frameVal=s.startVal-s.easingFn(i,0,s.startVal-s.endVal,s.duration):s.frameVal=s.easingFn(i,s.startVal,s.endVal-s.startVal,s.duration):s.countDown?s.frameVal=s.startVal-(s.startVal-s.endVal)*(i/s.duration):s.frameVal=s.startVal+(s.endVal-s.startVal)*(i/s.duration),s.countDown?s.frameVal=s.frameVal<s.endVal?s.endVal:s.frameVal:s.frameVal=s.frameVal>s.endVal?s.endVal:s.frameVal,s.frameVal=Math.round(s.frameVal*s.decimalMult)/s.decimalMult,s.printValue(s.frameVal),i<s.duration?s.rAF=requestAnimationFrame(s.count):null!==s.finalEndVal?s.update(s.finalEndVal):s.callback&&s.callback();},this.formatNumber=function(t){var i,a,n,e,r,o=t<0?"-":"";if(i=Math.abs(t).toFixed(s.options.decimalPlaces),n=(a=(i+="").split("."))[0],e=a.length>1?s.options.decimal+a[1]:"",s.options.useGrouping){r="";for(var l=0,h=n.length;l<h;++l)0!==l&&l%3==0&&(r=s.options.separator+r),r=n[h-l-1]+r;n=r;}return s.options.numerals&&s.options.numerals.length&&(n=n.replace(/[0-9]/g,function(t){return s.options.numerals[+t]}),e=e.replace(/[0-9]/g,function(t){return s.options.numerals[+t]})),o+s.options.prefix+n+e+s.options.suffix},this.easeOutExpo=function(t,i,a,s){return a*(1-Math.pow(2,-10*t/s))*1024/1023+i},this.options=__assign({},this.defaults,a),this.formattingFn=this.options.formattingFn?this.options.formattingFn:this.formatNumber,this.easingFn=this.options.easingFn?this.options.easingFn:this.easeOutExpo,this.startVal=this.validateValue(this.options.startVal),this.frameVal=this.startVal,this.endVal=this.validateValue(i),this.options.decimalPlaces=Math.max(this.options.decimalPlaces),this.decimalMult=Math.pow(10,this.options.decimalPlaces),this.resetDuration(),this.options.separator=String(this.options.separator),this.useEasing=this.options.useEasing,""===this.options.separator&&(this.options.useGrouping=!1),this.el="string"==typeof t?document.getElementById(t):t,this.el?this.printValue(this.startVal):this.error="[CountUp] target is null or undefined";}return t.prototype.determineDirectionAndSmartEasing=function(){var t=this.finalEndVal?this.finalEndVal:this.endVal;this.countDown=this.startVal>t;var i=t-this.startVal;if(Math.abs(i)>this.options.smartEasingThreshold){this.finalEndVal=t;var a=this.countDown?1:-1;this.endVal=t+a*this.options.smartEasingAmount,this.duration=this.duration/2;}else this.endVal=t,this.finalEndVal=null;this.finalEndVal?this.useEasing=!1:this.useEasing=this.options.useEasing;},t.prototype.start=function(t){this.error||(this.callback=t,this.duration>0?(this.determineDirectionAndSmartEasing(),this.paused=!1,this.rAF=requestAnimationFrame(this.count)):this.printValue(this.endVal));},t.prototype.pauseResume=function(){this.paused?(this.startTime=null,this.duration=this.remaining,this.startVal=this.frameVal,this.determineDirectionAndSmartEasing(),this.rAF=requestAnimationFrame(this.count)):cancelAnimationFrame(this.rAF),this.paused=!this.paused;},t.prototype.reset=function(){cancelAnimationFrame(this.rAF),this.paused=!0,this.resetDuration(),this.startVal=this.validateValue(this.options.startVal),this.frameVal=this.startVal,this.printValue(this.startVal);},t.prototype.update=function(t){cancelAnimationFrame(this.rAF),this.startTime=null,this.endVal=this.validateValue(t),this.endVal!==this.frameVal&&(this.startVal=this.frameVal,this.finalEndVal||this.resetDuration(),this.determineDirectionAndSmartEasing(),this.rAF=requestAnimationFrame(this.count));},t.prototype.printValue=function(t){var i=this.formattingFn(t);"INPUT"===this.el.tagName?this.el.value=i:"text"===this.el.tagName||"tspan"===this.el.tagName?this.el.textContent=i:this.el.innerHTML=i;},t.prototype.ensureNumber=function(t){return "number"==typeof t&&!isNaN(t)},t.prototype.validateValue=function(t){var i=Number(t);return this.ensureNumber(i)?i:(this.error="[CountUp] invalid start or end value: "+t,null)},t.prototype.resetDuration=function(){this.startTime=null,this.duration=1e3*Number(this.options.duration),this.remaining=this.duration;},t}();
var mrCountup = function ($) {
/**
* Check for scrollMonitor dependency
* scrollMonitor - https://github.com/stutrek/scrollMonitor
*/
if (typeof scrollMonitor === 'undefined') {
throw new Error('mrCountup requires scrollMonitor.js (https://github.com/stutrek/scrollMonitor)');
}
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
var NAME = 'mrCountup';
var VERSION = '1.1.0';
var DATA_KEY = 'mr.countup';
var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api';
var JQUERY_NO_CONFLICT = $.fn[NAME];
var Options = {
START: 'start',
END: 'end',
DURATION: 'duration',
GROUPING: 'grouping',
SEPARATOR: 'separator',
DECIMAL_CHARACTER: 'decimal-character',
DECIMAL_PLACES: 'decimal-places',
PREFIX: 'prefix',
SUFFIX: 'suffix',
EASING: 'easing'
};
var Event = {
LOAD_DATA_API: "load" + EVENT_KEY + DATA_API_KEY,
RESIZE: "resize" + EVENT_KEY
};
var Selector = {
DATA_ATTR: 'countup',
DATA_COUNTUP: '[data-countup]'
};
/**
* ------------------------------------------------------------------------
* Class Definition
* ------------------------------------------------------------------------
*/
var Countup = /*#__PURE__*/function () {
function Countup(element) {
var $element = $(element); // Grab data-attributes
this.start = parseFloat($element.data(Options.START), 10) || 0;
this.end = parseFloat($element.data(Options.END), 10) || parseFloat($element.text(), 10);
this.duration = parseFloat($element.data(Options.DURATION), 10) || 2.5;
this.grouping = $element.data(Options.GROUPING) === true || false;
this.separator = $element.data(Options.SEPARATOR) || ',';
this.decimalCharacter = $element.data(Options.DECIMAL_CHARACTER) || '.';
this.decimalPlaces = parseInt($element.data(Options.DECIMAL_PLACES), 10) || 0;
this.prefix = $element.data(Options.PREFIX) || '';
this.suffix = $element.data(Options.SUFFIX) || ''; // the easing data attribute will only disable easing if false is specified. Defaults to true.
var easing = $element.data(Options.EASING);
this.easing = easing === false ? easing : true;
this.element = element;
this.initWatcher(element);
this.startCounting();
} // getters
var _proto = Countup.prototype;
_proto.initWatcher = function initWatcher(element) {
var _this = this;
this.CountUp = new CountUp(element, this.end, {
startVal: this.start,
decimalPlaces: this.decimalPlaces,
duration: this.duration,
useEasing: this.easing,
useGrouping: this.grouping,
separator: this.separator,
decimal: this.decimalCharacter,
prefix: this.prefix,
suffix: this.suffix
});
var watcher = scrollMonitor.create(element);
this.watcher = watcher;
watcher.stateChange(function () {
_this.startCounting();
});
};
_proto.startCounting = function startCounting() {
if (this.watcher.isFullyInViewport) {
if (!this.CountUp.error) {
this.CountUp.start();
} else {
throw new Error(this.CountUp.error);
}
}
};
Countup.jQueryInterface = function jQueryInterface() {
return this.each(function jqEachCountup() {
var $element = $(this);
var data = $element.data(DATA_KEY);
if (!data) {
data = new Countup(this);
$element.data(DATA_KEY, data);
}
});
};
_createClass(Countup, null, [{
key: "VERSION",
get: function get() {
return VERSION;
}
}]);
return Countup;
}();
/**
* ------------------------------------------------------------------------
* Initialise by data attribute
* ------------------------------------------------------------------------
*/
$(window).on(Event.LOAD_DATA_API, function () {
var countupElements = $.makeArray($(Selector.DATA_COUNTUP));
/* eslint-disable no-plusplus */
for (var i = countupElements.length; i--;) {
var $countup = $(countupElements[i]);
Countup.jQueryInterface.call($countup, $countup.data());
}
});
/**
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
*/
/* eslint-disable no-param-reassign */
$.fn[NAME] = Countup.jQueryInterface;
$.fn[NAME].Constructor = Countup;
$.fn[NAME].noConflict = function CountupNoConflict() {
$.fn[NAME] = JQUERY_NO_CONFLICT;
return Countup.jQueryInterface;
};
/* eslint-enable no-param-reassign */
return Countup;
}(jQuery$1);
//
var mrUtil = function ($) {
var VERSION = '1.2.0';
var Tagname = {
SCRIPT: 'script'
};
var Selector = {
RECAPTCHA: '[data-recaptcha]'
}; // Activate tooltips
$('body').tooltip({
selector: '[data-toggle="tooltip"]',
container: 'body'
}); // Activate popovers
$('body').popover({
selector: '[data-toggle="popover"]',
container: 'body'
}); // Activate toasts
$('.toast').toast();
var Util = {
version: VERSION,
selector: Selector,
activateIframeSrc: function activateIframeSrc(iframe) {
var $iframe = $(iframe);
if ($iframe.attr('data-src')) {
$iframe.attr('src', $iframe.attr('data-src'));
}
},
idleIframeSrc: function idleIframeSrc(iframe) {
var $iframe = $(iframe);
$iframe.attr('data-src', $iframe.attr('src')).attr('src', '');
},
forEach: function forEach(array, callback, scope) {
if (array) {
if (array.length) {
for (var i = 0; i < array.length; i += 1) {
callback.call(scope, i, array[i]); // passes back stuff we need
}
} else if (array[0] || mrUtil.isElement(array)) {
callback.call(scope, 0, array);
}
}
},
dedupArray: function dedupArray(arr) {
return arr.reduce(function (p, c) {
// create an identifying String from the object values
var id = JSON.stringify(c); // if the JSON string is not found in the temp array
// add the object to the output array
// and add the key to the temp array
if (p.temp.indexOf(id) === -1) {
p.out.push(c);
p.temp.push(id);
}
return p; // return the deduped array
}, {
temp: [],
out: []
}).out;
},
isElement: function isElement(obj) {
return !!(obj && obj.nodeType === 1);
},
getFuncFromString: function getFuncFromString(funcName, context) {
var findFunc = funcName || null; // if already a function, return
if (typeof findFunc === 'function') return funcName; // if string, try to find function or method of object (of "obj.func" format)
if (typeof findFunc === 'string') {
if (!findFunc.length) return null;
var target = context || window;
var func = findFunc.split('.');
while (func.length) {
var ns = func.shift();
if (typeof target[ns] === 'undefined') return null;
target = target[ns];
}
if (typeof target === 'function') return target;
} // return null if could not parse
return null;
},
getScript: function getScript(source, callback) {
var script = document.createElement(Tagname.SCRIPT);
var prior = document.getElementsByTagName(Tagname.SCRIPT)[0];
script.async = 1;
script.defer = 1;
script.onreadystatechange = function (_, isAbort) {
if (isAbort || !script.readyState || /loaded|complete/.test(script.readyState)) {
script.onload = null;
script.onreadystatechange = null;
script = undefined;
if (!isAbort && callback && typeof callback === 'function') {
callback();
}
}
};
script.onload = script.onreadystatechange;
script.src = source;
prior.parentNode.insertBefore(script, prior);
},
isIE: function isIE() {
var ua = window.navigator.userAgent;
var isIE = /MSIE|Trident/.test(ua);
return isIE;
}
};
return Util;
}(jQuery$1);
var mrDropdownGrid = function ($) {
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
var NAME = 'mrDropdownGrid';
var VERSION = '1.0.0';
var DATA_KEY = 'mr.dropdownGrid';
var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api';
var JQUERY_NO_CONFLICT = $.fn[NAME]; // KeyboardEvent.which value for Escape (Esc) key
var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for space key
var SPACE_KEYCODE = 32; // KeyboardEvent.which value for tab key
var TAB_KEYCODE = 9; // KeyboardEvent.which value for up arrow key
var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for down arrow key
var ARROW_DOWN_KEYCODE = 40; // MouseEvent.which value for the right button (assuming a right-handed mouse)
var RIGHT_MOUSE_BUTTON_WHICH = 3;
var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE);
var ClassName = {
SHOW: 'show'
};
var Event = {
LOAD_DATA_API: "load" + EVENT_KEY + DATA_API_KEY,
RESIZE: "resize" + EVENT_KEY,
HIDE: "hide" + EVENT_KEY,
HIDDEN: "hidden" + EVENT_KEY,
SHOW: "show" + EVENT_KEY,
SHOWN: "shown" + EVENT_KEY,
CLICK: "click" + EVENT_KEY,
MOUSE_ENTER: "mouseenter" + EVENT_KEY,
MOUSE_LEAVE: "mouseleave" + EVENT_KEY,
CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY,
KEYDOWN_DATA_API: "keydown" + EVENT_KEY + DATA_API_KEY,
KEYUP_DATA_API: "keyup" + EVENT_KEY + DATA_API_KEY
};
var Selector = {
DATA_TOGGLE: '[data-toggle="dropdown-grid"]',
FORM_CHILD: '.dropdown form',
MENU: '.dropdown-menu',
CONTAINER: '.dropdown-menu',
CONTENT: '[data-dropdown-content]',
NAVBAR_NAV: '.navbar-nav',
VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'
};
var Options = {
HOVER: 'data-hover',
BODY_HOVER: 'data-dropdown-grid-hover'
};
/**
* ------------------------------------------------------------------------
* Class Definition
* ------------------------------------------------------------------------
*/
var DropdownGrid = /*#__PURE__*/function () {
function DropdownGrid(element) {
this.ticking = false;
this.isActive = false;
this.element = element;
this.getOptions();
this.parent = DropdownGrid.getParentFromElement(this.element);
this.menu = this.getMenuElement();
this.container = this.getContainerElement();
this.content = this.getContentElement();
this.isSubmenu = this.hasParentMenu();
if (this.isSubmenu) {
this.siblingMenus = this.getSiblingMenus();
}
this.submenus = this.getSubmenus();
this.hover = this.options.hover;
this.addEventListeners();
this.setResizeEvent();
}
var _proto = DropdownGrid.prototype;
_proto.getOptions = function getOptions() {
if (!this.options) {
this.options = {};
this.options.hover = (this.element.getAttribute(Options.HOVER) === 'true' || document.body.getAttribute(Options.BODY_HOVER) === 'true') && this.element.getAttribute(Options.HOVER) !== 'false';
}
};
_proto.toggle = function toggle(event) {
this.getParentMenu();
if (this.element.disabled || $(this.element).hasClass(ClassName.DISABLED)) {
return;
}
this.isActive = $(this.menu).hasClass(ClassName.SHOW);
var togglingOff = this.isActive;
var togglingOn = !this.isActive;
if (!this.isSubmenu) {
DropdownGrid.clearMenus();
}
if (!this.isSubmenu && togglingOff) {
return;
}
if (!this.isSubmenu && togglingOn && event && event.type === Event.MOUSE_LEAVE) {
return;
}
if (this.isSubmenu && this.isActive) {
DropdownGrid.clearMenus(null, this.element);
DropdownGrid.clearMenus(null, this.submenus);
return;
}
if (this.isSubmenu && !this.isActive) {
DropdownGrid.clearMenus(null, this.siblingMenus);
}
var relatedTarget = {
relatedTarget: this.element
};
var showEvent = $.Event(Event.SHOW, relatedTarget);
$(this.parent).trigger(showEvent);
if (showEvent.isDefaultPrevented()) {
return;
} // If this is a touch-enabled device we add extra
// empty mouseover listeners to the body's immediate children;
// only needed because of broken event delegation on iOS
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
if ('ontouchstart' in document.documentElement && $(this.parent).closest(Selector.NAVBAR_NAV).length === 0) {
$(document.body).children().on('mouseover', null, $.noop);
}
this.element.focus();
this.element.setAttribute('aria-expanded', true);
$(this.menu).toggleClass(ClassName.SHOW); // Recalculate positions after applying the shown class
// This is because jQuery can't measure an invisible element.
this.updatePosition();
this.isActive = true;
$(this.parent).toggleClass(ClassName.SHOW).trigger($.Event(Event.SHOWN, relatedTarget));
};
_proto.updatePosition = function updatePosition(winWidth) {
var windowWidth = winWidth || window.innerWidth;
var trigger = mrDropdownGrid.getDimensionsFromElement(this.element);
this.positionContainer(trigger.offsetLeft);
this.positionContent(windowWidth, trigger.offsetLeft);
};
_proto.positionContainer = function positionContainer(offsetLeft) {
if (this.container) {
this.container.style.left = "-" + offsetLeft + "px";
} else {
throw new TypeError('No element matching .dropdown-menu.container found.');
}
};
_proto.positionContent = function positionContent(windowWidth, offsetLeft) {
if (this.content) {
var leftValue; // let topValue;
var contentRect = mrDropdownGrid.getDimensionsFromElement(this.content);
var contentWidth = contentRect.width; // If submenu, the left of the content needs to sit to the side of the trigger's content
if (this.isSubmenu) {
this.getParentMenu();
var parentContent = mrDropdownGrid.getDimensionsFromElement(this.parentMenu.content); // Calculate X Offset
if (parentContent.offsetLeft + parentContent.width + contentWidth <= windowWidth) {
// Submenu can fit next to parent menu
leftValue = parentContent.offsetLeft + parentContent.width;
} else if (parentContent.offsetLeft >= contentWidth) {
// No room for submenu to fit to the right of parent, sit it to the left instead.
leftValue = parentContent.offsetLeft - contentWidth;
} else {
leftValue = 0;
} // Calculate Y offset
} else if (contentWidth + offsetLeft >= windowWidth) {
// Not a submenu, but if the content won't fit, sit content close to the right boundary
leftValue = windowWidth - contentWidth;
} else {
// Not a submenu, and there is room to fit normally and sit below trigger
leftValue = offsetLeft;
}
var leftString = Math.round(leftValue) + "px";
this.content.style.left = leftString;
} else {
throw new TypeError('No [data-dropdown-content] element was found.');
}
};
_proto.setResizeEvent = function setResizeEvent() {
var _this = this;
$(window).on(Event.RESIZE, function () {
if (!_this.ticking) {
window.requestAnimationFrame(function () {
_this.updatePosition();
_this.ticking = false;
});
_this.ticking = true;
}
});
};
_proto.getMenuElement = function getMenuElement() {
if (!this.menu) {
if (this.parent) {
this.menu = this.parent.querySelector(Selector.MENU);
}
}
return this.menu;
};
_proto.getContainerElement = function getContainerElement() {
if (!this.container) {
if (this.parent) {
this.container = this.parent.querySelector("" + Selector.MENU + Selector.CONTAINER);
}
}
return this.container;
};
_proto.getContentElement = function getContentElement() {
if (!this.content) {
if (this.parent) {
this.content = this.container.querySelector(Selector.CONTENT);
}
}
return this.content;
};
_proto.hasParentMenu = function hasParentMenu() {
return $(this.element).closest(Selector.CONTENT).length > 0;
};
_proto.getParentMenu = function getParentMenu() {
if (this.isSubmenu && !this.parentMenu) {
this.parentMenu = $(this.parent).closest(Selector.MENU).siblings(Selector.DATA_TOGGLE).data(DATA_KEY);
}
};
_proto.getSiblingMenus = function getSiblingMenus() {
return $(this.element).closest(Selector.CONTENT).get(0).querySelectorAll(Selector.DATA_TOGGLE);
};
_proto.getSubmenus = function getSubmenus() {
var children = this.content.querySelectorAll(Selector.DATA_TOGGLE);
this.isParent = children.length !== 0;
return children;
};
_proto.addEventListeners = function addEventListeners() {
var _this2 = this;
$(this.element).on(Event.CLICK, function (event) {
event.preventDefault();
event.stopPropagation();
_this2.toggle();
});
if (this.hover) {
$(this.parent).on(Event.MOUSE_ENTER + " " + Event.MOUSE_LEAVE, function (event) {
event.preventDefault();
event.stopPropagation();
if ("" + event.type + EVENT_KEY === Event.MOUSE_ENTER && _this2.isActive || "" + event.type + EVENT_KEY === Event.MOUSE_LEAVE && !_this2.isActive) {
return;
}
_this2.toggle(event);
});
}
};
DropdownGrid.getDimensionsFromElement = function getDimensionsFromElement(element) {
if (element && mrUtil.isElement(element)) {
var rect = element.getBoundingClientRect();
rect.offsetLeft = Math.round(rect.left + window.pageXOffset - document.documentElement.clientLeft);
return rect;
} // If not an element, throw an error
throw new TypeError('Can\'t get a measurement from a non-element');
};
DropdownGrid.getParentFromElement = function getParentFromElement(element) {
return element.parentNode;
};
DropdownGrid.clearMenus = function clearMenus(event, specificToggle) {
if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup') && event.which !== TAB_KEYCODE) {
return;
}
var toggles;
if (specificToggle && typeof specificToggle === 'object') {
toggles = specificToggle;
} else {
toggles = document.querySelectorAll(Selector.DATA_TOGGLE);
}
mrUtil.forEach(toggles, function (index, toggle) {
var parent = DropdownGrid.getParentFromElement(toggle);
var context = $(toggle).data(DATA_KEY);
var relatedTarget = {
relatedTarget: toggle
};
if (event && event.type === 'click') {
relatedTarget.clickEvent = event;
}
if (!context) {
return;
}
var dropdownMenu = context.menu;
if (!$(parent).hasClass(ClassName.SHOW)) {
return;
}
if (event) {
if ((event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $.contains(parent, event.target)) {
return;
}
}
if (event) {
if (event.type === 'click' && ($.contains(context.content, event.target) || context.content.isSameNode(event.target))) {
return;
}
}
var hideEvent = $.Event(Event.HIDE, relatedTarget);
$(parent).trigger(hideEvent);
if (hideEvent.isDefaultPrevented()) {
return;
} // If this is a touch-enabled device we remove the extra
// empty mouseover listeners we added for iOS support
if ('ontouchstart' in document.documentElement) {
$(document.body).children().off('mouseover', null, $.noop);
}
toggle.setAttribute('aria-expanded', 'false');
context.isActive = false;
$(dropdownMenu).removeClass(ClassName.SHOW);
$(parent).removeClass(ClassName.SHOW).trigger($.Event(Event.HIDDEN, relatedTarget));
});
};
DropdownGrid.jQueryInterface = function jQueryInterface(config) {
return this.each(function jqEachDropdownGrid() {
var $element = $(this);
var data = $element.data(DATA_KEY);
if (!data) {
data = new DropdownGrid(this);
$element.data(DATA_KEY, data);
}
if (typeof config === 'string') {
if (typeof data[config] === 'undefined') {
throw new TypeError("No method named \"" + config + "\"");
}
data[config]();
}
});
} // eslint-disable-next-line complexity
;
DropdownGrid.dataApiKeydownHandler = function dataApiKeydownHandler(event) {
// If not input/textarea:
// - And not a key in REGEXP_KEYDOWN => not a dropdown command
// If input/textarea:
// - If space key => not a dropdown command
// - If key is other than escape
// - If key is not up or down => not a dropdown command
// - If trigger inside the menu => not a dropdown command
if (/input|textarea/i.test(event.target.tagName) ? (event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE) && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $(event.target).closest(Selector.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {
return;
}
event.preventDefault();
event.stopPropagation();
if (this.disabled || $(this).hasClass(ClassName.DISABLED)) {
return;
}
var parent = DropdownGrid.getParentFromElement(this);
var isActive = $(parent).hasClass(ClassName.SHOW);
if (!isActive && (event.which !== ESCAPE_KEYCODE || event.which !== SPACE_KEYCODE) || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {
if (event.which === ESCAPE_KEYCODE) {
var toggle = parent.querySelector(Selector.DATA_TOGGLE);
$(toggle).trigger('focus');
}
$(this).trigger('click');
return;
}
var items = [].slice.call(parent.querySelectorAll(Selector.VISIBLE_ITEMS));
if (items.length === 0) {
return;
}
var index = items.indexOf(event.target);
if (event.which === ARROW_UP_KEYCODE && index > 0) {
// Up
index -= 1;
}
if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {
// Down
index += 1;
}
if (index < 0) {
index = 0;
}
items[index].focus();
};
_createClass(DropdownGrid, null, [{
key: "VERSION",
get: function get() {
return VERSION;
}
}]);
return DropdownGrid;
}();
/**
* ------------------------------------------------------------------------
* Data Api implementation
* ------------------------------------------------------------------------
*/
$(document).on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, DropdownGrid.dataApiKeydownHandler).on(Event.KEYDOWN_DATA_API, Selector.MENU, DropdownGrid.dataApiKeydownHandler).on(Event.CLICK_DATA_API + " " + Event.KEYUP_DATA_API, DropdownGrid.clearMenus).on(Event.CLICK_DATA_API, Selector.FORM_CHILD, function (e) {
e.stopPropagation();
});
/**
* ------------------------------------------------------------------------
* Initialise by data attribute
* ------------------------------------------------------------------------
*/
$(document).ready(function () {
var dropdownGridElements = $.makeArray($(Selector.DATA_TOGGLE));
/* eslint-disable no-plusplus */
for (var i = dropdownGridElements.length; i--;) {
var $dropdownGrid = $(dropdownGridElements[i]);
DropdownGrid.jQueryInterface.call($dropdownGrid, $dropdownGrid.data());
}
});
/**
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
*/
/* eslint-disable no-param-reassign */
$.fn[NAME] = DropdownGrid.jQueryInterface;
$.fn[NAME].Constructor = DropdownGrid;
$.fn[NAME].noConflict = function DropdownGridNoConflict() {
$.fn[NAME] = JQUERY_NO_CONFLICT;
return DropdownGrid.jQueryInterface;
};
/* eslint-enable no-param-reassign */
return DropdownGrid;
}(jQuery$1);
//
//
// fade-page.js
//
//
// Page Transition to fade out when clicking a link which has opted in using class 'fade-page'
(function () {
var ATTR_HREF = 'href';
var EVENT_CLICK = 'click';
var SELECTOR_FADE = 'fade-page';
var EFFECT_DELAY = 500;
var fadePage = document.getElementsByClassName(SELECTOR_FADE);
function fadePageFunction(event) {
if (!(event.ctrlKey || event.shiftKey || event.metaKey || event.button && event.button === 1)) {
event.preventDefault();
event.stopPropagation();
document.body.classList.add(SELECTOR_FADE);
var href = this.getAttribute(ATTR_HREF);
setTimeout(function () {
if (href !== '' && href !== '#') {
window.location.href = href;
}
}, EFFECT_DELAY);
}
} // Bind click event
for (var i = 0; i < fadePage.length; i += 1) {
fadePage[i].addEventListener(EVENT_CLICK, fadePageFunction, false);
}
})();
var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
function createCommonjsModule(fn, module) {
return module = { exports: {} }, fn(module, module.exports), module.exports;
}
var flatpickr = createCommonjsModule(function (module, exports) {
/* flatpickr v4.6.3, @license MIT */
(function (global, factory) {
module.exports = factory() ;
}(commonjsGlobal, function () {
/*! *****************************************************************************
Copyright (c) Microsoft Corporation. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
this file except in compliance with the License. You may obtain a copy of the
License at http://www.apache.org/licenses/LICENSE-2.0
THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
MERCHANTABLITY OR NON-INFRINGEMENT.
See the Apache Version 2.0 License for specific language governing permissions
and limitations under the License.
***************************************************************************** */
var __assign = function() {
__assign = Object.assign || function __assign(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var HOOKS = [
"onChange",
"onClose",
"onDayCreate",
"onDestroy",
"onKeyDown",
"onMonthChange",
"onOpen",
"onParseConfig",
"onReady",
"onValueUpdate",
"onYearChange",
"onPreCalendarPosition",
];
var defaults = {
_disable: [],
_enable: [],
allowInput: false,
altFormat: "F j, Y",
altInput: false,
altInputClass: "form-control input",
animate: typeof window === "object" &&
window.navigator.userAgent.indexOf("MSIE") === -1,
ariaDateFormat: "F j, Y",
clickOpens: true,
closeOnSelect: true,
conjunction: ", ",
dateFormat: "Y-m-d",
defaultHour: 12,
defaultMinute: 0,
defaultSeconds: 0,
disable: [],
disableMobile: false,
enable: [],
enableSeconds: false,
enableTime: false,
errorHandler: function (err) {
return typeof console !== "undefined" && console.warn(err);
},
getWeek: function (givenDate) {
var date = new Date(givenDate.getTime());
date.setHours(0, 0, 0, 0);
// Thursday in current week decides the year.
date.setDate(date.getDate() + 3 - ((date.getDay() + 6) % 7));
// January 4 is always in week 1.
var week1 = new Date(date.getFullYear(), 0, 4);
// Adjust to Thursday in week 1 and count number of weeks from date to week1.
return (1 +
Math.round(((date.getTime() - week1.getTime()) / 86400000 -
3 +
((week1.getDay() + 6) % 7)) /
7));
},
hourIncrement: 1,
ignoredFocusElements: [],
inline: false,
locale: "default",
minuteIncrement: 5,
mode: "single",
monthSelectorType: "dropdown",
nextArrow: "<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M13.207 8.472l-7.854 7.854-0.707-0.707 7.146-7.146-7.146-7.148 0.707-0.707 7.854 7.854z' /></svg>",
noCalendar: false,
now: new Date(),
onChange: [],
onClose: [],
onDayCreate: [],
onDestroy: [],
onKeyDown: [],
onMonthChange: [],
onOpen: [],
onParseConfig: [],
onReady: [],
onValueUpdate: [],
onYearChange: [],
onPreCalendarPosition: [],
plugins: [],
position: "auto",
positionElement: undefined,
prevArrow: "<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M5.207 8.471l7.146 7.147-0.707 0.707-7.853-7.854 7.854-7.853 0.707 0.707-7.147 7.146z' /></svg>",
shorthandCurrentMonth: false,
showMonths: 1,
static: false,
time_24hr: false,
weekNumbers: false,
wrap: false
};
var english = {
weekdays: {
shorthand: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
longhand: [
"Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
]
},
months: {
shorthand: [
"Jan",
"Feb",
"Mar",
"Apr",
"May",
"Jun",
"Jul",
"Aug",
"Sep",
"Oct",
"Nov",
"Dec",
],
longhand: [
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December",
]
},
daysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
firstDayOfWeek: 0,
ordinal: function (nth) {
var s = nth % 100;
if (s > 3 && s < 21)
return "th";
switch (s % 10) {
case 1:
return "st";
case 2:
return "nd";
case 3:
return "rd";
default:
return "th";
}
},
rangeSeparator: " to ",
weekAbbreviation: "Wk",
scrollTitle: "Scroll to increment",
toggleTitle: "Click to toggle",
amPM: ["AM", "PM"],
yearAriaLabel: "Year",
hourAriaLabel: "Hour",
minuteAriaLabel: "Minute",
time_24hr: false
};
var pad = function (number) { return ("0" + number).slice(-2); };
var int = function (bool) { return (bool === true ? 1 : 0); };
/* istanbul ignore next */
function debounce(func, wait, immediate) {
if (immediate === void 0) { immediate = false; }
var timeout;
return function () {
var context = this, args = arguments;
timeout !== null && clearTimeout(timeout);
timeout = window.setTimeout(function () {
timeout = null;
if (!immediate)
func.apply(context, args);
}, wait);
if (immediate && !timeout)
func.apply(context, args);
};
}
var arrayify = function (obj) {
return obj instanceof Array ? obj : [obj];
};
function toggleClass(elem, className, bool) {
if (bool === true)
return elem.classList.add(className);
elem.classList.remove(className);
}
function createElement(tag, className, content) {
var e = window.document.createElement(tag);
className = className || "";
content = content || "";
e.className = className;
if (content !== undefined)
e.textContent = content;
return e;
}
function clearNode(node) {
while (node.firstChild)
node.removeChild(node.firstChild);
}
function findParent(node, condition) {
if (condition(node))
return node;
else if (node.parentNode)
return findParent(node.parentNode, condition);
return undefined; // nothing found
}
function createNumberInput(inputClassName, opts) {
var wrapper = createElement("div", "numInputWrapper"), numInput = createElement("input", "numInput " + inputClassName), arrowUp = createElement("span", "arrowUp"), arrowDown = createElement("span", "arrowDown");
if (navigator.userAgent.indexOf("MSIE 9.0") === -1) {
numInput.type = "number";
}
else {
numInput.type = "text";
numInput.pattern = "\\d*";
}
if (opts !== undefined)
for (var key in opts)
numInput.setAttribute(key, opts[key]);
wrapper.appendChild(numInput);
wrapper.appendChild(arrowUp);
wrapper.appendChild(arrowDown);
return wrapper;
}
function getEventTarget(event) {
if (typeof event.composedPath === "function") {
var path = event.composedPath();
return path[0];
}
return event.target;
}
var doNothing = function () { return undefined; };
var monthToStr = function (monthNumber, shorthand, locale) { return locale.months[shorthand ? "shorthand" : "longhand"][monthNumber]; };
var revFormat = {
D: doNothing,
F: function (dateObj, monthName, locale) {
dateObj.setMonth(locale.months.longhand.indexOf(monthName));
},
G: function (dateObj, hour) {
dateObj.setHours(parseFloat(hour));
},
H: function (dateObj, hour) {
dateObj.setHours(parseFloat(hour));
},
J: function (dateObj, day) {
dateObj.setDate(parseFloat(day));
},
K: function (dateObj, amPM, locale) {
dateObj.setHours((dateObj.getHours() % 12) +
12 * int(new RegExp(locale.amPM[1], "i").test(amPM)));
},
M: function (dateObj, shortMonth, locale) {
dateObj.setMonth(locale.months.shorthand.indexOf(shortMonth));
},
S: function (dateObj, seconds) {
dateObj.setSeconds(parseFloat(seconds));
},
U: function (_, unixSeconds) { return new Date(parseFloat(unixSeconds) * 1000); },
W: function (dateObj, weekNum, locale) {
var weekNumber = parseInt(weekNum);
var date = new Date(dateObj.getFullYear(), 0, 2 + (weekNumber - 1) * 7, 0, 0, 0, 0);
date.setDate(date.getDate() - date.getDay() + locale.firstDayOfWeek);
return date;
},
Y: function (dateObj, year) {
dateObj.setFullYear(parseFloat(year));
},
Z: function (_, ISODate) { return new Date(ISODate); },
d: function (dateObj, day) {
dateObj.setDate(parseFloat(day));
},
h: function (dateObj, hour) {
dateObj.setHours(parseFloat(hour));
},
i: function (dateObj, minutes) {
dateObj.setMinutes(parseFloat(minutes));
},
j: function (dateObj, day) {
dateObj.setDate(parseFloat(day));
},
l: doNothing,
m: function (dateObj, month) {
dateObj.setMonth(parseFloat(month) - 1);
},
n: function (dateObj, month) {
dateObj.setMonth(parseFloat(month) - 1);
},
s: function (dateObj, seconds) {
dateObj.setSeconds(parseFloat(seconds));
},
u: function (_, unixMillSeconds) {
return new Date(parseFloat(unixMillSeconds));
},
w: doNothing,
y: function (dateObj, year) {
dateObj.setFullYear(2000 + parseFloat(year));
}
};
var tokenRegex = {
D: "(\\w+)",
F: "(\\w+)",
G: "(\\d\\d|\\d)",
H: "(\\d\\d|\\d)",
J: "(\\d\\d|\\d)\\w+",
K: "",
M: "(\\w+)",
S: "(\\d\\d|\\d)",
U: "(.+)",
W: "(\\d\\d|\\d)",
Y: "(\\d{4})",
Z: "(.+)",
d: "(\\d\\d|\\d)",
h: "(\\d\\d|\\d)",
i: "(\\d\\d|\\d)",
j: "(\\d\\d|\\d)",
l: "(\\w+)",
m: "(\\d\\d|\\d)",
n: "(\\d\\d|\\d)",
s: "(\\d\\d|\\d)",
u: "(.+)",
w: "(\\d\\d|\\d)",
y: "(\\d{2})"
};
var formats = {
// get the date in UTC
Z: function (date) { return date.toISOString(); },
// weekday name, short, e.g. Thu
D: function (date, locale, options) {
return locale.weekdays.shorthand[formats.w(date, locale, options)];
},
// full month name e.g. January
F: function (date, locale, options) {
return monthToStr(formats.n(date, locale, options) - 1, false, locale);
},
// padded hour 1-12
G: function (date, locale, options) {
return pad(formats.h(date, locale, options));
},
// hours with leading zero e.g. 03
H: function (date) { return pad(date.getHours()); },
// day (1-30) with ordinal suffix e.g. 1st, 2nd
J: function (date, locale) {
return locale.ordinal !== undefined
? date.getDate() + locale.ordinal(date.getDate())
: date.getDate();
},
// AM/PM
K: function (date, locale) { return locale.amPM[int(date.getHours() > 11)]; },
// shorthand month e.g. Jan, Sep, Oct, etc
M: function (date, locale) {
return monthToStr(date.getMonth(), true, locale);
},
// seconds 00-59
S: function (date) { return pad(date.getSeconds()); },
// unix timestamp
U: function (date) { return date.getTime() / 1000; },
W: function (date, _, options) {
return options.getWeek(date);
},
// full year e.g. 2016
Y: function (date) { return date.getFullYear(); },
// day in month, padded (01-30)
d: function (date) { return pad(date.getDate()); },
// hour from 1-12 (am/pm)
h: function (date) { return (date.getHours() % 12 ? date.getHours() % 12 : 12); },
// minutes, padded with leading zero e.g. 09
i: function (date) { return pad(date.getMinutes()); },
// day in month (1-30)
j: function (date) { return date.getDate(); },
// weekday name, full, e.g. Thursday
l: function (date, locale) {
return locale.weekdays.longhand[date.getDay()];
},
// padded month number (01-12)
m: function (date) { return pad(date.getMonth() + 1); },
// the month number (1-12)
n: function (date) { return date.getMonth() + 1; },
// seconds 0-59
s: function (date) { return date.getSeconds(); },
// Unix Milliseconds
u: function (date) { return date.getTime(); },
// number of the day of the week
w: function (date) { return date.getDay(); },
// last two digits of year e.g. 16 for 2016
y: function (date) { return String(date.getFullYear()).substring(2); }
};
var createDateFormatter = function (_a) {
var _b = _a.config, config = _b === void 0 ? defaults : _b, _c = _a.l10n, l10n = _c === void 0 ? english : _c;
return function (dateObj, frmt, overrideLocale) {
var locale = overrideLocale || l10n;
if (config.formatDate !== undefined) {
return config.formatDate(dateObj, frmt, locale);
}
return frmt
.split("")
.map(function (c, i, arr) {
return formats[c] && arr[i - 1] !== "\\"
? formats[c](dateObj, locale, config)
: c !== "\\"
? c
: "";
})
.join("");
};
};
var createDateParser = function (_a) {
var _b = _a.config, config = _b === void 0 ? defaults : _b, _c = _a.l10n, l10n = _c === void 0 ? english : _c;
return function (date, givenFormat, timeless, customLocale) {
if (date !== 0 && !date)
return undefined;
var locale = customLocale || l10n;
var parsedDate;
var dateOrig = date;
if (date instanceof Date)
parsedDate = new Date(date.getTime());
else if (typeof date !== "string" &&
date.toFixed !== undefined // timestamp
)
// create a copy
parsedDate = new Date(date);
else if (typeof date === "string") {
// date string
var format = givenFormat || (config || defaults).dateFormat;
var datestr = String(date).trim();
if (datestr === "today") {
parsedDate = new Date();
timeless = true;
}
else if (/Z$/.test(datestr) ||
/GMT$/.test(datestr) // datestrings w/ timezone
)
parsedDate = new Date(date);
else if (config && config.parseDate)
parsedDate = config.parseDate(date, format);
else {
parsedDate =
!config || !config.noCalendar
? new Date(new Date().getFullYear(), 0, 1, 0, 0, 0, 0)
: new Date(new Date().setHours(0, 0, 0, 0));
var matched = void 0, ops = [];
for (var i = 0, matchIndex = 0, regexStr = ""; i < format.length; i++) {
var token_1 = format[i];
var isBackSlash = token_1 === "\\";
var escaped = format[i - 1] === "\\" || isBackSlash;
if (tokenRegex[token_1] && !escaped) {
regexStr += tokenRegex[token_1];
var match = new RegExp(regexStr).exec(date);
if (match && (matched = true)) {
ops[token_1 !== "Y" ? "push" : "unshift"]({
fn: revFormat[token_1],
val: match[++matchIndex]
});
}
}
else if (!isBackSlash)
regexStr += "."; // don't really care
ops.forEach(function (_a) {
var fn = _a.fn, val = _a.val;
return (parsedDate = fn(parsedDate, val, locale) || parsedDate);
});
}
parsedDate = matched ? parsedDate : undefined;
}
}
/* istanbul ignore next */
if (!(parsedDate instanceof Date && !isNaN(parsedDate.getTime()))) {
config.errorHandler(new Error("Invalid date provided: " + dateOrig));
return undefined;
}
if (timeless === true)
parsedDate.setHours(0, 0, 0, 0);
return parsedDate;
};
};
/**
* Compute the difference in dates, measured in ms
*/
function compareDates(date1, date2, timeless) {
if (timeless === void 0) { timeless = true; }
if (timeless !== false) {
return (new Date(date1.getTime()).setHours(0, 0, 0, 0) -
new Date(date2.getTime()).setHours(0, 0, 0, 0));
}
return date1.getTime() - date2.getTime();
}
var isBetween = function (ts, ts1, ts2) {
return ts > Math.min(ts1, ts2) && ts < Math.max(ts1, ts2);
};
var duration = {
DAY: 86400000
};
if (typeof Object.assign !== "function") {
Object.assign = function (target) {
var args = [];
for (var _i = 1; _i < arguments.length; _i++) {
args[_i - 1] = arguments[_i];
}
if (!target) {
throw TypeError("Cannot convert undefined or null to object");
}
var _loop_1 = function (source) {
if (source) {
Object.keys(source).forEach(function (key) { return (target[key] = source[key]); });
}
};
for (var _a = 0, args_1 = args; _a < args_1.length; _a++) {
var source = args_1[_a];
_loop_1(source);
}
return target;
};
}
var DEBOUNCED_CHANGE_MS = 300;
function FlatpickrInstance(element, instanceConfig) {
var self = {
config: __assign({}, defaults, flatpickr.defaultConfig),
l10n: english
};
self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });
self._handlers = [];
self.pluginElements = [];
self.loadedPlugins = [];
self._bind = bind;
self._setHoursFromDate = setHoursFromDate;
self._positionCalendar = positionCalendar;
self.changeMonth = changeMonth;
self.changeYear = changeYear;
self.clear = clear;
self.close = close;
self._createElement = createElement;
self.destroy = destroy;
self.isEnabled = isEnabled;
self.jumpToDate = jumpToDate;
self.open = open;
self.redraw = redraw;
self.set = set;
self.setDate = setDate;
self.toggle = toggle;
function setupHelperFunctions() {
self.utils = {
getDaysInMonth: function (month, yr) {
if (month === void 0) { month = self.currentMonth; }
if (yr === void 0) { yr = self.currentYear; }
if (month === 1 && ((yr % 4 === 0 && yr % 100 !== 0) || yr % 400 === 0))
return 29;
return self.l10n.daysInMonth[month];
}
};
}
function init() {
self.element = self.input = element;
self.isOpen = false;
parseConfig();
setupLocale();
setupInputs();
setupDates();
setupHelperFunctions();
if (!self.isMobile)
build();
bindEvents();
if (self.selectedDates.length || self.config.noCalendar) {
if (self.config.enableTime) {
setHoursFromDate(self.config.noCalendar
? self.latestSelectedDateObj || self.config.minDate
: undefined);
}
updateValue(false);
}
setCalendarWidth();
self.showTimeInput =
self.selectedDates.length > 0 || self.config.noCalendar;
var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
/* TODO: investigate this further
Currently, there is weird positioning behavior in safari causing pages
to scroll up. https://github.com/chmln/flatpickr/issues/563
However, most browsers are not Safari and positioning is expensive when used
in scale. https://github.com/chmln/flatpickr/issues/1096
*/
if (!self.isMobile && isSafari) {
positionCalendar();
}
triggerEvent("onReady");
}
function bindToInstance(fn) {
return fn.bind(self);
}
function setCalendarWidth() {
var config = self.config;
if (config.weekNumbers === false && config.showMonths === 1)
return;
else if (config.noCalendar !== true) {
window.requestAnimationFrame(function () {
if (self.calendarContainer !== undefined) {
self.calendarContainer.style.visibility = "hidden";
self.calendarContainer.style.display = "block";
}
if (self.daysContainer !== undefined) {
var daysWidth = (self.days.offsetWidth + 1) * config.showMonths;
self.daysContainer.style.width = daysWidth + "px";
self.calendarContainer.style.width =
daysWidth +
(self.weekWrapper !== undefined
? self.weekWrapper.offsetWidth
: 0) +
"px";
self.calendarContainer.style.removeProperty("visibility");
self.calendarContainer.style.removeProperty("display");
}
});
}
}
/**
* The handler for all events targeting the time inputs
*/
function updateTime(e) {
if (self.selectedDates.length === 0) {
setDefaultTime();
}
if (e !== undefined && e.type !== "blur") {
timeWrapper(e);
}
var prevValue = self._input.value;
setHoursFromInputs();
updateValue();
if (self._input.value !== prevValue) {
self._debouncedChange();
}
}
function ampm2military(hour, amPM) {
return (hour % 12) + 12 * int(amPM === self.l10n.amPM[1]);
}
function military2ampm(hour) {
switch (hour % 24) {
case 0:
case 12:
return 12;
default:
return hour % 12;
}
}
/**
* Syncs the selected date object time with user's time input
*/
function setHoursFromInputs() {
if (self.hourElement === undefined || self.minuteElement === undefined)
return;
var hours = (parseInt(self.hourElement.value.slice(-2), 10) || 0) % 24, minutes = (parseInt(self.minuteElement.value, 10) || 0) % 60, seconds = self.secondElement !== undefined
? (parseInt(self.secondElement.value, 10) || 0) % 60
: 0;
if (self.amPM !== undefined) {
hours = ampm2military(hours, self.amPM.textContent);
}
var limitMinHours = self.config.minTime !== undefined ||
(self.config.minDate &&
self.minDateHasTime &&
self.latestSelectedDateObj &&
compareDates(self.latestSelectedDateObj, self.config.minDate, true) ===
0);
var limitMaxHours = self.config.maxTime !== undefined ||
(self.config.maxDate &&
self.maxDateHasTime &&
self.latestSelectedDateObj &&
compareDates(self.latestSelectedDateObj, self.config.maxDate, true) ===
0);
if (limitMaxHours) {
var maxTime = self.config.maxTime !== undefined
? self.config.maxTime
: self.config.maxDate;
hours = Math.min(hours, maxTime.getHours());
if (hours === maxTime.getHours())
minutes = Math.min(minutes, maxTime.getMinutes());
if (minutes === maxTime.getMinutes())
seconds = Math.min(seconds, maxTime.getSeconds());
}
if (limitMinHours) {
var minTime = self.config.minTime !== undefined
? self.config.minTime
: self.config.minDate;
hours = Math.max(hours, minTime.getHours());
if (hours === minTime.getHours())
minutes = Math.max(minutes, minTime.getMinutes());
if (minutes === minTime.getMinutes())
seconds = Math.max(seconds, minTime.getSeconds());
}
setHours(hours, minutes, seconds);
}
/**
* Syncs time input values with a date
*/
function setHoursFromDate(dateObj) {
var date = dateObj || self.latestSelectedDateObj;
if (date)
setHours(date.getHours(), date.getMinutes(), date.getSeconds());
}
function setDefaultHours() {
var hours = self.config.defaultHour;
var minutes = self.config.defaultMinute;
var seconds = self.config.defaultSeconds;
if (self.config.minDate !== undefined) {
var minHr = self.config.minDate.getHours();
var minMinutes = self.config.minDate.getMinutes();
hours = Math.max(hours, minHr);
if (hours === minHr)
minutes = Math.max(minMinutes, minutes);
if (hours === minHr && minutes === minMinutes)
seconds = self.config.minDate.getSeconds();
}
if (self.config.maxDate !== undefined) {
var maxHr = self.config.maxDate.getHours();
var maxMinutes = self.config.maxDate.getMinutes();
hours = Math.min(hours, maxHr);
if (hours === maxHr)
minutes = Math.min(maxMinutes, minutes);
if (hours === maxHr && minutes === maxMinutes)
seconds = self.config.maxDate.getSeconds();
}
setHours(hours, minutes, seconds);
}
/**
* Sets the hours, minutes, and optionally seconds
* of the latest selected date object and the
* corresponding time inputs
* @param {Number} hours the hour. whether its military
* or am-pm gets inferred from config
* @param {Number} minutes the minutes
* @param {Number} seconds the seconds (optional)
*/
function setHours(hours, minutes, seconds) {
if (self.latestSelectedDateObj !== undefined) {
self.latestSelectedDateObj.setHours(hours % 24, minutes, seconds || 0, 0);
}
if (!self.hourElement || !self.minuteElement || self.isMobile)
return;
self.hourElement.value = pad(!self.config.time_24hr
? ((12 + hours) % 12) + 12 * int(hours % 12 === 0)
: hours);
self.minuteElement.value = pad(minutes);
if (self.amPM !== undefined)
self.amPM.textContent = self.l10n.amPM[int(hours >= 12)];
if (self.secondElement !== undefined)
self.secondElement.value = pad(seconds);
}
/**
* Handles the year input and incrementing events
* @param {Event} event the keyup or increment event
*/
function onYearInput(event) {
var year = parseInt(event.target.value) + (event.delta || 0);
if (year / 1000 > 1 ||
(event.key === "Enter" && !/[^\d]/.test(year.toString()))) {
changeYear(year);
}
}
/**
* Essentially addEventListener + tracking
* @param {Element} element the element to addEventListener to
* @param {String} event the event name
* @param {Function} handler the event handler
*/
function bind(element, event, handler, options) {
if (event instanceof Array)
return event.forEach(function (ev) { return bind(element, ev, handler, options); });
if (element instanceof Array)
return element.forEach(function (el) { return bind(el, event, handler, options); });
element.addEventListener(event, handler, options);
self._handlers.push({
element: element,
event: event,
handler: handler,
options: options
});
}
/**
* A mousedown handler which mimics click.
* Minimizes latency, since we don't need to wait for mouseup in most cases.
* Also, avoids handling right clicks.
*
* @param {Function} handler the event handler
*/
function onClick(handler) {
return function (evt) {
evt.which === 1 && handler(evt);
};
}
function triggerChange() {
triggerEvent("onChange");
}
/**
* Adds all the necessary event listeners
*/
function bindEvents() {
if (self.config.wrap) {
["open", "close", "toggle", "clear"].forEach(function (evt) {
Array.prototype.forEach.call(self.element.querySelectorAll("[data-" + evt + "]"), function (el) {
return bind(el, "click", self[evt]);
});
});
}
if (self.isMobile) {
setupMobile();
return;
}
var debouncedResize = debounce(onResize, 50);
self._debouncedChange = debounce(triggerChange, DEBOUNCED_CHANGE_MS);
if (self.daysContainer && !/iPhone|iPad|iPod/i.test(navigator.userAgent))
bind(self.daysContainer, "mouseover", function (e) {
if (self.config.mode === "range")
onMouseOver(e.target);
});
bind(window.document.body, "keydown", onKeyDown);
if (!self.config.inline && !self.config.static)
bind(window, "resize", debouncedResize);
if (window.ontouchstart !== undefined)
bind(window.document, "touchstart", documentClick);
else
bind(window.document, "mousedown", onClick(documentClick));
bind(window.document, "focus", documentClick, { capture: true });
if (self.config.clickOpens === true) {
bind(self._input, "focus", self.open);
bind(self._input, "mousedown", onClick(self.open));
}
if (self.daysContainer !== undefined) {
bind(self.monthNav, "mousedown", onClick(onMonthNavClick));
bind(self.monthNav, ["keyup", "increment"], onYearInput);
bind(self.daysContainer, "mousedown", onClick(selectDate));
}
if (self.timeContainer !== undefined &&
self.minuteElement !== undefined &&
self.hourElement !== undefined) {
var selText = function (e) {
return e.target.select();
};
bind(self.timeContainer, ["increment"], updateTime);
bind(self.timeContainer, "blur", updateTime, { capture: true });
bind(self.timeContainer, "mousedown", onClick(timeIncrement));
bind([self.hourElement, self.minuteElement], ["focus", "click"], selText);
if (self.secondElement !== undefined)
bind(self.secondElement, "focus", function () { return self.secondElement && self.secondElement.select(); });
if (self.amPM !== undefined) {
bind(self.amPM, "mousedown", onClick(function (e) {
updateTime(e);
triggerChange();
}));
}
}
}
/**
* Set the calendar view to a particular date.
* @param {Date} jumpDate the date to set the view to
* @param {boolean} triggerChange if change events should be triggered
*/
function jumpToDate(jumpDate, triggerChange) {
var jumpTo = jumpDate !== undefined
? self.parseDate(jumpDate)
: self.latestSelectedDateObj ||
(self.config.minDate && self.config.minDate > self.now
? self.config.minDate
: self.config.maxDate && self.config.maxDate < self.now
? self.config.maxDate
: self.now);
var oldYear = self.currentYear;
var oldMonth = self.currentMonth;
try {
if (jumpTo !== undefined) {
self.currentYear = jumpTo.getFullYear();
self.currentMonth = jumpTo.getMonth();
}
}
catch (e) {
/* istanbul ignore next */
e.message = "Invalid date supplied: " + jumpTo;
self.config.errorHandler(e);
}
if (triggerChange && self.currentYear !== oldYear) {
triggerEvent("onYearChange");
buildMonthSwitch();
}
if (triggerChange &&
(self.currentYear !== oldYear || self.currentMonth !== oldMonth)) {
triggerEvent("onMonthChange");
}
self.redraw();
}
/**
* The up/down arrow handler for time inputs
* @param {Event} e the click event
*/
function timeIncrement(e) {
if (~e.target.className.indexOf("arrow"))
incrementNumInput(e, e.target.classList.contains("arrowUp") ? 1 : -1);
}
/**
* Increments/decrements the value of input associ-
* ated with the up/down arrow by dispatching an
* "increment" event on the input.
*
* @param {Event} e the click event
* @param {Number} delta the diff (usually 1 or -1)
* @param {Element} inputElem the input element
*/
function incrementNumInput(e, delta, inputElem) {
var target = e && e.target;
var input = inputElem ||
(target && target.parentNode && target.parentNode.firstChild);
var event = createEvent("increment");
event.delta = delta;
input && input.dispatchEvent(event);
}
function build() {
var fragment = window.document.createDocumentFragment();
self.calendarContainer = createElement("div", "flatpickr-calendar");
self.calendarContainer.tabIndex = -1;
if (!self.config.noCalendar) {
fragment.appendChild(buildMonthNav());
self.innerContainer = createElement("div", "flatpickr-innerContainer");
if (self.config.weekNumbers) {
var _a = buildWeeks(), weekWrapper = _a.weekWrapper, weekNumbers = _a.weekNumbers;
self.innerContainer.appendChild(weekWrapper);
self.weekNumbers = weekNumbers;
self.weekWrapper = weekWrapper;
}
self.rContainer = createElement("div", "flatpickr-rContainer");
self.rContainer.appendChild(buildWeekdays());
if (!self.daysContainer) {
self.daysContainer = createElement("div", "flatpickr-days");
self.daysContainer.tabIndex = -1;
}
buildDays();
self.rContainer.appendChild(self.daysContainer);
self.innerContainer.appendChild(self.rContainer);
fragment.appendChild(self.innerContainer);
}
if (self.config.enableTime) {
fragment.appendChild(buildTime());
}
toggleClass(self.calendarContainer, "rangeMode", self.config.mode === "range");
toggleClass(self.calendarContainer, "animate", self.config.animate === true);
toggleClass(self.calendarContainer, "multiMonth", self.config.showMonths > 1);
self.calendarContainer.appendChild(fragment);
var customAppend = self.config.appendTo !== undefined &&
self.config.appendTo.nodeType !== undefined;
if (self.config.inline || self.config.static) {
self.calendarContainer.classList.add(self.config.inline ? "inline" : "static");
if (self.config.inline) {
if (!customAppend && self.element.parentNode)
self.element.parentNode.insertBefore(self.calendarContainer, self._input.nextSibling);
else if (self.config.appendTo !== undefined)
self.config.appendTo.appendChild(self.calendarContainer);
}
if (self.config.static) {
var wrapper = createElement("div", "flatpickr-wrapper");
if (self.element.parentNode)
self.element.parentNode.insertBefore(wrapper, self.element);
wrapper.appendChild(self.element);
if (self.altInput)
wrapper.appendChild(self.altInput);
wrapper.appendChild(self.calendarContainer);
}
}
if (!self.config.static && !self.config.inline)
(self.config.appendTo !== undefined
? self.config.appendTo
: window.document.body).appendChild(self.calendarContainer);
}
function createDay(className, date, dayNumber, i) {
var dateIsEnabled = isEnabled(date, true), dayElement = createElement("span", "flatpickr-day " + className, date.getDate().toString());
dayElement.dateObj = date;
dayElement.$i = i;
dayElement.setAttribute("aria-label", self.formatDate(date, self.config.ariaDateFormat));
if (className.indexOf("hidden") === -1 &&
compareDates(date, self.now) === 0) {
self.todayDateElem = dayElement;
dayElement.classList.add("today");
dayElement.setAttribute("aria-current", "date");
}
if (dateIsEnabled) {
dayElement.tabIndex = -1;
if (isDateSelected(date)) {
dayElement.classList.add("selected");
self.selectedDateElem = dayElement;
if (self.config.mode === "range") {
toggleClass(dayElement, "startRange", self.selectedDates[0] &&
compareDates(date, self.selectedDates[0], true) === 0);
toggleClass(dayElement, "endRange", self.selectedDates[1] &&
compareDates(date, self.selectedDates[1], true) === 0);
if (className === "nextMonthDay")
dayElement.classList.add("inRange");
}
}
}
else {
dayElement.classList.add("flatpickr-disabled");
}
if (self.config.mode === "range") {
if (isDateInRange(date) && !isDateSelected(date))
dayElement.classList.add("inRange");
}
if (self.weekNumbers &&
self.config.showMonths === 1 &&
className !== "prevMonthDay" &&
dayNumber % 7 === 1) {
self.weekNumbers.insertAdjacentHTML("beforeend", "<span class='flatpickr-day'>" + self.config.getWeek(date) + "</span>");
}
triggerEvent("onDayCreate", dayElement);
return dayElement;
}
function focusOnDayElem(targetNode) {
targetNode.focus();
if (self.config.mode === "range")
onMouseOver(targetNode);
}
function getFirstAvailableDay(delta) {
var startMonth = delta > 0 ? 0 : self.config.showMonths - 1;
var endMonth = delta > 0 ? self.config.showMonths : -1;
for (var m = startMonth; m != endMonth; m += delta) {
var month = self.daysContainer.children[m];
var startIndex = delta > 0 ? 0 : month.children.length - 1;
var endIndex = delta > 0 ? month.children.length : -1;
for (var i = startIndex; i != endIndex; i += delta) {
var c = month.children[i];
if (c.className.indexOf("hidden") === -1 && isEnabled(c.dateObj))
return c;
}
}
return undefined;
}
function getNextAvailableDay(current, delta) {
var givenMonth = current.className.indexOf("Month") === -1
? current.dateObj.getMonth()
: self.currentMonth;
var endMonth = delta > 0 ? self.config.showMonths : -1;
var loopDelta = delta > 0 ? 1 : -1;
for (var m = givenMonth - self.currentMonth; m != endMonth; m += loopDelta) {
var month = self.daysContainer.children[m];
var startIndex = givenMonth - self.currentMonth === m
? current.$i + delta
: delta < 0
? month.children.length - 1
: 0;
var numMonthDays = month.children.length;
for (var i = startIndex; i >= 0 && i < numMonthDays && i != (delta > 0 ? numMonthDays : -1); i += loopDelta) {
var c = month.children[i];
if (c.className.indexOf("hidden") === -1 &&
isEnabled(c.dateObj) &&
Math.abs(current.$i - i) >= Math.abs(delta))
return focusOnDayElem(c);
}
}
self.changeMonth(loopDelta);
focusOnDay(getFirstAvailableDay(loopDelta), 0);
return undefined;
}
function focusOnDay(current, offset) {
var dayFocused = isInView(document.activeElement || document.body);
var startElem = current !== undefined
? current
: dayFocused
? document.activeElement
: self.selectedDateElem !== undefined && isInView(self.selectedDateElem)
? self.selectedDateElem
: self.todayDateElem !== undefined && isInView(self.todayDateElem)
? self.todayDateElem
: getFirstAvailableDay(offset > 0 ? 1 : -1);
if (startElem === undefined)
return self._input.focus();
if (!dayFocused)
return focusOnDayElem(startElem);
getNextAvailableDay(startElem, offset);
}
function buildMonthDays(year, month) {
var firstOfMonth = (new Date(year, month, 1).getDay() - self.l10n.firstDayOfWeek + 7) % 7;
var prevMonthDays = self.utils.getDaysInMonth((month - 1 + 12) % 12);
var daysInMonth = self.utils.getDaysInMonth(month), days = window.document.createDocumentFragment(), isMultiMonth = self.config.showMonths > 1, prevMonthDayClass = isMultiMonth ? "prevMonthDay hidden" : "prevMonthDay", nextMonthDayClass = isMultiMonth ? "nextMonthDay hidden" : "nextMonthDay";
var dayNumber = prevMonthDays + 1 - firstOfMonth, dayIndex = 0;
// prepend days from the ending of previous month
for (; dayNumber <= prevMonthDays; dayNumber++, dayIndex++) {
days.appendChild(createDay(prevMonthDayClass, new Date(year, month - 1, dayNumber), dayNumber, dayIndex));
}
// Start at 1 since there is no 0th day
for (dayNumber = 1; dayNumber <= daysInMonth; dayNumber++, dayIndex++) {
days.appendChild(createDay("", new Date(year, month, dayNumber), dayNumber, dayIndex));
}
// append days from the next month
for (var dayNum = daysInMonth + 1; dayNum <= 42 - firstOfMonth &&
(self.config.showMonths === 1 || dayIndex % 7 !== 0); dayNum++, dayIndex++) {
days.appendChild(createDay(nextMonthDayClass, new Date(year, month + 1, dayNum % daysInMonth), dayNum, dayIndex));
}
//updateNavigationCurrentMonth();
var dayContainer = createElement("div", "dayContainer");
dayContainer.appendChild(days);
return dayContainer;
}
function buildDays() {
if (self.daysContainer === undefined) {
return;
}
clearNode(self.daysContainer);
// TODO: week numbers for each month
if (self.weekNumbers)
clearNode(self.weekNumbers);
var frag = document.createDocumentFragment();
for (var i = 0; i < self.config.showMonths; i++) {
var d = new Date(self.currentYear, self.currentMonth, 1);
d.setMonth(self.currentMonth + i);
frag.appendChild(buildMonthDays(d.getFullYear(), d.getMonth()));
}
self.daysContainer.appendChild(frag);
self.days = self.daysContainer.firstChild;
if (self.config.mode === "range" && self.selectedDates.length === 1) {
onMouseOver();
}
}
function buildMonthSwitch() {
if (self.config.showMonths > 1 ||
self.config.monthSelectorType !== "dropdown")
return;
var shouldBuildMonth = function (month) {
if (self.config.minDate !== undefined &&
self.currentYear === self.config.minDate.getFullYear() &&
month < self.config.minDate.getMonth()) {
return false;
}
return !(self.config.maxDate !== undefined &&
self.currentYear === self.config.maxDate.getFullYear() &&
month > self.config.maxDate.getMonth());
};
self.monthsDropdownContainer.tabIndex = -1;
self.monthsDropdownContainer.innerHTML = "";
for (var i = 0; i < 12; i++) {
if (!shouldBuildMonth(i))
continue;
var month = createElement("option", "flatpickr-monthDropdown-month");
month.value = new Date(self.currentYear, i).getMonth().toString();
month.textContent = monthToStr(i, self.config.shorthandCurrentMonth, self.l10n);
month.tabIndex = -1;
if (self.currentMonth === i) {
month.selected = true;
}
self.monthsDropdownContainer.appendChild(month);
}
}
function buildMonth() {
var container = createElement("div", "flatpickr-month");
var monthNavFragment = window.document.createDocumentFragment();
var monthElement;
if (self.config.showMonths > 1 ||
self.config.monthSelectorType === "static") {
monthElement = createElement("span", "cur-month");
}
else {
self.monthsDropdownContainer = createElement("select", "flatpickr-monthDropdown-months");
bind(self.monthsDropdownContainer, "change", function (e) {
var target = e.target;
var selectedMonth = parseInt(target.value, 10);
self.changeMonth(selectedMonth - self.currentMonth);
triggerEvent("onMonthChange");
});
buildMonthSwitch();
monthElement = self.monthsDropdownContainer;
}
var yearInput = createNumberInput("cur-year", { tabindex: "-1" });
var yearElement = yearInput.getElementsByTagName("input")[0];
yearElement.setAttribute("aria-label", self.l10n.yearAriaLabel);
if (self.config.minDate) {
yearElement.setAttribute("min", self.config.minDate.getFullYear().toString());
}
if (self.config.maxDate) {
yearElement.setAttribute("max", self.config.maxDate.getFullYear().toString());
yearElement.disabled =
!!self.config.minDate &&
self.config.minDate.getFullYear() === self.config.maxDate.getFullYear();
}
var currentMonth = createElement("div", "flatpickr-current-month");
currentMonth.appendChild(monthElement);
currentMonth.appendChild(yearInput);
monthNavFragment.appendChild(currentMonth);
container.appendChild(monthNavFragment);
return {
container: container,
yearElement: yearElement,
monthElement: monthElement
};
}
function buildMonths() {
clearNode(self.monthNav);
self.monthNav.appendChild(self.prevMonthNav);
if (self.config.showMonths) {
self.yearElements = [];
self.monthElements = [];
}
for (var m = self.config.showMonths; m--;) {
var month = buildMonth();
self.yearElements.push(month.yearElement);
self.monthElements.push(month.monthElement);
self.monthNav.appendChild(month.container);
}
self.monthNav.appendChild(self.nextMonthNav);
}
function buildMonthNav() {
self.monthNav = createElement("div", "flatpickr-months");
self.yearElements = [];
self.monthElements = [];
self.prevMonthNav = createElement("span", "flatpickr-prev-month");
self.prevMonthNav.innerHTML = self.config.prevArrow;
self.nextMonthNav = createElement("span", "flatpickr-next-month");
self.nextMonthNav.innerHTML = self.config.nextArrow;
buildMonths();
Object.defineProperty(self, "_hidePrevMonthArrow", {
get: function () { return self.__hidePrevMonthArrow; },
set: function (bool) {
if (self.__hidePrevMonthArrow !== bool) {
toggleClass(self.prevMonthNav, "flatpickr-disabled", bool);
self.__hidePrevMonthArrow = bool;
}
}
});
Object.defineProperty(self, "_hideNextMonthArrow", {
get: function () { return self.__hideNextMonthArrow; },
set: function (bool) {
if (self.__hideNextMonthArrow !== bool) {
toggleClass(self.nextMonthNav, "flatpickr-disabled", bool);
self.__hideNextMonthArrow = bool;
}
}
});
self.currentYearElement = self.yearElements[0];
updateNavigationCurrentMonth();
return self.monthNav;
}
function buildTime() {
self.calendarContainer.classList.add("hasTime");
if (self.config.noCalendar)
self.calendarContainer.classList.add("noCalendar");
self.timeContainer = createElement("div", "flatpickr-time");
self.timeContainer.tabIndex = -1;
var separator = createElement("span", "flatpickr-time-separator", ":");
var hourInput = createNumberInput("flatpickr-hour", {
"aria-label": self.l10n.hourAriaLabel
});
self.hourElement = hourInput.getElementsByTagName("input")[0];
var minuteInput = createNumberInput("flatpickr-minute", {
"aria-label": self.l10n.minuteAriaLabel
});
self.minuteElement = minuteInput.getElementsByTagName("input")[0];
self.hourElement.tabIndex = self.minuteElement.tabIndex = -1;
self.hourElement.value = pad(self.latestSelectedDateObj
? self.latestSelectedDateObj.getHours()
: self.config.time_24hr
? self.config.defaultHour
: military2ampm(self.config.defaultHour));
self.minuteElement.value = pad(self.latestSelectedDateObj
? self.latestSelectedDateObj.getMinutes()
: self.config.defaultMinute);
self.hourElement.setAttribute("step", self.config.hourIncrement.toString());
self.minuteElement.setAttribute("step", self.config.minuteIncrement.toString());
self.hourElement.setAttribute("min", self.config.time_24hr ? "0" : "1");
self.hourElement.setAttribute("max", self.config.time_24hr ? "23" : "12");
self.minuteElement.setAttribute("min", "0");
self.minuteElement.setAttribute("max", "59");
self.timeContainer.appendChild(hourInput);
self.timeContainer.appendChild(separator);
self.timeContainer.appendChild(minuteInput);
if (self.config.time_24hr)
self.timeContainer.classList.add("time24hr");
if (self.config.enableSeconds) {
self.timeContainer.classList.add("hasSeconds");
var secondInput = createNumberInput("flatpickr-second");
self.secondElement = secondInput.getElementsByTagName("input")[0];
self.secondElement.value = pad(self.latestSelectedDateObj
? self.latestSelectedDateObj.getSeconds()
: self.config.defaultSeconds);
self.secondElement.setAttribute("step", self.minuteElement.getAttribute("step"));
self.secondElement.setAttribute("min", "0");
self.secondElement.setAttribute("max", "59");
self.timeContainer.appendChild(createElement("span", "flatpickr-time-separator", ":"));
self.timeContainer.appendChild(secondInput);
}
if (!self.config.time_24hr) {
// add self.amPM if appropriate
self.amPM = createElement("span", "flatpickr-am-pm", self.l10n.amPM[int((self.latestSelectedDateObj
? self.hourElement.value
: self.config.defaultHour) > 11)]);
self.amPM.title = self.l10n.toggleTitle;
self.amPM.tabIndex = -1;
self.timeContainer.appendChild(self.amPM);
}
return self.timeContainer;
}
function buildWeekdays() {
if (!self.weekdayContainer)
self.weekdayContainer = createElement("div", "flatpickr-weekdays");
else
clearNode(self.weekdayContainer);
for (var i = self.config.showMonths; i--;) {
var container = createElement("div", "flatpickr-weekdaycontainer");
self.weekdayContainer.appendChild(container);
}
updateWeekdays();
return self.weekdayContainer;
}
function updateWeekdays() {
if (!self.weekdayContainer) {
return;
}
var firstDayOfWeek = self.l10n.firstDayOfWeek;
var weekdays = self.l10n.weekdays.shorthand.slice();
if (firstDayOfWeek > 0 && firstDayOfWeek < weekdays.length) {
weekdays = weekdays.splice(firstDayOfWeek, weekdays.length).concat(weekdays.splice(0, firstDayOfWeek));
}
for (var i = self.config.showMonths; i--;) {
self.weekdayContainer.children[i].innerHTML = "\n <span class='flatpickr-weekday'>\n " + weekdays.join("</span><span class='flatpickr-weekday'>") + "\n </span>\n ";
}
}
/* istanbul ignore next */
function buildWeeks() {
self.calendarContainer.classList.add("hasWeeks");
var weekWrapper = createElement("div", "flatpickr-weekwrapper");
weekWrapper.appendChild(createElement("span", "flatpickr-weekday", self.l10n.weekAbbreviation));
var weekNumbers = createElement("div", "flatpickr-weeks");
weekWrapper.appendChild(weekNumbers);
return {
weekWrapper: weekWrapper,
weekNumbers: weekNumbers
};
}
function changeMonth(value, isOffset) {
if (isOffset === void 0) { isOffset = true; }
var delta = isOffset ? value : value - self.currentMonth;
if ((delta < 0 && self._hidePrevMonthArrow === true) ||
(delta > 0 && self._hideNextMonthArrow === true))
return;
self.currentMonth += delta;
if (self.currentMonth < 0 || self.currentMonth > 11) {
self.currentYear += self.currentMonth > 11 ? 1 : -1;
self.currentMonth = (self.currentMonth + 12) % 12;
triggerEvent("onYearChange");
buildMonthSwitch();
}
buildDays();
triggerEvent("onMonthChange");
updateNavigationCurrentMonth();
}
function clear(triggerChangeEvent, toInitial) {
if (triggerChangeEvent === void 0) { triggerChangeEvent = true; }
if (toInitial === void 0) { toInitial = true; }
self.input.value = "";
if (self.altInput !== undefined)
self.altInput.value = "";
if (self.mobileInput !== undefined)
self.mobileInput.value = "";
self.selectedDates = [];
self.latestSelectedDateObj = undefined;
if (toInitial === true) {
self.currentYear = self._initialDate.getFullYear();
self.currentMonth = self._initialDate.getMonth();
}
self.showTimeInput = false;
if (self.config.enableTime === true) {
setDefaultHours();
}
self.redraw();
if (triggerChangeEvent)
// triggerChangeEvent is true (default) or an Event
triggerEvent("onChange");
}
function close() {
self.isOpen = false;
if (!self.isMobile) {
if (self.calendarContainer !== undefined) {
self.calendarContainer.classList.remove("open");
}
if (self._input !== undefined) {
self._input.classList.remove("active");
}
}
triggerEvent("onClose");
}
function destroy() {
if (self.config !== undefined)
triggerEvent("onDestroy");
for (var i = self._handlers.length; i--;) {
var h = self._handlers[i];
h.element.removeEventListener(h.event, h.handler, h.options);
}
self._handlers = [];
if (self.mobileInput) {
if (self.mobileInput.parentNode)
self.mobileInput.parentNode.removeChild(self.mobileInput);
self.mobileInput = undefined;
}
else if (self.calendarContainer && self.calendarContainer.parentNode) {
if (self.config.static && self.calendarContainer.parentNode) {
var wrapper = self.calendarContainer.parentNode;
wrapper.lastChild && wrapper.removeChild(wrapper.lastChild);
if (wrapper.parentNode) {
while (wrapper.firstChild)
wrapper.parentNode.insertBefore(wrapper.firstChild, wrapper);
wrapper.parentNode.removeChild(wrapper);
}
}
else
self.calendarContainer.parentNode.removeChild(self.calendarContainer);
}
if (self.altInput) {
self.input.type = "text";
if (self.altInput.parentNode)
self.altInput.parentNode.removeChild(self.altInput);
delete self.altInput;
}
if (self.input) {
self.input.type = self.input._type;
self.input.classList.remove("flatpickr-input");
self.input.removeAttribute("readonly");
self.input.value = "";
}
[
"_showTimeInput",
"latestSelectedDateObj",
"_hideNextMonthArrow",
"_hidePrevMonthArrow",
"__hideNextMonthArrow",
"__hidePrevMonthArrow",
"isMobile",
"isOpen",
"selectedDateElem",
"minDateHasTime",
"maxDateHasTime",
"days",
"daysContainer",
"_input",
"_positionElement",
"innerContainer",
"rContainer",
"monthNav",
"todayDateElem",
"calendarContainer",
"weekdayContainer",
"prevMonthNav",
"nextMonthNav",
"monthsDropdownContainer",
"currentMonthElement",
"currentYearElement",
"navigationCurrentMonth",
"selectedDateElem",
"config",
].forEach(function (k) {
try {
delete self[k];
}
catch (_) { }
});
}
function isCalendarElem(elem) {
if (self.config.appendTo && self.config.appendTo.contains(elem))
return true;
return self.calendarContainer.contains(elem);
}
function documentClick(e) {
if (self.isOpen && !self.config.inline) {
var eventTarget_1 = getEventTarget(e);
var isCalendarElement = isCalendarElem(eventTarget_1);
var isInput = eventTarget_1 === self.input ||
eventTarget_1 === self.altInput ||
self.element.contains(eventTarget_1) ||
// web components
// e.path is not present in all browsers. circumventing typechecks
(e.path &&
e.path.indexOf &&
(~e.path.indexOf(self.input) ||
~e.path.indexOf(self.altInput)));
var lostFocus = e.type === "blur"
? isInput &&
e.relatedTarget &&
!isCalendarElem(e.relatedTarget)
: !isInput &&
!isCalendarElement &&
!isCalendarElem(e.relatedTarget);
var isIgnored = !self.config.ignoredFocusElements.some(function (elem) {
return elem.contains(eventTarget_1);
});
if (lostFocus && isIgnored) {
if (self.timeContainer !== undefined &&
self.minuteElement !== undefined &&
self.hourElement !== undefined) {
updateTime();
}
self.close();
if (self.config.mode === "range" && self.selectedDates.length === 1) {
self.clear(false);
self.redraw();
}
}
}
}
function changeYear(newYear) {
if (!newYear ||
(self.config.minDate && newYear < self.config.minDate.getFullYear()) ||
(self.config.maxDate && newYear > self.config.maxDate.getFullYear()))
return;
var newYearNum = newYear, isNewYear = self.currentYear !== newYearNum;
self.currentYear = newYearNum || self.currentYear;
if (self.config.maxDate &&
self.currentYear === self.config.maxDate.getFullYear()) {
self.currentMonth = Math.min(self.config.maxDate.getMonth(), self.currentMonth);
}
else if (self.config.minDate &&
self.currentYear === self.config.minDate.getFullYear()) {
self.currentMonth = Math.max(self.config.minDate.getMonth(), self.currentMonth);
}
if (isNewYear) {
self.redraw();
triggerEvent("onYearChange");
buildMonthSwitch();
}
}
function isEnabled(date, timeless) {
if (timeless === void 0) { timeless = true; }
var dateToCheck = self.parseDate(date, undefined, timeless); // timeless
if ((self.config.minDate &&
dateToCheck &&
compareDates(dateToCheck, self.config.minDate, timeless !== undefined ? timeless : !self.minDateHasTime) < 0) ||
(self.config.maxDate &&
dateToCheck &&
compareDates(dateToCheck, self.config.maxDate, timeless !== undefined ? timeless : !self.maxDateHasTime) > 0))
return false;
if (self.config.enable.length === 0 && self.config.disable.length === 0)
return true;
if (dateToCheck === undefined)
return false;
var bool = self.config.enable.length > 0, array = bool ? self.config.enable : self.config.disable;
for (var i = 0, d = void 0; i < array.length; i++) {
d = array[i];
if (typeof d === "function" &&
d(dateToCheck) // disabled by function
)
return bool;
else if (d instanceof Date &&
dateToCheck !== undefined &&
d.getTime() === dateToCheck.getTime())
// disabled by date
return bool;
else if (typeof d === "string" && dateToCheck !== undefined) {
// disabled by date string
var parsed = self.parseDate(d, undefined, true);
return parsed && parsed.getTime() === dateToCheck.getTime()
? bool
: !bool;
}
else if (
// disabled by range
typeof d === "object" &&
dateToCheck !== undefined &&
d.from &&
d.to &&
dateToCheck.getTime() >= d.from.getTime() &&
dateToCheck.getTime() <= d.to.getTime())
return bool;
}
return !bool;
}
function isInView(elem) {
if (self.daysContainer !== undefined)
return (elem.className.indexOf("hidden") === -1 &&
self.daysContainer.contains(elem));
return false;
}
function onKeyDown(e) {
// e.key e.keyCode
// "Backspace" 8
// "Tab" 9
// "Enter" 13
// "Escape" (IE "Esc") 27
// "ArrowLeft" (IE "Left") 37
// "ArrowUp" (IE "Up") 38
// "ArrowRight" (IE "Right") 39
// "ArrowDown" (IE "Down") 40
// "Delete" (IE "Del") 46
var isInput = e.target === self._input;
var allowInput = self.config.allowInput;
var allowKeydown = self.isOpen && (!allowInput || !isInput);
var allowInlineKeydown = self.config.inline && isInput && !allowInput;
if (e.keyCode === 13 && isInput) {
if (allowInput) {
self.setDate(self._input.value, true, e.target === self.altInput
? self.config.altFormat
: self.config.dateFormat);
return e.target.blur();
}
else {
self.open();
}
}
else if (isCalendarElem(e.target) ||
allowKeydown ||
allowInlineKeydown) {
var isTimeObj = !!self.timeContainer &&
self.timeContainer.contains(e.target);
switch (e.keyCode) {
case 13:
if (isTimeObj) {
e.preventDefault();
updateTime();
focusAndClose();
}
else
selectDate(e);
break;
case 27: // escape
e.preventDefault();
focusAndClose();
break;
case 8:
case 46:
if (isInput && !self.config.allowInput) {
e.preventDefault();
self.clear();
}
break;
case 37:
case 39:
if (!isTimeObj && !isInput) {
e.preventDefault();
if (self.daysContainer !== undefined &&
(allowInput === false ||
(document.activeElement && isInView(document.activeElement)))) {
var delta_1 = e.keyCode === 39 ? 1 : -1;
if (!e.ctrlKey)
focusOnDay(undefined, delta_1);
else {
e.stopPropagation();
changeMonth(delta_1);
focusOnDay(getFirstAvailableDay(1), 0);
}
}
}
else if (self.hourElement)
self.hourElement.focus();
break;
case 38:
case 40:
e.preventDefault();
var delta = e.keyCode === 40 ? 1 : -1;
if ((self.daysContainer && e.target.$i !== undefined) ||
e.target === self.input ||
e.target === self.altInput) {
if (e.ctrlKey) {
e.stopPropagation();
changeYear(self.currentYear - delta);
focusOnDay(getFirstAvailableDay(1), 0);
}
else if (!isTimeObj)
focusOnDay(undefined, delta * 7);
}
else if (e.target === self.currentYearElement) {
changeYear(self.currentYear - delta);
}
else if (self.config.enableTime) {
if (!isTimeObj && self.hourElement)
self.hourElement.focus();
updateTime(e);
self._debouncedChange();
}
break;
case 9:
if (isTimeObj) {
var elems = [
self.hourElement,
self.minuteElement,
self.secondElement,
self.amPM,
]
.concat(self.pluginElements)
.filter(function (x) { return x; });
var i = elems.indexOf(e.target);
if (i !== -1) {
var target = elems[i + (e.shiftKey ? -1 : 1)];
e.preventDefault();
(target || self._input).focus();
}
}
else if (!self.config.noCalendar &&
self.daysContainer &&
self.daysContainer.contains(e.target) &&
e.shiftKey) {
e.preventDefault();
self._input.focus();
}
break;
}
}
if (self.amPM !== undefined && e.target === self.amPM) {
switch (e.key) {
case self.l10n.amPM[0].charAt(0):
case self.l10n.amPM[0].charAt(0).toLowerCase():
self.amPM.textContent = self.l10n.amPM[0];
setHoursFromInputs();
updateValue();
break;
case self.l10n.amPM[1].charAt(0):
case self.l10n.amPM[1].charAt(0).toLowerCase():
self.amPM.textContent = self.l10n.amPM[1];
setHoursFromInputs();
updateValue();
break;
}
}
if (isInput || isCalendarElem(e.target)) {
triggerEvent("onKeyDown", e);
}
}
function onMouseOver(elem) {
if (self.selectedDates.length !== 1 ||
(elem &&
(!elem.classList.contains("flatpickr-day") ||
elem.classList.contains("flatpickr-disabled"))))
return;
var hoverDate = elem
? elem.dateObj.getTime()
: self.days.firstElementChild.dateObj.getTime(), initialDate = self.parseDate(self.selectedDates[0], undefined, true).getTime(), rangeStartDate = Math.min(hoverDate, self.selectedDates[0].getTime()), rangeEndDate = Math.max(hoverDate, self.selectedDates[0].getTime());
var containsDisabled = false;
var minRange = 0, maxRange = 0;
for (var t = rangeStartDate; t < rangeEndDate; t += duration.DAY) {
if (!isEnabled(new Date(t), true)) {
containsDisabled =
containsDisabled || (t > rangeStartDate && t < rangeEndDate);
if (t < initialDate && (!minRange || t > minRange))
minRange = t;
else if (t > initialDate && (!maxRange || t < maxRange))
maxRange = t;
}
}
for (var m = 0; m < self.config.showMonths; m++) {
var month = self.daysContainer.children[m];
var _loop_1 = function (i, l) {
var dayElem = month.children[i], date = dayElem.dateObj;
var timestamp = date.getTime();
var outOfRange = (minRange > 0 && timestamp < minRange) ||
(maxRange > 0 && timestamp > maxRange);
if (outOfRange) {
dayElem.classList.add("notAllowed");
["inRange", "startRange", "endRange"].forEach(function (c) {
dayElem.classList.remove(c);
});
return "continue";
}
else if (containsDisabled && !outOfRange)
return "continue";
["startRange", "inRange", "endRange", "notAllowed"].forEach(function (c) {
dayElem.classList.remove(c);
});
if (elem !== undefined) {
elem.classList.add(hoverDate <= self.selectedDates[0].getTime()
? "startRange"
: "endRange");
if (initialDate < hoverDate && timestamp === initialDate)
dayElem.classList.add("startRange");
else if (initialDate > hoverDate && timestamp === initialDate)
dayElem.classList.add("endRange");
if (timestamp >= minRange &&
(maxRange === 0 || timestamp <= maxRange) &&
isBetween(timestamp, initialDate, hoverDate))
dayElem.classList.add("inRange");
}
};
for (var i = 0, l = month.children.length; i < l; i++) {
_loop_1(i, l);
}
}
}
function onResize() {
if (self.isOpen && !self.config.static && !self.config.inline)
positionCalendar();
}
function setDefaultTime() {
self.setDate(self.config.minDate !== undefined
? new Date(self.config.minDate.getTime())
: new Date(), true);
setDefaultHours();
updateValue();
}
function open(e, positionElement) {
if (positionElement === void 0) { positionElement = self._positionElement; }
if (self.isMobile === true) {
if (e) {
e.preventDefault();
e.target && e.target.blur();
}
if (self.mobileInput !== undefined) {
self.mobileInput.focus();
self.mobileInput.click();
}
triggerEvent("onOpen");
return;
}
if (self._input.disabled || self.config.inline)
return;
var wasOpen = self.isOpen;
self.isOpen = true;
if (!wasOpen) {
self.calendarContainer.classList.add("open");
self._input.classList.add("active");
triggerEvent("onOpen");
positionCalendar(positionElement);
}
if (self.config.enableTime === true && self.config.noCalendar === true) {
if (self.selectedDates.length === 0) {
setDefaultTime();
}
if (self.config.allowInput === false &&
(e === undefined ||
!self.timeContainer.contains(e.relatedTarget))) {
setTimeout(function () { return self.hourElement.select(); }, 50);
}
}
}
function minMaxDateSetter(type) {
return function (date) {
var dateObj = (self.config["_" + type + "Date"] = self.parseDate(date, self.config.dateFormat));
var inverseDateObj = self.config["_" + (type === "min" ? "max" : "min") + "Date"];
if (dateObj !== undefined) {
self[type === "min" ? "minDateHasTime" : "maxDateHasTime"] =
dateObj.getHours() > 0 ||
dateObj.getMinutes() > 0 ||
dateObj.getSeconds() > 0;
}
if (self.selectedDates) {
self.selectedDates = self.selectedDates.filter(function (d) { return isEnabled(d); });
if (!self.selectedDates.length && type === "min")
setHoursFromDate(dateObj);
updateValue();
}
if (self.daysContainer) {
redraw();
if (dateObj !== undefined)
self.currentYearElement[type] = dateObj.getFullYear().toString();
else
self.currentYearElement.removeAttribute(type);
self.currentYearElement.disabled =
!!inverseDateObj &&
dateObj !== undefined &&
inverseDateObj.getFullYear() === dateObj.getFullYear();
}
};
}
function parseConfig() {
var boolOpts = [
"wrap",
"weekNumbers",
"allowInput",
"clickOpens",
"time_24hr",
"enableTime",
"noCalendar",
"altInput",
"shorthandCurrentMonth",
"inline",
"static",
"enableSeconds",
"disableMobile",
];
var userConfig = __assign({}, instanceConfig, JSON.parse(JSON.stringify(element.dataset || {})));
var formats = {};
self.config.parseDate = userConfig.parseDate;
self.config.formatDate = userConfig.formatDate;
Object.defineProperty(self.config, "enable", {
get: function () { return self.config._enable; },
set: function (dates) {
self.config._enable = parseDateRules(dates);
}
});
Object.defineProperty(self.config, "disable", {
get: function () { return self.config._disable; },
set: function (dates) {
self.config._disable = parseDateRules(dates);
}
});
var timeMode = userConfig.mode === "time";
if (!userConfig.dateFormat && (userConfig.enableTime || timeMode)) {
var defaultDateFormat = flatpickr.defaultConfig.dateFormat || defaults.dateFormat;
formats.dateFormat =
userConfig.noCalendar || timeMode
? "H:i" + (userConfig.enableSeconds ? ":S" : "")
: defaultDateFormat + " H:i" + (userConfig.enableSeconds ? ":S" : "");
}
if (userConfig.altInput &&
(userConfig.enableTime || timeMode) &&
!userConfig.altFormat) {
var defaultAltFormat = flatpickr.defaultConfig.altFormat || defaults.altFormat;
formats.altFormat =
userConfig.noCalendar || timeMode
? "h:i" + (userConfig.enableSeconds ? ":S K" : " K")
: defaultAltFormat + (" h:i" + (userConfig.enableSeconds ? ":S" : "") + " K");
}
if (!userConfig.altInputClass) {
self.config.altInputClass =
self.input.className + " " + self.config.altInputClass;
}
Object.defineProperty(self.config, "minDate", {
get: function () { return self.config._minDate; },
set: minMaxDateSetter("min")
});
Object.defineProperty(self.config, "maxDate", {
get: function () { return self.config._maxDate; },
set: minMaxDateSetter("max")
});
var minMaxTimeSetter = function (type) { return function (val) {
self.config[type === "min" ? "_minTime" : "_maxTime"] = self.parseDate(val, "H:i:S");
}; };
Object.defineProperty(self.config, "minTime", {
get: function () { return self.config._minTime; },
set: minMaxTimeSetter("min")
});
Object.defineProperty(self.config, "maxTime", {
get: function () { return self.config._maxTime; },
set: minMaxTimeSetter("max")
});
if (userConfig.mode === "time") {
self.config.noCalendar = true;
self.config.enableTime = true;
}
Object.assign(self.config, formats, userConfig);
for (var i = 0; i < boolOpts.length; i++)
self.config[boolOpts[i]] =
self.config[boolOpts[i]] === true ||
self.config[boolOpts[i]] === "true";
HOOKS.filter(function (hook) { return self.config[hook] !== undefined; }).forEach(function (hook) {
self.config[hook] = arrayify(self.config[hook] || []).map(bindToInstance);
});
self.isMobile =
!self.config.disableMobile &&
!self.config.inline &&
self.config.mode === "single" &&
!self.config.disable.length &&
!self.config.enable.length &&
!self.config.weekNumbers &&
/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
for (var i = 0; i < self.config.plugins.length; i++) {
var pluginConf = self.config.plugins[i](self) || {};
for (var key in pluginConf) {
if (HOOKS.indexOf(key) > -1) {
self.config[key] = arrayify(pluginConf[key])
.map(bindToInstance)
.concat(self.config[key]);
}
else if (typeof userConfig[key] === "undefined")
self.config[key] = pluginConf[key];
}
}
triggerEvent("onParseConfig");
}
function setupLocale() {
if (typeof self.config.locale !== "object" &&
typeof flatpickr.l10ns[self.config.locale] === "undefined")
self.config.errorHandler(new Error("flatpickr: invalid locale " + self.config.locale));
self.l10n = __assign({}, flatpickr.l10ns["default"], (typeof self.config.locale === "object"
? self.config.locale
: self.config.locale !== "default"
? flatpickr.l10ns[self.config.locale]
: undefined));
tokenRegex.K = "(" + self.l10n.amPM[0] + "|" + self.l10n.amPM[1] + "|" + self.l10n.amPM[0].toLowerCase() + "|" + self.l10n.amPM[1].toLowerCase() + ")";
var userConfig = __assign({}, instanceConfig, JSON.parse(JSON.stringify(element.dataset || {})));
if (userConfig.time_24hr === undefined &&
flatpickr.defaultConfig.time_24hr === undefined) {
self.config.time_24hr = self.l10n.time_24hr;
}
self.formatDate = createDateFormatter(self);
self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });
}
function positionCalendar(customPositionElement) {
if (self.calendarContainer === undefined)
return;
triggerEvent("onPreCalendarPosition");
var positionElement = customPositionElement || self._positionElement;
var calendarHeight = Array.prototype.reduce.call(self.calendarContainer.children, (function (acc, child) { return acc + child.offsetHeight; }), 0), calendarWidth = self.calendarContainer.offsetWidth, configPos = self.config.position.split(" "), configPosVertical = configPos[0], configPosHorizontal = configPos.length > 1 ? configPos[1] : null, inputBounds = positionElement.getBoundingClientRect(), distanceFromBottom = window.innerHeight - inputBounds.bottom, showOnTop = configPosVertical === "above" ||
(configPosVertical !== "below" &&
distanceFromBottom < calendarHeight &&
inputBounds.top > calendarHeight);
var top = window.pageYOffset +
inputBounds.top +
(!showOnTop ? positionElement.offsetHeight + 2 : -calendarHeight - 2);
toggleClass(self.calendarContainer, "arrowTop", !showOnTop);
toggleClass(self.calendarContainer, "arrowBottom", showOnTop);
if (self.config.inline)
return;
var left = window.pageXOffset +
inputBounds.left -
(configPosHorizontal != null && configPosHorizontal === "center"
? (calendarWidth - inputBounds.width) / 2
: 0);
var right = window.document.body.offsetWidth - (window.pageXOffset + inputBounds.right);
var rightMost = left + calendarWidth > window.document.body.offsetWidth;
var centerMost = right + calendarWidth > window.document.body.offsetWidth;
toggleClass(self.calendarContainer, "rightMost", rightMost);
if (self.config.static)
return;
self.calendarContainer.style.top = top + "px";
if (!rightMost) {
self.calendarContainer.style.left = left + "px";
self.calendarContainer.style.right = "auto";
}
else if (!centerMost) {
self.calendarContainer.style.left = "auto";
self.calendarContainer.style.right = right + "px";
}
else {
var doc = document.styleSheets[0];
// some testing environments don't have css support
if (doc === undefined)
return;
var bodyWidth = window.document.body.offsetWidth;
var centerLeft = Math.max(0, bodyWidth / 2 - calendarWidth / 2);
var centerBefore = ".flatpickr-calendar.centerMost:before";
var centerAfter = ".flatpickr-calendar.centerMost:after";
var centerIndex = doc.cssRules.length;
var centerStyle = "{left:" + inputBounds.left + "px;right:auto;}";
toggleClass(self.calendarContainer, "rightMost", false);
toggleClass(self.calendarContainer, "centerMost", true);
doc.insertRule(centerBefore + "," + centerAfter + centerStyle, centerIndex);
self.calendarContainer.style.left = centerLeft + "px";
self.calendarContainer.style.right = "auto";
}
}
function redraw() {
if (self.config.noCalendar || self.isMobile)
return;
updateNavigationCurrentMonth();
buildDays();
}
function focusAndClose() {
self._input.focus();
if (window.navigator.userAgent.indexOf("MSIE") !== -1 ||
navigator.msMaxTouchPoints !== undefined) {
// hack - bugs in the way IE handles focus keeps the calendar open
setTimeout(self.close, 0);
}
else {
self.close();
}
}
function selectDate(e) {
e.preventDefault();
e.stopPropagation();
var isSelectable = function (day) {
return day.classList &&
day.classList.contains("flatpickr-day") &&
!day.classList.contains("flatpickr-disabled") &&
!day.classList.contains("notAllowed");
};
var t = findParent(e.target, isSelectable);
if (t === undefined)
return;
var target = t;
var selectedDate = (self.latestSelectedDateObj = new Date(target.dateObj.getTime()));
var shouldChangeMonth = (selectedDate.getMonth() < self.currentMonth ||
selectedDate.getMonth() >
self.currentMonth + self.config.showMonths - 1) &&
self.config.mode !== "range";
self.selectedDateElem = target;
if (self.config.mode === "single")
self.selectedDates = [selectedDate];
else if (self.config.mode === "multiple") {
var selectedIndex = isDateSelected(selectedDate);
if (selectedIndex)
self.selectedDates.splice(parseInt(selectedIndex), 1);
else
self.selectedDates.push(selectedDate);
}
else if (self.config.mode === "range") {
if (self.selectedDates.length === 2) {
self.clear(false, false);
}
self.latestSelectedDateObj = selectedDate;
self.selectedDates.push(selectedDate);
// unless selecting same date twice, sort ascendingly
if (compareDates(selectedDate, self.selectedDates[0], true) !== 0)
self.selectedDates.sort(function (a, b) { return a.getTime() - b.getTime(); });
}
setHoursFromInputs();
if (shouldChangeMonth) {
var isNewYear = self.currentYear !== selectedDate.getFullYear();
self.currentYear = selectedDate.getFullYear();
self.currentMonth = selectedDate.getMonth();
if (isNewYear) {
triggerEvent("onYearChange");
buildMonthSwitch();
}
triggerEvent("onMonthChange");
}
updateNavigationCurrentMonth();
buildDays();
updateValue();
if (self.config.enableTime)
setTimeout(function () { return (self.showTimeInput = true); }, 50);
// maintain focus
if (!shouldChangeMonth &&
self.config.mode !== "range" &&
self.config.showMonths === 1)
focusOnDayElem(target);
else if (self.selectedDateElem !== undefined &&
self.hourElement === undefined) {
self.selectedDateElem && self.selectedDateElem.focus();
}
if (self.hourElement !== undefined)
self.hourElement !== undefined && self.hourElement.focus();
if (self.config.closeOnSelect) {
var single = self.config.mode === "single" && !self.config.enableTime;
var range = self.config.mode === "range" &&
self.selectedDates.length === 2 &&
!self.config.enableTime;
if (single || range) {
focusAndClose();
}
}
triggerChange();
}
var CALLBACKS = {
locale: [setupLocale, updateWeekdays],
showMonths: [buildMonths, setCalendarWidth, buildWeekdays],
minDate: [jumpToDate],
maxDate: [jumpToDate]
};
function set(option, value) {
if (option !== null && typeof option === "object") {
Object.assign(self.config, option);
for (var key in option) {
if (CALLBACKS[key] !== undefined)
CALLBACKS[key].forEach(function (x) { return x(); });
}
}
else {
self.config[option] = value;
if (CALLBACKS[option] !== undefined)
CALLBACKS[option].forEach(function (x) { return x(); });
else if (HOOKS.indexOf(option) > -1)
self.config[option] = arrayify(value);
}
self.redraw();
updateValue(false);
}
function setSelectedDate(inputDate, format) {
var dates = [];
if (inputDate instanceof Array)
dates = inputDate.map(function (d) { return self.parseDate(d, format); });
else if (inputDate instanceof Date || typeof inputDate === "number")
dates = [self.parseDate(inputDate, format)];
else if (typeof inputDate === "string") {
switch (self.config.mode) {
case "single":
case "time":
dates = [self.parseDate(inputDate, format)];
break;
case "multiple":
dates = inputDate
.split(self.config.conjunction)
.map(function (date) { return self.parseDate(date, format); });
break;
case "range":
dates = inputDate
.split(self.l10n.rangeSeparator)
.map(function (date) { return self.parseDate(date, format); });
break;
}
}
else
self.config.errorHandler(new Error("Invalid date supplied: " + JSON.stringify(inputDate)));
self.selectedDates = dates.filter(function (d) { return d instanceof Date && isEnabled(d, false); });
if (self.config.mode === "range")
self.selectedDates.sort(function (a, b) { return a.getTime() - b.getTime(); });
}
function setDate(date, triggerChange, format) {
if (triggerChange === void 0) { triggerChange = false; }
if (format === void 0) { format = self.config.dateFormat; }
if ((date !== 0 && !date) || (date instanceof Array && date.length === 0))
return self.clear(triggerChange);
setSelectedDate(date, format);
self.showTimeInput = self.selectedDates.length > 0;
self.latestSelectedDateObj =
self.selectedDates[self.selectedDates.length - 1];
self.redraw();
jumpToDate();
setHoursFromDate();
if (self.selectedDates.length === 0) {
self.clear(false);
}
updateValue(triggerChange);
if (triggerChange)
triggerEvent("onChange");
}
function parseDateRules(arr) {
return arr
.slice()
.map(function (rule) {
if (typeof rule === "string" ||
typeof rule === "number" ||
rule instanceof Date) {
return self.parseDate(rule, undefined, true);
}
else if (rule &&
typeof rule === "object" &&
rule.from &&
rule.to)
return {
from: self.parseDate(rule.from, undefined),
to: self.parseDate(rule.to, undefined)
};
return rule;
})
.filter(function (x) { return x; }); // remove falsy values
}
function setupDates() {
self.selectedDates = [];
self.now = self.parseDate(self.config.now) || new Date();
// Workaround IE11 setting placeholder as the input's value
var preloadedDate = self.config.defaultDate ||
((self.input.nodeName === "INPUT" ||
self.input.nodeName === "TEXTAREA") &&
self.input.placeholder &&
self.input.value === self.input.placeholder
? null
: self.input.value);
if (preloadedDate)
setSelectedDate(preloadedDate, self.config.dateFormat);
self._initialDate =
self.selectedDates.length > 0
? self.selectedDates[0]
: self.config.minDate &&
self.config.minDate.getTime() > self.now.getTime()
? self.config.minDate
: self.config.maxDate &&
self.config.maxDate.getTime() < self.now.getTime()
? self.config.maxDate
: self.now;
self.currentYear = self._initialDate.getFullYear();
self.currentMonth = self._initialDate.getMonth();
if (self.selectedDates.length > 0)
self.latestSelectedDateObj = self.selectedDates[0];
if (self.config.minTime !== undefined)
self.config.minTime = self.parseDate(self.config.minTime, "H:i");
if (self.config.maxTime !== undefined)
self.config.maxTime = self.parseDate(self.config.maxTime, "H:i");
self.minDateHasTime =
!!self.config.minDate &&
(self.config.minDate.getHours() > 0 ||
self.config.minDate.getMinutes() > 0 ||
self.config.minDate.getSeconds() > 0);
self.maxDateHasTime =
!!self.config.maxDate &&
(self.config.maxDate.getHours() > 0 ||
self.config.maxDate.getMinutes() > 0 ||
self.config.maxDate.getSeconds() > 0);
Object.defineProperty(self, "showTimeInput", {
get: function () { return self._showTimeInput; },
set: function (bool) {
self._showTimeInput = bool;
if (self.calendarContainer)
toggleClass(self.calendarContainer, "showTimeInput", bool);
self.isOpen && positionCalendar();
}
});
}
function setupInputs() {
self.input = self.config.wrap
? element.querySelector("[data-input]")
: element;
/* istanbul ignore next */
if (!self.input) {
self.config.errorHandler(new Error("Invalid input element specified"));
return;
}
// hack: store previous type to restore it after destroy()
self.input._type = self.input.type;
self.input.type = "text";
self.input.classList.add("flatpickr-input");
self._input = self.input;
if (self.config.altInput) {
// replicate self.element
self.altInput = createElement(self.input.nodeName, self.config.altInputClass);
self._input = self.altInput;
self.altInput.placeholder = self.input.placeholder;
self.altInput.disabled = self.input.disabled;
self.altInput.required = self.input.required;
self.altInput.tabIndex = self.input.tabIndex;
self.altInput.type = "text";
self.input.setAttribute("type", "hidden");
if (!self.config.static && self.input.parentNode)
self.input.parentNode.insertBefore(self.altInput, self.input.nextSibling);
}
if (!self.config.allowInput)
self._input.setAttribute("readonly", "readonly");
self._positionElement = self.config.positionElement || self._input;
}
function setupMobile() {
var inputType = self.config.enableTime
? self.config.noCalendar
? "time"
: "datetime-local"
: "date";
self.mobileInput = createElement("input", self.input.className + " flatpickr-mobile");
self.mobileInput.step = self.input.getAttribute("step") || "any";
self.mobileInput.tabIndex = 1;
self.mobileInput.type = inputType;
self.mobileInput.disabled = self.input.disabled;
self.mobileInput.required = self.input.required;
self.mobileInput.placeholder = self.input.placeholder;
self.mobileFormatStr =
inputType === "datetime-local"
? "Y-m-d\\TH:i:S"
: inputType === "date"
? "Y-m-d"
: "H:i:S";
if (self.selectedDates.length > 0) {
self.mobileInput.defaultValue = self.mobileInput.value = self.formatDate(self.selectedDates[0], self.mobileFormatStr);
}
if (self.config.minDate)
self.mobileInput.min = self.formatDate(self.config.minDate, "Y-m-d");
if (self.config.maxDate)
self.mobileInput.max = self.formatDate(self.config.maxDate, "Y-m-d");
self.input.type = "hidden";
if (self.altInput !== undefined)
self.altInput.type = "hidden";
try {
if (self.input.parentNode)
self.input.parentNode.insertBefore(self.mobileInput, self.input.nextSibling);
}
catch (_a) { }
bind(self.mobileInput, "change", function (e) {
self.setDate(e.target.value, false, self.mobileFormatStr);
triggerEvent("onChange");
triggerEvent("onClose");
});
}
function toggle(e) {
if (self.isOpen === true)
return self.close();
self.open(e);
}
function triggerEvent(event, data) {
// If the instance has been destroyed already, all hooks have been removed
if (self.config === undefined)
return;
var hooks = self.config[event];
if (hooks !== undefined && hooks.length > 0) {
for (var i = 0; hooks[i] && i < hooks.length; i++)
hooks[i](self.selectedDates, self.input.value, self, data);
}
if (event === "onChange") {
self.input.dispatchEvent(createEvent("change"));
// many front-end frameworks bind to the input event
self.input.dispatchEvent(createEvent("input"));
}
}
function createEvent(name) {
var e = document.createEvent("Event");
e.initEvent(name, true, true);
return e;
}
function isDateSelected(date) {
for (var i = 0; i < self.selectedDates.length; i++) {
if (compareDates(self.selectedDates[i], date) === 0)
return "" + i;
}
return false;
}
function isDateInRange(date) {
if (self.config.mode !== "range" || self.selectedDates.length < 2)
return false;
return (compareDates(date, self.selectedDates[0]) >= 0 &&
compareDates(date, self.selectedDates[1]) <= 0);
}
function updateNavigationCurrentMonth() {
if (self.config.noCalendar || self.isMobile || !self.monthNav)
return;
self.yearElements.forEach(function (yearElement, i) {
var d = new Date(self.currentYear, self.currentMonth, 1);
d.setMonth(self.currentMonth + i);
if (self.config.showMonths > 1 ||
self.config.monthSelectorType === "static") {
self.monthElements[i].textContent =
monthToStr(d.getMonth(), self.config.shorthandCurrentMonth, self.l10n) + " ";
}
else {
self.monthsDropdownContainer.value = d.getMonth().toString();
}
yearElement.value = d.getFullYear().toString();
});
self._hidePrevMonthArrow =
self.config.minDate !== undefined &&
(self.currentYear === self.config.minDate.getFullYear()
? self.currentMonth <= self.config.minDate.getMonth()
: self.currentYear < self.config.minDate.getFullYear());
self._hideNextMonthArrow =
self.config.maxDate !== undefined &&
(self.currentYear === self.config.maxDate.getFullYear()
? self.currentMonth + 1 > self.config.maxDate.getMonth()
: self.currentYear > self.config.maxDate.getFullYear());
}
function getDateStr(format) {
return self.selectedDates
.map(function (dObj) { return self.formatDate(dObj, format); })
.filter(function (d, i, arr) {
return self.config.mode !== "range" ||
self.config.enableTime ||
arr.indexOf(d) === i;
})
.join(self.config.mode !== "range"
? self.config.conjunction
: self.l10n.rangeSeparator);
}
/**
* Updates the values of inputs associated with the calendar
*/
function updateValue(triggerChange) {
if (triggerChange === void 0) { triggerChange = true; }
if (self.mobileInput !== undefined && self.mobileFormatStr) {
self.mobileInput.value =
self.latestSelectedDateObj !== undefined
? self.formatDate(self.latestSelectedDateObj, self.mobileFormatStr)
: "";
}
self.input.value = getDateStr(self.config.dateFormat);
if (self.altInput !== undefined) {
self.altInput.value = getDateStr(self.config.altFormat);
}
if (triggerChange !== false)
triggerEvent("onValueUpdate");
}
function onMonthNavClick(e) {
var isPrevMonth = self.prevMonthNav.contains(e.target);
var isNextMonth = self.nextMonthNav.contains(e.target);
if (isPrevMonth || isNextMonth) {
changeMonth(isPrevMonth ? -1 : 1);
}
else if (self.yearElements.indexOf(e.target) >= 0) {
e.target.select();
}
else if (e.target.classList.contains("arrowUp")) {
self.changeYear(self.currentYear + 1);
}
else if (e.target.classList.contains("arrowDown")) {
self.changeYear(self.currentYear - 1);
}
}
function timeWrapper(e) {
e.preventDefault();
var isKeyDown = e.type === "keydown", input = e.target;
if (self.amPM !== undefined && e.target === self.amPM) {
self.amPM.textContent =
self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];
}
var min = parseFloat(input.getAttribute("min")), max = parseFloat(input.getAttribute("max")), step = parseFloat(input.getAttribute("step")), curValue = parseInt(input.value, 10), delta = e.delta ||
(isKeyDown ? (e.which === 38 ? 1 : -1) : 0);
var newValue = curValue + step * delta;
if (typeof input.value !== "undefined" && input.value.length === 2) {
var isHourElem = input === self.hourElement, isMinuteElem = input === self.minuteElement;
if (newValue < min) {
newValue =
max +
newValue +
int(!isHourElem) +
(int(isHourElem) && int(!self.amPM));
if (isMinuteElem)
incrementNumInput(undefined, -1, self.hourElement);
}
else if (newValue > max) {
newValue =
input === self.hourElement ? newValue - max - int(!self.amPM) : min;
if (isMinuteElem)
incrementNumInput(undefined, 1, self.hourElement);
}
if (self.amPM &&
isHourElem &&
(step === 1
? newValue + curValue === 23
: Math.abs(newValue - curValue) > step)) {
self.amPM.textContent =
self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];
}
input.value = pad(newValue);
}
}
init();
return self;
}
/* istanbul ignore next */
function _flatpickr(nodeList, config) {
// static list
var nodes = Array.prototype.slice
.call(nodeList)
.filter(function (x) { return x instanceof HTMLElement; });
var instances = [];
for (var i = 0; i < nodes.length; i++) {
var node = nodes[i];
try {
if (node.getAttribute("data-fp-omit") !== null)
continue;
if (node._flatpickr !== undefined) {
node._flatpickr.destroy();
node._flatpickr = undefined;
}
node._flatpickr = FlatpickrInstance(node, config || {});
instances.push(node._flatpickr);
}
catch (e) {
console.error(e);
}
}
return instances.length === 1 ? instances[0] : instances;
}
/* istanbul ignore next */
if (typeof HTMLElement !== "undefined" &&
typeof HTMLCollection !== "undefined" &&
typeof NodeList !== "undefined") {
// browser env
HTMLCollection.prototype.flatpickr = NodeList.prototype.flatpickr = function (config) {
return _flatpickr(this, config);
};
HTMLElement.prototype.flatpickr = function (config) {
return _flatpickr([this], config);
};
}
/* istanbul ignore next */
var flatpickr = function (selector, config) {
if (typeof selector === "string") {
return _flatpickr(window.document.querySelectorAll(selector), config);
}
else if (selector instanceof Node) {
return _flatpickr([selector], config);
}
else {
return _flatpickr(selector, config);
}
};
/* istanbul ignore next */
flatpickr.defaultConfig = {};
flatpickr.l10ns = {
en: __assign({}, english),
"default": __assign({}, english)
};
flatpickr.localize = function (l10n) {
flatpickr.l10ns["default"] = __assign({}, flatpickr.l10ns["default"], l10n);
};
flatpickr.setDefaults = function (config) {
flatpickr.defaultConfig = __assign({}, flatpickr.defaultConfig, config);
};
flatpickr.parseDate = createDateParser({});
flatpickr.formatDate = createDateFormatter({});
flatpickr.compareDates = compareDates;
/* istanbul ignore next */
if (typeof jQuery !== "undefined" && typeof jQuery.fn !== "undefined") {
jQuery.fn.flatpickr = function (config) {
return _flatpickr(this, config);
};
}
// eslint-disable-next-line @typescript-eslint/camelcase
Date.prototype.fp_incr = function (days) {
return new Date(this.getFullYear(), this.getMonth(), this.getDate() + (typeof days === "string" ? parseInt(days, 10) : days));
};
if (typeof window !== "undefined") {
window.flatpickr = flatpickr;
}
return flatpickr;
}));
});
var mrFlatpickr = function ($) {
/**
* Check for flatpickr dependency
*/
if (typeof flatpickr === 'undefined') {
throw new Error('mrFlatpickr requires flatpickr.js (https://github.com/flatpickr/flatpickr)');
}
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
var NAME = 'mrFlatpickr';
var VERSION = '1.0.0';
var DATA_KEY = 'mr.flatpickr';
var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api';
var JQUERY_NO_CONFLICT = $.fn[NAME];
var Event = {
LOAD_DATA_API: "load" + EVENT_KEY + DATA_API_KEY
};
var Selector = {
FLATPICKR: '[data-flatpickr]'
};
/**
* ------------------------------------------------------------------------
* Class Definition
* ------------------------------------------------------------------------
*/
var Flatpickr = /*#__PURE__*/function () {
function Flatpickr(element) {
// The current flatpickr element
this.element = element; // const $element = $(element);
this.initflatpickr();
} // getters
var _proto = Flatpickr.prototype;
_proto.initflatpickr = function initflatpickr() {
var options = $(this.element).data();
this.instance = flatpickr(this.element, options);
};
Flatpickr.jQueryInterface = function jQueryInterface() {
return this.each(function jqEachFlatpickr() {
var $element = $(this);
var data = $element.data(DATA_KEY);
if (!data) {
data = new Flatpickr(this);
$element.data(DATA_KEY, data);
}
});
};
_createClass(Flatpickr, null, [{
key: "VERSION",
get: function get() {
return VERSION;
}
}]);
return Flatpickr;
}(); // END Class definition
/**
* ------------------------------------------------------------------------
* Initialise by data attribute
* ------------------------------------------------------------------------
*/
$(window).on(Event.LOAD_DATA_API, function () {
var pickers = $.makeArray($(Selector.FLATPICKR));
/* eslint-disable no-plusplus */
for (var i = pickers.length; i--;) {
var $flatpickr = $(pickers[i]);
Flatpickr.jQueryInterface.call($flatpickr, $flatpickr.data());
}
});
/**
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
*/
/* eslint-disable no-param-reassign */
$.fn[NAME] = Flatpickr.jQueryInterface;
$.fn[NAME].Constructor = Flatpickr;
$.fn[NAME].noConflict = function flatpickrNoConflict() {
$.fn[NAME] = JQUERY_NO_CONFLICT;
return Flatpickr.jQueryInterface;
};
/* eslint-enable no-param-reassign */
return Flatpickr;
}(jQuery$1);
//
(function () {
$(document).on('shown.bs.modal layoutComplete', function (e) {
var flickityInstance = $(e.target).find('[data-flickity]');
flickityInstance.each(function (index, instance) {
var $instance = $(instance);
if ($instance.data().flickity.isInitActivated) {
$instance.flickity('resize');
}
});
});
})();
var mrRecaptchav2 = function ($) {
// Check mrUtil is present and correct version
if (!(mrUtil && mrUtil.version >= '1.2.0')) {
throw new Error('mrUtil >= version 1.2.0 is required.');
}
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
var NAME = 'mrRecaptchav2';
var VERSION = '1.0.0';
var DATA_KEY = 'mr.recaptchav2'; // const EVENT_KEY = `.${DATA_KEY}`;
// const DATA_API_KEY = '.data-api';
var JQUERY_NO_CONFLICT = $.fn[NAME];
var RECAPTCHA_CALLBACK = 'mrRecaptchav2Init';
var RemoteScript = {
RECAPTCHAV2: "https://www.google.com/recaptcha/api.js?onload=" + RECAPTCHA_CALLBACK + "&render=explicit"
};
var Selector = {
DATA_RECAPTCHA: '[data-recaptcha]',
FORM: 'form'
};
var Options = {
INVISIBLE: 'invisible'
}; // "static" properties
var instances = [];
var apiReady = false;
/**
* ------------------------------------------------------------------------
* Class Definition
* ------------------------------------------------------------------------
*/
var Recaptchav2 = /*#__PURE__*/function () {
function Recaptchav2(element) {
this.element = element;
this.form = this.getForm();
this.isReady = false;
this.isValid = false;
this.options = $(this.element).data();
this.invisible = this.options.size === Options.INVISIBLE;
this.id = null; // Save instance into static property array
instances.push(this);
} // getters
var _proto = Recaptchav2.prototype;
_proto.init = function init() {
var _this = this;
if (this.element.innerHTML.replace(/[\s\xA0]+/g, '') === '') {
this.id = grecaptcha.render(this.element, {
sitekey: this.options.sitekey,
theme: this.options.theme,
size: this.options.size,
badge: this.options.badge,
tabindex: this.options.tabindex,
callback: function callback() {
_this.validate();
},
'expired-callback': function expiredCallback() {
_this.invalidate();
}
});
this.isReady = true;
}
};
_proto.validate = function validate() {
this.isValid = true;
if (this.invisible && this.form) {
$(this.form).trigger('submit');
}
};
_proto.invalidate = function invalidate() {
this.isValid = false;
};
_proto.checkValidity = function checkValidity() {
if (this.isReady && this.isValid) {
return true;
}
return false;
};
_proto.execute = function execute() {
if (this.isReady && this.invisible) {
grecaptcha.execute(this.id);
}
};
_proto.reset = function reset() {
if (this.isReady) {
grecaptcha.reset(this.id);
this.isValid = false;
}
};
_proto.getForm = function getForm() {
var closestForm = $(this.element).closest(Selector.FORM);
return closestForm.length ? closestForm.get(0) : null;
};
Recaptchav2.getRecaptchaFromForm = function getRecaptchaFromForm(form) {
if (mrUtil.isElement(form)) {
var captchaElement = form.querySelector(Selector.DATA_RECAPTCHA);
if (captchaElement) {
var data = $(captchaElement).data(DATA_KEY);
return data || null;
}
return null;
}
throw new TypeError('Form argument passed to getRecaptchaFromForm is not an element.');
};
Recaptchav2.jQueryInterface = function jQueryInterface() {
return this.each(function jqEachRecaptchav2() {
var $element = $(this);
var data = $element.data(DATA_KEY);
if (!data) {
data = new Recaptchav2(this);
$element.data(DATA_KEY, data);
}
});
};
_createClass(Recaptchav2, null, [{
key: "VERSION",
get: function get() {
return VERSION;
}
}, {
key: "ready",
get: function get() {
return apiReady;
}
}, {
key: "instances",
get: function get() {
return instances;
}
}, {
key: "apiReady",
set: function set(ready) {
if (ready === true && apiReady === false) {
mrUtil.forEach(Recaptchav2.instances, function (index, instance) {
instance.init();
});
}
apiReady = true;
}
}]);
return Recaptchav2;
}();
window.mrRecaptchav2Init = function () {
mrRecaptchav2.apiReady = true;
};
/**
* ------------------------------------------------------------------------
* Initialise API javascript if recaptcha widgets are found
* ------------------------------------------------------------------------
*/
$(document).ready(function () {
var Recaptchav2Elements = $.makeArray($(Selector.DATA_RECAPTCHA));
if (Recaptchav2Elements.length > 0) {
mrUtil.getScript(RemoteScript.RECAPTCHAV2);
/* eslint-disable no-plusplus */
for (var i = Recaptchav2Elements.length; i--;) {
var $Recaptchav2 = $(Recaptchav2Elements[i]);
Recaptchav2.jQueryInterface.call($Recaptchav2, $Recaptchav2.data());
}
}
});
/**
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
*/
/* eslint-disable no-param-reassign */
$.fn[NAME] = Recaptchav2.jQueryInterface;
$.fn[NAME].Constructor = Recaptchav2;
$.fn[NAME].noConflict = function Recaptchav2NoConflict() {
$.fn[NAME] = JQUERY_NO_CONFLICT;
return Recaptchav2.jQueryInterface;
};
/* eslint-enable no-param-reassign */
return Recaptchav2;
}(jQuery);
var mrFormEmail = function ($) {
// Check mrUtil is present and correct version
if (!(mrUtil && mrUtil.version >= '1.2.0')) {
throw new Error('mrUtil >= version 1.2.0 is required.');
}
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
var NAME = 'mrFormEmail';
var VERSION = '1.0.0';
var DATA_KEY = 'mr.formEmail';
var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api';
var JQUERY_NO_CONFLICT = $.fn[NAME];
var ClassName = {
LOADING: 'btn-loading-animate',
WAS_VALIDATED: 'was-validated',
D_NONE: 'd-none'
};
var Attribute = {
ACTION: 'action',
DISABLED: 'disabled',
FEEDBACK_DELAY: 'data-feedback-delay',
SUCCESS_REDIRECT: 'data-success-redirect'
};
var Selector = {
DATA_ATTR: 'form-email',
DATA_FORM_EMAIL: '[data-form-email]',
DATA_SUCCESS: '[data-success-message]',
DATA_ERROR: '[data-error-message]',
SUBMIT_BUTTON: 'button[type="submit"]',
SPAN: 'span',
ALL_INPUTS: 'input,textarea,select'
};
var Event = {
SENT: "sent" + EVENT_KEY,
LOAD_DATA_API: "load" + EVENT_KEY + DATA_API_KEY,
SUBMIT: 'submit'
};
var Options = {
LOADING_TEXT: 'data-loading-text'
};
var Default = {
LOADING_TEXT: 'Sending',
FORM_ACTION: 'forms/mail.php',
FEEDBACK_DELAY: 5000,
ERROR_TEXT: 'Form submission error'
};
var Status = {
SUCCESS: 'success',
ERROR: 'error'
};
/**
* ------------------------------------------------------------------------
* Class Definition
* ------------------------------------------------------------------------
*/
var FormEmail = /*#__PURE__*/function () {
function FormEmail(element) {
this.form = element;
this.action = this.form.getAttribute(Attribute.ACTION) || Default.FORM_ACTION; // Returns an object containing the feedback
this.feedback = this.getFeedbackElements(); // Get any recaptcha instances in the form - returns array of instances or null
this.getRecaptcha(); // Get submit button, inner span and loading text.
this.initSubmitButton(); // const $element = $(element);
this.setSubmitEvent();
} // getters
var _proto = FormEmail.prototype;
_proto.submitForm = function submitForm() {
// Hide feedback mesages for fresh submit
this.hideAllFeedback(); // Submit form if validateForm returns true
if (this.validateForm()) {
this.ajaxSubmit();
}
};
_proto.validateForm = function validateForm() {
var formIsValid = this.form.checkValidity();
if (this.recaptcha) {
if (this.recaptcha.invisible) {
if (formIsValid && !this.recaptcha.checkValidity()) {
this.recaptcha.execute();
return false;
} // invalidate if captcha is found and is not valid, otherwise keep original value
} else if (this.recaptcha.checkValidity() === false) {
formIsValid = false;
}
}
if (!formIsValid) {
// Cancel timeout so error message will stay shown
clearTimeout(this.feedbackTimeout); // Allow BS validation styles to take effect
this.form.classList.add(ClassName.WAS_VALIDATED);
this.showFeedback(Status.ERROR, this.validationErrorMessage);
return false;
}
this.form.classList.remove(ClassName.WAS_VALIDATED);
return true;
};
_proto.ajaxSubmit = function ajaxSubmit() {
var $form = $(this.form);
var formData = $form.serializeArray();
formData.push({
name: 'url',
value: window.location.href
});
jQuery$1.ajax({
context: this,
data: formData,
dataType: 'json',
error: this.showFeedback,
success: this.processResponse,
type: 'POST',
url: this.action
});
this.toggleFormLoading(true);
};
_proto.initSubmitButton = function initSubmitButton() {
if (!this.submitButton) {
this.submitButton = this.form.querySelector(Selector.SUBMIT_BUTTON);
}
this.submitButtonSpan = this.submitButton.querySelector(Selector.SPAN);
this.loadingText = this.submitButton.getAttribute(Options.LOADING_TEXT) || Default.LOADING_TEXT;
this.originalSubmitText = this.submitButtonSpan.textContent;
return this.submitButton;
};
_proto.processResponse = function processResponse(response) {
var _this = this;
var success = response.status === Status.SUCCESS; // Form is no longer in a 'loading' state
this.toggleFormLoading(false); // Recaptcha will need to be solved again
if (this.recaptcha) {
this.recaptcha.reset();
} // Trigger an event so users can fire Analytics scripts upon success
$(this.form).trigger($.Event(Event.SENT)); // Redirect upon success if data-attribute is set
var successRedirect = this.form.getAttribute(Attribute.SUCCESS_REDIRECT);
if (success && successRedirect && successRedirect !== '') {
window.location = successRedirect;
} else if (success) {
this.form.reset(); // Hide all feedback and hold a reference to the timeout
// to cancel it when necessary.
this.feedbackTimeout = setTimeout(function () {
return _this.hideAllFeedback();
}, this.feedbackDelay);
} // Show ERROR feedback message if not redirecting
if (!successRedirect) {
this.showFeedback(response.status, response.message);
} // Detailed error message will be shown in Console if provided
if (response.errorDetail) {
/* eslint-disable no-console */
console.error(response.errorName || Default.ERROR_TEXT, response.errorDetail.indexOf('{') === 0 ? JSON.parse(response.errorDetail) : response.errorDetail);
/* eslint-enable no-console */
}
};
_proto.showFeedback = function showFeedback(status, text, errorHTTP) {
// Form is no longer in a 'loading' state
this.toggleFormLoading(false); // If this is an ajax error from jQuery, 'status' will be
// an object with statusText property
if (typeof status === 'object' && status.statusText) {
clearTimeout(this.feedbackTimeout);
this.feedback.error.innerHTML = (errorHTTP || text) + ": <em>\"" + this.action + "\"</em> (" + status.status + " " + text + ")";
this.feedback.error.classList.remove(ClassName.D_NONE);
} else {
this.feedback[status].innerHTML = text;
this.feedback[status].classList.remove(ClassName.D_NONE);
}
};
_proto.hideAllFeedback = function hideAllFeedback() {
this.feedback.success.classList.add(ClassName.D_NONE);
this.feedback.error.classList.add(ClassName.D_NONE);
};
_proto.getFeedbackElements = function getFeedbackElements() {
if (!this.feedback) {
this.feedback = {
success: this.form.querySelector(Selector.DATA_SUCCESS),
error: this.form.querySelector(Selector.DATA_ERROR)
}; // Store the error alert's original text to be used as validation error message
this.validationErrorMessage = this.feedback.error.innerHTML;
var feedbackDelay = this.form.getAttribute(Attribute.FEEDBACK_DELAY) || Default.FEEDBACK_DELAY;
this.feedbackDelay = parseInt(feedbackDelay, 10);
this.feedbackTimeout = null;
}
return this.feedback;
};
_proto.getRecaptcha = function getRecaptcha() {
if (this.form.querySelector(mrUtil.selector.RECAPTCHA)) {
// Check mrUtil is present and correct version
if (!mrRecaptchav2) {
throw new Error('mrRecaptcha.js is required to handle the reCAPTCHA element in this form.');
} else {
// Returns an array of mrRecaptcha instances or null
this.recaptcha = mrRecaptchav2.getRecaptchaFromForm(this.form);
}
}
};
_proto.toggleFormLoading = function toggleFormLoading(loading) {
this.toggleSubmitButtonLoading(loading);
FormEmail.toggleDisabled(this.form.querySelectorAll(Selector.ALL_INPUTS), loading);
};
_proto.toggleSubmitButtonLoading = function toggleSubmitButtonLoading(loading) {
this.toggleSubmitButtonText(loading);
this.toggleSubmitButtonAnimation(loading);
FormEmail.toggleDisabled(this.submitButton, loading);
};
_proto.toggleSubmitButtonAnimation = function toggleSubmitButtonAnimation(animate) {
// If animate is true, add the class, else remove it.
this.submitButton.classList[animate ? 'add' : 'remove'](ClassName.LOADING);
};
_proto.toggleSubmitButtonText = function toggleSubmitButtonText(loading) {
// If loading, set text to loading text, else return to original text.
this.submitButtonSpan.textContent = loading ? this.loadingText : this.originalSubmitText;
};
FormEmail.toggleDisabled = function toggleDisabled(elements, disabled) {
// If loading, set text to loading text, else return to original text.
mrUtil.forEach(elements, function (index, element) {
return element[disabled ? 'setAttribute' : 'removeAttribute'](Attribute.DISABLED, '');
});
};
FormEmail.getInstanceFromForm = function getInstanceFromForm(form) {
if (mrUtil.isElement(form)) {
var data = $(form).data(DATA_KEY);
return data || null;
}
throw new TypeError('Form argument passed to getInstanceFromForm is not an element.');
};
_proto.setSubmitEvent = function setSubmitEvent() {
var _this2 = this;
$(this.form).on(Event.SUBMIT, function (event) {
event.preventDefault();
_this2.submitForm();
});
};
FormEmail.jQueryInterface = function jQueryInterface() {
return this.each(function jqEachFormEmail() {
var $element = $(this);
var data = $element.data(DATA_KEY);
if (!data) {
data = new FormEmail(this);
$element.data(DATA_KEY, data);
}
});
};
_createClass(FormEmail, null, [{
key: "VERSION",
get: function get() {
return VERSION;
}
}]);
return FormEmail;
}();
/**
* ------------------------------------------------------------------------
* Initialise by data attribute
* ------------------------------------------------------------------------
*/
$(window).on(Event.LOAD_DATA_API, function () {
var FormEmailElements = $.makeArray($(Selector.DATA_FORM_EMAIL));
/* eslint-disable no-plusplus */
for (var i = FormEmailElements.length; i--;) {
var $FormEmail = $(FormEmailElements[i]);
FormEmail.jQueryInterface.call($FormEmail, $FormEmail.data());
}
});
/**
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
*/
/* eslint-disable no-param-reassign */
$.fn[NAME] = FormEmail.jQueryInterface;
$.fn[NAME].Constructor = FormEmail;
$.fn[NAME].noConflict = function FormEmailNoConflict() {
$.fn[NAME] = JQUERY_NO_CONFLICT;
return FormEmail.jQueryInterface;
};
/* eslint-enable no-param-reassign */
return FormEmail;
}(jQuery$1);
var mrIonRangeSlider = function ($) {
/**
* Check for Ion rangeSlider dependency
* https://github.com/IonDen/ion.rangeSlider
*/
if (typeof $.fn.ionRangeSlider !== 'function') {
throw new Error('mrIonRangeSlider requires ion.rangeSlider.js (https://github.com/IonDen/ion.rangeSlider)');
} // Check mrUtil is present and correct version
if (!(mrUtil && mrUtil.version >= '1.2.0')) {
throw new Error('mrUtil >= version 1.2.0 is required.');
}
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
var NAME = 'mrIonRangeSlider';
var VERSION = '1.0.0';
var DATA_KEY = 'mr.ionRangeSlider';
var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api';
var JQUERY_NO_CONFLICT = $.fn[NAME];
var ION_RANGE_SLIDER_KEY = 'ionRangeSlider';
var Event = {
LOAD_DATA_API: "load" + EVENT_KEY + DATA_API_KEY,
CHANGE: 'input'
};
var Selector = {
DATA_ATTR: 'ion-rangeslider',
DATA_ION_RANGESLIDER: '[data-ion-rangeslider]',
INPUT: 'INPUT',
TEXT: 'text'
};
var Options = {
SKIN_DEFAULT: 'theme'
};
/**
* ------------------------------------------------------------------------
* Class Definition
* ------------------------------------------------------------------------
*/
var IonRangeSlider = /*#__PURE__*/function () {
function IonRangeSlider(element) {
var $element = $(element);
this.options = $element.data();
this.element = element;
this.fromElement = null;
this.toElement = null;
this.unitElement = null;
this.initRangeSlider();
} // getters
var _proto = IonRangeSlider.prototype;
_proto.initRangeSlider = function initRangeSlider() {
var options = this.options;
if (options.fromSelector) {
this.fromElement = document.querySelectorAll(options.fromSelector);
this.setFromUpdateEvent(this.fromElement);
}
if (options.toSelector) {
this.toElement = document.querySelectorAll(options.toSelector);
this.setToUpdateEvent(this.toElement);
}
if (options.unitSelector && options.unitSingle && options.unitPlural) {
this.unitElement = document.querySelectorAll(options.unitSelector);
}
$(this.element).ionRangeSlider({
skin: Options.SKIN_DEFAULT,
onStart: mrUtil.getFuncFromString(options.onStart),
onFinish: mrUtil.getFuncFromString(options.onFinish),
onChange: this.handleChange,
scope: this,
onUpdate: mrUtil.getFuncFromString(options.onUpdate)
});
this.rangeSlider = $(this.element).data(ION_RANGE_SLIDER_KEY);
} // HandleChange then also calls the user's callback
;
_proto.handleChange = function handleChange(data) {
if (this.fromElement && this.fromElement.length > 0) {
mrIonRangeSlider.updateValue(this.fromElement, data.from_value || data.from);
}
if (this.toElement && this.toElement.length > 0) {
mrIonRangeSlider.updateValue(this.toElement, data.to_value || data.to);
}
if (this.unitElement && this.unitElement.length > 0) {
var value = parseInt(data.from_value, 10) || data.value;
mrIonRangeSlider.updateValue(this.unitElement, value > 1 ? this.options.unitPlural : this.options.unitSingle);
}
var userChangeFunction = mrUtil.getFuncFromString(this.options.onChange);
if (userChangeFunction) {
userChangeFunction(data);
}
} // Takes a collection of "To" elements and attaches
// a change event handler to update the rangeslider when user inputs a value
;
_proto.setToUpdateEvent = function setToUpdateEvent(collection) {
var _this = this;
mrUtil.forEach(collection, function (index, element) {
if (element.tagName.toUpperCase() === Selector.INPUT && element.type === Selector.TEXT) {
element.addEventListener(Event.CHANGE, function () {
_this.rangeSlider.update({
to: element.value
});
});
}
});
} // Takes a collection of "From" elements and attaches
// a change event handler to update the rangeslider when user inputs a value
;
_proto.setFromUpdateEvent = function setFromUpdateEvent(collection) {
var _this2 = this;
mrUtil.forEach(collection, function (index, element) {
if (element.tagName.toUpperCase() === Selector.INPUT && element.type === Selector.TEXT) {
element.addEventListener(Event.CHANGE, function () {
_this2.rangeSlider.update({
from: element.value
});
});
}
});
};
IonRangeSlider.updateValue = function updateValue(collection, value) {
mrUtil.forEach(collection, function (index, element) {
var updateElement = element; // If element is an input, set the value instead of textContent
var updateMethod = element.tagName.toUpperCase() === Selector.INPUT ? 'value' : 'textContent';
updateElement[updateMethod] = value;
});
};
IonRangeSlider.jQueryInterface = function jQueryInterface() {
return this.each(function jqEachIonRangeSlider() {
var $element = $(this);
var data = $element.data(DATA_KEY);
if (!data) {
data = new IonRangeSlider(this);
$element.data(DATA_KEY, data);
}
});
};
_createClass(IonRangeSlider, null, [{
key: "VERSION",
get: function get() {
return VERSION;
}
}]);
return IonRangeSlider;
}();
/**
* ------------------------------------------------------------------------
* Initialise by data attribute
* ------------------------------------------------------------------------
*/
$(window).on(Event.LOAD_DATA_API, function () {
var ionRangeSliderElements = $.makeArray($(Selector.DATA_ION_RANGESLIDER));
/* eslint-disable no-plusplus */
for (var i = ionRangeSliderElements.length; i--;) {
var $ionRangeSlider = $(ionRangeSliderElements[i]);
IonRangeSlider.jQueryInterface.call($ionRangeSlider, $ionRangeSlider.data());
}
});
/**
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
*/
/* eslint-disable no-param-reassign */
$.fn[NAME] = IonRangeSlider.jQueryInterface;
$.fn[NAME].Constructor = IonRangeSlider;
$.fn[NAME].noConflict = function IonRangeSliderNoConflict() {
$.fn[NAME] = JQUERY_NO_CONFLICT;
return IonRangeSlider.jQueryInterface;
};
/* eslint-enable no-param-reassign */
return IonRangeSlider;
}(jQuery$1);
var mrIsotope = function ($) {
/**
* Check for isotope dependency
* isotope - https://github.com/metafizzy/isotope
*/
if (typeof Isotope$1 === 'undefined') {
throw new Error('mrIsotope requires isotope.pkgd.js (https://github.com/metafizzy/isotope)');
}
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
var NAME = 'mrIsotope';
var VERSION = '1.0.0';
var DATA_KEY = 'mr.isotope';
var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api';
var JQUERY_NO_CONFLICT = $.fn[NAME];
var Css = {
ACTIVE: 'active'
};
var Event = {
LOAD_DATA_API: "load" + EVENT_KEY + DATA_API_KEY,
FILTER_CLICK: 'click touchstart',
SORTER_CLICK: 'click touchstart'
};
var Options = {
DEFAULT_LAYOUT: 'masonry',
ORIGINAL_ORDER: 'original-order'
};
var Selector = {
FILTER_INITIALISED: '.js-filter-inited',
DATA_ATTR: 'isotope',
ISOTOPE_ID: 'data-isotope-id',
DATA_ISOTOPE_COLLECTION: '[data-isotope-collection]',
DATA_ISOTOPE_ITEM: '[data-isotope-item]',
DATA_ISOTOPE_FILTERS: '[data-isotope-filters]',
DATA_ISOTOPE_SORTERS: '[data-isotope-sorters]',
CATEGORY: 'data-category',
FILTER: 'data-filter',
SORTER: 'data-sort',
PRIMARY_SORTER: 'data-primary-sort',
SECOND_SORTER: 'data-secondary-sort',
SORT_SELECTOR: 'data-sort-selector',
DATA_CATEGORY: '[data-category]',
SORT_ASCENDING: 'data-sort-ascending',
FILTER_ALL: '*'
}; // returns a selector string for filterable elements matching the provided category
function getCategoryFilter(filterBy) {
return filterBy && filterBy !== Selector.FILTER_ALL ? "[" + Selector.CATEGORY + "*=\"" + filterBy + "\"]" : Selector.FILTER_ALL;
} // returns a nodelist of all filter links matching the provided isotope ID
function getFilters(isotopeId, exclude) {
var excludeSelector = exclude ? ":not(" + exclude + ")" : '';
var filters = document.querySelectorAll(Selector.DATA_ISOTOPE_FILTERS + "[" + Selector.ISOTOPE_ID + "=\"" + isotopeId + "\"] [" + Selector.FILTER + "]" + excludeSelector);
return filters;
} // returns a nodelist of all sorter links matching the provided isotope ID
function getSorters(isotopeId) {
return document.querySelectorAll(Selector.DATA_ISOTOPE_SORTERS + "[" + Selector.ISOTOPE_ID + "=\"" + isotopeId + "\"] [" + Selector.SORTER + "][" + Selector.SORT_SELECTOR + "],\n " + Selector.DATA_ISOTOPE_SORTERS + "[" + Selector.ISOTOPE_ID + "=\"" + isotopeId + "\"] [" + Selector.SORTER + "][" + Selector.PRIMARY_SORTER + "][" + Selector.SECOND_SORTER + "]");
} // returns a nodelist of all sorter links matching the provided sort value
function getSorter(isotopeId, sortValue) {
return document.querySelectorAll(Selector.DATA_ISOTOPE_SORTERS + "[" + Selector.ISOTOPE_ID + "=\"" + isotopeId + "\"] [" + Selector.SORTER + "=\"" + sortValue + "\"]");
} // returns a nodelist of all filter links matching the provided filter value
function getFilter(isotopeId, filter) {
return document.querySelectorAll(Selector.DATA_ISOTOPE_FILTERS + "[" + Selector.ISOTOPE_ID + "=\"" + isotopeId + "\"] [" + Selector.FILTER + "=\"" + filter + "\"]");
} // sets active class of provided elements on or off
function toggleActive(filters, active) {
if (filters) {
mrUtil.forEach(filters, function (index, filter) {
if (filter && typeof filter.classList !== typeof undefined) {
if (active) {
filter.classList.add(Css.ACTIVE);
} else {
filter.classList.remove(Css.ACTIVE);
}
}
});
}
}
/**
* ------------------------------------------------------------------------
* Class Definition
* ------------------------------------------------------------------------
*/
var IsotopeWrapper = /*#__PURE__*/function () {
function IsotopeWrapper(element) {
var $element = $(element);
var attributes = $element.data();
this.element = element;
this.attributes = attributes;
this.filters = {};
this.sorters = {};
this.activeFilter = null;
this.activeSorter = null;
this.isotope = null;
this.options = {};
this.options.getSortData = {};
this.options.sortAscending = {};
this.initIsotope();
this.initSorters();
this.initFilters();
} // getters
var _proto = IsotopeWrapper.prototype;
_proto.initFilters = function initFilters() {
var _this = this;
// Get all filter links
var filters = getFilters(this.attributes.isotopeId, Selector.FILTER_INITIALISED);
mrUtil.forEach(filters, function (index, filter) {
var filterValue = filter.attributes[Selector.FILTER] && filter.attributes[Selector.FILTER].value; // Find all other filters matching this value to be de/activated on click
_this.filters[filterValue] = getFilter(_this.attributes.isotopeId, filterValue); // Set up filter click event
$(filter).on(Event.FILTER_CLICK, function (event) {
if (event.preventDefault) {
event.preventDefault();
} // Activate appropriate links
toggleActive(_this.activeFilter, false);
toggleActive(_this.filters[filterValue], true);
_this.activeFilter = filters; // Get selectorified filter value unless value is '*' (* does not need to be a selector)
_this.options.filter = filterValue === '*' ? filterValue : getCategoryFilter(filterValue); // Update isotope with current filter settings
_this.isotope.arrange(_this.options);
}); // Add FILTER_INITIALISED class
// just to make distinguishing old and new filters easier
filter.classList.add(Selector.FILTER_INITIALISED);
});
};
_proto.initSorters = function initSorters() {
var _this2 = this;
// Get all sorters linked to current isotope-id
var sorters = getSorters(this.attributes.isotopeId);
var defaultSort = this.attributes.defaultSort || Options.ORIGINAL_ORDER;
mrUtil.forEach(sorters, function (index, sorter) {
// Get options from attributes
// Done this way for brevity (previous way was too wordy)
var sa = sorter.attributes;
var ss = sa[Selector.SORTER];
var ssel = sa[Selector.SORT_SELECTOR];
var asc = sa[Selector.SORT_ASCENDING];
var pri = sa[Selector.PRIMARY_SORTER];
var sec = sa[Selector.SECOND_SORTER]; // Extract options from attributes
var sortValue = ss && ss.value;
var sortSelector = ssel && ssel.value; // If secondSort is set, pass in an array rather than a single sort value
var arraySort = pri && pri.value && sec && sec.value ? [pri.value, sec.value] : null;
var sortAscending = !(asc && asc.value && asc.value === 'false'); // Store list of other sorters matching this value to be de/activated on click
_this2.sorters[sortValue] = getSorter(_this2.attributes.isotopeId, sortValue); // Set up sorters click event for this one sorter
$(sorter).on(Event.SORTER_CLICK, function (event) {
if (event.preventDefault) {
event.preventDefault();
} // Switch active class on sorter links
toggleActive(_this2.activeSorter, false);
toggleActive(_this2.sorters[sortValue], true);
_this2.activeSorter = _this2.sorters[sortValue]; // Pass in the arraySort (primary/secondary) array if it exists
// otherwise use clicked sortValue
_this2.options.sortBy = arraySort || sortValue; // Update isotope with curent options
_this2.isotope.arrange(_this2.options);
}); // Set sortAscending object with current sortAscending value
_this2.options.sortAscending[sortValue] = sortAscending; // Only set sortData in isotope if this is a unique sorting ID, not for
// array sorts (primary/secondary) as they simply use an array to
// reference existing sort configs
if (sortValue !== Options.ORIGINAL_ORDER && !arraySort) {
// Set the sort object in isotope options (will be reinitialised later)
// Won't be added as a new sortData entry if secondSort is active
_this2.options.getSortData[sortValue] = sortSelector;
}
}); // Set sorting order to default if it exists
this.options.sortBy = defaultSort; // Set default sorter to active
this.activeSorter = getSorter(this.attributes.isotopeId, defaultSort);
toggleActive(this.activeSorter, true); // Update isotope with collected sorter data
this.isotope.updateSortData(); // Update isotope with current sort options
this.isotope.arrange(this.options);
};
_proto.initIsotope = function initIsotope() {
// Get hash filter from URL
var hashFilter = window.location.hash.replace('#', '');
hashFilter = hashFilter !== '' && !this.attributes.ignoreHash ? hashFilter : null; // Determine default filter
var defaultFilter = hashFilter || this.attributes.defaultFilter || Selector.FILTER_ALL;
var defaultFilterSelector = getCategoryFilter(defaultFilter); // Default to true, unless found to be explicitly false
var defaultSortAscending = !this.attributes.sortAscending === false; // Setup initial config
this.options.itemSelector = Selector.DATA_ISOTOPE_ITEM;
this.options.layoutMode = this.attributes.layoutMode || Options.DEFAULT_LAYOUT;
this.options.filter = defaultFilterSelector;
this.options.sortAscending[Options.ORIGINAL_ORDER] = defaultSortAscending;
this.isotope = new Isotope$1(this.element, this.options);
this.activeFilter = getFilter(this.attributes.isotopeId, defaultFilter);
toggleActive(this.activeFilter, true);
};
IsotopeWrapper.jQueryInterface = function jQueryInterface() {
return this.each(function jqEachIsotope() {
var $element = $(this);
var data = $element.data(DATA_KEY);
if (!data) {
data = new IsotopeWrapper(this);
$element.data(DATA_KEY, data);
}
});
};
_createClass(IsotopeWrapper, null, [{
key: "VERSION",
get: function get() {
return VERSION;
}
}]);
return IsotopeWrapper;
}();
/**
* ------------------------------------------------------------------------
* Initialise by data attribute
* ------------------------------------------------------------------------
*/
$(window).on(Event.LOAD_DATA_API, function () {
var isotopeElements = $.makeArray($(Selector.DATA_ISOTOPE_COLLECTION));
/* eslint-disable no-plusplus */
for (var i = isotopeElements.length; i--;) {
var $isotope = $(isotopeElements[i]);
IsotopeWrapper.jQueryInterface.call($isotope, $isotope.data());
}
});
/**
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
*/
/* eslint-disable no-param-reassign */
$.fn[NAME] = IsotopeWrapper.jQueryInterface;
$.fn[NAME].Constructor = IsotopeWrapper;
$.fn[NAME].noConflict = function IsotopeWrapperNoConflict() {
$.fn[NAME] = JQUERY_NO_CONFLICT;
return IsotopeWrapper.jQueryInterface;
};
/* eslint-enable no-param-reassign */
return IsotopeWrapper;
}(jQuery$1);
//
(function ($) {
if (typeof jarallax === 'function') {
$('.alert-dismissible').on('closed.bs.alert', function () {
jarallax(document.querySelectorAll('[data-jarallax]'), 'onScroll');
});
$(document).on('resized.mr.overlayNav', function () {
jarallax(document.querySelectorAll('[data-jarallax]'), 'onResize');
});
jarallax(document.querySelectorAll('[data-jarallax]'), {
disableParallax: /iPad|iPhone|iPod|Android/,
disableVideo: /iPad|iPhone|iPod|Android/
});
}
})(jQuery$1);
var mrMapStyle = [{
featureType: 'administrative.country',
elementType: 'labels.text',
stylers: [{
lightness: '29'
}]
}, {
featureType: 'administrative.province',
elementType: 'labels.text.fill',
stylers: [{
lightness: '-12'
}, {
color: '#796340'
}]
}, {
featureType: 'administrative.locality',
elementType: 'labels.text.fill',
stylers: [{
lightness: '15'
}, {
saturation: '15'
}]
}, {
featureType: 'landscape.man_made',
elementType: 'geometry',
stylers: [{
visibility: 'on'
}, {
color: '#fbf5ed'
}]
}, {
featureType: 'landscape.natural',
elementType: 'geometry',
stylers: [{
visibility: 'on'
}, {
color: '#fbf5ed'
}]
}, {
featureType: 'poi',
elementType: 'labels',
stylers: [{
visibility: 'off'
}]
}, {
featureType: 'poi.attraction',
elementType: 'all',
stylers: [{
visibility: 'on'
}, {
lightness: '30'
}, {
saturation: '-41'
}, {
gamma: '0.84'
}]
}, {
featureType: 'poi.attraction',
elementType: 'labels',
stylers: [{
visibility: 'on'
}]
}, {
featureType: 'poi.business',
elementType: 'all',
stylers: [{
visibility: 'off'
}]
}, {
featureType: 'poi.business',
elementType: 'labels',
stylers: [{
visibility: 'off'
}]
}, {
featureType: 'poi.medical',
elementType: 'geometry',
stylers: [{
color: '#fbd3da'
}]
}, {
featureType: 'poi.medical',
elementType: 'labels',
stylers: [{
visibility: 'on'
}]
}, {
featureType: 'poi.park',
elementType: 'geometry',
stylers: [{
color: '#b0e9ac'
}, {
visibility: 'on'
}]
}, {
featureType: 'poi.park',
elementType: 'labels',
stylers: [{
visibility: 'on'
}]
}, {
featureType: 'poi.park',
elementType: 'labels.text.fill',
stylers: [{
hue: '#68ff00'
}, {
lightness: '-24'
}, {
gamma: '1.59'
}]
}, {
featureType: 'poi.sports_complex',
elementType: 'all',
stylers: [{
visibility: 'on'
}]
}, {
featureType: 'poi.sports_complex',
elementType: 'geometry',
stylers: [{
saturation: '10'
}, {
color: '#c3eb9a'
}]
}, {
featureType: 'road',
elementType: 'geometry.stroke',
stylers: [{
visibility: 'on'
}, {
lightness: '30'
}, {
color: '#e7ded6'
}]
}, {
featureType: 'road',
elementType: 'labels',
stylers: [{
visibility: 'on'
}, {
saturation: '-39'
}, {
lightness: '28'
}, {
gamma: '0.86'
}]
}, {
featureType: 'road.highway',
elementType: 'geometry.fill',
stylers: [{
color: '#ffe523'
}, {
visibility: 'on'
}]
}, {
featureType: 'road.highway',
elementType: 'geometry.stroke',
stylers: [{
visibility: 'on'
}, {
saturation: '0'
}, {
gamma: '1.44'
}, {
color: '#fbc28b'
}]
}, {
featureType: 'road.highway',
elementType: 'labels',
stylers: [{
visibility: 'on'
}, {
saturation: '-40'
}]
}, {
featureType: 'road.arterial',
elementType: 'geometry',
stylers: [{
color: '#fed7a5'
}]
}, {
featureType: 'road.arterial',
elementType: 'geometry.fill',
stylers: [{
visibility: 'on'
}, {
gamma: '1.54'
}, {
color: '#fbe38b'
}]
}, {
featureType: 'road.local',
elementType: 'geometry.fill',
stylers: [{
color: '#ffffff'
}, {
visibility: 'on'
}, {
gamma: '2.62'
}, {
lightness: '10'
}]
}, {
featureType: 'road.local',
elementType: 'geometry.stroke',
stylers: [{
visibility: 'on'
}, {
weight: '0.50'
}, {
gamma: '1.04'
}]
}, {
featureType: 'transit.station.airport',
elementType: 'geometry.fill',
stylers: [{
color: '#dee3fb'
}]
}, {
featureType: 'water',
elementType: 'geometry',
stylers: [{
saturation: '46'
}, {
color: '#a4e1ff'
}]
}];
var mrMaps = function ($) {
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
var NAME = 'mrMaps';
var VERSION = '1.1.0';
var DATA_KEY = 'mr.maps';
var EVENT_KEY = "." + DATA_KEY;
var JQUERY_NO_CONFLICT = $.fn[NAME];
var Selector = {
MAP: '[data-maps-api-key]',
MARKER: 'div.map-marker',
STYLE: 'div.map-style',
MARKER_ADDRESS: 'data-address',
MARKER_LATLNG: 'data-latlong',
MARKER_IMAGE: 'data-marker-image',
MARKER_TITLE: 'data-marker-title',
INFOWindow: 'div.info-window'
};
var String = {
MARKER_TITLE: ''
};
var Event = {
MAP_LOADED: "loaded" + EVENT_KEY
};
var Default = {
MARKER_IMAGE_URL: 'assets/img/map-marker.png',
MAP: {
disableDefaultUI: true,
draggable: true,
scrollwheel: false,
zoom: 17,
zoomControl: false
}
}; // mrMapStyle should be defined in a js file included prior to maps.js
// The data should be an array of style overrides as per snazzymaps.com.
Default.MAP.styles = typeof mrMapStyle !== typeof undefined ? mrMapStyle : undefined;
/**
* ------------------------------------------------------------------------
* Class Definition
* ------------------------------------------------------------------------
*/
var Map = /*#__PURE__*/function () {
function Map(element) {
// The current map element
this.element = element;
this.$element = $(element);
this.markers = [];
this.geocoder = new google.maps.Geocoder();
this.markerElements = this.$element.find(Selector.MARKER);
this.styleElement = this.$element.find(Selector.STYLE).first();
this.initMap();
this.createMarkers();
} // version getter
Map.init = function init() {
var mapsOnPage = $.makeArray($(Selector.MAP));
/* eslint-disable no-plusplus */
for (var i = mapsOnPage.length; i--;) {
var $map = $(mapsOnPage[i]);
Map.jQueryInterface.call($map, $map.data());
}
};
var _proto = Map.prototype;
_proto.initMap = function initMap() {
var _this = this;
var mapElement = this.element;
var mapInstance = this.$element;
var showZoomControl = typeof mapInstance.attr('data-zoom-controls') !== typeof undefined;
var zoomControlPos = typeof mapInstance.attr('data-zoom-controls') !== typeof undefined ? mapInstance.attr('data-zoom-controls') : false;
var latlong = typeof mapInstance.attr('data-latlong') !== typeof undefined ? mapInstance.attr('data-latlong') : false;
var latitude = latlong ? parseFloat(latlong.substr(0, latlong.indexOf(','))) : false;
var longitude = latlong ? parseFloat(latlong.substr(latlong.indexOf(',') + 1)) : false;
var address = mapInstance.attr('data-address') || '';
var mapOptions = null; // let markerOptions = null;
var mapAo = {}; // Attribute overrides - allows data attributes on the map to override global options
try {
mapAo.styles = this.styleElement.length ? JSON.parse(this.styleElement.html().trim()) : undefined;
} catch (error) {
throw new Error(error);
}
mapAo.zoom = mapInstance.attr('data-map-zoom') ? parseInt(mapInstance.attr('data-map-zoom'), 10) : undefined;
mapAo.zoomControl = showZoomControl;
mapAo.zoomControlOptions = zoomControlPos !== false ? {
position: google.maps.ControlPosition[zoomControlPos]
} : undefined;
mapOptions = jQuery.extend({}, Default.MAP, mapAo);
this.map = new google.maps.Map(mapElement, mapOptions);
google.maps.event.addListenerOnce(this.map, 'center_changed', function () {
// Map has been centered.
var loadedEvent = $.Event(Event.MAP_LOADED, {
map: _this.map
});
mapInstance.trigger(loadedEvent);
});
if (typeof latitude !== typeof undefined && latitude !== '' && latitude !== false && typeof longitude !== typeof undefined && longitude !== '' && longitude !== false) {
this.map.setCenter(new google.maps.LatLng(latitude, longitude));
} else if (address !== '') {
this.geocodeAddress(address, Map.centerMap, this, this.map);
} else {
throw new Error('No valid address or latitude/longitude pair provided for map.');
}
};
_proto.geocodeAddress = function geocodeAddress(address, callback, thisMap, args) {
this.geocoder.geocode({
address: address
}, function (results, status) {
if (status !== google.maps.GeocoderStatus.OK) {
throw new Error("There was a problem geocoding the address \"" + address + "\".");
} else {
callback(results, thisMap, args);
}
});
};
Map.centerMap = function centerMap(geocodeResults, thisMap) {
thisMap.map.setCenter(geocodeResults[0].geometry.location);
};
Map.moveMarker = function moveMarker(geocodeResults, thisMap, gMarker) {
gMarker.setPosition(geocodeResults[0].geometry.location);
};
_proto.createMarkers = function createMarkers() {
var _this2 = this;
Default.MARKER = {
icon: {
url: this.$element.attr(Selector.MARKER_IMAGE) || Default.MARKER_IMAGE_URL,
scaledSize: new google.maps.Size(50, 50)
},
title: String.MARKER_TITLE,
optimised: false
};
this.markerElements.each(function (index, marker) {
var gMarker;
var $marker = $(marker);
var markerAddress = $marker.attr(Selector.MARKER_ADDRESS);
var markerLatLng = $marker.attr(Selector.MARKER_LATLNG);
var infoWindow = $marker.find(Selector.INFOWindow);
var markerAo = {
title: $marker.attr(Selector.MARKER_TITLE)
};
markerAo.icon = typeof $marker.attr(Selector.MARKER_IMAGE) !== typeof undefined ? {
url: $marker.attr(Selector.MARKER_IMAGE),
scaledSize: new google.maps.Size(50, 50)
} : undefined;
var markerOptions = jQuery.extend({}, Default.MARKER, markerAo);
gMarker = new google.maps.Marker(jQuery.extend({}, markerOptions, {
map: _this2.map
}));
if (infoWindow.length) {
var gInfoWindow = new google.maps.InfoWindow({
content: infoWindow.first().html(),
maxWidth: parseInt(infoWindow.attr('data-max-width') || '250', 10)
});
gMarker.addListener('click', function () {
gInfoWindow.open(_this2.map, gMarker);
});
} // Set marker position
if (markerLatLng) {
if (/(-?\d+(\.\d+)?),\s*(-?\d+(\.\d+)?)/.test(markerLatLng)) {
gMarker.setPosition(new google.maps.LatLng(parseFloat(markerLatLng.substr(0, markerLatLng.indexOf(','))), parseFloat(markerLatLng.substr(markerLatLng.indexOf(',') + 1))));
_this2.markers[index] = gMarker;
}
} else if (markerAddress) {
_this2.geocodeAddress(markerAddress, Map.moveMarker, _this2, gMarker);
_this2.markers[index] = gMarker;
} else {
gMarker = null;
throw new Error("Invalid data-address or data-latlong provided for marker " + (index + 1));
}
});
};
Map.jQueryInterface = function jQueryInterface() {
return this.each(function jqEachMap() {
var $element = $(this);
var data = $element.data(DATA_KEY);
if (!data) {
data = new Map(this);
$element.data(DATA_KEY, data);
}
});
};
_createClass(Map, null, [{
key: "VERSION",
get: function get() {
return VERSION;
}
}]);
return Map;
}(); // END Class definition
/**
* ------------------------------------------------------------------------
* Initialise by data attribute
* ------------------------------------------------------------------------
*/
// Load Google MAP API JS with callback to initialise when fully loaded
if (document.querySelector('[data-maps-api-key]') && !document.querySelector('.gMapsAPI')) {
if ($('[data-maps-api-key]').length) {
var apiKey = $('[data-maps-api-key]:first').attr('data-maps-api-key') || '';
if (apiKey !== '') {
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = "https://maps.googleapis.com/maps/api/js?key=" + apiKey + "&callback=theme.mrMaps.init";
script.className = 'gMapsAPI';
document.body.appendChild(script);
}
}
}
/**
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
*/
/* eslint-disable no-param-reassign */
$.fn[NAME] = Map.jQueryInterface;
$.fn[NAME].Constructor = Map;
$.fn[NAME].noConflict = function MapNoConflict() {
$.fn[NAME] = JQUERY_NO_CONFLICT;
return Map.jQueryInterface;
};
/* eslint-enable no-param-reassign */
return Map;
}(jQuery);
var mrOverlayNav = function ($) {
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
var NAME = 'mrOverlayNav';
var VERSION = '1.1.0';
var DATA_KEY = 'mr.overlayNav';
var EVENT_KEY = "." + DATA_KEY;
var JQUERY_NO_CONFLICT = $.fn[NAME];
var Event = {
RESIZE: "resize" + EVENT_KEY,
RESIZED: "resized" + EVENT_KEY,
IMAGE_LOAD: 'load',
TOGGLE_SHOW: 'show.bs.collapse',
TOGGLE_HIDDEN: 'hidden.bs.collapse',
NOTIFICATION_CLOSE: '',
ALERT_CLOSE: 'close.bs.alert'
};
var Selector = {
CONTAINER: 'body > div.navbar-container',
OVERLAY_NAV: 'body > div.navbar-container > nav[data-overlay]',
NAV: 'nav',
OVERLAY_SECTION: '[data-overlay]',
IMAGE: 'img',
NAV_TOGGLED: 'navbar-toggled-show'
};
/**
* ------------------------------------------------------------------------
* Class Definition
* ------------------------------------------------------------------------
*/
var OverlayNav = /*#__PURE__*/function () {
function OverlayNav(element) {
this.ticking = false; // Used to debounce resize event
this.element = element;
this.navHeight = this.getNavHeight();
this.navToggled = false;
this.container = OverlayNav.getContainerElement();
this.overlayElement = OverlayNav.getFirstOverlayElement();
this.setImageLoadEvent();
this.updateValues();
this.setResizeEvent();
this.setNavToggleEvents();
} // getters
var _proto = OverlayNav.prototype;
_proto.getNavHeight = function getNavHeight() {
this.navHeight = this.element.getBoundingClientRect().height;
};
_proto.updateValues = function updateValues() {
this.getNavHeight();
this.updateContainer();
this.updateOverlayElement();
$(this.element).trigger($.Event(Event.RESIZED));
};
_proto.updateContainer = function updateContainer() {
// Don't update min height on the container if the nav is toggled/open.
if (!this.container || this.navToggled) {
return;
}
this.container.style.minHeight = this.navHeight + "px";
this.container.style.marginBottom = "-" + this.navHeight + "px";
};
_proto.updateOverlayElement = function updateOverlayElement() {
if (!this.overlayElement || this.navToggled) {
return;
}
this.overlayElement.style.setProperty('padding-top', this.navHeight + "px", 'important');
};
_proto.setResizeEvent = function setResizeEvent() {
var _this = this;
$(window).on(Event.RESIZE + " " + Event.ALERT_CLOSE, function () {
if (!_this.ticking) {
window.requestAnimationFrame(function () {
_this.updateValues();
_this.ticking = false;
});
_this.ticking = true;
}
});
};
_proto.setNavToggleEvents = function setNavToggleEvents() {
var _this2 = this;
$(this.element).on("" + Event.TOGGLE_SHOW, function () {
_this2.navToggled = true;
}); // navHeight should only be recalculated when the nav is not open/toggled
// Don't allow the navHeight to be recalculated until the nav is fully hidden
$(this.element).on("" + Event.TOGGLE_HIDDEN, function () {
_this2.navToggled = false;
});
};
_proto.setImageLoadEvent = function setImageLoadEvent() {
var _this3 = this;
var images = this.container.querySelectorAll(Selector.IMAGE);
mrUtil.forEach(images, function (index, image) {
image.addEventListener(Event.IMAGE_LOAD, function () {
return _this3.updateValues();
});
});
};
OverlayNav.getContainerElement = function getContainerElement() {
if (!this.container) {
this.container = document.querySelector(Selector.CONTAINER);
}
return this.container;
};
OverlayNav.getFirstOverlayElement = function getFirstOverlayElement() {
return document.querySelector(Selector.OVERLAY_SECTION + ":not(" + Selector.NAV + ")");
};
OverlayNav.jQueryInterface = function jQueryInterface() {
return this.each(function jqEachoverlayNav() {
var $element = $(this);
var data = $element.data(DATA_KEY);
if (!data) {
data = new OverlayNav(this);
$element.data(DATA_KEY, data);
}
});
};
_createClass(OverlayNav, null, [{
key: "VERSION",
get: function get() {
return VERSION;
}
}]);
return OverlayNav;
}();
/**
* ------------------------------------------------------------------------
* Initialise by data attribute
* ------------------------------------------------------------------------
*/
$(document).ready(function () {
var overlayNavElements = $.makeArray($(Selector.OVERLAY_NAV));
/* eslint-disable no-plusplus */
for (var i = overlayNavElements.length; i--;) {
var $overlayNav = $(overlayNavElements[i]);
OverlayNav.jQueryInterface.call($overlayNav, $overlayNav.data());
}
});
/**
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
*/
/* eslint-disable no-param-reassign */
$.fn[NAME] = OverlayNav.jQueryInterface;
$.fn[NAME].Constructor = OverlayNav;
$.fn[NAME].noConflict = function overlayNavNoConflict() {
$.fn[NAME] = JQUERY_NO_CONFLICT;
return OverlayNav.jQueryInterface;
};
/* eslint-enable no-param-reassign */
return OverlayNav;
}(jQuery$1);
//
(function ($) {
var Event = {
TOGGLE_SHOW: 'show.bs.collapse',
TOGGLE_HIDE: 'hide.bs.collapse'
};
var Selector = {
CONTAINER: 'body > div.navbar-container',
NAV: '.navbar-container > .navbar'
};
var ClassName = {
TOGGLED_SHOW: 'navbar-toggled-show'
};
var container = document.querySelector(Selector.CONTAINER);
var nav = document.querySelector(Selector.NAV);
$(container).on(Event.TOGGLE_SHOW + " " + Event.TOGGLE_HIDE, function (evt) {
var action = evt.type + "." + evt.namespace === Event.TOGGLE_SHOW ? 'add' : 'remove';
nav.classList[action](ClassName.TOGGLED_SHOW);
});
})(jQuery$1);
//
Plyr.setup('[data-provider],.plyr');
//
(function ($) {
$(document).on('hide.bs.tab', function (evt) {
$($(evt.target).attr('href')).find('[data-toggle="popover"]').popover('hide');
});
$(document).on('hide.bs.collapse', function (evt) {
$(evt.target).find('[data-toggle="popover"]').popover('hide');
});
})(jQuery$1);
//
Prism.highlightAll();
var mrReadingPosition = function ($) {
/**
* Check for scrollMonitor dependency
* scrollMonitor - https://github.com/stutrek/scrollMonitor
*/
if (typeof scrollMonitor === 'undefined') {
throw new Error('mrReadingPosition requires scrollMonitor.js (https://github.com/stutrek/scrollMonitor)');
}
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
var NAME = 'mrReadingPosition';
var VERSION = '1.0.0';
var DATA_KEY = 'mr.readingPosition';
var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api';
var JQUERY_NO_CONFLICT = $.fn[NAME];
var Css = {
HIDDEN: 'reading-position-hidden'
};
var Event = {
LOAD_DATA_API: "load" + EVENT_KEY + DATA_API_KEY,
RESIZE: 'resize',
SCROLL: 'scroll'
};
var Selector = {
PROGRESS: 'progress.reading-position',
DATA_ATTR: 'reading-position',
DATA_READING_POSITION: '[data-reading-position]',
VALUE: 'value',
MAX: 'max'
};
var Value = {
BAR_MAX: 100,
BAR_MIN: 0
};
var progressBars = document.querySelectorAll(Selector.PROGRESS); // const $window = $(window);
// const $document = $(document);
var getWindowHeight = function getWindowHeight() {
return Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
};
var getScrollPosition = function getScrollPosition() {
return (document.documentElement.scrollTop === 0 ? document.body.scrollTop : document.documentElement.scrollTop) || 0;
};
/**
* ------------------------------------------------------------------------
* Class Definition
* ------------------------------------------------------------------------
*/
var ReadingPosition = /*#__PURE__*/function () {
function ReadingPosition(element) {
this.progressBars = progressBars;
this.element = element;
this.top = 0;
this.bottom = 0;
this.height = 0;
this.scrollLength = 0;
this.articlePositionPercent = 0;
this.ticking = false;
this.inView = false;
this.reading = false;
this.initWatcher(element);
this.initBarValues();
this.setValue(getScrollPosition());
this.setScrollEvent();
this.setResizeEvent();
} // get VERSION
var _proto = ReadingPosition.prototype;
_proto.initWatcher = function initWatcher(element) {
var _this = this;
var watcher = scrollMonitor.create(element);
this.watcher = watcher;
this.recalculateAll();
watcher.stateChange(function () {
_this.inView = watcher.isInViewport;
_this.reading = watcher.isAboveViewport && watcher.isFullyInViewport;
_this.toggleBars(_this.reading);
});
};
_proto.initBarValues = function initBarValues() {
mrUtil.forEach(this.progressBars, function (index, bar) {
bar.setAttribute(Selector.MAX, Value.BAR_MAX);
});
};
_proto.setValue = function setValue(scrollPosition) {
var _this2 = this;
this.recalculatePercentage(scrollPosition);
mrUtil.forEach(this.progressBars, function (index, bar) {
bar.setAttribute(Selector.VALUE, _this2.articlePositionPercent);
});
};
_proto.toggleBars = function toggleBars(show) {
mrUtil.forEach(this.progressBars, function (index, bar) {
if (show) {
bar.classList.remove(Css.HIDDEN);
} else {
bar.classList.add(Css.HIDDEN);
}
});
};
_proto.setScrollEvent = function setScrollEvent() {
var _this3 = this;
window.addEventListener(Event.SCROLL, function () {
var scrollPosition = getScrollPosition();
if (!_this3.ticking && _this3.inView && _this3.reading) {
window.requestAnimationFrame(function () {
_this3.setValue(scrollPosition);
_this3.ticking = false;
});
_this3.ticking = true;
}
});
};
_proto.setResizeEvent = function setResizeEvent() {
var _this4 = this;
window.addEventListener(Event.RESIZE, function () {
return _this4.recalculateAll();
});
};
_proto.recalculateAll = function recalculateAll() {
this.watcher.recalculateLocation();
this.top = this.watcher.top;
this.bottom = this.watcher.bottom;
this.height = this.watcher.height; // Scroll Length is the scrolling viewable area of the article
// from top of article = top of window to bottom of article = bottom of window.
this.scrollLength = this.height - getWindowHeight(); // Position percent is how far the view is through the scrollable length in percentage.
this.recalculatePercentage(getScrollPosition());
};
_proto.recalculatePercentage = function recalculatePercentage(scrollPosition) {
this.articlePositionPercent = !scrollPosition ? 0 : (scrollPosition - this.top) / this.scrollLength * 100;
};
ReadingPosition.jQueryInterface = function jQueryInterface() {
return this.each(function jqEachReadingPosition() {
var $element = $(this);
var data = $element.data(DATA_KEY);
if (!data) {
data = new ReadingPosition(this);
$element.data(DATA_KEY, data);
}
});
};
_createClass(ReadingPosition, null, [{
key: "VERSION",
get: function get() {
return VERSION;
}
}]);
return ReadingPosition;
}();
/**
* ------------------------------------------------------------------------
* Initialise by data attribute
* ------------------------------------------------------------------------
*/
$(window).on(Event.LOAD_DATA_API, function () {
// Proceed to initialise only if a progress bar is found in the document
if (progressBars.length === 0) {
return;
} // Gather articles and loop over, initialising ReadingPosition instance
var readingPositionElements = $.makeArray($(Selector.DATA_READING_POSITION));
/* eslint-disable no-plusplus */
for (var i = readingPositionElements.length; i--;) {
var $readingPosition = $(readingPositionElements[i]);
ReadingPosition.jQueryInterface.call($readingPosition, $readingPosition.data());
}
});
/**
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
*/
/* eslint-disable no-param-reassign */
$.fn[NAME] = ReadingPosition.jQueryInterface;
$.fn[NAME].Constructor = ReadingPosition;
$.fn[NAME].noConflict = function ReadingPositionNoConflict() {
$.fn[NAME] = JQUERY_NO_CONFLICT;
return ReadingPosition.jQueryInterface;
};
/* eslint-enable no-param-reassign */
return ReadingPosition;
}(jQuery);
//
var mrSmoothScroll = function ($) {
var smoothScroll = new SmoothScroll('a[data-smooth-scroll]', {
offset: $('body').attr('data-smooth-scroll-offset') || 0
});
return smoothScroll;
}(jQuery$1);
var mrSticky = function ($) {
/**
* Check for scrollMonitor dependency
* scrollMonitor - https://github.com/stutrek/scrollMonitor
*/
if (typeof scrollMonitor === 'undefined') {
throw new Error('mrSticky requires scrollMonitor.js (https://github.com/stutrek/scrollMonitor)');
}
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
var NAME = 'mrSticky';
var VERSION = '1.4.0';
var DATA_KEY = 'mr.sticky';
var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api';
var JQUERY_NO_CONFLICT = $.fn[NAME];
var NO_OFFSET = 0;
var ClassName = {
FIXED_TOP: 'position-fixed',
ABSOLUTE_BOTTOM: 'sticky-bottom',
FIXED_BOTTOM: 'sticky-viewport-bottom',
SCROLLED: 'scrolled'
};
var Css = {
HEIGHT: 'min-height',
WIDTH: 'max-width',
SPACE_TOP: 'top',
SPACE_BOTTOM: 'bottom'
};
var Event = {
LOAD_DATA_API: "load" + EVENT_KEY + DATA_API_KEY,
WINDOW_RESIZE: 'resize',
ALERT_CLOSED: 'closed.bs.alert',
TOGGLE_SHOW: 'show.bs.collapse',
TOGGLE_HIDDEN: 'hidden.bs.collapse'
};
var Options = {
BELOW_NAV: 'below-nav',
TOP: 'top',
BOTTOM: 'bottom'
};
var Selector = {
DATA_ATTR: 'sticky',
DATA_STICKY: '[data-sticky]',
NAV_STICKY: 'body > div.navbar-container [data-sticky="top"]',
ALERT: '.alert-dismissible'
};
/**
* ------------------------------------------------------------------------
* Class Definition
* ------------------------------------------------------------------------
*/
var Sticky = /*#__PURE__*/function () {
function Sticky(element) {
var $element = $(element);
var stickyData = $element.data(Selector.DATA_ATTR);
var stickyUntil = $element.closest('section') || null;
this.element = element;
this.stickBelowNav = stickyData === Options.BELOW_NAV;
this.stickBottom = stickyData === Options.BOTTOM;
this.stickyUntil = stickyUntil;
this.navToggled = false;
this.updateNavProperties();
this.isNavElement = $element.is(this.navElement);
this.initWatcher($element);
this.updateCss();
this.setResizeEvent(); // Run a calculation immediately to show sticky elements if page starts
// at a half-scrolled position
this.onWatcherChange($element);
this.ticking = false; // for debouncing resize event with RequestAnimationFrame
if (this.isNavElement) {
this.setNavToggleEvents();
}
} // getters
var _proto = Sticky.prototype;
_proto.initWatcher = function initWatcher(element) {
var _this = this;
var $element = $(element);
var notNavElement = !this.isNavElement;
var offset = this.stickBelowNav && this.navIsSticky && notNavElement ? {
top: this.navHeight
} : NO_OFFSET;
offset = this.stickBottom && notNavElement ? {
bottom: -$element.outerHeight
} : offset;
var watcher = scrollMonitor.create(element, offset); // ensure that we're always watching the place the element originally was
watcher.lock();
var untilWatcher = this.stickyUntil !== null ? scrollMonitor.create(this.stickyUntil, {
bottom: -(watcher.height + offset.top)
}) : null;
this.watcher = watcher;
this.untilWatcher = untilWatcher;
this.navHeight = this.navHeight; // For navs that start at top, stick them immediately to avoid a jump
if (this.isNavElement && watcher.top === 0 && !this.navIsAbsolute) {
$element.addClass(ClassName.FIXED_TOP);
}
watcher.stateChange(function () {
_this.onWatcherChange($element);
});
if (untilWatcher !== null) {
untilWatcher.exitViewport(function () {
// If the element is in a section, it will scroll up with the section
$element.addClass(ClassName.ABSOLUTE_BOTTOM);
});
untilWatcher.enterViewport(function () {
$element.removeClass(ClassName.ABSOLUTE_BOTTOM);
});
}
};
_proto.onWatcherChange = function onWatcherChange($element) {
// Add fixed when element leaves via top of viewport or if nav is sitting at top
$element.toggleClass(ClassName.FIXED_TOP, this.watcher.isAboveViewport || !this.navIsAbsolute && !this.stickBottom && this.isNavElement && this.watcher.top === 0); // Used to apply styles to the nav based on "scrolled" class
// independedly of position-fixed because that class is used for more practical reasons
// such as avoiding a jump on first scroll etc.
$element.toggleClass(ClassName.SCROLLED, this.watcher.isAboveViewport && this.isNavElement && !this.stickBottom); // Fix to bottom when element enters via bottom of viewport and has data-sticky="bottom"
$element.toggleClass(ClassName.FIXED_BOTTOM, (this.watcher.isFullyInViewport || this.watcher.isAboveViewport) && this.stickBottom);
if (!this.stickBottom) {
$element.css(Css.SPACE_TOP, this.watcher.isAboveViewport && this.navIsSticky && this.stickBelowNav ? this.navHeight : NO_OFFSET);
}
};
_proto.setResizeEvent = function setResizeEvent() {
var _this2 = this;
// Closing any alerts above the nav will mean we need to recalculate position.
$(Selector.ALERT).on(Event.ALERT_CLOSED, function () {
// An alert above the nav will cause odd sticky behaviour if
// the alert is dismissed and nav position is not recalculated,
// as scrollMonitor has locked the position of the watcher.
// Unlock and recalculate if the nav is in the viewport during alert close event.
if (_this2.watcher.isInViewport) {
_this2.watcher.unlock();
_this2.watcher.recalculateLocation();
_this2.watcher.lock();
}
_this2.onResize();
});
$(window).on(Event.WINDOW_RESIZE, function () {
_this2.onResize();
});
};
_proto.onResize = function onResize() {
var _this3 = this;
if (!this.ticking) {
window.requestAnimationFrame(function () {
_this3.updateCss();
_this3.ticking = false;
});
this.ticking = true;
}
};
_proto.setNavToggleEvents = function setNavToggleEvents() {
var _this4 = this;
$(this.element).on("" + Event.TOGGLE_SHOW, function () {
_this4.navToggled = true;
}); // navHeight should only be recalculated when the nav is not open/toggled
// Don't allow the navHeight to be recalculated until the nav is fully hidden
$(this.element).on("" + Event.TOGGLE_HIDDEN, function () {
_this4.navToggled = false;
});
};
_proto.updateCss = function updateCss() {
var $element = $(this.element); // Fix width by getting parent's width to avoid element spilling out when pos-fixed
$element.css(Css.WIDTH, $element.parent().width());
this.updateNavProperties();
var elemHeight = $element.outerHeight();
var notNavElement = !this.isNavElement; // Set a min-height to prevent "jumping" when sticking to top
// but not applied to the nav element itself unless it is overlay (absolute) nav
if (!this.navIsAbsolute && this.isNavElement || notNavElement) {
// navHeight should only be recalculated when the nav is not open/toggled
// Don't allow the navHeight to be set until the nav is fully hidden
if (!this.navToggled) {
$element.parent().css(Css.HEIGHT, elemHeight);
}
}
if (this.navIsSticky && notNavElement) {
$element.css(Css.HEIGHT, elemHeight);
}
};
_proto.updateNavProperties = function updateNavProperties() {
var $navElement = this.navElement || $(Selector.NAV_STICKY).first();
this.navElement = $navElement;
this.navHeight = $navElement.outerHeight();
this.navIsAbsolute = $navElement.css('position') === 'absolute';
this.navIsSticky = $navElement.length > 0;
};
Sticky.jQueryInterface = function jQueryInterface() {
return this.each(function jqEachSticky() {
var $element = $(this);
var data = $element.data(DATA_KEY);
if (!data) {
data = new Sticky(this);
$element.data(DATA_KEY, data);
}
});
};
_createClass(Sticky, null, [{
key: "VERSION",
get: function get() {
return VERSION;
}
}]);
return Sticky;
}();
/**
* ------------------------------------------------------------------------
* Initialise by data attribute
* ------------------------------------------------------------------------
*/
$(window).on(Event.LOAD_DATA_API, function () {
var stickyElements = $.makeArray($(Selector.DATA_STICKY));
/* eslint-disable no-plusplus */
for (var i = stickyElements.length; i--;) {
var $sticky = $(stickyElements[i]);
Sticky.jQueryInterface.call($sticky, $sticky.data());
}
});
/**
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
*/
/* eslint-disable no-param-reassign */
$.fn[NAME] = Sticky.jQueryInterface;
$.fn[NAME].Constructor = Sticky;
$.fn[NAME].noConflict = function StickyNoConflict() {
$.fn[NAME] = JQUERY_NO_CONFLICT;
return Sticky.jQueryInterface;
};
/* eslint-enable no-param-reassign */
return Sticky;
}(jQuery$1);
var ceil = Math.ceil;
var floor = Math.floor;
// `ToInteger` abstract operation
// https://tc39.github.io/ecma262/#sec-tointeger
var toInteger = function (argument) {
return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument);
};
// `RequireObjectCoercible` abstract operation
// https://tc39.github.io/ecma262/#sec-requireobjectcoercible
var requireObjectCoercible = function (it) {
if (it == undefined) throw TypeError("Can't call method on " + it);
return it;
};
// `String.prototype.{ codePointAt, at }` methods implementation
var createMethod = function (CONVERT_TO_STRING) {
return function ($this, pos) {
var S = String(requireObjectCoercible($this));
var position = toInteger(pos);
var size = S.length;
var first, second;
if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;
first = S.charCodeAt(position);
return first < 0xD800 || first > 0xDBFF || position + 1 === size
|| (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF
? CONVERT_TO_STRING ? S.charAt(position) : first
: CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;
};
};
var stringMultibyte = {
// `String.prototype.codePointAt` method
// https://tc39.github.io/ecma262/#sec-string.prototype.codepointat
codeAt: createMethod(false),
// `String.prototype.at` method
// https://github.com/mathiasbynens/String.prototype.at
charAt: createMethod(true)
};
var check = function (it) {
return it && it.Math == Math && it;
};
// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
var global_1 =
// eslint-disable-next-line no-undef
check(typeof globalThis == 'object' && globalThis) ||
check(typeof window == 'object' && window) ||
check(typeof self == 'object' && self) ||
check(typeof commonjsGlobal == 'object' && commonjsGlobal) ||
// eslint-disable-next-line no-new-func
Function('return this')();
var fails = function (exec) {
try {
return !!exec();
} catch (error) {
return true;
}
};
// Thank's IE8 for his funny defineProperty
var descriptors = !fails(function () {
return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;
});
var isObject = function (it) {
return typeof it === 'object' ? it !== null : typeof it === 'function';
};
var document$1 = global_1.document;
// typeof document.createElement is 'object' in old IE
var EXISTS = isObject(document$1) && isObject(document$1.createElement);
var documentCreateElement = function (it) {
return EXISTS ? document$1.createElement(it) : {};
};
// Thank's IE8 for his funny defineProperty
var ie8DomDefine = !descriptors && !fails(function () {
return Object.defineProperty(documentCreateElement('div'), 'a', {
get: function () { return 7; }
}).a != 7;
});
var anObject = function (it) {
if (!isObject(it)) {
throw TypeError(String(it) + ' is not an object');
} return it;
};
// `ToPrimitive` abstract operation
// https://tc39.github.io/ecma262/#sec-toprimitive
// instead of the ES6 spec version, we didn't implement @@toPrimitive case
// and the second argument - flag - preferred type is a string
var toPrimitive = function (input, PREFERRED_STRING) {
if (!isObject(input)) return input;
var fn, val;
if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;
if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val;
if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;
throw TypeError("Can't convert object to primitive value");
};
var nativeDefineProperty = Object.defineProperty;
// `Object.defineProperty` method
// https://tc39.github.io/ecma262/#sec-object.defineproperty
var f = descriptors ? nativeDefineProperty : function defineProperty(O, P, Attributes) {
anObject(O);
P = toPrimitive(P, true);
anObject(Attributes);
if (ie8DomDefine) try {
return nativeDefineProperty(O, P, Attributes);
} catch (error) { /* empty */ }
if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');
if ('value' in Attributes) O[P] = Attributes.value;
return O;
};
var objectDefineProperty = {
f: f
};
var createPropertyDescriptor = function (bitmap, value) {
return {
enumerable: !(bitmap & 1),
configurable: !(bitmap & 2),
writable: !(bitmap & 4),
value: value
};
};
var createNonEnumerableProperty = descriptors ? function (object, key, value) {
return objectDefineProperty.f(object, key, createPropertyDescriptor(1, value));
} : function (object, key, value) {
object[key] = value;
return object;
};
var setGlobal = function (key, value) {
try {
createNonEnumerableProperty(global_1, key, value);
} catch (error) {
global_1[key] = value;
} return value;
};
var SHARED = '__core-js_shared__';
var store = global_1[SHARED] || setGlobal(SHARED, {});
var sharedStore = store;
var functionToString = Function.toString;
// this helper broken in `3.4.1-3.4.4`, so we can't use `shared` helper
if (typeof sharedStore.inspectSource != 'function') {
sharedStore.inspectSource = function (it) {
return functionToString.call(it);
};
}
var inspectSource = sharedStore.inspectSource;
var WeakMap = global_1.WeakMap;
var nativeWeakMap = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap));
var hasOwnProperty = {}.hasOwnProperty;
var has = function (it, key) {
return hasOwnProperty.call(it, key);
};
var shared = createCommonjsModule(function (module) {
(module.exports = function (key, value) {
return sharedStore[key] || (sharedStore[key] = value !== undefined ? value : {});
})('versions', []).push({
version: '3.6.4',
mode: 'global',
copyright: '© 2020 Denis Pushkarev (zloirock.ru)'
});
});
var id = 0;
var postfix = Math.random();
var uid = function (key) {
return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36);
};
var keys = shared('keys');
var sharedKey = function (key) {
return keys[key] || (keys[key] = uid(key));
};
var hiddenKeys = {};
var WeakMap$1 = global_1.WeakMap;
var set, get, has$1;
var enforce = function (it) {
return has$1(it) ? get(it) : set(it, {});
};
var getterFor = function (TYPE) {
return function (it) {
var state;
if (!isObject(it) || (state = get(it)).type !== TYPE) {
throw TypeError('Incompatible receiver, ' + TYPE + ' required');
} return state;
};
};
if (nativeWeakMap) {
var store$1 = new WeakMap$1();
var wmget = store$1.get;
var wmhas = store$1.has;
var wmset = store$1.set;
set = function (it, metadata) {
wmset.call(store$1, it, metadata);
return metadata;
};
get = function (it) {
return wmget.call(store$1, it) || {};
};
has$1 = function (it) {
return wmhas.call(store$1, it);
};
} else {
var STATE = sharedKey('state');
hiddenKeys[STATE] = true;
set = function (it, metadata) {
createNonEnumerableProperty(it, STATE, metadata);
return metadata;
};
get = function (it) {
return has(it, STATE) ? it[STATE] : {};
};
has$1 = function (it) {
return has(it, STATE);
};
}
var internalState = {
set: set,
get: get,
has: has$1,
enforce: enforce,
getterFor: getterFor
};
var nativePropertyIsEnumerable = {}.propertyIsEnumerable;
var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
// Nashorn ~ JDK8 bug
var NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1);
// `Object.prototype.propertyIsEnumerable` method implementation
// https://tc39.github.io/ecma262/#sec-object.prototype.propertyisenumerable
var f$1 = NASHORN_BUG ? function propertyIsEnumerable(V) {
var descriptor = getOwnPropertyDescriptor(this, V);
return !!descriptor && descriptor.enumerable;
} : nativePropertyIsEnumerable;
var objectPropertyIsEnumerable = {
f: f$1
};
var toString = {}.toString;
var classofRaw = function (it) {
return toString.call(it).slice(8, -1);
};
var split = ''.split;
// fallback for non-array-like ES3 and non-enumerable old V8 strings
var indexedObject = fails(function () {
// throws an error in rhino, see https://github.com/mozilla/rhino/issues/346
// eslint-disable-next-line no-prototype-builtins
return !Object('z').propertyIsEnumerable(0);
}) ? function (it) {
return classofRaw(it) == 'String' ? split.call(it, '') : Object(it);
} : Object;
// toObject with fallback for non-array-like ES3 strings
var toIndexedObject = function (it) {
return indexedObject(requireObjectCoercible(it));
};
var nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
// `Object.getOwnPropertyDescriptor` method
// https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor
var f$2 = descriptors ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {
O = toIndexedObject(O);
P = toPrimitive(P, true);
if (ie8DomDefine) try {
return nativeGetOwnPropertyDescriptor(O, P);
} catch (error) { /* empty */ }
if (has(O, P)) return createPropertyDescriptor(!objectPropertyIsEnumerable.f.call(O, P), O[P]);
};
var objectGetOwnPropertyDescriptor = {
f: f$2
};
var redefine = createCommonjsModule(function (module) {
var getInternalState = internalState.get;
var enforceInternalState = internalState.enforce;
var TEMPLATE = String(String).split('String');
(module.exports = function (O, key, value, options) {
var unsafe = options ? !!options.unsafe : false;
var simple = options ? !!options.enumerable : false;
var noTargetGet = options ? !!options.noTargetGet : false;
if (typeof value == 'function') {
if (typeof key == 'string' && !has(value, 'name')) createNonEnumerableProperty(value, 'name', key);
enforceInternalState(value).source = TEMPLATE.join(typeof key == 'string' ? key : '');
}
if (O === global_1) {
if (simple) O[key] = value;
else setGlobal(key, value);
return;
} else if (!unsafe) {
delete O[key];
} else if (!noTargetGet && O[key]) {
simple = true;
}
if (simple) O[key] = value;
else createNonEnumerableProperty(O, key, value);
// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative
})(Function.prototype, 'toString', function toString() {
return typeof this == 'function' && getInternalState(this).source || inspectSource(this);
});
});
var path = global_1;
var aFunction = function (variable) {
return typeof variable == 'function' ? variable : undefined;
};
var getBuiltIn = function (namespace, method) {
return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global_1[namespace])
: path[namespace] && path[namespace][method] || global_1[namespace] && global_1[namespace][method];
};
var min = Math.min;
// `ToLength` abstract operation
// https://tc39.github.io/ecma262/#sec-tolength
var toLength = function (argument) {
return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991
};
var max = Math.max;
var min$1 = Math.min;
// Helper for a popular repeating case of the spec:
// Let integer be ? ToInteger(index).
// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).
var toAbsoluteIndex = function (index, length) {
var integer = toInteger(index);
return integer < 0 ? max(integer + length, 0) : min$1(integer, length);
};
// `Array.prototype.{ indexOf, includes }` methods implementation
var createMethod$1 = function (IS_INCLUDES) {
return function ($this, el, fromIndex) {
var O = toIndexedObject($this);
var length = toLength(O.length);
var index = toAbsoluteIndex(fromIndex, length);
var value;
// Array#includes uses SameValueZero equality algorithm
// eslint-disable-next-line no-self-compare
if (IS_INCLUDES && el != el) while (length > index) {
value = O[index++];
// eslint-disable-next-line no-self-compare
if (value != value) return true;
// Array#indexOf ignores holes, Array#includes - not
} else for (;length > index; index++) {
if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;
} return !IS_INCLUDES && -1;
};
};
var arrayIncludes = {
// `Array.prototype.includes` method
// https://tc39.github.io/ecma262/#sec-array.prototype.includes
includes: createMethod$1(true),
// `Array.prototype.indexOf` method
// https://tc39.github.io/ecma262/#sec-array.prototype.indexof
indexOf: createMethod$1(false)
};
var indexOf = arrayIncludes.indexOf;
var objectKeysInternal = function (object, names) {
var O = toIndexedObject(object);
var i = 0;
var result = [];
var key;
for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key);
// Don't enum bug & hidden keys
while (names.length > i) if (has(O, key = names[i++])) {
~indexOf(result, key) || result.push(key);
}
return result;
};
// IE8- don't enum bug keys
var enumBugKeys = [
'constructor',
'hasOwnProperty',
'isPrototypeOf',
'propertyIsEnumerable',
'toLocaleString',
'toString',
'valueOf'
];
var hiddenKeys$1 = enumBugKeys.concat('length', 'prototype');
// `Object.getOwnPropertyNames` method
// https://tc39.github.io/ecma262/#sec-object.getownpropertynames
var f$3 = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {
return objectKeysInternal(O, hiddenKeys$1);
};
var objectGetOwnPropertyNames = {
f: f$3
};
var f$4 = Object.getOwnPropertySymbols;
var objectGetOwnPropertySymbols = {
f: f$4
};
// all object keys, includes non-enumerable and symbols
var ownKeys = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {
var keys = objectGetOwnPropertyNames.f(anObject(it));
var getOwnPropertySymbols = objectGetOwnPropertySymbols.f;
return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys;
};
var copyConstructorProperties = function (target, source) {
var keys = ownKeys(source);
var defineProperty = objectDefineProperty.f;
var getOwnPropertyDescriptor = objectGetOwnPropertyDescriptor.f;
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
if (!has(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key));
}
};
var replacement = /#|\.prototype\./;
var isForced = function (feature, detection) {
var value = data[normalize(feature)];
return value == POLYFILL ? true
: value == NATIVE ? false
: typeof detection == 'function' ? fails(detection)
: !!detection;
};
var normalize = isForced.normalize = function (string) {
return String(string).replace(replacement, '.').toLowerCase();
};
var data = isForced.data = {};
var NATIVE = isForced.NATIVE = 'N';
var POLYFILL = isForced.POLYFILL = 'P';
var isForced_1 = isForced;
var getOwnPropertyDescriptor$1 = objectGetOwnPropertyDescriptor.f;
/*
options.target - name of the target object
options.global - target is the global object
options.stat - export as static methods of target
options.proto - export as prototype methods of target
options.real - real prototype method for the `pure` version
options.forced - export even if the native feature is available
options.bind - bind methods to the target, required for the `pure` version
options.wrap - wrap constructors to preventing global pollution, required for the `pure` version
options.unsafe - use the simple assignment of property instead of delete + defineProperty
options.sham - add a flag to not completely full polyfills
options.enumerable - export as enumerable property
options.noTargetGet - prevent calling a getter on target
*/
var _export = function (options, source) {
var TARGET = options.target;
var GLOBAL = options.global;
var STATIC = options.stat;
var FORCED, target, key, targetProperty, sourceProperty, descriptor;
if (GLOBAL) {
target = global_1;
} else if (STATIC) {
target = global_1[TARGET] || setGlobal(TARGET, {});
} else {
target = (global_1[TARGET] || {}).prototype;
}
if (target) for (key in source) {
sourceProperty = source[key];
if (options.noTargetGet) {
descriptor = getOwnPropertyDescriptor$1(target, key);
targetProperty = descriptor && descriptor.value;
} else targetProperty = target[key];
FORCED = isForced_1(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);
// contained in target
if (!FORCED && targetProperty !== undefined) {
if (typeof sourceProperty === typeof targetProperty) continue;
copyConstructorProperties(sourceProperty, targetProperty);
}
// add a flag to not completely full polyfills
if (options.sham || (targetProperty && targetProperty.sham)) {
createNonEnumerableProperty(sourceProperty, 'sham', true);
}
// extend global
redefine(target, key, sourceProperty, options);
}
};
// `ToObject` abstract operation
// https://tc39.github.io/ecma262/#sec-toobject
var toObject = function (argument) {
return Object(requireObjectCoercible(argument));
};
var correctPrototypeGetter = !fails(function () {
function F() { /* empty */ }
F.prototype.constructor = null;
return Object.getPrototypeOf(new F()) !== F.prototype;
});
var IE_PROTO = sharedKey('IE_PROTO');
var ObjectPrototype = Object.prototype;
// `Object.getPrototypeOf` method
// https://tc39.github.io/ecma262/#sec-object.getprototypeof
var objectGetPrototypeOf = correctPrototypeGetter ? Object.getPrototypeOf : function (O) {
O = toObject(O);
if (has(O, IE_PROTO)) return O[IE_PROTO];
if (typeof O.constructor == 'function' && O instanceof O.constructor) {
return O.constructor.prototype;
} return O instanceof Object ? ObjectPrototype : null;
};
var nativeSymbol = !!Object.getOwnPropertySymbols && !fails(function () {
// Chrome 38 Symbol has incorrect toString conversion
// eslint-disable-next-line no-undef
return !String(Symbol());
});
var useSymbolAsUid = nativeSymbol
// eslint-disable-next-line no-undef
&& !Symbol.sham
// eslint-disable-next-line no-undef
&& typeof Symbol.iterator == 'symbol';
var WellKnownSymbolsStore = shared('wks');
var Symbol$1 = global_1.Symbol;
var createWellKnownSymbol = useSymbolAsUid ? Symbol$1 : Symbol$1 && Symbol$1.withoutSetter || uid;
var wellKnownSymbol = function (name) {
if (!has(WellKnownSymbolsStore, name)) {
if (nativeSymbol && has(Symbol$1, name)) WellKnownSymbolsStore[name] = Symbol$1[name];
else WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name);
} return WellKnownSymbolsStore[name];
};
var ITERATOR = wellKnownSymbol('iterator');
var BUGGY_SAFARI_ITERATORS = false;
var returnThis = function () { return this; };
// `%IteratorPrototype%` object
// https://tc39.github.io/ecma262/#sec-%iteratorprototype%-object
var IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;
if ([].keys) {
arrayIterator = [].keys();
// Safari 8 has buggy iterators w/o `next`
if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;
else {
PrototypeOfArrayIteratorPrototype = objectGetPrototypeOf(objectGetPrototypeOf(arrayIterator));
if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;
}
}
if (IteratorPrototype == undefined) IteratorPrototype = {};
// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
if ( !has(IteratorPrototype, ITERATOR)) {
createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis);
}
var iteratorsCore = {
IteratorPrototype: IteratorPrototype,
BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS
};
// `Object.keys` method
// https://tc39.github.io/ecma262/#sec-object.keys
var objectKeys = Object.keys || function keys(O) {
return objectKeysInternal(O, enumBugKeys);
};
// `Object.defineProperties` method
// https://tc39.github.io/ecma262/#sec-object.defineproperties
var objectDefineProperties = descriptors ? Object.defineProperties : function defineProperties(O, Properties) {
anObject(O);
var keys = objectKeys(Properties);
var length = keys.length;
var index = 0;
var key;
while (length > index) objectDefineProperty.f(O, key = keys[index++], Properties[key]);
return O;
};
var html = getBuiltIn('document', 'documentElement');
var GT = '>';
var LT = '<';
var PROTOTYPE = 'prototype';
var SCRIPT = 'script';
var IE_PROTO$1 = sharedKey('IE_PROTO');
var EmptyConstructor = function () { /* empty */ };
var scriptTag = function (content) {
return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;
};
// Create object with fake `null` prototype: use ActiveX Object with cleared prototype
var NullProtoObjectViaActiveX = function (activeXDocument) {
activeXDocument.write(scriptTag(''));
activeXDocument.close();
var temp = activeXDocument.parentWindow.Object;
activeXDocument = null; // avoid memory leak
return temp;
};
// Create object with fake `null` prototype: use iframe Object with cleared prototype
var NullProtoObjectViaIFrame = function () {
// Thrash, waste and sodomy: IE GC bug
var iframe = documentCreateElement('iframe');
var JS = 'java' + SCRIPT + ':';
var iframeDocument;
iframe.style.display = 'none';
html.appendChild(iframe);
// https://github.com/zloirock/core-js/issues/475
iframe.src = String(JS);
iframeDocument = iframe.contentWindow.document;
iframeDocument.open();
iframeDocument.write(scriptTag('document.F=Object'));
iframeDocument.close();
return iframeDocument.F;
};
// Check for document.domain and active x support
// No need to use active x approach when document.domain is not set
// see https://github.com/es-shims/es5-shim/issues/150
// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346
// avoid IE GC bug
var activeXDocument;
var NullProtoObject = function () {
try {
/* global ActiveXObject */
activeXDocument = document.domain && new ActiveXObject('htmlfile');
} catch (error) { /* ignore */ }
NullProtoObject = activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame();
var length = enumBugKeys.length;
while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];
return NullProtoObject();
};
hiddenKeys[IE_PROTO$1] = true;
// `Object.create` method
// https://tc39.github.io/ecma262/#sec-object.create
var objectCreate = Object.create || function create(O, Properties) {
var result;
if (O !== null) {
EmptyConstructor[PROTOTYPE] = anObject(O);
result = new EmptyConstructor();
EmptyConstructor[PROTOTYPE] = null;
// add "__proto__" for Object.getPrototypeOf polyfill
result[IE_PROTO$1] = O;
} else result = NullProtoObject();
return Properties === undefined ? result : objectDefineProperties(result, Properties);
};
var defineProperty = objectDefineProperty.f;
var TO_STRING_TAG = wellKnownSymbol('toStringTag');
var setToStringTag = function (it, TAG, STATIC) {
if (it && !has(it = STATIC ? it : it.prototype, TO_STRING_TAG)) {
defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG });
}
};
var iterators = {};
var IteratorPrototype$1 = iteratorsCore.IteratorPrototype;
var returnThis$1 = function () { return this; };
var createIteratorConstructor = function (IteratorConstructor, NAME, next) {
var TO_STRING_TAG = NAME + ' Iterator';
IteratorConstructor.prototype = objectCreate(IteratorPrototype$1, { next: createPropertyDescriptor(1, next) });
setToStringTag(IteratorConstructor, TO_STRING_TAG, false);
iterators[TO_STRING_TAG] = returnThis$1;
return IteratorConstructor;
};
var aPossiblePrototype = function (it) {
if (!isObject(it) && it !== null) {
throw TypeError("Can't set " + String(it) + ' as a prototype');
} return it;
};
// `Object.setPrototypeOf` method
// https://tc39.github.io/ecma262/#sec-object.setprototypeof
// Works with __proto__ only. Old v8 can't work with null proto objects.
/* eslint-disable no-proto */
var objectSetPrototypeOf = Object.setPrototypeOf || ('__proto__' in {} ? function () {
var CORRECT_SETTER = false;
var test = {};
var setter;
try {
setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set;
setter.call(test, []);
CORRECT_SETTER = test instanceof Array;
} catch (error) { /* empty */ }
return function setPrototypeOf(O, proto) {
anObject(O);
aPossiblePrototype(proto);
if (CORRECT_SETTER) setter.call(O, proto);
else O.__proto__ = proto;
return O;
};
}() : undefined);
var IteratorPrototype$2 = iteratorsCore.IteratorPrototype;
var BUGGY_SAFARI_ITERATORS$1 = iteratorsCore.BUGGY_SAFARI_ITERATORS;
var ITERATOR$1 = wellKnownSymbol('iterator');
var KEYS = 'keys';
var VALUES = 'values';
var ENTRIES = 'entries';
var returnThis$2 = function () { return this; };
var defineIterator = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {
createIteratorConstructor(IteratorConstructor, NAME, next);
var getIterationMethod = function (KIND) {
if (KIND === DEFAULT && defaultIterator) return defaultIterator;
if (!BUGGY_SAFARI_ITERATORS$1 && KIND in IterablePrototype) return IterablePrototype[KIND];
switch (KIND) {
case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };
case VALUES: return function values() { return new IteratorConstructor(this, KIND); };
case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };
} return function () { return new IteratorConstructor(this); };
};
var TO_STRING_TAG = NAME + ' Iterator';
var INCORRECT_VALUES_NAME = false;
var IterablePrototype = Iterable.prototype;
var nativeIterator = IterablePrototype[ITERATOR$1]
|| IterablePrototype['@@iterator']
|| DEFAULT && IterablePrototype[DEFAULT];
var defaultIterator = !BUGGY_SAFARI_ITERATORS$1 && nativeIterator || getIterationMethod(DEFAULT);
var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;
var CurrentIteratorPrototype, methods, KEY;
// fix native
if (anyNativeIterator) {
CurrentIteratorPrototype = objectGetPrototypeOf(anyNativeIterator.call(new Iterable()));
if (IteratorPrototype$2 !== Object.prototype && CurrentIteratorPrototype.next) {
if ( objectGetPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype$2) {
if (objectSetPrototypeOf) {
objectSetPrototypeOf(CurrentIteratorPrototype, IteratorPrototype$2);
} else if (typeof CurrentIteratorPrototype[ITERATOR$1] != 'function') {
createNonEnumerableProperty(CurrentIteratorPrototype, ITERATOR$1, returnThis$2);
}
}
// Set @@toStringTag to native iterators
setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true);
}
}
// fix Array#{values, @@iterator}.name in V8 / FF
if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {
INCORRECT_VALUES_NAME = true;
defaultIterator = function values() { return nativeIterator.call(this); };
}
// define iterator
if ( IterablePrototype[ITERATOR$1] !== defaultIterator) {
createNonEnumerableProperty(IterablePrototype, ITERATOR$1, defaultIterator);
}
iterators[NAME] = defaultIterator;
// export additional methods
if (DEFAULT) {
methods = {
values: getIterationMethod(VALUES),
keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),
entries: getIterationMethod(ENTRIES)
};
if (FORCED) for (KEY in methods) {
if (BUGGY_SAFARI_ITERATORS$1 || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {
redefine(IterablePrototype, KEY, methods[KEY]);
}
} else _export({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS$1 || INCORRECT_VALUES_NAME }, methods);
}
return methods;
};
var charAt = stringMultibyte.charAt;
var STRING_ITERATOR = 'String Iterator';
var setInternalState = internalState.set;
var getInternalState = internalState.getterFor(STRING_ITERATOR);
// `String.prototype[@@iterator]` method
// https://tc39.github.io/ecma262/#sec-string.prototype-@@iterator
defineIterator(String, 'String', function (iterated) {
setInternalState(this, {
type: STRING_ITERATOR,
string: String(iterated),
index: 0
});
// `%StringIteratorPrototype%.next` method
// https://tc39.github.io/ecma262/#sec-%stringiteratorprototype%.next
}, function next() {
var state = getInternalState(this);
var string = state.string;
var index = state.index;
var point;
if (index >= string.length) return { value: undefined, done: true };
point = charAt(string, index);
state.index += point.length;
return { value: point, done: false };
});
var aFunction$1 = function (it) {
if (typeof it != 'function') {
throw TypeError(String(it) + ' is not a function');
} return it;
};
// optional / simple context binding
var functionBindContext = function (fn, that, length) {
aFunction$1(fn);
if (that === undefined) return fn;
switch (length) {
case 0: return function () {
return fn.call(that);
};
case 1: return function (a) {
return fn.call(that, a);
};
case 2: return function (a, b) {
return fn.call(that, a, b);
};
case 3: return function (a, b, c) {
return fn.call(that, a, b, c);
};
}
return function (/* ...args */) {
return fn.apply(that, arguments);
};
};
// call something on iterator step with safe closing on error
var callWithSafeIterationClosing = function (iterator, fn, value, ENTRIES) {
try {
return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);
// 7.4.6 IteratorClose(iterator, completion)
} catch (error) {
var returnMethod = iterator['return'];
if (returnMethod !== undefined) anObject(returnMethod.call(iterator));
throw error;
}
};
var ITERATOR$2 = wellKnownSymbol('iterator');
var ArrayPrototype = Array.prototype;
// check on default Array iterator
var isArrayIteratorMethod = function (it) {
return it !== undefined && (iterators.Array === it || ArrayPrototype[ITERATOR$2] === it);
};
var createProperty = function (object, key, value) {
var propertyKey = toPrimitive(key);
if (propertyKey in object) objectDefineProperty.f(object, propertyKey, createPropertyDescriptor(0, value));
else object[propertyKey] = value;
};
var TO_STRING_TAG$1 = wellKnownSymbol('toStringTag');
var test = {};
test[TO_STRING_TAG$1] = 'z';
var toStringTagSupport = String(test) === '[object z]';
var TO_STRING_TAG$2 = wellKnownSymbol('toStringTag');
// ES3 wrong here
var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';
// fallback for IE11 Script Access Denied error
var tryGet = function (it, key) {
try {
return it[key];
} catch (error) { /* empty */ }
};
// getting tag from ES6+ `Object.prototype.toString`
var classof = toStringTagSupport ? classofRaw : function (it) {
var O, tag, result;
return it === undefined ? 'Undefined' : it === null ? 'Null'
// @@toStringTag case
: typeof (tag = tryGet(O = Object(it), TO_STRING_TAG$2)) == 'string' ? tag
// builtinTag case
: CORRECT_ARGUMENTS ? classofRaw(O)
// ES3 arguments fallback
: (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result;
};
var ITERATOR$3 = wellKnownSymbol('iterator');
var getIteratorMethod = function (it) {
if (it != undefined) return it[ITERATOR$3]
|| it['@@iterator']
|| iterators[classof(it)];
};
// `Array.from` method implementation
// https://tc39.github.io/ecma262/#sec-array.from
var arrayFrom = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {
var O = toObject(arrayLike);
var C = typeof this == 'function' ? this : Array;
var argumentsLength = arguments.length;
var mapfn = argumentsLength > 1 ? arguments[1] : undefined;
var mapping = mapfn !== undefined;
var iteratorMethod = getIteratorMethod(O);
var index = 0;
var length, result, step, iterator, next, value;
if (mapping) mapfn = functionBindContext(mapfn, argumentsLength > 2 ? arguments[2] : undefined, 2);
// if the target is not iterable or it's an array with the default iterator - use a simple case
if (iteratorMethod != undefined && !(C == Array && isArrayIteratorMethod(iteratorMethod))) {
iterator = iteratorMethod.call(O);
next = iterator.next;
result = new C();
for (;!(step = next.call(iterator)).done; index++) {
value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value;
createProperty(result, index, value);
}
} else {
length = toLength(O.length);
result = new C(length);
for (;length > index; index++) {
value = mapping ? mapfn(O[index], index) : O[index];
createProperty(result, index, value);
}
}
result.length = index;
return result;
};
var ITERATOR$4 = wellKnownSymbol('iterator');
var SAFE_CLOSING = false;
try {
var called = 0;
var iteratorWithReturn = {
next: function () {
return { done: !!called++ };
},
'return': function () {
SAFE_CLOSING = true;
}
};
iteratorWithReturn[ITERATOR$4] = function () {
return this;
};
// eslint-disable-next-line no-throw-literal
Array.from(iteratorWithReturn, function () { throw 2; });
} catch (error) { /* empty */ }
var checkCorrectnessOfIteration = function (exec, SKIP_CLOSING) {
if (!SKIP_CLOSING && !SAFE_CLOSING) return false;
var ITERATION_SUPPORT = false;
try {
var object = {};
object[ITERATOR$4] = function () {
return {
next: function () {
return { done: ITERATION_SUPPORT = true };
}
};
};
exec(object);
} catch (error) { /* empty */ }
return ITERATION_SUPPORT;
};
var INCORRECT_ITERATION = !checkCorrectnessOfIteration(function (iterable) {
Array.from(iterable);
});
// `Array.from` method
// https://tc39.github.io/ecma262/#sec-array.from
_export({ target: 'Array', stat: true, forced: INCORRECT_ITERATION }, {
from: arrayFrom
});
var from_1 = path.Array.from;
//
var mrTwitterFetcher = function ($) {
/**
* Check for twitterFetcher dependency
* twitterFetcher - https://github.com/jasonmayes/Twitter-Post-Fetcher
*/
if (typeof twitterFetcher === 'undefined') {
throw new Error('mrTwitterFetcher requires twitterFetcher.js (https://github.com/jasonmayes/Twitter-Post-Fetcher)');
}
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
var NAME = 'mrTwitterFetcher';
var VERSION = '1.0.0';
var DATA_KEY = 'mr.twitterFetcher';
var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api';
var JQUERY_NO_CONFLICT = $.fn[NAME];
var Event = {
LOAD_DATA_API: "load" + EVENT_KEY + DATA_API_KEY,
RESIZE: "resize" + EVENT_KEY,
READY: "ready" + EVENT_KEY,
APPEND: "tweetAppended" + EVENT_KEY
};
var Selector = {
DATA_ATTR: 'twitter-fetcher',
DATA_TWITTER_FETCHER: '[data-twitter-fetcher]',
DATA_TWITTER: 'data-twitter',
USER: '.user',
TWEET: '.tweet',
TIME_POSTED: '.timePosted',
INTERACT: '.interact'
};
var Defaults = {
USERNAME: 'twitter',
MAX_TWEETS: 6
};
var Options = {
USERNAME: 'username',
MAX_TWEETS: 'max-tweets',
FLICKITY: 'flickity',
SLIDER: 'twitterFlickity',
ISOTOPE: 'isotope'
};
/**
* ------------------------------------------------------------------------
* Class Definition
* ------------------------------------------------------------------------
*/
var TwitterFetcher = /*#__PURE__*/function () {
function TwitterFetcher(element) {
var $element = $(element);
this.element = element;
this.element.id = "tweets-" + new Date().getTime();
this.username = $element.data(Options.USERNAME).replace('@', '') || Defaults.USERNAME;
this.maxTweets = parseInt($element.data(Options.MAX_TWEETS), 10) || Defaults.MAX_TWEETS; // Check if data-twitter-slider is options object, plain attribute or not present.
this.slider = this.element.getAttribute(Selector.DATA_TWITTER + "-" + Options.FLICKITY) !== null;
this.slider = this.slider && typeof $element.data(Options.SLIDER) === 'object' ? $element.data(Options.SLIDER) : this.slider; // Check if data-twitter-isotope is present.
this.isotope = this.element.getAttribute(Selector.DATA_TWITTER + "-" + Options.ISOTOPE) !== null;
this.initTwitterFeed();
} // getters
var _proto = TwitterFetcher.prototype;
_proto.initTwitterFeed = function initTwitterFeed() {
var _this = this;
this.config = {
profile: {
screenName: this.username
},
domId: this.element.id,
maxTweets: this.maxTweets,
enableLinks: true,
showUser: true,
showTime: true,
dateFunction: '',
showRetweet: false,
customCallback: function customCallback(tweets) {
var $element = $(_this.element);
var html;
var template = $element.children().first().detach();
var x = tweets.length;
var n = 0;
while (n < x) {
var tweetContent = $('<div>').append($(tweets[n]));
var templateClone = template.clone();
templateClone.find(Selector.TWEET).html(tweetContent.find(Selector.TWEET).html());
templateClone.find(Selector.USER).html(tweetContent.find(Selector.USER).html());
templateClone.find(Selector.TIME_POSTED).html(tweetContent.find(Selector.TIME_POSTED).html());
templateClone.find(Selector.INTERACT).html(tweetContent.find(Selector.INTERACT).html());
$element.append(templateClone);
n += 1; // Fire an event when each tweet is added to the div
var appendEvent = $.Event(Event.APPEND);
appendEvent.appendedElement = templateClone;
appendEvent.mrTwitterFetcher = _this;
$(_this.element).trigger(appendEvent);
}
if (_this.slider === true || typeof _this.slider === 'object') {
// Check for Flickity dependency
if (typeof Flickity === 'undefined') {
throw new Error('mrTwitterFetcher requires flickity.js (https://github.com/metafizzy/flickity)');
} else {
$element.data('flickity', new Flickity(_this.element, _this.slider));
}
} else if (_this.isotope === true) {
// Check for Isotope dependency
if (typeof Isotope === 'undefined') {
throw new Error('mrTwitterFetcher requires isotope.js (https://github.com/metafizzy/isotope)');
} else {
$(_this.element).mrIsotope();
}
} // Fire an event for tweets ready
var readyEvent = $.Event(Event.READY);
readyEvent.mrTwitterFetcher = _this;
$(_this.element).trigger(readyEvent);
return html;
}
};
twitterFetcher.fetch(this.config);
};
TwitterFetcher.jQueryInterface = function jQueryInterface() {
return this.each(function jqEachTwitterFetcher() {
var $element = $(this);
var data = $element.data(DATA_KEY);
if (!data) {
data = new TwitterFetcher(this);
$element.data(DATA_KEY, data);
}
});
};
_createClass(TwitterFetcher, null, [{
key: "VERSION",
get: function get() {
return VERSION;
}
}]);
return TwitterFetcher;
}();
/**
* ------------------------------------------------------------------------
* Initialise by data attribute
* ------------------------------------------------------------------------
*/
$(window).on(Event.LOAD_DATA_API, function () {
var twitterFetcherElements = $.makeArray($(Selector.DATA_TWITTER_FETCHER));
/* eslint-disable no-plusplus */
for (var i = twitterFetcherElements.length; i--;) {
var $twitterFetcher = $(twitterFetcherElements[i]);
TwitterFetcher.jQueryInterface.call($twitterFetcher, $twitterFetcher.data());
}
});
/**
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
*/
/* eslint-disable no-param-reassign */
$.fn[NAME] = TwitterFetcher.jQueryInterface;
$.fn[NAME].Constructor = TwitterFetcher;
$.fn[NAME].noConflict = function TwitterFetcherNoConflict() {
$.fn[NAME] = JQUERY_NO_CONFLICT;
return TwitterFetcher.jQueryInterface;
};
/* eslint-enable no-param-reassign */
return TwitterFetcher;
}(jQuery$1);
var mrTypedText = function ($) {
/**
* Check for typedText dependency
* typedText - https://github.com/mattboldt/typed.js/
*/
if (typeof Typed !== 'function') {
throw new Error('mrTypedText requires typed.js (https://github.com/mattboldt/typed.js/)');
}
/**
* Check for scrollMonitor dependency
* scrollMonitor - https://github.com/stutrek/scrollMonitor
*/
if (typeof scrollMonitor === 'undefined') {
throw new Error('mrTypedText requires scrollMonitor.js (https://github.com/stutrek/scrollMonitor)');
}
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
var NAME = 'mrTypedText';
var VERSION = '1.0.0';
var DATA_KEY = 'mr.typedText';
var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api';
var JQUERY_NO_CONFLICT = $.fn[NAME];
var Event = {
LOAD_DATA_API: "load" + EVENT_KEY + DATA_API_KEY
};
var Selector = {
TYPED_TEXT: '[data-typed-text]'
};
/**
* ------------------------------------------------------------------------
* Class Definition
* ------------------------------------------------------------------------
*/
var TypedText = /*#__PURE__*/function () {
function TypedText(element) {
// The current map element
this.element = element;
var $element = $(element);
this.Typed = new Typed(this.element, $element.data());
this.initWatcher(element);
} // getters
TypedText.jQueryInterface = function jQueryInterface() {
return this.each(function jqEachTypedText() {
var $element = $(this);
var data = $element.data(DATA_KEY);
if (!data) {
data = new TypedText(this);
$element.data(DATA_KEY, data);
}
});
};
var _proto = TypedText.prototype;
_proto.initWatcher = function initWatcher(element) {
var _this = this;
var watcher = scrollMonitor.create(element);
watcher.stateChange(function () {
// Stop the Typed animation when the element leaves the viewport
if (watcher.isInViewport) {
_this.Typed.start();
} else {
_this.Typed.stop();
}
});
} // END Class definition
;
_createClass(TypedText, null, [{
key: "VERSION",
get: function get() {
return VERSION;
}
}]);
return TypedText;
}();
/**
* ------------------------------------------------------------------------
* Initialise by data attribute
* ------------------------------------------------------------------------
*/
$(window).on(Event.LOAD_DATA_API, function () {
var cdownsOnPage = $.makeArray($(Selector.TYPED_TEXT));
/* eslint-disable no-plusplus */
for (var i = cdownsOnPage.length; i--;) {
var $typedText = $(cdownsOnPage[i]);
TypedText.jQueryInterface.call($typedText, $typedText.data());
}
});
/**
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
*/
/* eslint-disable no-param-reassign */
$.fn[NAME] = TypedText.jQueryInterface;
$.fn[NAME].Constructor = TypedText;
$.fn[NAME].noConflict = function TypedTextNoConflict() {
$.fn[NAME] = JQUERY_NO_CONFLICT;
return TypedText.jQueryInterface;
};
/* eslint-enable no-param-reassign */
return TypedText;
}(jQuery$1);
//
jQuery$1(document).ready(function () {
jQuery$1('.wizard').smartWizard({
transitionEffect: 'fade',
showStepURLhash: false,
toolbarSettings: {
toolbarPosition: 'none'
}
});
});
(function () {
if (typeof $ === 'undefined') {
throw new TypeError('Medium Rare JavaScript requires jQuery. jQuery must be included before theme.js.');
}
})();
exports.mrCountdown = mrCountdown;
exports.mrCountup = mrCountup;
exports.mrDropdownGrid = mrDropdownGrid;
exports.mrFlatpickr = mrFlatpickr;
exports.mrFormEmail = mrFormEmail;
exports.mrIonRangeSlider = mrIonRangeSlider;
exports.mrIsotope = mrIsotope;
exports.mrMaps = mrMaps;
exports.mrMapsStyle = mrMapStyle;
exports.mrOverlayNav = mrOverlayNav;
exports.mrReadingPosition = mrReadingPosition;
exports.mrSmoothScroll = mrSmoothScroll;
exports.mrSticky = mrSticky;
exports.mrTwitterFetcher = mrTwitterFetcher;
exports.mrTypedText = mrTypedText;
exports.mrUtil = mrUtil;
Object.defineProperty(exports, '__esModule', { value: true });
})));
})( jQuery );