1 line
No EOL
6.5 KiB
JavaScript
1 line
No EOL
6.5 KiB
JavaScript
import connectionManager from"./../modules/emby-apiclient/connectionmanager.js";import events from"./../modules/emby-apiclient/events.js";import globalize from"./../modules/common/globalize.js";import AlphaPicker from"./../modules/alphapicker/alphapicker.js";import layoutManager from"./../modules/layoutmanager.js";import"./../modules/emby-elements/emby-input/emby-input.js";import"./../modules/emby-elements/emby-button/emby-button.js";import{appHost}from"./../modules/common/servicelocator.js";import appRouter from"./../modules/approuter.js";import focusManager from"./../modules/focusmanager.js";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 itemHtml='<a is="emby-linkbutton" class="button-link block" style="padding:.25em 1em;" href="'+appRouter.getRouteUrl(i)+'">';return itemHtml+i.Name+"</a>"}).join(""),searchSuggestions=context.querySelector(".searchSuggestions");searchSuggestions.querySelector(".searchSuggestionsList").innerHTML=html,result.Items.length?searchSuggestions.classList.remove("hide"):searchSuggestions.classList.add("hide")})}function onSearchTimeout(){let value=this.nextSearchValue;value=(value||"").trim(),events.trigger(this,"search",[value]);var searchSuggestions,context=this.options.element;value||layoutManager.tv?(this.mode="search",(searchSuggestions=context.querySelector(".searchSuggestions"))&&searchSuggestions.classList.add("hide")):(this.mode="suggestions",loadSuggestions(this,context,connectionManager.getApiClient(this.options.serverId)))}function triggerSearch(instance,value,immediate){instance.searchTimeout&&clearTimeout(instance.searchTimeout),instance.nextSearchValue=value;value=immediate?0:600;instance.searchTimeout=setTimeout(onSearchTimeout.bind(instance),value)}function onAlphaValueClicked(e){var val,e=e.detail.value,txtSearch=this.options.element.querySelector(".searchfields-txtSearch");"backspace"===e?(val=txtSearch.value,txtSearch.value=val.length?val.substring(0,val.length-1):""):(-1===txtSearch.maxLength||txtSearch.value.length<txtSearch.maxLength)&&(txtSearch.value+=e),txtSearch.dispatchEvent(new CustomEvent("input",{bubbles:!0}))}function initAlphaPicker(alphaPickerElement,instance){instance.alphaPicker=new AlphaPicker({element:alphaPickerElement,mode:"keyboard"}),alphaPickerElement.addEventListener("alphavalueclicked",onAlphaValueClicked.bind(instance))}function onSearchInput(e){triggerSearch(this,e.target.value)}function createSpeechRecognition(instance){var recognition=new SpeechRecognition;return recognition.continuous=!1,recognition.onresult=function(event){var current=event.resultIndex||0,event=event.results[current][0].transcript;instance.options.element.querySelector(".searchfields-txtSearch").value=event,triggerSearch(instance,event)},instance.speechRecognition=recognition}function onVoiceInputRequest(e){let instance=this;appHost.requestSpeechRecognitionPermission().then(function(){let recognition=instance.speechRecognition;if(!recognition)try{recognition=createSpeechRecognition(instance)}catch(err){console.log("error creating SpeechRecognition: "+err)}try{recognition.start()}catch(err){console.log("error starting SpeechRecognition: "+err)}},function(){})}function embed(elem,instance,options){return require(["text!search/searchfields.template.html"]).then(function(responses){elem.classList.add("searchFields"),elem.innerHTML=globalize.translateDocument(responses[0]);var responses=elem.querySelector(".searchfields-txtSearch"),useNativeKeyboard=!(globalize.getCurrentLocale()||"").toLowerCase().startsWith("en"),useNativeKeyboard=(useNativeKeyboard||layoutManager.tv&&(responses.setAttribute("readonly","readonly"),responses.setAttribute("tabindex","-1"),responses.setAttribute("virtualkeyboardpolicy","manual"),responses.setAttribute("inputmode","none"),responses.classList.add("searchfields-txtSearch-clear")),layoutManager.tv&&(elem.querySelector(".searchFieldsSearchIcon").classList.remove("hide"),responses.classList.add("searchfields-txtSearch-tv")),layoutManager.tv&&!useNativeKeyboard&&(useNativeKeyboard=elem.querySelector(".alphaPicker"),elem.querySelector(".alphaPicker").classList.remove("hide"),initAlphaPicker(useNativeKeyboard,instance)),responses.addEventListener("input",onSearchInput.bind(instance)),options.value&&(responses.value=options.value,instance.firstLoad)&&triggerSearch(instance,options.value,!0),elem.querySelector(".btnVoiceInput"));"undefined"!=typeof SpeechRecognition&&appHost.supports("speechrecognition")&&useNativeKeyboard.classList.remove("hide"),useNativeKeyboard.addEventListener("click",onVoiceInputRequest.bind(instance)),!1!==options.autoFocus&&instance.focus()})}function SearchFields(options){embed((this.options=options).element,this,options)}require(["flexStyles","material-icons","css!search/searchfields.css"]),SearchFields.prototype.getSearchTerm=function(){var txt=this.options.element.querySelector(".searchfields-txtSearch");return txt&&txt.value||null},SearchFields.prototype.setSearchTerm=function(value){var txt=this.options.element.querySelector(".searchfields-txtSearch");txt&&value!==txt.value&&triggerSearch(this,txt.value=value,!0)},SearchFields.prototype.pause=function(){this.destroyVoiceInput()},SearchFields.prototype.resume=function(options){this.firstLoad&&!options?.refresh||(this.firstLoad=!0,triggerSearch(this,this.getSearchTerm(),!0))},SearchFields.prototype.focus=function(){var txtSearch=this.options.element.querySelector(".searchfields-txtSearch");"-1"===txtSearch.getAttribute("tabindex")?focusManager.autoFocus(this.options.element.querySelector(".alphaPicker")||this.options.element):focusManager.focus(txtSearch)},SearchFields.prototype.destroyVoiceInput=function(){var recognition=this.speechRecognition;if(recognition){this.speechRecognition=null,recognition.onresult=null;try{recognition.abort()}catch(err){console.log("error aborting SpeechRecognition: "+err)}}},SearchFields.prototype.destroy=function(){this.destroyVoiceInput();var options=this.options,options=(options&&options.element.classList.remove("searchFields"),this.options=null,this.alphaPicker),options=(options&&options.destroy(),this.alphaPicker=null,this.searchTimeout);options&&clearTimeout(options),this.searchTimeout=null,this.nextSearchValue=null};export default SearchFields; |