import globalize from"./../../common/globalize.js";import layoutManager from"./../../layoutmanager.js";import focusManager from"./../../focusmanager.js";import dom from"./../../dom.js";import keyboardManager from"./../../input/keyboard.js";import textEncoding from"./../../common/textencoding.js";import skinViewManager from"./../../skinviewmanager.js";let EnableFocusTransfrom=dom.allowFocusScaling();require(["css!modules/emby-elements/emby-select/emby-select.css"]);let ActionSheet;function loadAndShowActionSheet(options){return Emby.importModule("./modules/actionsheet/actionsheet.js").then(function(response){return(ActionSheet=response).show(options)})}function showActionSheet(options){return ActionSheet?ActionSheet.show(options):loadAndShowActionSheet(options)}function enableNativeMenu(elem){return!(layoutManager.tv||elem.getItems||elem.hasAttribute("multiple")||skinViewManager.getSkinOptions().dontUseNativeDropDowns||"custom"===elem.getAttribute("data-menu"))}function triggerChange(select){var evt=document.createEvent("HTMLEvents");evt.initEvent("change",!0,!0),select.dispatchEvent(evt)}function checkAllWhenEmpty(select){return emptyValueSetEqualsAll(select),!1}function emptyValueSetEqualsAll(select){return"false"!==select.getAttribute("data-empty-is-all")}function showActionSheetFlyout(select){var labelElem=select.closest("label").querySelector(".selectLabelText"),labelElem=labelElem?labelElem.textContent||labelElem.innerText:null,fields=[];if(fields.push("Name"),"true"===select.getAttribute("data-overview")&&fields.push("Overview"),!select.getItemSecondaryText&&"true"!==select.getAttribute("data-itemsecondarytext")||fields.push("ShortOverview"),!fields.includes("ShortOverview")){var items=getItemsFromSelectElement(select);for(let i=0,length=items.length;i{})}let SupportsTouchEvent="ontouchstart"in document.documentElement,SupportsPointerType="undefined"!=typeof PointerEvent&&"pointerType"in PointerEvent.prototype,DefaultPointerType=SupportsPointerType?null:SupportsTouchEvent?"touch":"mouse";function onPointerDown(e){var pointerType=e.pointerType||DefaultPointerType;e.button||enableNativeMenu(this)||(e.preventDefault(),this.disabled)||"mouse"===pointerType&&showActionSheetFlyout(this)}function onLabelClick(e){var select;e.button||!(select=this.querySelector("select"))||enableNativeMenu(select)||(e.preventDefault(),select.disabled)||(layoutManager.tv&&document.activeElement!==document.body&&focusManager.focus(select),showActionSheetFlyout(select))}function onKeyDown(e){switch(keyboardManager.normalizeKeyFromEvent(e)){case"Enter":return void(enableNativeMenu(this)&&195!==e.keyCode||(e.preventDefault(),e.stopPropagation(),e.repeat)||showActionSheetFlyout(this));case" ":return void(enableNativeMenu(this)||(e.preventDefault(),e.repeat)||showActionSheetFlyout(this));case"ArrowLeft":case"ArrowRight":case"ArrowUp":case"ArrowDown":return void(enableNativeMenu(this)||e.altKey||e.shiftKey||e.preventDefault())}}function onClick(e){enableNativeMenu(this)||(e.stopPropagation(),e.preventDefault(),this.disabled)||showActionSheetFlyout(this)}let inputId=0;function onInit(){this.hasInit||(this.hasInit=!0,this._multipleValues=[],this.id||(this.id="embyselect"+inputId,inputId++),this.hasAttribute("multiple")&&!this.getItems&&(this.getItems=genericElemGetItems),dom.allowBackdropFilter()&&this.classList.add("emby-select-backdropfilter"),layoutManager.tv&&(EnableFocusTransfrom&&this.classList.add("emby-select-focusscale"),this.classList.add("emby-select-tv")),this.removeEventListener(window.PointerEvent?"pointerdown":"mousedown",onPointerDown),this.addEventListener(window.PointerEvent?"pointerdown":"mousedown",onPointerDown),this.removeEventListener("keydown",onKeyDown),this.addEventListener("keydown",onKeyDown),this.removeEventListener("click",onClick),this.addEventListener("click",onClick))}function getItemDisplayHtml(item){var name=item[this.getAttribute("data-name-property")||"Name"];return this.getSelectedItemDisplayHtml?this.getSelectedItemDisplayHtml(item,name):name}function getAllSelectedLabel(select){return select.getAttribute("allselected-labeltext")||globalize.translate("Any")}function enableAutoRevertToAnyUsingTotalRecordCount(select){return"false"!==select.getAttribute("data-autoallany")}function getTotalRecordCount(select){var totalRecordCount=select._totalRecordCount;return null!=totalRecordCount?Promise.resolve(totalRecordCount):getItems(select,{Limit:0}).then(function(result){return select._totalRecordCount=result.TotalRecordCount,result.TotalRecordCount})}function hasAnyItems(select){var totalRecordCount=select._totalRecordCount;return null!=totalRecordCount?Promise.resolve(0labelLimit&&(suffix="...",items=items.slice(0,labelLimit)),ensureSelectNameLabel(select).innerHTML=items.map(getItemDisplayHtml.bind(select)).join(" / ")+suffix}function getItemId(item){var idProp;return this.getItemId?this.getItemId(item):(idProp=this.getAttribute("data-id-property"))?item[idProp]:null!=item.Id?item.Id:null!=item.id&&""!==item.id?item.id:null!=item.value?item.value:item.Name||item.name}function setLabelFromNamesOfValues(select,values){let suffix="";return values.length>labelLimit&&(suffix="...",values=values.slice(0,labelLimit)),getItems(select,{Ids:values}).then(function(result){let items=result.Items;items.length>values.length&&(items=items.filter(function(i){i=getItemId.call(select,i);return null!=i&&values.includes(i)})),ensureSelectNameLabel(select).innerHTML=items.map(getItemDisplayHtml.bind(select)).join(" / ")+suffix})}function setLabelFromSelectedItems(select,selectedItems){if(selectedItems.length||select.parentContainer)return(selectedItems.length?Promise.resolve(!0):hasAnyItems(select)).then(function(any){if(select.parentContainer&&(any?select.parentContainer.classList.remove("hide"):select.parentContainer.classList.add("hide")),selectedItems.length)return select.hasAttribute("multiple")&&emptyValueSetEqualsAll(select)&&enableAutoRevertToAnyUsingTotalRecordCount(select)?getTotalRecordCount(select).then(function(totalRecordCount){if(selectedItems.length!==totalRecordCount)return setLabelFromItems(select,selectedItems);ensureSelectNameLabel(select).innerHTML=getAllSelectedLabel(select)}):setLabelFromItems(select,selectedItems);setLabelWhenNoValuesSelected(select)});setLabelWhenNoValuesSelected(select)}function setLabelFromValues(select,values){if(values.length||select.parentContainer)return(values.length?Promise.resolve(!0):hasAnyItems(select)).then(function(any){if(select.parentContainer&&(any?select.parentContainer.classList.remove("hide"):select.parentContainer.classList.add("hide")),values.length)return select.hasAttribute("multiple")&&emptyValueSetEqualsAll(select)&&enableAutoRevertToAnyUsingTotalRecordCount(select)?getTotalRecordCount(select).then(function(totalRecordCount){if(values.length!==totalRecordCount)return setLabelFromNamesOfValues(select,values);ensureSelectNameLabel(select).innerHTML=getAllSelectedLabel(select)}):setLabelFromNamesOfValues(select,values);setLabelWhenNoValuesSelected(select)});setLabelWhenNoValuesSelected(select)}function getItemsBound(query){return getItems(this,query)}function getItemsFromSelectElement(elem){var selectOptions=elem.options,items=[];for(let i=0,length=selectOptions.length;i
'),select.nameLabel=nameLabel=wrapper.querySelector(".emby-select-selectedName")}return nameLabel}function setValuesFromActionsheet(select,values){return values.length&&emptyValueSetEqualsAll(select)&&select.hasAttribute("multiple")&&enableAutoRevertToAnyUsingTotalRecordCount(select)?getTotalRecordCount(select).then(function(totalRecordCount){values.length>=totalRecordCount&&(values=[]),select.setValues(values,!0)}):(select.setValues(values,!0),Promise.resolve())}function setDynamicFieldDescription(select){var fieldDescription;select.classList.contains("emby-select-dynamicfielddescription")&&(fieldDescription=select.closest(".selectContainer")?.querySelector(".dynamicFieldDescription"))&&(select=getItemsFromSelectElement(select).filter(function(s){return s.Selected})[0]?.secondaryText||"",fieldDescription.innerHTML=textEncoding.htmlEncode(select),select?fieldDescription.classList.remove("hide"):fieldDescription.classList.add("hide"))}class EmbySelect extends HTMLSelectElement{constructor(){var self=super();return onInit.call(self),self}getValues(){return this._multipleValues}setValues(values,triggerChangeEvent,selectedItems){this.hasAttribute("multiple")||this.getItems?(this._multipleValues=values,this.getItems&&this.getItems!==genericElemGetItems&&(this.innerHTML=''),selectedItems?setLabelFromSelectedItems(this,selectedItems):setLabelFromValues(this,values)):this.value=Array.isArray(values)?values[0]||"":values||"",triggerChangeEvent&&triggerChange(this),setDynamicFieldDescription(this)}get values(){return this.getValues()}set values(values){this.setValues(values)}get singleValue(){return this.getItems?this._multipleValues[0]||"":this.value}set singleValue(val){var newValues;this.getItems?(setLabelFromValues(this,newValues=null!=val&&""!==val?[val]:[]),this._multipleValues=newValues,this.getItems!==genericElemGetItems&&(this.innerHTML='')):this.value=val,setDynamicFieldDescription(this)}connectedCallback(){if(onInit.call(this),!this.classList.contains("emby-select")){let wrapper=this.closest(".emby-select-wrapper");if(wrapper){var label=this.closest("label"),multiple=this.hasAttribute("multiple");multiple&&(this.size=1,this.classList.add("hiddenScrollY")),this.classList.add("emby-select");let labelText=this.getAttribute("label")||"",labelFormatArgs=this.getAttribute("data-labelformatargs"),labelTextClass=(labelFormatArgs&&((labelFormatArgs=labelFormatArgs.split("|")).unshift(labelText),labelText=globalize.translate.apply(this,labelFormatArgs)),"selectLabelText"),arrowContainerClass="selectArrowContainer";this.classList.contains("emby-select-inline")&&(label.classList.add("selectLabel-inline"),labelTextClass+=" selectLabelText-inline","true"===this.getAttribute("data-hidelabeltext")&&(labelTextClass+=" hide"),arrowContainerClass+=" selectArrowContainer-inline"),label.classList.add("selectLabel"),label.insertAdjacentHTML("afterbegin",'
'+labelText+"
"),label.removeEventListener("click",onLabelClick),label.addEventListener("click",onLabelClick),(multiple||this.getItems)&&ensureSelectNameLabel(this),wrapper.insertAdjacentHTML("beforeend",'
'),enableNativeMenu(this)||this.classList.add("emby-select-nopointer")}else wrapper=ensureWrapper(this)}}disconnectedCallback(){}setLabel(text){this.closest("label").querySelector(".selectLabelText").innerHTML=text}}customElements.define("emby-select",EmbySelect,{extends:"select"});export default EmbySelect;