EmbyCrackedClient/web/modules/appheader/appheader.js

33 lines
26 KiB
JavaScript
Raw Normal View History

2025-06-25 11:46:04 +08:00
import dom from"./../dom.js";import inputManager from"./../common/inputmanager.js";import userSettings from"./../common/usersettings/usersettings.js";import globalize from"./../common/globalize.js";import datetime from"./../common/datetime.js";import playbackManager from"./../common/playback/playbackmanager.js";import events from"./../emby-apiclient/events.js";import connectionManager from"./../emby-apiclient/connectionmanager.js";import layoutManager from"./../layoutmanager.js";import appRouter from"./../approuter.js";import mainTabsManager from"./../maintabsmanager.js";import viewManager from"./../viewmanager/viewmanager.js";import backdrop from"./../backdrop/backdrop.js";import{appHost}from"./../common/servicelocator.js";import navDrawerInstance from"./../navdrawer/navdrawer.js";import navDrawerContent from"./../navdrawer/navdrawercontent.js";import serverNotifications from"./../common/input/api.js";import"./../emby-elements/emby-button/paper-icon-button-light.js";import"./../emby-elements/emby-button/emby-button.js";import MethodTimer from"./../common/methodtimer.js";import appHeaderContent from"./appheadercontent.js";require(["material-icons","css!modules/appheader/appheader.css"]);let skinHeaderElement=document.querySelector(".skinHeader"),skinBodyElement=document.querySelector(".skinBody"),hasPhysicalBackButton=appHost.supports("physicalbackbutton"),supportsFullscreenMediaQueries=appHost.supports("fullscreenmediaqueries"),backgroundContainer=document.querySelector(".backgroundContainer"),supportsAsyncDecodedImages=dom.supportsAsyncDecodedImages(),decodingAttribute=supportsAsyncDecodedImages?' decoding="async"':"",SupportsTranslateProperty=CSS.supports("translate","40px 100px"),TranslateProperty=SupportsTranslateProperty?"translate":CSS.supports("transform","scale(1)")?"transform":"-webkit-transform",docElem=document.documentElement,userSignedIn=!1,headerLeft,headerHomeButton,headerMenuButton,headerBackButton,headerCastButton,headerHelpButton,headerSearchButton,headerSettingsButton,headerUserButton,selectedPlayerText,headerRight,currentServerId,isUserAdmin,headerMiddle,currentDrawerState,appFooter,SupportsExternalLinks=appHost.supports("externallinks")&&appHost.supports("targetblank");function updateClock(){var clock=this.clockElement;clock&&(clock.innerHTML=datetime.getDisplayTime(new Date).toLowerCase())}function onLocalUserSignedOut(e){userSignedIn=!1,headerSearchButton.classList.add("hide"),updateUserInHeader(null),setRemoteControlVisibility()}function getUserImageUrl(user,apiClient,options){return(options=options||{}).type="Primary",user.PrimaryImageTag?(options.tag=user.PrimaryImageTag,apiClient.getUserImageUrl(user.Id,options)):null}function ensureHeaderMiddle(){headerMiddle=headerMiddle||document.querySelector(".headerMiddle")}function ensureHeaderSettingsButton(){headerUserButton=headerUserButton||document.querySelector(".headerUserButton"),headerSettingsButton=headerSettingsButton||document.querySelector(".headerSettingsButton")}function updateUserInHeader(user){ensureHeaderSettingsButton();let userImageUrl;var apiClient,height;user&&user.PrimaryImageTag&&(apiClient=connectionManager.getApiClient(user.ServerId),height=Math.round(.56*skinHeaderElement.offsetHeight),userImageUrl=getUserImageUrl(user,apiClient,{height:height})),userImageUrl?headerUserButton.innerHTML='<img draggable="false"'+decodingAttribute+' class="headerUserButtonImage paper-icon-button-img" src="'+userImageUrl+'" />':headerUserButton.innerHTML='<i class="md-icon">&#xe7FD;</i>',isUserAdmin=user?(headerUserButton.classList.remove("hide"),layoutManager.tv?headerSettingsButton.classList.add("hide"):headerSettingsButton.classList.remove("hide"),user.Policy.IsAdministrator):(headerUserButton.classList.add("hide"),headerSettingsButton.classList.add("hide"),!1)}function onUserUpdated(e,apiClient,data){apiClient.getCurrentUserId()===data.Id&&apiClient.serverId()===currentServerId&&updateUserInHeader(data)}function resetPremiereButton(){appHost.supports("premiereinheader")&&connectionManager.currentApiClient()&&connectionManager.currentApiClient
<button type="button" is="paper-icon-button-light" class="headerBackButton headerButton headerSectionItem hide-mouse-idle-tv hide" tabindex="-1" title="${Back}" aria-label="${Back}">
<i class="md-icon autortl">&#xe2ea;</i>
</button>
<button type="button" is="paper-icon-button-light" class="headerHomeButton headerButton headerSectionItem hide-mouse-idle-tv hide md-icon md-icon-fill" tabindex="-1" title="${Home}" aria-label="${Home}">
&#xe88a;
</button>
<button type="button" is="paper-icon-button-light" class="headerMenuButton headerButton headerSectionItem hide md-icon" title="${Menu}" aria-label="${Menu}">
&#xe5D2;
</button>
<h2 class="pageTitle headerSectionItem">&nbsp;</h2>
<a type="button" is="emby-linkbutton" class="paper-icon-button-light headerHelpButton dialogHeaderButton button-help headerButton headerSectionItem hide secondaryText" title="${Help}" aria-label="${Help}" target="_blank" href="#">
<i class="md-icon autortl-arabic">&#xe887;</i>
</a>
`}function addHeaderRightContent(){var ManageEmbyServer=globalize.translate("ManageEmbyServer"),Settings=globalize.translate("Settings"),Search=globalize.translate("Search"),PlayOnAnotherDevice=globalize.translate("PlayOnAnotherDevice");skinHeaderElement.querySelector(".headerRight").innerHTML=`
<div class="headerSelectedPlayer headerSectionItem hide">
</div>
<button type="button" is="paper-icon-button-light" class="headerCastButton headerButton hide headerSectionItem md-icon hide" title="${PlayOnAnotherDevice}" aria-label="${PlayOnAnotherDevice}">
&#xe307;
</button>
<button type="button" is="paper-icon-button-light" class="headerSearchButton headerButton hide headerSectionItem md-icon hide" title="${Search}" aria-label="${Search}">
&#xe8B6;
</button>
<button type="button" is="paper-icon-button-light" class="headerUserButton headerButton headerSectionItem hide" title="${Settings}" aria-label="${Settings}">
<i class="md-icon largeIcon">&#xe7FD;</i>
</button>
<button type="button" is="paper-icon-button-light" class="headerSettingsButton headerButton headerSectionItem md-icon hide" title="${ManageEmbyServer}" aria-label="${ManageEmbyServer}">
&#xe8B8;
</button>
<div class="headerClock headerSectionItem hide"></div>
`}function AppHeader(){}AppHeader.prototype.init=function(){return render(this)},AppHeader.prototype.stopClockInterval=function(){var interval=this.clockInterval;interval&&(interval.destroy(),this.clockInterval=null)},AppHeader.prototype.startClockInterval=function(){this.clockInterval=new MethodTimer({onInterval:updateClock.bind(this),timeoutMs:5e4,type:"interval"})},AppHeader.prototype.loadClock=function(){var elem;layoutManager.tv?((elem=document.querySelector(".headerClock")).classList.remove("hide"),this.clockElement=elem,this.stopClockInterval(),this.startClockInterval(),updateClock.call(this)):this.destroyClock()};let defaultDocumentTitle=document.title||"Emby";function getDefaultDocumentTitle(){return defaultDocumentTitle}function getTitleHtml(title){return title?"string"!=typeof title?title.Name||"":title:""}AppHeader.prototype.setDefaultTitle=function(){var pageTitleElement=this.pageTitleElement;pageTitleElement&&(pageTitleElement.classList.add("pageTitleWithLogo","pageTitleWithDefaultLogo"),pageTitleElement.style.backgroundImage=null,pageTitleElement.innerHTML=""),document.title=getDefaultDocumentTitle()},AppHeader.prototype.setTitle=function(title){var html,pageTitleElement;null==title?this.setDefaultTitle():(html=getTitleHtml(title="-"===title?"":title),(pageTitleElement=this.pageTitleElement)&&(pageTitleElement.classList.remove("pageTitleWithLogo","pageTitleWithDefaultLogo"),pageTitleElement.style.backgroundImage=null,pageTitleElement.innerHTML=html||""),document.title=title?"string"==typeof title?title:title.Name||getDefaultDocumentTitle():getDefaultDocumentTitle())},AppHeader.prototype.setLogoTitle=function(options){let url=options.url;if(!url){var items=options.items;for(let i=0,length=items.length;i<length;i++){var item=items[i];if(url=connectionManager.getApiClient(item).getLogoImageUrl(item,{maxHeight:appHeaderContent.getHeight()||100},options.preferredLogoImageTypes))break}}var pageTitleElement;url?(document.title=options.titleText||getDefaultDocumentTitle(),(pageTitleElement=this.pageTitleElement).style.backgroundImage="url('"+url+"')",pageTitleElement.classList.add("pageTitleWithLogo"),pageTitleElement.classList.remove("pageTitleWithDefaultLogo"),pageTitleElement.innerHTML=""):this.setTitle(options.titleText)},AppHeader.prototype.setTransparent=function(transparent){transparent?skinHeaderElement.classList.add("semiTransparent","darkContentContainer"):skinHeaderElement.classList.remove("semiTransparent","darkContentContainer")},AppHeader.prototype.hasFocus=function(){var activeElement=document.activeElement;return!!activeElement&&this.element.contains(activeElement)},AppHeader.prototype.ensureVisible=function(){removeTransformFromHeader()},AppHeader.prototype.destroyClock=function(){this.stopClockInterval();var elem=this.clockElement;elem&&elem.classList.add("hide"),this.clockElement=null},AppHeader.prototype.destroy=function(){this.destroyClock(),unbindEvents(this),this.element=null};export default new AppHeader;