(function() { "use strict"; angular.module('shared') .component('menuPopover', { templateUrl: '/shared/js/angular/main-navigation/menu-popover.html', controller: 'MenuPopover', transclude: true, bindings: { menuName: '@', menuButtonLabelId: '@', onInited: '&?', onOpen: '&?' } }) .controller('MenuPopover', ['$timeout', 'menuItemPopoverAmbassador', '$window', 'responsiveSiteService', function MenuPopoverController($timeout, menuItemPopoverAmbassador, $window, responsiveSiteService) { var ctrl = this; var eventNames = getEventNames(); var preventMouseMove = false; ctrl.$onInit = function() { ctrl.returnFocusClass = 'js-' + ctrl.menuName.toLowerCase().replace(/ /g, '-') + '-menu-target'; if (ctrl.onInited) { ctrl.onInited({close: ctrl.close}); } }; ctrl.onOpenChanged = function(open) { if (open) { $timeout(function() { angular.element('.js-menuContainer').on('mousemove', onMouseMove); angular.element('.js-menuContainer').on(eventNames.startTouchEvent, function(event) { menuItemPopoverAmbassador.emitActivatedMenuItem(event.target); preventMouseMove = true; if (navigator.userAgent.indexOf('MSIE') > -1 || navigator.userAgent.indexOf('Trident') > -1) { event.preventDefault(); } }); }); if (ctrl.onOpen) { ctrl.onOpen(); } } else{ angular.element('.js-menuContainer').off('mousemove', onMouseMove); menuItemPopoverAmbassador.setInitFirstSubMenuOpen(false); } }; ctrl.initFirstSubMenuOpen = function() { menuItemPopoverAmbassador.setInitFirstSubMenuOpen(true); }; ctrl.setPopover = function(popoverCtrl) { ctrl.popoverCtrl = popoverCtrl; }; ctrl.close = function() { ctrl.popoverCtrl.close(); }; ctrl.contentKeyDown = function(event) { if (typeof modalKeyDown == 'function') { modalKeyDown(event, ctrl.close, ctrl.returnFocusClass); } }; var leaveTimerPromise; function onMouseMove(event) { preventMouseMove = preventMouseMove ? preventMouseMove : $window.innerWidth <= responsiveSiteService.getResponsiveWidthLimit() if (!preventMouseMove) { var activeMenuItemPopover = menuItemPopoverAmbassador.getActivePopoverCtrl(); if (activeMenuItemPopover && activeMenuItemPopover.triangleCoordinates) { cancelLeaveTimerPromise(); if (menuItemPopoverAmbassador.isInTriangle(event.pageX, event.pageY, activeMenuItemPopover.triangleCoordinates)) { leaveTimerPromise = $timeout(function() { menuItemPopoverAmbassador.emitUpdateMenuItem(event.target); }, 200); } else { menuItemPopoverAmbassador.emitUpdateMenuItem(event.target); } } event.stopPropagation(); } preventMouseMove = false; } function cancelLeaveTimerPromise() { if (leaveTimerPromise) { $timeout.cancel(leaveTimerPromise); } leaveTimerPromise = undefined; } function getEventNames() { if('ontouchstart' in window) return {startTouchEvent: 'touchstart'}; else if(window.PointerEvent) return {startTouchEvent: 'pointerdown'}; else return {startTouchEvent: 'MSPointerDown'}; } } ]) })();