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

1 line
No EOL
6.1 KiB
JavaScript

import dom from"./../../dom.js";import layoutManager from"./../../layoutmanager.js";import actionsheet from"./../../actionsheet/actionsheet.js";import focusManager from"./../../focusmanager.js";let ActionSheet=actionsheet.constructor;function onFocus(){document.attachIME&&document.attachIME(this),this.labelElement?.classList.add("inputLabelFocused")}function onBlur(){this.labelElement?.classList.remove("inputLabelFocused")}function destroyActionSheet(elem){clearInputTimer(elem);var actionsheet=elem.actionsheet;actionsheet&&(actionsheet.isShowing()&&actionsheet.close(),actionsheet.destroy(),elem.actionsheet=null)}function onInputTimeout(){let elem=this;var value=elem.value.trim();if(console.log("onInputTimeout: "+value),value){if(!elem.actionsheet){var value=new ActionSheet,options=(elem.actionsheet=value,{getItems:elem.getItems,enableVirtualScroller:!1,positionTo:elem,resolveWithSelectedItem:!0,hasItemIcon:!0,iconRight:!1,fields:["Name","Type","ParentName"],dialogClass:"emby-input-actionsheet",offsetTop:2,refocus:!1,artist:!1,enableDefaultIcon:!0,imageSize:"small",hasItemImage:!0,setCurrentFocusScope:!1,autoRepositionY:!1});layoutManager.tv||(options.positionY="bottom",options.positionX="left",options.transformOrigin="center top",options.minWidthToElement=!0);let refocus="false"!==elem.getAttribute("data-refocus");return elem.dispatchEvent(new CustomEvent("selectionopen",{bubbles:!1,cancelable:!1,detail:{}})),value.show(options).then(function(item){elem.value=item.Name,elem.dispatchEvent(new CustomEvent("itemselected",{bubbles:!1,cancelable:!1,detail:{item:item}})),refocus&&focusManager.focus(elem),elem.dispatchEvent(new CustomEvent("selectionclose",{bubbles:!1,cancelable:!1,detail:{}})),destroyActionSheet(elem)},function(){elem.dispatchEvent(new CustomEvent("selectioncancel",{bubbles:!1,cancelable:!1,detail:{}})),refocus&&focusManager.focus(elem),elem.dispatchEvent(new CustomEvent("selectionclose",{bubbles:!1,cancelable:!1,detail:{}})),destroyActionSheet(elem)})}elem.actionsheet.refreshItems()}else destroyActionSheet(elem)}function clearInputTimer(elem){elem.inputTimeout&&clearTimeout(elem.inputTimeout)}function onInput(){clearInputTimer(this);var value=this.value.trim();value?this.inputTimeout=setTimeout(onInputTimeout.bind(this),400):destroyActionSheet(this)}function isDecimal(val){return!Number.isInteger(parseFloat(val))}function setInputMode(elem){var isDecimalInput;"number"===elem.type&&(isDecimalInput=isDecimal(elem.getAttribute("step"))||isDecimal(elem.getAttribute("min"))||isDecimal(elem.getAttribute("max")),elem.setAttribute("inputmode",isDecimalInput?"decimal":"numeric"))}require(["css!modules/emby-elements/emby-input/emby-input.css"]);let inputId=0;function onInit(){var label,labelClass,parentNode=this.parentNode;parentNode&&(this.hasInit||(this.hasInit=!0,this.id||(this.id="embyinput"+inputId,inputId++),this.classList.contains("emby-input"))?this.labelElement&&(this.labelElement.htmlFor=this.id):(this.classList.add("emby-input"),layoutManager.tv?(this.classList.add("emby-input-tv"),"number"===this.type&&this.classList.add("emby-input-hide-spin-button")):this.classList.add("emby-input-largerfont","emby-input-smaller"),(label=this.ownerDocument.createElement("label")).innerHTML=this.getAttribute("label")||"",label.classList.add("inputLabel"),(labelClass=this.getAttribute("labelclass"))&&label.classList.add(labelClass),label.htmlFor=this.id,parentNode.insertBefore(label,this),this.labelElement=label,dom.addEventListener(this,"focus",onFocus,{passive:!0}),dom.addEventListener(this,"blur",onBlur,{passive:!0}),"true"===this.getAttribute("data-autocompleteitems")&&dom.addEventListener(this,"input",onInput,{passive:!0}),setInputMode(this)))}function roundMsToStep(ms,step){return step=step||1,step*=1e3,ms-ms%(step=Math.floor(step))}let supportsValueAsNumber=void 0!==document.createElement("input").valueAsNumber,supportsValueAsDate=void 0!==document.createElement("input").valueAsDate;function pad(num,size){let s=num+"";for(;s.length<size;)s="0"+s;return s}function toLocalIsoString(date){return date.getFullYear()+"-"+pad(date.getMonth()+1,2)+"-"+pad(date.getDate(),2)}class EmbyInput extends HTMLInputElement{constructor(){var self=super();return onInit.call(self),self}connectedCallback(){onInit.call(this)}disconnectedCallback(){destroyActionSheet(this)}isSelectionDialogOpen(){return this.actionsheet?.isShowing()||!1}focusSelectionDialog(){var actionsheet=this.actionsheet;actionsheet&&actionsheet.isShowing()&&actionsheet.autoFocus()}closeSelectionDialog(){destroyActionSheet(this)}label(text){this.labelElement.innerHTML=text}get valueAsNumber(){if(supportsValueAsNumber)return super.valueAsNumber;var value=this.value;if(value)try{return Date.parse(value)}catch(err){}return NaN}set valueAsNumber(val){!val||isNaN(val)?this.value="":(val=roundMsToStep(val,this.step),supportsValueAsNumber?super.valueAsNumber=val:super.value=val?toLocalIsoString(new Date(val)):"")}get valueAsDate(){var value;return supportsValueAsDate?super.valueAsDate:(value=this.valueAsNumber)&&!isNaN(value)?new Date(value):null}set valueAsDate(val){supportsValueAsDate?super.valueAsDate=val:super.value=val?toLocalIsoString(val.getTime()):""}get valueAsDateUtc(){var offsetMs,val=this.valueAsNumber;return val&&!isNaN(val)?(offsetMs=60*new Date(val).getTimezoneOffset()*1e3,new Date(val+offsetMs)):null}set valueAsDateUtc(date){var offsetMs;date?(offsetMs=60*date.getTimezoneOffset()*1e3,this.valueAsNumber=date.getTime()-offsetMs):this.value=""}get valueAsNumberUtc(){var val=this.valueAsNumber;return!val||isNaN(val)?val:val+60*(new Date).getTimezoneOffset(val)*1e3}set valueAsNumberUtc(val){var offsetMs;!val||isNaN(val)?this.value="":(offsetMs=60*new Date(val).getTimezoneOffset()*1e3,this.valueAsNumber=val-offsetMs)}get minDateTimeLocal(){return null}set minDateTimeLocal(valueAsNumber){valueAsNumber=roundMsToStep(valueAsNumber-=60*new Date(valueAsNumber).getTimezoneOffset()*1e3,this.step),this.setAttribute("min",new Date(valueAsNumber).toISOString().replace("Z",""))}}customElements.define("emby-input",EmbyInput,{extends:"input"}),EmbyInput.setLabel=function(elem,label){elem.label&&elem.labelElement?elem.label(label||""):elem.setAttribute("label",label||"")};export default EmbyInput;