Files
Futontime_UI/modules/viewmanager/basesettingscontainer.js
2026-02-09 10:48:21 +01:00

1 line
12 KiB
JavaScript

define(["exports","./../layoutmanager.js","./../common/appsettings.js","./../common/servicelocator.js","./../common/usersettings/usersettings.js","./../common/usersettings/usersettingsbuilder.js","./../common/datetime.js","./../common/globalize.js","./../common/responsehelper.js","./../emby-apiclient/connectionmanager.js","./../loading/loading.js"],function(_exports,_layoutmanager,_appsettings,_servicelocator,_usersettings,_usersettingsbuilder,_datetime,_globalize,_responsehelper,_connectionmanager,_loading){function BaseSettingsContainer(view){this.view=view,this.view.addEventListener("change",function(e){var _e$detail,elem,instance;!1!==(null==(_e$detail=e.detail)?void 0:_e$detail.isUserChange)&&(elem=e.target.closest(".autoSetting.autoSave"))&&(instance=this,"true"===elem.getAttribute("data-changedelay")?setTimeout(function(){instance.saveAutoSetting(elem,{},!0).catch(_responsehelper.default.handleErrorResponse)},300):instance.saveAutoSetting(elem,{},!0).catch(_responsehelper.default.handleErrorResponse),showHideFieldsFeatureChecksOnContainer(instance,instance.view,!1,!0))}.bind(this))}function getListId(elem){return elem.getAttribute("data-id")}function getSettingMemberInfo(elem,isGet){var method,field=elem.getAttribute("data-settingfield");return field?{type:"field",member:field}:(method=(method=isGet?elem.getAttribute("data-getsettingmethod"):method)||elem.getAttribute("data-settingmethod"))?{type:"method",member:method}:(field=elem.getAttribute("data-usersettingsfield"))?{type:"usersettingsfield",member:field}:null}function getValueToSave(elem){var value,joinDelimiter;return"checkbox"===elem.type?value=elem.checked:elem.classList.contains("checkboxList")||elem.classList.contains("toggleList")?value=Array.prototype.map.call(elem.querySelectorAll('input[type="checkbox"]:checked'),getListId):"SELECT"===elem.tagName&&elem.hasAttribute("multiple")?(value=elem.getValues(),(joinDelimiter=elem.getAttribute("data-joindelimiter"))&&(value=value.join(joinDelimiter))):value=elem.value,value}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,BaseSettingsContainer.prototype.settingsOnResume=function(options){null!=options&&options.refresh&&this.loadSettings(options)},BaseSettingsContainer.prototype.loadSettings=function(options){var instance=this;return this.loadSettingsInternal().then(function(){options.autoFocus&&instance.autoFocus({skipIfNotEnabled:!0})})},BaseSettingsContainer.prototype.getSettingValueFromOwner=function(owner,memberInfo){switch(memberInfo.member){case"getEnableLogoAsTitle":return owner.getEnableLogoAsTitle(_globalize.default.getCurrentLocale());case"showDetailPoster":return owner.showDetailPoster(_layoutmanager.default.tv)}switch(memberInfo.type){case"field":return owner[memberInfo.member];case"usersettingsfield":return this.getNamedSettingsOwner("usersettings").get(memberInfo.member);case"method":return owner[memberInfo.member]();default:throw new Error("unknown member type: "+memberInfo.type)}},BaseSettingsContainer.prototype.setFieldValue=function(elem,value,triggerChange){var joinDelimiter;"checkbox"===elem.type?elem.checked=!0===value:elem.classList.contains("checkboxList")||elem.classList.contains("toggleList")?function(elem,value){Array.isArray(value)||(value=value.split(function(elem){return elem.getAttribute("data-delimiter")||","}(elem)));for(var checkboxes=elem.querySelectorAll('input[type="checkbox"]'),i=0,length=checkboxes.length;i<length;i++){var current=checkboxes[i];current.checked=value.includes(getListId(current))}}(elem,value):(null==value&&(value=""),"SELECT"===elem.tagName?elem.hasAttribute("multiple")?("string"==typeof value&&(value?(joinDelimiter=elem.getAttribute("data-joindelimiter"))&&(value=value.split(joinDelimiter)):value=[]),elem.values=Array.isArray(value)?value:[value]):elem.singleValue=value.toString():"range"===elem.type?elem.setValue(value):elem.value=value),triggerChange&&elem.dispatchEvent(new CustomEvent("change",{detail:{isUserChange:!1},bubbles:!0}))},BaseSettingsContainer.prototype.loadAutoSetting=function(elem){var memberInfo,owner=this.getSettingsOwner(elem);owner&&(memberInfo=getSettingMemberInfo(elem,!0))&&(owner=this.getSettingValueFromOwner(owner,memberInfo),this.setFieldValue(elem,owner,"true"===elem.getAttribute("data-triggerchange")))},BaseSettingsContainer.prototype.getSettingsOwner=function(elem){var owner=elem.getAttribute("data-settingowner");return this.getNamedSettingsOwner(owner,elem)},BaseSettingsContainer.prototype.getNamedSettingsOwner=function(owner,elem){switch(owner){case"layoutmanager":return _layoutmanager.default;case"appsettings":return _appsettings.default;case"subtitleappearancesettings":return this.getNamedSettingsOwner("usersettings",elem).getSubtitleAppearanceSettings();default:var objects;return owner?(objects=this.autoSettingsObjects)?objects[owner]:null:null}},BaseSettingsContainer.prototype.saveAutoSetting=function(elem,ownerObjects,sendUpdates){var value,memberInfo,owner=this.getSettingsOwner(elem);return owner&&(value=getValueToSave(elem),memberInfo=getSettingMemberInfo(elem))?this.saveAutoSettingIntoOwner(elem,owner,memberInfo,value,ownerObjects,sendUpdates):Promise.resolve()},BaseSettingsContainer.prototype.getUserConfigurationUserId=function(){return this.getApiClient().getCurrentUserId()},BaseSettingsContainer.prototype.saveAutoSettingIntoOwner=function(elem,owner,memberInfo,value,ownerObjects,sendUpdates){var ownerObj,apiClient,userId,ownerName=elem.getAttribute("data-settingowner");if("userconfiguration"===ownerName)return apiClient=this.getApiClient(),userId=this.getUserConfigurationUserId(),(ownerObj=(ownerObj=ownerObjects[ownerName])||(ownerObjects[ownerName]={}))[memberInfo.member]=value,!1!==sendUpdates?apiClient.updatePartialUserConfiguration(userId,ownerObj):Promise.resolve();if("serverconfiguration"===ownerName)return apiClient=this.getApiClient(),(userId=(userId=ownerObjects[ownerName])||(ownerObjects[ownerName]={}))[memberInfo.member]=value,!1!==sendUpdates?apiClient.updatePartialServerConfiguration(userId):Promise.resolve();if("showDetailPoster"===memberInfo.member)owner.showDetailPoster(_layoutmanager.default.tv,value);else{switch(memberInfo.type){case"field":owner[memberInfo.member]=value;break;case"usersettingsfield":owner.set(memberInfo.member,value);break;case"method":owner[memberInfo.member](value);break;default:throw new Error("unknown member type: "+memberInfo.type)}"subtitleappearancesettings"===ownerName&&this.getNamedSettingsOwner("usersettings",elem).setSubtitleAppearanceSettings(owner)}return Promise.resolve()},BaseSettingsContainer.prototype.getAutoSettingsObjectsPromises=function(){var instance,apiClient,userSettings,list=[];return this.view.querySelector('[data-settingowner="usersettings"],[data-settingowner="subtitleappearancesettings"]')&&list.push((apiClient=(instance=this).getApiClient(),userSettings=(instance=instance.getUserConfigurationUserId())===apiClient.getCurrentUserId()?_usersettings.default:new _usersettingsbuilder.default,(instance===apiClient.getCurrentUserId()?Promise.resolve():userSettings.setUserInfo(instance,apiClient)).then(function(){return{key:"usersettings",value:userSettings}}))),this.view.querySelector('[data-settingowner="userconfiguration"]')&&list.push(function(instance){return instance.getApiClient().getUser(instance.getUserConfigurationUserId()).then(function(user){return{key:"userconfiguration",value:user.Configuration}})}(this)),this.view.querySelector('[data-settingowner="serverconfiguration"]')&&list.push(function(instance){return instance.getApiClient().getServerConfiguration().then(function(config){return{key:"serverconfiguration",value:config}})}(this)),list},BaseSettingsContainer.prototype.sendUpdatesFromAutoSettingsObjects=function(ownerObjects){for(var promises=[],keys=Object.keys(ownerObjects),i=0,length=keys.length;i<length;i++){var key=keys[i],obj=ownerObjects[key];if("serverconfiguration"!==key)throw new Error("unknown key: "+key);promises.push(this.getApiClient().updatePartialServerConfiguration(obj))}return Promise.all(promises)},BaseSettingsContainer.prototype.loadAutoSettingsObjects=function(){var instance=this;return Promise.all(this.getAutoSettingsObjectsPromises()).then(function(responses){for(var objects={},i=0,length=responses.length;i<length;i++){var response=responses[i];response.key&&(objects[response.key]=response.value)}instance.autoSettingsObjects=objects})};var SupportsCssVariables=CSS.supports("color","var(--fake-var)"),SupportsCalc=CSS.supports("width","min(45.2%,calc(100% - .65em))"),SupportsMin=CSS.supports("width","min(10em, 5vw)");function isCssFeatureSupported(feature){switch(feature){case"calc":return SupportsCalc;case"min":return SupportsMin;case"cssvars":return SupportsCssVariables;default:return!1}}function isAppHostFeatureSupported(feature){return _servicelocator.appHost.supports(feature)}function showHideFieldsFeatureChecksOnElements(instance,elems){for(var anyVisible,i=0,length=elems.length;i<length;i++){var elem=elems[i];instance.isFieldVisible(elem)?(elem.classList.remove("hide"),anyVisible=!0):elem.classList.add("hide")}return anyVisible}function showHideFieldsFeatureChecksOnContainer(instance,container,allFields,fieldsWithMatchRules){allFields&&showHideFieldsFeatureChecksOnElements(instance,container.querySelectorAll(".autoSetting-autohide")),fieldsWithMatchRules&&showHideFieldsFeatureChecksOnElements(instance,container.querySelectorAll(".autoSetting-autohide[data-fieldequals]"))}function passesFieldRules(elem,rules,allowAny){for(var i=0,length=(rules=rules.split("|")).length;i<length;i++)if(function(elem,rule){return rule=rule.split("="),getValueToSave(elem.closest("form").querySelector(rule[0])).toString()===rule[1]}(elem,rules[i])){if(allowAny)return 1}else if(!allowAny)return;return!allowAny}BaseSettingsContainer.prototype.showHideFieldsFeatureChecks=function(){showHideFieldsFeatureChecksOnContainer(this,this.view,!0,!0)},BaseSettingsContainer.prototype.isFieldVisible=function(elem){var cssFeatures=elem.getAttribute("data-cssfeatures");if(cssFeatures&&(cssFeatures=cssFeatures.split(",")).length!==cssFeatures.filter(isCssFeatureSupported).length)return!1;cssFeatures=elem.getAttribute("data-minserverversion");if(cssFeatures){var apiClient=this.getApiClient();if(!apiClient||!apiClient.isMinServerVersion(cssFeatures))return!1}apiClient=elem.getAttribute("data-notminserverversion");if(apiClient){cssFeatures=this.getApiClient();if(cssFeatures&&cssFeatures.isMinServerVersion(apiClient))return!1}cssFeatures=elem.getAttribute("data-apphostsupports");if(cssFeatures&&(cssFeatures=cssFeatures.split(",")).length!==cssFeatures.filter(isAppHostFeatureSupported).length)return!1;if("true"===elem.getAttribute("data-datetimesupportslocalization")&&!_datetime.default.supportsLocalization())return!1;apiClient=elem.getAttribute("data-loggedintoconnect");if(apiClient&&apiClient.toString()!==_connectionmanager.default.isLoggedIntoConnect().toString())return!1;cssFeatures=elem.getAttribute("data-layoutmode"),apiClient=!0;if(null!=cssFeatures&&cssFeatures.startsWith("!")&&(cssFeatures=cssFeatures.substring(1),apiClient=!1),"tv"===cssFeatures)if(_layoutmanager.default.tv){if(!apiClient)return!1}else if(apiClient)return!1;cssFeatures=elem.getAttribute("data-fieldequals");return!(cssFeatures&&!passesFieldRules(elem,cssFeatures,"true"===elem.getAttribute("data-anyfield"))||"true"===elem.getAttribute("data-childfieldsvisible")&&!function(instance,parent){for(var elems=parent.querySelectorAll(".autoSetting-autohide"),i=0,length=elems.length;i<length;i++){var elem=elems[i];if(!instance.isFieldVisible(elem))return}return 1}(this,elem))},BaseSettingsContainer.prototype.loadAutoSettings=function(){var instance=this,elems=(this.showHideFieldsFeatureChecks(),instance.view.querySelectorAll(".autoSetting"));return instance.loadAutoSettingsObjects().then(function(){for(var i=0,length=elems.length;i<length;i++){var elem=elems[i];instance.loadAutoSetting(elem)}showHideFieldsFeatureChecksOnContainer(instance,instance.view,!1,!0)})},BaseSettingsContainer.prototype.saveAutoSettings=function(){_loading.default.show();for(var elems=this.view.querySelectorAll(".autoSetting"),ownerObjects={},i=0,length=elems.length;i<length;i++){var elem=elems[i];this.saveAutoSetting(elem,ownerObjects,!1)}return this.sendUpdatesFromAutoSettingsObjects(ownerObjects).then(function(r){return _loading.default.hide(),_responsehelper.default.handleConfigurationSavedResponse(r)},function(r){return _loading.default.hide(),_responsehelper.default.handleErrorResponse(r)})},BaseSettingsContainer.prototype.loadSettingsInternal=function(){return Promise.resolve()},BaseSettingsContainer.prototype.destroy=function(){this.view=null};_exports.default=BaseSettingsContainer});