define(["layoutManager", "globalize", "require", "events", "connectionManager", "cardBuilder", "appRouter", "emby-scroller", "emby-itemscontainer", "emby-linkbutton"], function(layoutManager, globalize, require, events, connectionManager, cardBuilder, appRouter) { "use strict"; function loadSuggestions(instance, context, apiClient) { var options = { SortBy: "IsFavoriteOrLiked,Random", IncludeItemTypes: "Movie,Series,MusicArtist", Limit: 20, Recursive: !0, ImageTypeLimit: 0, EnableImages: !1, ParentId: instance.options.parentId, EnableTotalRecordCount: !1 }; apiClient.getItems(apiClient.getCurrentUserId(), options).then(function(result) { "suggestions" !== instance.mode && (result.Items = []); var html = result.Items.map(function(i) { var href = appRouter.getRouteUrl(i), itemHtml = '
'; return itemHtml += i.Name, itemHtml += "
" }).join(""), searchSuggestions = context.querySelector(".searchSuggestions"); searchSuggestions.querySelector(".searchSuggestionsList").innerHTML = html, result.Items.length && searchSuggestions.classList.remove("hide") }) } function getSearchHints(instance, apiClient, query) { if (!query.searchTerm) return Promise.resolve({ SearchHints: [] }); var allowSearch = !0, queryIncludeItemTypes = query.IncludeItemTypes; if ("tvshows" === instance.options.collectionType ? query.IncludeArtists ? allowSearch = !1 : "Movie" !== queryIncludeItemTypes && "LiveTvProgram" !== queryIncludeItemTypes && "MusicAlbum" !== queryIncludeItemTypes && "Audio" !== queryIncludeItemTypes && "Book" !== queryIncludeItemTypes && "AudioBook" !== queryIncludeItemTypes && "Playlist" !== queryIncludeItemTypes && "PhotoAlbum" !== queryIncludeItemTypes && "Video" !== query.MediaTypes && "Photo" !== query.MediaTypes || (allowSearch = !1) : "movies" === instance.options.collectionType ? query.IncludeArtists ? allowSearch = !1 : "Series" !== queryIncludeItemTypes && "Episode" !== queryIncludeItemTypes && "LiveTvProgram" !== queryIncludeItemTypes && "MusicAlbum" !== queryIncludeItemTypes && "Audio" !== queryIncludeItemTypes && "Book" !== queryIncludeItemTypes && "AudioBook" !== queryIncludeItemTypes && "Playlist" !== queryIncludeItemTypes && "PhotoAlbum" !== queryIncludeItemTypes && "Video" !== query.MediaTypes && "Photo" !== query.MediaTypes || (allowSearch = !1) : "music" === instance.options.collectionType ? query.People ? allowSearch = !1 : "Series" !== queryIncludeItemTypes && "Episode" !== queryIncludeItemTypes && "LiveTvProgram" !== queryIncludeItemTypes && "Movie" !== queryIncludeItemTypes || (allowSearch = !1) : "livetv" === instance.options.collectionType && (query.IncludeArtists || query.IncludePeople ? allowSearch = !1 : "Series" !== queryIncludeItemTypes && "Episode" !== queryIncludeItemTypes && "MusicAlbum" !== queryIncludeItemTypes && "Audio" !== queryIncludeItemTypes && "Book" !== queryIncludeItemTypes && "AudioBook" !== queryIncludeItemTypes && "PhotoAlbum" !== queryIncludeItemTypes && "Movie" !== queryIncludeItemTypes && "Video" !== query.MediaTypes && "Photo" !== query.MediaTypes || (allowSearch = !1)), "NullType" === queryIncludeItemTypes && (allowSearch = !1), !allowSearch) return Promise.resolve({ SearchHints: [] }); if (apiClient.isMinServerVersion("3.4.1.31")) { query.Fields = "PrimaryImageAspectRatio,CanDelete,BasicSyncInfo,MediaSourceCount", query.Recursive = !0, query.EnableTotalRecordCount = !1, query.ImageTypeLimit = 1; var methodName = "getItems"; return query.IncludeMedia || (query.IncludePeople ? methodName = "getPeople" : query.IncludeArtists && (methodName = "getArtists")), apiClient[methodName](apiClient.getCurrentUserId(), query) } return query.UserId = apiClient.getCurrentUserId(), apiClient.getSearchHints(query) } function search(instance, apiClient, context, value) { value || layoutManager.tv ? (instance.mode = "search", context.querySelector(".searchSuggestions").classList.add("hide")) : (instance.mode = "suggestions", loadSuggestions(instance, context, apiClient)), "livetv" === instance.options.collectionType ? searchType(instance, apiClient, { searchTerm: value, IncludePeople: !1, IncludeMedia: !0, IncludeGenres: !1, IncludeStudios: !1, IncludeArtists: !1, IncludeItemTypes: "LiveTvProgram", IsMovie: !0, IsKids: !1, IsNews: !1 }, context, ".movieResults", { preferThumb: !0, inheritThumb: !1, shape: enableScrollX() ? "overflowPortrait" : "portrait", showParentTitleOrTitle: !0, showTitle: !1, centerText: !0, coverImage: !0, overlayText: !1, overlayMoreButton: !0, showAirTime: !0, showAirDateTime: !0, showChannelName: !0 }) : searchType(instance, apiClient, { searchTerm: value, IncludePeople: !1, IncludeMedia: !0, IncludeGenres: !1, IncludeStudios: !1, IncludeArtists: !1, IncludeItemTypes: "Movie" }, context, ".movieResults", { showTitle: !0, overlayText: !1, centerText: !0, showYear: !0 }), searchType(instance, apiClient, { searchTerm: value, IncludePeople: !1, IncludeMedia: !0, IncludeGenres: !1, IncludeStudios: !1, IncludeArtists: !1, IncludeItemTypes: "Series" }, context, ".seriesResults", { showTitle: !0, overlayText: !1, centerText: !0, showYear: !0 }), "livetv" === instance.options.collectionType ? searchType(instance, apiClient, { searchTerm: value, IncludePeople: !1, IncludeMedia: !0, IncludeGenres: !1, IncludeStudios: !1, IncludeArtists: !1, IncludeItemTypes: "LiveTvProgram", IsSeries: !0, IsSports: !1, IsKids: !1, IsNews: !1 }, context, ".episodeResults", { preferThumb: !0, inheritThumb: !1, shape: enableScrollX() ? "overflowBackdrop" : "backdrop", showParentTitleOrTitle: !0, showTitle: !1, centerText: !0, coverImage: !0, overlayText: !1, overlayMoreButton: !0, showAirTime: !0, showAirDateTime: !0, showChannelName: !0 }) : searchType(instance, apiClient, { searchTerm: value, IncludePeople: !1, IncludeMedia: !0, IncludeGenres: !1, IncludeStudios: !1, IncludeArtists: !1, IncludeItemTypes: "Episode" }, context, ".episodeResults", { coverImage: !0, showTitle: !0, showParentTitle: !0 }), searchType(instance, apiClient, { searchTerm: value, IncludePeople: !1, IncludeMedia: !0, IncludeGenres: !1, IncludeStudios: !1, IncludeArtists: !1, IncludeItemTypes: "livetv" === instance.options.collectionType ? "LiveTvProgram" : "NullType", IsSports: !0 }, context, ".sportsResults", { preferThumb: !0, inheritThumb: !1, shape: enableScrollX() ? "overflowBackdrop" : "backdrop", showParentTitleOrTitle: !0, showTitle: !1, centerText: !0, coverImage: !0, overlayText: !1, overlayMoreButton: !0, showAirTime: !0, showAirDateTime: !0, showChannelName: !0 }), searchType(instance, apiClient, { searchTerm: value, IncludePeople: !1, IncludeMedia: !0, IncludeGenres: !1, IncludeStudios: !1, IncludeArtists: !1, IncludeItemTypes: "livetv" === instance.options.collectionType ? "LiveTvProgram" : "NullType", IsKids: !0 }, context, ".kidsResults", { preferThumb: !0, inheritThumb: !1, shape: enableScrollX() ? "overflowBackdrop" : "backdrop", showParentTitleOrTitle: !0, showTitle: !1, centerText: !0, coverImage: !0, overlayText: !1, overlayMoreButton: !0, showAirTime: !0, showAirDateTime: !0, showChannelName: !0 }), searchType(instance, apiClient, { searchTerm: value, IncludePeople: !1, IncludeMedia: !0, IncludeGenres: !1, IncludeStudios: !1, IncludeArtists: !1, IncludeItemTypes: "livetv" === instance.options.collectionType ? "LiveTvProgram" : "NullType", IsNews: !0 }, context, ".newsResults", { preferThumb: !0, inheritThumb: !1, shape: enableScrollX() ? "overflowBackdrop" : "backdrop", showParentTitleOrTitle: !0, showTitle: !1, centerText: !0, coverImage: !0, overlayText: !1, overlayMoreButton: !0, showAirTime: !0, showAirDateTime: !0, showChannelName: !0 }), searchType(instance, apiClient, { searchTerm: value, IncludePeople: !1, IncludeMedia: !0, IncludeGenres: !1, IncludeStudios: !1, IncludeArtists: !1, IncludeItemTypes: "LiveTvProgram", IsMovie: "livetv" !== instance.options.collectionType && null, IsSeries: "livetv" !== instance.options.collectionType && null, IsSports: "livetv" !== instance.options.collectionType && null, IsKids: "livetv" !== instance.options.collectionType && null, IsNews: "livetv" !== instance.options.collectionType && null }, context, ".programResults", { preferThumb: !0, inheritThumb: !1, shape: enableScrollX() ? "overflowBackdrop" : "backdrop", showParentTitleOrTitle: !0, showTitle: !1, centerText: !0, coverImage: !0, overlayText: !1, overlayMoreButton: !0, showAirTime: !0, showAirDateTime: !0, showChannelName: !0 }), searchType(instance, apiClient, { searchTerm: value, IncludePeople: !1, IncludeMedia: !0, IncludeGenres: !1, IncludeStudios: !1, IncludeArtists: !1, MediaTypes: "Video", ExcludeItemTypes: "Movie,Episode" }, context, ".videoResults", { showParentTitle: !0, showTitle: !0, overlayText: !1, centerText: !0 }), searchType(instance, apiClient, { searchTerm: value, IncludePeople: !0, IncludeMedia: !1, IncludeGenres: !1, IncludeStudios: !1, IncludeArtists: !1 }, context, ".peopleResults", { coverImage: !0, showTitle: !0 }), searchType(instance, apiClient, { searchTerm: value, IncludePeople: !1, IncludeMedia: !1, IncludeGenres: !1, IncludeStudios: !1, IncludeArtists: !0 }, context, ".artistResults", { coverImage: !0, showTitle: !0 }), searchType(instance, apiClient, { searchTerm: value, IncludePeople: !1, IncludeMedia: !0, IncludeGenres: !1, IncludeStudios: !1, IncludeArtists: !1, IncludeItemTypes: "MusicAlbum" }, context, ".albumResults", { showParentTitle: !0, showTitle: !0, overlayText: !1, centerText: !0 }), searchType(instance, apiClient, { searchTerm: value, IncludePeople: !1, IncludeMedia: !0, IncludeGenres: !1, IncludeStudios: !1, IncludeArtists: !1, IncludeItemTypes: "Audio" }, context, ".songResults", { showParentTitle: !0, showTitle: !0, overlayText: !1, centerText: !0, action: "play" }), searchType(instance, apiClient, { searchTerm: value, IncludePeople: !1, IncludeMedia: !0, IncludeGenres: !1, IncludeStudios: !1, IncludeArtists: !1, MediaTypes: "Photo" }, context, ".photoResults", { showParentTitle: !1, showTitle: !0, overlayText: !1, centerText: !0 }), searchType(instance, apiClient, { searchTerm: value, IncludePeople: !1, IncludeMedia: !0, IncludeGenres: !1, IncludeStudios: !1, IncludeArtists: !1, IncludeItemTypes: "PhotoAlbum" }, context, ".photoAlbumResults", { showTitle: !0, overlayText: !1, centerText: !0 }), searchType(instance, apiClient, { searchTerm: value, IncludePeople: !1, IncludeMedia: !0, IncludeGenres: !1, IncludeStudios: !1, IncludeArtists: !1, IncludeItemTypes: "Book" }, context, ".bookResults", { showTitle: !0, overlayText: !1, centerText: !0 }), searchType(instance, apiClient, { searchTerm: value, IncludePeople: !1, IncludeMedia: !0, IncludeGenres: !1, IncludeStudios: !1, IncludeArtists: !1, IncludeItemTypes: "AudioBook" }, context, ".audioBookResults", { showTitle: !0, overlayText: !1, centerText: !0 }), searchType(instance, apiClient, { searchTerm: value, IncludePeople: !1, IncludeMedia: !0, IncludeGenres: !1, IncludeStudios: !1, IncludeArtists: !1, IncludeItemTypes: "Playlist" }, context, ".playlistResults", { showTitle: !0, overlayText: !1, centerText: !0 }) } function searchType(instance, apiClient, query, context, section, cardOptions) { query.Limit = enableScrollX() ? 24 : 16, query.ParentId = instance.options.parentId, getSearchHints(instance, apiClient, query).then(function(result) { populateResults(result, context, section, cardOptions) }) } function populateResults(result, context, section, cardOptions) { section = context.querySelector(section); var items = result.Items || result.SearchHints, itemsContainer = section.querySelector(".itemsContainer"); cardBuilder.buildCards(items, Object.assign({ itemsContainer: itemsContainer, parentContainer: section, shape: enableScrollX() ? "autooverflow" : "auto", scalable: !0, overlayText: !1, centerText: !0, allowBottomPadding: !enableScrollX() }, cardOptions || {})), section.querySelector(".emby-scroller").scrollToBeginning(!0) } function enableScrollX() { return !0 } function replaceAll(originalString, strReplace, strWith) { var reg = new RegExp(strReplace, "ig"); return originalString.replace(reg, strWith) } function embed(elem, instance, options) { require(["text!./searchresults.template.html"], function(template) { enableScrollX() || (template = replaceAll(template, 'data-horizontal="true"', 'data-horizontal="false"'), template = replaceAll(template, "itemsContainer scrollSlider", "itemsContainer scrollSlider vertical-wrap")); var html = globalize.translateDocument(template, "sharedcomponents"); elem.innerHTML = html, elem.classList.add("searchResults"), instance.search("") }) } function SearchResults(options) { this.options = options, embed(options.element, this, options) } return SearchResults.prototype.search = function(value) { search(this, connectionManager.getApiClient(this.options.serverId), this.options.element, value) }, SearchResults.prototype.destroy = function() { var options = this.options; options && options.element.classList.remove("searchFields"), this.options = null }, SearchResults });