(function (window, document, $) { var channelsPromise; var liveTvInfoPromise; var itemsPromise; function ensurePromises() { itemsPromise = itemsPromise || ApiClient.getItems(Dashboard.getCurrentUserId(), { SortBy: "SortName" }); channelsPromise = channelsPromise || $.getJSON(ApiClient.getUrl("Channels", { userId: Dashboard.getCurrentUserId(), // We just want the total record count limit: 0 })); liveTvInfoPromise = liveTvInfoPromise || ApiClient.getLiveTvInfo(); } function renderHeader(page, user) { var html = '
'; html += ''; html += 'MEDIABROWSER'; 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); $page.trigger('headercreated'); } function getItemHref(item) { return LibraryBrowser.getHref(item); } function getViewsHtml(user, channelCount, items, liveTvInfo) { var html = ''; html += items.map(function (i) { var viewMenuCssClass = (i.CollectionType || 'general') + 'ViewMenu'; return '' + i.Name + ''; }).join(''); var showChannels = 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'; html += 'Reports'; } return html; } function showLibraryMenu() { ensurePromises(); var userPromise = Dashboard.getCurrentUser(); $.when(channelsPromise, itemsPromise, liveTvInfoPromise, userPromise).done(function (response1, response2, response3, response4) { var channelCount = response1[0].TotalRecordCount; var items = response2[0].Items; var liveTvInfo = response3[0]; var user = response4[0]; var page = $.mobile.activePage; var panel = getLibraryMenu(user, channelCount, items, liveTvInfo); updateLibraryNavLinks(page); $(panel).panel('toggle'); }); } function getLibraryMenu(user, channelCount, items, liveTvInfo) { var panel = $('#libraryPanel'); if (!panel.length) { var html = ''; html += '
'; html += '

MEDIABROWSER

'; html += '
'; html += getViewsHtml(user, channelCount, items, liveTvInfo); html += '
'; html += '
'; $(document.body).append(html); panel = $('#libraryPanel').panel({}).trigger('create'); } 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) { page = $(page); var isLiveTvPage = page.hasClass('liveTvPage'); var isChannelsPage = page.hasClass('channelsPage'); var isEditorPage = page.hasClass('metadataEditorPage'); var isReportsPage = page.hasClass('reportsPage'); var id = isLiveTvPage || isChannelsPage || isEditorPage || isReportsPage || 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 (isEditorPage && itemId == 'editor') { $(this).addClass('selectedMediaFolder'); } else if (isReportsPage && itemId == 'reports') { $(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);