/*global jQuery, window, document*/ /*jslint nomen:true, plusplus:true*/ /* Original Plugin by Osvaldas Valutis, www.osvaldas.info http://osvaldas.info/drop-down-navigation-responsive-and-touch-friendly Available for use under the MIT License */ /** * jquery-doubleTapToGo widget * Copyright 2014 DACHCOM.DIGITAL AG * @author Marco Rieser * @author Volker Andres * @version 2.0.2 * @see https://github.com/dachcom-digital/jquery-doubleTapToGo */ (function ($) { 'use strict'; var options = {}, currentTap = $(), preventClick = false, tapEvent = function (event) { var $target = $(event.target).closest('li'); if (!$target.hasClass(options.selectorClass)) { preventClick = false; return; } if ($target.get(0) === currentTap.get(0)) { preventClick = false; return; } preventClick = true; currentTap = $target; event.stopPropagation(); }; $.widget('dcd.doubleTapToGo', { options: { automatic: true, selectorClass: 'doubletap', selectorChain: 'li:has(ul)' }, _create: function () { var self = this; if (window.ontouchstart === undefined && !window.navigator.msMaxTouchPoints && !window.navigator.userAgent.toLowerCase().match(/windows phone os 7/i)) { return; } options = this.options; if (window.navigator.msPointerEnabled) { this.element.get(0).addEventListener('MSPointerDown', tapEvent, false); } else if (window.navigator.pointerEnabled) { this.element.get(0).addEventListener('pointerdown', tapEvent, false); } this.element.on('click', '.' + this.options.selectorClass, function (event) { return self._click(event); }).on('touchstart', '.' + this.options.selectorClass, function (event) { return self._tap(event); }); this._addSelectors(); }, _init: function () { currentTap = $(); preventClick = false; }, _addSelectors: function () { if (this.options.automatic !== true) { return; } this.element.find(this.options.selectorChain).addClass(this.options.selectorClass); }, _click: function (event) { if (preventClick) { event.preventDefault(); } else { currentTap = $(); } }, _tap: tapEvent, _destroy: function () { this.element.off(); if (window.navigator.msPointerEnabled) { this.element.get(0).removeEventListener('MSPointerDown', tapEvent); } if (window.navigator.pointerEnabled) { this.element.get(0).removeEventListener('pointerdown', tapEvent); } } }); }(jQuery));