(function () { function getTimersHtml(timers) { var html = ''; var index = ''; for (var i = 0, length = timers.length; i < length; i++) { var timer = timers[i]; var startDateText = LibraryBrowser.getFutureDateText(parseISO8601Date(timer.StartDate, { toLocal: true })); if (startDateText != index) { if (index) { html += ''; html += ''; } html += '
'; html += '

' + startDateText + '

'; html += '
'; index = startDateText; } html += ''; var program = timer.ProgramInfo || {}; var imgUrl; if (program.ImageTags && program.ImageTags.Primary) { imgUrl = ApiClient.getScaledImageUrl(program.Id, { height: 80, tag: program.ImageTags.Primary, type: "Primary" }); } if (imgUrl) { html += ''; } else if (program.IsKids) { html += ''; } else if (program.IsSports) { html += ''; } else if (program.IsMovie) { html += ''; } else if (program.IsNews) { html += ''; } else { html += ''; } html += ''; html += ''; html += '
'; html += timer.Name; html += '
'; html += '
'; html += LibraryBrowser.getDisplayTime(timer.StartDate); html += ' - ' + LibraryBrowser.getDisplayTime(timer.EndDate); html += '
'; html += '
'; html += '
'; if (timer.SeriesTimerId) { html += '
'; html += '
'; html += '
'; html += '
'; html += '
'; } html += ''; html += '
'; } if (timers.length) { html += '
'; html += '
'; } return html; } window.LiveTvHelpers = { getDaysOfWeek: function () { var days = [ 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' ]; return days.map(function (d) { return { name: d, value: d }; }); }, renderOriginalAirDate: function (elem, item) { var airDate = item.OriginalAirDate; if (airDate && item.IsRepeat) { try { airDate = parseISO8601Date(airDate, { toLocal: true }).toLocaleDateString(); } catch (e) { Logger.log("Error parsing date: " + airDate); } elem.html(Globalize.translate('ValueOriginalAirDate').replace('{0}', airDate)).show(); } else { elem.hide(); } }, getTimersHtml: getTimersHtml }; })(); (function ($, document, window) { var showOverlayTimeout; var hideOverlayTimeout; var currentPosterItem; function onOverlayMouseOver() { if (hideOverlayTimeout) { clearTimeout(hideOverlayTimeout); hideOverlayTimeout = null; } } function onOverlayMouseOut() { startHideOverlayTimer(); } function getOverlayHtml(item) { var html = ''; html += '
'; if (item.EpisodeTitle) { html += '

'; html += item.EpisodeTitle; html += '

'; } html += '

'; html += '

'; html += ''; html += LibraryBrowser.getRatingHtml(item); html += ''; html += ''; html += LibraryBrowser.getUserDataIconsHtml(item); html += ''; html += '

'; html += '

'; html += '

'; html += (item.Overview || ''); html += '

'; html += '
'; var endDate; var startDate; var now = new Date().getTime(); try { endDate = parseISO8601Date(item.EndDate, { toLocal: true }); } catch (err) { endDate = now; } try { startDate = parseISO8601Date(item.StartDate, { toLocal: true }); } catch (err) { startDate = now; } if (now < endDate && now >= startDate) { html += '' + Globalize.translate('ButtonPlay') + ''; } if (!item.TimerId && !item.SeriesTimerId) { html += '' + Globalize.translate('ButtonRecord') + ''; } html += '
'; html += '
'; return html; } function onPlayClick() { hideOverlay(); MediaController.play({ ids: [this.getAttribute('data-id')] }); } function onRecordClick() { hideOverlay(); Dashboard.navigate('livetvnewrecording.html?programid=' + this.getAttribute('data-id')); } function showOverlay(elem, item) { require(['jqmpopup'], function () { hideOverlay(); var html = '
'; html += '
'; html += '

' + item.Name + '

'; html += '
'; html += '
'; html += getOverlayHtml(item); html += '
'; html += '
'; $(document.body).append(html); var popup = $('.itemFlyout').on('mouseenter', onOverlayMouseOver).on('mouseleave', onOverlayMouseOut).popup({ positionTo: elem }).trigger('create').popup("open").on("popupafterclose", function () { $(this).off("popupafterclose").off("mouseenter").off("mouseleave").remove(); }); $('.btnPlay', popup).on('click', onPlayClick); $('.btnRecord', popup).on('click', onRecordClick); LibraryBrowser.renderGenres($('.itemGenres', popup), item, 3); $('.miscTvProgramInfo', popup).html(LibraryBrowser.getMiscInfoHtml(item)).trigger('create'); popup.parents().prev('.ui-popup-screen').remove(); currentPosterItem = elem; }); } function onProgramClicked() { if (showOverlayTimeout) { clearTimeout(showOverlayTimeout); showOverlayTimeout = null; } if (hideOverlayTimeout) { clearTimeout(hideOverlayTimeout); hideOverlayTimeout = null; } hideOverlay(); } function hideOverlay() { var flyout = document.querySelectorAll('.itemFlyout'); if (flyout.length) { $(flyout).popup('close').popup('destroy').remove(); } if (currentPosterItem) { $(currentPosterItem).off('click'); currentPosterItem = null; } } function startHideOverlayTimer() { if (hideOverlayTimeout) { clearTimeout(hideOverlayTimeout); hideOverlayTimeout = null; } hideOverlayTimeout = setTimeout(hideOverlay, 200); } function onHoverOut() { if (showOverlayTimeout) { clearTimeout(showOverlayTimeout); showOverlayTimeout = null; } startHideOverlayTimer(); } $.fn.createGuideHoverMenu = function (childSelector) { function onShowTimerExpired(elem) { var id = elem.getAttribute('data-programid'); ApiClient.getLiveTvProgram(id, Dashboard.getCurrentUserId()).done(function (item) { showOverlay(elem, item); }); } function onHoverIn() { if (showOverlayTimeout) { clearTimeout(showOverlayTimeout); showOverlayTimeout = null; } if (hideOverlayTimeout) { clearTimeout(hideOverlayTimeout); hideOverlayTimeout = null; } var elem = this; if (currentPosterItem) { if (currentPosterItem && currentPosterItem == elem) { return; } else { hideOverlay(); } } showOverlayTimeout = setTimeout(function () { onShowTimerExpired(elem); }, 1000); } // https://hacks.mozilla.org/2013/04/detecting-touch-its-the-why-not-the-how/ if (('ontouchstart' in window) || (navigator.maxTouchPoints > 0) || (navigator.msMaxTouchPoints > 0)) { /* browser with either Touch Events of Pointer Events running on touch-capable device */ return this; } return this.on('mouseenter', childSelector, onHoverIn) .on('mouseleave', childSelector, onHoverOut) .on('click', childSelector, onProgramClicked); }; })(jQuery, document, window);