1/*jshint browser:true, devel:true */ 2/*global document */ 3 4var WPMLLanguageSwitcherDropdown = (function() { 5 "use strict"; 6 7 var toggleSelector = '.js-wpml-ls-legacy-dropdown a.js-wpml-ls-item-toggle'; 8 var parentSelector = '.wpml-ls-item-legacy-dropdown'; 9 10 var preventDefault = function(e) { 11 var evt = e ? e : window.event; 12 13 if (evt.preventDefault) { 14 evt.preventDefault(); 15 } 16 17 evt.returnValue = false; 18 }; 19 20 var toggleSubmenu = function(toggle, show) { 21 var parent = toggle.closest(parentSelector); 22 if (!parent) return; 23 24 var submenu = parent.querySelector('.wpml-ls-sub-menu'); 25 if (!submenu) return; 26 27 var isExpanded = show !== undefined ? show : toggle.getAttribute('aria-expanded') === 'true'; 28 29 if (isExpanded) { 30 toggle.setAttribute('aria-expanded', 'false'); 31 parent.classList.remove('wpml-ls-keyboard-open'); 32 } else { 33 toggle.setAttribute('aria-expanded', 'true'); 34 parent.classList.add('wpml-ls-keyboard-open'); 35 } 36 }; 37 38 var handleKeydown = function(e) { 39 var key = e.key || e.keyCode; 40 41 if (key === 'Enter' || key === ' ' || key === 13 || key === 32) { 42 preventDefault(e); 43 toggleSubmenu(this); 44 } 45 else if (key === 'Escape' || key === 'Esc' || key === 27) { 46 if (this.getAttribute('aria-expanded') === 'true') { 47 preventDefault(e); 48 toggleSubmenu(this, false); 49 this.focus(); 50 } 51 } 52 }; 53 54 var handleBlur = function(e) { 55 var toggle = this; 56 var parent = toggle.closest(parentSelector); 57 if (!parent) return; 58 59 setTimeout(function() { 60 var focusedElement = document.activeElement; 61 var submenu = parent.querySelector('.wpml-ls-sub-menu'); 62 63 if (submenu && !parent.contains(focusedElement)) { 64 toggleSubmenu(toggle, false); 65 } 66 }, 100); 67 }; 68 69 var init = function() { 70 var links = document.querySelectorAll(toggleSelector); 71 for(var i=0; i < links.length; i++) { 72 links[i].addEventListener('click', preventDefault); 73 links[i].addEventListener('keydown', handleKeydown); 74 links[i].addEventListener('blur', handleBlur); 75 } 76 }; 77 78 return { 79 'init': init 80 }; 81 82})(); 83 84document.addEventListener('DOMContentLoaded', function(){ 85 "use strict"; 86 WPMLLanguageSwitcherDropdown.init(); 87});
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.