1 line
No EOL
6.1 KiB
JavaScript
1 line
No EOL
6.1 KiB
JavaScript
import BaseTab from"./../modules/tabbedview/basetab.js";import connectionManager from"./../modules/emby-apiclient/connectionmanager.js";import globalize from"./../modules/common/globalize.js";import"./../modules/emby-elements/emby-itemscontainer/emby-itemscontainer.js";import"./../modules/emby-elements/emby-button/emby-button.js";import"./../modules/emby-elements/emby-scroller/emby-scroller.js";import layoutManager from"./../modules/layoutmanager.js";import cardBuilder from"./../modules/cardbuilder/cardbuilder.js";function getRecommendationHtml(recommendation){var html="";let title="";switch(recommendation.RecommendationType){case"SimilarToRecentlyPlayed":title=globalize.translate("BecauseYouWatchedValue",recommendation.BaselineItemName);break;case"SimilarToLikedItem":title=globalize.translate("BecauseYouLikeValue",recommendation.BaselineItemName);break;case"HasDirectorFromRecentlyPlayed":case"HasLikedDirector":title=globalize.translate("DirectedByValue",recommendation.BaselineItemName);break;case"HasActorFromRecentlyPlayed":case"HasLikedActor":title=globalize.translate("StarringValue",recommendation.BaselineItemName)}return html+'<div class="verticalSection verticalSection-cards">'+'<div class="sectionTitleContainer sectionTitleContainer-cards">'+('<h2 class="sectionTitle sectionTitle-cards padded-left padded-left-page">'+title+"</h2>")+"</div>"+'<div is="emby-scroller" class="padded-top-focusscale padded-bottom-focusscale padded-left padded-left-page padded-right" data-mousewheel="false" data-focusscroll="true">'+'<div is="emby-itemscontainer" data-focusabletype="nearest" class="scrollSlider focusable focuscontainer-x itemsContainer">'+"</div>"+"</div>"+"</div>"}function setRecommendationItems(instance,itemsContainer,recommendation){instance=instance.enableFocusPreview();cardBuilder.buildCards(recommendation.Items,{shape:"autooverflow",scalable:!0,overlayPlayButton:!0,fields:instance?[]:["ParentNameOrName","ProductionYear"],centerText:!0,itemsContainer:itemsContainer,focusTransformTitleAdjust:!0,bottomPadding:instance?"focuspreview":null,horizontal:!0})}function loadSuggestions(instance,page,apiClient){var url=apiClient.getUrl("Movies/Recommendations",{userId:apiClient.getCurrentUserId(),categoryLimit:6,ItemLimit:12,Fields:instance.getRequestedItemFields()+",PrimaryImageAspectRatio,ProductionYear",ImageTypeLimit:1,EnableImageTypes:instance.getRequestedImageTypes(),GroupProgramsBySeries:!0});apiClient.getJSON(url).then(function(recommendations){var suggestionsElement=page.querySelector(".suggestions"),itemsContainers=(suggestionsElement.innerHTML=recommendations.map(getRecommendationHtml).join(""),suggestionsElement.querySelectorAll(".itemsContainer"));for(let i=0,length=recommendations.length;i<length;i++)instance.addFocusBehavior(itemsContainers[i]),setRecommendationItems(instance,itemsContainers[i],recommendations[i])})}function MovieSuggestionsTab(view,params){BaseTab.apply(this,arguments),this.view=view,this.params=params,this.apiClient=connectionManager.getApiClient(params.serverId),this.resumeItemsContainer=view.querySelector(".resumeSection .itemsContainer"),this.resumeItemsContainer.fetchData=fetchResumeItems.bind(this),this.resumeItemsContainer.getListOptions=getResumeListOptions.bind(this),this.resumeItemsContainer.parentContainer=view.querySelector(".resumeSection"),this.addFocusBehavior(this.resumeItemsContainer),this.latestItemsContainer=view.querySelector(".latestSection .itemsContainer"),this.latestItemsContainer.fetchData=fetchLatestItems.bind(this),this.latestItemsContainer.getListOptions=getLatestListOptions.bind(this),this.latestItemsContainer.parentContainer=view.querySelector(".latestSection"),this.addFocusBehavior(this.latestItemsContainer),params.parentId&&(this.resumeItemsContainer.setAttribute("data-parentid",params.parentId),this.latestItemsContainer.setAttribute("data-parentid",params.parentId))}function getThumbShape(){return"backdrop"}function fetchResumeItems(query){var apiClient=this.apiClient,parentId=this.params.parentId;return apiClient.getResumableItems(apiClient.getCurrentUserId(),Object.assign({IncludeItemTypes:"Movie",Fields:this.getRequestedItemFields()+",PrimaryImageAspectRatio,ProductionYear",ParentId:parentId,ImageTypeLimit:1,EnableImageTypes:this.getRequestedImageTypes()},query||{}))}function fetchLatestItems(){var apiClient=this.apiClient,parentId=this.params.parentId;return apiClient.getLatestItems({Limit:24,Fields:this.getRequestedItemFields()+",PrimaryImageAspectRatio,ProductionYear",ParentId:parentId,ImageTypeLimit:1,EnableImageTypes:this.getRequestedImageTypes()})}function getResumeListOptions(){var enableFocusPreview=this.enableFocusPreview();return{renderer:cardBuilder,options:{preferThumb:!0,shape:getThumbShape("resume"),scalable:!0,fields:enableFocusPreview?[]:["Name","ProductionYear"],centerText:!0,overlayPlayButton:!0,cardLayout:!1,focusTransformTitleAdjust:!0,animateProgressBar:!0,bottomPadding:enableFocusPreview?"focuspreview":null},virtualScrollLayout:"horizontal-grid",commandOptions:{removeFromResume:!0}}}function getLatestListOptions(){var enableFocusPreview=this.enableFocusPreview();return{renderer:cardBuilder,options:{shape:"autooverflow",scalable:!0,fields:enableFocusPreview?[]:["Name","ProductionYear"],centerText:!0,overlayPlayButton:!0,cardLayout:!1,focusTransformTitleAdjust:!0,bottomPadding:enableFocusPreview?"focuspreview":null},virtualScrollLayout:"horizontal-grid"}}Object.assign(MovieSuggestionsTab.prototype,BaseTab.prototype),MovieSuggestionsTab.prototype.enablePushDownFocusPreview=function(){return layoutManager.tv&&"y"===this.scrollDirection()},MovieSuggestionsTab.prototype.onResume=function(options){BaseTab.prototype.onResume.apply(this,arguments);var apiClient=this.apiClient,promises=[];promises.push(this.resumeItemsContainer.resume(options)),promises.push(this.latestItemsContainer.resume(options)),options&&options.refresh&&loadSuggestions(this,this.view,apiClient);let instance=this;Promise.all(promises).then(function(){options.autoFocus&&instance.autoFocus(),instance.fillFocusPreviewIfNeeded()})},MovieSuggestionsTab.prototype.onPause=function(){BaseTab.prototype.onPause.apply(this,arguments),this.resumeItemsContainer.pause(),this.latestItemsContainer.pause()};export default MovieSuggestionsTab; |