(function (window, document, $) { var itemCountsPromise; var liveTvInfoPromise; var itemsPromise; function ensurePromises() { itemsPromise = itemsPromise || ApiClient.getItems(Dashboard.getCurrentUserId(), { SortBy: "SortName" }); itemCountsPromise = itemCountsPromise || ApiClient.getItemCounts(Dashboard.getCurrentUserId()); liveTvInfoPromise = liveTvInfoPromise || ApiClient.getLiveTvInfo(); } function renderHeader(page, user) { var html = '
'; html += ''; html += 'MEDIABROWSER'; //html += 'Remote Control'; html += '
'; html += ''; html += ''; html += ''; if (user.Configuration.IsAdministrator) { html += ''; } html += ''; if (user.PrimaryImageTag) { var url = ApiClient.getUserImageUrl(user.Id, { height: 18, tag: user.PrimaryImageTag, type: "Primary" }); html += ''; } else { html += ''; } html += ''; html += '
'; html += '
'; var $page = $(page); $page.prepend(html); $('.viewMenuBar', page).trigger('create'); $page.trigger('headercreated'); } function getItemHref(item) { return LibraryBrowser.getHref(item); } function getViewsHtml(user, counts, items, liveTvInfo) { var html = ''; html += items.map(function (i) { var viewMenuCssClass = (i.CollectionType || 'general') + 'ViewMenu'; return '' + i.Name + ''; }).join(''); var showChannels = counts.ChannelCount; var showLiveTv = liveTvInfo.EnabledUsers.indexOf(user.Id) != -1; if (showChannels || showLiveTv) { html += '
'; } if (showChannels) { html += 'Channels'; } if (showLiveTv) { html += 'Live TV'; } if (user.Configuration.IsAdministrator) { html += '
'; html += 'Dashboard'; html += 'Metadata Manager'; } return html; } function showLibraryMenu() { ensurePromises(); var userPromise = Dashboard.getCurrentUser(); $.when(itemCountsPromise, itemsPromise, liveTvInfoPromise, userPromise).done(function (response1, response2, response3, response4) { var counts = response1[0]; var items = response2[0].Items; var liveTvInfo = response3[0]; var user = response4[0]; var page = $.mobile.activePage; var panel = getLibraryMenu(page, user, counts, items, liveTvInfo); $(panel).panel('toggle'); }); } function getLibraryMenu(page, user, counts, items, liveTvInfo) { var panel = $('#libraryPanel', page); if (!panel.length) { var html = ''; html += '
'; html += '

MEDIABROWSER

'; html += '
'; html += getViewsHtml(user, counts, items, liveTvInfo); html += '
'; html += '
'; $(page).append(html); panel = $('#libraryPanel', page).panel({}).trigger('create'); } updateLibraryNavLinks(page); return panel; } function getTopParentId() { return getParameterByName('topParentId') || sessionStorage.getItem('topParentId') || null; } window.LibraryMenu = { showLibraryMenu: showLibraryMenu, getTopParentId: getTopParentId }; function updateCastIcon() { var info = MediaController.getPlayerInfo(); if (info.isLocalPlayer) { $('.btnCast').addClass('btnDefaultCast').removeClass('btnActiveCast'); } else { $('.btnCast').removeClass('btnDefaultCast').addClass('btnActiveCast'); } } function updateLibraryNavLinks(page, updateElements) { page = $(page); var isLiveTvPage = page.hasClass('liveTvPage'); var isChannelsPage = page.hasClass('channelsPage'); var id = isLiveTvPage || isChannelsPage || page.hasClass('allLibraryPage') ? '' : getTopParentId() || ''; sessionStorage.setItem('topParentId', id); $('.lnkMediaFolder').each(function () { var itemId = this.getAttribute('data-itemid'); if (isChannelsPage && itemId == 'channels') { $(this).addClass('selectedMediaFolder'); } else if (isLiveTvPage && itemId == 'livetv') { $(this).addClass('selectedMediaFolder'); } else if (id && itemId == id) { $(this).addClass('selectedMediaFolder'); } else { $(this).removeClass('selectedMediaFolder'); } }); $('.scopedLibraryViewNav a', page).each(function () { var src = this.href; if (src.indexOf('#') != -1) { return; } src = replaceQueryString(src, 'topParentId', id); this.href = src; }); } $(document).on('pageinit', ".libraryPage", function () { var page = this; $('.libraryViewNav', page).wrapInner('
'); $('.libraryViewNav a', page).each(function () { this.innerHTML = '' + this.innerHTML + ''; }); }).on('pagebeforeshow', ".libraryPage", function () { var page = this; updateLibraryNavLinks(page); if (!$('.viewMenuBar', page).length) { Dashboard.getCurrentUser().done(function (user) { renderHeader(page, user); updateCastIcon(); updateLibraryNavLinks(page); }); } }).on('pageshow', ".libraryPage", function () { var page = this; var elem = $('.libraryViewNavInner .ui-btn-active:visible', page); if (elem.length) { elem[0].scrollIntoView(); // Scroll back up so in case vertical scroll was messed with $(document).scrollTop(0); } }); $(function () { $(MediaController).on('playerchange', function () { updateCastIcon(); }); }); })(window, document, jQuery);