define(["backdrop", "mainTabsManager", "layoutManager", "emby-tabs"], function(backdrop, mainTabsManager, layoutManager) { "use strict"; function onViewDestroy(e) { var tabControllers = this.tabControllers; tabControllers && (tabControllers.forEach(function(t) { t.destroy && t.destroy() }), this.tabControllers = null), this.view = null, this.params = null, this.currentTabController = null, this.initialTabIndex = null } function onBeforeTabChange() {} function TabbedView(view, params) { function validateTabLoad(index) { return self.validateTabLoad ? self.validateTabLoad(index) : Promise.resolve() } function loadTab(index, previousIndex) { validateTabLoad(index).then(function() { self.getTabController(index).then(function(controller) { var refresh = !controller.refreshed; controller.onResume({ autoFocus: null == previousIndex && layoutManager.tv, refresh: refresh }), controller.refreshed = !0, currentTabIndex = index, self.currentTabController = controller }) }) } function getTabContainers() { return view.querySelectorAll(".tabContent") } function onTabChange(e) { var newIndex = parseInt(e.detail.selectedTabIndex), previousIndex = e.detail.previousIndex, previousTabController = null == previousIndex ? null : self.tabControllers[previousIndex]; previousTabController && previousTabController.onPause && previousTabController.onPause(), loadTab(newIndex, previousIndex) } this.tabControllers = [], this.view = view, this.params = params; var self = this, currentTabIndex = parseInt(params.tab || this.getDefaultTabIndex(params.parentId)); this.initialTabIndex = currentTabIndex, view.addEventListener("viewbeforehide", this.onPause.bind(this)), view.addEventListener("viewbeforeshow", function(e) { mainTabsManager.setTabs(view, currentTabIndex, self.getTabs, getTabContainers, onBeforeTabChange, onTabChange, !1) }), view.addEventListener("viewshow", function(e) { self.onResume(e.detail) }), view.addEventListener("viewdestroy", onViewDestroy.bind(this)) } return TabbedView.prototype.onResume = function(options) { this.setTitle(), backdrop.clear(); var currentTabController = this.currentTabController; currentTabController ? currentTabController && currentTabController.onResume && currentTabController.onResume({}) : mainTabsManager.selectedTabIndex(this.initialTabIndex) }, TabbedView.prototype.onPause = function() { var currentTabController = this.currentTabController; currentTabController && currentTabController.onPause && currentTabController.onPause() }, TabbedView.prototype.setTitle = function() { Emby.Page.setTitle("") }, TabbedView });