vuikit
Version:
A responsive Vue UI library for web site interfaces based on UIkit
123 lines (118 loc) • 3.8 kB
JavaScript
/**
* Vuikit 0.8.10
* (c) 2018 Miljan Aleksic
* @license MIT
**/
/* Substantial part of the code is adapted from UIkit,
Copyright (c) 2013-2018 YOOtheme GmbH, getuikit.com */
import { within } from './filter';
import { closest, find, findAll } from './selector';
import { isArray, isFunction, isString, toNode, toNodes } from './lang';
var win = typeof window !== 'undefined' && window;
function on () {
var args = [], len = arguments.length;
while ( len-- ) args[ len ] = arguments[ len ];
var ref = getArgs(args);
var target = ref[0];
var type = ref[1];
var selector = ref[2];
var listener = ref[3];
var useCapture = ref[4];
target = toEventTarget(target);
if (selector) {
listener = delegate(target, selector, listener);
}
if (listener.length > 1) {
listener = detail(listener);
}
type.split(' ').forEach(function (type) { return target && target.addEventListener(type, listener, useCapture); });
return function () { return off(target, type, listener, useCapture); }
}
function off (target, type, listener, useCapture) {
if ( useCapture === void 0 ) useCapture = false;
target = toEventTarget(target);
target && type.split(' ').forEach(function (type) { return target.removeEventListener(type, listener, useCapture); });
}
function once () {
var args = [], len = arguments.length;
while ( len-- ) args[ len ] = arguments[ len ];
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);
return off
}
function trigger (target, event, detail) {
return toEventTargets(target).reduce(function (notCanceled, target) { return notCanceled && target.dispatchEvent(createEvent(event, true, true, detail)); }
, true)
}
function createEvent (e, bubbles, cancelable, detail) {
if ( bubbles === void 0 ) bubbles = true;
if ( cancelable === void 0 ) cancelable = false;
if (isString(e)) {
var event = document.createEvent('CustomEvent');
event.initCustomEvent(e, bubbles, cancelable, detail);
e = event;
}
return e
}
function getArgs (args) {
if (isString(args[0])) {
args[0] = find(args[0]);
}
if (isFunction(args[2])) {
args.splice(2, 0, false);
}
return args
}
function delegate (element, selector, listener) {
var this$1 = this;
return function (e) {
var target = e.target;
var current = selector[0] === '>'
? findAll(selector, element).reverse().filter(function (element) { return within(target, element); })[0]
: closest(target, selector);
if (current) {
e.delegate = element;
e.current = current;
listener.call(this$1, e);
}
}
}
function detail (listener) {
return function (e) { return isArray(e.detail) ? listener.apply(listener, [e].concat(e.detail)) : listener(e); }
}
function isEventTarget (target) {
return typeof window !== 'undefined' && 'EventTarget' in window
? target instanceof window.EventTarget
: target && 'addEventListener' in target
}
function toEventTarget (target) {
return isEventTarget(target) ? target : toNode(target)
}
function toEventTargets (target) {
return isEventTarget(target)
? [target]
: isArray(target)
? target.map(toEventTarget).filter(Boolean)
: toNodes(target)
}
function preventClick () {
var timer = setTimeout(once(document, 'click', function (e) {
e.preventDefault();
e.stopImmediatePropagation();
clearTimeout(timer);
}, true));
trigger(document, 'touchcancel');
}
export { win, on, off, once, trigger, createEvent, toEventTargets, preventClick };