/* 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 plugin * Copyright 2017 DACHCOM.DIGITAL AG * @author Marco Rieser * @author Volker Andres * @author Stefan Hagspiel * @version 3.0.1 * @see https://github.com/dachcom-digital/jquery-doubletaptogo */ (function($,window,document,undefined){'use strict';var pluginName='doubleTapToGo',defaults={automatic:true,selectorClass:'doubletap',selectorChain:'li:has(ul)'};function DoubleTapToGo(element,options){this.element=element;this.settings=$.extend({},defaults,options);this._defaults=defaults;this._name=pluginName;this.init()}$.extend(DoubleTapToGo.prototype,{preventClick:false,currentTap:$(),init:function(){$(this.element).on('touchstart','.'+this.settings.selectorClass,this._tap.bind(this)).on('click','.'+this.settings.selectorClass,this._click.bind(this)).on('remove',this._destroy.bind(this));this._addSelectors()},_addSelectors:function(){if(this.settings.automatic!==true){return}$(this.element).find(this.settings.selectorChain).addClass(this.settings.selectorClass)},_click:function(event){if(this.preventClick){event.preventDefault()}else{this.currentTap=$()}},_tap:function(event){var $target=$(event.target).closest('li');if(!$target.hasClass(this.settings.selectorClass)){this.preventClick=false;return}if($target.get(0)===this.currentTap.get(0)){this.preventClick=false;return}this.preventClick=true;this.currentTap=$target;event.stopPropagation()},_destroy:function(){$(this.element).off()},reset:function(){this.currentTap=$()}});$.fn[pluginName]=function(options){var args=arguments,returns;if(options===undefined||typeof options==='object'){return this.each(function(){if(!$.data(this,pluginName)){$.data(this,pluginName,new DoubleTapToGo(this,options))}})}else if(typeof options==='string'&&options[0]!=='_'&&options!=='init'){this.each(function(){var instance=$.data(this,pluginName),methodName=(options==='destroy'?'_destroy':options);if(instance instanceof DoubleTapToGo&&typeof instance[methodName]==='function'){returns=instance[methodName].apply(instance,Array.prototype.slice.call(args,1))}if(options==='destroy'){$.data(this,pluginName,null)}});return returns!==undefined?returns:this}}})(jQuery,window,document);