EmbyCrackedClient/web/modules/viewmanager/basesettingscontainer.js
2025-06-25 11:46:04 +08:00

1 line
No EOL
8.4 KiB
JavaScript

import layoutManager from"./../layoutmanager.js";import appSettings from"./../common/appsettings.js";import{appHost}from"./../common/servicelocator.js";import userSettings from"./../common/usersettings/usersettings.js";import datetime from"./../common/datetime.js";function BaseSettingsContainer(view){this.view=view,this.view.addEventListener("change",onFieldChange.bind(this))}function onFieldChange(e){if(!1!==e.detail?.isUserChange){let elem=e.target.closest(".autoSetting.autoSave");if(elem){let instance=this;"true"===elem.getAttribute("data-changedelay")?setTimeout(function(){instance.saveAutoSetting(elem)},0):instance.saveAutoSetting(elem)}}}function getListDelimiter(elem){return elem.getAttribute("data-delimiter")||","}function getListId(elem){return elem.getAttribute("data-id")}function setCheckboxListValue(elem,value){Array.isArray(value)||(value=value.split(getListDelimiter(elem)));var checkboxes=elem.querySelectorAll('input[type="checkbox"]');for(let i=0,length=checkboxes.length;i<length;i++){var current=checkboxes[i];current.checked=value.includes(getListId(current))}}function getSettingMemberInfo(elem,isGet){var field=elem.getAttribute("data-settingfield");if(field)return{type:"field",member:field};let method;return(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}BaseSettingsContainer.prototype.settingsOnResume=function(options){options?.refresh&&this.loadSettings(options)},BaseSettingsContainer.prototype.loadSettings=function(options){let instance=this;return this.loadSettingsInternal().then(function(){options.autoFocus&&instance.autoFocus({skipIfNotEnabled:!0})})},BaseSettingsContainer.prototype.getSettingValueFromOwner=function(owner,memberInfo){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")?setCheckboxListValue(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;case"appsettings":return appSettings;case"usersettings":return userSettings;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){var owner=this.getSettingsOwner(elem);if(owner){let value;"checkbox"===elem.type?value=elem.checked:elem.classList.contains("checkboxList")?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;var joinDelimiter=getSettingMemberInfo(elem);joinDelimiter&&this.saveAutoSettingIntoOwner(elem,owner,joinDelimiter,value)}},BaseSettingsContainer.prototype.getUserConfigurationUserId=function(){return this.getApiClient().getCurrentUserId()},BaseSettingsContainer.prototype.saveAutoSettingIntoOwner=function(elem,owner,memberInfo,value){var apiClient,userId,obj,ownerName=elem.getAttribute("data-settingowner");if("userconfiguration"===ownerName)apiClient=this.getApiClient(),userId=this.getUserConfigurationUserId(),(obj={})[memberInfo.member]=value,apiClient.updatePartialUserConfiguration(userId,obj);else if("serverconfiguration"===ownerName){let apiClient=this.getApiClient(),obj={};obj[memberInfo.member]=value,void apiClient.updatePartialServerConfiguration(obj)}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)}},BaseSettingsContainer.prototype.getAutoSettingsObjectsPromises=function(){return[]},BaseSettingsContainer.prototype.loadAutoSettingsObjects=function(){let instance=this;return Promise.all(this.getAutoSettingsObjectsPromises()).then(function(responses){var objects={};for(let i=0,length=responses.length;i<length;i++){var response=responses[i];response.key&&(objects[response.key]=response.value)}instance.autoSettingsObjects=objects})};let 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 appHost.supports(feature)}function childFieldsVisible(instance,parent){var elems=parent.querySelectorAll(".autoSetting-autohide");for(let i=0,length=elems.length;i<length;i++){var elem=elems[i];if(!instance.isFieldVisible(elem))return!1}return!0}BaseSettingsContainer.prototype.showHideFieldsFeatureChecks=function(){var elems=this.view.querySelectorAll(".autoSetting-autohide");for(let i=0,length=elems.length;i<length;i++){var elem=elems[i];this.isFieldVisible(elem)?elem.classList.remove("hide"):elem.classList.add("hide")}},BaseSettingsContainer.prototype.isFieldVisible=function(elem){let cssFeatures=elem.getAttribute("data-cssfeatures");if(cssFeatures&&(cssFeatures=cssFeatures.split(",")).length!==cssFeatures.filter(isCssFeatureSupported).length)return!1;var minServerVersion=elem.getAttribute("data-minserverversion");if(minServerVersion){var apiClient=this.getApiClient();if(!apiClient||!apiClient.isMinServerVersion(minServerVersion))return!1}minServerVersion=elem.getAttribute("data-notminserverversion");if(minServerVersion){let apiClient=this.getApiClient();if(apiClient&&apiClient.isMinServerVersion(minServerVersion))return!1}let appHostSupports=elem.getAttribute("data-apphostsupports");if(appHostSupports&&(appHostSupports=appHostSupports.split(",")).length!==appHostSupports.filter(isAppHostFeatureSupported).length)return!1;if("true"===elem.getAttribute("data-datetimesupportslocalization")&&!datetime.supportsLocalization())return!1;switch(elem.getAttribute("data-layoutmode")){case"tv":if(layoutManager.tv)break;return!1}return!("true"===elem.getAttribute("data-childfieldsvisible")&&!childFieldsVisible(this,elem))},BaseSettingsContainer.prototype.loadAutoSettings=function(){let instance=this,elems=(this.showHideFieldsFeatureChecks(),instance.view.querySelectorAll(".autoSetting"));return instance.loadAutoSettingsObjects().then(function(){for(let i=0,length=elems.length;i<length;i++){var elem=elems[i];instance.loadAutoSetting(elem)}})},BaseSettingsContainer.prototype.saveAutoSettings=function(){var elems=this.view.querySelectorAll(".autoSetting");for(let i=0,length=elems.length;i<length;i++){var elem=elems[i];this.saveAutoSetting(elem)}return Promise.resolve()},BaseSettingsContainer.prototype.loadSettingsInternal=function(){return Promise.resolve()},BaseSettingsContainer.prototype.destroy=function(){this.view=null};export default BaseSettingsContainer;