define([ "exports", "./../dom.js", "./../common/inputmanager.js", "./../common/usersettings/usersettings.js", "./../common/globalize.js", "./../common/datetime.js", "./../common/playback/playbackmanager.js", "./../emby-apiclient/events.js", "./../emby-apiclient/connectionmanager.js", "./../layoutmanager.js", "./../approuter.js", "./../maintabsmanager.js", "./../viewmanager/viewmanager.js", "./../backdrop/backdrop.js", "./../common/servicelocator.js", "./../navdrawer/navdrawer.js", "./../navdrawer/navdrawercontent.js", "./../common/input/api.js", "./../emby-elements/emby-button/paper-icon-button-light.js", "./../common/methodtimer.js", ], function ( _exports, _dom, _inputmanager, _usersettings, _globalize, _datetime, _playbackmanager, _events, _connectionmanager, _layoutmanager, _approuter, _maintabsmanager, _viewmanager, _backdrop, _servicelocator, _navdrawer, _navdrawercontent, _api, _paperIconButtonLight, _methodtimer, ) { Object.defineProperty(_exports, "__esModule", { value: !0 }), (_exports.default = void 0), require(["material-icons", "css!modules/appheader/appheader.css"]); var headerHomeButton, headerMenuButton, headerBackButton, headerCastButton, headerHelpButton, headerSearchButton, headerSettingsButton, headerUserButton, selectedPlayerText, headerRight, currentServerId, isUserAdmin, headerMiddle, _scrollingElement, boundLayoutModeChangeFn, skinHeaderElement = document.querySelector(".skinHeader"), skinBodyElement = document.querySelector(".skinBody"), hasPhysicalBackButton = _servicelocator.appHost.supports("physicalbackbutton"), supportsFullscreenMediaQueries = _servicelocator.appHost.supports( "fullscreenmediaqueries", ), backgroundContainer = document.querySelector(".backgroundContainer"), decodingAttribute = _dom.default.supportsAsyncDecodedImages() ? ' decoding="async"' : "", TranslateProperty = CSS.supports("translate", "40px 100px") ? "translate" : CSS.supports("transform", "scale(1)") ? "transform" : "-webkit-transform", userSignedIn = !1, currentDrawerState = 0, SupportsExternalLinks = _servicelocator.appHost.supports("externallinks") && _servicelocator.appHost.supports("targetblank"); function updateClock() { var clock = this.clockElement; clock && (clock.innerHTML = _datetime.default .getDisplayTime(new Date()) .toLowerCase()); } function onLocalUserSignedOut(e) { (userSignedIn = !1), headerSearchButton.classList.add("hide"), updateUserInHeader(null), setRemoteControlVisibility(); } function ensureHeaderSettingsButton() { (headerUserButton = headerUserButton || document.querySelector(".headerUserButton")), (headerSettingsButton = headerSettingsButton || document.querySelector(".headerSettingsButton")); } function updateUserInHeader(user) { var userImageUrl; ensureHeaderSettingsButton(), user && user.PrimaryImageTag && (userImageUrl = (function (user, apiClient, options) { return ( ((options = options || {}).type = "Primary"), user.PrimaryImageTag ? ((options.tag = user.PrimaryImageTag), apiClient.getUserImageUrl(user.Id, options)) : null ); })(user, _connectionmanager.default.getApiClient(user.ServerId), { height: Math.round(0.56 * skinHeaderElement.offsetHeight), })), (headerUserButton.innerHTML = userImageUrl ? '' : ''), (isUserAdmin = user ? (headerUserButton.classList.remove("hide"), _layoutmanager.default.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() { _servicelocator.appHost.supports("premiereinheader") && _connectionmanager.default.currentApiClient() && _connectionmanager.default.currentApiClient().serverId() && require(["registrationServices", "emby-button"], function ( registrationServices, ) { registrationServices .validateFeature("themes", { viewOnly: !0, showDialog: !1 }) .then(removePremiereButton, addPremiereButton); }); } function onPremiereButtonClick() { require(["registrationServices"], function (registrationServices) { registrationServices .validateFeature("themes", { viewOnly: !0 }) .then(resetPremiereButton); }); } function addPremiereButton() { var html = '"; document.querySelector(".btnHeaderPremiere") || (document .querySelector(".headerRight") .insertAdjacentHTML("afterbegin", html), document .querySelector(".btnHeaderPremiere") .addEventListener("click", onPremiereButtonClick)); } function removePremiereButton() { var btn = document.querySelector(".btnHeaderPremiere"); btn && btn.remove(); } function onLocalUserSignedIn(e, serverId, userId) { (currentServerId = serverId), (userSignedIn = !0), _connectionmanager.default .getApiClient(serverId) .getUser(userId) .then(updateUserInHeader), resetPremiereButton(), setRemoteControlVisibility(), setSearchVisibility({}); } function onHeaderMenuButtonClick() { _navdrawer.default.open(); } function onHomeClick() { _approuter.default.goHome(); } function onBackClick(e) { _inputmanager.default.trigger("back", { sourceElement: _viewmanager.default.currentView(), originalEvent: e, }); } function onSearchClick(e) { _inputmanager.default.trigger("search", { sourceElement: _viewmanager.default.currentView(), originalEvent: e, }); } function onUserButtonClick() { _approuter.default.showUserMenu({ positionTo: this, positionY: "bottom" }); } function onSettingsButtonClick() { var manageServerRouteUrl = _approuter.default.getRouteUrl("manageserver"); if (!isUserAdmin || !_approuter.default.getRouteInfo(manageServerRouteUrl)) return onUserButtonClick.call(this); _approuter.default.show(manageServerRouteUrl); } function onCastButtonClick() { var btn = this; require(["playerSelectionMenu"], function (playerSelectionMenu) { playerSelectionMenu.show(btn); }); } function onLayoutModeChange() { !_layoutmanager.default.tv && _dom.default.allowBackdropFilter() ? skinHeaderElement.classList.add("skinHeader-withbackdropfilter") : skinHeaderElement.classList.remove("skinHeader-withbackdropfilter"), ensureHeaderSettingsButton(), _layoutmanager.default.tv || headerUserButton.classList.contains("hide") ? headerSettingsButton.classList.add("hide") : headerSettingsButton.classList.remove("hide"), _layoutmanager.default.tv ? (headerRight.classList.add("secondaryText"), skinHeaderElement.classList.add("appHeader-tv")) : (headerRight.classList.remove("secondaryText"), skinHeaderElement.classList.remove("appHeader-tv")), (headerMiddle = headerMiddle || document.querySelector(".headerMiddle")), _layoutmanager.default.tv ? headerMiddle.classList.add("headerMiddle-tv") : headerMiddle.classList.remove("headerMiddle-tv"), this.destroyClock(), this.loadClock(), setRemoteControlVisibility(); } function updateCastIcon() { var info, btnCast = headerCastButton; btnCast && ((info = _playbackmanager.default.getPlayerInfo()) && !info.isLocalPlayer ? ((btnCast.innerHTML = ""), (selectedPlayerText.innerHTML = info.deviceName || info.name)) : ((btnCast.innerHTML = ""), (selectedPlayerText.innerHTML = ""))); } function onNewPlayQueueStart(e, player, state) { !(function (state) { return ( _layoutmanager.default.tv && state.NowPlayingItem && "Audio" === state.NowPlayingItem.MediaType ); })(state) || state.IsBackgroundPlayback || _approuter.default.showNowPlaying(); } function setRemoteControlVisibility() { _servicelocator.appHost.supports("remotecontrol") && !_layoutmanager.default.tv && userSignedIn ? (headerCastButton.classList.remove("hide"), selectedPlayerText.classList.remove("hide")) : (headerCastButton.classList.add("hide"), selectedPlayerText.classList.add("hide")); } function setSearchVisibility(viewDetail) { !userSignedIn || !1 === viewDetail.searchButton || "search" === (null == (viewDetail = viewDetail.params) ? void 0 : viewDetail.type) || (!_layoutmanager.default.tv && [1, 2, 3].includes(currentDrawerState)) ? headerSearchButton.classList.add("hide") : headerSearchButton.classList.remove("hide"); } function allowDrawer(detail) { if (!1 !== detail.drawer && userSignedIn) { if (detail.hideDrawerWithOtherUserIdParam) { detail = detail.params; if (detail && detail.userId && detail.serverId) { var apiClient = _connectionmanager.default.getApiClient( detail.serverId, ); if (apiClient && apiClient.getCurrentUserId() !== detail.userId) return; } } return 1; } } function updateWindowScroll(detail, view) { (elem = _scrollingElement) || ((elem = document.scrollingElement || document.documentElement), (_scrollingElement = elem)); var elem; enableWindowScroll(detail) ? (elem.classList.remove("noScrollY"), elem.classList.add("overflowYScroll"), skinBodyElement.classList.add("skinBody-withWindowScroll"), skinHeaderElement.classList.add("headroom-scrolling"), skinHeaderElement.classList.remove("headroom-hidden")) : (elem.classList.add("noScrollY"), elem.classList.remove("overflowYScroll"), skinBodyElement.classList.remove("skinBody-withWindowScroll")); } function onNavDrawerStateChange(e, drawerState) { 3 === (currentDrawerState = drawerState) ? (headerHomeButton.classList.add("headerHomeButton-withdockeddrawer"), headerMenuButton.classList.add("headerMenuButton-withdockeddrawer"), backgroundContainer.classList.add( "backgroundContainer-withdockeddrawer", ), skinBodyElement.classList.add( "skinBody-withMiniDrawer", "skinBody-withDockedDrawer", ), skinBodyElement.classList.remove("skinBody-withFullDrawer"), skinHeaderElement.classList.remove("skinHeader-withfulldrawer"), skinHeaderElement.classList.add( "skinHeader-withminidrawer", "skinHeader-withdockeddrawer", )) : 2 === drawerState ? (headerHomeButton.classList.add("headerHomeButton-withdockeddrawer"), headerMenuButton.classList.add("headerMenuButton-withdockeddrawer"), backgroundContainer.classList.add( "backgroundContainer-withdockeddrawer", ), skinBodyElement.classList.add( "skinBody-withFullDrawer", "skinBody-withDockedDrawer", ), skinBodyElement.classList.remove("skinBody-withMiniDrawer"), skinHeaderElement.classList.add( "skinHeader-withfulldrawer", "skinHeader-withdockeddrawer", ), skinHeaderElement.classList.remove("skinHeader-withminidrawer")) : 1 === drawerState ? 3 === _navdrawer.default.closeState ? (headerHomeButton.classList.add("headerHomeButton-withdockeddrawer"), headerMenuButton.classList.add("headerMenuButton-withdockeddrawer"), backgroundContainer.classList.add( "backgroundContainer-withdockeddrawer", ), skinBodyElement.classList.remove("skinBody-withFullDrawer"), skinHeaderElement.classList.remove("skinHeader-withfulldrawer"), skinBodyElement.classList.add( "skinBody-withMiniDrawer", "skinBody-withDockedDrawer", ), skinHeaderElement.classList.add( "skinHeader-withminidrawer", "skinHeader-withdockeddrawer", )) : (headerHomeButton.classList.remove( "headerHomeButton-withdockeddrawer", ), headerMenuButton.classList.remove( "headerMenuButton-withdockeddrawer", ), backgroundContainer.classList.remove( "backgroundContainer-withdockeddrawer", ), skinBodyElement.classList.remove( "skinBody-withFullDrawer", "skinBody-withMiniDrawer", "skinBody-withDockedDrawer", ), skinHeaderElement.classList.remove( "skinHeader-withfulldrawer", "skinHeader-withminidrawer", "skinHeader-withdockeddrawer", )) : (skinBodyElement.classList.remove( "skinBody-withFullDrawer", "skinBody-withMiniDrawer", "skinBody-withDockedDrawer", ), skinHeaderElement.classList.remove( "skinHeader-withfulldrawer", "skinHeader-withminidrawer", "skinHeader-withdockeddrawer", ), backgroundContainer.classList.remove( "backgroundContainer-withdockeddrawer", ), headerHomeButton.classList.remove("headerHomeButton-withdockeddrawer"), headerMenuButton.classList.remove("headerMenuButton-withdockeddrawer")), setSearchVisibility(_viewmanager.default.currentViewInfo() || {}); } function onViewShow(e) { var instance, detail = e.detail; detail.clearBackdrop && _backdrop.default.clear(), (function (detail) { var drawerStyle; allowDrawer(detail) && !_layoutmanager.default.tv && ("docked" === (drawerStyle = detail.settingsTheme ? "docked" : _usersettings.default.drawerStyle()) || "docked-mini" === drawerStyle) ? (_layoutmanager.default.tv && (drawerStyle = "docked-mini"), (detail.drawerInline = !0), _navdrawer.default.open(!0, "docked-mini" === drawerStyle)) : ((_navdrawer.default.closeState = null), _navdrawer.default.close()); })(detail), (function (detail) { !1 === (detail = detail.backButton) || !_approuter.default.canGoBack() || (hasPhysicalBackButton && !0 !== detail && !_layoutmanager.default.tv) ? headerBackButton.classList.add("hide") : !supportsFullscreenMediaQueries || !0 === detail || _layoutmanager.default.tv ? headerBackButton.classList.remove( "headerBackButton-showfullscreen", "hide", ) : (headerBackButton.classList.add("headerBackButton-showfullscreen"), headerBackButton.classList.remove("hide")); })(detail), (function (detail) { userSignedIn && !1 !== detail.homeButton ? headerHomeButton.classList.remove("hide") : headerHomeButton.classList.add("hide"); })(detail), setSearchVisibility(detail), (function (detail) { !_layoutmanager.default.tv && userSignedIn && allowDrawer(detail) ? headerMenuButton.classList.remove("hide") : headerMenuButton.classList.add("hide"); })(detail), (function (detail) { (detail = detail.helpUrl) && SupportsExternalLinks ? ((headerHelpButton.href = detail), headerHelpButton.classList.remove("hide")) : headerHelpButton.classList.add("hide"); })(detail), (function (detail) { !_layoutmanager.default.tv && detail.adjustHeaderForEmbeddedScroll ? skinHeaderElement.classList.add("adjustHeaderForEmbeddedScroll") : skinHeaderElement.classList.remove("adjustHeaderForEmbeddedScroll"); })(detail), (function (detail) { !1 === detail.secondaryHeaderFeatures ? headerRight.classList.add("hide") : headerRight.classList.remove("hide"); })(detail, e.target), (function (header, detail) { detail.defaultTitle ? header.setDefaultTitle() : null != (detail = detail.title) && header.setTitle(_globalize.default.translate(detail)); })(this, detail, e.target), (instance = (instance = this).pageTitleElement) && (_layoutmanager.default.tv || headerBackButton.classList.contains("hide") ? instance.classList.add("pageTitle-marginstart") : instance.classList.remove("pageTitle-marginstart")), _navdrawer.default.onViewShow(e), !detail.isRestored && enableWindowScroll(detail) && window.scrollTo(0, 0); } function enableWindowScroll(detail) { return !0 === detail.windowScroll; } function removeTransformFromHeader() { skinHeaderElement.style[TranslateProperty] = "none"; } function onViewBeforeShow(e) { var detail = e.detail, e = e.target, skinHeader = (detail.headerTabs || _maintabsmanager.default.setTabs(null), skinHeaderElement); !1 !== detail.headerBackground && skinHeader.classList.add("skinHeader-withBackground"), (detail.adjustHeaderForEmbeddedScroll && !0 !== detail.windowScroll) || removeTransformFromHeader(), updateWindowScroll(detail, e), !1 === detail.headerBackground && skinHeader.classList.remove("skinHeader-withBackground"), this.setTransparent(detail.transparentHeader); } function render(instance) { var Help, headerLeft, Back, Home, Menu; (instance.element = skinHeaderElement), (headerLeft = skinHeaderElement.querySelector(".headerLeft")), (Menu = _globalize.default.translate("Menu")), (Home = _globalize.default.translate("Home")), (Back = _globalize.default.translate("Back")), (Help = _globalize.default.translate("Help")), (headerLeft.innerHTML = '\n \n \n \n

 

\n\n \n \n \n ', )), (headerLeft = _globalize.default.translate("ManageEmbyServer")), (Back = _globalize.default.translate("Settings")), (Home = _globalize.default.translate("Search")), (Menu = _globalize.default.translate("PlayOnAnotherDevice")), (skinHeaderElement.querySelector(".headerRight").innerHTML = '\n
\n\n
\n \n \n \n \n
\n ', )), (function (instance) { var parent = instance.element; (headerBackButton = parent.querySelector(".headerBackButton")), (headerHomeButton = parent.querySelector(".headerHomeButton")), (headerMenuButton = parent.querySelector(".headerMenuButton")), (headerCastButton = parent.querySelector(".headerCastButton")), (headerHelpButton = parent.querySelector(".headerHelpButton")), (headerSearchButton = parent.querySelector(".headerSearchButton")), (selectedPlayerText = parent.querySelector(".headerSelectedPlayer")), (headerRight = parent.querySelector(".headerRight")), headerBackButton.addEventListener("click", onBackClick), headerHomeButton.addEventListener("click", onHomeClick), headerSearchButton.addEventListener("click", onSearchClick), headerCastButton.addEventListener("click", onCastButtonClick), parent .querySelector(".headerUserButton") .addEventListener("click", onUserButtonClick), parent .querySelector(".headerSettingsButton") .addEventListener("click", onSettingsButtonClick), headerMenuButton.addEventListener("click", onHeaderMenuButtonClick), (boundLayoutModeChangeFn = onLayoutModeChange.bind(instance)), _events.default.on( _layoutmanager.default, "modechange", boundLayoutModeChangeFn, ), _events.default.on( _playbackmanager.default, "playerchange", updateCastIcon, ), _events.default.on( _playbackmanager.default, "playqueuestart", onNewPlayQueueStart, ), _events.default.on( _connectionmanager.default, "localusersignedin", onLocalUserSignedIn, ), _events.default.on( _connectionmanager.default, "localusersignedout", onLocalUserSignedOut, ), _events.default.on(_api.default, "UserUpdated", onUserUpdated), document.addEventListener( "viewbeforeshow", onViewBeforeShow.bind(instance), ), document.addEventListener("viewshow", onViewShow.bind(instance)), (instance.pageTitleElement = parent.querySelector(".pageTitle")), resetPremiereButton(), _events.default.on( _connectionmanager.default, "resetregistrationinfo", resetPremiereButton, ); })(instance), setRemoteControlVisibility(), onLayoutModeChange.call(instance), _events.default.on( _navdrawer.default, "drawer-state-change", onNavDrawerStateChange, ), _events.default.on( _navdrawercontent.default, "dynamic-title", function (e, title) { this.setTitle(title); }.bind(instance), ); } 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.default({ onInterval: updateClock.bind(this), timeoutMs: 5e4, type: "interval", }); }), (AppHeader.prototype.loadClock = function () { var elem; _layoutmanager.default.tv ? ((elem = document.querySelector(".headerClock")).classList.remove( "hide", ), (this.clockElement = elem), this.stopClockInterval(), this.startClockInterval(), updateClock.call(this)) : this.destroyClock(); }); var defaultDocumentTitle = document.title || "Emby"; (AppHeader.prototype.setDefaultTitle = function () { var pageTitleElement = this.pageTitleElement; pageTitleElement && (pageTitleElement.classList.add( "pageTitleWithLogo", "pageTitleWithDefaultLogo", ), (pageTitleElement.style.backgroundImage = null), (pageTitleElement.innerHTML = "")), (document.title = defaultDocumentTitle); }), (AppHeader.prototype.setTitle = function (title) { var html, pageTitleElement; null == title ? this.setDefaultTitle() : ((html = (function (title) { return title ? "string" != typeof title ? title.Name || "" : title : ""; })((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 || defaultDocumentTitle : defaultDocumentTitle)); }), (AppHeader.prototype.setLogoTitle = function (options) { var pageTitleElement; if (!(url = options.url)) for ( var items = options.items, i = 0, length = items.length; i < length; i++ ) { var url, item = items[i]; if ( (url = (function ( item, apiClient, options, preferredLogoImageTypes, ) { return apiClient.getLogoImageUrl( item, (options = options || {}), preferredLogoImageTypes, ); })( item, _connectionmanager.default.getApiClient(item), {}, options.preferredLogoImageTypes, )) ) break; } url ? ((document.title = options.titleText || defaultDocumentTitle), ((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") : skinHeaderElement.classList.remove("semiTransparent"); }), (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 () { var instance; this.destroyClock(), (instance = (instance = this).element) && (instance .querySelector(".headerBackButton") .removeEventListener("click", onBackClick), instance .querySelector(".headerHomeButton") .removeEventListener("click", onHomeClick), instance .querySelector(".headerSearchButton") .removeEventListener("click", onSearchClick), instance .querySelector(".headerCastButton") .removeEventListener("click", onCastButtonClick), instance .querySelector(".headerUserButton") .removeEventListener("click", onUserButtonClick), instance .querySelector(".headerSettingsButton") .removeEventListener("click", onSettingsButtonClick), instance .querySelector(".headerMenuButton") .removeEventListener("click", onHeaderMenuButtonClick)), _events.default.off( _layoutmanager.default, "modechange", boundLayoutModeChangeFn, ), _events.default.off( _playbackmanager.default, "playerchange", updateCastIcon, ), _events.default.off( _playbackmanager.default, "playqueuestart", onNewPlayQueueStart, ), _events.default.off( _connectionmanager.default, "localusersignedin", onLocalUserSignedIn, ), _events.default.off( _connectionmanager.default, "localusersignedout", onLocalUserSignedOut, ), _events.default.off(_api.default, "UserUpdated", onUserUpdated), _events.default.off( _connectionmanager.default, "resetregistrationinfo", resetPremiereButton, ), document.removeEventListener("viewbeforeshow", onViewBeforeShow), document.removeEventListener("viewshow", onViewShow), (this.element = null); }); var _default = new AppHeader(); _exports.default = _default; });