12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- /*!
- * Language Selector JS plugin
- * Copyright 2017 Clement G., Inc.
- * Licensed under MIT
- */
- var dropdownmenu={
- animspeed: 200, //reveal animation speed (in milliseconds)
- showhidedelay: [150, 150], //delay before menu appears and disappears when mouse rolls over it, in milliseconds
- //***** NO NEED TO EDIT BEYOND HERE
- builtdropdownids: [], //ids of dropdown already built (to prevent repeated building of same dropdown)
- stubboxenable: false,
- showbox:function($, $dropdown){
- this.stubboxenable = false;
- clearTimeout($dropdown.data('timers').hidetimer);
- $dropdown.data('timers').showtimer=setTimeout(function(){$dropdown.show(dropdownmenu.animspeed)}, this.showhidedelay[0])
- },
- hidebox:function($, $dropdown){
- if(this.stubboxenable === false) {
- clearTimeout($dropdown.data('timers').showtimer);
- $dropdown.data('timers').hidetimer=setTimeout(function(){$dropdown.hide(100)}, this.showhidedelay[1]) //hide dropdown plus all of its sub ULs
- }
- },
- stubbox:function($, $dropdown){
- this.stubboxenable = true;
- clearTimeout($dropdown.data('timers').hidetimer);
- $dropdown.data('timers').showtimer=setTimeout(function(){$dropdown.show(dropdownmenu.animspeed)}, this.showhidedelay[0])
- },
- builddropdown:function($, $menu, $target){
- $menu.css({display:'none'}).addClass('jqdropdown');
- $menu.bind('mouseenter', function(){
- clearTimeout($menu.data('timers').hidetimer)
- });
- $menu.bind('mouseleave', function(){ //hide menu when mouse moves out of it
- dropdownmenu.hidebox($, $menu)
- });
- $menu.data('dimensions', {w:$menu.outerWidth(), h:$menu.outerHeight()}); //remember main menu's dimensions
- $menu.data('timers', {});
- this.builtdropdownids.push($menu.get(0).id) //remember id of dropdown that was just built
- },
- init:function($, $target, $dropdown){
- if (this.builtdropdownids.length === 0){ //only bind click event to document once
- $(document).bind("click", function(e){
- if (e.button === 0){ //hide all dropdown (and their sub ULs) when left mouse button is clicked
- $('.jqdropdown').find('ul').addBack().hide()
- }
- })
- }
- if (jQuery.inArray($dropdown.get(0).id, this.builtdropdownids) === -1) //if this dropdown hasn't been built yet
- this.builddropdown($, $dropdown, $target);
- if ($target.parents().filter('ul.jqdropdown').length>0) //if $target matches an element within the dropdown markup, don't bind ondropdown to that element
- return;
- $target.bind("mouseenter", function(e){
- dropdownmenu.showbox($, $dropdown)
- });
- $target.bind("mouseleave", function(e){
- dropdownmenu.hidebox($, $dropdown)
- });
- $target.bind("click", function(e){
- dropdownmenu.stubbox($, $dropdown)
- })
- }
- };
- //By default, add dropdown to anchor links with attribute "data-dropdown"
- jQuery(document).ready(function($){
- jQuery.fn.adddropdown=function(dropdownid){
- var $=jQuery;
- return this.each(function(){ //return jQuery obj
- var $target=$(this);
- var $dropdownId = $('#'+dropdownid);
- if ($dropdownId.length === 1) //check dropdown is defined
- dropdownmenu.init($, $target, $dropdownId)
- })
- };
- var $anchors=$('*[data-dropdown]');
- $anchors.each(function(){
- $(this).adddropdown(this.getAttribute('data-dropdown'))
- })
- });
|