1 line
12 KiB
JavaScript
1 line
12 KiB
JavaScript
define(["exports","./../../common/globalize.js","./../../layoutmanager.js","./../../actionsheet/actionsheet.js","./../../dom.js","./../../input/keyboard.js"],function(_exports,_globalize,_layoutmanager,_actionsheet,_dom,_keyboard){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;var EnableFocusTransfrom=_dom.default.allowFocusScaling();function enableNativeMenu(elem){return!_layoutmanager.default.tv&&!elem.getItems&&!elem.hasAttribute("multiple")&&"custom"!==elem.getAttribute("data-menu")}function emptyValueSetEqualsAll(select){return!select.hasAttribute("empty-is-not-all")}function showActionSheet(select){var labelElem=select.closest("label").querySelector(".selectLabelText"),labelElem=labelElem?labelElem.textContent||labelElem.innerText:null,labelElem={getItems:select.getItems||function(query){return getItems(this,query)}.bind(select),enableVirtualScroller:null!=select.getItems&&"false"!==select.getAttribute("data-virtualscroll"),selectedValues:select.getValues(),positionTo:select,emptyValueSetEqualsAll:function(select){return emptyValueSetEqualsAll(select),!1}(select),selectAllOnSelectNone:emptyValueSetEqualsAll(select),title:labelElem,resolveWithSelectedItem:!0,idProperty:select.getAttribute("data-id-property")||null,highlight:!1,dialogClass:select.getAttribute("data-dialogclass")||null,hasItemImage:"true"===select.getAttribute("data-hasitemimage"),showOverview:"true"===select.getAttribute("data-overview")};_layoutmanager.default.tv||(labelElem.positionY="bottom",labelElem.positionX="match",labelElem.transformOrigin="center top",labelElem.minWidthToElement=!0),labelElem.multiple=select.hasAttribute("multiple"),labelElem.hasItemSelectionState=!labelElem.multiple,labelElem.hasItemAsideIcon="true"===select.getAttribute("data-hasitemicon"),_actionsheet.default.show(labelElem).then(function(value){var selectedValues;return!select.hasAttribute("multiple")&&value?(selectedValues=value?[value.Id]:[],select.setValues(selectedValues,!0,value?[value]:[]),Promise.resolve()):function(select,values){if(values.length&&emptyValueSetEqualsAll(select)&&select.hasAttribute("multiple")&&"false"!==select.getAttribute("data-autoallany"))return getTotalRecordCount(select).then(function(totalRecordCount){values.length>=totalRecordCount&&(values=[]),select.setValues(values,!0)});return select.setValues(values,!0),Promise.resolve()}(select,value)})}require(["css!modules/emby-elements/emby-select/emby-select.css"]);var supportsTouchEvent="ontouchstart"in document.documentElement;function onPointerDown(e){var pointerType=(pointerType=e.pointerType)||(supportsTouchEvent?"touch":"mouse");e.button||enableNativeMenu(this)||(e.preventDefault(),this.disabled)||"mouse"===pointerType&&showActionSheet(this)}function onLabelClick(e){var select;e.button||!(select=this.querySelector("select"))||enableNativeMenu(select)||(e.preventDefault(),select.disabled)||showActionSheet(select)}function onKeyDown(e){switch(_keyboard.default.normalizeKeyFromEvent(e)){case"Enter":return void(enableNativeMenu(this)||(e.preventDefault(),e.stopPropagation(),showActionSheet(this)));case" ":return void(enableNativeMenu(this)||(e.preventDefault(),showActionSheet(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)||showActionSheet(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.classList.add("emby-select-tv"),this.classList.contains("emby-select-inline"))&&this.classList.add("emby-select-tv-inline"),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 mapItemToName(item){return item.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(mapItemToName).join(" / ")+suffix}function setLabelFromNamesOfValues(select,values){var suffix="";return values.length>labelLimit&&(suffix="...",values=values.slice(0,labelLimit)),getItems(select,{Ids:values}).then(function(result){ensureSelectNameLabel(select).innerHTML=result.Items.map(mapItemToName).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 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=function(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,asideIcon: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}(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"),label.appendChild(wrapper),select.parentNode.replaceChild(label,select),wrapper.appendChild(select)),wrapper}function ensureSelectNameLabel(select){var wrapper,nameLabel=select.nameLabel;return nameLabel||((wrapper=ensureWrapper(select)).insertAdjacentHTML("beforeend",'<div class="emby-select-selectedNameContainer"><div class="emby-select-selectedName"></div></div>'),select.nameLabel=nameLabel=wrapper.querySelector(".emby-select-selectedName")),nameLabel}var EmbySelect=function(_HTMLSelectElement){babelHelpers.inherits(EmbySelect,_HTMLSelectElement);var _super=_createSuper(EmbySelect);function EmbySelect(){babelHelpers.classCallCheck(this,EmbySelect);var _this,self=_this=_super.call(this);return onInit.call(self),babelHelpers.possibleConstructorReturn(_this,self)}return 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))}},{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}},{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",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"></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}}]),EmbySelect}(babelHelpers.wrapNativeSuper(HTMLSelectElement));customElements.define("emby-select",EmbySelect,{extends:"select"}),_exports.default=EmbySelect}); |