1 line
No EOL
8.5 KiB
JavaScript
1 line
No EOL
8.5 KiB
JavaScript
import globalize from"./../modules/common/globalize.js";import loading from"./../modules/loading/loading.js";import BaseTab from"./../modules/tabbedview/basetab.js";import formHelper from"./../modules/common/responsehelper.js";import"./../modules/emby-elements/emby-checkbox/emby-checkbox.js";import"./../modules/emby-elements/emby-button/emby-button.js";import"./../modules/emby-elements/emby-button/paper-icon-button-light.js";import"./../modules/emby-elements/emby-select/emby-select.js";import"./../modules/emby-elements/emby-scroller/emby-scroller.js";import"./../modules/emby-elements/emby-itemscontainer/emby-itemscontainer.js";function triggerChange(select){var evt=document.createEvent("HTMLEvents");evt.initEvent("change",!1,!0),select.dispatchEvent(evt)}function getSubFoldersHtml(user,folder,subFolders,folderEnabled){let html="";var excludedSubFolders=user.Policy.ExcludedSubFolders||[],folderId=folder.Guid||folder.Id;let hide=0<subFolders.length;for(let i=0,length=subFolders.length;i<length;i++)if(!1!==subFolders[i].IsUserAccessConfigurable){hide=!1;break}for(let i=0,length=subFolders.length;i<length;i++){var subFolder=subFolders[i],idValue=folderId+"_"+subFolder.Id,altIdValue=folderId+"_"+(subFolder.Guid||subFolder.Id),altIdValue=user.Policy.EnableAllFolders||folderEnabled&&!excludedSubFolders.includes(idValue)&&!excludedSubFolders.includes(altIdValue),className=hide||!1===subFolder.IsUserAccessConfigurable?' class="hide"':"";html+='<label style="margin: .5em 0 .5em 2.5em;"'+className+'><input type="checkbox" is="emby-checkbox" class="chkSubFolder" data-folderid="'+folderId+'" data-id="'+idValue+'" '+(altIdValue?' checked="checked"':"")+(!1===subFolder.IsUserAccessConfigurable?" disabled":"")+"><span>"+subFolder.Path+"</span></label>"}return html}function renderMediaFolders(page,user,mediaFolders){let html="";html=html+('<h3 class="checkboxListLabel">'+globalize.translate("Libraries"))+'</h3><div class="checkboxList>';for(let i=0,length=mediaFolders.length;i<length;i++){var folder=mediaFolders[i],folderId=folder.Guid||folder.Id,isChecked=user.Policy.EnableAllFolders||user.Policy.EnabledFolders.includes(folderId);html=(html=(html+='<div class="checkboxList" style="margin:0 0 1.5em;">')+('<label><input type="checkbox" is="emby-checkbox" class="chkFolder" data-id="'+folderId+'" '+(isChecked?' checked="checked"':"")+(!1===folder.IsUserAccessConfigurable?" disabled":"")+'><span><h3 style="margin:0;">'+folder.Name+"</h3></span></label>"))+getSubFoldersHtml(user,folder,folder.SubFolders||[],isChecked)+"</div>"}html+="</div>",page.querySelector(".folderAccess").innerHTML=html;page=page.querySelector(".chkEnableAllFolders");page.checked=user.Policy.EnableAllFolders,triggerChange(page)}function loadChannels(page,user,channels){let html="";for(let i=0,length=channels.length;i<length;i++){var folder=channels[i],folderId=folder.Guid||folder.Id,isChecked=user.Policy.EnableAllChannels||user.Policy.EnabledChannels.includes(folderId);html+='<label><input type="checkbox" is="emby-checkbox" class="chkChannel" data-id="'+folderId+'" '+(isChecked?' checked="checked"':"")+"><span>"+folder.Name+"</span></label>"}page.querySelector(".channelAccess").innerHTML=html,channels.length?page.querySelector(".channelAccessContainer").classList.remove("hide"):page.querySelector(".channelAccessContainer").classList.add("hide"),page.querySelector(".chkEnableAllChannels").checked=user.Policy.EnableAllChannels,triggerChange(page.querySelector(".chkEnableAllChannels"))}function loadDevices(page,user,devices){let html="";for(let i=0,length=devices.length;i<length;i++){var device=devices[i],deviceId=device.ReportedDeviceId||device.Id,checkedAttribute=user.Policy.EnableAllDevices||(user.Policy.EnabledDevices||[]).includes(deviceId)?' checked="checked"':"";html+='<label><input type="checkbox" is="emby-checkbox" class="chkDevice" data-id="'+deviceId+'" '+checkedAttribute+"><span>"+device.Name+" - "+device.AppName+"</span></label>"}page.querySelector(".deviceAccess").innerHTML=html,page.querySelector(".chkEnableAllDevices").checked=user.Policy.EnableAllDevices,triggerChange(page.querySelector(".chkEnableAllDevices")),user.Policy.IsAdministrator?page.querySelector(".deviceAccessContainer").classList.add("hide"):page.querySelector(".deviceAccessContainer").classList.remove("hide")}function onSaveComplete(page){loading.hide(),formHelper.handleConfigurationSavedResponse()}function saveUser(user,page){user.Policy.EnableAllFolders=page.querySelector(".chkEnableAllFolders").checked,user.Policy.EnabledFolders=user.Policy.EnableAllFolders?[]:Array.prototype.filter.call(page.querySelectorAll(".chkFolder"),function(c){return c.checked}).map(function(c){return c.getAttribute("data-id")}),user.Policy.ExcludedSubFolders=user.Policy.EnableAllFolders?[]:Array.prototype.filter.call(page.querySelectorAll(".chkSubFolder"),function(c){return!c.checked}).map(function(c){return c.getAttribute("data-id")}),user.Policy.EnableAllChannels=page.querySelector(".chkEnableAllChannels").checked,user.Policy.EnabledChannels=user.Policy.EnableAllChannels?[]:Array.prototype.filter.call(page.querySelectorAll(".chkChannel"),function(c){return c.checked}).map(function(c){return c.getAttribute("data-id")}),user.Policy.EnableAllDevices=page.querySelector(".chkEnableAllDevices").checked,user.Policy.EnabledDevices=user.Policy.EnableAllDevices?[]:Array.prototype.filter.call(page.querySelectorAll(".chkDevice"),function(c){return c.checked}).map(function(c){return c.getAttribute("data-id")}),user.Policy.BlockedMediaFolders=null,ApiClient.updateUserPolicy(user.Id,user.Policy).then(function(){onSaveComplete(page)})}function onSubmit(e){let view=this.view;loading.show();var userId=this.params.userId;return ApiClient.getUser(userId,!1).then(function(result){saveUser(result,view)}),e.preventDefault(),e.stopPropagation(),!1}function loadMediaFolders(page,user){ApiClient.getJSON(ApiClient.getUrl("Library/SelectableMediaFolders")).then(function(mediaFolders){renderMediaFolders(page,user,mediaFolders)})}function setSubFoldersChecked(page,folderId,checked){var elems=page.querySelectorAll('.chkSubFolder[data-folderid="'+folderId+'"]');for(let i=0,length=elems.length;i<length;i++)elems[i].checked=checked}function setFolderCheckedIfNeeded(page,folderId){var elem=page.querySelector('.chkFolder[data-id="'+folderId+'"]');if(elem){var elems=page.querySelectorAll('.chkSubFolder[data-folderid="'+folderId+'"]');if(elems.length){let numChecked=0,numUnchecked=0;for(let i=0,length=elems.length;i<length;i++)elems[i].checked?numChecked++:numUnchecked++;numChecked||numChecked===elems.length?elem.checked=!0:numUnchecked===elems.length&&(elem.checked=!1)}}}function onFolderChange(e){var e=e.target,view=this.view;e.classList.contains("chkFolder")?setSubFoldersChecked(view,e.getAttribute("data-id"),e.checked):e.classList.contains("chkSubFolder")&&setFolderCheckedIfNeeded(view,e.getAttribute("data-folderid"))}function AccessTab(view,params,options){BaseTab.apply(this,arguments),this.apiClient=ApiClient,view.querySelector(".chkEnableAllDevices").addEventListener("change",function(){this.checked?view.querySelector(".deviceAccess").classList.add("hide"):view.querySelector(".deviceAccess").classList.remove("hide")}),view.querySelector(".chkEnableAllChannels").addEventListener("change",function(){this.checked?view.querySelector(".channelAccess").classList.add("hide"):view.querySelector(".channelAccess").classList.remove("hide")}),view.querySelector(".folderAccess").addEventListener("change",onFolderChange.bind(this)),view.querySelector(".chkEnableAllFolders").addEventListener("change",function(){this.checked?view.querySelector(".folderAccessListContainer").classList.add("hide"):view.querySelector(".folderAccessListContainer").classList.remove("hide")}),view.querySelector(".userLibraryAccessForm").addEventListener("submit",onSubmit.bind(this));var userId=params.userId,btns=view.querySelectorAll(".userEditTabButton");for(let i=0,length=btns.length;i<length;i++)btns[i].href=btns[i].getAttribute("data-href")+"?userId="+userId+"&serverId="+ApiClient.serverId()}Object.assign(AccessTab.prototype,BaseTab.prototype),AccessTab.prototype.onResume=function(options){BaseTab.prototype.onResume.apply(this,arguments),loading.show();var userId=this.params.userId;let page=this.view,promise1;promise1=userId?ApiClient.getUser(userId,!1):Promise.resolve({Configuration:{}});var userId=ApiClient.getJSON(ApiClient.getUrl("Channels")),promise6=ApiClient.getJSON(ApiClient.getUrl("Devices"));Promise.all([promise1,userId,promise6]).then(function(responses){var user=responses[0];loadChannels(page,user,responses[1].Items),loadDevices(page,user,responses[2].Items),loadMediaFolders(page,user),loading.hide()})};export default AccessTab; |