Component-Builder/admin/custom/uikit-v3/js/uikit.js

12160 lines
332 KiB
JavaScript
Raw Normal View History

2019-04-22 13:31:39 +00:00
/*! UIkit 3.1.2 | http://www.getuikit.com | (c) 2014 - 2018 YOOtheme | MIT License */
2017-11-11 04:33:51 +00:00
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
typeof define === 'function' && define.amd ? define('uikit', factory) :
2019-04-22 13:31:39 +00:00
(global = global || self, global.UIkit = factory());
}(this, function () { 'use strict';
2017-11-11 04:33:51 +00:00
function bind(fn, context) {
return function (a) {
var l = arguments.length;
return l ? l > 1 ? fn.apply(context, arguments) : fn.call(context, a) : fn.call(context);
};
}
2017-11-11 04:33:51 +00:00
var objPrototype = Object.prototype;
var hasOwnProperty = objPrototype.hasOwnProperty;
2017-11-11 04:33:51 +00:00
function hasOwn(obj, key) {
return hasOwnProperty.call(obj, key);
}
2017-11-11 04:33:51 +00:00
var hyphenateCache = {};
var hyphenateRe = /([a-z\d])([A-Z])/g;
2017-11-11 04:33:51 +00:00
function hyphenate(str) {
2017-11-11 04:33:51 +00:00
if (!(str in hyphenateCache)) {
hyphenateCache[str] = str
.replace(hyphenateRe, '$1-$2')
.toLowerCase();
}
2017-11-11 04:33:51 +00:00
return hyphenateCache[str];
2017-11-11 04:33:51 +00:00
}
var camelizeRe = /-(\w)/g;
2017-11-11 04:33:51 +00:00
function camelize(str) {
return str.replace(camelizeRe, toUpper);
}
2017-11-11 04:33:51 +00:00
function toUpper(_, c) {
return c ? c.toUpperCase() : '';
}
2017-11-11 04:33:51 +00:00
function ucfirst(str) {
return str.length ? toUpper(null, str.charAt(0)) + str.slice(1) : '';
}
2017-11-11 04:33:51 +00:00
var strPrototype = String.prototype;
var startsWithFn = strPrototype.startsWith || function (search) { return this.lastIndexOf(search, 0) === 0; };
2017-11-11 04:33:51 +00:00
function startsWith(str, search) {
return startsWithFn.call(str, search);
}
2017-11-11 04:33:51 +00:00
var endsWithFn = strPrototype.endsWith || function (search) { return this.substr(-search.length) === search; };
2017-11-11 04:33:51 +00:00
function endsWith(str, search) {
return endsWithFn.call(str, search);
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var arrPrototype = Array.prototype;
var includesFn = function (search, i) { return ~this.indexOf(search, i); };
var includesStr = strPrototype.includes || includesFn;
2019-04-22 13:31:39 +00:00
var includesArray = arrPrototype.includes || includesFn;
2017-11-11 04:33:51 +00:00
function includes(obj, search) {
return obj && (isString(obj) ? includesStr : includesArray).call(obj, search);
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var findIndexFn = arrPrototype.findIndex || function (predicate) {
var arguments$1 = arguments;
for (var i = 0; i < this.length; i++) {
if (predicate.call(arguments$1[1], this[i], i, this)) {
return i;
}
}
return -1;
};
function findIndex(array, predicate) {
return findIndexFn.call(array, predicate);
}
var isArray = Array.isArray;
2017-11-11 04:33:51 +00:00
function isFunction(obj) {
return typeof obj === 'function';
}
2017-11-11 04:33:51 +00:00
function isObject(obj) {
return obj !== null && typeof obj === 'object';
}
2017-11-11 04:33:51 +00:00
function isPlainObject(obj) {
return isObject(obj) && Object.getPrototypeOf(obj) === objPrototype;
}
2017-11-11 04:33:51 +00:00
function isWindow(obj) {
return isObject(obj) && obj === obj.window;
2017-11-11 04:33:51 +00:00
}
function isDocument(obj) {
return isObject(obj) && obj.nodeType === 9;
}
2017-11-11 04:33:51 +00:00
function isJQuery(obj) {
return isObject(obj) && !!obj.jquery;
}
2017-11-11 04:33:51 +00:00
function isNode(obj) {
return obj instanceof Node || isObject(obj) && obj.nodeType >= 1;
2017-11-11 04:33:51 +00:00
}
var toString = objPrototype.toString;
function isNodeCollection(obj) {
return toString.call(obj).match(/^\[object (NodeList|HTMLCollection)\]$/);
}
2017-11-11 04:33:51 +00:00
function isBoolean(value) {
return typeof value === 'boolean';
}
2017-11-11 04:33:51 +00:00
function isString(value) {
return typeof value === 'string';
}
2017-11-11 04:33:51 +00:00
function isNumber(value) {
return typeof value === 'number';
}
2017-11-11 04:33:51 +00:00
function isNumeric(value) {
return isNumber(value) || isString(value) && !isNaN(value - parseFloat(value));
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function isEmpty(obj) {
return !(isArray(obj)
? obj.length
: isObject(obj)
? Object.keys(obj).length
: false
);
}
function isUndefined(value) {
return value === void 0;
}
2017-11-11 04:33:51 +00:00
function toBoolean(value) {
return isBoolean(value)
? value
: value === 'true' || value === '1' || value === ''
? true
: value === 'false' || value === '0'
? false
: value;
}
2017-11-11 04:33:51 +00:00
function toNumber(value) {
var number = Number(value);
return !isNaN(number) ? number : false;
}
2017-11-11 04:33:51 +00:00
function toFloat(value) {
return parseFloat(value) || 0;
}
2017-11-11 04:33:51 +00:00
function toNode(element) {
return isNode(element) || isWindow(element) || isDocument(element)
? element
: isNodeCollection(element) || isJQuery(element)
? element[0]
: isArray(element)
? toNode(element[0])
: null;
}
2017-11-11 04:33:51 +00:00
function toNodes(element) {
return isNode(element)
? [element]
: isNodeCollection(element)
2019-04-22 13:31:39 +00:00
? arrPrototype.slice.call(element)
: isArray(element)
? element.map(toNode).filter(Boolean)
: isJQuery(element)
? element.toArray()
: [];
}
2017-11-11 04:33:51 +00:00
function toList(value) {
return isArray(value)
? value
: isString(value)
? value.split(/,(?![^(]*\))/).map(function (value) { return isNumeric(value)
? toNumber(value)
: toBoolean(value.trim()); })
: [value];
}
2017-11-11 04:33:51 +00:00
function toMs(time) {
return !time
? 0
: endsWith(time, 'ms')
? toFloat(time)
: toFloat(time) * 1000;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function isEqual(value, other) {
return value === other
|| isObject(value)
&& isObject(other)
&& Object.keys(value).length === Object.keys(other).length
&& each(value, function (val, key) { return val === other[key]; });
}
function swap(value, a, b) {
return value.replace(new RegExp((a + "|" + b), 'mg'), function (match) {
return match === a ? b : a;
});
}
2017-11-11 04:33:51 +00:00
var assign = Object.assign || function (target) {
var args = [], len = arguments.length - 1;
while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];
2017-11-11 04:33:51 +00:00
target = Object(target);
for (var i = 0; i < args.length; i++) {
var source = args[i];
if (source !== null) {
for (var key in source) {
if (hasOwn(source, key)) {
target[key] = source[key];
}
}
}
}
return target;
};
2017-11-11 04:33:51 +00:00
function each(obj, cb) {
for (var key in obj) {
2019-04-22 13:31:39 +00:00
if (false === cb(obj[key], key)) {
return false;
}
}
2019-04-22 13:31:39 +00:00
return true;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function sortBy(array, prop) {
return array.sort(function (ref, ref$1) {
var propA = ref[prop]; if ( propA === void 0 ) propA = 0;
var propB = ref$1[prop]; if ( propB === void 0 ) propB = 0;
return propA > propB
? 1
2019-04-22 13:31:39 +00:00
: propB > propA
? -1
2019-04-22 13:31:39 +00:00
: 0;
}
);
}
function uniqueBy(array, prop) {
var seen = new Set();
return array.filter(function (ref) {
var check = ref[prop];
return seen.has(check)
? false
: seen.add(check) || true;
} // IE 11 does not return the Set object
);
}
2017-11-11 04:33:51 +00:00
function clamp(number, min, max) {
if ( min === void 0 ) min = 0;
if ( max === void 0 ) max = 1;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return Math.min(Math.max(toNumber(number) || 0, min), max);
}
2017-11-11 04:33:51 +00:00
function noop() {}
2017-11-11 04:33:51 +00:00
function intersectRect(r1, r2) {
return r1.left < r2.right &&
r1.right > r2.left &&
r1.top < r2.bottom &&
r1.bottom > r2.top;
}
2017-11-11 04:33:51 +00:00
function pointInRect(point, rect) {
return point.x <= rect.right &&
point.x >= rect.left &&
point.y <= rect.bottom &&
point.y >= rect.top;
}
2017-11-11 04:33:51 +00:00
var Dimensions = {
2017-11-11 04:33:51 +00:00
ratio: function(dimensions, prop, value) {
var obj;
2017-11-11 04:33:51 +00:00
var aProp = prop === 'width' ? 'height' : 'width';
2017-11-11 04:33:51 +00:00
return ( obj = {}, obj[aProp] = dimensions[prop] ? Math.round(value * dimensions[aProp] / dimensions[prop]) : dimensions[aProp], obj[prop] = value, obj );
},
2017-11-11 04:33:51 +00:00
contain: function(dimensions, maxDimensions) {
var this$1 = this;
2017-11-11 04:33:51 +00:00
dimensions = assign({}, dimensions);
2017-11-11 04:33:51 +00:00
each(dimensions, function (_, prop) { return dimensions = dimensions[prop] > maxDimensions[prop]
? this$1.ratio(dimensions, prop, maxDimensions[prop])
: dimensions; }
);
2017-11-11 04:33:51 +00:00
return dimensions;
},
2017-11-11 04:33:51 +00:00
cover: function(dimensions, maxDimensions) {
var this$1 = this;
2017-11-11 04:33:51 +00:00
dimensions = this.contain(dimensions, maxDimensions);
2017-11-11 04:33:51 +00:00
each(dimensions, function (_, prop) { return dimensions = dimensions[prop] < maxDimensions[prop]
? this$1.ratio(dimensions, prop, maxDimensions[prop])
: dimensions; }
);
2017-11-11 04:33:51 +00:00
return dimensions;
}
2017-11-11 04:33:51 +00:00
};
2017-11-11 04:33:51 +00:00
function attr(element, name, value) {
2017-11-11 04:33:51 +00:00
if (isObject(name)) {
for (var key in name) {
attr(element, key, name[key]);
2017-11-11 04:33:51 +00:00
}
return;
2017-11-11 04:33:51 +00:00
}
if (isUndefined(value)) {
element = toNode(element);
return element && element.getAttribute(name);
} else {
toNodes(element).forEach(function (element) {
2017-11-11 04:33:51 +00:00
if (isFunction(value)) {
value = value.call(element, attr(element, name));
}
2017-11-11 04:33:51 +00:00
if (value === null) {
removeAttr(element, name);
} else {
element.setAttribute(name, value);
}
});
}
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
function hasAttr(element, name) {
return toNodes(element).some(function (element) { return element.hasAttribute(name); });
}
2017-11-11 04:33:51 +00:00
function removeAttr(element, name) {
element = toNodes(element);
2019-04-22 13:31:39 +00:00
name.split(' ').forEach(function (name) { return element.forEach(function (element) { return element.hasAttribute(name) && element.removeAttribute(name); }
); }
);
}
2017-11-11 04:33:51 +00:00
function data(element, attribute) {
for (var i = 0, attrs = [attribute, ("data-" + attribute)]; i < attrs.length; i++) {
if (hasAttr(element, attrs[i])) {
return attr(element, attrs[i]);
2017-11-11 04:33:51 +00:00
}
}
}
2017-11-11 04:33:51 +00:00
function query(selector, context) {
return toNode(selector) || find(selector, getContext(selector, context));
}
2017-11-11 04:33:51 +00:00
function queryAll(selector, context) {
var nodes = toNodes(selector);
return nodes.length && nodes || findAll(selector, getContext(selector, context));
}
2017-11-11 04:33:51 +00:00
function getContext(selector, context) {
if ( context === void 0 ) context = document;
2017-11-11 04:33:51 +00:00
return isContextSelector(selector) || isDocument(context)
? context
: context.ownerDocument;
}
2017-11-11 04:33:51 +00:00
function find(selector, context) {
return toNode(_query(selector, context, 'querySelector'));
}
2017-11-11 04:33:51 +00:00
function findAll(selector, context) {
return toNodes(_query(selector, context, 'querySelectorAll'));
}
2017-11-11 04:33:51 +00:00
function _query(selector, context, queryFn) {
if ( context === void 0 ) context = document;
2017-11-11 04:33:51 +00:00
if (!selector || !isString(selector)) {
return null;
}
2017-11-11 04:33:51 +00:00
selector = selector.replace(contextSanitizeRe, '$1 *');
2017-11-11 04:33:51 +00:00
var removes;
2017-11-11 04:33:51 +00:00
if (isContextSelector(selector)) {
2017-11-11 04:33:51 +00:00
removes = [];
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
selector = splitSelector(selector).map(function (selector, i) {
2017-11-11 04:33:51 +00:00
var ctx = context;
2017-11-11 04:33:51 +00:00
if (selector[0] === '!') {
2017-11-11 04:33:51 +00:00
var selectors = selector.substr(1).trim().split(' ');
ctx = closest(context.parentNode, selectors[0]);
selector = selectors.slice(1).join(' ').trim();
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
if (selector[0] === '-') {
2017-11-11 04:33:51 +00:00
var selectors$1 = selector.substr(1).trim().split(' ');
var prev = (ctx || context).previousElementSibling;
ctx = matches(prev, selector.substr(1)) ? prev : null;
selector = selectors$1.slice(1).join(' ');
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
if (!ctx) {
return null;
}
2017-11-11 04:33:51 +00:00
if (!ctx.id) {
ctx.id = "uk-" + (Date.now()) + i;
removes.push(function () { return removeAttr(ctx, 'id'); });
}
2017-11-11 04:33:51 +00:00
return ("#" + (escape(ctx.id)) + " " + selector);
2017-11-11 04:33:51 +00:00
}).filter(Boolean).join(',');
2017-11-11 04:33:51 +00:00
context = document;
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
try {
2017-11-11 04:33:51 +00:00
return context[queryFn](selector);
2017-11-11 04:33:51 +00:00
} catch (e) {
2017-11-11 04:33:51 +00:00
return null;
2017-11-11 04:33:51 +00:00
} finally {
2017-11-11 04:33:51 +00:00
removes && removes.forEach(function (remove) { return remove(); });
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var contextSelectorRe = /(^|[^\\],)\s*[!>+~-]/;
var contextSanitizeRe = /([!>+~-])(?=\s+[!>+~-]|\s*$)/g;
2017-11-11 04:33:51 +00:00
function isContextSelector(selector) {
return isString(selector) && selector.match(contextSelectorRe);
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var selectorRe = /.*?[^\\](?:,|$)/;
function splitSelector(selector) {
return selector.match(selectorRe).map(function (selector) { return selector.replace(/,$/, '').trim(); });
}
var elProto = Element.prototype;
var matchesFn = elProto.matches || elProto.webkitMatchesSelector || elProto.msMatchesSelector;
2017-11-11 04:33:51 +00:00
function matches(element, selector) {
return toNodes(element).some(function (element) { return matchesFn.call(element, selector); });
2017-11-11 04:33:51 +00:00
}
var closestFn = elProto.closest || function (selector) {
var ancestor = this;
2017-11-11 04:33:51 +00:00
do {
2017-11-11 04:33:51 +00:00
if (matches(ancestor, selector)) {
return ancestor;
}
2017-11-11 04:33:51 +00:00
ancestor = ancestor.parentNode;
2017-11-11 04:33:51 +00:00
} while (ancestor && ancestor.nodeType === 1);
};
2017-11-11 04:33:51 +00:00
function closest(element, selector) {
2017-11-11 04:33:51 +00:00
if (startsWith(selector, '>')) {
selector = selector.slice(1);
}
2017-11-11 04:33:51 +00:00
return isNode(element)
? element.parentNode && closestFn.call(element, selector)
2019-04-22 13:31:39 +00:00
: toNodes(element).map(function (element) { return closest(element, selector); }).filter(Boolean);
}
2017-11-11 04:33:51 +00:00
function parents(element, selector) {
var elements = [];
var parent = toNode(element).parentNode;
2017-11-11 04:33:51 +00:00
while (parent && parent.nodeType === 1) {
2017-11-11 04:33:51 +00:00
if (matches(parent, selector)) {
elements.push(parent);
}
2017-11-11 04:33:51 +00:00
parent = parent.parentNode;
}
2017-11-11 04:33:51 +00:00
return elements;
2017-11-11 04:33:51 +00:00
}
var escapeFn = window.CSS && CSS.escape || function (css) { return css.replace(/([^\x7f-\uFFFF\w-])/g, function (match) { return ("\\" + match); }); };
function escape(css) {
return isString(css) ? escapeFn.call(null, css) : '';
}
2017-11-11 04:33:51 +00:00
var voidElements = {
area: true,
base: true,
br: true,
col: true,
embed: true,
hr: true,
img: true,
input: true,
keygen: true,
link: true,
menuitem: true,
meta: true,
param: true,
source: true,
track: true,
wbr: true
};
function isVoidElement(element) {
return toNodes(element).some(function (element) { return voidElements[element.tagName.toLowerCase()]; });
}
2017-11-11 04:33:51 +00:00
function isVisible(element) {
return toNodes(element).some(function (element) { return element.offsetWidth || element.offsetHeight || element.getClientRects().length; });
}
2017-11-11 04:33:51 +00:00
var selInput = 'input,select,textarea,button';
function isInput(element) {
return toNodes(element).some(function (element) { return matches(element, selInput); });
2017-11-11 04:33:51 +00:00
}
function filter(element, selector) {
return toNodes(element).filter(function (element) { return matches(element, selector); });
}
2017-11-11 04:33:51 +00:00
function within(element, selector) {
return !isString(selector)
? element === selector || (isDocument(selector)
? selector.documentElement
: toNode(selector)).contains(toNode(element)) // IE 11 document does not implement contains
: matches(element, selector) || closest(element, selector);
}
2017-11-11 04:33:51 +00:00
function on() {
var args = [], len = arguments.length;
while ( len-- ) args[ len ] = arguments[ len ];
2017-11-11 04:33:51 +00:00
var ref = getArgs(args);
var targets = ref[0];
var type = ref[1];
var selector = ref[2];
var listener = ref[3];
var useCapture = ref[4];
2017-11-11 04:33:51 +00:00
targets = toEventTargets(targets);
2017-11-11 04:33:51 +00:00
if (selector) {
listener = delegate(targets, selector, listener);
}
2017-11-11 04:33:51 +00:00
if (listener.length > 1) {
listener = detail(listener);
2017-11-11 04:33:51 +00:00
}
type.split(' ').forEach(function (type) { return targets.forEach(function (target) { return target.addEventListener(type, listener, useCapture); }
); }
);
return function () { return off(targets, type, listener, useCapture); };
}
2017-11-11 04:33:51 +00:00
function off(targets, type, listener, useCapture) {
if ( useCapture === void 0 ) useCapture = false;
2017-11-11 04:33:51 +00:00
targets = toEventTargets(targets);
type.split(' ').forEach(function (type) { return targets.forEach(function (target) { return target.removeEventListener(type, listener, useCapture); }
); }
);
2017-11-11 04:33:51 +00:00
}
function once() {
var args = [], len = arguments.length;
while ( len-- ) args[ len ] = arguments[ len ];
2017-11-11 04:33:51 +00:00
var ref = getArgs(args);
var element = ref[0];
var type = ref[1];
var selector = ref[2];
var listener = ref[3];
var useCapture = ref[4];
var condition = ref[5];
var off = on(element, type, selector, function (e) {
var result = !condition || condition(e);
if (result) {
off();
listener(e, result);
}
}, useCapture);
2017-11-11 04:33:51 +00:00
return off;
2017-11-11 04:33:51 +00:00
}
function trigger(targets, event, detail) {
return toEventTargets(targets).reduce(function (notCanceled, target) { return notCanceled && target.dispatchEvent(createEvent(event, true, true, detail)); }
, true);
}
2017-11-11 04:33:51 +00:00
function createEvent(e, bubbles, cancelable, detail) {
if ( bubbles === void 0 ) bubbles = true;
if ( cancelable === void 0 ) cancelable = false;
2017-11-11 04:33:51 +00:00
if (isString(e)) {
var event = document.createEvent('CustomEvent'); // IE 11
event.initCustomEvent(e, bubbles, cancelable, detail);
e = event;
}
2017-11-11 04:33:51 +00:00
return e;
}
2017-11-11 04:33:51 +00:00
function getArgs(args) {
if (isFunction(args[2])) {
args.splice(2, 0, false);
}
return args;
2017-11-11 04:33:51 +00:00
}
function delegate(delegates, selector, listener) {
var this$1 = this;
2017-11-11 04:33:51 +00:00
return function (e) {
2017-11-11 04:33:51 +00:00
delegates.forEach(function (delegate) {
2017-11-11 04:33:51 +00:00
var current = selector[0] === '>'
? findAll(selector, delegate).reverse().filter(function (element) { return within(e.target, element); })[0]
: closest(e.target, selector);
2017-11-11 04:33:51 +00:00
if (current) {
e.delegate = delegate;
e.current = current;
2017-11-11 04:33:51 +00:00
listener.call(this$1, e);
2017-11-11 04:33:51 +00:00
}
});
};
}
2017-11-11 04:33:51 +00:00
function detail(listener) {
return function (e) { return isArray(e.detail) ? listener.apply(void 0, [e].concat(e.detail)) : listener(e); };
}
2017-11-11 04:33:51 +00:00
function isEventTarget(target) {
return target && 'addEventListener' in target;
}
2017-11-11 04:33:51 +00:00
function toEventTarget(target) {
return isEventTarget(target) ? target : toNode(target);
}
2017-11-11 04:33:51 +00:00
function toEventTargets(target) {
return isArray(target)
? target.map(toEventTarget).filter(Boolean)
: isString(target)
? findAll(target)
: isEventTarget(target)
? [target]
: toNodes(target);
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function isTouch(e) {
return e.pointerType === 'touch' || e.touches;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function getEventPos(e, prop) {
if ( prop === void 0 ) prop = 'client';
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var touches = e.touches;
var changedTouches = e.changedTouches;
var ref = touches && touches[0] || changedTouches && changedTouches[0] || e;
var x = ref[(prop + "X")];
var y = ref[(prop + "Y")];
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return {x: x, y: y};
}
2017-11-11 04:33:51 +00:00
/* global setImmediate */
2017-11-11 04:33:51 +00:00
var Promise = 'Promise' in window ? window.Promise : PromiseFn;
2017-11-11 04:33:51 +00:00
var Deferred = function() {
var this$1 = this;
2017-11-11 04:33:51 +00:00
this.promise = new Promise(function (resolve, reject) {
this$1.reject = reject;
this$1.resolve = resolve;
});
};
2017-11-11 04:33:51 +00:00
/**
* Promises/A+ polyfill v1.1.4 (https://github.com/bramstein/promis)
*/
2017-11-11 04:33:51 +00:00
var RESOLVED = 0;
var REJECTED = 1;
var PENDING = 2;
2017-11-11 04:33:51 +00:00
var async = 'setImmediate' in window ? setImmediate : setTimeout;
2017-11-11 04:33:51 +00:00
function PromiseFn(executor) {
2017-11-11 04:33:51 +00:00
this.state = PENDING;
this.value = undefined;
this.deferred = [];
2017-11-11 04:33:51 +00:00
var promise = this;
2017-11-11 04:33:51 +00:00
try {
executor(
function (x) {
promise.resolve(x);
},
function (r) {
promise.reject(r);
2017-11-11 04:33:51 +00:00
}
);
} catch (e) {
promise.reject(e);
}
}
2017-11-11 04:33:51 +00:00
PromiseFn.reject = function (r) {
return new PromiseFn(function (resolve, reject) {
reject(r);
});
};
2017-11-11 04:33:51 +00:00
PromiseFn.resolve = function (x) {
return new PromiseFn(function (resolve, reject) {
resolve(x);
});
};
2017-11-11 04:33:51 +00:00
PromiseFn.all = function all(iterable) {
return new PromiseFn(function (resolve, reject) {
var result = [];
var count = 0;
2017-11-11 04:33:51 +00:00
if (iterable.length === 0) {
resolve(result);
}
2017-11-11 04:33:51 +00:00
function resolver(i) {
return function (x) {
result[i] = x;
count += 1;
2017-11-11 04:33:51 +00:00
if (count === iterable.length) {
resolve(result);
}
};
2017-11-11 04:33:51 +00:00
}
for (var i = 0; i < iterable.length; i += 1) {
PromiseFn.resolve(iterable[i]).then(resolver(i), reject);
2017-11-11 04:33:51 +00:00
}
});
};
2017-11-11 04:33:51 +00:00
PromiseFn.race = function race(iterable) {
return new PromiseFn(function (resolve, reject) {
for (var i = 0; i < iterable.length; i += 1) {
PromiseFn.resolve(iterable[i]).then(resolve, reject);
}
});
};
2017-11-11 04:33:51 +00:00
var p = PromiseFn.prototype;
2017-11-11 04:33:51 +00:00
p.resolve = function resolve(x) {
var promise = this;
2017-11-11 04:33:51 +00:00
if (promise.state === PENDING) {
if (x === promise) {
throw new TypeError('Promise settled with itself.');
}
2017-11-11 04:33:51 +00:00
var called = false;
2017-11-11 04:33:51 +00:00
try {
var then = x && x.then;
if (x !== null && isObject(x) && isFunction(then)) {
then.call(
x,
function (x) {
if (!called) {
promise.resolve(x);
}
called = true;
},
function (r) {
if (!called) {
promise.reject(r);
}
called = true;
}
);
return;
}
} catch (e) {
if (!called) {
promise.reject(e);
}
return;
}
2017-11-11 04:33:51 +00:00
promise.state = RESOLVED;
promise.value = x;
promise.notify();
}
};
2017-11-11 04:33:51 +00:00
p.reject = function reject(reason) {
var promise = this;
2017-11-11 04:33:51 +00:00
if (promise.state === PENDING) {
if (reason === promise) {
throw new TypeError('Promise settled with itself.');
}
2017-11-11 04:33:51 +00:00
promise.state = REJECTED;
promise.value = reason;
promise.notify();
}
};
2017-11-11 04:33:51 +00:00
p.notify = function notify() {
var this$1 = this;
2017-11-11 04:33:51 +00:00
async(function () {
if (this$1.state !== PENDING) {
while (this$1.deferred.length) {
var ref = this$1.deferred.shift();
var onResolved = ref[0];
var onRejected = ref[1];
var resolve = ref[2];
var reject = ref[3];
try {
if (this$1.state === RESOLVED) {
if (isFunction(onResolved)) {
resolve(onResolved.call(undefined, this$1.value));
} else {
resolve(this$1.value);
}
} else if (this$1.state === REJECTED) {
if (isFunction(onRejected)) {
resolve(onRejected.call(undefined, this$1.value));
} else {
reject(this$1.value);
}
}
} catch (e) {
reject(e);
}
}
}
});
};
2017-11-11 04:33:51 +00:00
p.then = function then(onResolved, onRejected) {
var this$1 = this;
2017-11-11 04:33:51 +00:00
return new PromiseFn(function (resolve, reject) {
this$1.deferred.push([onResolved, onRejected, resolve, reject]);
this$1.notify();
});
};
2017-11-11 04:33:51 +00:00
p.catch = function (onRejected) {
return this.then(undefined, onRejected);
};
2017-11-11 04:33:51 +00:00
function ajax(url, options) {
return new Promise(function (resolve, reject) {
2017-11-11 04:33:51 +00:00
var env = assign({
data: null,
method: 'GET',
headers: {},
xhr: new XMLHttpRequest(),
beforeSend: noop,
responseType: ''
}, options);
2017-11-11 04:33:51 +00:00
env.beforeSend(env);
2017-11-11 04:33:51 +00:00
var xhr = env.xhr;
2017-11-11 04:33:51 +00:00
for (var prop in env) {
if (prop in xhr) {
try {
2017-11-11 04:33:51 +00:00
xhr[prop] = env[prop];
2017-11-11 04:33:51 +00:00
} catch (e) {}
}
}
2017-11-11 04:33:51 +00:00
xhr.open(env.method.toUpperCase(), url);
2017-11-11 04:33:51 +00:00
for (var header in env.headers) {
xhr.setRequestHeader(header, env.headers[header]);
}
2017-11-11 04:33:51 +00:00
on(xhr, 'load', function () {
2017-11-11 04:33:51 +00:00
if (xhr.status === 0 || xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) {
resolve(xhr);
} else {
reject(assign(Error(xhr.statusText), {
xhr: xhr,
status: xhr.status
}));
}
2017-11-11 04:33:51 +00:00
});
2017-11-11 04:33:51 +00:00
on(xhr, 'error', function () { return reject(assign(Error('Network Error'), {xhr: xhr})); });
on(xhr, 'timeout', function () { return reject(assign(Error('Network Timeout'), {xhr: xhr})); });
2017-11-11 04:33:51 +00:00
xhr.send(env.data);
});
2017-11-11 04:33:51 +00:00
}
function getImage(src, srcset, sizes) {
2017-11-11 04:33:51 +00:00
return new Promise(function (resolve, reject) {
var img = new Image();
2017-11-11 04:33:51 +00:00
img.onerror = reject;
img.onload = function () { return resolve(img); };
2017-11-11 04:33:51 +00:00
sizes && (img.sizes = sizes);
srcset && (img.srcset = srcset);
img.src = src;
});
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
/* global DocumentTouch */
var isIE = /msie|trident/i.test(window.navigator.userAgent);
var isRtl = attr(document.documentElement, 'dir') === 'rtl';
var hasTouchEvents = 'ontouchstart' in window;
var hasPointerEvents = window.PointerEvent;
var hasTouch = hasTouchEvents
|| window.DocumentTouch && document instanceof DocumentTouch
|| navigator.maxTouchPoints; // IE >=11
var pointerDown = hasPointerEvents ? 'pointerdown' : hasTouchEvents ? 'touchstart' : 'mousedown';
var pointerMove = hasPointerEvents ? 'pointermove' : hasTouchEvents ? 'touchmove' : 'mousemove';
var pointerUp = hasPointerEvents ? 'pointerup' : hasTouchEvents ? 'touchend' : 'mouseup';
var pointerEnter = hasPointerEvents ? 'pointerenter' : hasTouchEvents ? '' : 'mouseenter';
var pointerLeave = hasPointerEvents ? 'pointerleave' : hasTouchEvents ? '' : 'mouseleave';
var pointerCancel = hasPointerEvents ? 'pointercancel' : 'touchcancel';
2017-11-11 04:33:51 +00:00
function ready(fn) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (document.readyState !== 'loading') {
fn();
return;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var unbind = on(document, 'DOMContentLoaded', function () {
unbind();
fn();
2019-04-22 13:31:39 +00:00
});
}
2017-11-11 04:33:51 +00:00
function index(element, ref) {
return ref
? toNodes(element).indexOf(toNode(ref))
: toNodes((element = toNode(element)) && element.parentNode.children).indexOf(element);
2017-11-11 04:33:51 +00:00
}
function getIndex(i, elements, current, finite) {
if ( current === void 0 ) current = 0;
if ( finite === void 0 ) finite = false;
2017-11-11 04:33:51 +00:00
elements = toNodes(elements);
2017-11-11 04:33:51 +00:00
var length = elements.length;
2017-11-11 04:33:51 +00:00
i = isNumeric(i)
? toNumber(i)
: i === 'next'
? current + 1
: i === 'previous'
? current - 1
: index(elements, i);
2017-11-11 04:33:51 +00:00
if (finite) {
return clamp(i, 0, length - 1);
}
2017-11-11 04:33:51 +00:00
i %= length;
2017-11-11 04:33:51 +00:00
return i < 0 ? i + length : i;
2017-11-11 04:33:51 +00:00
}
function empty(element) {
2019-04-22 13:31:39 +00:00
element = $(element);
element.innerHTML = '';
return element;
}
2017-11-11 04:33:51 +00:00
function html(parent, html) {
2019-04-22 13:31:39 +00:00
parent = $(parent);
return isUndefined(html)
? parent.innerHTML
: append(parent.hasChildNodes() ? empty(parent) : parent, html);
}
2017-11-11 04:33:51 +00:00
function prepend(parent, element) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
parent = $(parent);
2017-11-11 04:33:51 +00:00
if (!parent.hasChildNodes()) {
return append(parent, element);
} else {
return insertNodes(element, function (element) { return parent.insertBefore(element, parent.firstChild); });
}
}
2017-11-11 04:33:51 +00:00
function append(parent, element) {
2019-04-22 13:31:39 +00:00
parent = $(parent);
return insertNodes(element, function (element) { return parent.appendChild(element); });
}
2017-11-11 04:33:51 +00:00
function before(ref, element) {
2019-04-22 13:31:39 +00:00
ref = $(ref);
return insertNodes(element, function (element) { return ref.parentNode.insertBefore(element, ref); });
2017-11-11 04:33:51 +00:00
}
function after(ref, element) {
2019-04-22 13:31:39 +00:00
ref = $(ref);
return insertNodes(element, function (element) { return ref.nextSibling
? before(ref.nextSibling, element)
: append(ref.parentNode, element); }
);
2017-11-11 04:33:51 +00:00
}
function insertNodes(element, fn) {
element = isString(element) ? fragment(element) : element;
return element
? 'length' in element
? toNodes(element).map(fn)
: fn(element)
: null;
}
2017-11-11 04:33:51 +00:00
function remove(element) {
toNodes(element).map(function (element) { return element.parentNode && element.parentNode.removeChild(element); });
}
2017-11-11 04:33:51 +00:00
function wrapAll(element, structure) {
2017-11-11 04:33:51 +00:00
structure = toNode(before(element, structure));
2017-11-11 04:33:51 +00:00
while (structure.firstChild) {
structure = structure.firstChild;
}
2017-11-11 04:33:51 +00:00
append(structure, element);
2017-11-11 04:33:51 +00:00
return structure;
}
2017-11-11 04:33:51 +00:00
function wrapInner(element, structure) {
return toNodes(toNodes(element).map(function (element) { return element.hasChildNodes ? wrapAll(toNodes(element.childNodes), structure) : append(element, structure); }
));
}
2017-11-11 04:33:51 +00:00
function unwrap(element) {
toNodes(element)
.map(function (element) { return element.parentNode; })
.filter(function (value, index, self) { return self.indexOf(value) === index; })
.forEach(function (parent) {
before(parent, parent.childNodes);
remove(parent);
});
}
2017-11-11 04:33:51 +00:00
var fragmentRe = /^\s*<(\w+|!)[^>]*>/;
var singleTagRe = /^<(\w+)\s*\/?>(?:<\/\1>)?$/;
2017-11-11 04:33:51 +00:00
function fragment(html) {
2017-11-11 04:33:51 +00:00
var matches = singleTagRe.exec(html);
if (matches) {
return document.createElement(matches[1]);
}
2017-11-11 04:33:51 +00:00
var container = document.createElement('div');
if (fragmentRe.test(html)) {
container.insertAdjacentHTML('beforeend', html.trim());
} else {
container.textContent = html;
2017-11-11 04:33:51 +00:00
}
return container.childNodes.length > 1 ? toNodes(container.childNodes) : container.firstChild;
}
2017-11-11 04:33:51 +00:00
function apply(node, fn) {
2017-11-11 04:33:51 +00:00
if (!node || node.nodeType !== 1) {
return;
}
2017-11-11 04:33:51 +00:00
fn(node);
node = node.firstElementChild;
while (node) {
apply(node, fn);
node = node.nextElementSibling;
}
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function $(selector, context) {
return !isString(selector)
? toNode(selector)
: isHtml(selector)
? toNode(fragment(selector))
: find(selector, context);
}
function $$(selector, context) {
return !isString(selector)
? toNodes(selector)
: isHtml(selector)
? toNodes(fragment(selector))
: findAll(selector, context);
}
function isHtml(str) {
return str[0] === '<' || str.match(/^\s*</);
}
function addClass(element) {
var args = [], len = arguments.length - 1;
while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];
2017-11-11 04:33:51 +00:00
apply$1(element, args, 'add');
}
2017-11-11 04:33:51 +00:00
function removeClass(element) {
var args = [], len = arguments.length - 1;
while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];
2017-11-11 04:33:51 +00:00
apply$1(element, args, 'remove');
}
2017-11-11 04:33:51 +00:00
function removeClasses(element, cls) {
attr(element, 'class', function (value) { return (value || '').replace(new RegExp(("\\b" + cls + "\\b"), 'g'), ''); });
}
2017-11-11 04:33:51 +00:00
function replaceClass(element) {
var args = [], len = arguments.length - 1;
while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];
2017-11-11 04:33:51 +00:00
args[0] && removeClass(element, args[0]);
args[1] && addClass(element, args[1]);
}
2017-11-11 04:33:51 +00:00
function hasClass(element, cls) {
2019-04-22 13:31:39 +00:00
return cls && toNodes(element).some(function (element) { return element.classList.contains(cls.split(' ')[0]); });
}
2017-11-11 04:33:51 +00:00
function toggleClass(element) {
var args = [], len = arguments.length - 1;
while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];
2017-11-11 04:33:51 +00:00
if (!args.length) {
return;
}
2017-11-11 04:33:51 +00:00
args = getArgs$1(args);
2017-11-11 04:33:51 +00:00
var force = !isString(args[args.length - 1]) ? args.pop() : []; // in iOS 9.3 force === undefined evaluates to false
2017-11-11 04:33:51 +00:00
args = args.filter(Boolean);
2017-11-11 04:33:51 +00:00
toNodes(element).forEach(function (ref) {
var classList = ref.classList;
2017-11-11 04:33:51 +00:00
for (var i = 0; i < args.length; i++) {
supports.Force
? classList.toggle.apply(classList, [args[i]].concat(force))
: (classList[(!isUndefined(force) ? force : !classList.contains(args[i])) ? 'add' : 'remove'](args[i]));
}
});
2017-11-11 04:33:51 +00:00
}
function apply$1(element, args, fn) {
args = getArgs$1(args).filter(Boolean);
2017-11-11 04:33:51 +00:00
args.length && toNodes(element).forEach(function (ref) {
var classList = ref.classList;
2017-11-11 04:33:51 +00:00
supports.Multiple
? classList[fn].apply(classList, args)
: args.forEach(function (cls) { return classList[fn](cls); });
});
2017-11-11 04:33:51 +00:00
}
function getArgs$1(args) {
return args.reduce(function (args, arg) { return args.concat.call(args, isString(arg) && includes(arg, ' ') ? arg.trim().split(' ') : arg); }
, []);
2017-11-11 04:33:51 +00:00
}
// IE 11
2019-04-22 13:31:39 +00:00
var supports = {
get Multiple() {
return this.get('_multiple');
},
get Force() {
return this.get('_force');
},
get: function(key) {
2019-04-22 13:31:39 +00:00
if (!hasOwn(this, key)) {
var ref = document.createElement('_');
var classList = ref.classList;
classList.add('a', 'b');
classList.toggle('c', false);
this._multiple = classList.contains('b');
this._force = !classList.contains('c');
}
return this[key];
}
2019-04-22 13:31:39 +00:00
};
var cssNumber = {
'animation-iteration-count': true,
'column-count': true,
'fill-opacity': true,
'flex-grow': true,
'flex-shrink': true,
'font-weight': true,
'line-height': true,
'opacity': true,
'order': true,
'orphans': true,
2019-04-22 13:31:39 +00:00
'stroke-dasharray': true,
'stroke-dashoffset': true,
'widows': true,
'z-index': true,
'zoom': true
};
function css(element, property, value) {
2017-11-11 04:33:51 +00:00
return toNodes(element).map(function (element) {
2017-11-11 04:33:51 +00:00
if (isString(property)) {
2017-11-11 04:33:51 +00:00
property = propName(property);
2017-11-11 04:33:51 +00:00
if (isUndefined(value)) {
return getStyle(element, property);
2019-04-22 13:31:39 +00:00
} else if (!value && !isNumber(value)) {
element.style.removeProperty(property);
} else {
element.style[property] = isNumeric(value) && !cssNumber[property] ? (value + "px") : value;
}
2017-11-11 04:33:51 +00:00
} else if (isArray(property)) {
2017-11-11 04:33:51 +00:00
var styles = getStyles(element);
2017-11-11 04:33:51 +00:00
return property.reduce(function (props, property) {
props[property] = styles[propName(property)];
return props;
}, {});
2017-11-11 04:33:51 +00:00
} else if (isObject(property)) {
each(property, function (value, property) { return css(element, property, value); });
}
2017-11-11 04:33:51 +00:00
return element;
2017-11-11 04:33:51 +00:00
})[0];
2017-11-11 04:33:51 +00:00
}
function getStyles(element, pseudoElt) {
element = toNode(element);
return element.ownerDocument.defaultView.getComputedStyle(element, pseudoElt);
}
2017-11-11 04:33:51 +00:00
function getStyle(element, property, pseudoElt) {
return getStyles(element, pseudoElt)[property];
}
2017-11-11 04:33:51 +00:00
var vars = {};
2017-11-11 04:33:51 +00:00
function getCssVar(name) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var docEl = document.documentElement;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (!isIE) {
return getStyles(docEl).getPropertyValue(("--uk-" + name));
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (!(name in vars)) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
/* usage in css: .uk-name:before { content:"xyz" } */
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var element = append(docEl, document.createElement('div'));
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
addClass(element, ("uk-" + name));
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
vars[name] = getStyle(element, 'content', ':before').replace(/^["'](.*)["']$/, '$1');
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
remove(element);
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
return vars[name];
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
var cssProps = {};
2017-11-11 04:33:51 +00:00
function propName(name) {
2017-11-11 04:33:51 +00:00
var ret = cssProps[name];
if (!ret) {
ret = cssProps[name] = vendorPropName(name) || name;
}
return ret;
}
2017-11-11 04:33:51 +00:00
var cssPrefixes = ['webkit', 'moz', 'ms'];
2017-11-11 04:33:51 +00:00
function vendorPropName(name) {
2017-11-11 04:33:51 +00:00
name = hyphenate(name);
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var ref = document.documentElement;
var style = ref.style;
if (name in style) {
return name;
}
2017-11-11 04:33:51 +00:00
var i = cssPrefixes.length, prefixedName;
2017-11-11 04:33:51 +00:00
while (i--) {
prefixedName = "-" + (cssPrefixes[i]) + "-" + name;
if (prefixedName in style) {
return prefixedName;
}
2017-11-11 04:33:51 +00:00
}
}
function transition(element, props, duration, timing) {
if ( duration === void 0 ) duration = 400;
if ( timing === void 0 ) timing = 'linear';
2017-11-11 04:33:51 +00:00
return Promise.all(toNodes(element).map(function (element) { return new Promise(function (resolve, reject) {
2017-11-11 04:33:51 +00:00
for (var name in props) {
var value = css(element, name);
if (value === '') {
css(element, name, value);
}
}
2017-11-11 04:33:51 +00:00
var timer = setTimeout(function () { return trigger(element, 'transitionend'); }, duration);
2017-11-11 04:33:51 +00:00
once(element, 'transitionend transitioncanceled', function (ref) {
var type = ref.type;
2017-11-11 04:33:51 +00:00
clearTimeout(timer);
removeClass(element, 'uk-transition');
css(element, {
'transition-property': '',
'transition-duration': '',
'transition-timing-function': ''
});
type === 'transitioncanceled' ? reject() : resolve();
}, false, function (ref) {
var target = ref.target;
2017-11-11 04:33:51 +00:00
return element === target;
});
2017-11-11 04:33:51 +00:00
addClass(element, 'uk-transition');
css(element, assign({
'transition-property': Object.keys(props).map(propName).join(','),
'transition-duration': (duration + "ms"),
'transition-timing-function': timing
}, props));
2017-11-11 04:33:51 +00:00
}); }
));
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
var Transition = {
2017-11-11 04:33:51 +00:00
start: transition,
2017-11-11 04:33:51 +00:00
stop: function(element) {
trigger(element, 'transitionend');
return Promise.resolve();
},
2017-11-11 04:33:51 +00:00
cancel: function(element) {
trigger(element, 'transitioncanceled');
},
2017-11-11 04:33:51 +00:00
inProgress: function(element) {
return hasClass(element, 'uk-transition');
}
2017-11-11 04:33:51 +00:00
};
2017-11-11 04:33:51 +00:00
var animationPrefix = 'uk-animation-';
var clsCancelAnimation = 'uk-cancel-animation';
2017-11-11 04:33:51 +00:00
function animate(element, animation, duration, origin, out) {
var arguments$1 = arguments;
if ( duration === void 0 ) duration = 200;
2017-11-11 04:33:51 +00:00
return Promise.all(toNodes(element).map(function (element) { return new Promise(function (resolve, reject) {
2017-11-11 04:33:51 +00:00
if (hasClass(element, clsCancelAnimation)) {
requestAnimationFrame(function () { return Promise.resolve().then(function () { return animate.apply(void 0, arguments$1).then(resolve, reject); }
); }
);
return;
}
2017-11-11 04:33:51 +00:00
var cls = animation + " " + animationPrefix + (out ? 'leave' : 'enter');
2017-11-11 04:33:51 +00:00
if (startsWith(animation, animationPrefix)) {
2017-11-11 04:33:51 +00:00
if (origin) {
cls += " uk-transform-origin-" + origin;
}
2017-11-11 04:33:51 +00:00
if (out) {
cls += " " + animationPrefix + "reverse";
}
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
reset();
2017-11-11 04:33:51 +00:00
once(element, 'animationend animationcancel', function (ref) {
var type = ref.type;
2017-11-11 04:33:51 +00:00
var hasReset = false;
2017-11-11 04:33:51 +00:00
if (type === 'animationcancel') {
reject();
reset();
} else {
resolve();
Promise.resolve().then(function () {
hasReset = true;
reset();
});
}
2017-11-11 04:33:51 +00:00
requestAnimationFrame(function () {
if (!hasReset) {
addClass(element, clsCancelAnimation);
2017-11-11 04:33:51 +00:00
requestAnimationFrame(function () { return removeClass(element, clsCancelAnimation); });
}
});
2017-11-11 04:33:51 +00:00
}, false, function (ref) {
var target = ref.target;
2017-11-11 04:33:51 +00:00
return element === target;
});
2017-11-11 04:33:51 +00:00
css(element, 'animationDuration', (duration + "ms"));
addClass(element, cls);
2017-11-11 04:33:51 +00:00
function reset() {
css(element, 'animationDuration', '');
removeClasses(element, (animationPrefix + "\\S*"));
}
2017-11-11 04:33:51 +00:00
}); }
));
2017-11-11 04:33:51 +00:00
}
var inProgress = new RegExp((animationPrefix + "(enter|leave)"));
var Animation = {
2017-11-11 04:33:51 +00:00
in: function(element, animation, duration, origin) {
return animate(element, animation, duration, origin, false);
},
2017-11-11 04:33:51 +00:00
out: function(element, animation, duration, origin) {
return animate(element, animation, duration, origin, true);
},
2017-11-11 04:33:51 +00:00
inProgress: function(element) {
return inProgress.test(attr(element, 'class'));
},
2017-11-11 04:33:51 +00:00
cancel: function(element) {
trigger(element, 'animationcancel');
}
2017-11-11 04:33:51 +00:00
};
2017-11-11 04:33:51 +00:00
var dirs = {
width: ['x', 'left', 'right'],
height: ['y', 'top', 'bottom']
};
2017-11-11 04:33:51 +00:00
function positionAt(element, target, elAttach, targetAttach, elOffset, targetOffset, flip, boundary) {
2017-11-11 04:33:51 +00:00
elAttach = getPos(elAttach);
targetAttach = getPos(targetAttach);
2017-11-11 04:33:51 +00:00
var flipped = {element: elAttach, target: targetAttach};
2017-11-11 04:33:51 +00:00
if (!element || !target) {
return flipped;
}
2017-11-11 04:33:51 +00:00
var dim = getDimensions(element);
var targetDim = getDimensions(target);
var position = targetDim;
2017-11-11 04:33:51 +00:00
moveTo(position, elAttach, dim, -1);
moveTo(position, targetAttach, targetDim, 1);
2017-11-11 04:33:51 +00:00
elOffset = getOffsets(elOffset, dim.width, dim.height);
targetOffset = getOffsets(targetOffset, targetDim.width, targetDim.height);
2017-11-11 04:33:51 +00:00
elOffset['x'] += targetOffset['x'];
elOffset['y'] += targetOffset['y'];
2017-11-11 04:33:51 +00:00
position.left += elOffset['x'];
position.top += elOffset['y'];
2017-11-11 04:33:51 +00:00
if (flip) {
2019-04-22 13:31:39 +00:00
var boundaries = [getDimensions(getWindow(element))];
if (boundary) {
boundaries.unshift(getDimensions(boundary));
}
each(dirs, function (ref, prop) {
var dir = ref[0];
var align = ref[1];
var alignFlip = ref[2];
2017-11-11 04:33:51 +00:00
if (!(flip === true || includes(flip, dir))) {
return;
}
2019-04-22 13:31:39 +00:00
boundaries.some(function (boundary) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var elemOffset = elAttach[dir] === align
? -dim[prop]
: elAttach[dir] === alignFlip
? dim[prop]
: 0;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var targetOffset = targetAttach[dir] === align
? targetDim[prop]
: targetAttach[dir] === alignFlip
? -targetDim[prop]
: 0;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (position[align] < boundary[align] || position[align] + dim[prop] > boundary[alignFlip]) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var centerOffset = dim[prop] / 2;
var centerTargetOffset = targetAttach[dir] === 'center' ? -targetDim[prop] / 2 : 0;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return elAttach[dir] === 'center' && (
apply(centerOffset, centerTargetOffset)
|| apply(-centerOffset, -centerTargetOffset)
) || apply(elemOffset, targetOffset);
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function apply(elemOffset, targetOffset) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var newVal = position[align] + elemOffset + targetOffset - elOffset[dir] * 2;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (newVal >= boundary[align] && newVal + dim[prop] <= boundary[alignFlip]) {
position[align] = newVal;
['element', 'target'].forEach(function (el) {
flipped[el][dir] = !elemOffset
? flipped[el][dir]
: flipped[el][dir] === dirs[prop][1]
? dirs[prop][2]
: dirs[prop][1];
});
return true;
}
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
});
2017-11-11 04:33:51 +00:00
});
}
2017-11-11 04:33:51 +00:00
offset(element, position);
2017-11-11 04:33:51 +00:00
return flipped;
2017-11-11 04:33:51 +00:00
}
function offset(element, coordinates) {
2017-11-11 04:33:51 +00:00
element = toNode(element);
2017-11-11 04:33:51 +00:00
if (coordinates) {
2017-11-11 04:33:51 +00:00
var currentOffset = offset(element);
var pos = css(element, 'position');
2017-11-11 04:33:51 +00:00
['left', 'top'].forEach(function (prop) {
if (prop in coordinates) {
var value = css(element, prop);
css(element, prop, coordinates[prop] - currentOffset[prop]
+ toFloat(pos === 'absolute' && value === 'auto'
? position(element)[prop]
: value)
);
}
});
2017-11-11 04:33:51 +00:00
return;
2017-11-11 04:33:51 +00:00
}
return getDimensions(element);
2017-11-11 04:33:51 +00:00
}
function getDimensions(element) {
2017-11-11 04:33:51 +00:00
element = toNode(element);
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var ref = getWindow(element);
var top = ref.pageYOffset;
var left = ref.pageXOffset;
2017-11-11 04:33:51 +00:00
if (isWindow(element)) {
2017-11-11 04:33:51 +00:00
var height = element.innerHeight;
var width = element.innerWidth;
2017-11-11 04:33:51 +00:00
return {
top: top,
left: left,
height: height,
width: width,
bottom: top + height,
2019-04-22 13:31:39 +00:00
right: left + width
};
}
2017-11-11 04:33:51 +00:00
var style, hidden;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (!isVisible(element) && css(element, 'display') === 'none') {
style = attr(element, 'style');
hidden = attr(element, 'hidden');
2017-11-11 04:33:51 +00:00
attr(element, {
style: ((style || '') + ";display:block !important;"),
hidden: null
});
}
2017-11-11 04:33:51 +00:00
var rect = element.getBoundingClientRect();
2017-11-11 04:33:51 +00:00
if (!isUndefined(style)) {
attr(element, {style: style, hidden: hidden});
}
2017-11-11 04:33:51 +00:00
return {
height: rect.height,
width: rect.width,
top: rect.top + top,
left: rect.left + left,
bottom: rect.bottom + top,
2019-04-22 13:31:39 +00:00
right: rect.right + left
};
2017-11-11 04:33:51 +00:00
}
function position(element) {
element = toNode(element);
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var parent = element.offsetParent || getDocEl(element);
var parentOffset = offset(parent);
var ref = ['top', 'left'].reduce(function (props, prop) {
2019-04-22 13:31:39 +00:00
var propName = ucfirst(prop);
props[prop] -= parentOffset[prop]
2019-04-22 13:31:39 +00:00
+ toFloat(css(element, ("margin" + propName)))
+ toFloat(css(parent, ("border" + propName + "Width")));
return props;
}, offset(element));
var top = ref.top;
var left = ref.left;
2017-11-11 04:33:51 +00:00
return {top: top, left: left};
}
2017-11-11 04:33:51 +00:00
var height = dimension('height');
var width = dimension('width');
2017-11-11 04:33:51 +00:00
function dimension(prop) {
2019-04-22 13:31:39 +00:00
var propName = ucfirst(prop);
return function (element, value) {
2017-11-11 04:33:51 +00:00
element = toNode(element);
2017-11-11 04:33:51 +00:00
if (isUndefined(value)) {
2017-11-11 04:33:51 +00:00
if (isWindow(element)) {
2019-04-22 13:31:39 +00:00
return element[("inner" + propName)];
}
2017-11-11 04:33:51 +00:00
if (isDocument(element)) {
var doc = element.documentElement;
2019-04-22 13:31:39 +00:00
return Math.max(doc[("offset" + propName)], doc[("scroll" + propName)]);
}
2017-11-11 04:33:51 +00:00
value = css(element, prop);
2019-04-22 13:31:39 +00:00
value = value === 'auto' ? element[("offset" + propName)] : toFloat(value) || 0;
2017-11-11 04:33:51 +00:00
return value - boxModelAdjust(prop, element);
2017-11-11 04:33:51 +00:00
} else {
2017-11-11 04:33:51 +00:00
css(element, prop, !value && value !== 0
? ''
: +value + boxModelAdjust(prop, element) + 'px'
);
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
};
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
function boxModelAdjust(prop, element, sizing) {
if ( sizing === void 0 ) sizing = 'border-box';
return css(element, 'boxSizing') === sizing
? dirs[prop].slice(1).map(ucfirst).reduce(function (value, prop) { return value
+ toFloat(css(element, ("padding" + prop)))
+ toFloat(css(element, ("border" + prop + "Width"))); }
, 0)
: 0;
2017-11-11 04:33:51 +00:00
}
function moveTo(position, attach, dim, factor) {
each(dirs, function (ref, prop) {
var dir = ref[0];
var align = ref[1];
var alignFlip = ref[2];
2017-11-11 04:33:51 +00:00
if (attach[dir] === alignFlip) {
position[align] += dim[prop] * factor;
} else if (attach[dir] === 'center') {
position[align] += dim[prop] * factor / 2;
}
});
2017-11-11 04:33:51 +00:00
}
function getPos(pos) {
2017-11-11 04:33:51 +00:00
var x = /left|center|right/;
var y = /top|center|bottom/;
2017-11-11 04:33:51 +00:00
pos = (pos || '').split(' ');
2017-11-11 04:33:51 +00:00
if (pos.length === 1) {
pos = x.test(pos[0])
? pos.concat(['center'])
: y.test(pos[0])
? ['center'].concat(pos)
: ['center', 'center'];
}
2017-11-11 04:33:51 +00:00
return {
x: x.test(pos[0]) ? pos[0] : 'center',
y: y.test(pos[1]) ? pos[1] : 'center'
};
}
2017-11-11 04:33:51 +00:00
function getOffsets(offsets, width, height) {
2017-11-11 04:33:51 +00:00
var ref = (offsets || '').split(' ');
var x = ref[0];
var y = ref[1];
2017-11-11 04:33:51 +00:00
return {
x: x ? toFloat(x) * (endsWith(x, '%') ? width / 100 : 1) : 0,
y: y ? toFloat(y) * (endsWith(y, '%') ? height / 100 : 1) : 0
};
}
2017-11-11 04:33:51 +00:00
function flipPosition(pos) {
switch (pos) {
case 'left':
return 'right';
case 'right':
return 'left';
case 'top':
return 'bottom';
case 'bottom':
return 'top';
default:
return pos;
}
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function isInView(element, topOffset, leftOffset) {
if ( topOffset === void 0 ) topOffset = 0;
if ( leftOffset === void 0 ) leftOffset = 0;
2017-11-11 04:33:51 +00:00
if (!isVisible(element)) {
return false;
}
2017-11-11 04:33:51 +00:00
element = toNode(element);
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var win = getWindow(element);
var client = element.getBoundingClientRect();
var bounding = {
top: -topOffset,
left: -leftOffset,
bottom: topOffset + height(win),
right: leftOffset + width(win)
};
2017-11-11 04:33:51 +00:00
return intersectRect(client, bounding) || pointInRect({x: client.left, y: client.top}, bounding);
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
function scrolledOver(element, heightOffset) {
if ( heightOffset === void 0 ) heightOffset = 0;
2017-11-11 04:33:51 +00:00
if (!isVisible(element)) {
return 0;
}
2017-11-11 04:33:51 +00:00
element = toNode(element);
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var win = getWindow(element);
var doc = getDocument(element);
var elHeight = element.offsetHeight + heightOffset;
var ref = offsetPosition(element);
var top = ref[0];
var vp = height(win);
var vh = vp + Math.min(0, top - vp);
var diff = Math.max(0, vp - (height(doc) + heightOffset - (top + elHeight)));
2017-11-11 04:33:51 +00:00
return clamp(((vh + win.pageYOffset - top) / ((vh + (elHeight - (diff < vp ? diff : 0))) / 100)) / 100);
}
2017-11-11 04:33:51 +00:00
function scrollTop(element, top) {
element = toNode(element);
2017-11-11 04:33:51 +00:00
if (isWindow(element) || isDocument(element)) {
2019-04-22 13:31:39 +00:00
var ref = getWindow(element);
var scrollTo = ref.scrollTo;
var pageXOffset = ref.pageXOffset;
scrollTo(pageXOffset, top);
} else {
element.scrollTop = top;
}
}
2017-11-11 04:33:51 +00:00
function offsetPosition(element) {
var offset = [0, 0];
2017-11-11 04:33:51 +00:00
do {
2017-11-11 04:33:51 +00:00
offset[0] += element.offsetTop;
offset[1] += element.offsetLeft;
2017-11-11 04:33:51 +00:00
if (css(element, 'position') === 'fixed') {
2019-04-22 13:31:39 +00:00
var win = getWindow(element);
offset[0] += win.pageYOffset;
offset[1] += win.pageXOffset;
return offset;
2017-11-11 04:33:51 +00:00
}
} while ((element = element.offsetParent));
2017-11-11 04:33:51 +00:00
return offset;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function toPx(value, property, element) {
if ( property === void 0 ) property = 'width';
if ( element === void 0 ) element = window;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return isNumeric(value)
? +value
: endsWith(value, 'vh')
? percent(height(getWindow(element)), value)
: endsWith(value, 'vw')
? percent(width(getWindow(element)), value)
: endsWith(value, '%')
? percent(getDimensions(element)[property], value)
: toFloat(value);
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function percent(base, value) {
return base * toFloat(value) / 100;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function getWindow(element) {
return isWindow(element) ? element : getDocument(element).defaultView;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function getDocument(element) {
return toNode(element).ownerDocument;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function getDocEl(element) {
return getDocument(element).documentElement;
}
2017-11-11 04:33:51 +00:00
/*
Based on:
Copyright (c) 2016 Wilson Page wilsonpage@me.com
https://github.com/wilsonpage/fastdom
*/
2017-11-11 04:33:51 +00:00
var fastdom = {
2017-11-11 04:33:51 +00:00
reads: [],
writes: [],
2017-11-11 04:33:51 +00:00
read: function(task) {
this.reads.push(task);
scheduleFlush();
return task;
},
2017-11-11 04:33:51 +00:00
write: function(task) {
this.writes.push(task);
scheduleFlush();
return task;
},
2017-11-11 04:33:51 +00:00
clear: function(task) {
return remove$1(this.reads, task) || remove$1(this.writes, task);
},
2017-11-11 04:33:51 +00:00
flush: function() {
2017-11-11 04:33:51 +00:00
runTasks(this.reads);
runTasks(this.writes.splice(0, this.writes.length));
2017-11-11 04:33:51 +00:00
this.scheduled = false;
2017-11-11 04:33:51 +00:00
if (this.reads.length || this.writes.length) {
scheduleFlush();
}
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
};
2017-11-11 04:33:51 +00:00
function scheduleFlush() {
if (!fastdom.scheduled) {
fastdom.scheduled = true;
requestAnimationFrame(fastdom.flush.bind(fastdom));
2017-11-11 04:33:51 +00:00
}
}
function runTasks(tasks) {
var task;
while ((task = tasks.shift())) {
task();
}
2017-11-11 04:33:51 +00:00
}
function remove$1(array, item) {
var index = array.indexOf(item);
return !!~index && !!array.splice(index, 1);
2017-11-11 04:33:51 +00:00
}
function MouseTracker() {}
2017-11-11 04:33:51 +00:00
MouseTracker.prototype = {
2017-11-11 04:33:51 +00:00
positions: [],
position: null,
2017-11-11 04:33:51 +00:00
init: function() {
var this$1 = this;
2017-11-11 04:33:51 +00:00
this.positions = [];
this.position = null;
2017-11-11 04:33:51 +00:00
var ticking = false;
this.unbind = on(document, 'mousemove', function (e) {
2017-11-11 04:33:51 +00:00
if (ticking) {
return;
}
2017-11-11 04:33:51 +00:00
setTimeout(function () {
2017-11-11 04:33:51 +00:00
var time = Date.now();
var ref = this$1.positions;
var length = ref.length;
2017-11-11 04:33:51 +00:00
if (length && (time - this$1.positions[length - 1].time > 100)) {
this$1.positions.splice(0, length);
}
2017-11-11 04:33:51 +00:00
this$1.positions.push({time: time, x: e.pageX, y: e.pageY});
2017-11-11 04:33:51 +00:00
if (this$1.positions.length > 5) {
this$1.positions.shift();
}
2017-11-11 04:33:51 +00:00
ticking = false;
}, 5);
2017-11-11 04:33:51 +00:00
ticking = true;
});
2017-11-11 04:33:51 +00:00
},
2017-11-11 04:33:51 +00:00
cancel: function() {
if (this.unbind) {
this.unbind();
}
},
2017-11-11 04:33:51 +00:00
movesTo: function(target) {
2017-11-11 04:33:51 +00:00
if (this.positions.length < 2) {
return false;
}
2017-11-11 04:33:51 +00:00
var p = offset(target);
2019-04-22 13:31:39 +00:00
var position = this.positions[this.positions.length - 1];
var ref = this.positions;
var prevPos = ref[0];
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (p.left <= position.x && position.x <= p.right && p.top <= position.y && position.y <= p.bottom) {
return false;
}
2017-11-11 04:33:51 +00:00
var points = [
[{x: p.left, y: p.top}, {x: p.right, y: p.bottom}],
[{x: p.right, y: p.top}, {x: p.left, y: p.bottom}]
];
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (p.right <= position.x) ; else if (p.left >= position.x) {
points[0].reverse();
points[1].reverse();
2019-04-22 13:31:39 +00:00
} else if (p.bottom <= position.y) {
points[0].reverse();
2019-04-22 13:31:39 +00:00
} else if (p.top >= position.y) {
points[1].reverse();
}
2017-11-11 04:33:51 +00:00
return !!points.reduce(function (result, point) {
2019-04-22 13:31:39 +00:00
return result + (slope(prevPos, point[0]) < slope(position, point[0]) && slope(prevPos, point[1]) > slope(position, point[1]));
}, 0);
2017-11-11 04:33:51 +00:00
}
};
2017-11-11 04:33:51 +00:00
function slope(a, b) {
return (b.y - a.y) / (b.x - a.x);
2017-11-11 04:33:51 +00:00
}
var strats = {};
strats.events =
strats.created =
strats.beforeConnect =
strats.connected =
strats.beforeDisconnect =
strats.disconnected =
2019-04-22 13:31:39 +00:00
strats.destroy = concatStrat;
2019-04-22 13:31:39 +00:00
// args strategy
strats.args = function (parentVal, childVal) {
return concatStrat(childVal || parentVal);
2017-11-11 04:33:51 +00:00
};
// update strategy
strats.update = function (parentVal, childVal) {
2019-04-22 13:31:39 +00:00
return sortBy(concatStrat(parentVal, isFunction(childVal) ? {read: childVal} : childVal), 'order');
};
2017-11-11 04:33:51 +00:00
// property strategy
strats.props = function (parentVal, childVal) {
2017-11-11 04:33:51 +00:00
if (isArray(childVal)) {
childVal = childVal.reduce(function (value, key) {
value[key] = String;
return value;
}, {});
}
2017-11-11 04:33:51 +00:00
return strats.methods(parentVal, childVal);
};
2017-11-11 04:33:51 +00:00
// extend strategy
strats.computed =
strats.methods = function (parentVal, childVal) {
return childVal
? parentVal
? assign({}, parentVal, childVal)
: childVal
: parentVal;
};
2017-11-11 04:33:51 +00:00
// data strategy
strats.data = function (parentVal, childVal, vm) {
2017-11-11 04:33:51 +00:00
if (!vm) {
2017-11-11 04:33:51 +00:00
if (!childVal) {
return parentVal;
}
2017-11-11 04:33:51 +00:00
if (!parentVal) {
return childVal;
}
2017-11-11 04:33:51 +00:00
return function (vm) {
return mergeFnData(parentVal, childVal, vm);
};
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
return mergeFnData(parentVal, childVal, vm);
};
2017-11-11 04:33:51 +00:00
function mergeFnData(parentVal, childVal, vm) {
return strats.computed(
isFunction(parentVal)
? parentVal.call(vm, vm)
: parentVal,
isFunction(childVal)
? childVal.call(vm, vm)
: childVal
);
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
// concat strategy
function concatStrat(parentVal, childVal) {
parentVal = parentVal && !isArray(parentVal) ? [parentVal] : parentVal;
return childVal
? parentVal
? parentVal.concat(childVal)
: isArray(childVal)
? childVal
: [childVal]
: parentVal;
}
// default strategy
2019-04-22 13:31:39 +00:00
function defaultStrat(parentVal, childVal) {
return isUndefined(childVal) ? parentVal : childVal;
2019-04-22 13:31:39 +00:00
}
2017-11-11 04:33:51 +00:00
function mergeOptions(parent, child, vm) {
2017-11-11 04:33:51 +00:00
var options = {};
2017-11-11 04:33:51 +00:00
if (isFunction(child)) {
child = child.options;
}
2017-11-11 04:33:51 +00:00
if (child.extends) {
parent = mergeOptions(parent, child.extends, vm);
}
2017-11-11 04:33:51 +00:00
if (child.mixins) {
for (var i = 0, l = child.mixins.length; i < l; i++) {
parent = mergeOptions(parent, child.mixins[i], vm);
2017-11-11 04:33:51 +00:00
}
}
for (var key in parent) {
mergeKey(key);
}
2017-11-11 04:33:51 +00:00
for (var key$1 in child) {
if (!hasOwn(parent, key$1)) {
mergeKey(key$1);
}
}
2017-11-11 04:33:51 +00:00
function mergeKey(key) {
options[key] = (strats[key] || defaultStrat)(parent[key], child[key], vm);
}
2017-11-11 04:33:51 +00:00
return options;
}
2017-11-11 04:33:51 +00:00
function parseOptions(options, args) {
var obj;
2017-11-11 04:33:51 +00:00
if ( args === void 0 ) args = [];
2017-11-11 04:33:51 +00:00
try {
2017-11-11 04:33:51 +00:00
return !options
? {}
: startsWith(options, '{')
? JSON.parse(options)
: args.length && !includes(options, ':')
? (( obj = {}, obj[args[0]] = options, obj ))
: options.split(';').reduce(function (options, option) {
var ref = option.split(/:(.*)/);
var key = ref[0];
var value = ref[1];
if (key && !isUndefined(value)) {
options[key.trim()] = value.trim();
}
return options;
}, {});
2017-11-11 04:33:51 +00:00
} catch (e) {
return {};
}
2017-11-11 04:33:51 +00:00
}
var id = 0;
2017-11-11 04:33:51 +00:00
var Player = function(el) {
this.id = ++id;
this.el = toNode(el);
};
2017-11-11 04:33:51 +00:00
Player.prototype.isVideo = function () {
return this.isYoutube() || this.isVimeo() || this.isHTML5();
};
2017-11-11 04:33:51 +00:00
Player.prototype.isHTML5 = function () {
return this.el.tagName === 'VIDEO';
};
2017-11-11 04:33:51 +00:00
Player.prototype.isIFrame = function () {
return this.el.tagName === 'IFRAME';
};
2017-11-11 04:33:51 +00:00
Player.prototype.isYoutube = function () {
return this.isIFrame() && !!this.el.src.match(/\/\/.*?youtube(-nocookie)?\.[a-z]+\/(watch\?v=[^&\s]+|embed)|youtu\.be\/.*/);
};
2017-11-11 04:33:51 +00:00
Player.prototype.isVimeo = function () {
return this.isIFrame() && !!this.el.src.match(/vimeo\.com\/video\/.*/);
};
2017-11-11 04:33:51 +00:00
Player.prototype.enableApi = function () {
var this$1 = this;
2017-11-11 04:33:51 +00:00
if (this.ready) {
return this.ready;
}
2017-11-11 04:33:51 +00:00
var youtube = this.isYoutube();
var vimeo = this.isVimeo();
2017-11-11 04:33:51 +00:00
var poller;
2017-11-11 04:33:51 +00:00
if (youtube || vimeo) {
2017-11-11 04:33:51 +00:00
return this.ready = new Promise(function (resolve) {
2017-11-11 04:33:51 +00:00
once(this$1.el, 'load', function () {
if (youtube) {
var listener = function () { return post(this$1.el, {event: 'listening', id: this$1.id}); };
poller = setInterval(listener, 100);
listener();
}
});
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
listen(function (data) { return youtube && data.id === this$1.id && data.event === 'onReady' || vimeo && Number(data.player_id) === this$1.id; })
.then(function () {
resolve();
poller && clearInterval(poller);
});
2017-11-11 04:33:51 +00:00
attr(this$1.el, 'src', ("" + (this$1.el.src) + (includes(this$1.el.src, '?') ? '&' : '?') + (youtube ? 'enablejsapi=1' : ("api=1&player_id=" + (this$1.id)))));
});
2017-11-11 04:33:51 +00:00
}
return Promise.resolve();
2017-11-11 04:33:51 +00:00
};
Player.prototype.play = function () {
var this$1 = this;
2017-11-11 04:33:51 +00:00
if (!this.isVideo()) {
return;
}
2017-11-11 04:33:51 +00:00
if (this.isIFrame()) {
this.enableApi().then(function () { return post(this$1.el, {func: 'playVideo', method: 'play'}); });
} else if (this.isHTML5()) {
try {
var promise = this.el.play();
2017-11-11 04:33:51 +00:00
if (promise) {
promise.catch(noop);
}
} catch (e) {}
}
};
2017-11-11 04:33:51 +00:00
Player.prototype.pause = function () {
var this$1 = this;
2017-11-11 04:33:51 +00:00
if (!this.isVideo()) {
return;
}
2017-11-11 04:33:51 +00:00
if (this.isIFrame()) {
this.enableApi().then(function () { return post(this$1.el, {func: 'pauseVideo', method: 'pause'}); });
} else if (this.isHTML5()) {
this.el.pause();
}
};
2017-11-11 04:33:51 +00:00
Player.prototype.mute = function () {
var this$1 = this;
2017-11-11 04:33:51 +00:00
if (!this.isVideo()) {
2017-11-11 04:33:51 +00:00
return;
}
2017-11-11 04:33:51 +00:00
if (this.isIFrame()) {
this.enableApi().then(function () { return post(this$1.el, {func: 'mute', method: 'setVolume', value: 0}); });
} else if (this.isHTML5()) {
this.el.muted = true;
attr(this.el, 'muted', '');
2017-11-11 04:33:51 +00:00
}
};
2017-11-11 04:33:51 +00:00
function post(el, cmd) {
try {
el.contentWindow.postMessage(JSON.stringify(assign({event: 'command'}, cmd)), '*');
} catch (e) {}
}
2017-11-11 04:33:51 +00:00
function listen(cb) {
2017-11-11 04:33:51 +00:00
return new Promise(function (resolve) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
once(window, 'message', function (_, data) { return resolve(data); }, false, function (ref) {
var data = ref.data;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (!data || !isString(data)) {
return;
}
2017-11-11 04:33:51 +00:00
try {
2019-04-22 13:31:39 +00:00
data = JSON.parse(data);
} catch (e) {
return;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return data && cb(data);
2017-11-11 04:33:51 +00:00
});
2017-11-11 04:33:51 +00:00
});
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
var IntersectionObserver = 'IntersectionObserver' in window
? window.IntersectionObserver
: /*@__PURE__*/(function () {
function IntersectionObserverClass(callback, ref) {
var this$1 = this;
if ( ref === void 0 ) ref = {};
var rootMargin = ref.rootMargin; if ( rootMargin === void 0 ) rootMargin = '0 0';
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
this.targets = [];
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var ref$1 = (rootMargin || '0 0').split(' ').map(toFloat);
var offsetTop = ref$1[0];
var offsetLeft = ref$1[1];
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
this.offsetTop = offsetTop;
this.offsetLeft = offsetLeft;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var pending;
this.apply = function () {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (pending) {
return;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
pending = requestAnimationFrame(function () { return setTimeout(function () {
var records = this$1.takeRecords();
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (records.length) {
callback(records, this$1);
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
pending = false;
}); });
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
};
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
this.off = on(window, 'scroll resize load', this.apply, {passive: true, capture: true});
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
IntersectionObserverClass.prototype.takeRecords = function () {
var this$1 = this;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return this.targets.filter(function (entry) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var inView = isInView(entry.target, this$1.offsetTop, this$1.offsetLeft);
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (entry.isIntersecting === null || inView ^ entry.isIntersecting) {
entry.isIntersecting = inView;
return true;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
});
};
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
IntersectionObserverClass.prototype.observe = function (target) {
this.targets.push({
target: target,
isIntersecting: null
});
this.apply();
};
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
IntersectionObserverClass.prototype.disconnect = function () {
this.targets = [];
this.off();
};
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return IntersectionObserverClass;
}());
2017-11-11 04:33:51 +00:00
var util = /*#__PURE__*/Object.freeze({
ajax: ajax,
getImage: getImage,
transition: transition,
Transition: Transition,
animate: animate,
Animation: Animation,
attr: attr,
hasAttr: hasAttr,
removeAttr: removeAttr,
data: data,
addClass: addClass,
removeClass: removeClass,
removeClasses: removeClasses,
replaceClass: replaceClass,
hasClass: hasClass,
toggleClass: toggleClass,
positionAt: positionAt,
offset: offset,
position: position,
height: height,
width: width,
2019-04-22 13:31:39 +00:00
boxModelAdjust: boxModelAdjust,
flipPosition: flipPosition,
isInView: isInView,
scrolledOver: scrolledOver,
scrollTop: scrollTop,
2019-04-22 13:31:39 +00:00
offsetPosition: offsetPosition,
toPx: toPx,
ready: ready,
index: index,
getIndex: getIndex,
empty: empty,
html: html,
prepend: prepend,
append: append,
before: before,
after: after,
remove: remove,
wrapAll: wrapAll,
wrapInner: wrapInner,
unwrap: unwrap,
fragment: fragment,
apply: apply,
2019-04-22 13:31:39 +00:00
$: $,
$$: $$,
isIE: isIE,
isRtl: isRtl,
hasTouch: hasTouch,
pointerDown: pointerDown,
pointerMove: pointerMove,
pointerUp: pointerUp,
pointerEnter: pointerEnter,
pointerLeave: pointerLeave,
2019-04-22 13:31:39 +00:00
pointerCancel: pointerCancel,
on: on,
off: off,
once: once,
trigger: trigger,
createEvent: createEvent,
toEventTargets: toEventTargets,
2019-04-22 13:31:39 +00:00
isTouch: isTouch,
getEventPos: getEventPos,
fastdom: fastdom,
isVoidElement: isVoidElement,
isVisible: isVisible,
selInput: selInput,
isInput: isInput,
filter: filter,
within: within,
bind: bind,
hasOwn: hasOwn,
hyphenate: hyphenate,
camelize: camelize,
ucfirst: ucfirst,
startsWith: startsWith,
endsWith: endsWith,
includes: includes,
2019-04-22 13:31:39 +00:00
findIndex: findIndex,
isArray: isArray,
isFunction: isFunction,
isObject: isObject,
isPlainObject: isPlainObject,
isWindow: isWindow,
isDocument: isDocument,
isJQuery: isJQuery,
isNode: isNode,
isNodeCollection: isNodeCollection,
isBoolean: isBoolean,
isString: isString,
isNumber: isNumber,
isNumeric: isNumeric,
2019-04-22 13:31:39 +00:00
isEmpty: isEmpty,
isUndefined: isUndefined,
toBoolean: toBoolean,
toNumber: toNumber,
toFloat: toFloat,
toNode: toNode,
toNodes: toNodes,
toList: toList,
toMs: toMs,
2019-04-22 13:31:39 +00:00
isEqual: isEqual,
swap: swap,
assign: assign,
each: each,
sortBy: sortBy,
2019-04-22 13:31:39 +00:00
uniqueBy: uniqueBy,
clamp: clamp,
noop: noop,
intersectRect: intersectRect,
pointInRect: pointInRect,
Dimensions: Dimensions,
MouseTracker: MouseTracker,
mergeOptions: mergeOptions,
parseOptions: parseOptions,
Player: Player,
Promise: Promise,
Deferred: Deferred,
2019-04-22 13:31:39 +00:00
IntersectionObserver: IntersectionObserver,
query: query,
queryAll: queryAll,
find: find,
findAll: findAll,
matches: matches,
closest: closest,
parents: parents,
escape: escape,
css: css,
getStyles: getStyles,
getStyle: getStyle,
getCssVar: getCssVar,
2019-04-22 13:31:39 +00:00
propName: propName
});
2017-11-11 04:33:51 +00:00
function componentAPI (UIkit) {
2017-11-11 04:33:51 +00:00
var DATA = UIkit.data;
2017-11-11 04:33:51 +00:00
var components = {};
2017-11-11 04:33:51 +00:00
UIkit.component = function (name, options) {
2017-11-11 04:33:51 +00:00
if (!options) {
2017-11-11 04:33:51 +00:00
if (isPlainObject(components[name])) {
components[name] = UIkit.extend(components[name]);
}
2017-11-11 04:33:51 +00:00
return components[name];
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
UIkit[name] = function (element, data) {
var i = arguments.length, argsArray = Array(i);
while ( i-- ) argsArray[i] = arguments[i];
2017-11-11 04:33:51 +00:00
var component = UIkit.component(name);
2017-11-11 04:33:51 +00:00
if (isPlainObject(element)) {
return new component({data: element});
}
2017-11-11 04:33:51 +00:00
if (component.options.functional) {
return new component({data: [].concat( argsArray )});
}
2017-11-11 04:33:51 +00:00
return element && element.nodeType ? init(element) : $$(element).map(init)[0];
2017-11-11 04:33:51 +00:00
function init(element) {
2017-11-11 04:33:51 +00:00
var instance = UIkit.getComponent(element, name);
2017-11-11 04:33:51 +00:00
if (instance) {
2019-04-22 13:31:39 +00:00
if (!data) {
return instance;
} else {
instance.$destroy();
}
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return new component({el: element, data: data});
2017-11-11 04:33:51 +00:00
}
};
2017-11-11 04:33:51 +00:00
var opt = isPlainObject(options) ? assign({}, options) : options.options;
2017-11-11 04:33:51 +00:00
opt.name = name;
2017-11-11 04:33:51 +00:00
if (opt.install) {
opt.install(UIkit, opt, name);
2017-11-11 04:33:51 +00:00
}
if (UIkit._initialized && !opt.functional) {
var id = hyphenate(name);
fastdom.read(function () { return UIkit[name](("[uk-" + id + "],[data-uk-" + id + "]")); });
2017-11-11 04:33:51 +00:00
}
return components[name] = isPlainObject(options) ? opt : options;
};
2017-11-11 04:33:51 +00:00
UIkit.getComponents = function (element) { return element && element[DATA] || {}; };
UIkit.getComponent = function (element, name) { return UIkit.getComponents(element)[name]; };
2017-11-11 04:33:51 +00:00
UIkit.connect = function (node) {
2017-11-11 04:33:51 +00:00
if (node[DATA]) {
for (var name in node[DATA]) {
node[DATA][name]._callConnected();
}
2017-11-11 04:33:51 +00:00
}
for (var i = 0; i < node.attributes.length; i++) {
2017-11-11 04:33:51 +00:00
var name$1 = getComponentName(node.attributes[i].name);
2017-11-11 04:33:51 +00:00
if (name$1 && name$1 in components) {
UIkit[name$1](node);
}
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
};
2017-11-11 04:33:51 +00:00
UIkit.disconnect = function (node) {
for (var name in node[DATA]) {
node[DATA][name]._callDisconnected();
}
};
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
function getComponentName(attribute) {
return startsWith(attribute, 'uk-') || startsWith(attribute, 'data-uk-')
? camelize(attribute.replace('data-uk-', '').replace('uk-', ''))
: false;
}
2017-11-11 04:33:51 +00:00
function boot (UIkit) {
2017-11-11 04:33:51 +00:00
var connect = UIkit.connect;
var disconnect = UIkit.disconnect;
2017-11-11 04:33:51 +00:00
if (!('MutationObserver' in window)) {
2017-11-11 04:33:51 +00:00
return;
}
if (document.body) {
2017-11-11 04:33:51 +00:00
init();
2017-11-11 04:33:51 +00:00
} else {
2017-11-11 04:33:51 +00:00
(new MutationObserver(function () {
2017-11-11 04:33:51 +00:00
if (document.body) {
this.disconnect();
init();
}
2017-11-11 04:33:51 +00:00
})).observe(document, {childList: true, subtree: true});
2017-11-11 04:33:51 +00:00
}
function init() {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
apply(document.body, connect);
2017-11-11 04:33:51 +00:00
fastdom.flush();
2017-11-11 04:33:51 +00:00
(new MutationObserver(function (mutations) { return mutations.forEach(applyMutation); })).observe(document, {
childList: true,
subtree: true,
characterData: true,
attributes: true
});
2017-11-11 04:33:51 +00:00
UIkit._initialized = true;
2017-11-11 04:33:51 +00:00
}
function applyMutation(mutation) {
2017-11-11 04:33:51 +00:00
var target = mutation.target;
var type = mutation.type;
2017-11-11 04:33:51 +00:00
var update = type !== 'attributes'
? applyChildList(mutation)
: applyAttribute(mutation);
2017-11-11 04:33:51 +00:00
update && UIkit.update(target);
2017-11-11 04:33:51 +00:00
}
function applyAttribute(ref) {
var target = ref.target;
var attributeName = ref.attributeName;
2017-11-11 04:33:51 +00:00
if (attributeName === 'href') {
return true;
}
2017-11-11 04:33:51 +00:00
var name = getComponentName(attributeName);
2017-11-11 04:33:51 +00:00
if (!name || !(name in UIkit)) {
return;
}
2017-11-11 04:33:51 +00:00
if (hasAttr(target, attributeName)) {
UIkit[name](target);
return true;
2017-11-11 04:33:51 +00:00
}
var component = UIkit.getComponent(target, name);
2017-11-11 04:33:51 +00:00
if (component) {
component.$destroy();
return true;
}
2017-11-11 04:33:51 +00:00
}
function applyChildList(ref) {
var addedNodes = ref.addedNodes;
var removedNodes = ref.removedNodes;
2017-11-11 04:33:51 +00:00
for (var i = 0; i < addedNodes.length; i++) {
2019-04-22 13:31:39 +00:00
apply(addedNodes[i], connect);
}
2017-11-11 04:33:51 +00:00
for (var i$1 = 0; i$1 < removedNodes.length; i$1++) {
2019-04-22 13:31:39 +00:00
apply(removedNodes[i$1], disconnect);
}
2017-11-11 04:33:51 +00:00
return true;
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
function apply(node, fn) {
2017-11-11 04:33:51 +00:00
if (node.nodeType !== 1 || hasAttr(node, 'uk-no-boot')) {
return;
}
2017-11-11 04:33:51 +00:00
fn(node);
node = node.firstElementChild;
while (node) {
var next = node.nextElementSibling;
2019-04-22 13:31:39 +00:00
apply(node, fn);
node = next;
2017-11-11 04:33:51 +00:00
}
}
}
function globalAPI (UIkit) {
2017-11-11 04:33:51 +00:00
var DATA = UIkit.data;
2017-11-11 04:33:51 +00:00
UIkit.use = function (plugin) {
2017-11-11 04:33:51 +00:00
if (plugin.installed) {
return;
}
2017-11-11 04:33:51 +00:00
plugin.call(null, this);
plugin.installed = true;
2017-11-11 04:33:51 +00:00
return this;
};
2017-11-11 04:33:51 +00:00
UIkit.mixin = function (mixin, component) {
component = (isString(component) ? UIkit.component(component) : component) || this;
component.options = mergeOptions(component.options, mixin);
};
2017-11-11 04:33:51 +00:00
UIkit.extend = function (options) {
2017-11-11 04:33:51 +00:00
options = options || {};
2017-11-11 04:33:51 +00:00
var Super = this;
2019-04-22 13:31:39 +00:00
var Sub = function UIkitComponent(options) {
this._init(options);
};
2017-11-11 04:33:51 +00:00
Sub.prototype = Object.create(Super.prototype);
Sub.prototype.constructor = Sub;
Sub.options = mergeOptions(Super.options, options);
2017-11-11 04:33:51 +00:00
Sub.super = Super;
Sub.extend = Super.extend;
2017-11-11 04:33:51 +00:00
return Sub;
};
2017-11-11 04:33:51 +00:00
UIkit.update = function (element, e) {
2017-11-11 04:33:51 +00:00
element = element ? toNode(element) : document.body;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
path(element, function (element) { return update(element[DATA], e); });
apply(element, function (element) { return update(element[DATA], e); });
2017-11-11 04:33:51 +00:00
};
2017-11-11 04:33:51 +00:00
var container;
Object.defineProperty(UIkit, 'container', {
2017-11-11 04:33:51 +00:00
get: function() {
return container || document.body;
},
2017-11-11 04:33:51 +00:00
set: function(element) {
container = $(element);
}
2017-11-11 04:33:51 +00:00
});
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function update(data, e) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (!data) {
return;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
for (var name in data) {
if (data[name]._connected) {
data[name]._callUpdate(e);
}
}
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
function path(node, fn) {
if (node && node !== document.body && node.parentNode) {
path(node.parentNode, fn);
fn(node.parentNode);
}
}
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
function hooksAPI (UIkit) {
2017-11-11 04:33:51 +00:00
UIkit.prototype._callHook = function (hook) {
var this$1 = this;
2017-11-11 04:33:51 +00:00
var handlers = this.$options[hook];
2017-11-11 04:33:51 +00:00
if (handlers) {
handlers.forEach(function (handler) { return handler.call(this$1); });
2017-11-11 04:33:51 +00:00
}
};
2017-11-11 04:33:51 +00:00
UIkit.prototype._callConnected = function () {
2017-11-11 04:33:51 +00:00
if (this._connected) {
return;
2017-11-11 04:33:51 +00:00
}
this._data = {};
2019-04-22 13:31:39 +00:00
this._computeds = {};
this._initProps();
2017-11-11 04:33:51 +00:00
this._callHook('beforeConnect');
this._connected = true;
2017-11-11 04:33:51 +00:00
this._initEvents();
this._initObserver();
2017-11-11 04:33:51 +00:00
this._callHook('connected');
this._callUpdate();
};
UIkit.prototype._callDisconnected = function () {
2017-11-11 04:33:51 +00:00
if (!this._connected) {
return;
2017-11-11 04:33:51 +00:00
}
this._callHook('beforeDisconnect');
2017-11-11 04:33:51 +00:00
if (this._observer) {
this._observer.disconnect();
this._observer = null;
}
2017-11-11 04:33:51 +00:00
this._unbindEvents();
this._callHook('disconnected');
2017-11-11 04:33:51 +00:00
this._connected = false;
2017-11-11 04:33:51 +00:00
};
2017-11-11 04:33:51 +00:00
UIkit.prototype._callUpdate = function (e) {
var this$1 = this;
2019-04-22 13:31:39 +00:00
if ( e === void 0 ) e = 'update';
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var type = e.type || e;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (includes(['update', 'resize'], type)) {
this._callWatches();
}
2017-11-11 04:33:51 +00:00
var updates = this.$options.update;
var ref = this._frames;
var reads = ref.reads;
var writes = ref.writes;
2017-11-11 04:33:51 +00:00
if (!updates) {
return;
}
2017-11-11 04:33:51 +00:00
updates.forEach(function (ref, i) {
var read = ref.read;
var write = ref.write;
var events = ref.events;
2017-11-11 04:33:51 +00:00
if (type !== 'update' && !includes(events, type)) {
return;
}
2017-11-11 04:33:51 +00:00
if (read && !includes(fastdom.reads, reads[i])) {
reads[i] = fastdom.read(function () {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var result = this$1._connected && read.call(this$1, this$1._data, type);
2017-11-11 04:33:51 +00:00
if (result === false && write) {
fastdom.clear(writes[i]);
} else if (isPlainObject(result)) {
assign(this$1._data, result);
}
});
}
2017-11-11 04:33:51 +00:00
if (write && !includes(fastdom.writes, writes[i])) {
2019-04-22 13:31:39 +00:00
writes[i] = fastdom.write(function () { return this$1._connected && write.call(this$1, this$1._data, type); });
}
2017-11-11 04:33:51 +00:00
});
2017-11-11 04:33:51 +00:00
};
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
function stateAPI (UIkit) {
2017-11-11 04:33:51 +00:00
var uid = 0;
2017-11-11 04:33:51 +00:00
UIkit.prototype._init = function (options) {
2017-11-11 04:33:51 +00:00
options = options || {};
options.data = normalizeData(options, this.constructor.options);
2017-11-11 04:33:51 +00:00
this.$options = mergeOptions(this.constructor.options, options, this);
this.$el = null;
this.$props = {};
2017-11-11 04:33:51 +00:00
this._frames = {reads: {}, writes: {}};
this._events = [];
2017-11-11 04:33:51 +00:00
this._uid = uid++;
this._initData();
this._initMethods();
this._initComputeds();
this._callHook('created');
2017-11-11 04:33:51 +00:00
if (options.el) {
this.$mount(options.el);
}
};
2017-11-11 04:33:51 +00:00
UIkit.prototype._initData = function () {
2017-11-11 04:33:51 +00:00
var ref = this.$options;
2019-04-22 13:31:39 +00:00
var data = ref.data; if ( data === void 0 ) data = {};
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
for (var key in data) {
this.$props[key] = this[key] = data[key];
}
};
2017-11-11 04:33:51 +00:00
UIkit.prototype._initMethods = function () {
2017-11-11 04:33:51 +00:00
var ref = this.$options;
var methods = ref.methods;
2017-11-11 04:33:51 +00:00
if (methods) {
for (var key in methods) {
2019-04-22 13:31:39 +00:00
this[key] = bind(methods[key], this);
}
}
};
2017-11-11 04:33:51 +00:00
UIkit.prototype._initComputeds = function () {
2017-11-11 04:33:51 +00:00
var ref = this.$options;
var computed = ref.computed;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
this._computeds = {};
2017-11-11 04:33:51 +00:00
if (computed) {
for (var key in computed) {
2019-04-22 13:31:39 +00:00
registerComputed(this, key, computed[key]);
2017-11-11 04:33:51 +00:00
}
}
};
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
UIkit.prototype._callWatches = function () {
var ref = this;
var computed = ref.$options.computed;
var _computeds = ref._computeds;
for (var key in _computeds) {
var value = _computeds[key];
delete _computeds[key];
if (computed[key].watch && !isEqual(value, this[key])) {
computed[key].watch.call(this, this[key], value);
}
}
};
2017-11-11 04:33:51 +00:00
UIkit.prototype._initProps = function (props) {
2017-11-11 04:33:51 +00:00
var key;
2017-11-11 04:33:51 +00:00
props = props || getProps(this.$options, this.$name);
2017-11-11 04:33:51 +00:00
for (key in props) {
if (!isUndefined(props[key])) {
2019-04-22 13:31:39 +00:00
this.$props[key] = props[key];
}
}
2017-11-11 04:33:51 +00:00
var exclude = [this.$options.computed, this.$options.methods];
2019-04-22 13:31:39 +00:00
for (key in this.$props) {
if (key in props && notIn(exclude, key)) {
2019-04-22 13:31:39 +00:00
this[key] = this.$props[key];
}
2017-11-11 04:33:51 +00:00
}
};
2017-11-11 04:33:51 +00:00
UIkit.prototype._initEvents = function () {
var this$1 = this;
2017-11-11 04:33:51 +00:00
var ref = this.$options;
var events = ref.events;
2017-11-11 04:33:51 +00:00
if (events) {
2017-11-11 04:33:51 +00:00
events.forEach(function (event) {
2017-11-11 04:33:51 +00:00
if (!hasOwn(event, 'handler')) {
for (var key in event) {
registerEvent(this$1, event[key], key);
}
} else {
registerEvent(this$1, event);
}
2017-11-11 04:33:51 +00:00
});
}
};
2017-11-11 04:33:51 +00:00
UIkit.prototype._unbindEvents = function () {
this._events.forEach(function (unbind) { return unbind(); });
this._events = [];
};
2017-11-11 04:33:51 +00:00
UIkit.prototype._initObserver = function () {
2017-11-11 04:33:51 +00:00
var this$1 = this;
var ref = this.$options;
var attrs = ref.attrs;
var props = ref.props;
var el = ref.el;
if (this._observer || !props || attrs === false) {
return;
2017-11-11 04:33:51 +00:00
}
attrs = isArray(attrs) ? attrs : Object.keys(props);
2017-11-11 04:33:51 +00:00
this._observer = new MutationObserver(function () {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var data = getProps(this$1.$options, this$1.$name);
if (attrs.some(function (key) { return !isUndefined(data[key]) && data[key] !== this$1.$props[key]; })) {
this$1.$reset();
}
2017-11-11 04:33:51 +00:00
});
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var filter = attrs.map(function (key) { return hyphenate(key); }).concat(this.$name);
2017-11-11 04:33:51 +00:00
this._observer.observe(el, {
attributes: true,
2019-04-22 13:31:39 +00:00
attributeFilter: filter.concat(filter.map(function (key) { return ("data-" + key); }))
});
};
2017-11-11 04:33:51 +00:00
function getProps(opts, name) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var data$1 = {};
var args = opts.args; if ( args === void 0 ) args = [];
var props = opts.props; if ( props === void 0 ) props = {};
var el = opts.el;
2017-11-11 04:33:51 +00:00
if (!props) {
2019-04-22 13:31:39 +00:00
return data$1;
2017-11-11 04:33:51 +00:00
}
for (var key in props) {
var prop = hyphenate(key);
var value = data(el, prop);
2017-11-11 04:33:51 +00:00
if (!isUndefined(value)) {
2017-11-11 04:33:51 +00:00
value = props[key] === Boolean && value === ''
? true
: coerce(props[key], value);
2017-11-11 04:33:51 +00:00
if (prop === 'target' && (!value || startsWith(value, '_'))) {
continue;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
data$1[key] = value;
}
}
2017-11-11 04:33:51 +00:00
var options = parseOptions(data(el, name), args);
2017-11-11 04:33:51 +00:00
for (var key$1 in options) {
var prop$1 = camelize(key$1);
if (props[prop$1] !== undefined) {
2019-04-22 13:31:39 +00:00
data$1[prop$1] = coerce(props[prop$1], options[key$1]);
}
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return data$1;
}
2017-11-11 04:33:51 +00:00
function registerComputed(component, key, cb) {
Object.defineProperty(component, key, {
2017-11-11 04:33:51 +00:00
enumerable: true,
2017-11-11 04:33:51 +00:00
get: function() {
2017-11-11 04:33:51 +00:00
var _computeds = component._computeds;
var $props = component.$props;
var $el = component.$el;
2017-11-11 04:33:51 +00:00
if (!hasOwn(_computeds, key)) {
2019-04-22 13:31:39 +00:00
_computeds[key] = (cb.get || cb).call(component, $props, $el);
}
2017-11-11 04:33:51 +00:00
return _computeds[key];
},
2017-11-11 04:33:51 +00:00
set: function(value) {
2019-04-22 13:31:39 +00:00
var _computeds = component._computeds;
_computeds[key] = cb.set ? cb.set.call(component, value) : value;
if (isUndefined(_computeds[key])) {
delete _computeds[key];
}
}
2017-11-11 04:33:51 +00:00
});
}
2017-11-11 04:33:51 +00:00
function registerEvent(component, event, key) {
2017-11-11 04:33:51 +00:00
if (!isPlainObject(event)) {
event = ({name: key, handler: event});
}
2017-11-11 04:33:51 +00:00
var name = event.name;
var el = event.el;
var handler = event.handler;
var capture = event.capture;
var passive = event.passive;
var delegate = event.delegate;
2019-04-22 13:31:39 +00:00
var filter = event.filter;
var self = event.self;
el = isFunction(el)
? el.call(component)
: el || component.$el;
if (isArray(el)) {
el.forEach(function (el) { return registerEvent(component, assign({}, event, {el: el}), key); });
return;
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
if (!el || filter && !filter.call(component)) {
return;
}
2017-11-11 04:33:51 +00:00
handler = detail(isString(handler) ? component[handler] : bind(handler, component));
if (self) {
handler = selfFilter(handler);
}
2017-11-11 04:33:51 +00:00
component._events.push(
on(
el,
name,
!delegate
? null
: isString(delegate)
? delegate
: delegate.call(component),
handler,
isBoolean(passive)
? {passive: passive, capture: capture}
: capture
)
);
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
function selfFilter(handler) {
return function selfHandler(e) {
if (e.target === e.currentTarget || e.target === e.current) {
return handler.call(null, e);
2017-11-11 04:33:51 +00:00
}
};
}
2017-11-11 04:33:51 +00:00
function notIn(options, key) {
return options.every(function (arr) { return !arr || !hasOwn(arr, key); });
}
2017-11-11 04:33:51 +00:00
function detail(listener) {
return function (e) { return isArray(e.detail) ? listener.apply(void 0, [e].concat(e.detail)) : listener(e); };
}
2017-11-11 04:33:51 +00:00
function coerce(type, value) {
2017-11-11 04:33:51 +00:00
if (type === Boolean) {
return toBoolean(value);
} else if (type === Number) {
return toNumber(value);
} else if (type === 'list') {
return toList(value);
}
2017-11-11 04:33:51 +00:00
return type ? type(value) : value;
}
2017-11-11 04:33:51 +00:00
function normalizeData(ref, ref$1) {
2019-04-22 13:31:39 +00:00
var data = ref.data;
var el = ref.el;
var args = ref$1.args;
var props = ref$1.props; if ( props === void 0 ) props = {};
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
data = isArray(data)
? !isEmpty(args)
? data.slice(0, args.length).reduce(function (data, value, index) {
if (isPlainObject(value)) {
2019-04-22 13:31:39 +00:00
assign(data, value);
} else {
2019-04-22 13:31:39 +00:00
data[args[index]] = value;
}
2019-04-22 13:31:39 +00:00
return data;
}, {})
: undefined
2019-04-22 13:31:39 +00:00
: data;
2019-04-22 13:31:39 +00:00
if (data) {
for (var key in data) {
if (isUndefined(data[key])) {
delete data[key];
} else {
2019-04-22 13:31:39 +00:00
data[key] = props[key] ? coerce(props[key], data[key], el) : data[key];
}
}
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return data;
}
}
2017-11-11 04:33:51 +00:00
function instanceAPI (UIkit) {
2017-11-11 04:33:51 +00:00
var DATA = UIkit.data;
2017-11-11 04:33:51 +00:00
UIkit.prototype.$mount = function (el) {
2017-11-11 04:33:51 +00:00
var ref = this.$options;
var name = ref.name;
2017-11-11 04:33:51 +00:00
if (!el[DATA]) {
el[DATA] = {};
}
2017-11-11 04:33:51 +00:00
if (el[DATA][name]) {
return;
}
2017-11-11 04:33:51 +00:00
el[DATA][name] = this;
2017-11-11 04:33:51 +00:00
this.$el = this.$options.el = this.$options.el || el;
2017-11-11 04:33:51 +00:00
if (within(el, document)) {
this._callConnected();
2017-11-11 04:33:51 +00:00
}
};
2017-11-11 04:33:51 +00:00
UIkit.prototype.$emit = function (e) {
this._callUpdate(e);
};
2017-11-11 04:33:51 +00:00
UIkit.prototype.$reset = function () {
this._callDisconnected();
this._callConnected();
};
2017-11-11 04:33:51 +00:00
UIkit.prototype.$destroy = function (removeEl) {
if ( removeEl === void 0 ) removeEl = false;
2017-11-11 04:33:51 +00:00
var ref = this.$options;
var el = ref.el;
var name = ref.name;
2017-11-11 04:33:51 +00:00
if (el) {
this._callDisconnected();
2017-11-11 04:33:51 +00:00
}
this._callHook('destroy');
if (!el || !el[DATA]) {
return;
2017-11-11 04:33:51 +00:00
}
delete el[DATA][name];
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (!isEmpty(el[DATA])) {
delete el[DATA];
}
2017-11-11 04:33:51 +00:00
if (removeEl) {
remove(this.$el);
2017-11-11 04:33:51 +00:00
}
};
2019-04-22 13:31:39 +00:00
UIkit.prototype.$create = function (component, element, data) {
return UIkit[component](element, data);
};
2017-11-11 04:33:51 +00:00
UIkit.prototype.$update = UIkit.update;
UIkit.prototype.$getComponent = UIkit.getComponent;
2017-11-11 04:33:51 +00:00
var names = {};
Object.defineProperties(UIkit.prototype, {
2017-11-11 04:33:51 +00:00
$container: Object.getOwnPropertyDescriptor(UIkit, 'container'),
2017-11-11 04:33:51 +00:00
$name: {
2017-11-11 04:33:51 +00:00
get: function() {
var ref = this.$options;
var name = ref.name;
if (!names[name]) {
names[name] = UIkit.prefix + hyphenate(name);
}
return names[name];
}
2017-11-11 04:33:51 +00:00
}
});
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
var UIkit = function (options) {
this._init(options);
};
2017-11-11 04:33:51 +00:00
UIkit.util = util;
UIkit.data = '__uikit__';
UIkit.prefix = 'uk-';
UIkit.options = {};
2017-11-11 04:33:51 +00:00
globalAPI(UIkit);
hooksAPI(UIkit);
stateAPI(UIkit);
componentAPI(UIkit);
instanceAPI(UIkit);
2017-11-11 04:33:51 +00:00
var Class = {
2017-11-11 04:33:51 +00:00
connected: function() {
2019-04-22 13:31:39 +00:00
!hasClass(this.$el, this.$name) && addClass(this.$el, this.$name);
}
2017-11-11 04:33:51 +00:00
};
2017-11-11 04:33:51 +00:00
var Togglable = {
2017-11-11 04:33:51 +00:00
props: {
cls: Boolean,
animation: 'list',
duration: Number,
origin: String,
transition: String,
queued: Boolean
},
2017-11-11 04:33:51 +00:00
data: {
cls: false,
animation: [false],
duration: 200,
origin: false,
transition: 'linear',
queued: false,
2017-11-11 04:33:51 +00:00
initProps: {
overflow: '',
height: '',
paddingTop: '',
paddingBottom: '',
marginTop: '',
marginBottom: ''
},
hideProps: {
overflow: 'hidden',
height: 0,
paddingTop: 0,
paddingBottom: 0,
marginTop: 0,
marginBottom: 0
2017-11-11 04:33:51 +00:00
}
},
2017-11-11 04:33:51 +00:00
computed: {
2017-11-11 04:33:51 +00:00
hasAnimation: function(ref) {
var animation = ref.animation;
2017-11-11 04:33:51 +00:00
return !!animation[0];
},
2017-11-11 04:33:51 +00:00
hasTransition: function(ref) {
var animation = ref.animation;
2017-11-11 04:33:51 +00:00
return this.hasAnimation && animation[0] === true;
}
2017-11-11 04:33:51 +00:00
},
methods: {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
toggleElement: function(targets, show, animate) {
var this$1 = this;
2017-11-11 04:33:51 +00:00
return new Promise(function (resolve) {
2017-11-11 04:33:51 +00:00
targets = toNodes(targets);
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var all = function (targets) { return Promise.all(targets.map(function (el) { return this$1._toggleElement(el, show, animate); })); };
var toggled = targets.filter(function (el) { return this$1.isToggled(el); });
var untoggled = targets.filter(function (el) { return !includes(toggled, el); });
2017-11-11 04:33:51 +00:00
var p;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (!this$1.queued || !isUndefined(animate) || !isUndefined(show) || !this$1.hasAnimation || targets.length < 2) {
2017-11-11 04:33:51 +00:00
p = all(untoggled.concat(toggled));
2017-11-11 04:33:51 +00:00
} else {
2017-11-11 04:33:51 +00:00
var body = document.body;
var scroll = body.scrollTop;
var el = toggled[0];
var inProgress = Animation.inProgress(el) && hasClass(el, 'uk-animation-leave')
|| Transition.inProgress(el) && el.style.height === '0px';
2017-11-11 04:33:51 +00:00
p = all(toggled);
2017-11-11 04:33:51 +00:00
if (!inProgress) {
p = p.then(function () {
var p = all(untoggled);
body.scrollTop = scroll;
return p;
});
}
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
p.then(resolve, noop);
2017-11-11 04:33:51 +00:00
});
},
2017-11-11 04:33:51 +00:00
toggleNow: function(targets, show) {
var this$1 = this;
2017-11-11 04:33:51 +00:00
return new Promise(function (resolve) { return Promise.all(toNodes(targets).map(function (el) { return this$1._toggleElement(el, show, false); })).then(resolve, noop); });
},
2017-11-11 04:33:51 +00:00
isToggled: function(el) {
var nodes = toNodes(el || this.$el);
return this.cls
? hasClass(nodes, this.cls.split(' ')[0])
: !hasAttr(nodes, 'hidden');
},
2017-11-11 04:33:51 +00:00
updateAria: function(el) {
if (this.cls === false) {
attr(el, 'aria-hidden', !this.isToggled(el));
}
},
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
_toggleElement: function(el, show, animate) {
var this$1 = this;
show = isBoolean(show)
? show
: Animation.inProgress(el)
? hasClass(el, 'uk-animation-leave')
: Transition.inProgress(el)
? el.style.height === '0px'
: !this.isToggled(el);
if (!trigger(el, ("before" + (show ? 'show' : 'hide')), [this])) {
return Promise.reject();
}
2019-04-22 13:31:39 +00:00
var promise = (
isFunction(animate)
? animate
: animate === false || !this.hasAnimation
? this._toggle
: this.hasTransition
? toggleHeight(this)
: toggleAnimation(this)
)(el, show);
trigger(el, show ? 'show' : 'hide', [this]);
2019-04-22 13:31:39 +00:00
var final = function () {
trigger(el, show ? 'shown' : 'hidden', [this$1]);
this$1.$update(el);
2019-04-22 13:31:39 +00:00
};
return promise ? promise.then(final) : Promise.resolve(final());
},
_toggle: function(el, toggled) {
if (!el) {
return;
}
2019-04-22 13:31:39 +00:00
toggled = Boolean(toggled);
var changed;
if (this.cls) {
2019-04-22 13:31:39 +00:00
changed = includes(this.cls, ' ') || toggled !== hasClass(el, this.cls);
changed && toggleClass(el, this.cls, includes(this.cls, ' ') ? undefined : toggled);
} else {
2019-04-22 13:31:39 +00:00
changed = toggled === hasAttr(el, 'hidden');
changed && attr(el, 'hidden', !toggled ? '' : null);
}
2019-04-22 13:31:39 +00:00
$$('[autofocus]', el).some(function (el) { return isVisible(el) ? el.focus() || true : el.blur(); });
this.updateAria(el);
changed && this.$update(el);
2019-04-22 13:31:39 +00:00
}
2019-04-22 13:31:39 +00:00
}
2019-04-22 13:31:39 +00:00
};
2019-04-22 13:31:39 +00:00
function toggleHeight(ref) {
var isToggled = ref.isToggled;
var duration = ref.duration;
var initProps = ref.initProps;
var hideProps = ref.hideProps;
var transition = ref.transition;
var _toggle = ref._toggle;
2019-04-22 13:31:39 +00:00
return function (el, show) {
2019-04-22 13:31:39 +00:00
var inProgress = Transition.inProgress(el);
var inner = el.hasChildNodes ? toFloat(css(el.firstElementChild, 'marginTop')) + toFloat(css(el.lastElementChild, 'marginBottom')) : 0;
var currentHeight = isVisible(el) ? height(el) + (inProgress ? 0 : inner) : 0;
2019-04-22 13:31:39 +00:00
Transition.cancel(el);
2019-04-22 13:31:39 +00:00
if (!isToggled(el)) {
_toggle(el, true);
}
2019-04-22 13:31:39 +00:00
height(el, '');
2019-04-22 13:31:39 +00:00
// Update child components first
fastdom.flush();
2019-04-22 13:31:39 +00:00
var endHeight = height(el) + (inProgress ? 0 : inner);
height(el, currentHeight);
2019-04-22 13:31:39 +00:00
return (show
? Transition.start(el, assign({}, initProps, {overflow: 'hidden', height: endHeight}), Math.round(duration * (1 - currentHeight / endHeight)), transition)
: Transition.start(el, hideProps, Math.round(duration * (currentHeight / endHeight)), transition).then(function () { return _toggle(el, false); })
).then(function () { return css(el, initProps); });
2019-04-22 13:31:39 +00:00
};
}
2019-04-22 13:31:39 +00:00
function toggleAnimation(ref) {
var animation = ref.animation;
var duration = ref.duration;
var origin = ref.origin;
var _toggle = ref._toggle;
2019-04-22 13:31:39 +00:00
return function (el, show) {
2019-04-22 13:31:39 +00:00
Animation.cancel(el);
2019-04-22 13:31:39 +00:00
if (show) {
_toggle(el, true);
return Animation.in(el, animation[0], duration, origin);
}
2019-04-22 13:31:39 +00:00
return Animation.out(el, animation[1] || animation[0], duration, origin).then(function () { return _toggle(el, false); });
};
}
var Accordion = {
mixins: [Class, Togglable],
props: {
targets: String,
active: null,
collapsible: Boolean,
multiple: Boolean,
toggle: String,
content: String,
2017-11-11 04:33:51 +00:00
transition: String
},
data: {
2017-11-11 04:33:51 +00:00
targets: '> *',
active: false,
animation: [true],
collapsible: true,
multiple: false,
clsOpen: 'uk-open',
toggle: '> .uk-accordion-title',
content: '> .uk-accordion-content',
transition: 'ease'
},
computed: {
items: function(ref, $el) {
2017-11-11 04:33:51 +00:00
var targets = ref.targets;
return $$(targets, $el);
}
},
events: [
{
name: 'click',
delegate: function() {
2017-11-11 04:33:51 +00:00
return ((this.targets) + " " + (this.$props.toggle));
},
handler: function(e) {
2017-11-11 04:33:51 +00:00
e.preventDefault();
this.toggle(index($$(((this.targets) + " " + (this.$props.toggle)), this.$el), e.current));
}
}
],
connected: function() {
if (this.active === false) {
return;
}
var active = this.items[Number(this.active)];
if (active && !hasClass(active, this.clsOpen)) {
2017-11-11 04:33:51 +00:00
this.toggle(active, false);
}
},
update: function() {
2017-11-11 04:33:51 +00:00
var this$1 = this;
2019-04-22 13:31:39 +00:00
this.items.forEach(function (el) { return this$1._toggle($(this$1.content, el), hasClass(el, this$1.clsOpen)); });
2017-11-11 04:33:51 +00:00
var active = !this.collapsible && !hasClass(this.items, this.clsOpen) && this.items[0];
if (active) {
this.toggle(active, false);
}
},
methods: {
2019-04-22 13:31:39 +00:00
toggle: function(item, animate) {
2017-11-11 04:33:51 +00:00
var this$1 = this;
2019-04-22 13:31:39 +00:00
var index = getIndex(item, this.items);
var active = filter(this.items, ("." + (this.clsOpen)));
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
item = this.items[index];
2017-11-11 04:33:51 +00:00
item && [item]
.concat(!this.multiple && !includes(active, item) && active || [])
.forEach(function (el) {
var isItem = el === item;
var state = isItem && !hasClass(el, this$1.clsOpen);
2017-11-11 04:33:51 +00:00
if (!state && isItem && !this$1.collapsible && active.length < 2) {
return;
}
toggleClass(el, this$1.clsOpen, state);
var content = el._wrapper ? el._wrapper.firstElementChild : $(this$1.content, el);
2017-11-11 04:33:51 +00:00
if (!el._wrapper) {
el._wrapper = wrapAll(content, '<div>');
attr(el._wrapper, 'hidden', state ? '' : null);
}
2019-04-22 13:31:39 +00:00
this$1._toggle(content, true);
this$1.toggleElement(el._wrapper, state, animate).then(function () {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (hasClass(el, this$1.clsOpen) !== state) {
return;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (!state) {
this$1._toggle(content, false);
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
el._wrapper = null;
unwrap(content);
2017-11-11 04:33:51 +00:00
});
});
}
}
};
2017-11-11 04:33:51 +00:00
var Alert = {
2017-11-11 04:33:51 +00:00
mixins: [Class, Togglable],
args: 'animation',
props: {
close: String
},
data: {
2017-11-11 04:33:51 +00:00
animation: [true],
selClose: '.uk-alert-close',
duration: 150,
hideProps: assign({opacity: 0}, Togglable.data.hideProps)
2017-11-11 04:33:51 +00:00
},
events: [
{
name: 'click',
delegate: function() {
2017-11-11 04:33:51 +00:00
return this.selClose;
},
handler: function(e) {
2017-11-11 04:33:51 +00:00
e.preventDefault();
this.close();
}
}
],
methods: {
close: function() {
2017-11-11 04:33:51 +00:00
var this$1 = this;
this.toggleElement(this.$el).then(function () { return this$1.$destroy(true); });
}
}
};
function Core (UIkit) {
ready(function () {
2019-04-22 13:31:39 +00:00
UIkit.update();
on(window, 'load resize', function () { return UIkit.update(null, 'resize'); });
on(document, 'loadedmetadata load', function (ref) {
var target = ref.target;
2019-04-22 13:31:39 +00:00
return UIkit.update(target, 'resize');
}, true);
2019-04-22 13:31:39 +00:00
// throttle `scroll` event (Safari triggers multiple `scroll` events per frame)
var pending;
on(window, 'scroll', function (e) {
if (pending) {
return;
}
pending = true;
fastdom.write(function () { return pending = false; });
var target = e.target;
UIkit.update(target.nodeType !== 1 ? document.body : target, e.type);
}, {passive: true, capture: true});
var started = 0;
on(document, 'animationstart', function (ref) {
var target = ref.target;
if ((css(target, 'animationName') || '').match(/^uk-.*(left|right)/)) {
started++;
css(document.body, 'overflowX', 'hidden');
setTimeout(function () {
if (!--started) {
css(document.body, 'overflowX', '');
}
}, toMs(css(target, 'animationDuration')) + 100);
}
}, true);
2019-04-22 13:31:39 +00:00
});
2019-04-22 13:31:39 +00:00
var off;
2019-04-22 13:31:39 +00:00
on(document, pointerDown, function (e) {
2019-04-22 13:31:39 +00:00
off && off();
if (!isTouch(e)) {
return;
}
2019-04-22 13:31:39 +00:00
var pos = getEventPos(e);
var target = 'tagName' in e.target ? e.target : e.target.parentNode;
off = once(document, pointerUp, function (e) {
var ref = getEventPos(e);
var x = ref.x;
var y = ref.y;
2019-04-22 13:31:39 +00:00
// swipe
if (target && x && Math.abs(pos.x - x) > 100 || y && Math.abs(pos.y - y) > 100) {
2019-04-22 13:31:39 +00:00
setTimeout(function () {
trigger(target, 'swipe');
trigger(target, ("swipe" + (swipeDirection(pos.x, pos.y, x, y))));
});
2019-04-22 13:31:39 +00:00
}
});
2019-04-22 13:31:39 +00:00
}, {passive: true});
2019-04-22 13:31:39 +00:00
}
2019-04-22 13:31:39 +00:00
function swipeDirection(x1, y1, x2, y2) {
return Math.abs(x1 - x2) >= Math.abs(y1 - y2)
? x1 - x2 > 0
? 'Left'
: 'Right'
: y1 - y2 > 0
? 'Up'
: 'Down';
}
var Video = {
args: 'autoplay',
props: {
automute: Boolean,
2019-04-22 13:31:39 +00:00
autoplay: Boolean
},
data: {
automute: false,
autoplay: true
},
computed: {
inView: function(ref) {
var autoplay = ref.autoplay;
return autoplay === 'inview';
}
},
connected: function() {
if (this.inView && !hasAttr(this.$el, 'preload')) {
this.$el.preload = 'none';
}
this.player = new Player(this.$el);
if (this.automute) {
this.player.mute();
}
},
2019-04-22 13:31:39 +00:00
update: {
2019-04-22 13:31:39 +00:00
read: function() {
2019-04-22 13:31:39 +00:00
return !this.player
? false
: {
visible: isVisible(this.$el) && css(this.$el, 'visibility') !== 'hidden',
inView: this.inView && isInView(this.$el)
};
},
2019-04-22 13:31:39 +00:00
write: function(ref) {
var visible = ref.visible;
var inView = ref.inView;
2019-04-22 13:31:39 +00:00
if (!visible || this.inView && !inView) {
this.player.pause();
} else if (this.autoplay === true || this.inView && inView) {
this.player.play();
}
2019-04-22 13:31:39 +00:00
},
2019-04-22 13:31:39 +00:00
events: ['resize', 'scroll']
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
}
2017-11-11 04:33:51 +00:00
};
2017-11-11 04:33:51 +00:00
var Cover = {
2017-11-11 04:33:51 +00:00
mixins: [Class, Video],
2017-11-11 04:33:51 +00:00
props: {
width: Number,
height: Number
},
data: {
2017-11-11 04:33:51 +00:00
automute: true
},
update: {
read: function() {
2017-11-11 04:33:51 +00:00
var el = this.$el;
if (!isVisible(el)) {
return false;
2017-11-11 04:33:51 +00:00
}
var ref = el.parentNode;
2019-04-22 13:31:39 +00:00
var height = ref.offsetHeight;
var width = ref.offsetWidth;
2019-04-22 13:31:39 +00:00
return {height: height, width: width};
},
write: function(ref) {
2019-04-22 13:31:39 +00:00
var height = ref.height;
var width = ref.width;
var el = this.$el;
var elWidth = this.width || el.naturalWidth || el.videoWidth || el.clientWidth;
var elHeight = this.height || el.naturalHeight || el.videoHeight || el.clientHeight;
if (!elWidth || !elHeight) {
return;
}
css(el, Dimensions.cover(
{
width: elWidth,
height: elHeight
},
{
2019-04-22 13:31:39 +00:00
width: width + (width % 2 ? 1 : 0),
height: height + (height % 2 ? 1 : 0)
}
));
2017-11-11 04:33:51 +00:00
},
2019-04-22 13:31:39 +00:00
events: ['resize']
2017-11-11 04:33:51 +00:00
}
};
var Position = {
props: {
pos: String,
offset: null,
flip: Boolean,
clsPos: String
2017-11-11 04:33:51 +00:00
},
data: {
pos: ("bottom-" + (!isRtl ? 'left' : 'right')),
flip: true,
offset: false,
clsPos: ''
},
2017-11-11 04:33:51 +00:00
computed: {
pos: function(ref) {
var pos = ref.pos;
return (pos + (!includes(pos, '-') ? '-center' : '')).split('-');
},
dir: function() {
return this.pos[0];
},
align: function() {
return this.pos[1];
2017-11-11 04:33:51 +00:00
}
},
2017-11-11 04:33:51 +00:00
methods: {
positionAt: function(element, target, boundary) {
removeClasses(element, ((this.clsPos) + "-(top|bottom|left|right)(-[a-z]+)?"));
css(element, {top: '', left: ''});
var node;
var ref = this;
2019-04-22 13:31:39 +00:00
var offset$1 = ref.offset;
var axis = this.getAxis();
2019-04-22 13:31:39 +00:00
if (!isNumeric(offset$1)) {
node = $(offset$1);
offset$1 = node
? offset(node)[axis === 'x' ? 'left' : 'top'] - offset(target)[axis === 'x' ? 'right' : 'bottom']
: 0;
2019-04-22 13:31:39 +00:00
}
2017-11-11 04:33:51 +00:00
var ref$1 = positionAt(
element,
target,
axis === 'x' ? ((flipPosition(this.dir)) + " " + (this.align)) : ((this.align) + " " + (flipPosition(this.dir))),
axis === 'x' ? ((this.dir) + " " + (this.align)) : ((this.align) + " " + (this.dir)),
2019-04-22 13:31:39 +00:00
axis === 'x' ? ("" + (this.dir === 'left' ? -offset$1 : offset$1)) : (" " + (this.dir === 'top' ? -offset$1 : offset$1)),
null,
this.flip,
boundary
).target;
var x = ref$1.x;
var y = ref$1.y;
this.dir = axis === 'x' ? x : y;
this.align = axis === 'x' ? y : x;
toggleClass(element, ((this.clsPos) + "-" + (this.dir) + "-" + (this.align)), this.offset === false);
},
getAxis: function() {
return this.dir === 'top' || this.dir === 'bottom' ? 'y' : 'x';
}
}
2017-11-11 04:33:51 +00:00
};
2017-11-11 04:33:51 +00:00
var active;
var Drop = {
2017-11-11 04:33:51 +00:00
mixins: [Position, Togglable],
args: 'pos',
props: {
mode: 'list',
toggle: Boolean,
boundary: Boolean,
2017-11-11 04:33:51 +00:00
boundaryAlign: Boolean,
delayShow: Number,
delayHide: Number,
clsDrop: String
},
data: {
2017-11-11 04:33:51 +00:00
mode: ['click', 'hover'],
toggle: '- *',
boundary: window,
2017-11-11 04:33:51 +00:00
boundaryAlign: false,
delayShow: 0,
delayHide: 800,
clsDrop: false,
hoverIdle: 200,
animation: ['uk-animation-fade'],
cls: 'uk-open'
},
computed: {
boundary: function(ref, $el) {
var boundary = ref.boundary;
return query(boundary, $el);
},
clsDrop: function(ref) {
var clsDrop = ref.clsDrop;
return clsDrop || ("uk-" + (this.$options.name));
},
clsPos: function() {
return this.clsDrop;
}
},
2019-04-22 13:31:39 +00:00
created: function() {
2017-11-11 04:33:51 +00:00
this.tracker = new MouseTracker();
},
connected: function() {
2017-11-11 04:33:51 +00:00
addClass(this.$el, this.clsDrop);
var ref = this.$props;
var toggle = ref.toggle;
this.toggle = toggle && this.$create('toggle', query(toggle, this.$el), {
target: this.$el,
mode: this.mode
});
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
!this.toggle && trigger(this.$el, 'updatearia');
2017-11-11 04:33:51 +00:00
},
events: [
2017-11-11 04:33:51 +00:00
{
name: 'click',
delegate: function() {
2017-11-11 04:33:51 +00:00
return ("." + (this.clsDrop) + "-close");
},
handler: function(e) {
2017-11-11 04:33:51 +00:00
e.preventDefault();
this.hide(false);
}
},
{
name: 'click',
delegate: function() {
2017-11-11 04:33:51 +00:00
return 'a[href^="#"]';
},
handler: function(e) {
2017-11-11 04:33:51 +00:00
if (e.defaultPrevented) {
return;
}
var id = e.target.hash;
if (!id) {
e.preventDefault();
}
if (!id || !within(id, this.$el)) {
this.hide(false);
}
}
},
{
name: 'beforescroll',
handler: function() {
2017-11-11 04:33:51 +00:00
this.hide(false);
}
},
{
name: 'toggle',
self: true,
handler: function(e, toggle) {
2017-11-11 04:33:51 +00:00
e.preventDefault();
if (this.isToggled()) {
this.hide(false);
} else {
this.show(toggle, false);
}
}
},
{
name: pointerEnter,
filter: function() {
2017-11-11 04:33:51 +00:00
return includes(this.mode, 'hover');
},
handler: function(e) {
2017-11-11 04:33:51 +00:00
if (isTouch(e)) {
return;
}
if (active
&& active !== this
&& active.toggle
&& includes(active.toggle.mode, 'hover')
&& !within(e.target, active.toggle.$el)
&& !pointInRect({x: e.pageX, y: e.pageY}, offset(active.$el))
) {
active.hide(false);
}
e.preventDefault();
this.show(this.toggle);
}
},
{
name: 'toggleshow',
handler: function(e, toggle) {
2017-11-11 04:33:51 +00:00
if (toggle && !includes(toggle.target, this.$el)) {
return;
}
e.preventDefault();
this.show(toggle || this.toggle);
}
},
{
name: ("togglehide " + pointerLeave),
handler: function(e, toggle) {
2017-11-11 04:33:51 +00:00
if (isTouch(e) || toggle && !includes(toggle.target, this.$el)) {
return;
}
e.preventDefault();
if (this.toggle && includes(this.toggle.mode, 'hover')) {
this.hide();
}
}
},
{
name: 'beforeshow',
self: true,
handler: function() {
2017-11-11 04:33:51 +00:00
this.clearTimers();
Animation.cancel(this.$el);
this.position();
2017-11-11 04:33:51 +00:00
}
},
{
name: 'show',
self: true,
handler: function() {
2017-11-11 04:33:51 +00:00
this.tracker.init();
2019-04-22 13:31:39 +00:00
trigger(this.$el, 'updatearia');
2017-11-11 04:33:51 +00:00
registerEvent();
}
},
{
name: 'beforehide',
self: true,
handler: function() {
2017-11-11 04:33:51 +00:00
this.clearTimers();
}
},
{
name: 'hide',
handler: function(ref) {
2017-11-11 04:33:51 +00:00
var target = ref.target;
if (this.$el !== target) {
active = active === null && within(target, this.$el) && this.isToggled() ? this : active;
return;
}
active = this.isActive() ? null : active;
2019-04-22 13:31:39 +00:00
trigger(this.$el, 'updatearia');
2017-11-11 04:33:51 +00:00
this.tracker.cancel();
}
2019-04-22 13:31:39 +00:00
},
{
name: 'updatearia',
self: true,
handler: function(e, toggle) {
e.preventDefault();
this.updateAria(this.$el);
if (toggle || this.toggle) {
attr((toggle || this.toggle).$el, 'aria-expanded', this.isToggled() ? 'true' : 'false');
toggleClass(this.toggle.$el, this.cls, this.isToggled());
}
}
2017-11-11 04:33:51 +00:00
}
],
update: {
write: function() {
2017-11-11 04:33:51 +00:00
if (this.isToggled() && !Animation.inProgress(this.$el)) {
this.position();
}
},
events: ['resize']
},
methods: {
show: function(toggle, delay) {
2017-11-11 04:33:51 +00:00
var this$1 = this;
if ( delay === void 0 ) delay = true;
var show = function () { return !this$1.isToggled() && this$1.toggleElement(this$1.$el, true); };
var tryShow = function () {
2017-11-11 04:33:51 +00:00
this$1.toggle = toggle || this$1.toggle;
2017-11-11 04:33:51 +00:00
this$1.clearTimers();
2017-11-11 04:33:51 +00:00
if (this$1.isActive()) {
return;
} else if (delay && active && active !== this$1 && active.isDelaying) {
this$1.showTimer = setTimeout(this$1.show, 10);
return;
} else if (this$1.isParentOf(active)) {
2017-11-11 04:33:51 +00:00
if (active.hideTimer) {
active.hide(false);
} else {
return;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
} else if (active && this$1.isChildOf(active)) {
active.clearTimers();
} else if (active && !this$1.isChildOf(active) && !this$1.isParentOf(active)) {
2017-11-11 04:33:51 +00:00
var prev;
while (active && active !== prev && !this$1.isChildOf(active)) {
prev = active;
active.hide(false);
2017-11-11 04:33:51 +00:00
}
}
2017-11-11 04:33:51 +00:00
if (delay && this$1.delayShow) {
this$1.showTimer = setTimeout(show, this$1.delayShow);
} else {
show();
}
active = this$1;
};
2017-11-11 04:33:51 +00:00
if (toggle && this.toggle && toggle.$el !== this.toggle.$el) {
2017-11-11 04:33:51 +00:00
once(this.$el, 'hide', tryShow);
this.hide(false);
} else {
tryShow();
}
},
hide: function(delay) {
2017-11-11 04:33:51 +00:00
var this$1 = this;
if ( delay === void 0 ) delay = true;
var hide = function () { return this$1.toggleNow(this$1.$el, false); };
this.clearTimers();
this.isDelaying = this.tracker.movesTo(this.$el);
if (delay && this.isDelaying) {
this.hideTimer = setTimeout(this.hide, this.hoverIdle);
} else if (delay && this.delayHide) {
this.hideTimer = setTimeout(hide, this.delayHide);
} else {
hide();
}
},
clearTimers: function() {
2017-11-11 04:33:51 +00:00
clearTimeout(this.showTimer);
clearTimeout(this.hideTimer);
this.showTimer = null;
this.hideTimer = null;
this.isDelaying = false;
},
isActive: function() {
2017-11-11 04:33:51 +00:00
return active === this;
},
isChildOf: function(drop) {
2017-11-11 04:33:51 +00:00
return drop && drop !== this && within(this.$el, drop.$el);
},
isParentOf: function(drop) {
2017-11-11 04:33:51 +00:00
return drop && drop !== this && within(drop.$el, this.$el);
},
position: function() {
2017-11-11 04:33:51 +00:00
removeClasses(this.$el, ((this.clsDrop) + "-(stack|boundary)"));
css(this.$el, {top: '', left: '', display: 'block'});
toggleClass(this.$el, ((this.clsDrop) + "-boundary"), this.boundaryAlign);
var boundary = offset(this.boundary);
var alignTo = this.boundaryAlign ? boundary : offset(this.toggle.$el);
2017-11-11 04:33:51 +00:00
if (this.align === 'justify') {
var prop = this.getAxis() === 'y' ? 'width' : 'height';
css(this.$el, prop, alignTo[prop]);
} else if (this.$el.offsetWidth > Math.max(boundary.right - alignTo.left, alignTo.right - boundary.left)) {
addClass(this.$el, ((this.clsDrop) + "-stack"));
}
this.positionAt(this.$el, this.boundaryAlign ? this.boundary : this.toggle.$el, this.boundary);
css(this.$el, 'display', '');
}
}
};
2017-11-11 04:33:51 +00:00
var registered;
function registerEvent() {
if (registered) {
return;
}
registered = true;
2019-04-22 13:31:39 +00:00
on(document, pointerUp, function (ref) {
2017-11-11 04:33:51 +00:00
var target = ref.target;
var defaultPrevented = ref.defaultPrevented;
var prev;
if (defaultPrevented) {
return;
}
while (active && active !== prev && !within(target, active.$el) && !(active.toggle && within(target, active.toggle.$el))) {
prev = active;
active.hide(false);
}
});
}
var Dropdown = {
2017-11-11 04:33:51 +00:00
extends: Drop
2017-11-11 04:33:51 +00:00
};
2017-11-11 04:33:51 +00:00
var FormCustom = {
2017-11-11 04:33:51 +00:00
mixins: [Class],
args: 'target',
props: {
target: Boolean
},
data: {
2017-11-11 04:33:51 +00:00
target: false
},
computed: {
input: function(_, $el) {
return $(selInput, $el);
2017-11-11 04:33:51 +00:00
},
state: function() {
2017-11-11 04:33:51 +00:00
return this.input.nextElementSibling;
},
target: function(ref, $el) {
2017-11-11 04:33:51 +00:00
var target = ref.target;
return target && (target === true
&& this.input.parentNode === $el
&& this.input.nextElementSibling
|| query(target, $el));
}
},
update: function() {
var ref = this;
var target = ref.target;
var input = ref.input;
if (!target) {
return;
}
var option;
var prop = isInput(target) ? 'value' : 'textContent';
var prev = target[prop];
var value = input.files && input.files[0]
? input.files[0].name
: matches(input, 'select') && (option = $$('option', input).filter(function (el) { return el.selected; })[0])
? option.textContent
: input.value;
if (prev !== value) {
target[prop] = value;
}
2017-11-11 04:33:51 +00:00
},
2019-04-22 13:31:39 +00:00
events: {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
change: function() {
this.$emit();
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
}
};
2017-11-11 04:33:51 +00:00
// Deprecated
var Gif = {
update: {
2019-04-22 13:31:39 +00:00
read: function(data) {
var inview = isInView(this.$el);
2019-04-22 13:31:39 +00:00
if (!inview || data.isInView === inview) {
return false;
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
data.isInView = inview;
},
2017-11-11 04:33:51 +00:00
write: function() {
this.$el.src = this.$el.src;
},
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
events: ['scroll', 'resize']
}
};
2017-11-11 04:33:51 +00:00
var Margin = {
2017-11-11 04:33:51 +00:00
props: {
margin: String,
firstColumn: Boolean
},
2017-11-11 04:33:51 +00:00
data: {
margin: 'uk-margin-small-top',
firstColumn: 'uk-first-column'
},
2017-11-11 04:33:51 +00:00
update: {
2019-04-22 13:31:39 +00:00
read: function(data) {
2017-11-11 04:33:51 +00:00
var items = this.$el.children;
var rows = [[]];
2017-11-11 04:33:51 +00:00
if (!items.length || !isVisible(this.$el)) {
2019-04-22 13:31:39 +00:00
return data.rows = rows;
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
data.rows = getRows(items);
data.stacks = !data.rows.some(function (row) { return row.length > 1; });
2017-11-11 04:33:51 +00:00
},
write: function(ref) {
var this$1 = this;
var rows = ref.rows;
rows.forEach(function (row, i) { return row.forEach(function (el, j) {
toggleClass(el, this$1.margin, i !== 0);
toggleClass(el, this$1.firstColumn, j === 0);
}); }
);
},
2019-04-22 13:31:39 +00:00
events: ['resize']
2017-11-11 04:33:51 +00:00
}
};
function getRows(items) {
var rows = [[]];
for (var i = 0; i < items.length; i++) {
var el = items[i];
var dim = getOffset(el);
if (!dim.height) {
continue;
}
for (var j = rows.length - 1; j >= 0; j--) {
var row = rows[j];
if (!row[0]) {
row.push(el);
break;
}
2019-04-22 13:31:39 +00:00
var leftDim = (void 0);
if (row[0].offsetParent === el.offsetParent) {
leftDim = getOffset(row[0]);
} else {
dim = getOffset(el, true);
leftDim = getOffset(row[0], true);
}
if (dim.top >= leftDim.bottom - 1) {
rows.push([el]);
break;
}
if (dim.bottom > leftDim.top) {
if (dim.left < leftDim.left && !isRtl) {
row.unshift(el);
break;
}
row.push(el);
break;
}
if (j === 0) {
rows.unshift([el]);
break;
}
}
2017-11-11 04:33:51 +00:00
}
return rows;
}
2019-04-22 13:31:39 +00:00
function getOffset(element, offset) {
var assign;
if ( offset === void 0 ) offset = false;
var offsetTop = element.offsetTop;
var offsetLeft = element.offsetLeft;
var offsetHeight = element.offsetHeight;
2019-04-22 13:31:39 +00:00
if (offset) {
(assign = offsetPosition(element), offsetTop = assign[0], offsetLeft = assign[1]);
}
return {
top: offsetTop,
left: offsetLeft,
height: offsetHeight,
bottom: offsetTop + offsetHeight
};
}
2017-11-11 04:33:51 +00:00
var Grid = {
2017-11-11 04:33:51 +00:00
extends: Margin,
2017-11-11 04:33:51 +00:00
mixins: [Class],
name: 'grid',
props: {
masonry: Boolean,
parallax: Number
},
data: {
2017-11-11 04:33:51 +00:00
margin: 'uk-grid-margin',
clsStack: 'uk-grid-stack',
masonry: false,
parallax: 0
2017-11-11 04:33:51 +00:00
},
computed: {
length: function(_, $el) {
return $el.children.length;
},
parallax: function(ref) {
var parallax = ref.parallax;
return parallax && this.length ? Math.abs(parallax) : '';
}
},
connected: function() {
this.masonry && addClass(this.$el, 'uk-flex-top uk-flex-wrap-top');
},
2017-11-11 04:33:51 +00:00
update: [
{
read: function(ref) {
var rows = ref.rows;
if (this.masonry || this.parallax) {
rows = rows.map(function (elements) { return sortBy(elements, 'offsetLeft'); });
2019-04-22 13:31:39 +00:00
if (isRtl) {
rows.map(function (row) { return row.reverse(); });
}
}
2019-04-22 13:31:39 +00:00
var transitionInProgress = rows.some(function (elements) { return elements.some(Transition.inProgress); });
var translates = false;
var elHeight = '';
if (this.masonry && this.length) {
2019-04-22 13:31:39 +00:00
var height = 0;
translates = rows.reduce(function (translates, row, i) {
2019-04-22 13:31:39 +00:00
translates[i] = row.map(function (_, j) { return i === 0 ? 0 : toFloat(translates[i - 1][j]) + (height - toFloat(rows[i - 1][j] && rows[i - 1][j].offsetHeight)); });
height = row.reduce(function (height, el) { return Math.max(height, el.offsetHeight); }, 0);
return translates;
}, []);
elHeight = maxColumnHeight(rows) + getMarginTop(this.$el, this.margin) * (rows.length - 1);
}
2019-04-22 13:31:39 +00:00
return {rows: rows, translates: translates, height: !transitionInProgress ? elHeight : false};
},
write: function(ref) {
var stacks = ref.stacks;
2019-04-22 13:31:39 +00:00
var height = ref.height;
toggleClass(this.$el, this.clsStack, stacks);
css(this.$el, 'paddingBottom', this.parallax);
2019-04-22 13:31:39 +00:00
height !== false && css(this.$el, 'height', height);
2017-11-11 04:33:51 +00:00
},
2019-04-22 13:31:39 +00:00
events: ['resize']
2017-11-11 04:33:51 +00:00
},
{
2017-11-11 04:33:51 +00:00
read: function(ref) {
2019-04-22 13:31:39 +00:00
var height$1 = ref.height;
return {
scrolled: this.parallax
2019-04-22 13:31:39 +00:00
? scrolledOver(this.$el, height$1 ? height$1 - height(this.$el) : 0) * this.parallax
: false
};
},
write: function(ref) {
var rows = ref.rows;
var scrolled = ref.scrolled;
var translates = ref.translates;
if (scrolled === false && !translates) {
return;
}
rows.forEach(function (row, i) { return row.forEach(function (el, j) { return css(el, 'transform', !scrolled && !translates ? '' : ("translateY(" + ((translates && -translates[i][j]) + (scrolled ? j % 2 ? scrolled : scrolled / 8 : 0)) + "px)")); }
); }
);
},
2019-04-22 13:31:39 +00:00
events: ['scroll', 'resize']
}
]
};
function getMarginTop(root, cls) {
2017-11-11 04:33:51 +00:00
var nodes = toNodes(root.children);
var ref = nodes.filter(function (el) { return hasClass(el, cls); });
var node = ref[0];
2017-11-11 04:33:51 +00:00
return toFloat(node
? css(node, 'marginTop')
: css(nodes[0], 'paddingLeft'));
}
2017-11-11 04:33:51 +00:00
function maxColumnHeight(rows) {
return Math.max.apply(Math, rows.reduce(function (sum, row) {
row.forEach(function (el, i) { return sum[i] = (sum[i] || 0) + el.offsetHeight; });
return sum;
}, []));
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
// IE 11 fix (min-height on a flex container won't apply to its flex items)
var FlexBug = isIE ? {
data: {
selMinHeight: false,
forceHeight: false
},
computed: {
elements: function(ref, $el) {
var selMinHeight = ref.selMinHeight;
return selMinHeight ? $$(selMinHeight, $el) : [$el];
}
},
update: [
{
read: function() {
css(this.elements, 'height', '');
},
order: -5,
events: ['resize']
},
{
write: function() {
var this$1 = this;
this.elements.forEach(function (el) {
var height = toFloat(css(el, 'minHeight'));
if (height && (this$1.forceHeight || Math.round(height + boxModelAdjust('height', el, 'content-box')) >= el.offsetHeight)) {
css(el, 'height', height);
}
});
},
order: 5,
events: ['resize']
}
]
} : {};
var HeightMatch = {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
mixins: [FlexBug],
2017-11-11 04:33:51 +00:00
args: 'target',
props: {
target: String,
row: Boolean
},
data: {
2017-11-11 04:33:51 +00:00
target: '> *',
2019-04-22 13:31:39 +00:00
row: true,
forceHeight: true
2017-11-11 04:33:51 +00:00
},
computed: {
elements: function(ref, $el) {
2017-11-11 04:33:51 +00:00
var target = ref.target;
return $$(target, $el);
}
},
update: {
read: function() {
return {
2019-04-22 13:31:39 +00:00
rows: (this.row ? getRows(this.elements) : [this.elements]).map(match)
};
2017-11-11 04:33:51 +00:00
},
write: function(ref) {
var rows = ref.rows;
rows.forEach(function (ref) {
2019-04-22 13:31:39 +00:00
var heights = ref.heights;
var elements = ref.elements;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return elements.forEach(function (el, i) { return css(el, 'minHeight', heights[i]); }
);
}
);
2017-11-11 04:33:51 +00:00
},
2019-04-22 13:31:39 +00:00
events: ['resize']
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
};
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function match(elements) {
var assign;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (elements.length < 2) {
return {heights: [''], elements: elements};
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var ref = getHeights(elements);
var heights = ref.heights;
var max = ref.max;
var hasMinHeight = elements.some(function (el) { return el.style.minHeight; });
var hasShrunk = elements.some(function (el, i) { return !el.style.minHeight && heights[i] < max; });
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (hasMinHeight && hasShrunk) {
css(elements, 'minHeight', '');
((assign = getHeights(elements), heights = assign.heights, max = assign.max));
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
heights = elements.map(function (el, i) { return heights[i] === max && toFloat(el.style.minHeight).toFixed(2) !== max.toFixed(2) ? '' : max; }
);
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return {heights: heights, elements: elements};
}
function getHeights(elements) {
var heights = elements.map(function (el) { return offset(el).height - boxModelAdjust('height', el, 'content-box'); });
var max = Math.max.apply(null, heights);
return {heights: heights, max: max};
}
2017-11-11 04:33:51 +00:00
var HeightViewport = {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
mixins: [FlexBug],
2017-11-11 04:33:51 +00:00
props: {
expand: Boolean,
offsetTop: Boolean,
offsetBottom: Boolean,
minHeight: Number
},
data: {
2017-11-11 04:33:51 +00:00
expand: false,
offsetTop: false,
offsetBottom: false,
minHeight: 0
},
update: {
2017-11-11 04:33:51 +00:00
read: function() {
2017-11-11 04:33:51 +00:00
var minHeight = '';
2019-04-22 13:31:39 +00:00
var box = boxModelAdjust('height', this.$el, 'content-box');
2017-11-11 04:33:51 +00:00
if (this.expand) {
2019-04-22 13:31:39 +00:00
minHeight = height(window) - (offsetHeight(document.documentElement) - offsetHeight(this.$el)) - box || '';
2017-11-11 04:33:51 +00:00
} else {
// on mobile devices (iOS and Android) window.innerHeight !== 100vh
minHeight = 'calc(100vh';
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (this.offsetTop) {
var ref = offset(this.$el);
var top = ref.top;
minHeight += top < height(window) / 2 ? (" - " + top + "px") : '';
2017-11-11 04:33:51 +00:00
}
if (this.offsetBottom === true) {
minHeight += " - " + (offsetHeight(this.$el.nextElementSibling)) + "px";
2017-11-11 04:33:51 +00:00
} else if (isNumeric(this.offsetBottom)) {
minHeight += " - " + (this.offsetBottom) + "vh";
2017-11-11 04:33:51 +00:00
} else if (this.offsetBottom && endsWith(this.offsetBottom, 'px')) {
minHeight += " - " + (toFloat(this.offsetBottom)) + "px";
2017-11-11 04:33:51 +00:00
} else if (isString(this.offsetBottom)) {
minHeight += " - " + (offsetHeight(query(this.offsetBottom, this.$el))) + "px";
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
minHeight += (box ? (" - " + box + "px") : '') + ")";
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
return {minHeight: minHeight};
},
write: function(ref) {
var minHeight = ref.minHeight;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
css(this.$el, {minHeight: minHeight});
2017-11-11 04:33:51 +00:00
if (this.minHeight && toFloat(css(this.$el, 'minHeight')) < this.minHeight) {
2017-11-11 04:33:51 +00:00
css(this.$el, 'minHeight', this.minHeight);
}
},
2019-04-22 13:31:39 +00:00
events: ['resize']
2017-11-11 04:33:51 +00:00
}
};
2017-11-11 04:33:51 +00:00
function offsetHeight(el) {
return el && el.offsetHeight || 0;
}
2019-04-22 13:31:39 +00:00
var Svg = {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
args: 'src',
2017-11-11 04:33:51 +00:00
props: {
2019-04-22 13:31:39 +00:00
id: Boolean,
icon: String,
src: String,
style: String,
width: Number,
height: Number,
ratio: Number,
2019-04-22 13:31:39 +00:00
'class': String,
strokeAnimation: Boolean,
attributes: 'list'
},
2017-11-11 04:33:51 +00:00
data: {
ratio: 1,
2019-04-22 13:31:39 +00:00
include: ['style', 'class'],
'class': '',
strokeAnimation: false
},
2017-11-11 04:33:51 +00:00
connected: function() {
var this$1 = this;
2019-04-22 13:31:39 +00:00
var assign;
2017-11-11 04:33:51 +00:00
this.class += ' uk-svg';
2017-11-11 04:33:51 +00:00
if (!this.icon && includes(this.src, '#')) {
2017-11-11 04:33:51 +00:00
var parts = this.src.split('#');
2017-11-11 04:33:51 +00:00
if (parts.length > 1) {
2019-04-22 13:31:39 +00:00
(assign = parts, this.src = assign[0], this.icon = assign[1]);
}
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
this.svg = this.getSvg().then(function (el) {
this$1.applyAttributes(el);
return this$1.svgEl = insertSVG(el, this$1.$el);
}, noop);
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
},
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
disconnected: function() {
var this$1 = this;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (isVoidElement(this.$el)) {
attr(this.$el, 'hidden', null);
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (this.svg) {
this.svg.then(function (svg) { return (!this$1._connected || svg !== this$1.svgEl) && remove(svg); }, noop);
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
this.svg = this.svgEl = null;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
},
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
update: {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
read: function() {
return !!(this.strokeAnimation && this.svgEl && isVisible(this.svgEl));
},
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
write: function() {
applyAnimation(this.svgEl);
},
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
type: ['resize']
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
},
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
methods: {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
getSvg: function() {
var this$1 = this;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return loadSVG(this.src).then(function (svg) { return parseSVG(svg, this$1.icon) || Promise.reject('SVG not found.'); }
);
},
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
applyAttributes: function(el) {
var this$1 = this;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
for (var prop in this.$options.props) {
if (this[prop] && includes(this.include, prop)) {
attr(el, prop, this[prop]);
}
2019-04-22 13:31:39 +00:00
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
for (var attribute in this.attributes) {
var ref = this.attributes[attribute].split(':', 2);
var prop$1 = ref[0];
var value = ref[1];
attr(el, prop$1, value);
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (!this.id) {
removeAttr(el, 'id');
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var props = ['width', 'height'];
var dimensions = [this.width, this.height];
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (!dimensions.some(function (val) { return val; })) {
dimensions = props.map(function (prop) { return attr(el, prop); });
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var viewBox = attr(el, 'viewBox');
if (viewBox && !dimensions.some(function (val) { return val; })) {
dimensions = viewBox.split(' ').slice(2);
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
dimensions.forEach(function (val, i) {
val = (val | 0) * this$1.ratio;
val && attr(el, props[i], val);
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (val && !dimensions[i ^ 1]) {
removeAttr(el, props[i ^ 1]);
}
});
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
attr(el, 'data-svg', this.icon || this.src);
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
};
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var svgs = {};
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function loadSVG(src) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (svgs[src]) {
return svgs[src];
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return svgs[src] = new Promise(function (resolve, reject) {
2019-04-22 13:31:39 +00:00
if (!src) {
reject();
return;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (startsWith(src, 'data:')) {
resolve(decodeURIComponent(src.split(',')[1]));
} else {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
ajax(src).then(
function (xhr) { return resolve(xhr.response); },
function () { return reject('SVG not found.'); }
);
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
});
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function parseSVG(svg, icon) {
2019-04-22 13:31:39 +00:00
if (icon && includes(svg, '<symbol')) {
svg = parseSymbols(svg, icon) || svg;
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
svg = $(svg.substr(svg.indexOf('<svg')));
return svg && svg.hasChildNodes() && svg;
}
2017-11-11 04:33:51 +00:00
var symbolRe = /<symbol(.*?id=(['"])(.*?)\2[^]*?<\/)symbol>/g;
var symbols = {};
2017-11-11 04:33:51 +00:00
function parseSymbols(svg, icon) {
2017-11-11 04:33:51 +00:00
if (!symbols[svg]) {
2017-11-11 04:33:51 +00:00
symbols[svg] = {};
2017-11-11 04:33:51 +00:00
var match;
while ((match = symbolRe.exec(svg))) {
symbols[svg][match[3]] = "<svg xmlns=\"http://www.w3.org/2000/svg\"" + (match[1]) + "svg>";
}
2017-11-11 04:33:51 +00:00
symbolRe.lastIndex = 0;
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
return symbols[svg][icon];
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function applyAnimation(el) {
var length = getMaxPathLength(el);
if (length) {
el.style.setProperty('--uk-animation-stroke', length);
}
}
function getMaxPathLength(el) {
return Math.ceil(Math.max.apply(Math, $$('[stroke]', el).map(function (stroke) { return stroke.getTotalLength && stroke.getTotalLength() || 0; }
).concat([0])));
}
function insertSVG(el, root) {
if (isVoidElement(root) || root.tagName === 'CANVAS') {
attr(root, 'hidden', true);
var next = root.nextElementSibling;
return equals(el, next)
? next
: after(root, el);
} else {
var last = root.lastElementChild;
return equals(el, last)
? last
: append(root, el);
}
}
function equals(el, other) {
return attr(el, 'data-svg') === attr(other, 'data-svg');
}
var closeIcon = "<svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" xmlns=\"http://www.w3.org/2000/svg\"><line fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" x1=\"1\" y1=\"1\" x2=\"13\" y2=\"13\"/><line fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" x1=\"13\" y1=\"1\" x2=\"1\" y2=\"13\"/></svg>";
2017-11-11 04:33:51 +00:00
var closeLarge = "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><line fill=\"none\" stroke=\"#000\" stroke-width=\"1.4\" x1=\"1\" y1=\"1\" x2=\"19\" y2=\"19\"/><line fill=\"none\" stroke=\"#000\" stroke-width=\"1.4\" x1=\"19\" y1=\"1\" x2=\"1\" y2=\"19\"/></svg>";
2017-11-11 04:33:51 +00:00
var marker = "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"9\" y=\"4\" width=\"1\" height=\"11\"/><rect x=\"4\" y=\"9\" width=\"11\" height=\"1\"/></svg>";
2017-11-11 04:33:51 +00:00
var navbarToggleIcon = "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><rect y=\"9\" width=\"20\" height=\"2\"/><rect y=\"3\" width=\"20\" height=\"2\"/><rect y=\"15\" width=\"20\" height=\"2\"/></svg>";
2017-11-11 04:33:51 +00:00
var overlayIcon = "<svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"19\" y=\"0\" width=\"1\" height=\"40\"/><rect x=\"0\" y=\"19\" width=\"40\" height=\"1\"/></svg>";
2017-11-11 04:33:51 +00:00
var paginationNext = "<svg width=\"7\" height=\"12\" viewBox=\"0 0 7 12\" xmlns=\"http://www.w3.org/2000/svg\"><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"1.2\" points=\"1 1 6 6 1 11\"/></svg>";
2017-11-11 04:33:51 +00:00
var paginationPrevious = "<svg width=\"7\" height=\"12\" viewBox=\"0 0 7 12\" xmlns=\"http://www.w3.org/2000/svg\"><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"1.2\" points=\"6 1 1 6 6 11\"/></svg>";
2017-11-11 04:33:51 +00:00
var searchIcon = "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><circle fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" cx=\"9\" cy=\"9\" r=\"7\"/><path fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" d=\"M14,14 L18,18 L14,14 Z\"/></svg>";
2017-11-11 04:33:51 +00:00
var searchLarge = "<svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" xmlns=\"http://www.w3.org/2000/svg\"><circle fill=\"none\" stroke=\"#000\" stroke-width=\"1.8\" cx=\"17.5\" cy=\"17.5\" r=\"16.5\"/><line fill=\"none\" stroke=\"#000\" stroke-width=\"1.8\" x1=\"38\" y1=\"39\" x2=\"29\" y2=\"30\"/></svg>";
2017-11-11 04:33:51 +00:00
var searchNavbar = "<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><circle fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" cx=\"10.5\" cy=\"10.5\" r=\"9.5\"/><line fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" x1=\"23\" y1=\"23\" x2=\"17\" y2=\"17\"/></svg>";
2017-11-11 04:33:51 +00:00
var slidenavNext = "<svg width=\"14px\" height=\"24px\" viewBox=\"0 0 14 24\" xmlns=\"http://www.w3.org/2000/svg\"><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"1.4\" points=\"1.225,23 12.775,12 1.225,1 \"/></svg>";
2017-11-11 04:33:51 +00:00
var slidenavNextLarge = "<svg width=\"25px\" height=\"40px\" viewBox=\"0 0 25 40\" xmlns=\"http://www.w3.org/2000/svg\"><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"2\" points=\"4.002,38.547 22.527,20.024 4,1.5 \"/></svg>";
2017-11-11 04:33:51 +00:00
var slidenavPrevious = "<svg width=\"14px\" height=\"24px\" viewBox=\"0 0 14 24\" xmlns=\"http://www.w3.org/2000/svg\"><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"1.4\" points=\"12.775,1 1.225,12 12.775,23 \"/></svg>";
2017-11-11 04:33:51 +00:00
var slidenavPreviousLarge = "<svg width=\"25px\" height=\"40px\" viewBox=\"0 0 25 40\" xmlns=\"http://www.w3.org/2000/svg\"><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"2\" points=\"20.527,1.5 2,20.024 20.525,38.547 \"/></svg>";
2017-11-11 04:33:51 +00:00
var spinner = "<svg width=\"30\" height=\"30\" viewBox=\"0 0 30 30\" xmlns=\"http://www.w3.org/2000/svg\"><circle fill=\"none\" stroke=\"#000\" cx=\"15\" cy=\"15\" r=\"14\"/></svg>";
2017-11-11 04:33:51 +00:00
var totop = "<svg width=\"18\" height=\"10\" viewBox=\"0 0 18 10\" xmlns=\"http://www.w3.org/2000/svg\"><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"1.2\" points=\"1 9 9 1 17 9 \"/></svg>";
2017-11-11 04:33:51 +00:00
var parsed = {};
var icons = {
spinner: spinner,
totop: totop,
marker: marker,
'close-icon': closeIcon,
'close-large': closeLarge,
'navbar-toggle-icon': navbarToggleIcon,
'overlay-icon': overlayIcon,
'pagination-next': paginationNext,
'pagination-previous': paginationPrevious,
'search-icon': searchIcon,
'search-large': searchLarge,
'search-navbar': searchNavbar,
'slidenav-next': slidenavNext,
'slidenav-next-large': slidenavNextLarge,
'slidenav-previous': slidenavPrevious,
'slidenav-previous-large': slidenavPreviousLarge
};
2017-11-11 04:33:51 +00:00
var Icon = {
2017-11-11 04:33:51 +00:00
install: install,
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
mixins: [Class, Svg],
2017-11-11 04:33:51 +00:00
args: 'icon',
2017-11-11 04:33:51 +00:00
props: ['icon'],
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
data: {include: []},
2017-11-11 04:33:51 +00:00
isIcon: true,
2017-11-11 04:33:51 +00:00
connected: function() {
addClass(this.$el, 'uk-icon');
2017-11-11 04:33:51 +00:00
},
methods: {
2017-11-11 04:33:51 +00:00
getSvg: function() {
2017-11-11 04:33:51 +00:00
var icon = getIcon(applyRtl(this.icon));
2017-11-11 04:33:51 +00:00
if (!icon) {
return Promise.reject('Icon not found.');
}
2017-11-11 04:33:51 +00:00
return Promise.resolve(icon);
}
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
};
2017-11-11 04:33:51 +00:00
var IconComponent = {
2017-11-11 04:33:51 +00:00
extends: Icon,
2017-11-11 04:33:51 +00:00
data: function (vm) { return ({
icon: hyphenate(vm.constructor.options.name)
}); }
2017-11-11 04:33:51 +00:00
};
2017-11-11 04:33:51 +00:00
var Slidenav = {
2017-11-11 04:33:51 +00:00
extends: IconComponent,
2017-11-11 04:33:51 +00:00
connected: function() {
addClass(this.$el, 'uk-slidenav');
2017-11-11 04:33:51 +00:00
},
computed: {
2017-11-11 04:33:51 +00:00
icon: function(ref, $el) {
var icon = ref.icon;
2017-11-11 04:33:51 +00:00
return hasClass($el, 'uk-slidenav-large')
? (icon + "-large")
: icon;
}
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
};
2017-11-11 04:33:51 +00:00
var Search = {
2017-11-11 04:33:51 +00:00
extends: IconComponent,
2017-11-11 04:33:51 +00:00
computed: {
2017-11-11 04:33:51 +00:00
icon: function(ref, $el) {
var icon = ref.icon;
2017-11-11 04:33:51 +00:00
return hasClass($el, 'uk-search-icon') && parents($el, '.uk-search-large').length
? 'search-large'
: parents($el, '.uk-search-navbar').length
? 'search-navbar'
: icon;
}
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
};
2017-11-11 04:33:51 +00:00
var Close = {
2017-11-11 04:33:51 +00:00
extends: IconComponent,
2017-11-11 04:33:51 +00:00
computed: {
2017-11-11 04:33:51 +00:00
icon: function() {
return ("close-" + (hasClass(this.$el, 'uk-close-large') ? 'large' : 'icon'));
}
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
};
2017-11-11 04:33:51 +00:00
var Spinner = {
2017-11-11 04:33:51 +00:00
extends: IconComponent,
2017-11-11 04:33:51 +00:00
connected: function() {
var this$1 = this;
2017-11-11 04:33:51 +00:00
this.svg.then(function (svg) { return this$1.ratio !== 1 && css($('circle', svg), 'strokeWidth', 1 / this$1.ratio); }, noop);
}
2017-11-11 04:33:51 +00:00
};
2017-11-11 04:33:51 +00:00
function install(UIkit) {
UIkit.icon.add = function (name, svg) {
var obj;
2017-11-11 04:33:51 +00:00
var added = isString(name) ? (( obj = {}, obj[name] = svg, obj )) : name;
each(added, function (svg, name) {
icons[name] = svg;
delete parsed[name];
});
2017-11-11 04:33:51 +00:00
if (UIkit._initialized) {
2019-04-22 13:31:39 +00:00
apply(document.body, function (el) { return each(UIkit.getComponents(el), function (cmp) {
cmp.$options.isIcon && cmp.icon in added && cmp.$reset();
}); }
2017-11-11 04:33:51 +00:00
);
}
};
}
2017-11-11 04:33:51 +00:00
function getIcon(icon) {
2017-11-11 04:33:51 +00:00
if (!icons[icon]) {
return null;
}
2017-11-11 04:33:51 +00:00
if (!parsed[icon]) {
parsed[icon] = $(icons[icon].trim());
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
return parsed[icon].cloneNode(true);
}
2017-11-11 04:33:51 +00:00
function applyRtl(icon) {
return isRtl ? swap(swap(icon, 'left', 'right'), 'previous', 'next') : icon;
}
2017-11-11 04:33:51 +00:00
var Img = {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
args: 'dataSrc',
props: {
dataSrc: String,
dataSrcset: Boolean,
sizes: String,
width: Number,
height: Number,
offsetTop: String,
offsetLeft: String,
target: String
},
data: {
dataSrc: '',
dataSrcset: false,
sizes: false,
width: false,
height: false,
offsetTop: '50vh',
offsetLeft: 0,
target: false
},
2017-11-11 04:33:51 +00:00
computed: {
2017-11-11 04:33:51 +00:00
cacheKey: function(ref) {
var dataSrc = ref.dataSrc;
2017-11-11 04:33:51 +00:00
return ((this.$name) + "." + dataSrc);
},
2017-11-11 04:33:51 +00:00
width: function(ref) {
2019-04-22 13:31:39 +00:00
var width = ref.width;
var dataWidth = ref.dataWidth;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return width || dataWidth;
},
2017-11-11 04:33:51 +00:00
height: function(ref) {
2019-04-22 13:31:39 +00:00
var height = ref.height;
var dataHeight = ref.dataHeight;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return height || dataHeight;
2017-11-11 04:33:51 +00:00
},
sizes: function(ref) {
var sizes = ref.sizes;
var dataSizes = ref.dataSizes;
2017-11-11 04:33:51 +00:00
return sizes || dataSizes;
},
2017-11-11 04:33:51 +00:00
isImg: function(_, $el) {
return isImg($el);
},
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
target: {
get: function(ref) {
var target = ref.target;
return [this.$el].concat(queryAll(target, this.$el));
},
watch: function() {
this.observe();
}
2017-11-11 04:33:51 +00:00
},
2017-11-11 04:33:51 +00:00
offsetTop: function(ref) {
var offsetTop = ref.offsetTop;
2017-11-11 04:33:51 +00:00
return toPx(offsetTop, 'height');
},
2017-11-11 04:33:51 +00:00
offsetLeft: function(ref) {
var offsetLeft = ref.offsetLeft;
2017-11-11 04:33:51 +00:00
return toPx(offsetLeft, 'width');
}
2017-11-11 04:33:51 +00:00
},
2017-11-11 04:33:51 +00:00
connected: function() {
2017-11-11 04:33:51 +00:00
if (storage[this.cacheKey]) {
setSrcAttrs(this.$el, storage[this.cacheKey] || this.dataSrc, this.dataSrcset, this.sizes);
} else if (this.isImg && this.width && this.height) {
setSrcAttrs(this.$el, getPlaceholderImage(this.width, this.height, this.sizes));
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
this.observer = new IntersectionObserver(this.load, {
rootMargin: ((this.offsetTop) + "px " + (this.offsetLeft) + "px")
});
requestAnimationFrame(this.observe);
2017-11-11 04:33:51 +00:00
},
2019-04-22 13:31:39 +00:00
disconnected: function() {
this.observer.disconnect();
},
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
update: {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
read: function(ref) {
var this$1 = this;
var image = ref.image;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (!image && document.readyState === 'complete') {
this.load(this.observer.takeRecords());
}
if (this.isImg) {
return false;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
image && image.then(function (img) { return img && img.currentSrc !== '' && setSrcAttrs(this$1.$el, currentSrc(img)); });
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
},
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
write: function(data) {
if (this.dataSrcset && window.devicePixelRatio !== 1) {
var bgSize = css(this.$el, 'backgroundSize');
if (bgSize.match(/^(auto\s?)+$/) || toFloat(bgSize) === data.bgSize) {
data.bgSize = getSourceSize(this.dataSrcset, this.sizes);
css(this.$el, 'backgroundSize', ((data.bgSize) + "px"));
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
},
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
events: ['resize']
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
},
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
methods: {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
load: function(entries) {
var this$1 = this;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (!entries.some(function (entry) { return entry.isIntersecting; })) {
return;
}
this._data.image = getImage(this.dataSrc, this.dataSrcset, this.sizes).then(function (img) {
setSrcAttrs(this$1.$el, currentSrc(img), img.srcset, img.sizes);
storage[this$1.cacheKey] = currentSrc(img);
return img;
}, noop);
this.observer.disconnect();
},
observe: function() {
var this$1 = this;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (!this._data.image && this._connected) {
this.target.forEach(function (el) { return this$1.observer.observe(el); });
}
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
}
2017-11-11 04:33:51 +00:00
};
2017-11-11 04:33:51 +00:00
function setSrcAttrs(el, src, srcset, sizes) {
2017-11-11 04:33:51 +00:00
if (isImg(el)) {
sizes && (el.sizes = sizes);
srcset && (el.srcset = srcset);
src && (el.src = src);
} else if (src) {
2017-11-11 04:33:51 +00:00
var change = !includes(el.style.backgroundImage, src);
if (change) {
2019-04-22 13:31:39 +00:00
css(el, 'backgroundImage', ("url(" + (escape(src)) + ")"));
trigger(el, createEvent('load', false));
}
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function getPlaceholderImage(width, height, sizes) {
var assign;
2017-11-11 04:33:51 +00:00
if (sizes) {
2019-04-22 13:31:39 +00:00
((assign = Dimensions.ratio({width: width, height: height}, 'width', toPx(sizesToPixel(sizes))), width = assign.width, height = assign.height));
}
2019-04-22 13:31:39 +00:00
return ("data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"" + width + "\" height=\"" + height + "\"></svg>");
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var sizesRe = /\s*(.*?)\s*(\w+|calc\(.*?\))\s*(?:,|$)/g;
function sizesToPixel(sizes) {
var matches;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
sizesRe.lastIndex = 0;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
while ((matches = sizesRe.exec(sizes))) {
if (!matches[1] || window.matchMedia(matches[1]).matches) {
matches = evaluateSize(matches[2]);
break;
}
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return matches || '100vw';
}
2017-11-11 04:33:51 +00:00
var sizeRe = /\d+(?:\w+|%)/g;
var additionRe = /[+-]?(\d+)/g;
function evaluateSize(size) {
return startsWith(size, 'calc')
? size
.substring(5, size.length - 1)
.replace(sizeRe, function (size) { return toPx(size); })
.replace(/ /g, '')
.match(additionRe)
.reduce(function (a, b) { return a + +b; }, 0)
: size;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var srcSetRe = /\s+\d+w\s*(?:,|$)/g;
function getSourceSize(srcset, sizes) {
var srcSize = toPx(sizesToPixel(sizes));
var descriptors = (srcset.match(srcSetRe) || []).map(toFloat).sort(function (a, b) { return a - b; });
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return descriptors.filter(function (size) { return size >= srcSize; })[0] || descriptors.pop() || '';
}
2017-11-11 04:33:51 +00:00
function isImg(el) {
return el.tagName === 'IMG';
}
function currentSrc(el) {
return el.currentSrc || el.src;
}
2017-11-11 04:33:51 +00:00
var key = '__test__';
var storage;
2017-11-11 04:33:51 +00:00
// workaround for Safari's private browsing mode and accessing sessionStorage in Blink
try {
storage = window.sessionStorage || {};
storage[key] = 1;
delete storage[key];
} catch (e) {
storage = {};
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var Media = {
props: {
media: Boolean
},
data: {
media: false
},
computed: {
matchMedia: function() {
var media = toMedia(this.media);
return !media || window.matchMedia(media).matches;
}
}
};
function toMedia(value) {
if (isString(value)) {
if (value[0] === '@') {
var name = "breakpoint-" + (value.substr(1));
value = toFloat(getCssVar(name));
} else if (isNaN(value)) {
return value;
}
}
return value && !isNaN(value) ? ("(min-width: " + value + "px)") : false;
}
var Leader = {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
mixins: [Class, Media],
2017-11-11 04:33:51 +00:00
props: {
2019-04-22 13:31:39 +00:00
fill: String
2017-11-11 04:33:51 +00:00
},
data: {
fill: '',
clsWrapper: 'uk-leader-fill',
clsHide: 'uk-leader-hide',
attrFill: 'data-fill'
2017-11-11 04:33:51 +00:00
},
computed: {
fill: function(ref) {
var fill = ref.fill;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return fill || getCssVar('leader-fill-content');
2017-11-11 04:33:51 +00:00
}
},
connected: function() {
2019-04-22 13:31:39 +00:00
var assign;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
(assign = wrapInner(this.$el, ("<span class=\"" + (this.clsWrapper) + "\">")), this.wrapper = assign[0]);
},
2017-11-11 04:33:51 +00:00
disconnected: function() {
unwrap(this.wrapper.childNodes);
2017-11-11 04:33:51 +00:00
},
2019-04-22 13:31:39 +00:00
update: {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
read: function(ref) {
var changed = ref.changed;
var width = ref.width;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var prev = width;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
width = Math.floor(this.$el.offsetWidth / 2);
2019-04-22 13:31:39 +00:00
return {
width: width,
fill: this.fill,
changed: changed || prev !== width,
hide: !this.matchMedia
};
},
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
write: function(data) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
toggleClass(this.wrapper, this.clsHide, data.hide);
2019-04-22 13:31:39 +00:00
if (data.changed) {
data.changed = false;
attr(this.wrapper, this.attrFill, new Array(data.width).join(data.fill));
}
2019-04-22 13:31:39 +00:00
},
2019-04-22 13:31:39 +00:00
events: ['resize']
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
}
2017-11-11 04:33:51 +00:00
};
2017-11-11 04:33:51 +00:00
var Container = {
2017-11-11 04:33:51 +00:00
props: {
container: Boolean
},
data: {
container: true
},
computed: {
container: function(ref) {
var container = ref.container;
return container === true && this.$container || container && $(container);
2017-11-11 04:33:51 +00:00
}
}
};
2017-11-11 04:33:51 +00:00
var active$1;
2017-11-11 04:33:51 +00:00
var Modal = {
2017-11-11 04:33:51 +00:00
mixins: [Class, Container, Togglable],
props: {
selPanel: String,
selClose: String,
escClose: Boolean,
bgClose: Boolean,
stack: Boolean
2017-11-11 04:33:51 +00:00
},
data: {
cls: 'uk-open',
escClose: true,
bgClose: true,
overlay: true,
stack: false
},
computed: {
panel: function(ref, $el) {
var selPanel = ref.selPanel;
return $(selPanel, $el);
},
transitionElement: function() {
return this.panel;
},
bgClose: function(ref) {
var bgClose = ref.bgClose;
2017-11-11 04:33:51 +00:00
return bgClose && this.panel;
2017-11-11 04:33:51 +00:00
}
},
2019-04-22 13:31:39 +00:00
beforeDisconnect: function() {
if (this.isToggled()) {
this.toggleNow(this.$el, false);
}
},
2017-11-11 04:33:51 +00:00
events: [
{
name: 'click',
delegate: function() {
return this.selClose;
2017-11-11 04:33:51 +00:00
},
handler: function(e) {
e.preventDefault();
this.hide();
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
},
{
name: 'toggle',
2017-11-11 04:33:51 +00:00
self: true,
handler: function(e) {
if (e.defaultPrevented) {
return;
2017-11-11 04:33:51 +00:00
}
e.preventDefault();
this.toggle();
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
},
{
name: 'beforeshow',
2017-11-11 04:33:51 +00:00
self: true,
handler: function(e) {
var prev = active$1 && active$1 !== this && active$1;
active$1 = this;
if (prev) {
if (this.stack) {
this.prev = prev;
} else {
2019-04-22 13:31:39 +00:00
active$1 = prev;
if (prev.isToggled()) {
prev.hide().then(this.show);
} else {
once(prev.$el, 'beforeshow hidden', this.show, false, function (ref) {
var target = ref.target;
var type = ref.type;
return type === 'hidden' && target === prev.$el;
});
}
e.preventDefault();
2019-04-22 13:31:39 +00:00
}
2019-04-22 13:31:39 +00:00
return;
}
registerEvents();
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
},
{
2019-04-22 13:31:39 +00:00
name: 'show',
2017-11-11 04:33:51 +00:00
self: true,
2017-11-11 04:33:51 +00:00
handler: function() {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (!hasClass(document.documentElement, this.clsPage)) {
this.scrollbarWidth = width(window) - width(document);
css(document.body, 'overflowY', this.scrollbarWidth && this.overlay ? 'scroll' : '');
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
addClass(document.documentElement, this.clsPage);
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
},
{
2019-04-22 13:31:39 +00:00
name: 'hide',
2017-11-11 04:33:51 +00:00
self: true,
2017-11-11 04:33:51 +00:00
handler: function() {
2019-04-22 13:31:39 +00:00
if (!active$1 || active$1 === this && !this.prev) {
deregisterEvents();
2017-11-11 04:33:51 +00:00
}
}
2017-11-11 04:33:51 +00:00
},
2017-11-11 04:33:51 +00:00
{
2017-11-11 04:33:51 +00:00
name: 'hidden',
2017-11-11 04:33:51 +00:00
self: true,
2017-11-11 04:33:51 +00:00
handler: function() {
2017-11-11 04:33:51 +00:00
var found;
var ref = this;
var prev = ref.prev;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
active$1 = active$1 && active$1 !== this && active$1 || prev;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (!active$1) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
css(document.body, 'overflowY', '');
} else {
while (prev) {
if (prev.clsPage === this.clsPage) {
found = true;
break;
}
prev = prev.prev;
}
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
if (!found) {
removeClass(document.documentElement, this.clsPage);
}
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
],
2017-11-11 04:33:51 +00:00
methods: {
2017-11-11 04:33:51 +00:00
toggle: function() {
return this.isToggled() ? this.hide() : this.show();
2017-11-11 04:33:51 +00:00
},
show: function() {
2019-04-22 13:31:39 +00:00
var this$1 = this;
2017-11-11 04:33:51 +00:00
if (this.isToggled()) {
return Promise.resolve();
}
2017-11-11 04:33:51 +00:00
if (this.container && this.$el.parentNode !== this.container) {
append(this.container, this.$el);
2019-04-22 13:31:39 +00:00
return new Promise(function (resolve) { return requestAnimationFrame(function () { return this$1.show().then(resolve); }
); }
);
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return this.toggleElement(this.$el, true, animate$1(this));
2017-11-11 04:33:51 +00:00
},
hide: function() {
return this.isToggled()
2019-04-22 13:31:39 +00:00
? this.toggleElement(this.$el, false, animate$1(this))
: Promise.resolve();
},
2017-11-11 04:33:51 +00:00
getActive: function() {
return active$1;
2017-11-11 04:33:51 +00:00
}
}
2017-11-11 04:33:51 +00:00
};
2017-11-11 04:33:51 +00:00
var events;
2017-11-11 04:33:51 +00:00
function registerEvents() {
2017-11-11 04:33:51 +00:00
if (events) {
return;
}
2017-11-11 04:33:51 +00:00
events = [
2019-04-22 13:31:39 +00:00
on(document, pointerUp, function (ref) {
var target = ref.target;
var defaultPrevented = ref.defaultPrevented;
2017-11-11 04:33:51 +00:00
if (active$1 && active$1.bgClose && !defaultPrevented && (!active$1.overlay || within(target, active$1.$el)) && !within(target, active$1.panel)) {
active$1.hide();
2017-11-11 04:33:51 +00:00
}
}),
on(document, 'keydown', function (e) {
if (e.keyCode === 27 && active$1 && active$1.escClose) {
e.preventDefault();
active$1.hide();
}
})
];
}
2017-11-11 04:33:51 +00:00
function deregisterEvents() {
events && events.forEach(function (unbind) { return unbind(); });
events = null;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function animate$1(ref) {
var transitionElement = ref.transitionElement;
var _toggle = ref._toggle;
return function (el, show) { return new Promise(function (resolve, reject) { return once(el, 'show hide', function () {
el._reject && el._reject();
el._reject = reject;
_toggle(el, show);
if (toMs(css(transitionElement, 'transitionDuration'))) {
once(transitionElement, 'transitionend', resolve, false, function (e) { return e.target === transitionElement; });
} else {
resolve();
}
}); }
); };
}
var Modal$1 = {
install: install$1,
2017-11-11 04:33:51 +00:00
mixins: [Modal],
data: {
clsPage: 'uk-modal-page',
selPanel: '.uk-modal-dialog',
selClose: '.uk-modal-close, .uk-modal-close-default, .uk-modal-close-outside, .uk-modal-close-full'
2017-11-11 04:33:51 +00:00
},
events: [
{
name: 'show',
2017-11-11 04:33:51 +00:00
self: true,
2017-11-11 04:33:51 +00:00
handler: function() {
2017-11-11 04:33:51 +00:00
if (hasClass(this.panel, 'uk-margin-auto-vertical')) {
addClass(this.$el, 'uk-flex');
} else {
css(this.$el, 'display', 'block');
2017-11-11 04:33:51 +00:00
}
height(this.$el); // force reflow
}
2017-11-11 04:33:51 +00:00
},
{
name: 'hidden',
2017-11-11 04:33:51 +00:00
self: true,
2017-11-11 04:33:51 +00:00
handler: function() {
css(this.$el, 'display', '');
removeClass(this.$el, 'uk-flex');
2017-11-11 04:33:51 +00:00
}
}
2017-11-11 04:33:51 +00:00
]
2017-11-11 04:33:51 +00:00
};
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function install$1(UIkit) {
2017-11-11 04:33:51 +00:00
UIkit.modal.dialog = function (content, options) {
2017-11-11 04:33:51 +00:00
var dialog = UIkit.modal((" <div class=\"uk-modal\"> <div class=\"uk-modal-dialog\">" + content + "</div> </div> "), options);
2017-11-11 04:33:51 +00:00
dialog.show();
2017-11-11 04:33:51 +00:00
on(dialog.$el, 'hidden', function (ref) {
var target = ref.target;
var currentTarget = ref.currentTarget;
2017-11-11 04:33:51 +00:00
if (target === currentTarget) {
2019-04-22 13:31:39 +00:00
Promise.resolve(function () { return dialog.$destroy(true); });
2017-11-11 04:33:51 +00:00
}
});
2017-11-11 04:33:51 +00:00
return dialog;
};
2017-11-11 04:33:51 +00:00
UIkit.modal.alert = function (message, options) {
2017-11-11 04:33:51 +00:00
options = assign({bgClose: false, escClose: false, labels: UIkit.modal.labels}, options);
2017-11-11 04:33:51 +00:00
return new Promise(
function (resolve) { return on(UIkit.modal.dialog((" <div class=\"uk-modal-body\">" + (isString(message) ? message : html(message)) + "</div> <div class=\"uk-modal-footer uk-text-right\"> <button class=\"uk-button uk-button-primary uk-modal-close\" autofocus>" + (options.labels.ok) + "</button> </div> "), options).$el, 'hide', resolve); }
);
};
2017-11-11 04:33:51 +00:00
UIkit.modal.confirm = function (message, options) {
2017-11-11 04:33:51 +00:00
options = assign({bgClose: false, escClose: true, labels: UIkit.modal.labels}, options);
2017-11-11 04:33:51 +00:00
return new Promise(function (resolve, reject) {
2017-11-11 04:33:51 +00:00
var confirm = UIkit.modal.dialog((" <form> <div class=\"uk-modal-body\">" + (isString(message) ? message : html(message)) + "</div> <div class=\"uk-modal-footer uk-text-right\"> <button class=\"uk-button uk-button-default uk-modal-close\" type=\"button\">" + (options.labels.cancel) + "</button> <button class=\"uk-button uk-button-primary\" autofocus>" + (options.labels.ok) + "</button> </div> </form> "), options);
2017-11-11 04:33:51 +00:00
var resolved = false;
2017-11-11 04:33:51 +00:00
on(confirm.$el, 'submit', 'form', function (e) {
e.preventDefault();
resolve();
resolved = true;
confirm.hide();
});
on(confirm.$el, 'hide', function () {
if (!resolved) {
reject();
}
});
2017-11-11 04:33:51 +00:00
});
};
2017-11-11 04:33:51 +00:00
UIkit.modal.prompt = function (message, value, options) {
2017-11-11 04:33:51 +00:00
options = assign({bgClose: false, escClose: true, labels: UIkit.modal.labels}, options);
2017-11-11 04:33:51 +00:00
return new Promise(function (resolve) {
2017-11-11 04:33:51 +00:00
var prompt = UIkit.modal.dialog((" <form class=\"uk-form-stacked\"> <div class=\"uk-modal-body\"> <label>" + (isString(message) ? message : html(message)) + "</label> <input class=\"uk-input\" autofocus> </div> <div class=\"uk-modal-footer uk-text-right\"> <button class=\"uk-button uk-button-default uk-modal-close\" type=\"button\">" + (options.labels.cancel) + "</button> <button class=\"uk-button uk-button-primary\">" + (options.labels.ok) + "</button> </div> </form> "), options),
input = $('input', prompt.$el);
2017-11-11 04:33:51 +00:00
input.value = value;
2017-11-11 04:33:51 +00:00
var resolved = false;
2017-11-11 04:33:51 +00:00
on(prompt.$el, 'submit', 'form', function (e) {
e.preventDefault();
resolve(input.value);
resolved = true;
prompt.hide();
});
on(prompt.$el, 'hide', function () {
if (!resolved) {
resolve(null);
2017-11-11 04:33:51 +00:00
}
});
2017-11-11 04:33:51 +00:00
});
};
2017-11-11 04:33:51 +00:00
UIkit.modal.labels = {
ok: 'Ok',
cancel: 'Cancel'
};
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
var Nav = {
extends: Accordion,
data: {
targets: '> .uk-parent',
toggle: '> a',
content: '> ul'
}
2017-11-11 04:33:51 +00:00
};
2017-11-11 04:33:51 +00:00
var Navbar = {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
mixins: [Class, FlexBug],
2017-11-11 04:33:51 +00:00
props: {
dropdown: String,
mode: 'list',
align: String,
offset: Number,
boundary: Boolean,
boundaryAlign: Boolean,
clsDrop: String,
delayShow: Number,
delayHide: Number,
dropbar: Boolean,
dropbarMode: String,
dropbarAnchor: Boolean,
duration: Number
2017-11-11 04:33:51 +00:00
},
data: {
dropdown: '.uk-navbar-nav > li',
align: !isRtl ? 'left' : 'right',
clsDrop: 'uk-navbar-dropdown',
mode: undefined,
offset: undefined,
delayShow: undefined,
delayHide: undefined,
boundaryAlign: undefined,
flip: 'x',
boundary: true,
dropbar: false,
dropbarMode: 'slide',
dropbarAnchor: false,
duration: 200,
2019-04-22 13:31:39 +00:00
forceHeight: true,
selMinHeight: '.uk-navbar-nav > li > a, .uk-navbar-item, .uk-navbar-toggle'
},
2017-11-11 04:33:51 +00:00
computed: {
2017-11-11 04:33:51 +00:00
boundary: function(ref, $el) {
var boundary = ref.boundary;
var boundaryAlign = ref.boundaryAlign;
2017-11-11 04:33:51 +00:00
return (boundary === true || boundaryAlign) ? $el : boundary;
2017-11-11 04:33:51 +00:00
},
dropbarAnchor: function(ref, $el) {
var dropbarAnchor = ref.dropbarAnchor;
2017-11-11 04:33:51 +00:00
return query(dropbarAnchor, $el);
},
pos: function(ref) {
var align = ref.align;
2017-11-11 04:33:51 +00:00
return ("bottom-" + align);
2017-11-11 04:33:51 +00:00
},
dropdowns: function(ref, $el) {
var dropdown = ref.dropdown;
var clsDrop = ref.clsDrop;
2017-11-11 04:33:51 +00:00
return $$((dropdown + " ." + clsDrop), $el);
}
2017-11-11 04:33:51 +00:00
},
2017-11-11 04:33:51 +00:00
beforeConnect: function() {
2017-11-11 04:33:51 +00:00
var ref = this.$props;
var dropbar = ref.dropbar;
2017-11-11 04:33:51 +00:00
this.dropbar = dropbar && (query(dropbar, this.$el) || $('+ .uk-navbar-dropbar', this.$el) || $('<div></div>'));
if (this.dropbar) {
addClass(this.dropbar, 'uk-navbar-dropbar');
if (this.dropbarMode === 'slide') {
addClass(this.dropbar, 'uk-navbar-dropbar-slide');
}
}
2017-11-11 04:33:51 +00:00
},
disconnected: function() {
this.dropbar && remove(this.dropbar);
2017-11-11 04:33:51 +00:00
},
update: function() {
var this$1 = this;
2017-11-11 04:33:51 +00:00
this.$create(
'drop',
this.dropdowns.filter(function (el) { return !this$1.getDropdown(el); }),
assign({}, this.$props, {boundary: this.boundary, pos: this.pos, offset: this.dropbar || this.offset})
);
2017-11-11 04:33:51 +00:00
},
2017-11-11 04:33:51 +00:00
events: [
2017-11-11 04:33:51 +00:00
{
name: 'mouseover',
2017-11-11 04:33:51 +00:00
delegate: function() {
return this.dropdown;
},
2017-11-11 04:33:51 +00:00
handler: function(ref) {
var current = ref.current;
2017-11-11 04:33:51 +00:00
var active = this.getActive();
if (active && active.toggle && !within(active.toggle.$el, current) && !active.tracker.movesTo(active.$el)) {
active.hide(false);
}
}
2017-11-11 04:33:51 +00:00
},
2017-11-11 04:33:51 +00:00
{
name: 'mouseleave',
2017-11-11 04:33:51 +00:00
el: function() {
return this.dropbar;
},
2017-11-11 04:33:51 +00:00
handler: function() {
var active = this.getActive();
2017-11-11 04:33:51 +00:00
if (active && !matches(this.dropbar, ':hover')) {
active.hide();
}
}
},
2017-11-11 04:33:51 +00:00
{
name: 'beforeshow',
2017-11-11 04:33:51 +00:00
capture: true,
2017-11-11 04:33:51 +00:00
filter: function() {
return this.dropbar;
},
2017-11-11 04:33:51 +00:00
handler: function() {
2017-11-11 04:33:51 +00:00
if (!this.dropbar.parentNode) {
after(this.dropbarAnchor || this.$el, this.dropbar);
}
2017-11-11 04:33:51 +00:00
}
},
2017-11-11 04:33:51 +00:00
{
name: 'show',
2017-11-11 04:33:51 +00:00
capture: true,
2017-11-11 04:33:51 +00:00
filter: function() {
return this.dropbar;
},
2017-11-11 04:33:51 +00:00
handler: function(_, drop) {
2017-11-11 04:33:51 +00:00
var $el = drop.$el;
var dir = drop.dir;
2017-11-11 04:33:51 +00:00
this.clsDrop && addClass($el, ((this.clsDrop) + "-dropbar"));
2017-11-11 04:33:51 +00:00
if (dir === 'bottom') {
this.transitionTo($el.offsetHeight + toFloat(css($el, 'marginTop')) + toFloat(css($el, 'marginBottom')), $el);
}
}
},
2017-11-11 04:33:51 +00:00
{
name: 'beforehide',
2017-11-11 04:33:51 +00:00
filter: function() {
return this.dropbar;
},
2017-11-11 04:33:51 +00:00
handler: function(e, ref) {
var $el = ref.$el;
2017-11-11 04:33:51 +00:00
var active = this.getActive();
2017-11-11 04:33:51 +00:00
if (matches(this.dropbar, ':hover') && active && active.$el === $el) {
e.preventDefault();
2017-11-11 04:33:51 +00:00
}
}
},
{
name: 'hide',
2017-11-11 04:33:51 +00:00
filter: function() {
return this.dropbar;
2017-11-11 04:33:51 +00:00
},
handler: function(_, ref) {
var $el = ref.$el;
2017-11-11 04:33:51 +00:00
var active = this.getActive();
2017-11-11 04:33:51 +00:00
if (!active || active && active.$el === $el) {
this.transitionTo(0);
}
}
}
2017-11-11 04:33:51 +00:00
],
2017-11-11 04:33:51 +00:00
methods: {
2017-11-11 04:33:51 +00:00
getActive: function() {
2019-04-22 13:31:39 +00:00
var ref = this.dropdowns.map(this.getDropdown).filter(function (drop) { return drop && drop.isActive(); });
var active = ref[0];
return active && includes(active.mode, 'hover') && within(active.toggle.$el, this.$el) && active;
},
2017-11-11 04:33:51 +00:00
transitionTo: function(newHeight, el) {
2019-04-22 13:31:39 +00:00
var this$1 = this;
2017-11-11 04:33:51 +00:00
var ref = this;
var dropbar = ref.dropbar;
var oldHeight = isVisible(dropbar) ? height(dropbar) : 0;
2017-11-11 04:33:51 +00:00
el = oldHeight < newHeight && el;
2017-11-11 04:33:51 +00:00
css(el, 'clip', ("rect(0," + (el.offsetWidth) + "px," + oldHeight + "px,0)"));
2017-11-11 04:33:51 +00:00
height(dropbar, oldHeight);
2017-11-11 04:33:51 +00:00
Transition.cancel([el, dropbar]);
return Promise.all([
Transition.start(dropbar, {height: newHeight}, this.duration),
Transition.start(el, {clip: ("rect(0," + (el.offsetWidth) + "px," + newHeight + "px,0)")}, this.duration)
])
.catch(noop)
2019-04-22 13:31:39 +00:00
.then(function () {
css(el, {clip: ''});
this$1.$update(dropbar);
});
},
2017-11-11 04:33:51 +00:00
getDropdown: function(el) {
return this.$getComponent(el, 'drop') || this.$getComponent(el, 'dropdown');
}
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
};
2017-11-11 04:33:51 +00:00
var Offcanvas = {
2017-11-11 04:33:51 +00:00
mixins: [Modal],
2017-11-11 04:33:51 +00:00
args: 'mode',
2017-11-11 04:33:51 +00:00
props: {
mode: String,
flip: Boolean,
overlay: Boolean
},
2017-11-11 04:33:51 +00:00
data: {
mode: 'slide',
flip: false,
overlay: false,
clsPage: 'uk-offcanvas-page',
clsContainer: 'uk-offcanvas-container',
selPanel: '.uk-offcanvas-bar',
clsFlip: 'uk-offcanvas-flip',
2019-04-22 13:31:39 +00:00
clsContainerAnimation: 'uk-offcanvas-container-animation',
clsSidebarAnimation: 'uk-offcanvas-bar-animation',
clsMode: 'uk-offcanvas',
clsOverlay: 'uk-offcanvas-overlay',
selClose: '.uk-offcanvas-close'
},
2017-11-11 04:33:51 +00:00
computed: {
2017-11-11 04:33:51 +00:00
clsFlip: function(ref) {
var flip = ref.flip;
var clsFlip = ref.clsFlip;
2017-11-11 04:33:51 +00:00
return flip ? clsFlip : '';
},
2017-11-11 04:33:51 +00:00
clsOverlay: function(ref) {
var overlay = ref.overlay;
var clsOverlay = ref.clsOverlay;
2017-11-11 04:33:51 +00:00
return overlay ? clsOverlay : '';
},
2017-11-11 04:33:51 +00:00
clsMode: function(ref) {
var mode = ref.mode;
var clsMode = ref.clsMode;
2017-11-11 04:33:51 +00:00
return (clsMode + "-" + mode);
},
2017-11-11 04:33:51 +00:00
clsSidebarAnimation: function(ref) {
var mode = ref.mode;
var clsSidebarAnimation = ref.clsSidebarAnimation;
2017-11-11 04:33:51 +00:00
return mode === 'none' || mode === 'reveal' ? '' : clsSidebarAnimation;
},
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
clsContainerAnimation: function(ref) {
var mode = ref.mode;
2019-04-22 13:31:39 +00:00
var clsContainerAnimation = ref.clsContainerAnimation;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return mode !== 'push' && mode !== 'reveal' ? '' : clsContainerAnimation;
2017-11-11 04:33:51 +00:00
},
transitionElement: function(ref) {
var mode = ref.mode;
2017-11-11 04:33:51 +00:00
return mode === 'reveal' ? this.panel.parentNode : this.panel;
2017-11-11 04:33:51 +00:00
}
},
2019-04-22 13:31:39 +00:00
events: [
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
{
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
name: 'click',
2019-04-22 13:31:39 +00:00
delegate: function() {
return 'a[href^="#"]';
},
2019-04-22 13:31:39 +00:00
handler: function(ref) {
var current = ref.current;
2019-04-22 13:31:39 +00:00
if (current.hash && $(current.hash, document.body)) {
this.hide();
}
2017-11-11 04:33:51 +00:00
}
},
{
2019-04-22 13:31:39 +00:00
name: 'touchstart',
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
passive: true,
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
el: function() {
return this.panel;
},
2017-11-11 04:33:51 +00:00
handler: function(ref) {
2019-04-22 13:31:39 +00:00
var targetTouches = ref.targetTouches;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (targetTouches.length === 1) {
this.clientY = targetTouches[0].clientY;
}
2019-04-22 13:31:39 +00:00
}
2017-11-11 04:33:51 +00:00
},
2017-11-11 04:33:51 +00:00
{
2019-04-22 13:31:39 +00:00
name: 'touchmove',
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
self: true,
passive: false,
2017-11-11 04:33:51 +00:00
filter: function() {
return this.overlay;
2017-11-11 04:33:51 +00:00
},
2019-04-22 13:31:39 +00:00
handler: function(e) {
e.preventDefault();
}
},
{
name: 'touchmove',
passive: false,
el: function() {
return this.panel;
},
handler: function(e) {
if (e.targetTouches.length !== 1) {
return;
}
var clientY = event.targetTouches[0].clientY - this.clientY;
var ref = this.panel;
var scrollTop = ref.scrollTop;
var scrollHeight = ref.scrollHeight;
var clientHeight = ref.clientHeight;
if (clientHeight >= scrollHeight
|| scrollTop === 0 && clientY > 0
|| scrollHeight - scrollTop <= clientHeight && clientY < 0
) {
e.preventDefault();
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
}
2017-11-11 04:33:51 +00:00
},
2017-11-11 04:33:51 +00:00
{
name: 'show',
2017-11-11 04:33:51 +00:00
self: true,
2017-11-11 04:33:51 +00:00
handler: function() {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (this.mode === 'reveal' && !hasClass(this.panel.parentNode, this.clsMode)) {
wrapAll(this.panel, '<div>');
addClass(this.panel.parentNode, this.clsMode);
}
2019-04-22 13:31:39 +00:00
css(document.documentElement, 'overflowY', this.overlay ? 'hidden' : '');
addClass(document.body, this.clsContainer, this.clsFlip);
css(this.$el, 'display', 'block');
2019-04-22 13:31:39 +00:00
addClass(this.$el, this.clsOverlay);
addClass(this.panel, this.clsSidebarAnimation, this.mode !== 'reveal' ? this.clsMode : '');
height(document.body); // force reflow
addClass(document.body, this.clsContainerAnimation);
this.clsContainerAnimation && suppressUserScale();
}
},
{
name: 'hide',
self: true,
handler: function() {
2019-04-22 13:31:39 +00:00
removeClass(document.body, this.clsContainerAnimation);
var active = this.getActive();
if (this.mode === 'none' || active && active !== this && active !== this.prev) {
trigger(this.panel, 'transitionend');
}
}
},
{
name: 'hidden',
self: true,
handler: function() {
2019-04-22 13:31:39 +00:00
this.clsContainerAnimation && resumeUserScale();
if (this.mode === 'reveal') {
unwrap(this.panel);
}
removeClass(this.panel, this.clsSidebarAnimation, this.clsMode);
removeClass(this.$el, this.clsOverlay);
css(this.$el, 'display', '');
2019-04-22 13:31:39 +00:00
removeClass(document.body, this.clsContainer, this.clsFlip);
css(document.documentElement, 'overflowY', '');
}
},
{
name: 'swipeLeft swipeRight',
handler: function(e) {
2019-04-22 13:31:39 +00:00
if (this.isToggled() && endsWith(e.type, 'Left') ^ this.flip) {
this.hide();
}
}
}
]
};
2019-04-22 13:31:39 +00:00
// Chrome in responsive mode zooms page upon opening offcanvas
function suppressUserScale() {
getViewport().content += ',user-scalable=0';
}
function resumeUserScale() {
var viewport = getViewport();
viewport.content = viewport.content.replace(/,user-scalable=0$/, '');
}
function getViewport() {
return $('meta[name="viewport"]', document.head) || append(document.head, '<meta name="viewport">');
}
var OverflowAuto = {
mixins: [Class],
props: {
selContainer: String,
2019-04-22 13:31:39 +00:00
selContent: String
},
data: {
selContainer: '.uk-modal',
2019-04-22 13:31:39 +00:00
selContent: '.uk-modal-dialog'
},
computed: {
container: function(ref, $el) {
var selContainer = ref.selContainer;
return closest($el, selContainer);
},
content: function(ref, $el) {
var selContent = ref.selContent;
return closest($el, selContent);
}
},
connected: function() {
css(this.$el, 'minHeight', 150);
},
update: {
read: function() {
if (!this.content || !this.container) {
return false;
}
return {
current: toFloat(css(this.$el, 'maxHeight')),
max: Math.max(150, height(this.container) - (offset(this.content).height - height(this.$el)))
};
},
write: function(ref) {
var current = ref.current;
var max = ref.max;
css(this.$el, 'maxHeight', max);
if (Math.round(current) !== Math.round(max)) {
trigger(this.$el, 'resize');
}
},
2019-04-22 13:31:39 +00:00
events: ['resize']
}
};
var Responsive = {
props: ['width', 'height'],
connected: function() {
addClass(this.$el, 'uk-responsive-width');
},
update: {
read: function() {
return isVisible(this.$el) && this.width && this.height
? {width: width(this.$el.parentNode), height: this.height}
: false;
},
write: function(dim) {
2019-04-22 13:31:39 +00:00
height(this.$el, Dimensions.contain({
height: this.height,
width: this.width
}, dim).height);
},
2019-04-22 13:31:39 +00:00
events: ['resize']
}
};
var Scroll = {
props: {
duration: Number,
offset: Number
},
data: {
duration: 1000,
offset: 0
},
methods: {
scrollTo: function(el) {
var this$1 = this;
el = el && $(el) || document.body;
var docHeight = height(document);
var winHeight = height(window);
var target = offset(el).top - this.offset;
if (target + winHeight > docHeight) {
target = docHeight - winHeight;
}
if (!trigger(this.$el, 'beforescroll', [this, el])) {
return;
}
var start = Date.now();
var startY = window.pageYOffset;
var step = function () {
var currentY = startY + (target - startY) * ease(clamp((Date.now() - start) / this$1.duration));
scrollTop(window, currentY);
// scroll more if we have not reached our destination
if (currentY !== target) {
requestAnimationFrame(step);
} else {
trigger(this$1.$el, 'scrolled', [this$1, el]);
}
};
step();
}
},
events: {
click: function(e) {
if (e.defaultPrevented) {
return;
}
e.preventDefault();
2019-04-22 13:31:39 +00:00
this.scrollTo(escape(decodeURIComponent(this.$el.hash)).substr(1));
}
}
};
function ease(k) {
return 0.5 * (1 - Math.cos(Math.PI * k));
}
var Scrollspy = {
args: 'cls',
props: {
2019-04-22 13:31:39 +00:00
cls: String,
target: String,
hidden: Boolean,
offsetTop: Number,
offsetLeft: Number,
repeat: Boolean,
delay: Number
},
data: function () { return ({
2019-04-22 13:31:39 +00:00
cls: false,
target: false,
hidden: true,
offsetTop: 0,
offsetLeft: 0,
repeat: false,
delay: 0,
inViewClass: 'uk-scrollspy-inview'
}); },
computed: {
elements: function(ref, $el) {
var target = ref.target;
return target ? $$(target, $el) : [$el];
}
},
update: [
{
write: function() {
if (this.hidden) {
css(filter(this.elements, (":not(." + (this.inViewClass) + ")")), 'visibility', 'hidden');
}
}
},
{
2019-04-22 13:31:39 +00:00
read: function(ref) {
var this$1 = this;
2019-04-22 13:31:39 +00:00
var update = ref.update;
2019-04-22 13:31:39 +00:00
if (!update) {
return;
}
2019-04-22 13:31:39 +00:00
this.elements.forEach(function (el) {
2019-04-22 13:31:39 +00:00
var state = el._ukScrollspyState;
2019-04-22 13:31:39 +00:00
if (!state) {
state = {cls: data(el, 'uk-scrollspy-class') || this$1.cls};
}
2019-04-22 13:31:39 +00:00
state.show = isInView(el, this$1.offsetTop, this$1.offsetLeft);
el._ukScrollspyState = state;
});
},
2019-04-22 13:31:39 +00:00
write: function(data) {
var this$1 = this;
// Let child components be applied at least once first
2019-04-22 13:31:39 +00:00
if (!data.update) {
this.$emit();
2019-04-22 13:31:39 +00:00
return data.update = true;
}
2019-04-22 13:31:39 +00:00
this.elements.forEach(function (el) {
2019-04-22 13:31:39 +00:00
var state = el._ukScrollspyState;
var cls = state.cls;
2019-04-22 13:31:39 +00:00
if (state.show && !state.inview && !state.queued) {
var show = function () {
css(el, 'visibility', '');
addClass(el, this$1.inViewClass);
toggleClass(el, cls);
trigger(el, 'inview');
this$1.$update(el);
2019-04-22 13:31:39 +00:00
state.inview = true;
state.abort && state.abort();
};
if (this$1.delay) {
2019-04-22 13:31:39 +00:00
state.queued = true;
data.promise = (data.promise || Promise.resolve()).then(function () {
return !state.inview && new Promise(function (resolve) {
var timer = setTimeout(function () {
show();
resolve();
2019-04-22 13:31:39 +00:00
}, data.promise || this$1.elements.length === 1 ? this$1.delay : 0);
2019-04-22 13:31:39 +00:00
state.abort = function () {
clearTimeout(timer);
resolve();
2019-04-22 13:31:39 +00:00
state.queued = false;
};
});
});
} else {
show();
}
2019-04-22 13:31:39 +00:00
} else if (!state.show && (state.inview || state.queued) && this$1.repeat) {
2019-04-22 13:31:39 +00:00
state.abort && state.abort();
2019-04-22 13:31:39 +00:00
if (!state.inview) {
return;
}
css(el, 'visibility', this$1.hidden ? 'hidden' : '');
removeClass(el, this$1.inViewClass);
toggleClass(el, cls);
trigger(el, 'outview');
this$1.$update(el);
2019-04-22 13:31:39 +00:00
state.inview = false;
}
});
},
2019-04-22 13:31:39 +00:00
events: ['scroll', 'resize']
}
]
};
var ScrollspyNav = {
props: {
cls: String,
closest: String,
scroll: Boolean,
overflow: Boolean,
offset: Number
},
data: {
cls: 'uk-active',
closest: false,
scroll: false,
overflow: true,
offset: 0
},
computed: {
links: function(_, $el) {
return $$('a[href^="#"]', $el).filter(function (el) { return el.hash; });
},
2019-04-22 13:31:39 +00:00
elements: function(ref) {
var selector = ref.closest;
return closest(this.links, selector || '*');
},
targets: function() {
2019-04-22 13:31:39 +00:00
return $$(this.links.map(function (el) { return escape(el.hash); }).join(','));
}
},
update: [
{
read: function() {
if (this.scroll) {
this.$create('scroll', this.links, {offset: this.offset || 0});
}
}
},
{
2019-04-22 13:31:39 +00:00
read: function(data) {
var this$1 = this;
var scroll = window.pageYOffset + this.offset + 1;
var max = height(document) - height(window) + this.offset;
2019-04-22 13:31:39 +00:00
data.active = false;
this.targets.every(function (el, i) {
var ref = offset(el);
var top = ref.top;
var last = i + 1 === this$1.targets.length;
if (!this$1.overflow && (i === 0 && top > scroll || last && top + el.offsetTop < scroll)) {
return false;
}
if (!last && offset(this$1.targets[i + 1]).top <= scroll) {
return true;
}
if (scroll >= max) {
for (var j = this$1.targets.length - 1; j > i; j--) {
if (isInView(this$1.targets[j])) {
el = this$1.targets[j];
break;
}
}
}
2019-04-22 13:31:39 +00:00
return !(data.active = $(filter(this$1.links, ("[href=\"#" + (el.id) + "\"]"))));
});
},
write: function(ref) {
var active = ref.active;
this.links.forEach(function (el) { return el.blur(); });
removeClass(this.elements, this.cls);
if (active) {
trigger(this.$el, 'active', [active, addClass(this.closest ? closest(active, this.closest) : active, this.cls)]);
}
},
2019-04-22 13:31:39 +00:00
events: ['scroll', 'resize']
}
]
};
var Sticky = {
2019-04-22 13:31:39 +00:00
mixins: [Class, Media],
props: {
top: null,
bottom: Boolean,
offset: Number,
animation: String,
clsActive: String,
clsInactive: String,
clsFixed: String,
clsBelow: String,
selTarget: String,
widthElement: Boolean,
showOnUp: Boolean,
targetOffset: Number
},
data: {
top: 0,
bottom: false,
offset: 0,
animation: '',
clsActive: 'uk-active',
clsInactive: '',
clsFixed: 'uk-sticky-fixed',
clsBelow: 'uk-sticky-below',
selTarget: '',
widthElement: false,
showOnUp: false,
targetOffset: false
},
computed: {
selTarget: function(ref, $el) {
var selTarget = ref.selTarget;
return selTarget && $(selTarget, $el) || $el;
},
widthElement: function(ref, $el) {
var widthElement = ref.widthElement;
return query(widthElement, $el) || this.placeholder;
2019-04-22 13:31:39 +00:00
},
isActive: {
get: function() {
return hasClass(this.selTarget, this.clsActive);
},
set: function(value) {
if (value && !this.isActive) {
replaceClass(this.selTarget, this.clsInactive, this.clsActive);
trigger(this.$el, 'active');
} else if (!value && !hasClass(this.selTarget, this.clsInactive)) {
replaceClass(this.selTarget, this.clsActive, this.clsInactive);
trigger(this.$el, 'inactive');
}
}
}
},
connected: function() {
this.placeholder = $('+ .uk-sticky-placeholder', this.$el) || $('<div class="uk-sticky-placeholder"></div>');
2019-04-22 13:31:39 +00:00
this.isFixed = false;
this.isActive = false;
},
disconnected: function() {
2019-04-22 13:31:39 +00:00
if (this.isFixed) {
this.hide();
removeClass(this.selTarget, this.clsInactive);
}
remove(this.placeholder);
this.placeholder = null;
this.widthElement = null;
},
events: [
{
name: 'load hashchange popstate',
el: window,
handler: function() {
var this$1 = this;
if (!(this.targetOffset !== false && location.hash && window.pageYOffset > 0)) {
return;
}
var target = $(location.hash);
if (target) {
fastdom.read(function () {
var ref = offset(target);
var top = ref.top;
var elTop = offset(this$1.$el).top;
var elHeight = this$1.$el.offsetHeight;
2019-04-22 13:31:39 +00:00
if (this$1.isFixed && elTop + elHeight >= top && elTop <= top + target.offsetHeight) {
scrollTop(window, top - elHeight - (isNumeric(this$1.targetOffset) ? this$1.targetOffset : 0) - this$1.offset);
}
});
}
}
}
],
update: [
{
2019-04-22 13:31:39 +00:00
read: function(ref, type) {
var height = ref.height;
if (this.isActive && type !== 'update') {
this.hide();
height = this.$el.offsetHeight;
this.show();
}
height = !this.isActive ? this.$el.offsetHeight : height;
this.topOffset = offset(this.isFixed ? this.placeholder : this.$el).top;
this.bottomOffset = this.topOffset + height;
var bottom = parseProp('bottom', this);
this.top = Math.max(toFloat(parseProp('top', this)), this.topOffset) - this.offset;
this.bottom = bottom && bottom - height;
this.inactive = !this.matchMedia;
return {
2019-04-22 13:31:39 +00:00
lastScroll: false,
height: height,
margins: css(this.$el, ['marginTop', 'marginBottom', 'marginLeft', 'marginRight'])
};
},
write: function(ref) {
2019-04-22 13:31:39 +00:00
var height = ref.height;
var margins = ref.margins;
var ref$1 = this;
var placeholder = ref$1.placeholder;
2019-04-22 13:31:39 +00:00
css(placeholder, assign({height: height}, margins));
if (!within(placeholder, document)) {
after(this.$el, placeholder);
attr(placeholder, 'hidden', '');
}
2019-04-22 13:31:39 +00:00
// ensure active/inactive classes are applied
this.isActive = this.isActive;
},
2019-04-22 13:31:39 +00:00
events: ['resize']
},
{
2019-04-22 13:31:39 +00:00
read: function(ref) {
var scroll = ref.scroll; if ( scroll === void 0 ) scroll = 0;
this.width = (isVisible(this.widthElement) ? this.widthElement : this.$el).offsetWidth;
2019-04-22 13:31:39 +00:00
this.scroll = window.pageYOffset;
return {
2019-04-22 13:31:39 +00:00
dir: scroll <= this.scroll ? 'down' : 'up',
scroll: this.scroll,
visible: isVisible(this.$el),
top: offsetPosition(this.placeholder)[0]
};
},
2019-04-22 13:31:39 +00:00
write: function(data, type) {
var this$1 = this;
2019-04-22 13:31:39 +00:00
var initTimestamp = data.initTimestamp; if ( initTimestamp === void 0 ) initTimestamp = 0;
var dir = data.dir;
var lastDir = data.lastDir;
var lastScroll = data.lastScroll;
var scroll = data.scroll;
var top = data.top;
var visible = data.visible;
var now = performance.now();
data.lastScroll = scroll;
if (scroll < 0 || scroll === lastScroll || !visible || this.disabled || this.showOnUp && type !== 'scroll') {
return;
}
if (now - initTimestamp > 300 || dir !== lastDir) {
data.initScroll = scroll;
data.initTimestamp = now;
}
data.lastDir = dir;
if (this.showOnUp && Math.abs(data.initScroll - scroll) <= 30 && Math.abs(lastScroll - scroll) <= 10) {
return;
}
if (this.inactive
|| scroll < this.top
2019-04-22 13:31:39 +00:00
|| this.showOnUp && (scroll <= this.top || dir === 'down' || dir === 'up' && !this.isFixed && scroll <= this.bottomOffset)
) {
2019-04-22 13:31:39 +00:00
if (!this.isFixed) {
if (Animation.inProgress(this.$el) && top > scroll) {
Animation.cancel(this.$el);
this.hide();
}
return;
}
2019-04-22 13:31:39 +00:00
this.isFixed = false;
if (this.animation && scroll > this.topOffset) {
Animation.cancel(this.$el);
Animation.out(this.$el, this.animation).then(function () { return this$1.hide(); }, noop);
} else {
this.hide();
}
2019-04-22 13:31:39 +00:00
} else if (this.isFixed) {
this.update();
} else if (this.animation) {
Animation.cancel(this.$el);
this.show();
Animation.in(this.$el, this.animation).catch(noop);
} else {
this.show();
}
},
2019-04-22 13:31:39 +00:00
events: ['resize', 'scroll']
}
2019-04-22 13:31:39 +00:00
],
methods: {
show: function() {
2019-04-22 13:31:39 +00:00
this.isFixed = true;
this.update();
attr(this.placeholder, 'hidden', null);
},
hide: function() {
2019-04-22 13:31:39 +00:00
this.isActive = false;
removeClass(this.$el, this.clsFixed, this.clsBelow);
css(this.$el, {position: '', top: '', width: ''});
attr(this.placeholder, 'hidden', '');
},
update: function() {
var active = this.top !== 0 || this.scroll > this.top;
var top = Math.max(0, this.offset);
if (this.bottom && this.scroll > this.bottom - this.offset) {
top = this.bottom - this.scroll;
}
css(this.$el, {
position: 'fixed',
top: (top + "px"),
width: this.width
});
2019-04-22 13:31:39 +00:00
this.isActive = active;
toggleClass(this.$el, this.clsBelow, this.scroll > this.bottomOffset);
addClass(this.$el, this.clsFixed);
}
}
};
function parseProp(prop, ref) {
var $props = ref.$props;
var $el = ref.$el;
var propOffset = ref[(prop + "Offset")];
var value = $props[prop];
if (!value) {
return;
}
if (isNumeric(value)) {
return propOffset + toFloat(value);
} else if (isString(value) && value.match(/^-?\d+vh$/)) {
return height(window) * toFloat(value) / 100;
} else {
var el = value === true ? $el.parentNode : query(value, $el);
if (el) {
return offset(el).top + el.offsetHeight;
}
}
}
var Switcher = {
mixins: [Togglable],
args: 'connect',
props: {
connect: String,
toggle: String,
active: Number,
swiping: Boolean
},
data: {
connect: '~.uk-switcher',
2019-04-22 13:31:39 +00:00
toggle: '> * > :first-child',
active: 0,
swiping: true,
cls: 'uk-active',
clsContainer: 'uk-switcher',
attrItem: 'uk-switcher-item',
queued: true
},
computed: {
connects: function(ref, $el) {
var connect = ref.connect;
return queryAll(connect, $el);
},
toggles: function(ref, $el) {
var toggle = ref.toggle;
return $$(toggle, $el);
}
},
events: [
{
name: 'click',
delegate: function() {
return ((this.toggle) + ":not(.uk-disabled)");
},
handler: function(e) {
e.preventDefault();
2019-04-22 13:31:39 +00:00
this.show(toNodes(this.$el.children).filter(function (el) { return within(e.current, el); })[0]);
}
},
{
name: 'click',
el: function() {
return this.connects;
},
delegate: function() {
return ("[" + (this.attrItem) + "],[data-" + (this.attrItem) + "]");
},
handler: function(e) {
e.preventDefault();
this.show(data(e.current, this.attrItem));
}
},
{
name: 'swipeRight swipeLeft',
filter: function() {
return this.swiping;
},
el: function() {
return this.connects;
},
2019-04-22 13:31:39 +00:00
handler: function(ref) {
var type = ref.type;
2019-04-22 13:31:39 +00:00
this.show(endsWith(type, 'Left') ? 'next' : 'previous');
}
}
],
update: function() {
var this$1 = this;
this.connects.forEach(function (list) { return this$1.updateAria(list.children); });
2019-04-22 13:31:39 +00:00
var ref = this.$el;
var children = ref.children;
this.show(filter(children, ("." + (this.cls)))[0] || children[this.active] || children[0]);
},
methods: {
index: function() {
2019-04-22 13:31:39 +00:00
return !isEmpty(this.connects) && index(filter(this.connects[0].children, ("." + (this.cls)))[0]);
},
show: function(item) {
var this$1 = this;
2019-04-22 13:31:39 +00:00
var ref = this.$el;
var children = ref.children;
var length = children.length;
var prev = this.index();
var hasPrev = prev >= 0;
var dir = item === 'previous' ? -1 : 1;
2019-04-22 13:31:39 +00:00
var toggle, active, next = getIndex(item, children, prev);
for (var i = 0; i < length; i++, next = (next + dir + length) % length) {
2019-04-22 13:31:39 +00:00
if (!matches(this.toggles[next], '.uk-disabled *, .uk-disabled, [disabled]')) {
toggle = this.toggles[next];
active = children[next];
break;
}
}
2019-04-22 13:31:39 +00:00
if (!active || prev >= 0 && hasClass(active, this.cls) || prev === next) {
return;
}
2019-04-22 13:31:39 +00:00
removeClass(children, this.cls);
addClass(active, this.cls);
attr(this.toggles, 'aria-expanded', false);
attr(toggle, 'aria-expanded', true);
this.connects.forEach(function (list) {
if (!hasPrev) {
this$1.toggleNow(list.children[next]);
} else {
this$1.toggleElement([list.children[prev], list.children[next]]);
}
});
}
}
};
var Tab = {
2017-11-11 04:33:51 +00:00
mixins: [Class],
extends: Switcher,
props: {
2019-04-22 13:31:39 +00:00
media: Boolean
},
data: {
media: 960,
attrItem: 'uk-tab-item'
},
connected: function() {
var cls = hasClass(this.$el, 'uk-tab-left')
? 'uk-tab-left'
: hasClass(this.$el, 'uk-tab-right')
? 'uk-tab-right'
: false;
if (cls) {
this.$create('toggle', this.$el, {cls: cls, mode: 'media', media: this.media});
}
}
};
var Toggle = {
2019-04-22 13:31:39 +00:00
mixins: [Media, Togglable],
args: 'target',
props: {
href: String,
target: null,
2019-04-22 13:31:39 +00:00
mode: 'list'
},
data: {
href: false,
target: false,
mode: 'click',
2019-04-22 13:31:39 +00:00
queued: true
},
computed: {
target: function(ref, $el) {
var href = ref.href;
var target = ref.target;
target = queryAll(target || href, $el);
return target.length && target || [$el];
}
},
2019-04-22 13:31:39 +00:00
connected: function() {
trigger(this.target, 'updatearia', [this]);
},
events: [
{
name: (pointerEnter + " " + pointerLeave),
filter: function() {
return includes(this.mode, 'hover');
},
handler: function(e) {
if (!isTouch(e)) {
this.toggle(("toggle" + (e.type === pointerEnter ? 'show' : 'hide')));
}
}
},
{
name: 'click',
filter: function() {
return includes(this.mode, 'click') || hasTouch && includes(this.mode, 'hover');
},
handler: function(e) {
// TODO better isToggled handling
var link;
2019-04-22 13:31:39 +00:00
if (closest(e.target, 'a[href="#"], a[href=""], button')
|| (link = closest(e.target, 'a[href]')) && (
this.cls
|| !isVisible(this.target)
|| link.hash && matches(this.target, link.hash)
)
) {
2019-04-22 13:31:39 +00:00
e.preventDefault();
}
this.toggle();
}
}
2019-04-22 13:31:39 +00:00
],
update: {
2019-04-22 13:31:39 +00:00
read: function() {
return includes(this.mode, 'media') && this.media
? {match: this.matchMedia}
: false;
},
write: function(ref) {
var match = ref.match;
var toggled = this.isToggled(this.target);
2019-04-22 13:31:39 +00:00
if (match ? !toggled : toggled) {
this.toggle();
}
},
2019-04-22 13:31:39 +00:00
events: ['resize']
},
methods: {
toggle: function(type) {
if (trigger(this.target, type || 'toggle', [this])) {
this.toggleElement(this.target);
}
}
}
};
function core (UIkit) {
// core components
UIkit.component('accordion', Accordion);
UIkit.component('alert', Alert);
UIkit.component('cover', Cover);
UIkit.component('drop', Drop);
UIkit.component('dropdown', Dropdown);
UIkit.component('formCustom', FormCustom);
UIkit.component('gif', Gif);
UIkit.component('grid', Grid);
UIkit.component('heightMatch', HeightMatch);
UIkit.component('heightViewport', HeightViewport);
UIkit.component('icon', Icon);
UIkit.component('img', Img);
UIkit.component('leader', Leader);
UIkit.component('margin', Margin);
UIkit.component('modal', Modal$1);
UIkit.component('nav', Nav);
UIkit.component('navbar', Navbar);
UIkit.component('offcanvas', Offcanvas);
UIkit.component('overflowAuto', OverflowAuto);
UIkit.component('responsive', Responsive);
UIkit.component('scroll', Scroll);
UIkit.component('scrollspy', Scrollspy);
UIkit.component('scrollspyNav', ScrollspyNav);
UIkit.component('sticky', Sticky);
2019-04-22 13:31:39 +00:00
UIkit.component('svg', Svg);
UIkit.component('switcher', Switcher);
UIkit.component('tab', Tab);
UIkit.component('toggle', Toggle);
UIkit.component('video', Video);
// Icon components
UIkit.component('close', Close);
UIkit.component('marker', IconComponent);
UIkit.component('navbarToggleIcon', IconComponent);
UIkit.component('overlayIcon', IconComponent);
UIkit.component('paginationNext', IconComponent);
UIkit.component('paginationPrevious', IconComponent);
UIkit.component('searchIcon', Search);
UIkit.component('slidenavNext', Slidenav);
UIkit.component('slidenavPrevious', Slidenav);
UIkit.component('spinner', Spinner);
UIkit.component('totop', IconComponent);
// core functionality
UIkit.use(Core);
}
2019-04-22 13:31:39 +00:00
UIkit.version = '3.1.2';
core(UIkit);
var Countdown = {
mixins: [Class],
2017-11-11 04:33:51 +00:00
props: {
date: String,
clsWrapper: String
2017-11-11 04:33:51 +00:00
},
data: {
date: '',
clsWrapper: '.uk-countdown-%unit%'
2017-11-11 04:33:51 +00:00
},
computed: {
date: function(ref) {
var date = ref.date;
2017-11-11 04:33:51 +00:00
return Date.parse(date);
},
2017-11-11 04:33:51 +00:00
days: function(ref, $el) {
var clsWrapper = ref.clsWrapper;
2017-11-11 04:33:51 +00:00
return $(clsWrapper.replace('%unit%', 'days'), $el);
},
2017-11-11 04:33:51 +00:00
hours: function(ref, $el) {
var clsWrapper = ref.clsWrapper;
2017-11-11 04:33:51 +00:00
return $(clsWrapper.replace('%unit%', 'hours'), $el);
},
2017-11-11 04:33:51 +00:00
minutes: function(ref, $el) {
var clsWrapper = ref.clsWrapper;
2017-11-11 04:33:51 +00:00
return $(clsWrapper.replace('%unit%', 'minutes'), $el);
},
seconds: function(ref, $el) {
var clsWrapper = ref.clsWrapper;
return $(clsWrapper.replace('%unit%', 'seconds'), $el);
},
units: function() {
var this$1 = this;
return ['days', 'hours', 'minutes', 'seconds'].filter(function (unit) { return this$1[unit]; });
2017-11-11 04:33:51 +00:00
}
},
connected: function() {
this.start();
},
disconnected: function() {
2017-11-11 04:33:51 +00:00
var this$1 = this;
this.stop();
this.units.forEach(function (unit) { return empty(this$1[unit]); });
},
events: [
{
name: 'visibilitychange',
el: document,
handler: function() {
if (document.hidden) {
this.stop();
} else {
this.start();
}
}
2017-11-11 04:33:51 +00:00
}
],
update: {
write: function() {
var this$1 = this;
var timespan = getTimeSpan(this.date);
if (timespan.total <= 0) {
this.stop();
timespan.days
= timespan.hours
= timespan.minutes
= timespan.seconds
= 0;
}
this.units.forEach(function (unit) {
var digits = String(Math.floor(timespan[unit]));
digits = digits.length < 2 ? ("0" + digits) : digits;
2017-11-11 04:33:51 +00:00
var el = this$1[unit];
if (el.textContent !== digits) {
digits = digits.split('');
2017-11-11 04:33:51 +00:00
if (digits.length !== el.children.length) {
html(el, digits.map(function () { return '<span></span>'; }).join(''));
}
2017-11-11 04:33:51 +00:00
digits.forEach(function (digit, i) { return el.children[i].textContent = digit; });
2017-11-11 04:33:51 +00:00
}
});
2017-11-11 04:33:51 +00:00
}
},
methods: {
2017-11-11 04:33:51 +00:00
start: function() {
var this$1 = this;
2017-11-11 04:33:51 +00:00
this.stop();
if (this.date && this.units.length) {
this.$emit();
this.timer = setInterval(function () { return this$1.$emit(); }, 1000);
2017-11-11 04:33:51 +00:00
}
},
stop: function() {
2017-11-11 04:33:51 +00:00
if (this.timer) {
clearInterval(this.timer);
this.timer = null;
2017-11-11 04:33:51 +00:00
}
}
}
2017-11-11 04:33:51 +00:00
};
2017-11-11 04:33:51 +00:00
function getTimeSpan(date) {
2017-11-11 04:33:51 +00:00
var total = date - Date.now();
return {
total: total,
seconds: total / 1000 % 60,
minutes: total / 1000 / 60 % 60,
hours: total / 1000 / 60 / 60 % 24,
days: total / 1000 / 60 / 60 / 24
};
}
2017-11-11 04:33:51 +00:00
var targetClass = 'uk-animation-target';
2017-11-11 04:33:51 +00:00
var Animate = {
2017-11-11 04:33:51 +00:00
props: {
animation: Number
},
2017-11-11 04:33:51 +00:00
data: {
animation: 150
},
computed: {
target: function() {
return this.$el;
}
},
2017-11-11 04:33:51 +00:00
methods: {
2017-11-11 04:33:51 +00:00
animate: function(action) {
var this$1 = this;
2017-11-11 04:33:51 +00:00
addStyle();
2017-11-11 04:33:51 +00:00
var children = toNodes(this.target.children);
var propsFrom = children.map(function (el) { return getProps(el, true); });
var oldHeight = height(this.target);
var oldScrollY = window.pageYOffset;
action();
Transition.cancel(this.target);
children.forEach(Transition.cancel);
reset(this.target);
this.$update(this.target);
fastdom.flush();
var newHeight = height(this.target);
children = children.concat(toNodes(this.target.children).filter(function (el) { return !includes(children, el); }));
var propsTo = children.map(function (el, i) { return el.parentNode && i in propsFrom
? propsFrom[i]
? isVisible(el)
? getPositionWithMargin(el)
: {opacity: 0}
: {opacity: isVisible(el) ? 1 : 0}
: false; }
);
propsFrom = propsTo.map(function (props, i) {
var from = children[i].parentNode === this$1.target
? propsFrom[i] || getProps(children[i])
: false;
if (from) {
if (!props) {
delete from.opacity;
} else if (!('opacity' in props)) {
var opacity = from.opacity;
if (opacity % 1) {
props.opacity = 1;
} else {
delete from.opacity;
}
2017-11-11 04:33:51 +00:00
}
}
return from;
});
addClass(this.target, targetClass);
children.forEach(function (el, i) { return propsFrom[i] && css(el, propsFrom[i]); });
css(this.target, 'height', oldHeight);
scrollTop(window, oldScrollY);
return Promise.all(children.map(function (el, i) { return propsFrom[i] && propsTo[i]
? Transition.start(el, propsTo[i], this$1.animation, 'ease')
: Promise.resolve(); }
).concat(Transition.start(this.target, {height: newHeight}, this.animation, 'ease'))).then(function () {
children.forEach(function (el, i) { return css(el, {display: propsTo[i].opacity === 0 ? 'none' : '', zIndex: ''}); });
reset(this$1.target);
this$1.$update(this$1.target);
fastdom.flush(); // needed for IE11
}, noop);
}
}
};
function getProps(el, opacity) {
var zIndex = css(el, 'zIndex');
return isVisible(el)
? assign({
display: '',
opacity: opacity ? css(el, 'opacity') : '0',
pointerEvents: 'none',
position: 'absolute',
zIndex: zIndex === 'auto' ? index(el) : zIndex
}, getPositionWithMargin(el))
: false;
}
function reset(el) {
css(el.children, {
height: '',
left: '',
opacity: '',
pointerEvents: '',
position: '',
top: '',
width: ''
});
removeClass(el, targetClass);
css(el, 'height', '');
}
function getPositionWithMargin(el) {
var ref = el.getBoundingClientRect();
2019-04-22 13:31:39 +00:00
var height = ref.height;
var width = ref.width;
var ref$1 = position(el);
var top = ref$1.top;
var left = ref$1.left;
top += toFloat(css(el, 'marginTop'));
2019-04-22 13:31:39 +00:00
return {top: top, left: left, height: height, width: width};
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var style;
function addStyle() {
2019-04-22 13:31:39 +00:00
if (style) {
return;
}
2019-04-22 13:31:39 +00:00
style = append(document.head, '<style>').sheet;
style.insertRule(
("." + targetClass + " > * {\n margin-top: 0 !important;\n transform: none !important;\n }"), 0
);
}
2017-11-11 04:33:51 +00:00
var Filter = {
2017-11-11 04:33:51 +00:00
mixins: [Animate],
2017-11-11 04:33:51 +00:00
args: 'target',
2017-11-11 04:33:51 +00:00
props: {
target: Boolean,
selActive: Boolean
},
2017-11-11 04:33:51 +00:00
data: {
target: null,
selActive: false,
attrItem: 'uk-filter-control',
cls: 'uk-active',
animation: 250
},
2017-11-11 04:33:51 +00:00
computed: {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
toggles: {
get: function(ref, $el) {
var attrItem = ref.attrItem;
return $$(("[" + (this.attrItem) + "],[data-" + (this.attrItem) + "]"), $el);
},
watch: function() {
this.updateState();
}
2017-11-11 04:33:51 +00:00
},
2017-11-11 04:33:51 +00:00
target: function(ref, $el) {
var target = ref.target;
2017-11-11 04:33:51 +00:00
return $(target, $el);
2019-04-22 13:31:39 +00:00
},
children: {
get: function() {
return toNodes(this.target.children);
},
watch: function(list, old) {
if (!isEqualList(list, old)) {
this.updateState();
}
}
}
2017-11-11 04:33:51 +00:00
},
2017-11-11 04:33:51 +00:00
events: [
2017-11-11 04:33:51 +00:00
{
name: 'click',
2017-11-11 04:33:51 +00:00
delegate: function() {
return ("[" + (this.attrItem) + "],[data-" + (this.attrItem) + "]");
},
2017-11-11 04:33:51 +00:00
handler: function(e) {
2017-11-11 04:33:51 +00:00
e.preventDefault();
this.apply(e.current);
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
],
2017-11-11 04:33:51 +00:00
connected: function() {
var this$1 = this;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
this.updateState();
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (this.selActive !== false) {
var actives = $$(this.selActive, this.$el);
this.toggles.forEach(function (el) { return toggleClass(el, this$1.cls, includes(actives, el)); });
}
2017-11-11 04:33:51 +00:00
},
2017-11-11 04:33:51 +00:00
methods: {
apply: function(el) {
this.setState(mergeState(el, this.attrItem, this.getState()));
},
2017-11-11 04:33:51 +00:00
getState: function() {
var this$1 = this;
2017-11-11 04:33:51 +00:00
return this.toggles
.filter(function (item) { return hasClass(item, this$1.cls); })
.reduce(function (state, el) { return mergeState(el, this$1.attrItem, state); }, {filter: {'': ''}, sort: []});
2017-11-11 04:33:51 +00:00
},
2019-04-22 13:31:39 +00:00
setState: function(state, animate) {
var this$1 = this;
2019-04-22 13:31:39 +00:00
if ( animate === void 0 ) animate = true;
2017-11-11 04:33:51 +00:00
state = assign({filter: {'': ''}, sort: []}, state);
2017-11-11 04:33:51 +00:00
trigger(this.$el, 'beforeFilter', [this, state]);
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var ref = this;
var children = ref.children;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
this.toggles.forEach(function (el) { return toggleClass(el, this$1.cls, !!matchFilter(el, this$1.attrItem, state)); });
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var apply = function () {
2017-11-11 04:33:51 +00:00
var selector = getSelector(state);
2017-11-11 04:33:51 +00:00
children.forEach(function (el) { return css(el, 'display', selector && !matches(el, selector) ? 'none' : ''); });
2017-11-11 04:33:51 +00:00
var ref = state.sort;
var sort = ref[0];
var order = ref[1];
if (sort) {
var sorted = sortItems(children, sort, order);
2019-04-22 13:31:39 +00:00
if (!isEqual(sorted, children)) {
sorted.forEach(function (el) { return append(this$1.target, el); });
}
2017-11-11 04:33:51 +00:00
}
};
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (animate) {
this.animate(apply).then(function () { return trigger(this$1.$el, 'afterFilter', [this$1]); });
} else {
2019-04-22 13:31:39 +00:00
apply();
trigger(this.$el, 'afterFilter', [this]);
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
},
updateState: function() {
var this$1 = this;
fastdom.write(function () { return this$1.setState(this$1.getState(), false); });
2017-11-11 04:33:51 +00:00
}
}
};
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function getFilter(el, attr) {
return parseOptions(data(el, attr), ['filter']);
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function mergeState(el, attr, state) {
var filterBy = getFilter(el, attr);
var filter = filterBy.filter;
var group = filterBy.group;
var sort = filterBy.sort;
var order = filterBy.order; if ( order === void 0 ) order = 'asc';
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (filter || isUndefined(sort)) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (group) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (filter) {
delete state.filter[''];
2019-04-22 13:31:39 +00:00
state.filter[group] = filter;
} else {
2019-04-22 13:31:39 +00:00
delete state.filter[group];
if (isEmpty(state.filter) || '' in state.filter) {
state.filter = {'': filter || ''};
}
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
} else {
state.filter = {'': filter || ''};
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
}
if (!isUndefined(sort)) {
state.sort = [sort, order];
}
2017-11-11 04:33:51 +00:00
return state;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function matchFilter(el, attr, ref) {
var stateFilter = ref.filter; if ( stateFilter === void 0 ) stateFilter = {'': ''};
var ref_sort = ref.sort;
var stateSort = ref_sort[0];
var stateOrder = ref_sort[1];
2019-04-22 13:31:39 +00:00
var ref$1 = getFilter(el, attr);
var filter = ref$1.filter; if ( filter === void 0 ) filter = '';
var group = ref$1.group; if ( group === void 0 ) group = '';
var sort = ref$1.sort;
var order = ref$1.order; if ( order === void 0 ) order = 'asc';
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (isUndefined(sort)) {
return group in stateFilter && filter === stateFilter[group]
|| !filter && group && !(group in stateFilter) && !stateFilter[''];
} else {
return stateSort === sort && stateOrder === order;
}
// filter = isUndefined(sort) ? filter || '' : filter;
// sort = isUndefined(filter) ? sort || '' : sort;
//
// return (isUndefined(filter) || group in stateFilter && filter === stateFilter[group])
// && (isUndefined(sort) || stateSort === sort && stateOrder === order);
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function isEqualList(listA, listB) {
return listA.length === listB.length
2019-04-22 13:31:39 +00:00
&& listA.every(function (el) { return ~listB.indexOf(el); });
}
2017-11-11 04:33:51 +00:00
function getSelector(ref) {
2019-04-22 13:31:39 +00:00
var filter = ref.filter;
2017-11-11 04:33:51 +00:00
var selector = '';
2019-04-22 13:31:39 +00:00
each(filter, function (value) { return selector += value || ''; });
return selector;
}
2017-11-11 04:33:51 +00:00
function sortItems(nodes, sort, order) {
2019-04-22 13:31:39 +00:00
return assign([], nodes).sort(function (a, b) { return data(a, sort).localeCompare(data(b, sort), undefined, {numeric: true}) * (order === 'asc' || -1); });
}
2017-11-11 04:33:51 +00:00
var Animations = {
2017-11-11 04:33:51 +00:00
slide: {
2017-11-11 04:33:51 +00:00
show: function(dir) {
return [
{transform: translate(dir * -100)},
{transform: translate()}
];
},
2017-11-11 04:33:51 +00:00
percent: function(current) {
return translated(current);
},
2017-11-11 04:33:51 +00:00
translate: function(percent, dir) {
return [
{transform: translate(dir * -100 * percent)},
{transform: translate(dir * 100 * (1 - percent))}
];
}
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
};
2017-11-11 04:33:51 +00:00
function translated(el) {
return Math.abs(css(el, 'transform').split(',')[4] / el.offsetWidth) || 0;
}
2017-11-11 04:33:51 +00:00
function translate(value, unit) {
if ( value === void 0 ) value = 0;
if ( unit === void 0 ) unit = '%';
2017-11-11 04:33:51 +00:00
return ("translateX(" + value + (value ? unit : '') + ")"); // currently not translate3d to support IE, translate3d within translate3d does not work while transitioning
}
2017-11-11 04:33:51 +00:00
function scale3d(value) {
return ("scale3d(" + value + ", " + value + ", 1)");
}
2017-11-11 04:33:51 +00:00
var Animations$1 = assign({}, Animations, {
2017-11-11 04:33:51 +00:00
fade: {
2017-11-11 04:33:51 +00:00
show: function() {
return [
{opacity: 0},
{opacity: 1}
];
},
2017-11-11 04:33:51 +00:00
percent: function(current) {
return 1 - css(current, 'opacity');
},
2017-11-11 04:33:51 +00:00
translate: function(percent) {
return [
{opacity: 1 - percent},
{opacity: percent}
];
}
2017-11-11 04:33:51 +00:00
},
2017-11-11 04:33:51 +00:00
scale: {
2017-11-11 04:33:51 +00:00
show: function() {
return [
{opacity: 0, transform: scale3d(1 - .2)},
{opacity: 1, transform: scale3d(1)}
];
},
2017-11-11 04:33:51 +00:00
percent: function(current) {
return 1 - css(current, 'opacity');
},
2017-11-11 04:33:51 +00:00
translate: function(percent) {
return [
{opacity: 1 - percent, transform: scale3d(1 - .2 * percent)},
{opacity: percent, transform: scale3d(1 - .2 + .2 * percent)}
];
}
2017-11-11 04:33:51 +00:00
}
});
2017-11-11 04:33:51 +00:00
function Transitioner(prev, next, dir, ref) {
var animation = ref.animation;
var easing = ref.easing;
2017-11-11 04:33:51 +00:00
var percent = animation.percent;
var translate = animation.translate;
var show = animation.show; if ( show === void 0 ) show = noop;
var props = show(dir);
var deferred = new Deferred();
2017-11-11 04:33:51 +00:00
return {
2017-11-11 04:33:51 +00:00
dir: dir,
2017-11-11 04:33:51 +00:00
show: function(duration, percent, linear) {
var this$1 = this;
if ( percent === void 0 ) percent = 0;
2017-11-11 04:33:51 +00:00
var timing = linear ? 'linear' : easing;
duration -= Math.round(duration * clamp(percent, -1, 1));
2017-11-11 04:33:51 +00:00
this.translate(percent);
2017-11-11 04:33:51 +00:00
triggerUpdate(next, 'itemin', {percent: percent, duration: duration, timing: timing, dir: dir});
triggerUpdate(prev, 'itemout', {percent: 1 - percent, duration: duration, timing: timing, dir: dir});
2017-11-11 04:33:51 +00:00
Promise.all([
Transition.start(next, props[1], duration, timing),
Transition.start(prev, props[0], duration, timing)
]).then(function () {
this$1.reset();
deferred.resolve();
}, noop);
2017-11-11 04:33:51 +00:00
return deferred.promise;
},
2017-11-11 04:33:51 +00:00
stop: function() {
return Transition.stop([next, prev]);
},
2017-11-11 04:33:51 +00:00
cancel: function() {
Transition.cancel([next, prev]);
},
2017-11-11 04:33:51 +00:00
reset: function() {
for (var prop in props[0]) {
css([next, prev], prop, '');
}
},
2017-11-11 04:33:51 +00:00
forward: function(duration, percent) {
if ( percent === void 0 ) percent = this.percent();
2017-11-11 04:33:51 +00:00
Transition.cancel([next, prev]);
return this.show(duration, percent, true);
2017-11-11 04:33:51 +00:00
},
2017-11-11 04:33:51 +00:00
translate: function(percent) {
2017-11-11 04:33:51 +00:00
this.reset();
2017-11-11 04:33:51 +00:00
var props = translate(percent, dir);
css(next, props[1]);
css(prev, props[0]);
triggerUpdate(next, 'itemtranslatein', {percent: percent, dir: dir});
triggerUpdate(prev, 'itemtranslateout', {percent: 1 - percent, dir: dir});
2017-11-11 04:33:51 +00:00
},
2017-11-11 04:33:51 +00:00
percent: function() {
return percent(prev || next, next, dir);
},
2017-11-11 04:33:51 +00:00
getDistance: function() {
2019-04-22 13:31:39 +00:00
return prev && prev.offsetWidth;
2017-11-11 04:33:51 +00:00
}
};
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
function triggerUpdate(el, type, data) {
trigger(el, createEvent(type, false, false, data));
}
2017-11-11 04:33:51 +00:00
var SliderAutoplay = {
2017-11-11 04:33:51 +00:00
props: {
autoplay: Boolean,
autoplayInterval: Number,
pauseOnHover: Boolean
2017-11-11 04:33:51 +00:00
},
data: {
autoplay: false,
autoplayInterval: 7000,
pauseOnHover: true
2017-11-11 04:33:51 +00:00
},
connected: function() {
2019-04-22 13:31:39 +00:00
this.autoplay && this.startAutoplay();
},
2017-11-11 04:33:51 +00:00
disconnected: function() {
this.stopAutoplay();
2017-11-11 04:33:51 +00:00
},
2019-04-22 13:31:39 +00:00
update: function() {
attr(this.slides, 'tabindex', '-1');
},
2017-11-11 04:33:51 +00:00
events: [
{
name: 'visibilitychange',
2017-11-11 04:33:51 +00:00
el: document,
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
filter: function() {
return this.autoplay;
},
handler: function() {
if (document.hidden) {
this.stopAutoplay();
} else {
this.startAutoplay();
}
2017-11-11 04:33:51 +00:00
}
},
{
name: 'mouseenter',
filter: function() {
2019-04-22 13:31:39 +00:00
return this.autoplay && this.pauseOnHover;
2017-11-11 04:33:51 +00:00
},
handler: function() {
this.isHovering = true;
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
},
{
name: 'mouseleave',
2017-11-11 04:33:51 +00:00
filter: function() {
2019-04-22 13:31:39 +00:00
return this.autoplay && this.pauseOnHover;
2017-11-11 04:33:51 +00:00
},
handler: function() {
this.isHovering = false;
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
}
],
methods: {
startAutoplay: function() {
2017-11-11 04:33:51 +00:00
var this$1 = this;
this.stopAutoplay();
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
this.interval = setInterval(
function () { return !within(document.activeElement, this$1.$el)
&& !this$1.isHovering
&& !this$1.stack.length
&& this$1.show('next'); },
this.autoplayInterval
);
2017-11-11 04:33:51 +00:00
},
2017-11-11 04:33:51 +00:00
stopAutoplay: function() {
2019-04-22 13:31:39 +00:00
this.interval && clearInterval(this.interval);
2017-11-11 04:33:51 +00:00
}
}
};
2017-11-11 04:33:51 +00:00
var SliderDrag = {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
props: {
draggable: Boolean
},
data: {
2019-04-22 13:31:39 +00:00
draggable: true,
threshold: 10
2017-11-11 04:33:51 +00:00
},
2019-04-22 13:31:39 +00:00
created: function() {
var this$1 = this;
2017-11-11 04:33:51 +00:00
['start', 'move', 'end'].forEach(function (key) {
2017-11-11 04:33:51 +00:00
var fn = this$1[key];
this$1[key] = function (e) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var pos = getEventPos(e).x * (isRtl ? -1 : 1);
2017-11-11 04:33:51 +00:00
this$1.prevPos = pos !== this$1.pos ? this$1.pos : this$1.prevPos;
this$1.pos = pos;
2017-11-11 04:33:51 +00:00
fn(e);
};
2017-11-11 04:33:51 +00:00
});
2017-11-11 04:33:51 +00:00
},
2017-11-11 04:33:51 +00:00
events: [
2017-11-11 04:33:51 +00:00
{
2017-11-11 04:33:51 +00:00
name: pointerDown,
2017-11-11 04:33:51 +00:00
delegate: function() {
2019-04-22 13:31:39 +00:00
return this.selSlides;
},
2017-11-11 04:33:51 +00:00
handler: function(e) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (!this.draggable
|| !isTouch(e) && hasTextNodesOnly(e.target)
|| e.button > 0
|| this.length < 2
) {
return;
}
2017-11-11 04:33:51 +00:00
this.start(e);
}
2017-11-11 04:33:51 +00:00
},
2017-11-11 04:33:51 +00:00
{
// Workaround for iOS 11 bug: https://bugs.webkit.org/show_bug.cgi?id=184250
2017-11-11 04:33:51 +00:00
name: 'touchmove',
passive: false,
handler: 'move',
delegate: function() {
2019-04-22 13:31:39 +00:00
return this.selSlides;
2017-11-11 04:33:51 +00:00
}
},
{
name: 'dragstart',
2017-11-11 04:33:51 +00:00
handler: function(e) {
e.preventDefault();
}
}
2017-11-11 04:33:51 +00:00
],
2017-11-11 04:33:51 +00:00
methods: {
2017-11-11 04:33:51 +00:00
start: function() {
var this$1 = this;
2017-11-11 04:33:51 +00:00
this.drag = this.pos;
2017-11-11 04:33:51 +00:00
if (this._transitioner) {
this.percent = this._transitioner.percent();
this.drag += this._transitioner.getDistance() * this.percent * this.dir;
this._transitioner.cancel();
this._transitioner.translate(this.percent);
2017-11-11 04:33:51 +00:00
this.dragging = true;
2017-11-11 04:33:51 +00:00
this.stack = [];
2017-11-11 04:33:51 +00:00
} else {
this.prevIndex = this.index;
2017-11-11 04:33:51 +00:00
}
// See above workaround notice
2019-04-22 13:31:39 +00:00
var off = pointerMove !== 'touchmove'
? on(document, pointerMove, this.move, {passive: false})
: noop;
this.unbindMove = function () {
2019-04-22 13:31:39 +00:00
off();
this$1.unbindMove = null;
};
on(window, 'scroll', this.unbindMove);
on(document, pointerUp, this.end, true);
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
css(this.list, 'userSelect', 'none');
2017-11-11 04:33:51 +00:00
},
move: function(e) {
var this$1 = this;
2017-11-11 04:33:51 +00:00
// See above workaround notice
if (!this.unbindMove) {
return;
}
2017-11-11 04:33:51 +00:00
var distance = this.pos - this.drag;
if (distance === 0 || this.prevPos === this.pos || !this.dragging && Math.abs(distance) < this.threshold) {
return;
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
css(this.list, 'pointerEvents', 'none');
e.cancelable && e.preventDefault();
2017-11-11 04:33:51 +00:00
this.dragging = true;
this.dir = (distance < 0 ? 1 : -1);
2017-11-11 04:33:51 +00:00
var ref = this;
var slides = ref.slides;
var ref$1 = this;
var prevIndex = ref$1.prevIndex;
var dis = Math.abs(distance);
var nextIndex = this.getIndex(prevIndex + this.dir, prevIndex);
2019-04-22 13:31:39 +00:00
var width = this._getDistance(prevIndex, nextIndex) || slides[prevIndex].offsetWidth;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
while (nextIndex !== prevIndex && dis > width) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
this.drag -= width * this.dir;
2017-11-11 04:33:51 +00:00
prevIndex = nextIndex;
2019-04-22 13:31:39 +00:00
dis -= width;
nextIndex = this.getIndex(prevIndex + this.dir, prevIndex);
width = this._getDistance(prevIndex, nextIndex) || slides[prevIndex].offsetWidth;
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
this.percent = dis / width;
2017-11-11 04:33:51 +00:00
var prev = slides[prevIndex];
var next = slides[nextIndex];
var changed = this.index !== nextIndex;
var edge = prevIndex === nextIndex;
2017-11-11 04:33:51 +00:00
var itemShown;
2017-11-11 04:33:51 +00:00
[this.index, this.prevIndex].filter(function (i) { return !includes([nextIndex, prevIndex], i); }).forEach(function (i) {
trigger(slides[i], 'itemhidden', [this$1]);
2017-11-11 04:33:51 +00:00
if (edge) {
itemShown = true;
this$1.prevIndex = prevIndex;
}
2017-11-11 04:33:51 +00:00
});
2017-11-11 04:33:51 +00:00
if (this.index === prevIndex && this.prevIndex !== prevIndex || itemShown) {
trigger(slides[this.index], 'itemshown', [this]);
}
if (changed) {
this.prevIndex = prevIndex;
this.index = nextIndex;
!edge && trigger(prev, 'beforeitemhide', [this]);
trigger(next, 'beforeitemshow', [this]);
2017-11-11 04:33:51 +00:00
}
this._transitioner = this._translate(Math.abs(this.percent), prev, !edge && next);
if (changed) {
!edge && trigger(prev, 'itemhide', [this]);
trigger(next, 'itemshow', [this]);
2017-11-11 04:33:51 +00:00
}
},
end: function() {
2017-11-11 04:33:51 +00:00
off(window, 'scroll', this.unbindMove);
this.unbindMove && this.unbindMove();
off(document, pointerUp, this.end, true);
2017-11-11 04:33:51 +00:00
if (this.dragging) {
2017-11-11 04:33:51 +00:00
this.dragging = null;
2017-11-11 04:33:51 +00:00
if (this.index === this.prevIndex) {
this.percent = 1 - this.percent;
this.dir *= -1;
this._show(false, this.index, true);
this._transitioner = null;
} else {
2017-11-11 04:33:51 +00:00
var dirChange = (isRtl ? this.dir * (isRtl ? 1 : -1) : this.dir) < 0 === this.prevPos > this.pos;
this.index = dirChange ? this.index : this.prevIndex;
2017-11-11 04:33:51 +00:00
if (dirChange) {
this.percent = 1 - this.percent;
}
2017-11-11 04:33:51 +00:00
this.show(this.dir > 0 && !dirChange || this.dir < 0 && dirChange ? 'next' : 'previous', true);
}
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
css(this.list, {userSelect: '', pointerEvents: ''});
this.drag
= this.percent
= null;
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
};
2017-11-11 04:33:51 +00:00
function hasTextNodesOnly(el) {
return !el.children.length && el.childNodes.length;
}
2017-11-11 04:33:51 +00:00
var SliderNav = {
2017-11-11 04:33:51 +00:00
data: {
selNav: false
},
2017-11-11 04:33:51 +00:00
computed: {
2017-11-11 04:33:51 +00:00
nav: function(ref, $el) {
var selNav = ref.selNav;
return $(selNav, $el);
2017-11-11 04:33:51 +00:00
},
2019-04-22 13:31:39 +00:00
selNavItem: function(ref) {
var attrItem = ref.attrItem;
2017-11-11 04:33:51 +00:00
return ("[" + attrItem + "],[data-" + attrItem + "]");
2017-11-11 04:33:51 +00:00
},
navItems: function(_, $el) {
2019-04-22 13:31:39 +00:00
return $$(this.selNavItem, $el);
2017-11-11 04:33:51 +00:00
}
},
2019-04-22 13:31:39 +00:00
update: {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
write: function() {
var this$1 = this;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (this.nav && this.length !== this.nav.children.length) {
html(this.nav, this.slides.map(function (_, i) { return ("<li " + (this$1.attrItem) + "=\"" + i + "\"><a href=\"#\"></a></li>"); }).join(''));
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
toggleClass($$(this.selNavItem, this.$el).concat(this.nav), 'uk-hidden', !this.maxIndex);
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
this.updateNav();
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
},
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
events: ['resize']
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
},
2017-11-11 04:33:51 +00:00
events: [
2017-11-11 04:33:51 +00:00
{
2017-11-11 04:33:51 +00:00
name: 'click',
2017-11-11 04:33:51 +00:00
delegate: function() {
2019-04-22 13:31:39 +00:00
return this.selNavItem;
},
2017-11-11 04:33:51 +00:00
handler: function(e) {
e.preventDefault();
this.show(data(e.current, this.attrItem));
}
2017-11-11 04:33:51 +00:00
},
2017-11-11 04:33:51 +00:00
{
2017-11-11 04:33:51 +00:00
name: 'itemshow',
handler: 'updateNav'
2017-11-11 04:33:51 +00:00
}
],
2017-11-11 04:33:51 +00:00
methods: {
updateNav: function() {
2017-11-11 04:33:51 +00:00
var this$1 = this;
var i = this.getValidIndex();
this.navItems.forEach(function (el) {
2017-11-11 04:33:51 +00:00
var cmd = data(el, this$1.attrItem);
2017-11-11 04:33:51 +00:00
toggleClass(el, this$1.clsActive, toNumber(cmd) === i);
toggleClass(el, 'uk-invisible', this$1.finite && (cmd === 'previous' && i === 0 || cmd === 'next' && i >= this$1.maxIndex));
});
2017-11-11 04:33:51 +00:00
}
}
};
2017-11-11 04:33:51 +00:00
var Slider = {
2017-11-11 04:33:51 +00:00
mixins: [SliderAutoplay, SliderDrag, SliderNav],
2017-11-11 04:33:51 +00:00
props: {
clsActivated: Boolean,
easing: String,
index: Number,
finite: Boolean,
velocity: Number
},
2017-11-11 04:33:51 +00:00
data: function () { return ({
easing: 'ease',
finite: false,
velocity: 1,
index: 0,
stack: [],
percent: 0,
clsActive: 'uk-active',
clsActivated: false,
Transitioner: false,
transitionOptions: {}
}); },
2017-11-11 04:33:51 +00:00
computed: {
2017-11-11 04:33:51 +00:00
duration: function(ref, $el) {
var velocity = ref.velocity;
2017-11-11 04:33:51 +00:00
return speedUp($el.offsetWidth / velocity);
},
2017-11-11 04:33:51 +00:00
length: function() {
return this.slides.length;
},
2017-11-11 04:33:51 +00:00
list: function(ref, $el) {
var selList = ref.selList;
2017-11-11 04:33:51 +00:00
return $(selList, $el);
},
2017-11-11 04:33:51 +00:00
maxIndex: function() {
return this.length - 1;
},
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
selSlides: function(ref) {
var selList = ref.selList;
2017-11-11 04:33:51 +00:00
return (selList + " > *");
2017-11-11 04:33:51 +00:00
},
slides: function() {
return toNodes(this.list.children);
2017-11-11 04:33:51 +00:00
}
},
events: {
itemshown: function() {
this.$update(this.list);
}
2017-11-11 04:33:51 +00:00
},
methods: {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
show: function(index, force) {
var this$1 = this;
if ( force === void 0 ) force = false;
2017-11-11 04:33:51 +00:00
if (this.dragging || !this.length) {
return;
}
2017-11-11 04:33:51 +00:00
var ref = this;
var stack = ref.stack;
var queueIndex = force ? 0 : stack.length;
var reset = function () {
stack.splice(queueIndex, 1);
2017-11-11 04:33:51 +00:00
if (stack.length) {
this$1.show(stack.shift(), true);
}
};
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
stack[force ? 'unshift' : 'push'](index);
2017-11-11 04:33:51 +00:00
if (!force && stack.length > 1) {
2017-11-11 04:33:51 +00:00
if (stack.length === 2) {
this._transitioner.forward(Math.min(this.duration, 200));
}
2017-11-11 04:33:51 +00:00
return;
}
2017-11-11 04:33:51 +00:00
var prevIndex = this.index;
var prev = hasClass(this.slides, this.clsActive) && this.slides[prevIndex];
2019-04-22 13:31:39 +00:00
var nextIndex = this.getIndex(index, this.index);
var next = this.slides[nextIndex];
2017-11-11 04:33:51 +00:00
if (prev === next) {
reset();
return;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
this.dir = getDirection(index, prevIndex);
this.prevIndex = prevIndex;
this.index = nextIndex;
2017-11-11 04:33:51 +00:00
prev && trigger(prev, 'beforeitemhide', [this]);
if (!trigger(next, 'beforeitemshow', [this, prev])) {
this.index = this.prevIndex;
reset();
return;
}
2017-11-11 04:33:51 +00:00
var promise = this._show(prev, next, force).then(function () {
2017-11-11 04:33:51 +00:00
prev && trigger(prev, 'itemhidden', [this$1]);
trigger(next, 'itemshown', [this$1]);
2017-11-11 04:33:51 +00:00
return new Promise(function (resolve) {
fastdom.write(function () {
stack.shift();
if (stack.length) {
this$1.show(stack.shift(), true);
} else {
this$1._transitioner = null;
}
resolve();
});
});
2017-11-11 04:33:51 +00:00
});
2017-11-11 04:33:51 +00:00
prev && trigger(prev, 'itemhide', [this]);
trigger(next, 'itemshow', [this]);
2017-11-11 04:33:51 +00:00
return promise;
2017-11-11 04:33:51 +00:00
},
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
getIndex: function(index, prev) {
if ( index === void 0 ) index = this.index;
if ( prev === void 0 ) prev = this.index;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return clamp(getIndex(index, this.slides, prev, this.finite), 0, this.maxIndex);
},
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
getValidIndex: function(index, prevIndex) {
if ( index === void 0 ) index = this.index;
if ( prevIndex === void 0 ) prevIndex = this.prevIndex;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return this.getIndex(index, prevIndex);
},
2017-11-11 04:33:51 +00:00
_show: function(prev, next, force) {
2017-11-11 04:33:51 +00:00
this._transitioner = this._getTransitioner(
prev,
next,
this.dir,
assign({
easing: force
? next.offsetWidth < 600
? 'cubic-bezier(0.25, 0.46, 0.45, 0.94)' /* easeOutQuad */
: 'cubic-bezier(0.165, 0.84, 0.44, 1)' /* easeOutQuart */
: this.easing
}, this.transitionOptions)
);
2017-11-11 04:33:51 +00:00
if (!force && !prev) {
this._transitioner.translate(1);
return Promise.resolve();
}
2017-11-11 04:33:51 +00:00
var ref = this.stack;
var length = ref.length;
return this._transitioner[length > 1 ? 'forward' : 'show'](length > 1 ? Math.min(this.duration, 75 + 75 / (length - 1)) : this.duration, this.percent);
2017-11-11 04:33:51 +00:00
},
2017-11-11 04:33:51 +00:00
_getDistance: function(prev, next) {
return new this._getTransitioner(prev, prev !== next && next).getDistance();
2017-11-11 04:33:51 +00:00
},
_translate: function(percent, prev, next) {
if ( prev === void 0 ) prev = this.prevIndex;
if ( next === void 0 ) next = this.index;
var transitioner = this._getTransitioner(prev !== next ? prev : false, next);
transitioner.translate(percent);
return transitioner;
2017-11-11 04:33:51 +00:00
},
_getTransitioner: function(prev, next, dir, options) {
if ( prev === void 0 ) prev = this.prevIndex;
if ( next === void 0 ) next = this.index;
if ( dir === void 0 ) dir = this.dir || 1;
if ( options === void 0 ) options = this.transitionOptions;
2017-11-11 04:33:51 +00:00
return new this.Transitioner(
isNumber(prev) ? this.slides[prev] : prev,
isNumber(next) ? this.slides[next] : next,
dir * (isRtl ? -1 : 1),
options
);
}
2017-11-11 04:33:51 +00:00
}
};
2019-04-22 13:31:39 +00:00
function getDirection(index, prevIndex) {
return index === 'next'
? 1
2019-04-22 13:31:39 +00:00
: index === 'previous'
? -1
2019-04-22 13:31:39 +00:00
: index < prevIndex
? -1
: 1;
}
function speedUp(x) {
return .5 * x + 300; // parabola through (400,500; 600,600; 1800,1200)
}
var Slideshow = {
mixins: [Slider],
2017-11-11 04:33:51 +00:00
props: {
animation: String
2017-11-11 04:33:51 +00:00
},
data: {
2017-11-11 04:33:51 +00:00
animation: 'slide',
clsActivated: 'uk-transition-active',
Animations: Animations,
Transitioner: Transitioner
2017-11-11 04:33:51 +00:00
},
computed: {
animation: function(ref) {
var animation = ref.animation;
2019-04-22 13:31:39 +00:00
var Animations = ref.Animations;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return assign(animation in Animations ? Animations[animation] : Animations.slide, {name: animation});
2017-11-11 04:33:51 +00:00
},
transitionOptions: function() {
return {animation: this.animation};
}
},
events: {
'itemshow itemhide itemshown itemhidden': function(ref) {
var target = ref.target;
this.$update(target);
2017-11-11 04:33:51 +00:00
},
itemshow: function() {
isNumber(this.prevIndex) && fastdom.flush(); // iOS 10+ will honor the video.play only if called from a gesture handler
},
2017-11-11 04:33:51 +00:00
beforeitemshow: function(ref) {
var target = ref.target;
addClass(target, this.clsActive);
2017-11-11 04:33:51 +00:00
},
itemshown: function(ref) {
var target = ref.target;
2017-11-11 04:33:51 +00:00
addClass(target, this.clsActivated);
},
2017-11-11 04:33:51 +00:00
itemhidden: function(ref) {
var target = ref.target;
2017-11-11 04:33:51 +00:00
removeClass(target, this.clsActive, this.clsActivated);
}
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
};
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var lightboxPanel = {
2017-11-11 04:33:51 +00:00
mixins: [Container, Modal, Togglable, Slideshow],
2017-11-11 04:33:51 +00:00
functional: true,
2017-11-11 04:33:51 +00:00
props: {
delayControls: Number,
preload: Number,
videoAutoplay: Boolean,
template: String
2017-11-11 04:33:51 +00:00
},
data: function () { return ({
preload: 1,
videoAutoplay: false,
delayControls: 3000,
items: [],
cls: 'uk-open',
clsPage: 'uk-lightbox-page',
selList: '.uk-lightbox-items',
attrItem: 'uk-lightbox-item',
selClose: '.uk-close-large',
pauseOnHover: false,
velocity: 2,
Animations: Animations$1,
template: "<div class=\"uk-lightbox uk-overflow-hidden\"> <ul class=\"uk-lightbox-items\"></ul> <div class=\"uk-lightbox-toolbar uk-position-top uk-text-right uk-transition-slide-top uk-transition-opaque\"> <button class=\"uk-lightbox-toolbar-icon uk-close-large\" type=\"button\" uk-close></button> </div> <a class=\"uk-lightbox-button uk-position-center-left uk-position-medium uk-transition-fade\" href=\"#\" uk-slidenav-previous uk-lightbox-item=\"previous\"></a> <a class=\"uk-lightbox-button uk-position-center-right uk-position-medium uk-transition-fade\" href=\"#\" uk-slidenav-next uk-lightbox-item=\"next\"></a> <div class=\"uk-lightbox-toolbar uk-lightbox-caption uk-position-bottom uk-text-center uk-transition-slide-bottom uk-transition-opaque\"></div> </div>"
}); },
2017-11-11 04:33:51 +00:00
created: function() {
var this$1 = this;
2017-11-11 04:33:51 +00:00
this.$mount(append(this.container, this.template));
2017-11-11 04:33:51 +00:00
this.caption = $('.uk-lightbox-caption', this.$el);
2017-11-11 04:33:51 +00:00
this.items.forEach(function () { return append(this$1.list, '<li></li>'); });
},
2017-11-11 04:33:51 +00:00
events: [
{
name: (pointerMove + " " + pointerDown + " keydown"),
2017-11-11 04:33:51 +00:00
handler: 'showControls'
2017-11-11 04:33:51 +00:00
},
{
2019-04-22 13:31:39 +00:00
name: pointerUp,
self: true,
2017-11-11 04:33:51 +00:00
delegate: function() {
2019-04-22 13:31:39 +00:00
return this.selSlides;
2017-11-11 04:33:51 +00:00
},
handler: function(e) {
2019-04-22 13:31:39 +00:00
if (e.defaultPrevented) {
return;
}
e.preventDefault();
this.hide();
2017-11-11 04:33:51 +00:00
}
},
{
name: 'shown',
2017-11-11 04:33:51 +00:00
self: true,
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
handler: function() {
this.showControls();
}
2017-11-11 04:33:51 +00:00
},
{
name: 'hide',
2017-11-11 04:33:51 +00:00
self: true,
2017-11-11 04:33:51 +00:00
handler: function() {
2017-11-11 04:33:51 +00:00
this.hideControls();
2017-11-11 04:33:51 +00:00
removeClass(this.slides, this.clsActive);
Transition.stop(this.slides);
2017-11-11 04:33:51 +00:00
}
},
2019-04-22 13:31:39 +00:00
{
name: 'hidden',
self: true,
handler: function() {
this.$destroy(true);
}
},
2017-11-11 04:33:51 +00:00
{
name: 'keyup',
2017-11-11 04:33:51 +00:00
el: document,
2017-11-11 04:33:51 +00:00
handler: function(e) {
if (!this.isToggled(this.$el)) {
return;
}
2017-11-11 04:33:51 +00:00
switch (e.keyCode) {
case 37:
this.show('previous');
break;
case 39:
this.show('next');
break;
}
}
2017-11-11 04:33:51 +00:00
},
{
name: 'beforeitemshow',
handler: function(e) {
2017-11-11 04:33:51 +00:00
if (this.isToggled()) {
return;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
this.draggable = false;
e.preventDefault();
this.toggleNow(this.$el, true);
this.animation = Animations$1['scale'];
removeClass(e.target, this.clsActive);
this.stack.splice(1, 0, this.index);
2017-11-11 04:33:51 +00:00
}
},
{
name: 'itemshow',
2017-11-11 04:33:51 +00:00
handler: function(ref) {
var target = ref.target;
2017-11-11 04:33:51 +00:00
var i = index(target);
var ref$1 = this.getItem(i);
var caption = ref$1.caption;
css(this.caption, 'display', caption ? '' : 'none');
html(this.caption, caption);
for (var j = 0; j <= this.preload; j++) {
2019-04-22 13:31:39 +00:00
this.loadItem(this.getIndex(i + j));
this.loadItem(this.getIndex(i - j));
}
2017-11-11 04:33:51 +00:00
}
},
{
name: 'itemshown',
2017-11-11 04:33:51 +00:00
handler: function() {
2019-04-22 13:31:39 +00:00
this.draggable = this.$props.draggable;
2017-11-11 04:33:51 +00:00
}
},
{
name: 'itemload',
2017-11-11 04:33:51 +00:00
handler: function(_, item) {
var this$1 = this;
2017-11-11 04:33:51 +00:00
var source = item.source;
var type = item.type;
var alt = item.alt;
2017-11-11 04:33:51 +00:00
this.setItem(item, '<span uk-spinner></span>');
2017-11-11 04:33:51 +00:00
if (!source) {
return;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var matches;
2017-11-11 04:33:51 +00:00
// Image
2019-04-22 13:31:39 +00:00
if (type === 'image' || source.match(/\.(jp(e)?g|png|gif|svg|webp)($|\?)/i)) {
2017-11-11 04:33:51 +00:00
getImage(source).then(
function (img) { return this$1.setItem(item, ("<img width=\"" + (img.width) + "\" height=\"" + (img.height) + "\" src=\"" + source + "\" alt=\"" + (alt ? alt : '') + "\">")); },
function () { return this$1.setError(item); }
);
2017-11-11 04:33:51 +00:00
// Video
} else if (type === 'video' || source.match(/\.(mp4|webm|ogv)($|\?)/i)) {
2017-11-11 04:33:51 +00:00
var video = $(("<video controls playsinline" + (item.poster ? (" poster=\"" + (item.poster) + "\"") : '') + " uk-video=\"" + (this.videoAutoplay) + "\"></video>"));
attr(video, 'src', source);
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
once(video, 'error loadedmetadata', function (type) {
if (type === 'error') {
this$1.setError(item);
} else {
attr(video, {width: video.videoWidth, height: video.videoHeight});
this$1.setItem(item, video);
}
});
2017-11-11 04:33:51 +00:00
// Iframe
} else if (type === 'iframe' || source.match(/\.(html|php)($|\?)/i)) {
2017-11-11 04:33:51 +00:00
this.setItem(item, ("<iframe class=\"uk-lightbox-iframe\" src=\"" + source + "\" frameborder=\"0\" allowfullscreen></iframe>"));
2017-11-11 04:33:51 +00:00
// YouTube
2019-04-22 13:31:39 +00:00
} else if ((matches = source.match(/\/\/.*?youtube(-nocookie)?\.[a-z]+\/watch\?v=([^&\s]+)/) || source.match(/()youtu\.be\/(.*)/))) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var id = matches[2];
var setIframe = function (width, height) {
if ( width === void 0 ) width = 640;
if ( height === void 0 ) height = 450;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return this$1.setItem(item, getIframe(("https://www.youtube" + (matches[1] || '') + ".com/embed/" + id), width, height, this$1.videoAutoplay));
};
2017-11-11 04:33:51 +00:00
getImage(("https://img.youtube.com/vi/" + id + "/maxresdefault.jpg")).then(
function (ref) {
2019-04-22 13:31:39 +00:00
var width = ref.width;
var height = ref.height;
2017-11-11 04:33:51 +00:00
// YouTube default 404 thumb, fall back to low resolution
2019-04-22 13:31:39 +00:00
if (width === 120 && height === 90) {
getImage(("https://img.youtube.com/vi/" + id + "/0.jpg")).then(
function (ref) {
2019-04-22 13:31:39 +00:00
var width = ref.width;
var height = ref.height;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return setIframe(width, height);
},
setIframe
);
} else {
2019-04-22 13:31:39 +00:00
setIframe(width, height);
}
},
setIframe
);
2017-11-11 04:33:51 +00:00
// Vimeo
2019-04-22 13:31:39 +00:00
} else if ((matches = source.match(/(\/\/.*?)vimeo\.[a-z]+\/([0-9]+).*?/))) {
2017-11-11 04:33:51 +00:00
ajax(("https://vimeo.com/api/oembed.json?maxwidth=1920&url=" + (encodeURI(source))), {responseType: 'json', withCredentials: false})
.then(
function (ref) {
var ref_response = ref.response;
2019-04-22 13:31:39 +00:00
var height = ref_response.height;
var width = ref_response.width;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return this$1.setItem(item, getIframe(("https://player.vimeo.com/video/" + (matches[2])), width, height, this$1.videoAutoplay));
},
function () { return this$1.setError(item); }
);
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
}
}
2017-11-11 04:33:51 +00:00
],
2017-11-11 04:33:51 +00:00
methods: {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
loadItem: function(index) {
if ( index === void 0 ) index = this.index;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var item = this.getItem(index);
2017-11-11 04:33:51 +00:00
if (item.content) {
2017-11-11 04:33:51 +00:00
return;
}
trigger(this.$el, 'itemload', [item]);
},
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
getItem: function(index) {
if ( index === void 0 ) index = this.index;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return this.items[index] || {};
},
2017-11-11 04:33:51 +00:00
setItem: function(item, content) {
assign(item, {content: content});
var el = html(this.slides[this.items.indexOf(item)], content);
trigger(this.$el, 'itemloaded', [this, el]);
this.$update(el);
},
2017-11-11 04:33:51 +00:00
setError: function(item) {
this.setItem(item, '<span uk-icon="icon: bolt; ratio: 2"></span>');
},
2017-11-11 04:33:51 +00:00
showControls: function() {
2017-11-11 04:33:51 +00:00
clearTimeout(this.controlsTimer);
this.controlsTimer = setTimeout(this.hideControls, this.delayControls);
2017-11-11 04:33:51 +00:00
addClass(this.$el, 'uk-active', 'uk-transition-active');
2017-11-11 04:33:51 +00:00
},
hideControls: function() {
removeClass(this.$el, 'uk-active', 'uk-transition-active');
}
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
};
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function getIframe(src, width, height, autoplay) {
return ("<iframe src=\"" + src + "\" width=\"" + width + "\" height=\"" + height + "\" style=\"max-width: 100%; box-sizing: border-box;\" frameborder=\"0\" allowfullscreen uk-video=\"autoplay: " + autoplay + "\" uk-responsive></iframe>");
}
2017-11-11 04:33:51 +00:00
var Lightbox = {
2017-11-11 04:33:51 +00:00
install: install$2,
2017-11-11 04:33:51 +00:00
props: {toggle: String},
2017-11-11 04:33:51 +00:00
data: {toggle: 'a'},
2017-11-11 04:33:51 +00:00
computed: {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
toggles: {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
get: function(ref, $el) {
var toggle = ref.toggle;
return $$(toggle, $el);
},
watch: function() {
this.hide();
}
},
items: function() {
return uniqueBy(this.toggles.map(toItem), 'source');
}
2017-11-11 04:33:51 +00:00
},
2017-11-11 04:33:51 +00:00
disconnected: function() {
2019-04-22 13:31:39 +00:00
this.hide();
},
2017-11-11 04:33:51 +00:00
events: [
2017-11-11 04:33:51 +00:00
{
2017-11-11 04:33:51 +00:00
name: 'click',
2017-11-11 04:33:51 +00:00
delegate: function() {
return ((this.toggle) + ":not(.uk-disabled)");
},
2017-11-11 04:33:51 +00:00
handler: function(e) {
e.preventDefault();
2019-04-22 13:31:39 +00:00
var src = data(e.current, 'href');
this.show(findIndex(this.items, function (ref) {
var source = ref.source;
return source === src;
}));
2017-11-11 04:33:51 +00:00
}
}
2017-11-11 04:33:51 +00:00
],
2017-11-11 04:33:51 +00:00
methods: {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
show: function(index) {
var this$1 = this;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
this.panel = this.panel || this.$create('lightboxPanel', assign({}, this.$props, {items: this.items}));
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
on(this.panel.$el, 'hidden', function () { return this$1.panel = false; });
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return this.panel.show(index);
2017-11-11 04:33:51 +00:00
},
hide: function() {
2017-11-11 04:33:51 +00:00
return this.panel && this.panel.hide();
2017-11-11 04:33:51 +00:00
}
}
};
function install$2(UIkit, Lightbox) {
2017-11-11 04:33:51 +00:00
if (!UIkit.lightboxPanel) {
2019-04-22 13:31:39 +00:00
UIkit.component('lightboxPanel', lightboxPanel);
}
2017-11-11 04:33:51 +00:00
assign(
Lightbox.props,
UIkit.component('lightboxPanel').options.props
);
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function toItem(el) {
return ['href', 'caption', 'type', 'poster', 'alt'].reduce(function (obj, attr) {
obj[attr === 'href' ? 'source' : attr] = data(el, attr);
return obj;
}, {});
}
var obj;
2017-11-11 04:33:51 +00:00
var containers = {};
2017-11-11 04:33:51 +00:00
var Notification = {
2017-11-11 04:33:51 +00:00
functional: true,
2017-11-11 04:33:51 +00:00
args: ['message', 'status'],
2017-11-11 04:33:51 +00:00
data: {
message: '',
status: '',
timeout: 5000,
group: null,
pos: 'top-center',
clsClose: 'uk-notification-close',
clsMsg: 'uk-notification-message'
},
2017-11-11 04:33:51 +00:00
install: install$3,
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
computed: {
marginProp: function(ref) {
var pos = ref.pos;
return ("margin" + (startsWith(pos, 'top') ? 'Top' : 'Bottom'));
},
startProps: function() {
var obj;
return ( obj = {opacity: 0}, obj[this.marginProp] = -this.$el.offsetHeight, obj );
}
},
created: function() {
2017-11-11 04:33:51 +00:00
if (!containers[this.pos]) {
containers[this.pos] = append(this.$container, ("<div class=\"uk-notification uk-notification-" + (this.pos) + "\"></div>"));
2017-11-11 04:33:51 +00:00
}
var container = css(containers[this.pos], 'display', 'block');
2017-11-11 04:33:51 +00:00
this.$mount(append(container,
("<div class=\"" + (this.clsMsg) + (this.status ? (" " + (this.clsMsg) + "-" + (this.status)) : '') + "\"> <a href=\"#\" class=\"" + (this.clsClose) + "\" data-uk-close></a> <div>" + (this.message) + "</div> </div>")
));
2017-11-11 04:33:51 +00:00
},
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
connected: function() {
var this$1 = this;
2019-04-22 13:31:39 +00:00
var obj;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var margin = toFloat(css(this.$el, this.marginProp));
Transition.start(
2019-04-22 13:31:39 +00:00
css(this.$el, this.startProps),
( obj = {opacity: 1}, obj[this.marginProp] = margin, obj )
).then(function () {
if (this$1.timeout) {
this$1.timer = setTimeout(this$1.close, this$1.timeout);
}
});
2017-11-11 04:33:51 +00:00
},
2017-11-11 04:33:51 +00:00
events: ( obj = {
2017-11-11 04:33:51 +00:00
click: function(e) {
2019-04-22 13:31:39 +00:00
if (closest(e.target, 'a[href="#"],a[href=""]')) {
e.preventDefault();
}
this.close();
}
2017-11-11 04:33:51 +00:00
}, obj[pointerEnter] = function () {
if (this.timer) {
clearTimeout(this.timer);
}
}, obj[pointerLeave] = function () {
if (this.timeout) {
this.timer = setTimeout(this.close, this.timeout);
}
}, obj ),
2017-11-11 04:33:51 +00:00
methods: {
2017-11-11 04:33:51 +00:00
close: function(immediate) {
var this$1 = this;
2017-11-11 04:33:51 +00:00
var removeFn = function () {
2017-11-11 04:33:51 +00:00
trigger(this$1.$el, 'close', [this$1]);
remove(this$1.$el);
2017-11-11 04:33:51 +00:00
if (!containers[this$1.pos].children.length) {
css(containers[this$1.pos], 'display', 'none');
}
2017-11-11 04:33:51 +00:00
};
2017-11-11 04:33:51 +00:00
if (this.timer) {
clearTimeout(this.timer);
}
2017-11-11 04:33:51 +00:00
if (immediate) {
removeFn();
} else {
2019-04-22 13:31:39 +00:00
Transition.start(this.$el, this.startProps).then(removeFn);
}
2017-11-11 04:33:51 +00:00
}
}
};
2017-11-11 04:33:51 +00:00
function install$3(UIkit) {
UIkit.notification.closeAll = function (group, immediate) {
apply(document.body, function (el) {
var notification = UIkit.getComponent(el, 'notification');
if (notification && (!group || group === notification.group)) {
notification.close(immediate);
}
});
};
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
var props = ['x', 'y', 'bgx', 'bgy', 'rotate', 'scale', 'color', 'backgroundColor', 'borderColor', 'opacity', 'blur', 'hue', 'grayscale', 'invert', 'saturate', 'sepia', 'fopacity', 'stroke'];
2017-11-11 04:33:51 +00:00
var Parallax = {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
mixins: [Media],
props: props.reduce(function (props, prop) {
props[prop] = 'list';
return props;
2019-04-22 13:31:39 +00:00
}, {}),
data: props.reduce(function (data, prop) {
data[prop] = undefined;
return data;
}, {}),
2017-11-11 04:33:51 +00:00
computed: {
props: function(properties, $el) {
2017-11-11 04:33:51 +00:00
var this$1 = this;
return props.reduce(function (props, prop) {
2017-11-11 04:33:51 +00:00
if (isUndefined(properties[prop])) {
return props;
}
2017-11-11 04:33:51 +00:00
var isColor = prop.match(/color/i);
var isCssProp = isColor || prop === 'opacity';
2017-11-11 04:33:51 +00:00
var pos, bgPos, diff;
var steps = properties[prop].slice(0);
2017-11-11 04:33:51 +00:00
if (isCssProp) {
css($el, prop, '');
}
2017-11-11 04:33:51 +00:00
if (steps.length < 2) {
steps.unshift((prop === 'scale'
? 1
: isCssProp
? css($el, prop)
: 0) || 0);
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var unit = getUnit(steps, prop);
2017-11-11 04:33:51 +00:00
if (isColor) {
2017-11-11 04:33:51 +00:00
var ref = $el.style;
var color = ref.color;
steps = steps.map(function (step) { return parseColor($el, step); });
$el.style.color = color;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
} else if (startsWith(prop, 'bg')) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var attr = prop === 'bgy' ? 'height' : 'width';
steps = steps.map(function (step) { return toPx(step, attr, this$1.$el); });
2017-11-11 04:33:51 +00:00
css($el, ("background-position-" + (prop[2])), '');
bgPos = css($el, 'backgroundPosition').split(' ')[prop[2] === 'x' ? 0 : 1]; // IE 11 can't read background-position-[x|y]
2017-11-11 04:33:51 +00:00
if (this$1.covers) {
2017-11-11 04:33:51 +00:00
var min = Math.min.apply(Math, steps);
var max = Math.max.apply(Math, steps);
var down = steps.indexOf(min) < steps.indexOf(max);
2017-11-11 04:33:51 +00:00
diff = max - min;
2017-11-11 04:33:51 +00:00
steps = steps.map(function (step) { return step - (down ? min : max); });
pos = (down ? -diff : 0) + "px";
2017-11-11 04:33:51 +00:00
} else {
2017-11-11 04:33:51 +00:00
pos = bgPos;
}
2019-04-22 13:31:39 +00:00
} else {
steps = steps.map(toFloat);
}
if (prop === 'stroke') {
if (!steps.some(function (step) { return step; })) {
return props;
}
var length = getMaxPathLength(this$1.$el);
css($el, 'strokeDasharray', length);
if (unit === '%') {
steps = steps.map(function (step) { return step * length / 100; });
}
steps = steps.reverse();
prop = 'strokeDashoffset';
}
2017-11-11 04:33:51 +00:00
props[prop] = {steps: steps, unit: unit, pos: pos, bgPos: bgPos, diff: diff};
2017-11-11 04:33:51 +00:00
return props;
2017-11-11 04:33:51 +00:00
}, {});
2017-11-11 04:33:51 +00:00
},
bgProps: function() {
var this$1 = this;
2017-11-11 04:33:51 +00:00
return ['bgx', 'bgy'].filter(function (bg) { return bg in this$1.props; });
},
2017-11-11 04:33:51 +00:00
covers: function(_, $el) {
return covers($el);
2017-11-11 04:33:51 +00:00
}
},
2017-11-11 04:33:51 +00:00
disconnected: function() {
delete this._image;
},
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
update: {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
read: function(data) {
var this$1 = this;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
data.active = this.matchMedia;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (!data.active) {
return;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (!data.image && this.covers && this.bgProps.length) {
var src = css(this.$el, 'backgroundImage').replace(/^none|url\(["']?(.+?)["']?\)$/, '$1');
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (src) {
var img = new Image();
img.src = src;
data.image = img;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (!img.naturalWidth) {
img.onload = function () { return this$1.$emit(); };
}
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var image = data.image;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (!image || !image.naturalWidth) {
return;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var dimEl = {
width: this.$el.offsetWidth,
height: this.$el.offsetHeight
};
var dimImage = {
width: image.naturalWidth,
height: image.naturalHeight
};
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var dim = Dimensions.cover(dimImage, dimEl);
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
this.bgProps.forEach(function (prop) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var ref = this$1.props[prop];
var diff = ref.diff;
var bgPos = ref.bgPos;
var steps = ref.steps;
var attr = prop === 'bgy' ? 'height' : 'width';
var span = dim[attr] - dimEl[attr];
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (span < diff) {
dimEl[attr] = dim[attr] + diff - span;
} else if (span > diff) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var posPercentage = dimEl[attr] / toPx(bgPos, attr, this$1.$el);
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (posPercentage) {
this$1.props[prop].steps = steps.map(function (step) { return step - (span - diff) / posPercentage; });
}
2019-04-22 13:31:39 +00:00
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
dim = Dimensions.cover(dimImage, dimEl);
});
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
data.dim = dim;
},
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
write: function(ref) {
var dim = ref.dim;
var active = ref.active;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (!active) {
css(this.$el, {backgroundSize: '', backgroundRepeat: ''});
return;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
dim && css(this.$el, {
backgroundSize: ((dim.width) + "px " + (dim.height) + "px"),
backgroundRepeat: 'no-repeat'
});
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
},
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
events: ['resize']
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
},
2017-11-11 04:33:51 +00:00
methods: {
2017-11-11 04:33:51 +00:00
reset: function() {
var this$1 = this;
each(this.getCss(0), function (_, prop) { return css(this$1.$el, prop, ''); });
2017-11-11 04:33:51 +00:00
},
getCss: function(percent) {
2017-11-11 04:33:51 +00:00
var ref = this;
var props = ref.props;
2019-04-22 13:31:39 +00:00
return Object.keys(props).reduce(function (css, prop) {
2017-11-11 04:33:51 +00:00
var ref = props[prop];
var steps = ref.steps;
var unit = ref.unit;
var pos = ref.pos;
var value = getValue(steps, percent);
2017-11-11 04:33:51 +00:00
switch (prop) {
2017-11-11 04:33:51 +00:00
// transforms
case 'x':
2019-04-22 13:31:39 +00:00
case 'y': {
unit = unit || 'px';
css.transform += " translate" + (ucfirst(prop)) + "(" + (toFloat(value).toFixed(unit === 'px' ? 0 : 2)) + unit + ")";
break;
2019-04-22 13:31:39 +00:00
}
case 'rotate':
2019-04-22 13:31:39 +00:00
unit = unit || 'deg';
css.transform += " rotate(" + (value + unit) + ")";
break;
case 'scale':
2019-04-22 13:31:39 +00:00
css.transform += " scale(" + value + ")";
break;
// bg image
case 'bgy':
case 'bgx':
2019-04-22 13:31:39 +00:00
css[("background-position-" + (prop[2]))] = "calc(" + pos + " + " + value + "px)";
break;
// color
case 'color':
case 'backgroundColor':
2019-04-22 13:31:39 +00:00
case 'borderColor': {
2019-04-22 13:31:39 +00:00
var ref$1 = getStep(steps, percent);
var start = ref$1[0];
var end = ref$1[1];
var p = ref$1[2];
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
css[prop] = "rgba(" + (start.map(function (value, i) {
value = value + p * (end[i] - value);
return i === 3 ? toFloat(value) : parseInt(value, 10);
}).join(',')) + ")";
2017-11-11 04:33:51 +00:00
break;
2019-04-22 13:31:39 +00:00
}
// CSS Filter
case 'blur':
2019-04-22 13:31:39 +00:00
unit = unit || 'px';
css.filter += " blur(" + (value + unit) + ")";
2017-11-11 04:33:51 +00:00
break;
case 'hue':
2019-04-22 13:31:39 +00:00
unit = unit || 'deg';
css.filter += " hue-rotate(" + (value + unit) + ")";
break;
case 'fopacity':
2019-04-22 13:31:39 +00:00
unit = unit || '%';
css.filter += " opacity(" + (value + unit) + ")";
break;
case 'grayscale':
case 'invert':
case 'saturate':
case 'sepia':
2019-04-22 13:31:39 +00:00
unit = unit || '%';
css.filter += " " + prop + "(" + (value + unit) + ")";
2017-11-11 04:33:51 +00:00
break;
default:
2019-04-22 13:31:39 +00:00
css[prop] = value;
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
return css;
2017-11-11 04:33:51 +00:00
}, {transform: '', filter: ''});
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
};
2017-11-11 04:33:51 +00:00
function parseColor(el, color) {
2019-04-22 13:31:39 +00:00
return css(css(el, 'color', color), 'color')
.split(/[(),]/g)
.slice(1, -1)
.concat(1)
.slice(0, 4)
.map(toFloat);
}
2017-11-11 04:33:51 +00:00
function getStep(steps, percent) {
var count = steps.length - 1;
2019-04-22 13:31:39 +00:00
var index = Math.min(Math.floor(count * percent), count - 1);
var step = steps.slice(index, index + 2);
2017-11-11 04:33:51 +00:00
step.push(percent === 1 ? 1 : percent % (1 / count) * count);
2017-11-11 04:33:51 +00:00
return step;
}
2017-11-11 04:33:51 +00:00
function getValue(steps, percent, digits) {
if ( digits === void 0 ) digits = 2;
2017-11-11 04:33:51 +00:00
var ref = getStep(steps, percent);
var start = ref[0];
var end = ref[1];
var p = ref[2];
return (isNumber(start)
2019-04-22 13:31:39 +00:00
? start + Math.abs(start - end) * p * (start < end ? 1 : -1)
: +end
).toFixed(digits);
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function getUnit(steps) {
return steps.reduce(function (unit, step) { return isString(step) && step.replace(/-|\d/g, '').trim() || unit; }, '');
}
function covers(el) {
var ref = el.style;
var backgroundSize = ref.backgroundSize;
var covers = css(css(el, 'backgroundSize', ''), 'backgroundSize') === 'cover';
el.style.backgroundSize = backgroundSize;
return covers;
}
2017-11-11 04:33:51 +00:00
var Parallax$1 = {
2017-11-11 04:33:51 +00:00
mixins: [Parallax],
2017-11-11 04:33:51 +00:00
props: {
target: String,
viewport: Number,
2019-04-22 13:31:39 +00:00
easing: Number
},
2017-11-11 04:33:51 +00:00
data: {
target: false,
viewport: 1,
2019-04-22 13:31:39 +00:00
easing: 1
},
2017-11-11 04:33:51 +00:00
computed: {
2017-11-11 04:33:51 +00:00
target: function(ref, $el) {
var target = ref.target;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return getOffsetElement(target && query(target, $el) || $el);
}
2017-11-11 04:33:51 +00:00
},
2019-04-22 13:31:39 +00:00
update: {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
read: function(ref, type) {
var percent = ref.percent;
var active = ref.active;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (type !== 'scroll') {
percent = false;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (!active) {
return;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var prev = percent;
percent = ease$1(scrolledOver(this.target) / (this.viewport || 1), this.easing);
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return {
percent: percent,
style: prev !== percent ? this.getCss(percent) : false
};
},
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
write: function(ref) {
var style = ref.style;
var active = ref.active;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (!active) {
this.reset();
return;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
style && css(this.$el, style);
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
},
events: ['scroll', 'resize']
}
2017-11-11 04:33:51 +00:00
};
2017-11-11 04:33:51 +00:00
function ease$1(percent, easing) {
return clamp(percent * (1 - (easing - easing * percent)));
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
// SVG elements do not inherit from HTMLElement
function getOffsetElement(el) {
return el
? 'offsetTop' in el
? el
: getOffsetElement(el.parentNode)
: document.body;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var SliderReactive = {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
update: {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
write: function() {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (this.stack.length || this.dragging) {
return;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var index = this.getValidIndex();
delete this.index;
removeClass(this.slides, this.clsActive, this.clsActivated);
this.show(index);
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
},
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
events: ['resize']
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
}
2017-11-11 04:33:51 +00:00
};
2017-11-11 04:33:51 +00:00
function Transitioner$1 (prev, next, dir, ref) {
var center = ref.center;
var easing = ref.easing;
var list = ref.list;
2017-11-11 04:33:51 +00:00
var deferred = new Deferred();
2017-11-11 04:33:51 +00:00
var from = prev
? getLeft(prev, list, center)
: getLeft(next, list, center) + bounds(next).width * dir;
var to = next
? getLeft(next, list, center)
: from + bounds(prev).width * dir * (isRtl ? -1 : 1);
2017-11-11 04:33:51 +00:00
return {
2017-11-11 04:33:51 +00:00
dir: dir,
2017-11-11 04:33:51 +00:00
show: function(duration, percent, linear) {
if ( percent === void 0 ) percent = 0;
2017-11-11 04:33:51 +00:00
var timing = linear ? 'linear' : easing;
duration -= Math.round(duration * clamp(percent, -1, 1));
2017-11-11 04:33:51 +00:00
this.translate(percent);
2017-11-11 04:33:51 +00:00
prev && this.updateTranslates();
percent = prev ? percent : clamp(percent, 0, 1);
triggerUpdate$1(this.getItemIn(), 'itemin', {percent: percent, duration: duration, timing: timing, dir: dir});
prev && triggerUpdate$1(this.getItemIn(true), 'itemout', {percent: 1 - percent, duration: duration, timing: timing, dir: dir});
2017-11-11 04:33:51 +00:00
Transition
.start(list, {transform: translate(-to * (isRtl ? -1 : 1), 'px')}, duration, timing)
.then(deferred.resolve, noop);
2017-11-11 04:33:51 +00:00
return deferred.promise;
2017-11-11 04:33:51 +00:00
},
stop: function() {
return Transition.stop(list);
2017-11-11 04:33:51 +00:00
},
cancel: function() {
Transition.cancel(list);
2017-11-11 04:33:51 +00:00
},
reset: function() {
css(list, 'transform', '');
2017-11-11 04:33:51 +00:00
},
forward: function(duration, percent) {
if ( percent === void 0 ) percent = this.percent();
2017-11-11 04:33:51 +00:00
Transition.cancel(list);
return this.show(duration, percent, true);
2017-11-11 04:33:51 +00:00
},
translate: function(percent) {
2017-11-11 04:33:51 +00:00
var distance = this.getDistance() * dir * (isRtl ? -1 : 1);
2017-11-11 04:33:51 +00:00
css(list, 'transform', translate(clamp(
-to + (distance - distance * percent),
-getWidth(list),
bounds(list).width
) * (isRtl ? -1 : 1), 'px'));
2017-11-11 04:33:51 +00:00
this.updateTranslates();
2017-11-11 04:33:51 +00:00
if (prev) {
percent = clamp(percent, -1, 1);
triggerUpdate$1(this.getItemIn(), 'itemtranslatein', {percent: percent, dir: dir});
triggerUpdate$1(this.getItemIn(true), 'itemtranslateout', {percent: 1 - percent, dir: dir});
}
2017-11-11 04:33:51 +00:00
},
2017-11-11 04:33:51 +00:00
percent: function() {
return Math.abs((css(list, 'transform').split(',')[4] * (isRtl ? -1 : 1) + from) / (to - from));
},
2017-11-11 04:33:51 +00:00
getDistance: function() {
return Math.abs(to - from);
},
2017-11-11 04:33:51 +00:00
getItemIn: function(out) {
if ( out === void 0 ) out = false;
2017-11-11 04:33:51 +00:00
var actives = this.getActives();
var all = sortBy(slides(list), 'offsetLeft');
var i = index(all, actives[dir * (out ? -1 : 1) > 0 ? actives.length - 1 : 0]);
2017-11-11 04:33:51 +00:00
return ~i && all[i + (prev && !out ? dir : 0)];
2017-11-11 04:33:51 +00:00
},
2017-11-11 04:33:51 +00:00
getActives: function() {
2017-11-11 04:33:51 +00:00
var left = getLeft(prev || next, list, center);
2017-11-11 04:33:51 +00:00
return sortBy(slides(list).filter(function (slide) {
var slideLeft = getElLeft(slide, list);
return slideLeft >= left && slideLeft + bounds(slide).width <= bounds(list).width + left;
}), 'offsetLeft');
2017-11-11 04:33:51 +00:00
},
2017-11-11 04:33:51 +00:00
updateTranslates: function() {
2017-11-11 04:33:51 +00:00
var actives = this.getActives();
2017-11-11 04:33:51 +00:00
slides(list).forEach(function (slide) {
var isActive = includes(actives, slide);
2017-11-11 04:33:51 +00:00
triggerUpdate$1(slide, ("itemtranslate" + (isActive ? 'in' : 'out')), {
percent: isActive ? 1 : 0,
dir: slide.offsetLeft <= next.offsetLeft ? 1 : -1
});
});
2017-11-11 04:33:51 +00:00
}
};
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
function getLeft(el, list, center) {
2017-11-11 04:33:51 +00:00
var left = getElLeft(el, list);
2017-11-11 04:33:51 +00:00
return center
? left - centerEl(el, list)
: Math.min(left, getMax(list));
2017-11-11 04:33:51 +00:00
}
2017-11-11 04:33:51 +00:00
function getMax(list) {
return Math.max(0, getWidth(list) - bounds(list).width);
}
2017-11-11 04:33:51 +00:00
function getWidth(list) {
return slides(list).reduce(function (right, el) { return bounds(el).width + right; }, 0);
}
2017-11-11 04:33:51 +00:00
function getMaxWidth(list) {
return slides(list).reduce(function (right, el) { return Math.max(right, bounds(el).width); }, 0);
}
2017-11-11 04:33:51 +00:00
function centerEl(el, list) {
return bounds(list).width / 2 - bounds(el).width / 2;
}
2017-11-11 04:33:51 +00:00
function getElLeft(el, list) {
return (position(el).left + (isRtl ? bounds(el).width - bounds(list).width : 0)) * (isRtl ? -1 : 1);
}
2017-11-11 04:33:51 +00:00
function bounds(el) {
return el.getBoundingClientRect();
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function triggerUpdate$1(el, type, data) {
trigger(el, createEvent(type, false, false, data));
2017-11-11 04:33:51 +00:00
}
function slides(list) {
return toNodes(list.children);
}
2017-11-11 04:33:51 +00:00
var Slider$1 = {
2017-11-11 04:33:51 +00:00
mixins: [Class, Slider, SliderReactive],
2017-11-11 04:33:51 +00:00
props: {
center: Boolean,
2019-04-22 13:31:39 +00:00
sets: Boolean
},
2017-11-11 04:33:51 +00:00
data: {
center: false,
sets: false,
attrItem: 'uk-slider-item',
selList: '.uk-slider-items',
selNav: '.uk-slider-nav',
clsContainer: 'uk-slider-container',
Transitioner: Transitioner$1
},
2017-11-11 04:33:51 +00:00
computed: {
avgWidth: function() {
return getWidth(this.list) / this.length;
},
2017-11-11 04:33:51 +00:00
finite: function(ref) {
var finite = ref.finite;
2017-11-11 04:33:51 +00:00
return finite || getWidth(this.list) < bounds(this.list).width + getMaxWidth(this.list) + this.center;
},
2017-11-11 04:33:51 +00:00
maxIndex: function() {
2017-11-11 04:33:51 +00:00
if (!this.finite || this.center && !this.sets) {
return this.length - 1;
}
2017-11-11 04:33:51 +00:00
if (this.center) {
return this.sets[this.sets.length - 1];
}
2017-11-11 04:33:51 +00:00
css(this.slides, 'order', '');
2017-11-11 04:33:51 +00:00
var max = getMax(this.list);
var i = this.length;
2017-11-11 04:33:51 +00:00
while (i--) {
2019-04-22 13:31:39 +00:00
if (getElLeft(this.list.children[i], this.list) < max) {
return Math.min(i + 1, this.length - 1);
}
}
2017-11-11 04:33:51 +00:00
return 0;
},
2017-11-11 04:33:51 +00:00
sets: function(ref) {
var this$1 = this;
var sets = ref.sets;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var width = bounds(this.list).width / (this.center ? 2 : 1);
2017-11-11 04:33:51 +00:00
var left = 0;
2019-04-22 13:31:39 +00:00
var leftCenter = width;
var slideLeft = 0;
2017-11-11 04:33:51 +00:00
sets = sets && this.slides.reduce(function (sets, slide, i) {
2017-11-11 04:33:51 +00:00
var ref = bounds(slide);
var slideWidth = ref.width;
var slideRight = slideLeft + slideWidth;
2017-11-11 04:33:51 +00:00
if (slideRight > left) {
2017-11-11 04:33:51 +00:00
if (!this$1.center && i > this$1.maxIndex) {
i = this$1.maxIndex;
}
2017-11-11 04:33:51 +00:00
if (!includes(sets, i)) {
2017-11-11 04:33:51 +00:00
var cmp = this$1.slides[i + 1];
if (this$1.center && cmp && slideWidth < leftCenter - bounds(cmp).width / 2) {
leftCenter -= slideWidth;
} else {
2019-04-22 13:31:39 +00:00
leftCenter = width;
sets.push(i);
2019-04-22 13:31:39 +00:00
left = slideLeft + width + (this$1.center ? slideWidth / 2 : 0);
}
2017-11-11 04:33:51 +00:00
}
}
slideLeft += slideWidth;
2017-11-11 04:33:51 +00:00
return sets;
2017-11-11 04:33:51 +00:00
}, []);
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return !isEmpty(sets) && sets;
2017-11-11 04:33:51 +00:00
},
transitionOptions: function() {
return {
center: this.center,
list: this.list
};
2017-11-11 04:33:51 +00:00
}
},
connected: function() {
toggleClass(this.$el, this.clsContainer, !$(("." + (this.clsContainer)), this.$el));
2017-11-11 04:33:51 +00:00
},
update: {
2017-11-11 04:33:51 +00:00
write: function() {
var this$1 = this;
2017-11-11 04:33:51 +00:00
$$(("[" + (this.attrItem) + "],[data-" + (this.attrItem) + "]"), this.$el).forEach(function (el) {
2019-04-22 13:31:39 +00:00
var index = data(el, this$1.attrItem);
this$1.maxIndex && toggleClass(el, 'uk-hidden', isNumeric(index) && (this$1.sets && !includes(this$1.sets, toFloat(index)) || index > this$1.maxIndex));
});
2017-11-11 04:33:51 +00:00
},
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
events: ['resize']
2017-11-11 04:33:51 +00:00
},
2017-11-11 04:33:51 +00:00
events: {
2017-11-11 04:33:51 +00:00
beforeitemshow: function(e) {
2017-11-11 04:33:51 +00:00
if (!this.dragging && this.sets && this.stack.length < 2 && !includes(this.sets, this.index)) {
this.index = this.getValidIndex();
}
2017-11-11 04:33:51 +00:00
var diff = Math.abs(
this.index
- this.prevIndex
+ (this.dir > 0 && this.index < this.prevIndex || this.dir < 0 && this.index > this.prevIndex ? (this.maxIndex + 1) * this.dir : 0)
);
2017-11-11 04:33:51 +00:00
if (!this.dragging && diff > 1) {
2017-11-11 04:33:51 +00:00
for (var i = 0; i < diff; i++) {
2019-04-22 13:31:39 +00:00
this.stack.splice(1, 0, this.dir > 0 ? 'next' : 'previous');
2017-11-11 04:33:51 +00:00
}
e.preventDefault();
return;
}
2017-11-11 04:33:51 +00:00
this.duration = speedUp(this.avgWidth / this.velocity)
* (bounds(
this.dir < 0 || !this.slides[this.prevIndex]
? this.slides[this.index]
: this.slides[this.prevIndex]
).width / this.avgWidth);
2017-11-11 04:33:51 +00:00
this.reorder();
2017-11-11 04:33:51 +00:00
},
2017-11-11 04:33:51 +00:00
itemshow: function() {
!isUndefined(this.prevIndex) && addClass(this._getTransitioner().getItemIn(), this.clsActive);
},
2017-11-11 04:33:51 +00:00
itemshown: function() {
var this$1 = this;
2017-11-11 04:33:51 +00:00
var actives = this._getTransitioner(this.index).getActives();
this.slides.forEach(function (slide) { return toggleClass(slide, this$1.clsActive, includes(actives, slide)); });
(!this.sets || includes(this.sets, toFloat(this.index))) && this.slides.forEach(function (slide) { return toggleClass(slide, this$1.clsActivated, includes(actives, slide)); });
2017-11-11 04:33:51 +00:00
}
},
2017-11-11 04:33:51 +00:00
methods: {
reorder: function() {
2017-11-11 04:33:51 +00:00
var this$1 = this;
css(this.slides, 'order', '');
2017-11-11 04:33:51 +00:00
if (this.finite) {
return;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var index = this.dir > 0 && this.slides[this.prevIndex] ? this.prevIndex : this.index;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
this.slides.forEach(function (slide, i) { return css(slide, 'order', this$1.dir > 0 && i < index
? 1
: this$1.dir < 0 && i >= this$1.index
? -1
: ''
); }
);
2017-11-11 04:33:51 +00:00
if (!this.center) {
return;
}
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var next = this.slides[index];
var width = bounds(this.list).width / 2 - bounds(next).width / 2;
var j = 0;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
while (width > 0) {
var slideIndex = this.getIndex(--j + index, index);
var slide = this.slides[slideIndex];
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
css(slide, 'order', slideIndex > index ? -2 : -1);
width -= bounds(slide).width;
}
2017-11-11 04:33:51 +00:00
},
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
getValidIndex: function(index, prevIndex) {
if ( index === void 0 ) index = this.index;
if ( prevIndex === void 0 ) prevIndex = this.prevIndex;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
index = this.getIndex(index, prevIndex);
2017-11-11 04:33:51 +00:00
if (!this.sets) {
2019-04-22 13:31:39 +00:00
return index;
}
2017-11-11 04:33:51 +00:00
var prev;
2017-11-11 04:33:51 +00:00
do {
2019-04-22 13:31:39 +00:00
if (includes(this.sets, index)) {
return index;
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
prev = index;
index = this.getIndex(index + this.dir, prevIndex);
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
} while (index !== prev);
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
return index;
2017-11-11 04:33:51 +00:00
}
}
};
var SliderParallax = {
2017-11-11 04:33:51 +00:00
mixins: [Parallax],
2017-11-11 04:33:51 +00:00
data: {
selItem: '!li'
2017-11-11 04:33:51 +00:00
},
computed: {
item: function(ref, $el) {
var selItem = ref.selItem;
2017-11-11 04:33:51 +00:00
return query(selItem, $el);
2017-11-11 04:33:51 +00:00
}
},
events: [
{
name: 'itemshown',
self: true,
el: function() {
return this.item;
},
handler: function() {
css(this.$el, this.getCss(.5));
}
},
{
name: 'itemin itemout',
self: true,
el: function() {
return this.item;
},
handler: function(ref) {
var type = ref.type;
var ref_detail = ref.detail;
var percent = ref_detail.percent;
var duration = ref_detail.duration;
var timing = ref_detail.timing;
var dir = ref_detail.dir;
Transition.cancel(this.$el);
css(this.$el, this.getCss(getCurrent(type, dir, percent)));
Transition.start(this.$el, this.getCss(isIn(type)
? .5
: dir > 0
? 1
: 0
), duration, timing).catch(noop);
2017-11-11 04:33:51 +00:00
}
},
2017-11-11 04:33:51 +00:00
{
name: 'transitioncanceled transitionend',
2017-11-11 04:33:51 +00:00
self: true,
2017-11-11 04:33:51 +00:00
el: function() {
return this.item;
2017-11-11 04:33:51 +00:00
},
handler: function() {
Transition.cancel(this.$el);
}
2017-11-11 04:33:51 +00:00
},
2017-11-11 04:33:51 +00:00
{
name: 'itemtranslatein itemtranslateout',
2017-11-11 04:33:51 +00:00
self: true,
2017-11-11 04:33:51 +00:00
el: function() {
return this.item;
2017-11-11 04:33:51 +00:00
},
handler: function(ref) {
var type = ref.type;
var ref_detail = ref.detail;
var percent = ref_detail.percent;
var dir = ref_detail.dir;
Transition.cancel(this.$el);
css(this.$el, this.getCss(getCurrent(type, dir, percent)));
}
2017-11-11 04:33:51 +00:00
}
]
};
2017-11-11 04:33:51 +00:00
function isIn(type) {
return endsWith(type, 'in');
2017-11-11 04:33:51 +00:00
}
function getCurrent(type, dir, percent) {
2017-11-11 04:33:51 +00:00
percent /= 2;
2017-11-11 04:33:51 +00:00
return !isIn(type)
? dir < 0
? percent
: 1 - percent
: dir < 0
? 1 - percent
: percent;
2017-11-11 04:33:51 +00:00
}
var Animations$2 = assign({}, Animations, {
2017-11-11 04:33:51 +00:00
fade: {
show: function() {
2017-11-11 04:33:51 +00:00
return [
{opacity: 0, zIndex: 0},
{zIndex: -1}
];
},
percent: function(current) {
2017-11-11 04:33:51 +00:00
return 1 - css(current, 'opacity');
},
translate: function(percent) {
2017-11-11 04:33:51 +00:00
return [
{opacity: 1 - percent, zIndex: 0},
{zIndex: -1}
];
}
},
scale: {
show: function() {
2017-11-11 04:33:51 +00:00
return [
{opacity: 0, transform: scale3d(1 + .5), zIndex: 0},
{zIndex: -1}
];
},
percent: function(current) {
2017-11-11 04:33:51 +00:00
return 1 - css(current, 'opacity');
},
translate: function(percent) {
2017-11-11 04:33:51 +00:00
return [
{opacity: 1 - percent, transform: scale3d(1 + .5 * percent), zIndex: 0},
{zIndex: -1}
];
}
},
pull: {
show: function(dir) {
2017-11-11 04:33:51 +00:00
return dir < 0
? [
{transform: translate(30), zIndex: -1},
2019-04-22 13:31:39 +00:00
{transform: translate(), zIndex: 0}
]
2017-11-11 04:33:51 +00:00
: [
{transform: translate(-100), zIndex: 0},
{transform: translate(), zIndex: -1}
];
},
percent: function(current, next, dir) {
2017-11-11 04:33:51 +00:00
return dir < 0
? 1 - translated(next)
: translated(current);
2017-11-11 04:33:51 +00:00
},
translate: function(percent, dir) {
2017-11-11 04:33:51 +00:00
return dir < 0
? [
{transform: translate(30 * percent), zIndex: -1},
2019-04-22 13:31:39 +00:00
{transform: translate(-100 * (1 - percent)), zIndex: 0}
]
2017-11-11 04:33:51 +00:00
: [
{transform: translate(-percent * 100), zIndex: 0},
{transform: translate(30 * (1 - percent)), zIndex: -1}
];
}
},
push: {
show: function(dir) {
2017-11-11 04:33:51 +00:00
return dir < 0
? [
{transform: translate(100), zIndex: 0},
2019-04-22 13:31:39 +00:00
{transform: translate(), zIndex: -1}
]
2017-11-11 04:33:51 +00:00
: [
{transform: translate(-30), zIndex: -1},
{transform: translate(), zIndex: 0}
];
},
percent: function(current, next, dir) {
2017-11-11 04:33:51 +00:00
return dir > 0
? 1 - translated(next)
: translated(current);
2017-11-11 04:33:51 +00:00
},
translate: function(percent, dir) {
2017-11-11 04:33:51 +00:00
return dir < 0
? [
{transform: translate(percent * 100), zIndex: 0},
2019-04-22 13:31:39 +00:00
{transform: translate(-30 * (1 - percent)), zIndex: -1}
]
2017-11-11 04:33:51 +00:00
: [
{transform: translate(-30 * percent), zIndex: -1},
{transform: translate(100 * (1 - percent)), zIndex: 0}
];
}
}
});
var Slideshow$1 = {
2017-11-11 04:33:51 +00:00
mixins: [Class, Slideshow, SliderReactive],
2017-11-11 04:33:51 +00:00
props: {
ratio: String,
2019-04-22 13:31:39 +00:00
minHeight: Number,
maxHeight: Number
2017-11-11 04:33:51 +00:00
},
data: {
2017-11-11 04:33:51 +00:00
ratio: '16:9',
minHeight: false,
maxHeight: false,
selList: '.uk-slideshow-items',
attrItem: 'uk-slideshow-item',
selNav: '.uk-slideshow-nav',
Animations: Animations$2
2017-11-11 04:33:51 +00:00
},
update: {
read: function() {
2017-11-11 04:33:51 +00:00
var ref = this.ratio.split(':').map(Number);
2019-04-22 13:31:39 +00:00
var width = ref[0];
var height = ref[1];
2019-04-22 13:31:39 +00:00
height = height * this.list.offsetWidth / width || 0;
2017-11-11 04:33:51 +00:00
if (this.minHeight) {
2019-04-22 13:31:39 +00:00
height = Math.max(this.minHeight, height);
2017-11-11 04:33:51 +00:00
}
if (this.maxHeight) {
2019-04-22 13:31:39 +00:00
height = Math.min(this.maxHeight, height);
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
return {height: height - boxModelAdjust(this.list, 'content-box')};
2017-11-11 04:33:51 +00:00
},
write: function(ref) {
2019-04-22 13:31:39 +00:00
var height = ref.height;
2019-04-22 13:31:39 +00:00
css(this.list, 'minHeight', height);
2017-11-11 04:33:51 +00:00
},
2019-04-22 13:31:39 +00:00
events: ['resize']
2017-11-11 04:33:51 +00:00
}
};
2017-11-11 04:33:51 +00:00
var Sortable = {
2017-11-11 04:33:51 +00:00
mixins: [Class, Animate],
2017-11-11 04:33:51 +00:00
props: {
group: String,
threshold: Number,
clsItem: String,
clsPlaceholder: String,
clsDrag: String,
clsDragState: String,
clsBase: String,
clsNoDrag: String,
clsEmpty: String,
clsCustom: String,
handle: String
},
data: {
2017-11-11 04:33:51 +00:00
group: false,
threshold: 5,
clsItem: 'uk-sortable-item',
clsPlaceholder: 'uk-sortable-placeholder',
clsDrag: 'uk-sortable-drag',
clsDragState: 'uk-drag',
clsBase: 'uk-sortable',
clsNoDrag: 'uk-sortable-nodrag',
clsEmpty: 'uk-sortable-empty',
clsCustom: '',
handle: false
},
2019-04-22 13:31:39 +00:00
created: function() {
2017-11-11 04:33:51 +00:00
var this$1 = this;
['init', 'start', 'move', 'end'].forEach(function (key) {
var fn = this$1[key];
this$1[key] = function (e) {
this$1.scrollY = window.pageYOffset;
2019-04-22 13:31:39 +00:00
var ref = getEventPos(e, 'page');
2017-11-11 04:33:51 +00:00
var x = ref.x;
var y = ref.y;
this$1.pos = {x: x, y: y};
fn(e);
};
});
},
2019-04-22 13:31:39 +00:00
events: {
name: pointerDown,
passive: false,
handler: 'init'
},
2017-11-11 04:33:51 +00:00
update: {
write: function() {
2017-11-11 04:33:51 +00:00
if (this.clsEmpty) {
2019-04-22 13:31:39 +00:00
toggleClass(this.$el, this.clsEmpty, isEmpty(this.$el.children));
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
css(this.handle ? $$(this.handle, this.$el) : this.$el.children, {touchAction: 'none', userSelect: 'none'});
2017-11-11 04:33:51 +00:00
if (!this.drag) {
return;
}
offset(this.drag, {top: this.pos.y + this.origin.top, left: this.pos.x + this.origin.left});
var ref = offset(this.drag);
var top = ref.top;
2019-04-22 13:31:39 +00:00
var offsetHeight = ref.height;
var bottom = top + offsetHeight;
var scroll;
2017-11-11 04:33:51 +00:00
if (top > 0 && top < this.scrollY) {
scroll = this.scrollY - 5;
} else if (bottom < height(document) && bottom > height(window) + this.scrollY) {
2017-11-11 04:33:51 +00:00
scroll = this.scrollY + 5;
}
scroll && setTimeout(function () { return scrollTop(window, scroll); }, 5);
2017-11-11 04:33:51 +00:00
}
},
methods: {
init: function(e) {
2017-11-11 04:33:51 +00:00
var target = e.target;
var button = e.button;
var defaultPrevented = e.defaultPrevented;
var ref = toNodes(this.$el.children).filter(function (el) { return within(target, el); });
var placeholder = ref[0];
2017-11-11 04:33:51 +00:00
if (!placeholder
2019-04-22 13:31:39 +00:00
|| defaultPrevented
|| button > 0
2019-04-22 13:31:39 +00:00
|| isInput(target)
2017-11-11 04:33:51 +00:00
|| within(target, ("." + (this.clsNoDrag)))
2019-04-22 13:31:39 +00:00
|| this.handle && !within(target, this.handle)
2017-11-11 04:33:51 +00:00
) {
return;
}
e.preventDefault();
this.touched = [this];
this.placeholder = placeholder;
this.origin = assign({target: target, index: index(placeholder)}, this.pos);
on(document, pointerMove, this.move);
on(document, pointerUp, this.end);
on(window, 'scroll', this.scroll);
2017-11-11 04:33:51 +00:00
if (!this.threshold) {
this.start(e);
}
},
start: function(e) {
2017-11-11 04:33:51 +00:00
this.drag = append(this.$container, this.placeholder.outerHTML.replace(/^<li/i, '<div').replace(/li>$/i, 'div>'));
2017-11-11 04:33:51 +00:00
css(this.drag, assign({
boxSizing: 'border-box',
width: this.placeholder.offsetWidth,
height: this.placeholder.offsetHeight
}, css(this.placeholder, ['paddingLeft', 'paddingRight', 'paddingTop', 'paddingBottom'])));
attr(this.drag, 'uk-no-boot', '');
addClass(this.drag, this.clsDrag, this.clsCustom);
2017-11-11 04:33:51 +00:00
height(this.drag.firstElementChild, height(this.placeholder.firstElementChild));
var ref = offset(this.placeholder);
var left = ref.left;
var top = ref.top;
assign(this.origin, {left: left - this.pos.x, top: top - this.pos.y});
2019-04-22 13:31:39 +00:00
css(this.origin.target, 'pointerEvents', 'none');
2017-11-11 04:33:51 +00:00
addClass(this.placeholder, this.clsPlaceholder);
addClass(this.$el.children, this.clsItem);
addClass(document.documentElement, this.clsDragState);
2017-11-11 04:33:51 +00:00
trigger(this.$el, 'start', [this, this.placeholder]);
2017-11-11 04:33:51 +00:00
this.move(e);
},
move: function(e) {
2017-11-11 04:33:51 +00:00
if (!this.drag) {
if (Math.abs(this.pos.x - this.origin.x) > this.threshold || Math.abs(this.pos.y - this.origin.y) > this.threshold) {
this.start(e);
}
return;
}
this.$emit();
2019-04-22 13:31:39 +00:00
var target = e.type === 'mousemove' ? e.target : document.elementFromPoint(this.pos.x - window.pageXOffset, this.pos.y - window.pageYOffset);
var sortable = this.getSortable(target);
var previous = this.getSortable(this.placeholder);
var move = sortable !== previous;
2017-11-11 04:33:51 +00:00
if (!sortable || within(target, this.placeholder) || move && (!sortable.group || sortable.group !== previous.group)) {
return;
}
target = sortable.$el === target.parentNode && target || toNodes(sortable.$el.children).filter(function (element) { return within(target, element); })[0];
if (move) {
previous.remove(this.placeholder);
} else if (!target) {
return;
}
sortable.insert(this.placeholder, target);
if (!includes(this.touched, sortable)) {
this.touched.push(sortable);
}
},
end: function(e) {
2017-11-11 04:33:51 +00:00
off(document, pointerMove, this.move);
off(document, pointerUp, this.end);
off(window, 'scroll', this.scroll);
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
css(this.origin.target, 'pointerEvents', '');
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (!this.drag) {
if (e.type === 'touchend') {
e.target.click();
2017-11-11 04:33:51 +00:00
}
return;
}
var sortable = this.getSortable(this.placeholder);
2017-11-11 04:33:51 +00:00
if (this === sortable) {
if (this.origin.index !== index(this.placeholder)) {
trigger(this.$el, 'moved', [this, this.placeholder]);
}
} else {
trigger(sortable.$el, 'added', [sortable, this.placeholder]);
trigger(this.$el, 'removed', [this, this.placeholder]);
}
trigger(this.$el, 'stop', [this, this.placeholder]);
2017-11-11 04:33:51 +00:00
remove(this.drag);
this.drag = null;
var classes = this.touched.map(function (sortable) { return ((sortable.clsPlaceholder) + " " + (sortable.clsItem)); }).join(' ');
this.touched.forEach(function (sortable) { return removeClass(sortable.$el.children, classes); });
removeClass(document.documentElement, this.clsDragState);
2017-11-11 04:33:51 +00:00
},
2019-04-22 13:31:39 +00:00
scroll: function() {
var scroll = window.pageYOffset;
if (scroll !== this.scrollY) {
this.pos.y += scroll - this.scrollY;
this.scrollY = scroll;
this.$emit();
}
},
insert: function(element, target) {
2017-11-11 04:33:51 +00:00
var this$1 = this;
addClass(this.$el.children, this.clsItem);
var insert = function () {
if (target) {
if (!within(element, this$1.$el) || isPredecessor(element, target)) {
before(target, element);
} else {
after(target, element);
}
} else {
append(this$1.$el, element);
}
};
if (this.animation) {
this.animate(insert);
} else {
insert();
}
},
remove: function(element) {
2017-11-11 04:33:51 +00:00
if (!within(element, this.$el)) {
return;
}
2019-04-22 13:31:39 +00:00
css(this.handle ? $$(this.handle, element) : element, {touchAction: '', userSelect: ''});
2017-11-11 04:33:51 +00:00
if (this.animation) {
this.animate(function () { return remove(element); });
} else {
remove(element);
}
},
getSortable: function(element) {
return element && (this.$getComponent(element, 'sortable') || this.getSortable(element.parentNode));
2017-11-11 04:33:51 +00:00
}
}
};
2017-11-11 04:33:51 +00:00
function isPredecessor(element, target) {
return element.parentNode === target.parentNode && index(element) > index(target);
}
2019-04-22 13:31:39 +00:00
var obj$1;
2017-11-11 04:33:51 +00:00
var actives = [];
var Tooltip = {
2017-11-11 04:33:51 +00:00
mixins: [Container, Togglable, Position],
2017-11-11 04:33:51 +00:00
args: 'title',
2017-11-11 04:33:51 +00:00
props: {
delay: Number,
title: String
},
data: {
2017-11-11 04:33:51 +00:00
pos: 'top',
title: '',
delay: 0,
animation: ['uk-animation-scale-up'],
duration: 100,
cls: 'uk-active',
clsPos: 'uk-tooltip'
},
beforeConnect: function() {
this._hasTitle = hasAttr(this.$el, 'title');
attr(this.$el, {title: '', 'aria-expanded': false});
2017-11-11 04:33:51 +00:00
},
disconnected: function() {
2017-11-11 04:33:51 +00:00
this.hide();
attr(this.$el, {title: this._hasTitle ? this.title : null, 'aria-expanded': null});
2017-11-11 04:33:51 +00:00
},
methods: {
show: function() {
2017-11-11 04:33:51 +00:00
var this$1 = this;
2019-04-22 13:31:39 +00:00
if (this.isActive()) {
2017-11-11 04:33:51 +00:00
return;
}
actives.forEach(function (active) { return active.hide(); });
actives.push(this);
2019-04-22 13:31:39 +00:00
this._unbind = on(document, pointerUp, function (e) { return !within(e.target, this$1.$el) && this$1.hide(); });
2017-11-11 04:33:51 +00:00
clearTimeout(this.showTimer);
this.showTimer = setTimeout(function () {
2019-04-22 13:31:39 +00:00
this$1._show();
2017-11-11 04:33:51 +00:00
this$1.hideTimer = setInterval(function () {
if (!isVisible(this$1.$el)) {
this$1.hide();
}
}, 150);
}, this.delay);
},
hide: function() {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
if (!this.isActive() || matches(this.$el, 'input') && this.$el === document.activeElement) {
2017-11-11 04:33:51 +00:00
return;
}
2019-04-22 13:31:39 +00:00
actives.splice(actives.indexOf(this), 1);
2017-11-11 04:33:51 +00:00
clearTimeout(this.showTimer);
clearInterval(this.hideTimer);
attr(this.$el, 'aria-expanded', false);
this.toggleElement(this.tooltip, false);
this.tooltip && remove(this.tooltip);
this.tooltip = false;
this._unbind();
2019-04-22 13:31:39 +00:00
},
_show: function() {
this.tooltip = append(this.container,
("<div class=\"" + (this.clsPos) + "\" aria-expanded=\"true\" aria-hidden> <div class=\"" + (this.clsPos) + "-inner\">" + (this.title) + "</div> </div>")
);
this.positionAt(this.tooltip, this.$el);
this.origin = this.getAxis() === 'y'
? ((flipPosition(this.dir)) + "-" + (this.align))
: ((this.align) + "-" + (flipPosition(this.dir)));
this.toggleElement(this.tooltip, true);
},
isActive: function() {
return includes(actives, this);
2017-11-11 04:33:51 +00:00
}
},
2019-04-22 13:31:39 +00:00
events: ( obj$1 = {
focus: 'show',
blur: 'hide'
}, obj$1[(pointerEnter + " " + pointerLeave)] = function (e) {
if (isTouch(e)) {
return;
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
e.type === pointerEnter
? this.show()
: this.hide();
}, obj$1[pointerDown] = function (e) {
2017-11-11 04:33:51 +00:00
if (!isTouch(e)) {
2019-04-22 13:31:39 +00:00
return;
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
this.isActive()
? this.hide()
: this.show();
}, obj$1 )
2017-11-11 04:33:51 +00:00
};
2017-11-11 04:33:51 +00:00
var Upload = {
2017-11-11 04:33:51 +00:00
props: {
allow: String,
clsDragover: String,
concurrent: Number,
maxSize: Number,
method: String,
2017-11-11 04:33:51 +00:00
mime: String,
msgInvalidMime: String,
msgInvalidName: String,
msgInvalidSize: String,
2017-11-11 04:33:51 +00:00
multiple: Boolean,
name: String,
params: Object,
type: String,
2019-04-22 13:31:39 +00:00
url: String
2017-11-11 04:33:51 +00:00
},
data: {
2017-11-11 04:33:51 +00:00
allow: false,
clsDragover: 'uk-dragover',
concurrent: 1,
maxSize: 0,
method: 'POST',
2017-11-11 04:33:51 +00:00
mime: false,
msgInvalidMime: 'Invalid File Type: %s',
msgInvalidName: 'Invalid File Name: %s',
msgInvalidSize: 'Invalid File Size: %s Kilobytes Max',
2017-11-11 04:33:51 +00:00
multiple: false,
name: 'files[]',
params: {},
type: '',
2017-11-11 04:33:51 +00:00
url: '',
abort: noop,
beforeAll: noop,
beforeSend: noop,
complete: noop,
completeAll: noop,
error: noop,
fail: noop,
load: noop,
loadEnd: noop,
loadStart: noop,
progress: noop
},
events: {
change: function(e) {
2017-11-11 04:33:51 +00:00
if (!matches(e.target, 'input[type="file"]')) {
return;
}
e.preventDefault();
if (e.target.files) {
this.upload(e.target.files);
}
e.target.value = '';
},
drop: function(e) {
2017-11-11 04:33:51 +00:00
stop(e);
var transfer = e.dataTransfer;
if (!transfer || !transfer.files) {
return;
}
removeClass(this.$el, this.clsDragover);
this.upload(transfer.files);
},
dragenter: function(e) {
2017-11-11 04:33:51 +00:00
stop(e);
},
dragover: function(e) {
2017-11-11 04:33:51 +00:00
stop(e);
addClass(this.$el, this.clsDragover);
},
dragleave: function(e) {
2017-11-11 04:33:51 +00:00
stop(e);
removeClass(this.$el, this.clsDragover);
}
},
methods: {
upload: function(files) {
2017-11-11 04:33:51 +00:00
var this$1 = this;
if (!files.length) {
return;
}
trigger(this.$el, 'upload', [files]);
for (var i = 0; i < files.length; i++) {
2019-04-22 13:31:39 +00:00
if (this.maxSize && this.maxSize * 1000 < files[i].size) {
this.fail(this.msgInvalidSize.replace('%s', this.maxSize));
return;
2017-11-11 04:33:51 +00:00
}
2019-04-22 13:31:39 +00:00
if (this.allow && !match$1(this.allow, files[i].name)) {
this.fail(this.msgInvalidName.replace('%s', this.allow));
return;
}
2019-04-22 13:31:39 +00:00
if (this.mime && !match$1(this.mime, files[i].type)) {
this.fail(this.msgInvalidMime.replace('%s', this.mime));
return;
2017-11-11 04:33:51 +00:00
}
}
if (!this.multiple) {
files = [files[0]];
}
this.beforeAll(this, files);
var chunks = chunk(files, this.concurrent);
var upload = function (files) {
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
var data = new FormData();
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
files.forEach(function (file) { return data.append(this$1.name, file); });
2017-11-11 04:33:51 +00:00
for (var key in this$1.params) {
2019-04-22 13:31:39 +00:00
data.append(key, this$1.params[key]);
}
2017-11-11 04:33:51 +00:00
ajax(this$1.url, {
2019-04-22 13:31:39 +00:00
data: data,
method: this$1.method,
responseType: this$1.type,
beforeSend: function (env) {
2017-11-11 04:33:51 +00:00
var xhr = env.xhr;
xhr.upload && on(xhr.upload, 'progress', this$1.progress);
['loadStart', 'load', 'loadEnd', 'abort'].forEach(function (type) { return on(xhr, type.toLowerCase(), this$1[type]); }
);
2017-11-11 04:33:51 +00:00
this$1.beforeSend(env);
2017-11-11 04:33:51 +00:00
}
}).then(
function (xhr) {
2017-11-11 04:33:51 +00:00
this$1.complete(xhr);
2017-11-11 04:33:51 +00:00
if (chunks.length) {
upload(chunks.shift());
} else {
this$1.completeAll(xhr);
}
2017-11-11 04:33:51 +00:00
},
function (e) { return this$1.error(e); }
);
2017-11-11 04:33:51 +00:00
};
2017-11-11 04:33:51 +00:00
upload(chunks.shift());
}
}
};
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
function match$1(pattern, path) {
2017-11-11 04:33:51 +00:00
return path.match(new RegExp(("^" + (pattern.replace(/\//g, '\\/').replace(/\*\*/g, '(\\/[^\\/]+)*').replace(/\*/g, '[^\\/]+').replace(/((?!\\))\?/g, '$1.')) + "$"), 'i'));
}
function chunk(files, size) {
var chunks = [];
for (var i = 0; i < files.length; i += size) {
var chunk = [];
for (var j = 0; j < size; j++) {
chunk.push(files[i + j]);
}
chunks.push(chunk);
}
return chunks;
}
function stop(e) {
e.preventDefault();
e.stopPropagation();
}
UIkit.component('countdown', Countdown);
UIkit.component('filter', Filter);
UIkit.component('lightbox', Lightbox);
2019-04-22 13:31:39 +00:00
UIkit.component('lightboxPanel', lightboxPanel);
UIkit.component('notification', Notification);
UIkit.component('parallax', Parallax$1);
UIkit.component('slider', Slider$1);
UIkit.component('sliderParallax', SliderParallax);
UIkit.component('slideshow', Slideshow$1);
UIkit.component('slideshowParallax', SliderParallax);
UIkit.component('sortable', Sortable);
UIkit.component('tooltip', Tooltip);
UIkit.component('upload', Upload);
{
boot(UIkit);
}
2017-11-11 04:33:51 +00:00
return UIkit;
2017-11-11 04:33:51 +00:00
2019-04-22 13:31:39 +00:00
}));