menus.min.js 4.6 KB

1
  1. const MENU_ITEM_FLASH_COUNT=3;const MENU_ITEM_FLASH_DELAY=50;const MENU_STICKY_GRACE_PERIOD=350;const SUBMENU_LEFT_OFFSET=26;function initMenus(){let m_openMenus=[];let m_menuMousedown=false;let m_menuDragging=false;let m_menuDraggingTimer=null;let m_menuItemFlashing=false;$(".menubar .clock").on("click",function(){g_menubarShowDate=!g_menubarShowDate;updateClock()});$(".menu .menu-items").each(function(){let $this=$(this);$this.hide()});$(".menubar > .menu .icon").each(function(){let $this=$(this);let icon=$this.attr("data-icon");if(icon){let iconPath=SETTINGS_ICONS_SMALL_PATH+icon+".png";$this.css("background-image","url("+iconPath+")")}});$(".menu .menu-items > div").not(".submenu").each(function(){let $this=$(this);let shortcut=$this.attr("data-shortcut");let checked=$this.attr("data-checked");if(shortcut){$this.append('<div class="shortcut"><div class="symbol">&#8984;</div><div class="char">'+shortcut+"</div></div>")}if(checked){$this.prepend('<div class="checked">&nbsp;</div>')}});$(".menubar").on("mousedown",function(event){event.preventDefault()});$(".menu-items .submenu .title").each(function(){let $this=$(this);$this.append('<div class="arrow">&#11208;</div>')});$(".menu > .menu-items > div").on("mouseenter",function(){let $this=$(this);m_openMenus.forEach(function(menuId,index){if(menuId!==$this.attr("id")&&$("#"+menuId).hasClass("submenu")){$("#"+menuId+" .menu-items").hide();m_openMenus.splice(index,1)}})});let $menuItemsDiv=$(".menu-items > div");$menuItemsDiv.not(".separator").on("mouseenter",function(){let $this=$(this);if(m_menuItemFlashing||$this.is(".disabled"))return;$this.addClass("active")});$menuItemsDiv.not(".separator").on("mouseleave",function(){let $this=$(this);$this.removeClass("active")}).on("mouseup",function(event){let $this=$(this);let flashCount=MENU_ITEM_FLASH_COUNT;let action=$this.attr("data-action");event.stopPropagation();if(m_menuItemFlashing||$this.is(".disabled")||action==="none"){$(".desktop").trigger("mouseup");return}m_menuItemFlashing=true;while(flashCount--){$this.queue(function(){$this.removeClass("active").dequeue()}).delay(MENU_ITEM_FLASH_DELAY).queue(function(){$this.addClass("active").dequeue()}).delay(MENU_ITEM_FLASH_DELAY)}$this.queue(function(){if(action){Actions.parseFunction(action)}$this.dequeue()}).queue(function(){$(".desktop").trigger("mouseup");$this.removeClass("active");m_menuItemFlashing=false;$this.dequeue()})});let $menuTitle=$(".menu > .title");$menuTitle.on("mouseenter",function(){let $this=$(this);if(!m_openMenus.includes($this.parents(".menu").attr("id"))){m_openMenus.forEach(function(menuId){$("#"+menuId+" .title").removeClass("active");$("#"+menuId+" .menu-items").hide()});m_openMenus=[]}if(m_menuMousedown){$this.trigger("mousedown")}});$menuTitle.on("mousedown",function(){let $this=$(this);let $menuItems=$this.siblings(".menu-items");let menuId=$this.parents(".menu").attr("id");if(m_menuMousedown&&m_openMenus.includes(menuId)){$(".desktop").trigger("mouseup")}else{$this.addClass("active");toggleConditionalMenuItems($menuItems);$menuItems.show();m_openMenus=[menuId];m_menuMousedown=true}m_menuDraggingTimer=setInterval(function(){m_menuDragging=true},MENU_STICKY_GRACE_PERIOD)});$(".submenu").on("mouseenter",function(){let $this=$(this);if(m_menuItemFlashing||$this.is(".disabled"))return;if(m_menuMousedown){let $menuItems=$this.children(".menu-items");$this.addClass("active");toggleConditionalMenuItems($menuItems);$menuItems.show();$menuItems.css("left",$this.width()+SUBMENU_LEFT_OFFSET);m_openMenus.push($this.attr("id"))}});$(".menubar > div:not(.menu)").on("mouseenter",function(){m_openMenus.forEach(function(menuId){$("#"+menuId+" .title").removeClass("active");$("#"+menuId+" .menu-items").hide()});m_openMenus=[]});$(".desktop, .menubar > div:not(.menu), .menu-items > div.disabled, .menu-items > div.separator").on("mouseup",function(){let $this=$(this);if($this.is(".menu-items > div:not(.disabled)")&&$this.is(".menu-items > div:not(.separator)"))return;clearInterval(m_menuDraggingTimer);if(m_menuDragging)m_menuDragging=false;m_openMenus.forEach(function(menuId){$("#"+menuId+" .title").removeClass("active");$("#"+menuId+" .menu-items").hide()});m_openMenus=[];m_menuMousedown=false})}function toggleConditionalMenuItems($menuItems){$menuItems.children("div").each(function(){let $this=$(this);let requires=$this.attr("data-requires");if(requires){let fn=MenuItemRequires[requires];if(fn()){$this.removeClass("disabled")}else{$this.addClass("disabled")}}})}const MenuItemRequires={focusedFigure:function(){let $figure=$("figure");return $figure.hasClass("focus")},focusedWindow:function(){let $window=$(".window");return $window.hasClass("focus")}};