1 line
No EOL
13 KiB
JavaScript
1 line
No EOL
13 KiB
JavaScript
import connectionManager from"./../emby-apiclient/connectionmanager.js";import BaseSettingsView from"./../viewmanager/basesettingsview.js";import"./../emby-elements/emby-button/emby-button.js";import"./../emby-elements/emby-dialogclosebutton/emby-dialogclosebutton.js";import appHeader from"./../appheader/appheader.js";import globalize from"./../common/globalize.js";import layoutManager from"./../layoutmanager.js";import genericedit from"./../genericedit/genericedit.js";import loading from"./../loading/loading.js";import dialogHelper from"./../dialoghelper/dialoghelper.js";import events from"./../emby-apiclient/events.js";import serverNotifications from"./../common/input/api.js";import responseHelper from"./../common/responsehelper.js";import mainTabsManager from"./../maintabsmanager.js";import"./../emby-elements/emby-scroller/emby-scroller.js";import focusManager from"./../focusmanager.js";require(["css!modules/genericui/genericui.css"]);let infoChangedEventName="UIPageInfoChanged",currentViewData,currentPage,currentDlg,isDataValid;function showConfirm(options){return Emby.importModule("./modules/common/dialogs/confirm.js").then(function(confirm){return confirm(options)})}function dashboardConfirm(message,title,callback){showConfirm(message,title).then(function(){callback(!0)},function(){callback(!1)})}function postCommand(pageId,commandId,data,itemId){var apiClient=connectionManager.currentApiClient(),url=apiClient.getUrl("UI/Command");return apiClient.ajax({type:"POST",url:url,data:JSON.stringify({PageId:pageId,CommandId:commandId,Data:data,ItemId:itemId,ClientLocale:globalize.getCurrentLocale()}),contentType:"application/json",dataType:"json"})}function onServerEvent(e,apiClient,updatedData){var mainContent;e.type===infoChangedEventName&¤tViewData&&updatedData&&updatedData.PageId===currentViewData.PageId&&(updatedData.ViewId===currentViewData.ViewId?updatedData.IsPageChangeInfo||(currentViewData=updatedData,mainContent=(e=currentDlg||currentPage).querySelector(".mainContent"),updatePageData(updatedData,e,updatedData.EditObjectContainer,mainContent,currentViewData.EditObjectContainer.Object,currentViewData.EditObjectContainer.DefaultObject)):updatedData.IsPageChangeInfo&&showStage(updatedData,currentPage))}function onInvalid(e){null!==e.target.offsetParent&&(isDataValid=!1)}function onButtonClick(e){let button=e.target.closest("BUTTON");if(button||(button=e.target.closest("INPUT"))&&!button.getAttribute("data-data1")&&(button=null),e.Data1||button&&!button.hasAttribute("disabled")){e.preventDefault();let commandId=e.Data1||(button?button.getAttribute("data-data1"):null),itemId=e.Data2||(button?button.getAttribute("data-data2"):null);var confirmationPrompt=e.ConfirmationPrompt||(button?button.getAttribute("data-prompt"):null),caption=e.Caption||(button?button.getAttribute("data-caption"):"");if(commandId){e.stopPropagation();let data=null;if(!genericedit.runCommand(commandId,(currentDlg||currentPage).querySelector(".mainContent"),itemId)){if(currentViewData.EditObjectContainer){e=(currentDlg||currentPage).querySelector(".mainContent");if(genericedit.getItemValues(currentViewData.EditObjectContainer,e),data=JSON.stringify(currentViewData.EditObjectContainer.Object),"WizardNext"===commandId||"WizardFinish"===commandId||"DialogOk"===commandId||"PageSave"===commandId){e=e.closest("FORM");if(e&&(isDataValid=!0,e.reportValidity(),!isDataValid||!1===currentViewData.EditObjectContainer.isDataValid))return}}confirmationPrompt?dashboardConfirm(confirmationPrompt,caption,wrapRunCommand):wrapRunCommand(!0)}function wrapRunCommand(run){run&&runUiCommand(currentViewData.PageId,currentViewData.ViewType,commandId,data,itemId).then(function(){},responseHelper.handleErrorResponse)}}}}function formatDescription(description){return description&&0!==description.length?description.split("\n").join("<br />"):null}function updatePageData(stage,page,container,htmlElement){genericedit.setFormValues(container,htmlElement);var container=page.querySelector(".mainTitle"),htmlElement=(container&&(container.innerHTML=stage.Caption),page.querySelector(".mainSubTitle")),buttons=(htmlElement&&stage.SubCaption&&(htmlElement.innerHTML=formatDescription(stage.SubCaption)),(page.closest(".dialog")||page).querySelectorAll(".btnButtonItem, .wizardbutton, .pagebutton, .dialogHeaderButton"));for(let n=0;n<buttons.length;n++){var btn=buttons[n],btnCommand=btn.getAttribute("data-data1");for(let i=0;i<stage.Commands.length;i++){var cmd=stage.Commands[i];if(btnCommand===cmd.CommandType){if(cmd.IsVisible?(btn.classList.remove("genericeditbutton-hide"),btn.parentElement.classList.contains("formDialogFooterItem")&&btn.parentElement.classList.remove("hide")):(btn.classList.add("genericeditbutton-hide"),btn.parentElement.classList.contains("formDialogFooterItem")&&btn.parentElement.classList.add("hide")),cmd.IsEnabled&&(btn.classList.contains("btnOk")||btn.classList.contains("btnSave"))?btn.classList.add("button-submit"):btn.classList.remove("button-submit"),"WizardNext"===btnCommand&&cmd.IsEnabled&&btn.disabled)focusManager.focus(btn);else if("WizardNext"===btnCommand&&cmd.IsEnabled&&cmd.SetFocus&&!btn.hasAttribute("focusSet")){btn.setAttribute("focusSet","true");let nextBtn=btn;focusManager.focus(nextBtn)}"WizardFinish"===btnCommand&&cmd.IsEnabled&&cmd.SetFocus&&!btn.hasAttribute("focusSet")&&(btn.setAttribute("focusSet","true"),focusManager.focus(btn)),btn.disabled=!cmd.IsEnabled,cmd.Caption&&btn.classList.contains("raised")&&(btn.innerText=cmd.Caption)}}}}function onDialogQueryClose(dlg,forceClose){var btnDialogCancel=dlg.querySelector(".btnDialogCancel:not(.genericeditbutton-hide)");return btnDialogCancel?btnDialogCancel.click():forceClose?onCloseConfirm():dashboardConfirm('Do you want to hide the dialog?\nIt will remain active and you can return through the buttons at the right or bottom.\nPress "Cancel" and use the dialog buttons to close.',"Hide Dialog Only?",function(pressedOk){pressedOk&&onCloseConfirm()}),!1;function onCloseConfirm(){dialogHelper.close(dlg),currentDlg&¤tDlg!==dlg&&dialogHelper.close(currentDlg),currentDlg=null}}function showWizardPageInternal(setupStage,editObjectContainer,template,genericeditor){var dialogOptions={removeOnClose:!0,scrollY:!0,size:layoutManager.tv?"fullscreen":"small",enableHistory:!1,autoFocus:!0,queryCloseHandler:onDialogQueryClose};setupStage.ShowDialogFullScreen&&(dialogOptions.scrollY=!1,dialogOptions.size="fullscreen");let dlg=dialogHelper.createDialog(dialogOptions);dlg.classList.add("formDialog"),dlg.innerHTML=globalize.translateDocument(template[0]);var dialogOptions=setupStage.ShowDialogFullScreen;let mainContent=dlg.querySelector(".mainContent");dialogOptions&&(mainContent.style.height="100%",(template=dlg.querySelector(".dialogForm")).style.maxWidth="none",template.style.height="100%",(dialogOptions=dlg.querySelector(".dialogContentInner")).classList.remove("dialog-content-centered","padded-left","padded-right"),dialogOptions.style.paddingTop="0",dialogOptions.style.paddingBottom="0",dialogOptions.style.height="100%",dialogOptions.parentNode.style.height="100%",dlg.querySelector(".formDialogContent").style.overflow="hidden"),"Wizard"===setupStage.ViewType&&((template=dlg.querySelector(".btnOk")).parentNode.removeChild(template),dlg.querySelector(".formDialogFooter").classList.add("formDialogFooter-wizard"));var wizardButtons=dlg.querySelectorAll(".wizardbutton");for(let n=0;n<wizardButtons.length;n++){var btn=wizardButtons.item(n);btn.setAttribute("data-data2",setupStage.PluginId),btn.addEventListener("click",onButtonClick)}return mainContent.removeEventListener("click",onButtonClick),mainContent.removeEventListener("invalid",onInvalid),genericeditor.renderForm(editObjectContainer,mainContent).then(function(){return mainContent.addEventListener("click",onButtonClick),mainContent.addEventListener("invalid",onInvalid,{capture:!0}),updatePageData(setupStage,dlg,editObjectContainer,mainContent),loading.hide(),checkCloseDialog(),currentDlg=dlg,dialogHelper.open(dlg),Promise.resolve()})}function checkCloseDialog(){currentDlg&&(dialogHelper.close(currentDlg),currentDlg=null)}function isPageBackEnabled(stage){for(let i=0;i<stage.Commands.length;i++){var cmd=stage.Commands[i];if("PageBack"===cmd.CommandType)return!0===cmd.IsVisible}return!1}function runUiCommand(pageId,viewType,commandId,data,itemId){return loading.show(),postCommand(pageId,commandId,data,itemId).then(function(setupStage){if("PageSave"===commandId&&responseHelper.handleConfigurationSavedResponse(),setupStage.RedirectViewUrl){checkCloseDialog(!1);let url=setupStage.RedirectViewUrl;Emby.importModule("./modules/approuter.js").then(function(appRouter){appRouter.show(url)})}else if(setupStage.PageId!==pageId||setupStage.ViewId!==currentViewData.ViewId)return showStage(setupStage,currentPage);loading.hide(),currentViewData=setupStage;var containerElement=currentDlg||currentPage,mainContent=containerElement.querySelector(".mainContent");return updatePageData(setupStage,containerElement,setupStage.EditObjectContainer,mainContent,currentViewData.EditObjectContainer.Object,currentViewData.EditObjectContainer.DefaultObject),Promise.resolve()})}function setTitle(view,title){view=view.querySelector(".mainTitle");view&&(view.innerText=title)}function setTabs(viewData,view){if(viewData.TabPageInfos&&1<viewData.TabPageInfos.length){view.classList.add("withTabs"),view.restoreTabsFn=()=>setTabs(viewData,view);let tabs=viewData.TabPageInfos,currentIndex=0;for(let i=0;i<tabs.length;i++)tabs[i].name=tabs[i].DisplayName,tabs[i].href=tabs[i].Href,tabs[i].navMenuId=tabs[i].NavKey,tabs[i].index=i,tabs[i].PageId===viewData.PageId&&(currentIndex=i,setTitle(view,tabs[i].name));let tabsElem=mainTabsManager.setTabs(view,currentIndex,()=>tabs).tabsContainer.querySelector('[is="emby-tabs"]');tabsElem.disablefocusActivation=!0,setTimeout(()=>tabsElem.focus(),10)}else view.classList.remove("withTabs")}function showStageInPlace(viewData,page){setTabs(viewData,page),appHeader.setTitle(viewData.Caption||"");var mainContentParent=page.querySelector(".mainContentParent");let mainContent=page.querySelector(".mainContent"),editObjectContainer=viewData.EditObjectContainer;var pageButtons=mainContentParent.querySelectorAll(".pagebutton");for(let n=0;n<pageButtons.length;n++){var btn=pageButtons.item(n);btn.setAttribute("data-data2",viewData.PluginId),btn.addEventListener("click",onButtonClick)}return mainContent.removeEventListener("click",onButtonClick),mainContent.removeEventListener("invalid",onInvalid),editObjectContainer.EditorRoot.DisplayName=null,editObjectContainer.EditorRoot.Description=null,genericedit.renderForm(editObjectContainer,mainContent).then(function(){return mainContent.addEventListener("click",onButtonClick),mainContent.addEventListener("invalid",onInvalid,{capture:!0}),updatePageData(viewData,page,editObjectContainer,mainContent),loading.hide(),Promise.resolve()})}function showStageWizard(setupStage){return new Promise(function(resolve,reject){require(["text!modules/genericui/wizardpage.template.html"]).then(function(template){showWizardPageInternal(setupStage,setupStage.EditObjectContainer,template,genericedit).then(resolve,reject)})})}function showStage(viewData,page){return currentPage=page||currentPage,"Wizard"===(currentViewData=viewData).ViewType||"Dialog"===viewData.ViewType?showStageWizard(viewData):(checkCloseDialog(!1),showStageInPlace(viewData,currentPage))}function getPageView(pageId){var apiClient=connectionManager.currentApiClient(),pageId=apiClient.getUrl("UI/View",{PageId:pageId,ClientLocale:globalize.getCurrentLocale()});return apiClient.fetch({url:pageId,type:"GET",dataType:"json"})}function View(view,params){BaseSettingsView.apply(this,arguments);params=(params?params.PageId:null)||"";params.length?(getPageView(params).then(function(viewData){showStage(viewData,view)},responseHelper.handleErrorResponse),events.on(serverNotifications,infoChangedEventName,onServerEvent)):responseHelper.handleErrorResponse({message:"No page id was specified. Cannot load page!"})}Object.assign(View.prototype,BaseSettingsView.prototype),View.prototype.onInputCommand=function(e){var command=e.detail.command;if("back"===command)if(isPageBackEnabled(currentViewData))return runUiCommand(currentViewData.PageId,currentViewData.ViewType,"PageBack",null,null).then(function(){},responseHelper.handleErrorResponse),void e.preventDefault();BaseSettingsView.prototype.onInputCommand.apply(this,arguments)},View.prototype.onResume=function(options){BaseSettingsView.prototype.onResume.apply(this,arguments),this.view?.restoreTabsFn&&this.view.restoreTabsFn(),events.on(serverNotifications,infoChangedEventName,onServerEvent)},View.prototype.onPause=function(){events.off(serverNotifications,infoChangedEventName,onServerEvent),BaseSettingsView.prototype.onPause.apply(this,arguments)},View.prototype.destroy=function(){BaseSettingsView.prototype.destroy.apply(this,arguments),events.off(serverNotifications,infoChangedEventName,onServerEvent)};export default View; |