UNPKG

vuikit

Version:

A responsive Vue UI library for web site interfaces based on UIkit

123 lines (118 loc) 3.8 kB
/** * 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 };