EmbyCrackedClient/web/users/parentalcontroltab.js
2025-06-25 11:46:04 +08:00

1 line
No EOL
9.8 KiB
JavaScript

import globalize from"./../modules/common/globalize.js";import loading from"./../modules/loading/loading.js";import datetime from"./../modules/common/datetime.js";import BaseTab from"./../modules/tabbedview/basetab.js";import AccessScheduleDialog from"./../components/accessschedule/accessschedule.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-itemscontainer/emby-itemscontainer.js";import listView from"./../modules/listview/listview.js";import layoutManager from"./../modules/layoutmanager.js";import itemManager from"./../modules/common/itemmanager/itemmanager.js";function showPrompt(options){return Emby.importModule("./modules/prompt/prompt.js").then(function(prompt){return prompt(options)})}function populateRatings(allParentalRatings,page){let html="";html+="<option value=''></option>";var ratings=[];let i,length,rating;for(i=0,length=allParentalRatings.length;i<length;i++){if(rating=allParentalRatings[i],ratings.length){var lastRating=ratings[ratings.length-1];if(lastRating.Value===rating.Value){lastRating.Name+="/"+rating.Name;continue}}ratings.push({Name:rating.Name,Value:rating.Value})}for(i=0,length=ratings.length;i<length;i++)rating=ratings[i],html+="<option value='"+rating.Value+"'>"+rating.Name+"</option>";page.querySelector(".selectMaxParentalRating").innerHTML=html}function loadUnratedItems(page,user){var items=[{name:globalize.translate("Books"),value:"Book"},{name:globalize.translate("Games"),value:"Game"},{name:globalize.translate("OptionBlockChannelContent"),value:"ChannelContent"},{name:globalize.translate("LiveTV"),value:"LiveTvChannel"},{name:globalize.translate("Movies"),value:"Movie"},{name:globalize.translate("Music"),value:"Music"},{name:globalize.translate("Trailers"),value:"Trailer"},{name:globalize.translate("TVShows"),value:"Series"}];let html="";html=html+('<h3 class="checkboxListLabel">'+globalize.translate("HeaderBlockItemsWithNoRating"))+'</h3><div class="checkboxList">';for(let i=0,length=items.length;i<length;i++){var item=items[i],checkedAttribute=-1!==user.Policy.BlockUnratedItems.indexOf(item.value)?' checked="checked"':"";html+='<label><input type="checkbox" is="emby-checkbox" class="chkUnratedItem" data-itemtype="'+item.value+'" type="checkbox"'+checkedAttribute+"><span>"+item.name+"</span></label>"}html+="</div>",page.querySelector(".blockUnratedItems").innerHTML=html}function loadUser(instance,page,user,allParentalRatings){loadUnratedItems(page,user),instance.tags=user.Policy.BlockedTags,populateRatings(allParentalRatings,page);let ratingValue="";if(user.Policy.MaxParentalRating)for(let i=0,length=allParentalRatings.length;i<length;i++){var rating=allParentalRatings[i];user.Policy.MaxParentalRating>=rating.Value&&(ratingValue=rating.Value)}page.querySelector(".selectMaxParentalRating").value=ratingValue,page.querySelector(".selectTagMode").value=user.Policy.IsTagBlockingModeInclusive?"include":"",user.Policy.IsAdministrator?page.querySelector(".accessScheduleSection").classList.add("hide"):page.querySelector(".accessScheduleSection").classList.remove("hide"),page.querySelector(".selectMultiRestrictionMode").value=user.Policy.AllowTagOrRating?"any":"all",instance.schedules=user.Policy.AccessSchedules||[],loading.hide(),onValueChange.call(instance);var promises=[],itemsContainers=page.querySelectorAll(".itemsContainer");for(let i=0,length=itemsContainers.length;i<length;i++)promises.push(waitForCustomElementUpgradeAndResume(itemsContainers[i],{refresh:!0}));return Promise.all(promises)}function waitForCustomElementUpgradeAndResume(itemsContainer,options){return itemsContainer.waitForCustomElementUpgrade().then(function(){itemsContainer.resume(options)})}function onSaveComplete(page){loading.hide(),formHelper.handleConfigurationSavedResponse()}function saveUser(instance,user,page){user.Policy.MaxParentalRating=page.querySelector(".selectMaxParentalRating").value||null,user.Policy.IsTagBlockingModeInclusive="include"===page.querySelector(".selectTagMode").value,user.Policy.AllowTagOrRating="any"===page.querySelector(".selectMultiRestrictionMode").value,user.Policy.BlockUnratedItems=Array.prototype.filter.call(page.querySelectorAll(".chkUnratedItem"),function(i){return i.checked}).map(function(i){return i.getAttribute("data-itemtype")}),user.Policy.AccessSchedules=instance.schedules,user.Policy.BlockedTags=instance.tags,ApiClient.updateUserPolicy(user.Id,user.Policy).then(function(){onSaveComplete(page)})}function showSchedulePopup(instance,schedule,index){AccessScheduleDialog.show({schedule:schedule=schedule||{}}).then(function(updatedSchedule){var schedules=instance.schedules;schedules[index=-1===index?schedules.length:index]=updatedSchedule,instance.refreshAccessSchedule()})}function showBlockedTagPopup(instance,page){showPrompt({label:globalize.translate("Tag")}).then(function(value){var tags=instance.tags;-1===tags.indexOf(value)&&(tags.push(value),instance.refreshTags())})}function onValueChange(){var view=this.view,selectMaxParentalRating=view.querySelector(".selectMaxParentalRating"),selectTagMode=(selectMaxParentalRating.value?view.querySelector(".blockUnratedItems").classList.remove("hide"):view.querySelector(".blockUnratedItems").classList.add("hide"),view.querySelector(".selectTagMode"));selectMaxParentalRating.value&&"include"===selectTagMode.value?view.querySelector(".fldMultiRestrictionMode").classList.remove("hide"):view.querySelector(".fldMultiRestrictionMode").classList.add("hide")}function getTranslatedDayName(dayOfWeek){for(var date=new Date;0<date.getDay();)date.setDate(date.getDate()-1);var index=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"].indexOf(dayOfWeek);return-1!==index?(0<index&&date.setDate(date.getDate()+index),datetime.toLocaleDateString(date,{weekday:"long"})):dayOfWeek}function getDisplayTime(hours){let minutes=0;var pct=hours%1;return pct&&(minutes=parseInt(60*pct)),datetime.getDisplayTime(new Date(2e3,1,1,hours,minutes,0,0))}function getAccessScheduleItems(query){var items=this.schedules.map(function(i){return{Type:"GenericListItem",Name:getTranslatedDayName(i.DayOfWeek),CanDelete:!0,Icon:"calendar_month",DeleteType:"remove",ShortOverview:getDisplayTime(i.StartHour)+" - "+getDisplayTime(i.EndHour),OriginalItem:i}});return Promise.resolve({Items:items,TotalRecordCount:items.length})}function getAccessScheduleListOptions(items){return{renderer:listView,options:{moreButton:!1,action:layoutManager.tv?"menu":"none",buttonCommands:["delete"],fields:["Name","ShortOverview"],defaultBackground:!1,roundImage:!0,commandActions:{deleteItems:deleteAccessSchedules.bind(this)}}}}function deleteAccessSchedules(options){let itemsToRemove=options.items;return this.schedules=this.schedules.filter(function(t){return 0===itemsToRemove.filter(function(i){return i.OriginalItem===t}).length}),Promise.resolve()}function getBlockedTagsItems(query){let icon=itemManager.getDefaultIcon({Type:"Tag"});var items=this.tags.map(function(i){return{Type:"GenericListItem",Name:i,Id:i,CanDelete:!0,Icon:icon,DeleteType:"remove",OriginalItem:i}});return Promise.resolve({Items:items,TotalRecordCount:items.length})}function deleteBlockedTags(options){let itemsToRemove=options.items;return this.tags=this.tags.filter(function(t){return 0===itemsToRemove.filter(function(i){return i.Id===t}).length}),Promise.resolve()}function getBlockedTagsListOptions(items){return{renderer:listView,options:{defaultBackground:!1,roundImage:!0,moreButton:!1,action:layoutManager.tv?"menu":"none",buttonCommands:["delete"],image:!1,fields:["Name"],commandActions:{deleteItems:deleteBlockedTags.bind(this)}}}}function onSubmit(e){let instance=this,page=instance.view;var params=instance.params,params=(loading.show(),params.userId);return ApiClient.getUser(params,!1).then(function(result){saveUser(instance,result,page)}),e.preventDefault(),e.stopPropagation(),!1}function ParentalControlTab(view,params,options){BaseTab.apply(this,arguments),this.apiClient=ApiClient,view.addEventListener("change",onValueChange.bind(this));let instance=this;view.querySelector(".btnAddSchedule").addEventListener("click",function(){showSchedulePopup(instance,{},-1)}),view.querySelector(".btnAddBlockedTag").addEventListener("click",function(){showBlockedTagPopup(instance,view)}),view.querySelector(".userParentalControlForm").addEventListener("submit",onSubmit.bind(this));var btns=view.querySelectorAll(".userEditTabButton");for(let i=0,length=btns.length;i<length;i++)btns[i].href=btns[i].getAttribute("data-href")+"?userId="+params.userId+"&serverId="+ApiClient.serverId();var blockedTagsItemsContainer=view.querySelector(".accessScheduleList"),blockedTagsItemsContainer=(blockedTagsItemsContainer.fetchData=getAccessScheduleItems.bind(this),blockedTagsItemsContainer.getListOptions=getAccessScheduleListOptions.bind(this),view.querySelector(".blockedTags"));blockedTagsItemsContainer.fetchData=getBlockedTagsItems.bind(this),blockedTagsItemsContainer.getListOptions=getBlockedTagsListOptions.bind(this)}Object.assign(ParentalControlTab.prototype,BaseTab.prototype),ParentalControlTab.prototype.onResume=function(options){BaseTab.prototype.onResume.apply(this,arguments),loading.show();let page=this.view;var params=this.params,params=(loading.show(),ApiClient.getUser(params.userId,!1)),promise2=ApiClient.getParentalRatings();let instance=this;Promise.all([params,promise2]).then(function(responses){loadUser(instance,page,responses[0],responses[1])})},ParentalControlTab.prototype.refreshAccessSchedule=function(){this.view.querySelector(".accessScheduleList").refreshItems()},ParentalControlTab.prototype.refreshTags=function(){this.view.querySelector(".blockedTags").refreshItems()};export default ParentalControlTab;