File Manager

Current Directory: /home/astoriaah/www/templates/yootheme/vendor/assets/uikit/src/js/core
Viewing File: /home/astoriaah/www/templates/yootheme/vendor/assets/uikit/src/js/core/toggle.js
import Togglable from '../mixin/togglable'; import {closest, hasTouch, includes, isTouch, isVisible, matches, once, pointerEnter, pointerLeave, queryAll, trigger} from 'uikit-util'; export default { mixins: [Togglable], args: 'target', props: { href: String, target: null, mode: 'list', media: 'media' }, data: { href: false, target: false, mode: 'click', queued: true, media: false }, computed: { target({href, target}, $el) { target = queryAll(target || href, $el); return target.length && target || [$el]; } }, events: [ { name: `${pointerEnter} ${pointerLeave}`, filter() { return includes(this.mode, 'hover'); }, handler(e) { if (!isTouch(e)) { this.toggle(`toggle${e.type === pointerEnter ? 'show' : 'hide'}`); } } }, { name: 'click', filter() { return includes(this.mode, 'click') || hasTouch && includes(this.mode, 'hover'); }, handler(e) { if (!isTouch(e) && !includes(this.mode, 'click')) { return; } // TODO better isToggled handling let link; if (closest(e.target, 'a[href="#"], button') || (link = closest(e.target, 'a[href]')) && ( this.cls || !isVisible(this.target) || link.hash && matches(this.target, link.hash) ) ) { once(document, 'click', e => e.preventDefault()); } this.toggle(); } } ], update: { write() { if (!includes(this.mode, 'media') || !this.media) { return; } const toggled = this.isToggled(this.target); if (window.matchMedia(this.media).matches ? !toggled : toggled) { this.toggle(); } }, events: ['load', 'resize'] }, methods: { toggle(type) { if (trigger(this.target, type || 'toggle', [this])) { this.toggleElement(this.target); } } } };