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

1 line
No EOL
4.2 KiB
JavaScript

import connectionManager from"./../emby-apiclient/connectionmanager.js";import globalize from"./../common/globalize.js";import layoutManager from"./../layoutmanager.js";import loading from"./../loading/loading.js";import dialogHelper from"./../dialoghelper/dialoghelper.js";import textEncoding from"./../common/textencoding.js";import"./../emby-elements/emby-button/emby-button.js";import"./../emby-elements/emby-select/emby-select.js";import"./../emby-elements/emby-scroller/emby-scroller.js";import"./../emby-elements/emby-dialogclosebutton/emby-dialogclosebutton.js";require(["formDialogStyle","css!modules/imageuploader/style.css"]);let currentItem,currentFile,hasChanges=!1;function showAlert(options){return Emby.importModule("./modules/common/dialogs/alert.js").then(function(alert){return alert(options)})}function onFileReaderError(evt){switch(loading.hide(),evt.target.error.code){case evt.target.error.NOT_FOUND_ERR:showAlert(globalize.translate("MessageFileReadError"));break;case evt.target.error.ABORT_ERR:break;default:showAlert(globalize.translate("MessageFileReadError"))}}function setFiles(page,files){var reader,theFile,files=(files=filterFilesForSupportedTypes(files))[0];files&&files.type.match("image.*")?(currentFile=files,(reader=new FileReader).onerror=onFileReaderError,reader.onloadstart=function(){page.querySelector(".fldUpload").classList.add("hide")},reader.onabort=function(){loading.hide(),console.log("File read cancelled")},reader.onload=(theFile=files,function(e){e=['<img style="max-width:100%;max-height:100%;" src="',e.target.result,'" title="',textEncoding.htmlEncode(theFile.name),'"/>'].join("");page.querySelector(".imageOutput").innerHTML=e,page.querySelector(".fldUpload").classList.remove("hide")}),reader.readAsDataURL(files)):(page.querySelector(".imageOutput").innerHTML="",page.querySelector(".fldUpload").classList.add("hide"),currentFile=null)}function filterFilesForSupportedTypes(files){var list=[];for(let i=0,length=files.length;i<length;i++)validateImage(files[i],!1)&&list.push(files[i]);return list}let supportedImageTypes=["image/png","image/jpg","image/jpeg"];function validateImage(file){return!!supportedImageTypes.includes(file.type)}function onSubmit(e){e.preventDefault();e=currentFile;if(e&&validateImage(e,!1)){loading.show();let dlg=this.closest(".dialog");var imageType=dlg.querySelector(".selectImageType").value,imageIndex=dlg.imageIndex;connectionManager.getApiClient(currentItem).uploadItemImage(currentItem.Id,imageType,imageIndex,e).then(function(){dlg.querySelector(".uploadImage").value="",loading.hide(),hasChanges=!0,dialogHelper.close(dlg)})}return!1}function initEditor(page){page.querySelector("form").addEventListener("submit",onSubmit),page.querySelector(".uploadImage").addEventListener("change",function(){setFiles(page,this.files)}),page.querySelector(".btnBrowse").addEventListener("click",function(){var uploadInput=page.querySelector(".uploadImage");uploadInput.focus(),uploadInput.click()})}function removeImageType(dlg,type){dlg=dlg.querySelector('option[value="'+type+'"]');dlg&&dlg.parentNode.removeChild(dlg)}function showEditor(options,resolve,reject){options=options||{},require(["text!modules/imageuploader/imageuploader.template.html"],function(template){currentItem=options.item;var dialogOptions={removeOnClose:!0},dialogOptions=(layoutManager.tv?dialogOptions.size="fullscreen":dialogOptions.size="fullscreen-border",dialogHelper.createDialog(dialogOptions));dialogOptions.classList.add("formDialog"),dialogOptions.imageIndex=options.imageIndex,dialogOptions.innerHTML=globalize.translateDocument(template,"sharedcomponents"),dialogOptions.querySelector(".uploadImage").setAttribute("accept",supportedImageTypes.join(",")),"TvChannel"!==currentItem.Type&&(removeImageType(dialogOptions,"LogoLight"),removeImageType(dialogOptions,"LogoLightColor")),dialogOptions.addEventListener("close",function(){loading.hide(),resolve(hasChanges)}),options.imageType||dialogOptions.querySelector(".fldSelectImageType").classList.remove("hide"),dialogHelper.open(dialogOptions),initEditor(dialogOptions),dialogOptions.querySelector(".selectImageType").value=options.imageType||"Primary"})}export default{show:function(options){return new Promise(function(resolve,reject){hasChanges=!1,showEditor(options,resolve,reject)})}};