Files
Futontime_UI/modules/emby-elements/emby-select/emby-select.js
2026-02-09 10:48:21 +01:00

1 line
15 KiB
JavaScript

define(["exports","./../../common/globalize.js","./../../layoutmanager.js","./../../focusmanager.js","./../../dom.js","./../../input/keyboard.js","./../../common/textencoding.js","./../../skinviewmanager.js"],function(_exports,_globalize,_layoutmanager,_focusmanager,_dom,_keyboard,_textencoding,_skinviewmanager){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;var ActionSheet,EnableFocusTransfrom=_dom.default.allowFocusScaling();function showActionSheet(options){return ActionSheet?ActionSheet.show(options):function(options){return Emby.importModule("./modules/actionsheet/actionsheet.js").then(function(response){return(ActionSheet=response).show(options)})}(options)}function enableNativeMenu(elem){return!(_layoutmanager.default.tv||elem.getItems||elem.hasAttribute("multiple")||_skinviewmanager.default.getSkinOptions().dontUseNativeDropDowns||"custom"===elem.getAttribute("data-menu"))}function emptyValueSetEqualsAll(select){return"false"!==select.getAttribute("data-empty-is-all")}function showActionSheetFlyout(select){var 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"))for(var items=getItemsFromSelectElement(select),i=0,length=items.length;i<length;i++)if(items[i].secondaryText){fields.push("ShortOverview");break}var multiple=select.hasAttribute("multiple"),virtualScroll=null!=select.getItems&&"false"!==select.getAttribute("data-virtualscroll"),virtualScroll={getItems:select.getItems||function(query){return getItems(this,query)}.bind(select),enableVirtualScroller:virtualScroll,autoRepositionY:virtualScroll||_layoutmanager.default.tv,selectedValues:select.getValues(),positionTo:select,emptyValueSetEqualsAll:function(select){return emptyValueSetEqualsAll(select),!1}(select),selectAllOnSelectNone:emptyValueSetEqualsAll(select),resolveWithSelectedItem:!0,nameProperty:select.getAttribute("data-name-property")||null,highlight:!1,dialogClass:select.getAttribute("data-dialogclass")||null,hasItemImage:"true"===select.getAttribute("data-hasitemimage"),refreshItemsOnChange:"true"===select.getAttribute("data-refreshitemsonchange"),fields:fields,hideTitleWhenNotFullscreen:!0,border:!1,listItemContentWrapperClass:select.getAttribute("data-listitemcontentclass")||null,getItemSecondaryText:select.getItemSecondaryText,getItemId:getItemId.bind(select),multiple:multiple};_layoutmanager.default.tv&&(multiple||"false"!==select.getAttribute("data-autofullscreen"))&&(virtualScroll.dialogSize="fullscreen"),"fullscreen"!==virtualScroll.dialogSize&&(virtualScroll.positionY="bottom",virtualScroll.positionX="left",virtualScroll.transformOrigin="center top",virtualScroll.minWidthToElement=!0,virtualScroll.setDialogSize=_skinviewmanager.default.getSkinOptions().dontUseNativeDropDowns),multiple&&(virtualScroll.onChange=function(value){setValuesFromActionsheet(select,value)},virtualScroll.enableReordering="true"===select.getAttribute("data-reordering")),virtualScroll.hasItemSelectionState=!multiple,virtualScroll.hasItemIcon="true"===select.getAttribute("data-hasitemicon"),showActionSheet(virtualScroll).then(function(value){var selectedValues;return multiple?Promise.resolve():value?(selectedValues=value?[getItemId.call(select,value)]:[],select.setValues(selectedValues,!0,value?[value]:[]),Promise.resolve()):setValuesFromActionsheet(select,value)},function(){})}require(["css!modules/emby-elements/emby-select/emby-select.css"]);var SupportsTouchEvent="ontouchstart"in document.documentElement,DefaultPointerType="undefined"!=typeof PointerEvent&&"pointerType"in PointerEvent.prototype?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.default.tv&&document.activeElement!==document.body&&_focusmanager.default.focus(select),showActionSheetFlyout(select))}function onKeyDown(e){var target;switch(_keyboard.default.normalizeKeyFromEvent(e)){case"Enter":return void(enableNativeMenu(this)?(target=e.target).showPicker&&target.showPicker():(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)}var 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.default.allowBackdropFilter()&&this.classList.add("emby-select-backdropfilter"),_layoutmanager.default.tv&&EnableFocusTransfrom&&this.classList.add("emby-select-focusscale"),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.default.translate("Any")}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(0<totalRecordCount):getItems(select,{Limit:1,EnableTotalRecordCount:!1}).then(function(result){return 0<result.Items.length})}function setLabelWhenNoValuesSelected(select){var emptyEqualsAll;select.hasAttribute("multiple")?(emptyEqualsAll=emptyValueSetEqualsAll(select),ensureSelectNameLabel(select).innerHTML=emptyEqualsAll?getAllSelectedLabel(select):_globalize.default.translate("")):ensureSelectNameLabel(select).innerHTML=""}var labelLimit=8;function setLabelFromItems(select,items){var suffix="";items.length>labelLimit&&(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){var suffix="";return values.length>labelLimit&&(suffix="...",values=values.slice(0,labelLimit)),getItems(select,{Ids:values}).then(function(result){result=result.Items;result.length>values.length&&(result=result.filter(function(i){i=getItemId.call(select,i);return null!=i&&values.includes(i)})),ensureSelectNameLabel(select).innerHTML=result.map(getItemDisplayHtml.bind(select)).join(" / ")+suffix})}function setLabelFromValues(select,values){values.length||select.parentContainer?(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)||"false"===select.getAttribute("data-autoallany")?setLabelFromNamesOfValues(select,values):getTotalRecordCount(select).then(function(totalRecordCount){if(values.length!==totalRecordCount)return setLabelFromNamesOfValues(select,values);ensureSelectNameLabel(select).innerHTML=getAllSelectedLabel(select)});setLabelWhenNoValuesSelected(select)}):setLabelWhenNoValuesSelected(select)}function getItemsFromSelectElement(elem){for(var selectOptions=elem.options,items=[],i=0,length=selectOptions.length;i<length;i++){var option=selectOptions[i],item={Name:option.textContent||option.innerText,Selected:option.selected,secondaryText:option.getAttribute("data-description")||option.title,icon:option.getAttribute("data-icon")||null};null!=option.id&&""!==option.id?item.Id=option.id:null!=option.value?item.Id=option.value:item.Id=option.Name||option.name,items.push(item)}return items}function genericElemGetItems(query){for(var items=[],options=this.options||this.positionTo.options,valuesFilter=query&&query.Ids?query.Ids:null,i=0,length=options.length;i<length;i++){var option=options[i],option={Id:option.value,Name:option.text};(!valuesFilter||valuesFilter.includes(option.Id))&&items.push(option)}return Promise.resolve({Items:items,TotalRecordCount:items.length})}function getItems(elem,query){return elem.hasAttribute("multiple")||elem.getItems?elem.getItems(query||{}):(query=getItemsFromSelectElement(elem),Promise.resolve({Items:query,TotalRecordCount:query.length}))}function ensureWrapper(select){var label,wrapper=select.closest(".emby-select-wrapper");return wrapper||((label=document.createElement("label")).classList.add("selectLabel"),(wrapper=document.createElement("div")).classList.add("emby-select-wrapper"),_layoutmanager.default.tv||wrapper.classList.add("emby-select-wrapper-smaller"),select.classList.contains("emby-select-inline")&&wrapper.classList.add("emby-select-wrapper-inline"),label.appendChild(wrapper),select.parentNode.replaceChild(label,select),wrapper.appendChild(select)),wrapper}function ensureSelectNameLabel(select){var wrapper,className,nameLabel=select.nameLabel;return nameLabel||(wrapper=ensureWrapper(select),className="emby-select-selectedNameContainer",select.classList.contains("emby-select-inline")&&(className+=" emby-select-selectedNameContainer-inline"),wrapper.insertAdjacentHTML("beforeend",'<div class="'+className+'"><div class="emby-select-selectedName"></div></div>'),select.nameLabel=nameLabel=wrapper.querySelector(".emby-select-selectedName")),nameLabel}function setValuesFromActionsheet(select,values){return!(values.length&&emptyValueSetEqualsAll(select)&&select.hasAttribute("multiple"))||"false"===select.getAttribute("data-autoallany")?(select.setValues(values,!0),Promise.resolve()):getTotalRecordCount(select).then(function(totalRecordCount){values.length>=totalRecordCount&&(values=[]),select.setValues(values,!0)})}function setDynamicFieldDescription(select){var _select$closest;select.classList.contains("emby-select-dynamicfielddescription")&&(_select$closest=null==(_select$closest=select.closest(".selectContainer"))?void 0:_select$closest.querySelector(".dynamicFieldDescription"))&&(select=(null==(select=getItemsFromSelectElement(select).filter(function(s){return s.Selected})[0])?void 0:select.secondaryText)||"",_select$closest.innerHTML=_textencoding.default.htmlEncode(select),select?_select$closest.classList.remove("hide"):_select$closest.classList.add("hide"))}SupportsTouchEvent=function(_HTMLSelectElement){function EmbySelect(){var _this,self=_this=_HTMLSelectElement.call(this)||this;return onInit.call(self),babelHelpers.possibleConstructorReturn(_this,self)}return babelHelpers.inherits(EmbySelect,_HTMLSelectElement),babelHelpers.createClass(EmbySelect,[{key:"getValues",value:function(){return this._multipleValues}},{key:"setValues",value:function(values,triggerChangeEvent,selectedItems){this.hasAttribute("multiple")||this.getItems?(this._multipleValues=values,this.getItems&&this.getItems!==genericElemGetItems&&(this.innerHTML='<option value="'+(values[0]||"")+'"></option>'),selectedItems?function(select,selectedItems){selectedItems.length||select.parentContainer?(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)||"false"===select.getAttribute("data-autoallany")?setLabelFromItems(select,selectedItems):getTotalRecordCount(select).then(function(totalRecordCount){if(selectedItems.length!==totalRecordCount)return setLabelFromItems(select,selectedItems);ensureSelectNameLabel(select).innerHTML=getAllSelectedLabel(select)});setLabelWhenNoValuesSelected(select)}):setLabelWhenNoValuesSelected(select)}(this,selectedItems):setLabelFromValues(this,values)):this.value=Array.isArray(values)?values[0]||"":values||"",triggerChangeEvent&&(selectedItems=this,(values=document.createEvent("HTMLEvents")).initEvent("change",!0,!0),selectedItems.dispatchEvent(values)),setDynamicFieldDescription(this)}},{key:"values",get:function(){return this.getValues()},set:function(values){this.setValues(values)}},{key:"singleValue",get:function(){return this.getItems?this._multipleValues[0]||"":this.value},set:function(val){var newValues;this.getItems?(setLabelFromValues(this,newValues=null!=val&&""!==val?[val]:[]),this._multipleValues=newValues,this.getItems!==genericElemGetItems&&(this.innerHTML='<option value="'+val+'"></option>')):this.value=val,setDynamicFieldDescription(this)}},{key:"connectedCallback",value:function(){var wrapper,label,multiple,labelText,labelFormatArgs,arrowContainerClass;onInit.call(this),this.classList.contains("emby-select")||((wrapper=this.closest(".emby-select-wrapper"))?(label=this.closest("label"),(multiple=this.hasAttribute("multiple"))&&(this.size=1,this.classList.add("hiddenScrollY")),this.classList.add("emby-select"),labelText=this.getAttribute("label")||"",(labelFormatArgs=this.getAttribute("data-labelformatargs"))&&((labelFormatArgs=labelFormatArgs.split("|")).unshift(labelText),labelText=_globalize.default.translate.apply(this,labelFormatArgs)),labelFormatArgs="selectLabelText",arrowContainerClass="selectArrowContainer",this.classList.contains("emby-select-inline")&&(label.classList.add("selectLabel-inline"),labelFormatArgs+=" selectLabelText-inline","true"===this.getAttribute("data-hidelabeltext")&&(labelFormatArgs+=" hide"),arrowContainerClass+=" selectArrowContainer-inline"),label.classList.add("selectLabel"),label.insertAdjacentHTML("afterbegin",'<div class="'+labelFormatArgs+'">'+labelText+"</div>"),label.removeEventListener("click",onLabelClick),label.addEventListener("click",onLabelClick),(multiple||this.getItems)&&ensureSelectNameLabel(this),wrapper.insertAdjacentHTML("beforeend",'<div class="'+arrowContainerClass+'"><i class="selectArrow md-icon">&#xe313;</i></div>'),enableNativeMenu(this)||this.classList.add("emby-select-nopointer")):wrapper=ensureWrapper(this))}},{key:"disconnectedCallback",value:function(){}},{key:"setLabel",value:function(text){this.closest("label").querySelector(".selectLabelText").innerHTML=text}}])}(babelHelpers.wrapNativeSuper(HTMLSelectElement));customElements.define("emby-select",SupportsTouchEvent,{extends:"select"}),_exports.default=SupportsTouchEvent});