define(['apphost', 'connectionManager', 'events', 'globalize', 'css!./dockedtabs', 'emby-tabs'], function (appHost, connectionManager, events, globalize) { var currentUser = {}; var currentUserViews = []; function showUserView(id) { var view = currentUserViews.filter(function (current) { return current.Id == id; })[0]; if (view) { Emby.Page.showItem(view); } } function executeCommand(id) { switch (id) { case 'settings': Emby.Page.showSettings(); break; case 'signout': Dashboard.logout(); break; case 'selectserver': Emby.Page.showSelectServer(); break; case 'reports': Dashboard.navigate('reports.html'); break; case 'metadatamanager': Dashboard.navigate('metadatamanager.html'); break; case 'manageserver': Dashboard.navigate('dashboard.html'); break; case 'sync': Dashboard.navigate('mysync.html'); break; default: showUserView(id); break; } } function showMenu(menuItems, button) { require(['webActionSheet'], function (actionSheet) { actionSheet.show({ items: menuItems, positionTo: button, entryAnimation: 'slideup', exitAnimation: 'fadeout', entryAnimationDuration: 160, exitAnimationDuration: 100, offsetTop: -30, positionY: 'top', dialogClass: 'dockedtabs-dlg', menuItemClass: 'dockedtabs-dlg-menuitem' }).then(executeCommand); }); } function showLibrariesMenu(button) { var commands = currentUserViews.map(function (view) { return { name: view.Name, id: view.Id }; }); showMenu(commands, button); } function showMoreMenu(button) { var commands = []; // manage server, metadata manager, reports, sync to other devices if (currentUser.Policy.IsAdministrator) { commands.push({ name: globalize.translate('ButtonManageServer'), id: 'manageserver' }); commands.push({ name: globalize.translate('MetadataManager'), id: 'metadatamanager' }); commands.push({ name: globalize.translate('ButtonReports'), id: 'reports' }); } if (Dashboard.isConnectMode()) { commands.push({ name: globalize.translate('HeaderSelectServer'), id: 'selectserver' }); } commands.push({ name: globalize.translate('TabSettings'), id: 'settings' }); if (currentUser.Policy.EnableSync) { commands.push({ name: globalize.translate('SyncToOtherDevices'), id: 'sync' }); } commands.push({ name: globalize.translate('ButtonSignOut'), id: 'signout' }); showMenu(commands, button); } function onTabClick(e) { var index = parseInt(this.getAttribute('data-index')); switch (index) { case 0: Emby.Page.goHome(); break; case 1: showLibrariesMenu(this); e.preventDefault(); e.stopPropagation(); break; case 2: Emby.Page.showLiveTV(); break; case 3: Emby.Page.showFavorites(); break; case 4: Dashboard.navigate('mysync.html?mode=offline'); break; case 5: showMoreMenu(this); e.preventDefault(); e.stopPropagation(); break; default: break; } } function render(options) { var elem = document.createElement('div'); elem.classList.add('hide'); elem.classList.add('dockedtabs'); elem.classList.add('dockedtabs-bottom'); // tabs: // home // favorites // live tv // now playing var html = ''; var liveTVButtonClass = appHost.supports('sync') ? ' dockedtab-midsize' : ''; html += '
\ \ \ \ \ '; if (appHost.supports('sync')) { html += '\ '; } html += '\
\ '; elem.innerHTML = html; var buttons = elem.querySelectorAll('.emby-tab-button'); for (var i = 0, length = buttons.length; i < length; i++) { buttons[i].addEventListener('click', onTabClick); } options.appFooter.add(elem); return elem; } function onUserViewResponse(user, views, element) { if (views.filter(function (v) { return v.CollectionType == 'livetv'; }).length) { element.querySelector('.docked-tab-livetv').classList.remove('hide'); } else { element.querySelector('.docked-tab-livetv').classList.add('hide'); } } function showUserTabs(user, element) { currentUser = user; var apiClient = ConnectionManager.getApiClient(user.ServerId); apiClient.getUserViews({}, user.Id).then(function (result) { currentUserViews = result.Items; onUserViewResponse(user, result.Items, element); }, function () { currentUserViews = []; onUserViewResponse(user, [], element); }); } function showCurrentUserTabs(element) { if (!Dashboard.getCurrentUserId()) { return; } Dashboard.getCurrentUser().then(function (user) { showUserTabs(user, element); }); } function dockedTabs(options) { var self = this; self.element = render(options); events.on(connectionManager, 'localusersignedin', function (e, user) { self.element.classList.remove('hide'); showUserTabs(user, self.element); }); events.on(connectionManager, 'localusersignedout', function () { self.element.classList.add('hide'); }); showCurrentUserTabs(self.element); } dockedTabs.prototype.destroy = function () { var self = this; var elem = self.element; if (elem) { } self.element = null; }; return dockedTabs; });