EmbyCrackedClient/web/modules/emby-elements/emby-select/emby-select.js
2025-06-25 11:46:04 +08:00

1 line
No EOL
15 KiB
JavaScript

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<length;i++)if(items[i].secondaryText){fields.push("ShortOverview");break}}let multiple=select.hasAttribute("multiple");var virtualScroll=null!=select.getItems&&"false"!==select.getAttribute("data-virtualscroll"),virtualScroll={getItems:select.getItems||getItemsBound.bind(select),enableVirtualScroller:virtualScroll,autoRepositionY:virtualScroll||layoutManager.tv,selectedValues:select.getValues(),positionTo:select,emptyValueSetEqualsAll:checkAllWhenEmpty(select),selectAllOnSelectNone:emptyValueSetEqualsAll(select),title:labelElem,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};return layoutManager.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.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)},()=>{})}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(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.translate("")):ensureSelectNameLabel(select).innerHTML=""}let labelLimit=8;function setLabelFromItems(select,items){let 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){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<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){var items=[],options=this.options||this.positionTo.options,valuesFilter=query&&query.Ids?query.Ids:null;for(let 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){let wrapper=select.closest(".emby-select-wrapper");var label;return wrapper||((label=document.createElement("label")).classList.add("selectLabel"),(wrapper=document.createElement("div")).classList.add("emby-select-wrapper"),layoutManager.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){let nameLabel=select.nameLabel;if(!nameLabel){var wrapper=ensureWrapper(select);let 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")}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='<option value="'+(values[0]||"")+'"></option>'),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='<option value="'+val+'"></option>')):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",'<div class="'+labelTextClass+'">'+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")}else wrapper=ensureWrapper(this)}}disconnectedCallback(){}setLabel(text){this.closest("label").querySelector(".selectLabelText").innerHTML=text}}customElements.define("emby-select",EmbySelect,{extends:"select"});export default EmbySelect;