@social-mail/social-mail-client 1.2.295 → 1.2.296

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1169,7 +1169,7 @@ html, body {
1169
1169
  width: 100%;
1170
1170
  }
1171
1171
 
1172
- `.installGlobal("[data-attachment-file]");LocalFileService=class LocalFileService extends TaskManager{constructor(){super();this.rateLimit=4;document.body.addEventListener("uploadRequested",(ce=>{const{target,detail:{files,extra,uploadEvent}}=ce;ce.preventDefault();this.app.runAsync((()=>__awaiter(this,void 0,void 0,(function*(){const detail=yield FileUploadWindow.showModal({parameters:{files,extra}});target.dispatchEvent(new CustomEvent(StringHelper.fromHyphenToCamel(uploadEvent),{detail,bubbles:true}))}))))}))}uploadWithProgress(files,extra){return __awaiter(this,void 0,void 0,(function*(){const detail=yield FileUploadWindow.showModal({parameters:{files,extra}});return detail.files}))}sha256(blob){return __awaiter(this,void 0,void 0,(function*(){const msgBuffer=yield blob.arrayBuffer();const hashBuffer=yield crypto.subtle.digest("SHA-256",msgBuffer);const hashArray=Array.from(new Uint8Array(hashBuffer));const hashHex=hashArray.map((b=>b.toString(16).padStart(2,"0"))).join("");return hashHex}))}uploadFileParts(file,extra,cancelToken,progress){return __awaiter(this,void 0,void 0,(function*(){let size=file.size;const parts=[];const tasks=[];const maxSize=4*1024*1024;let start=0;const fud=new FileUploader;while(size>0){const blobSize=Math.min(maxSize,file.size-start);const part=new File([file.slice(start,start+blobSize)],"file.dat");size-=blobSize;start+=blobSize;const uploadRequest=fud.upload({url:apiPath("/api/tmp/upload"),file:part,cancelToken,progress:()=>{const done=parts.reduce(((pv,cv)=>pv+cv.done),0)||0;progress===null||progress===void 0?void 0:progress(done/parts.length)}});parts.push(uploadRequest);tasks.push(uploadRequest.promise)}const tempUrls=yield Promise.all(tasks);const tempKeys=tempUrls.map((x=>x.key));const name=file.name;const{parentID,appFileID,folder}=extra;const appFile=yield FetchBuilder.post(apiPath("/api/upload")).form("name",name).form("tempKeys",JSON.stringify(tempKeys)).form("contentType",file.type).query("parentID",parentID).query("appFileID",appFileID).query("folder",folder).responseAsJson();return{url:appFile.url,downloadUrl:appFile.url,file,contentType:appFile.contentType,fileContentID:appFile.fileContentID,appFileID:appFile.appFileID}}))}uploadFile(file,extra,ct,progress){return __awaiter(this,void 0,void 0,(function*(){let folder=void 0;if(file.webkitRelativePath){const folders=file.webkitRelativePath.split("/");folders.pop();if(folders.length){folder=folders.join("/")}}if(typeof extra==="string"){extra=JSON.parse(extra)}const sha256=yield this.sha256(file);if(extra===null||extra===void 0?void 0:extra.parentID){const existing=yield this.entityService.query(AppFile,"children",extra.parentID,folder?folder+"/"+file.name:file.name,sha256).firstOrDefault();if(existing){const{appFileID,url}=existing;return{appFileID,file,url}}}if(file.size>4*1024*1024){if(folder){extra!==null&&extra!==void 0?extra:extra={};extra.folder=folder}return yield this.uploadFileParts(file,extra,ct,progress)}return new Promise(((resolve,reject)=>{const body=new FormData;body.append(file.name,file,file.name);body.append("sha256",sha256);const xhr=new XMLHttpRequest;const onError=()=>{reject(new Error(xhr.responseText||"Error"))};ct===null||ct===void 0?void 0:ct.registerForCancel((()=>xhr.abort()));xhr.upload.addEventListener("progress",(event=>{if(event.lengthComputable){progress===null||progress===void 0?void 0:progress(event.loaded/event.total)}}));xhr.upload.addEventListener("timeout",onError);xhr.upload.addEventListener("error",onError);xhr.upload.addEventListener("abort",onError);xhr.addEventListener("timeout",onError);xhr.addEventListener("abort",onError);xhr.addEventListener("error",onError);xhr.upload.addEventListener("progress",(event=>{if(event.lengthComputable){progress===null||progress===void 0?void 0:progress(event.loaded/event.total)}}));xhr.addEventListener("load",(()=>{if(xhr.status<=300){const r=Object.assign(Object.assign({},JSON.parse(xhr.responseText)),{file});resolve(r)}}));let postUrl=apiPath("/api/upload");const s=new URLSearchParams;if(extra){for(const key in extra){if(Object.prototype.hasOwnProperty.call(extra,key)){const element=extra[key];if(element){s.append(key,element)}}}}if(folder){s.append("folder",folder)}postUrl+="?"+s.toString();xhr.open("POST",postUrl,true);xhr.send(body)}))}))}upload(files,extra,ct){const tasks=[];const upload={total:0,tasks,progress:0,error:""};for(const file of files){upload.total+=file.size;const uploadFile={name:file.name,error:"",progress:0};uploadFile.promise=this.run((()=>__awaiter(this,void 0,void 0,(function*(){var _a,_b;let lastError;for(let i=0;i<3;i++){try{uploadFile.progress=.01;const r=yield this.uploadFile(file,extra,ct,(n=>uploadFile.progress=n));upload.progress+=r.file.size;setTimeout((()=>tasks.remove(uploadFile)),500);upload.error="";lastError=null;return r}catch(error){lastError=`${(_a=file.webkitRelativePath)!==null&&_a!==void 0?_a:""}/${file.name} failed to upload.\n${(_b=error.stack)!==null&&_b!==void 0?_b:error}`;uploadFile.error=lastError}}if(lastError){upload.error+="\n"+lastError}}))));tasks.push(uploadFile)}return upload}};__decorate([Inject,__metadata("design:type",App)],LocalFileService.prototype,"app",void 0);__decorate([Inject,__metadata("design:type",EntityService)],LocalFileService.prototype,"entityService",void 0);LocalFileService=__decorate([DISingleton(),__metadata("design:paramtypes",[])],LocalFileService);_export("default",LocalFileService);FileUploadWindow=class FileUploadWindow extends PopupWindow{constructor(){super(...arguments);this.parameters={}}init(){return __awaiter(this,void 0,void 0,(function*(){this.title="Uploading...";this.closeWarning="Are you sure you want to cancel the upload?";this.bindEvent(window,"backButton",(e=>__awaiter(this,void 0,void 0,(function*(){var _a;e.preventDefault();(_a=e.stopImmediatePropagation)===null||_a===void 0?void 0:_a.call(e);e.stopPropagation();yield this.requestCancel()}))),null,{capture:true});const task=this.localFileService.upload(this.parameters.files,this.parameters.extra,this.cancelToken);this.files=task.tasks;this.footerRenderer=()=>XNode.create("div",{"data-layout":"command-row"},XNode.create("progress",{min:0,max:task.total,value:Bind.source(task,(x=>x.source.progress))}));this.render(XNode.create("div",{"data-overflow":"auto","style-max-height":"500px","style-max-width":"400px"},XNode.create(AtomRepeater,{"data-layout":"vertical-flex-stretch-items",items:this.files,itemRenderer:file=>XNode.create("div",{"data-attachment-file":"file"},XNode.create("div",{"data-element":"file-name",text:file.name}),XNode.create("progress",{"style-display":Bind.source(file,(x=>x.source.progress>0)),min:0,max:1,value:Bind.source(file,(x=>x.source.progress))}),XNode.create("div",{"data-element":"error","data-color":"red",text:Bind.source(file,(x=>x.source.error))}))})));try{const ct=new CancelToken;this.registerDisposable({dispose:()=>{ct.cancel()}});const tasks=this.files.map((x=>x.promise));const files=yield Promise.all(tasks);const extra=this.parameters.extra;this.close({files,extra})}catch(error){if(CancelToken.isCancelled(error)){this.cancel(error);return}yield PopupService.alert({message:error});this.cancel(error)}}))}};__decorate([InjectProperty,__metadata("design:type",LocalFileService)],FileUploadWindow.prototype,"localFileService",void 0)}}}));AmdLoader.instance.setup("@social-mail/social-mail-client/dist/services/files/LocalFileService");System.register(["tslib","@web-atoms/core/dist/di/DISingleton","@web-atoms/core/dist/di/Inject","../../../../services/EntityService","../../../../model/model","@web-atoms/date-time/dist/DateTime","../../../../common/Sql","../../../../common/SocialMailApp","../../../../services/files/LocalFileService"],(function(_export,_context){"use strict";var __awaiter,__decorate,__metadata,DISingleton,Inject,EntityService,AppFile,User,WebSiteFolder,DateTime,Sql,SocialMailApp,LocalFileService,hideActivityIndicator,CloudFileService;return{setters:[function(_tslib){__awaiter=_tslib.__awaiter;__decorate=_tslib.__decorate;__metadata=_tslib.__metadata},function(_webAtomsCoreDistDiDISingleton){DISingleton=_webAtomsCoreDistDiDISingleton.default},function(_webAtomsCoreDistDiInject){Inject=_webAtomsCoreDistDiInject.Inject},function(_servicesEntityService){EntityService=_servicesEntityService.default},function(_modelModel){AppFile=_modelModel.AppFile;User=_modelModel.User;WebSiteFolder=_modelModel.WebSiteFolder},function(_webAtomsDateTimeDistDateTime){DateTime=_webAtomsDateTimeDistDateTime.default},function(_commonSql){Sql=_commonSql.Sql},function(_commonSocialMailApp){SocialMailApp=_commonSocialMailApp.default},function(_servicesFilesLocalFileService){LocalFileService=_servicesFilesLocalFileService.default}],execute:function(){hideActivityIndicator=true;CloudFileService=class CloudFileService{topSites(){return __awaiter(this,void 0,void 0,(function*(){const userID=SocialMailApp.user.userID;const q=this.entityService.query(WebSiteFolder);const top=yield q.orderByDescending({userID},(p=>x=>x.folder.userPins.some((s=>p.userID===s.userID)))).thenByDescending((x=>x.currentVersionID)).include((x=>x.folder.creator)).toPagedList({size:3,count:false});return top.items}))}top(site=false){return __awaiter(this,void 0,void 0,(function*(){const userID=SocialMailApp.user.userID;let q=this.entityService.query(AppFile).where((x=>x.isFolder===true&&x.parentID===null&&x.path!==null));q=site?q.where((x=>x.contentType==="application/site")):q.where((x=>x.contentType==="folder"));const top=yield q.orderByDescending({userID},(p=>x=>x.userPins.some((s=>p.userID===s.userID)))).thenByDescending((x=>x.dateUpdated)).include((x=>x.creator)).toPagedList({size:3,count:false});return top.items}))}drives({start=0,size=50,search="",version=1,contentType=void 0,cancelToken}){return __awaiter(this,void 0,void 0,(function*(){const userID=SocialMailApp.user.userID;let q=this.entityService.query(AppFile).where((x=>x.isFolder===true&&x.parentID===null&&x.path!==null&&x.contentType!=="snapshot"));if(search){q=q.where({search},(p=>x=>Sql.text.includes(x.creator.userName,p.search)))}if(contentType){q=q.where({contentType},(p=>x=>x.contentType===p.contentType))}return q.include((x=>x.creator)).orderByDescending({userID},(p=>x=>x.userPins.some((s=>p.userID===s.userID)))).thenByDescending((x=>x.fileSize)).toPagedList({start,size,cancelToken})}))}allTemplates(){return __awaiter(this,void 0,void 0,(function*(){const children=yield this.entityService.query(AppFile).where((x=>x.templates.some((c=>true)))).toArray();const roots=children.map((x=>x.path+"%"));const all=yield this.entityService.query(AppFile).where({roots},(p=>x=>Sql.text.likeAny(x.path,p.roots))).toArray();return all.filter((x=>!x.parentID))}))}getFile(id,cancelToken=null){return __awaiter(this,void 0,void 0,(function*(){const folder=yield this.entityService.query(AppFile).where({id},(p=>x=>x.appFileID===p.id)).firstOrDefault({cancelToken});return folder}))}getFolder(id,cancelToken=null){return __awaiter(this,void 0,void 0,(function*(){const folder=yield this.entityService.query(AppFile).where({id},(p=>x=>x.appFileID===p.id)).include((x=>x.creator)).include((x=>x.children)).firstOrDefault({cancelToken});if(folder.children){folder.children.remove((x=>!x.isFolder))}else{folder.children=[]}return folder}))}root({id,templates=false,cancelToken=null}){var _a;return __awaiter(this,void 0,void 0,(function*(){let root;if(templates){const children=yield this.entityService.query(AppFile).where((x=>x.templates.some((c=>true)))).toArray({cancelToken});root=AppFile.create({name:"Templates",isFolder:true,appFileID:0,creator:User.create({}),children});return root}root=yield this.entityService.query(AppFile).where({id},(p=>x=>x.appFileID===p.id&&x.isDeleted===false)).include((x=>x.creator)).include((x=>x.children)).firstOrDefault({cancelToken});(_a=root.children)===null||_a===void 0?void 0:_a.sort(((a,b)=>a.isFolder?Number.MIN_SAFE_INTEGER:b.isFolder?Number.MAX_SAFE_INTEGER:a.name.localeCompare(b.name)));return root}))}rootFolders(){return __awaiter(this,void 0,void 0,(function*(){return this.entityService.query(AppFile).where((x=>x.isFolder===true&&x.parentID===null&&x.path!==null)).include((x=>x.creator)).toArray()}))}createFolder({name,parentID}){return __awaiter(this,void 0,void 0,(function*(){const dateCreated=DateTime.now;const r=yield this.entityService.save(AppFile.create({name,parentID,isFolder:true,contentType:"folder",dateCreated,dateUpdated:dateCreated}));return this.entityService.query(AppFile).where({id:r.appFileID},(p=>x=>x.appFileID===p.id)).include((x=>x.creator)).firstOrDefault()}))}expand(folder,showDeleted=false,accept=void 0){return __awaiter(this,void 0,void 0,(function*(){const parentID=folder.appFileID;const q=accept?this.entityService.query(AppFile).where({parentID,showDeleted,accept},(p=>x=>x.parentID===p.parentID&&(x.isFolder===true||x.contentType===p.accept)&&x.isDeleted===p.showDeleted)):this.entityService.query(AppFile).where({parentID,showDeleted},(p=>x=>x.parentID===p.parentID&&x.isFolder===true&&x.isDeleted===p.showDeleted));const files=yield q.toArray({hideActivityIndicator});const{children}=folder;for(const iterator of files){if(children.some((c=>c.appFileID===iterator.appFileID))){continue}children.add(iterator)}}))}files({search="",accept="",folder,cancelToken,showDeleted=false,showSnapShot=false,showFolder=true,includeFilesInFolder=true}){var _a,_b;return __awaiter(this,void 0,void 0,(function*(){const parentID=folder===null||folder===void 0?void 0:folder.appFileID;if(!parentID){return folder===null||folder===void 0?void 0:folder.children}let q=this.entityService.query(AppFile).where({parentID,showDeleted},(p=>x=>x.parentID===p.parentID&&x.isDeleted===p.showDeleted));if(search){if(!/\%/.test(search)){search=search+"%"}q=q.where({search},(p=>x=>Sql.text.like(x.name,p.search)))}if(accept){const contentTypes=accept.split(/\,/g).map((x=>x.replace("*","%").trim())).filter((x=>x));q=q.where({contentTypes},(p=>x=>x.isFolder||Sql.text.iLikeAny(x.contentType,p.contentTypes)))}if(!showFolder){q=q.where((x=>x.isFolder===false)).orderBy((x=>x.name))}else{q=q.orderByDescending((x=>x.isFolder)).thenBy((x=>x.name))}if(!showSnapShot){q=q.where((x=>x.contentType!=="snapshot"))}const files=yield q.toArray({cancelToken});const results=[];for(const iterator of files){if(!iterator.isFolder){if(accept&&iterator.parentID===folder.appFileID){const children=(_a=folder.children)!==null&&_a!==void 0?_a:folder.children=[];if(!children.some((f=>f.appFileID===iterator.appFileID))){if(includeFilesInFolder||iterator.isFolder){children.add(iterator)}}}results.push(iterator);continue}const fx=folder.children.find((f=>f.appFileID===iterator.appFileID));if(fx){results.push(fx);fx.fileSize=iterator.fileSize;continue}(_b=iterator.children)!==null&&_b!==void 0?_b:iterator.children=[];folder.children.add(iterator);results.push(iterator)}results.sort(((a,b)=>a.isFolder?Number.MIN_SAFE_INTEGER:b.isFolder?Number.MAX_SAFE_INTEGER:a.name.localeCompare(b.name)));results.refresh();return results}))}children(parentID,name,sha256){return this.entityService.query(AppFile,"children",parentID,name,sha256)}saveFile(fm){return __awaiter(this,void 0,void 0,(function*(){const{appFileID,content,parentID,folder}=fm;return this.localFileService.uploadFile(content,{appFileID,parentID,folder})}))}save(file){return __awaiter(this,void 0,void 0,(function*(){const c=this.entityService.cloner(file);yield this.entityService.save(c.copy);return file}))}delete(files){return __awaiter(this,void 0,void 0,(function*(){files=files.map((({$type,appFileID})=>({$type,appFileID,isDeleted:true})));yield this.entityService.save(files)}))}};__decorate([Inject,__metadata("design:type",EntityService)],CloudFileService.prototype,"entityService",void 0);__decorate([Inject,__metadata("design:type",LocalFileService)],CloudFileService.prototype,"localFileService",void 0);CloudFileService=__decorate([DISingleton()],CloudFileService);_export("default",CloudFileService)}}}));AmdLoader.instance.setup("@social-mail/social-mail-client/dist/web/page/files/service/CloudFileService");System.register(["tslib","@web-atoms/core/dist/core/XNode","@web-atoms/core/dist/web/controls/AtomControl","@web-atoms/core/dist/core/BindableProperty","@web-atoms/core/dist/style/styled","@web-atoms/core/dist/web/core/AtomUI"],(function(_export,_context){"use strict";var __awaiter,__decorate,__metadata,XNode,AtomControl,BindableProperty,styled,AncestorEnumerator,TreeView,expandSymbol;function findTreeElement(element){if(element.matches("[data-layout=tree-view-item]")){return element}return AncestorEnumerator.findSelector(element,"[data-layout=tree-view-item]")}_export({findTreeElement,default:void 0});return{setters:[function(_tslib){__awaiter=_tslib.__awaiter;__decorate=_tslib.__decorate;__metadata=_tslib.__metadata},function(_webAtomsCoreDistCoreXNode){XNode=_webAtomsCoreDistCoreXNode.default},function(_webAtomsCoreDistWebControlsAtomControl){AtomControl=_webAtomsCoreDistWebControlsAtomControl.AtomControl},function(_webAtomsCoreDistCoreBindableProperty){BindableProperty=_webAtomsCoreDistCoreBindableProperty.BindableProperty},function(_webAtomsCoreDistStyleStyled){styled=_webAtomsCoreDistStyleStyled.default},function(_webAtomsCoreDistWebCoreAtomUI){AncestorEnumerator=_webAtomsCoreDistWebCoreAtomUI.AncestorEnumerator}],execute:function(){expandSymbol=Symbol("expand");styled.css`
1172
+ `.installGlobal("[data-attachment-file]");LocalFileService=class LocalFileService extends TaskManager{constructor(){super();this.rateLimit=4;document.body.addEventListener("uploadRequested",(ce=>{const{target,detail:{files,extra,uploadEvent}}=ce;ce.preventDefault();this.app.runAsync((()=>__awaiter(this,void 0,void 0,(function*(){const detail=yield FileUploadWindow.showModal({parameters:{files,extra}});target.dispatchEvent(new CustomEvent(StringHelper.fromHyphenToCamel(uploadEvent),{detail,bubbles:true}))}))))}))}uploadWithProgress(files,extra){return __awaiter(this,void 0,void 0,(function*(){const detail=yield FileUploadWindow.showModal({parameters:{files,extra}});return detail.files}))}sha256(blob){return __awaiter(this,void 0,void 0,(function*(){const msgBuffer=yield blob.arrayBuffer();const hashBuffer=yield crypto.subtle.digest("SHA-256",msgBuffer);const hashArray=Array.from(new Uint8Array(hashBuffer));const hashHex=hashArray.map((b=>b.toString(16).padStart(2,"0"))).join("");return hashHex}))}uploadFileParts(file,extra,cancelToken,progress){return __awaiter(this,void 0,void 0,(function*(){let size=file.size;const parts=[];const tasks=[];const maxSize=4*1024*1024;let start=0;const fud=new FileUploader;while(size>0){const blobSize=Math.min(maxSize,file.size-start);const part=new File([file.slice(start,start+blobSize)],"file.dat");size-=blobSize;start+=blobSize;const uploadRequest=fud.upload({url:apiPath("/api/tmp/upload"),file:part,cancelToken,progress:()=>{const done=parts.reduce(((pv,cv)=>pv+cv.done),0)||0;progress===null||progress===void 0?void 0:progress(done/parts.length)}});parts.push(uploadRequest);tasks.push(uploadRequest.promise)}const tempUrls=yield Promise.all(tasks);const tempKeys=tempUrls.map((x=>x.key));const name=file.name;const{parentID,appFileID,folder}=extra;const appFile=yield FetchBuilder.post(apiPath("/api/upload")).form("name",name).form("tempKeys",JSON.stringify(tempKeys)).form("contentType",file.type).query("parentID",parentID).query("appFileID",appFileID).query("folder",folder).responseAsJson();return{url:appFile.url,downloadUrl:appFile.url,file,contentType:appFile.contentType,fileContentID:appFile.fileContentID,appFileID:appFile.appFileID}}))}uploadFile(file,extra,ct,progress){return __awaiter(this,void 0,void 0,(function*(){let folder=void 0;if(file.webkitRelativePath){const folders=file.webkitRelativePath.split("/");folders.pop();if(folders.length){folder=folders.join("/")}}if(typeof extra==="string"){extra=JSON.parse(extra)}const sha256=yield this.sha256(file);if(extra===null||extra===void 0?void 0:extra.parentID){const existing=yield this.entityService.query(AppFile,"children",extra.parentID,folder?folder+"/"+file.name:file.name,sha256).firstOrDefault();if(existing){const{appFileID,url}=existing;return{appFileID,file,url}}}if(file.size>4*1024*1024){if(folder){extra!==null&&extra!==void 0?extra:extra={};extra.folder=folder}return yield this.uploadFileParts(file,extra,ct,progress)}return new Promise(((resolve,reject)=>{const body=new FormData;body.append(file.name,file,file.name);body.append("sha256",sha256);const xhr=new XMLHttpRequest;const onError=()=>{reject(new Error(xhr.responseText||"Error"))};ct===null||ct===void 0?void 0:ct.registerForCancel((()=>xhr.abort()));xhr.upload.addEventListener("progress",(event=>{if(event.lengthComputable){progress===null||progress===void 0?void 0:progress(event.loaded/event.total)}}));xhr.upload.addEventListener("timeout",onError);xhr.upload.addEventListener("error",onError);xhr.upload.addEventListener("abort",onError);xhr.addEventListener("timeout",onError);xhr.addEventListener("abort",onError);xhr.addEventListener("error",onError);xhr.upload.addEventListener("progress",(event=>{if(event.lengthComputable){progress===null||progress===void 0?void 0:progress(event.loaded/event.total)}}));xhr.addEventListener("load",(()=>{if(xhr.status<=300){const r=Object.assign(Object.assign({},JSON.parse(xhr.responseText)),{file});resolve(r)}}));let postUrl=apiPath("/api/upload");const s=new URLSearchParams;if(extra){for(const key in extra){if(Object.prototype.hasOwnProperty.call(extra,key)){const element=extra[key];if(element){s.append(key,element)}}}}if(folder){s.append("folder",folder)}postUrl+="?"+s.toString();xhr.open("POST",postUrl,true);xhr.send(body)}))}))}upload(files,extra,ct){const tasks=[];const upload={total:0,tasks,progress:0,error:""};for(const file of files){upload.total+=file.size;const uploadFile={name:file.name,error:"",progress:0};uploadFile.promise=this.run((()=>__awaiter(this,void 0,void 0,(function*(){var _a,_b;let lastError;for(let i=0;i<3;i++){try{uploadFile.progress=.01;const r=yield this.uploadFile(file,extra,ct,(n=>uploadFile.progress=n));upload.progress+=r.file.size;setTimeout((()=>tasks.remove(uploadFile)),500);upload.error="";lastError=null;return r}catch(error){lastError=`${(_a=file.webkitRelativePath)!==null&&_a!==void 0?_a:""}/${file.name} failed to upload.\n${(_b=error.stack)!==null&&_b!==void 0?_b:error}`;uploadFile.error=lastError}}if(lastError){upload.error+="\n"+lastError}}))));tasks.push(uploadFile)}return upload}};__decorate([Inject,__metadata("design:type",App)],LocalFileService.prototype,"app",void 0);__decorate([Inject,__metadata("design:type",EntityService)],LocalFileService.prototype,"entityService",void 0);LocalFileService=__decorate([DISingleton(),__metadata("design:paramtypes",[])],LocalFileService);_export("default",LocalFileService);FileUploadWindow=class FileUploadWindow extends PopupWindow{constructor(){super(...arguments);this.parameters={}}init(){return __awaiter(this,void 0,void 0,(function*(){this.title="Uploading...";this.closeWarning="Are you sure you want to cancel the upload?";this.bindEvent(window,"backButton",(e=>__awaiter(this,void 0,void 0,(function*(){var _a;e.preventDefault();(_a=e.stopImmediatePropagation)===null||_a===void 0?void 0:_a.call(e);e.stopPropagation();yield this.requestCancel()}))),null,{capture:true});const task=this.localFileService.upload(this.parameters.files,this.parameters.extra,this.cancelToken);this.files=task.tasks;this.footerRenderer=()=>XNode.create("div",{"data-layout":"command-row"},XNode.create("progress",{min:0,max:task.total,value:Bind.source(task,(x=>x.source.progress))}));this.render(XNode.create("div",{"data-overflow":"auto","style-max-height":"500px","style-max-width":"400px"},XNode.create(AtomRepeater,{"data-layout":"vertical-flex-stretch-items",items:this.files,itemRenderer:file=>XNode.create("div",{"data-attachment-file":"file"},XNode.create("div",{"data-element":"file-name",text:file.name}),XNode.create("progress",{"style-display":Bind.source(file,(x=>x.source.progress>0)),min:0,max:1,value:Bind.source(file,(x=>x.source.progress))}),XNode.create("div",{"data-element":"error","data-color":"red",text:Bind.source(file,(x=>x.source.error))}))})));try{const ct=new CancelToken;this.registerDisposable({dispose:()=>{ct.cancel()}});const tasks=this.files.map((x=>x.promise));const files=yield Promise.all(tasks);const extra=this.parameters.extra;this.close({files,extra})}catch(error){if(CancelToken.isCancelled(error)){this.cancel(error);return}yield PopupService.alert({message:error});this.cancel(error)}}))}};__decorate([InjectProperty,__metadata("design:type",LocalFileService)],FileUploadWindow.prototype,"localFileService",void 0)}}}));AmdLoader.instance.setup("@social-mail/social-mail-client/dist/services/files/LocalFileService");System.register(["tslib","@web-atoms/core/dist/di/DISingleton","@web-atoms/core/dist/di/Inject","../../../../services/EntityService","../../../../model/model","@web-atoms/date-time/dist/DateTime","../../../../common/Sql","../../../../common/SocialMailApp","../../../../services/files/LocalFileService"],(function(_export,_context){"use strict";var __awaiter,__decorate,__metadata,DISingleton,Inject,EntityService,AppFile,User,WebSiteFolder,DateTime,Sql,SocialMailApp,LocalFileService,hideActivityIndicator,CloudFileService;return{setters:[function(_tslib){__awaiter=_tslib.__awaiter;__decorate=_tslib.__decorate;__metadata=_tslib.__metadata},function(_webAtomsCoreDistDiDISingleton){DISingleton=_webAtomsCoreDistDiDISingleton.default},function(_webAtomsCoreDistDiInject){Inject=_webAtomsCoreDistDiInject.Inject},function(_servicesEntityService){EntityService=_servicesEntityService.default},function(_modelModel){AppFile=_modelModel.AppFile;User=_modelModel.User;WebSiteFolder=_modelModel.WebSiteFolder},function(_webAtomsDateTimeDistDateTime){DateTime=_webAtomsDateTimeDistDateTime.default},function(_commonSql){Sql=_commonSql.Sql},function(_commonSocialMailApp){SocialMailApp=_commonSocialMailApp.default},function(_servicesFilesLocalFileService){LocalFileService=_servicesFilesLocalFileService.default}],execute:function(){hideActivityIndicator=true;CloudFileService=class CloudFileService{topSites(){return __awaiter(this,void 0,void 0,(function*(){const userID=SocialMailApp.user.userID;const q=this.entityService.query(WebSiteFolder);const top=yield q.orderByDescending({userID},(p=>x=>x.folder.userPins.some((s=>p.userID===s.userID)))).thenByDescending((x=>x.currentVersionID)).include((x=>x.folder.creator)).toPagedList({size:3,count:false});return top.items}))}top(site=false){return __awaiter(this,void 0,void 0,(function*(){const userID=SocialMailApp.user.userID;let q=this.entityService.query(AppFile).where((x=>x.isFolder===true&&x.parentID===null&&x.path!==null));q=site?q.where((x=>x.contentType==="application/site")):q.where((x=>x.contentType==="folder"));const top=yield q.orderByDescending({userID},(p=>x=>x.userPins.some((s=>p.userID===s.userID)))).thenByDescending((x=>x.dateUpdated)).include((x=>x.creator)).toPagedList({size:3,count:false});return top.items}))}drives({start=0,size=50,search="",version=1,contentType=void 0,cancelToken}){return __awaiter(this,void 0,void 0,(function*(){const userID=SocialMailApp.user.userID;let q=this.entityService.query(AppFile).where((x=>x.isFolder===true&&x.parentID===null&&x.path!==null&&x.contentType!=="snapshot"));if(search){q=q.where({search},(p=>x=>Sql.text.includes(x.creator.userName,p.search)))}if(contentType){q=q.where({contentType},(p=>x=>x.contentType===p.contentType))}return q.include((x=>x.creator)).orderByDescending({userID},(p=>x=>x.userPins.some((s=>p.userID===s.userID)))).thenByDescending((x=>x.fileSize)).toPagedList({start,size,cancelToken})}))}allTemplates(){return __awaiter(this,void 0,void 0,(function*(){const children=yield this.entityService.query(AppFile).where((x=>x.templates.some((c=>true)))).toArray();const roots=children.map((x=>x.path+"%"));const all=yield this.entityService.query(AppFile).where({roots},(p=>x=>Sql.text.likeAny(x.path,p.roots))).toArray();return all.filter((x=>!x.parentID))}))}getFile(id,cancelToken=null){return __awaiter(this,void 0,void 0,(function*(){const folder=yield this.entityService.query(AppFile).where({id},(p=>x=>x.appFileID===p.id)).firstOrDefault({cancelToken});return folder}))}getFolder(id,cancelToken=null){return __awaiter(this,void 0,void 0,(function*(){const folder=yield this.entityService.query(AppFile).where({id},(p=>x=>x.appFileID===p.id)).include((x=>x.creator)).include((x=>x.children)).firstOrDefault({cancelToken});if(folder.children){folder.children.remove((x=>!x.isFolder))}else{folder.children=[]}return folder}))}root({id,templates=false,cancelToken=null}){var _a;return __awaiter(this,void 0,void 0,(function*(){let root;if(templates){const children=yield this.entityService.query(AppFile).where((x=>x.templates.some((c=>true)))).toArray({cancelToken});root=AppFile.create({name:"Templates",isFolder:true,appFileID:0,creator:User.create({}),children});return root}root=yield this.entityService.query(AppFile).where({id},(p=>x=>x.appFileID===p.id&&x.isDeleted===false)).include((x=>x.creator)).include((x=>x.children)).firstOrDefault({cancelToken});(_a=root.children)===null||_a===void 0?void 0:_a.sort(((a,b)=>a.isFolder?Number.MIN_SAFE_INTEGER:b.isFolder?Number.MAX_SAFE_INTEGER:a.name.localeCompare(b.name)));return root}))}rootFolders(){return __awaiter(this,void 0,void 0,(function*(){return this.entityService.query(AppFile).where((x=>x.isFolder===true&&x.parentID===null&&x.path!==null)).include((x=>x.creator)).toArray()}))}createFolder({name,parentID}){return __awaiter(this,void 0,void 0,(function*(){const dateCreated=DateTime.now;const r=yield this.entityService.save(AppFile.create({name,parentID,isFolder:true,contentType:"folder",dateCreated,dateUpdated:dateCreated}));return this.entityService.query(AppFile).where({id:r.appFileID},(p=>x=>x.appFileID===p.id)).include((x=>x.creator)).firstOrDefault()}))}expand(folder,showDeleted=false,accept=void 0){return __awaiter(this,void 0,void 0,(function*(){const parentID=folder.appFileID;const q=accept?this.entityService.query(AppFile).where({parentID,showDeleted,accept},(p=>x=>x.parentID===p.parentID&&(x.isFolder===true||x.contentType===p.accept)&&x.isDeleted===p.showDeleted)):this.entityService.query(AppFile).where({parentID,showDeleted},(p=>x=>x.parentID===p.parentID&&x.isFolder===true&&x.isDeleted===p.showDeleted));const files=yield q.toArray({hideActivityIndicator});const{children}=folder;for(const iterator of files){if(children.some((c=>c.appFileID===iterator.appFileID))){continue}children.add(iterator)}}))}files({search="",accept="",folder,cancelToken,showDeleted=false,showSnapShot=false,showFolder=true,includeFilesInFolder=true}){var _a,_b;return __awaiter(this,void 0,void 0,(function*(){const parentID=folder===null||folder===void 0?void 0:folder.appFileID;if(!parentID){return folder===null||folder===void 0?void 0:folder.children}let q=this.entityService.query(AppFile).where({parentID,showDeleted},(p=>x=>x.parentID===p.parentID&&x.isDeleted===p.showDeleted));if(search){if(!/\%/.test(search)){search=search+"%"}q=q.where({search},(p=>x=>Sql.text.like(x.name,p.search)))}if(accept){const contentTypes=accept.split(/\,/g).map((x=>x.replace("*","%").trim())).filter((x=>x));q=q.where({contentTypes},(p=>x=>x.isFolder||Sql.text.iLikeAny(x.contentType,p.contentTypes)))}if(!showFolder){q=q.where((x=>x.isFolder===false)).orderBy((x=>x.name))}else{q=q.orderByDescending((x=>x.isFolder)).thenBy((x=>x.name))}if(!showSnapShot){q=q.where((x=>x.contentType!=="snapshot"))}const files=yield q.toArray({cancelToken});const results=[];for(const iterator of files){if(!iterator.isFolder){if(accept&&iterator.parentID===folder.appFileID){const children=(_a=folder.children)!==null&&_a!==void 0?_a:folder.children=[];if(!children.some((f=>f.appFileID===iterator.appFileID))){if(includeFilesInFolder||iterator.isFolder){children.add(iterator)}}}results.push(iterator);continue}const fx=folder.children.find((f=>f.appFileID===iterator.appFileID));if(fx){results.push(fx);fx.fileSize=iterator.fileSize;continue}(_b=iterator.children)!==null&&_b!==void 0?_b:iterator.children=[];folder.children.add(iterator);results.push(iterator)}results.sort(((a,b)=>a.isFolder?Number.MIN_SAFE_INTEGER:b.isFolder?Number.MAX_SAFE_INTEGER:a.name.localeCompare(b.name)));results.refresh();return results}))}children(parentID,name,sha256){return this.entityService.query(AppFile,"children",parentID,name,sha256)}saveFile(fm){return __awaiter(this,void 0,void 0,(function*(){const{appFileID,content,parentID,folder}=fm;return this.localFileService.uploadFile(content,{appFileID,parentID,folder})}))}save(file){return __awaiter(this,void 0,void 0,(function*(){yield this.entityService.save(file,(c=>c));return file}))}delete(files){return __awaiter(this,void 0,void 0,(function*(){files=files.map((({$type,appFileID})=>({$type,appFileID,isDeleted:true})));yield this.entityService.save(files)}))}};__decorate([Inject,__metadata("design:type",EntityService)],CloudFileService.prototype,"entityService",void 0);__decorate([Inject,__metadata("design:type",LocalFileService)],CloudFileService.prototype,"localFileService",void 0);CloudFileService=__decorate([DISingleton()],CloudFileService);_export("default",CloudFileService)}}}));AmdLoader.instance.setup("@social-mail/social-mail-client/dist/web/page/files/service/CloudFileService");System.register(["tslib","@web-atoms/core/dist/core/XNode","@web-atoms/core/dist/web/controls/AtomControl","@web-atoms/core/dist/core/BindableProperty","@web-atoms/core/dist/style/styled","@web-atoms/core/dist/web/core/AtomUI"],(function(_export,_context){"use strict";var __awaiter,__decorate,__metadata,XNode,AtomControl,BindableProperty,styled,AncestorEnumerator,TreeView,expandSymbol;function findTreeElement(element){if(element.matches("[data-layout=tree-view-item]")){return element}return AncestorEnumerator.findSelector(element,"[data-layout=tree-view-item]")}_export({findTreeElement,default:void 0});return{setters:[function(_tslib){__awaiter=_tslib.__awaiter;__decorate=_tslib.__decorate;__metadata=_tslib.__metadata},function(_webAtomsCoreDistCoreXNode){XNode=_webAtomsCoreDistCoreXNode.default},function(_webAtomsCoreDistWebControlsAtomControl){AtomControl=_webAtomsCoreDistWebControlsAtomControl.AtomControl},function(_webAtomsCoreDistCoreBindableProperty){BindableProperty=_webAtomsCoreDistCoreBindableProperty.BindableProperty},function(_webAtomsCoreDistStyleStyled){styled=_webAtomsCoreDistStyleStyled.default},function(_webAtomsCoreDistWebCoreAtomUI){AncestorEnumerator=_webAtomsCoreDistWebCoreAtomUI.AncestorEnumerator}],execute:function(){expandSymbol=Symbol("expand");styled.css`
1173
1173
 
1174
1174
  display: flex;
1175
1175
  flex-direction: column;
@@ -3024,7 +3024,7 @@ html, body {
3024
3024
  }
3025
3025
  }
3026
3026
  }
3027
- `.installLocal();_export("default",ChooseWebSiteTemplatePage=class ChooseWebSiteTemplatePage extends PopupWindowPage{constructor(){super(...arguments);this.sites=[];this.search=""}init(){return __awaiter(this,void 0,void 0,(function*(){this.title="Create Page from Template";this.element.className=css;this.headerRenderer=()=>XNode.create("div",{"data-layout":"header-row"},XNode.create("input",{autofocus:true,type:"search",value:Bind.twoWaysImmediate((()=>this.search))}));this.renderer=XNode.create("div",null,XNode.create(AtomRepeater,Object.assign({items:this.sites},InfiniteRepeater.pagedItems((start=>(c,e,cancelToken)=>this.templateService.search({search:this.search,start,cancelToken}))),{itemRenderer:item=>XNode.create("div",{class:"site","data-border":"accent-frame"},XNode.create("label",{class:"title",text:item.folder.name}),XNode.create("img",{class:"thumbnail",src:"https://"+item.hosts[0].host+"/preview.jpg"}),XNode.create("a",{class:"button preview",href:"https://"+item.hosts[0].host,target:"_blank",text:"Preview"}),XNode.create("button",{"data-click-event":"use-template",class:"button use",title:"Use this template",text:"Use"}))})));this.footerRenderer=()=>XNode.create("div",{"data-layout":"command-row"},XNode.create(AddIconTextButton,{"event-click":()=>this.createTemplate(),text:"Create Empty Web Site"}))}))}useTemplate(item){return __awaiter(this,void 0,void 0,(function*(){yield this.templateService.copyTemplate(item.folderID,this.parameters.appFileID);return true}))}upload(host,fileName,folder=void 0,content=void 0,url=void 0){return __awaiter(this,void 0,void 0,(function*(){const templatePath=folder?`${folder}/${fileName}`:fileName;url!==null&&url!==void 0?url:url=`${host}/${templatePath}`;content!==null&&content!==void 0?content:content=yield FetchBuilder.get(url).responseAsText();const contentType=yield this.mimeTypeService.getMimeType(fileName);return yield this.cloudFileService.saveFile({content:new File([content],fileName,{type:contentType}),parentID:this.parameters.appFileID,folder})}))}createTemplate(){return __awaiter(this,void 0,void 0,(function*(){const template="plain";yield this.uploadFromTemplate("index.html",template);yield this.uploadFromTemplate("styles/vars.css",template)}))}uploadFromTemplate(fileName,template){return __awaiter(this,void 0,void 0,(function*(){const path=UMD.resolvePath(`@social-mail/social-mail-client/content/templates/${template}/${fileName}`);const content=yield FetchBuilder.get(path).responseAsText();const url=`/api/upload?parentID=${this.parameters.appFileID}`;const body=new FormData;body.append(fileName,new Blob([content],{type:"text/html"}),fileName);const rs=yield fetch(url,{method:"POST",body})}))}});__decorate([InjectProperty,__metadata("design:type",CloudFileService)],ChooseWebSiteTemplatePage.prototype,"cloudFileService",void 0);__decorate([InjectProperty,__metadata("design:type",EntityService)],ChooseWebSiteTemplatePage.prototype,"entityService",void 0);__decorate([InjectProperty,__metadata("design:type",MimeTypeService)],ChooseWebSiteTemplatePage.prototype,"mimeTypeService",void 0);__decorate([InjectProperty,__metadata("design:type",TemplateService)],ChooseWebSiteTemplatePage.prototype,"templateService",void 0);__decorate([Action({onEvent:"use-template",close:true}),__metadata("design:type",Function),__metadata("design:paramtypes",[Object]),__metadata("design:returntype",Promise)],ChooseWebSiteTemplatePage.prototype,"useTemplate",null)}}}));AmdLoader.instance.setup("@social-mail/social-mail-client/dist/common/pages/websites/templates/ChooseWebSiteTemplatePage");System.register(["tslib","@web-atoms/core/dist/core/XNode","./TreeView","@web-atoms/core/dist/core/BindableProperty","@web-atoms/core/dist/core/InjectProperty","../../../web/page/files/service/CloudFileService","@web-atoms/core/dist/core/Bind","@web-atoms/core/dist/view-model/Action","@web-atoms/web-controls/dist/basic/InlinePopup","@web-atoms/web-controls/dist/basic/PopupButton","@web-atoms/web-controls/dist/basic/UploadEvent"],(function(_export,_context){"use strict";var __awaiter,__decorate,__metadata,XNode,TreeView,BindableProperty,InjectProperty,CloudFileService,Bind,Action,InlinePopupButton,MenuItem,UploadEvent,FolderTreeView,FileTreeView,getExtension;_export({FolderTreeView:void 0,FileTreeView:void 0});return{setters:[function(_tslib){__awaiter=_tslib.__awaiter;__decorate=_tslib.__decorate;__metadata=_tslib.__metadata},function(_webAtomsCoreDistCoreXNode){XNode=_webAtomsCoreDistCoreXNode.default},function(_TreeView){TreeView=_TreeView.default},function(_webAtomsCoreDistCoreBindableProperty){BindableProperty=_webAtomsCoreDistCoreBindableProperty.BindableProperty},function(_webAtomsCoreDistCoreInjectProperty){InjectProperty=_webAtomsCoreDistCoreInjectProperty.default},function(_webPageFilesServiceCloudFileService){CloudFileService=_webPageFilesServiceCloudFileService.default},function(_webAtomsCoreDistCoreBind){Bind=_webAtomsCoreDistCoreBind.default},function(_webAtomsCoreDistViewModelAction){Action=_webAtomsCoreDistViewModelAction.default},function(_webAtomsWebControlsDistBasicInlinePopup){InlinePopupButton=_webAtomsWebControlsDistBasicInlinePopup.InlinePopupButton},function(_webAtomsWebControlsDistBasicPopupButton){MenuItem=_webAtomsWebControlsDistBasicPopupButton.MenuItem},function(_webAtomsWebControlsDistBasicUploadEvent){UploadEvent=_webAtomsWebControlsDistBasicUploadEvent.default}],execute:function(){getExtension=name=>{const index=name.lastIndexOf(".");if(index===-1){return"dat"}return name.substring(index+1)};_export("FolderTreeView",FolderTreeView=class FolderTreeView extends TreeView{constructor(app,e){super(app,e);this.accept=null;this.childrenProperty=item=>{var _a;return(_a=item.children)!==null&&_a!==void 0?_a:item.children=[]};this.canSelect=item=>item.isFolder;this.isFolder=item=>item.isFolder;this.fileIconRenderer=item=>XNode.create("i",{"data-click-event":"none",class:`fiv-viv fiv-icon-${getExtension(item.name)}`});this.labelRenderer=x=>XNode.create("span",{text:x.name,title:x.name});this.actionRenderer=item=>this.root===item?XNode.create("i",{"data-cursor":"pointer",title:"New Folder","data-click-event":"new-folder",class:"fas fa-plus"}):XNode.create(InlinePopupButton,{"data-layout":"icon-button",icon:"fa-solid fa-ellipsis-vertical"},XNode.create("div",{"data-layout":"vertical-flex","style-width":"200px"},item.isFolder&&XNode.create(MenuItem,{"data-click-event":"new-folder",icon:"fas fa-plus",label:"New Folder"}),this.root!==item&&XNode.create(MenuItem,{"data-click-event":"rename-file",icon:"fa-duotone fa-i-cursor",label:"Rename"}),this.root!==item&&XNode.create(MenuItem,{"data-click-event":"delete-file",icon:"fas fa-trash-can",label:"Delete"})));this.render(XNode.create("div",{folder:Bind.oneWayAsync(((c,_,cancelToken)=>this.loadFolder(this.folderId,this.accept,cancelToken)))}))}onItemExpanded(item){return __awaiter(this,void 0,void 0,(function*(){yield this.cloudFileService.expand(item,void 0,this.accept)}))}onDeleteItem(file){var _a;return __awaiter(this,void 0,void 0,(function*(){file.isDeleted=true;yield this.cloudFileService.save(file);const e=this.map.get(file);const prev=(_a=e.previousElementSibling)!==null&&_a!==void 0?_a:e.parentElement;e.remove();this.selectedItem=prev.dataItem;this.element.dispatchEvent(new CustomEvent("file-deleted",{detail:file,bubbles:true}))}))}onNewFolder(file){var _a;return __awaiter(this,void 0,void 0,(function*(){const name=prompt("Enter new name of new folder","");if(!name){return}const parentID=file.appFileID;const child=yield this.cloudFileService.createFolder({name,parentID});((_a=file.children)!==null&&_a!==void 0?_a:file.children=[]).add(child)}))}onRenameItem(file){return __awaiter(this,void 0,void 0,(function*(){const newName=prompt("Enter new name of the file",file.name);if(!newName||newName===file.name){return}file.name=newName;yield this.cloudFileService.save(file);const e=this.map.get(file);const{parentItem:{children}}=e;children.set(children.indexOf(file),file)}))}loadFolder(folder,accept,cancelToken){return __awaiter(this,void 0,void 0,(function*(){const f=yield this.cloudFileService.getFolder(folder,cancelToken);this.root=f;this.selectedItem=f}))}});__decorate([BindableProperty,__metadata("design:type",String)],FolderTreeView.prototype,"accept",void 0);__decorate([BindableProperty,__metadata("design:type",Number)],FolderTreeView.prototype,"folderId",void 0);__decorate([InjectProperty,__metadata("design:type",CloudFileService)],FolderTreeView.prototype,"cloudFileService",void 0);__decorate([Action({onEvent:"item-expanded"}),__metadata("design:type",Function),__metadata("design:paramtypes",[Object]),__metadata("design:returntype",Promise)],FolderTreeView.prototype,"onItemExpanded",null);__decorate([Action({onEvent:"delete-file",confirm:"Are you sure you want to delete the selected?"}),__metadata("design:type",Function),__metadata("design:paramtypes",[Object]),__metadata("design:returntype",Promise)],FolderTreeView.prototype,"onDeleteItem",null);__decorate([Action({onEvent:"new-folder"}),__metadata("design:type",Function),__metadata("design:paramtypes",[Object]),__metadata("design:returntype",Promise)],FolderTreeView.prototype,"onNewFolder",null);__decorate([Action({onEvent:"rename-file"}),__metadata("design:type",Function),__metadata("design:paramtypes",[Object]),__metadata("design:returntype",Promise)],FolderTreeView.prototype,"onRenameItem",null);_export("FileTreeView",FileTreeView=class FileTreeView extends FolderTreeView{constructor(app,e){super(app,e);this.menuActions=null;this.canSelect=item=>!item.isFolder;this.labelRenderer=x=>XNode.create("span",{text:x.name,title:x.name,"data-click-event":x.isFolder?"none":"select-item"});this.actionRenderer=item=>XNode.create(InlinePopupButton,{"data-layout":"icon-button",icon:"fa-solid fa-ellipsis-vertical",popup:()=>{var _a,_b;return XNode.create("div",{"data-layout":"vertical-flex","style-width":"200px"},item.isFolder&&XNode.create(MenuItem,{"data-click-event":"new-folder",icon:"fas fa-plus",label:"New Folder"}),item.isFolder&&XNode.create(MenuItem,Object.assign({"data-click-event":"none",icon:"fas fa-upload",label:"Upload File","data-extra":JSON.stringify({parentID:item.appFileID})},UploadEvent.AttachUploadAction({multiple:true,folder:true,accept:"*/*"}))),...(_b=(_a=this.menuActions)===null||_a===void 0?void 0:_a.call(this,item))!==null&&_b!==void 0?_b:[],this.root!==item&&XNode.create(MenuItem,{"data-click-event":"rename-file",icon:"fa-duotone fa-i-cursor",label:"Rename"}),this.root!==item&&XNode.create(MenuItem,{"data-click-event":"delete-file",icon:"fas fa-trash-can",label:"Delete"}))}})}loadFolder(folder,accept,cancelToken){return __awaiter(this,void 0,void 0,(function*(){const f=yield this.cloudFileService.root({id:folder,cancelToken});this.root=f}))}})}}}));AmdLoader.instance.setup("@social-mail/social-mail-client/dist/common/controls/tree/FileTreeView");System.register([],(function(_export,_context){"use strict";function InstallDragDropHelper(editor){let dragged;const document=editor.htmlDocument;const dropTarget=editor.dropTarget;document.addEventListener("dragstart",(e=>{setTimeout((()=>document.body.contentEditable="false"),0);dragged=e.target;e.dataTransfer.dropEffect="move";e.dataTransfer.setDragImage(dragged,0,0)}));document.addEventListener("dragover",(e=>{setTimeout((()=>document.body.contentEditable="false"),0);const target=dropTarget.getDropTarget(dragged,e.target);e.preventDefault();e.dataTransfer.dropEffect="copy";const b=target.getBoundingClientRect();const mp={x:e.clientX,y:e.clientY};const style=document.defaultView.getComputedStyle(target);const isHorizontal=style.display==="flex"&&(style.flexDirection==="row"||style.flexWrap)||style.display==="inline-block"||style.display==="inline"||target.tagName==="TD";if(isHorizontal){if(mp.x>b.left+b.width/2){dropTarget.dropAnchor="right";dropTarget.update(target);return}dropTarget.dropAnchor="left";dropTarget.update(target);return}if(mp.y>b.top+b.height/2){dropTarget.dropAnchor="bottom";dropTarget.update(target);return}dropTarget.dropAnchor="top";dropTarget.update(target)}));document.addEventListener("dragend",(e=>{e.preventDefault();dropTarget.clear();dragged=null;setTimeout((()=>document.body.contentEditable="true"),0)}));document.addEventListener("drop",(e=>{const target=dropTarget.getDropTarget(dragged,e.target);let insert;e.preventDefault();if(dragged){dragged.remove();insert=dragged}else{dragged=null;const div=document.createElement("div");div.innerHTML=e.dataTransfer.getData("text/html");insert=div.childElementCount>1?div:div.firstElementChild}if(target.childElementCount===0){target.appendChild(insert);dropTarget.clear();editor.commit();setTimeout((()=>document.body.contentEditable="true"),0);return}switch(dropTarget.dropAnchor){case"top":case"left":target.insertAdjacentElement("beforebegin",insert);break;case"bottom":case"right":target.insertAdjacentElement("afterend",insert);break}editor.commit();dropTarget.clear();setTimeout((()=>document.body.contentEditable="true"),0)}));document.addEventListener("dragleave",(e=>{dropTarget.clear();setTimeout((()=>document.body.contentEditable="true"),0)}));setTimeout((()=>{editor.commit();document.body.querySelectorAll("*").forEach((e=>e.draggable=true))}),100)}_export("InstallDragDropHelper",InstallDragDropHelper);return{setters:[],execute:function(){}}}));AmdLoader.instance.setup("@social-mail/social-mail-client/dist/site-editor/drag-drop/DragDropHelper");System.register(["@web-atoms/core/dist/core/XNode","@web-atoms/core/dist/style/styled"],(function(_export,_context){"use strict";var XNode,styled;function EditorToolbar(a,...nodes){return XNode.create("div",Object.assign({"data-html-editor-element":"toolbar"},a),...nodes)}_export("default",EditorToolbar);return{setters:[function(_webAtomsCoreDistCoreXNode){XNode=_webAtomsCoreDistCoreXNode.default},function(_webAtomsCoreDistStyleStyled){styled=_webAtomsCoreDistStyleStyled.default}],execute:function(){styled.css`
3027
+ `.installLocal();_export("default",ChooseWebSiteTemplatePage=class ChooseWebSiteTemplatePage extends PopupWindowPage{constructor(){super(...arguments);this.sites=[];this.search=""}init(){return __awaiter(this,void 0,void 0,(function*(){this.title="Create Page from Template";this.element.className=css;this.headerRenderer=()=>XNode.create("div",{"data-layout":"header-row"},XNode.create("input",{autofocus:true,type:"search",value:Bind.twoWaysImmediate((()=>this.search))}));this.renderer=XNode.create("div",null,XNode.create(AtomRepeater,Object.assign({items:this.sites},InfiniteRepeater.pagedItems((start=>(c,e,cancelToken)=>this.templateService.search({search:this.search,start,cancelToken}))),{itemRenderer:item=>XNode.create("div",{class:"site","data-border":"accent-frame"},XNode.create("label",{class:"title",text:item.folder.name}),XNode.create("img",{class:"thumbnail",src:"https://"+item.hosts[0].host+"/preview.jpg"}),XNode.create("a",{class:"button preview",href:"https://"+item.hosts[0].host,target:"_blank",text:"Preview"}),XNode.create("button",{"data-click-event":"use-template",class:"button use",title:"Use this template",text:"Use"}))})));this.footerRenderer=()=>XNode.create("div",{"data-layout":"command-row"},XNode.create(AddIconTextButton,{"event-click":()=>this.createTemplate(),text:"Create Empty Web Site"}))}))}useTemplate(item){return __awaiter(this,void 0,void 0,(function*(){yield this.templateService.copyTemplate(item.folderID,this.parameters.appFileID);return true}))}upload(host,fileName,folder=void 0,content=void 0,url=void 0){return __awaiter(this,void 0,void 0,(function*(){const templatePath=folder?`${folder}/${fileName}`:fileName;url!==null&&url!==void 0?url:url=`${host}/${templatePath}`;content!==null&&content!==void 0?content:content=yield FetchBuilder.get(url).responseAsText();const contentType=yield this.mimeTypeService.getMimeType(fileName);return yield this.cloudFileService.saveFile({content:new File([content],fileName,{type:contentType}),parentID:this.parameters.appFileID,folder})}))}createTemplate(){return __awaiter(this,void 0,void 0,(function*(){const template="plain";yield this.uploadFromTemplate("index.html",template);yield this.uploadFromTemplate("styles/vars.css",template)}))}uploadFromTemplate(fileName,template){return __awaiter(this,void 0,void 0,(function*(){const path=UMD.resolvePath(`@social-mail/social-mail-client/content/templates/${template}/${fileName}`);const content=yield FetchBuilder.get(path).responseAsText();const url=`/api/upload?parentID=${this.parameters.appFileID}`;const body=new FormData;body.append(fileName,new Blob([content],{type:"text/html"}),fileName);const rs=yield fetch(url,{method:"POST",body})}))}});__decorate([InjectProperty,__metadata("design:type",CloudFileService)],ChooseWebSiteTemplatePage.prototype,"cloudFileService",void 0);__decorate([InjectProperty,__metadata("design:type",EntityService)],ChooseWebSiteTemplatePage.prototype,"entityService",void 0);__decorate([InjectProperty,__metadata("design:type",MimeTypeService)],ChooseWebSiteTemplatePage.prototype,"mimeTypeService",void 0);__decorate([InjectProperty,__metadata("design:type",TemplateService)],ChooseWebSiteTemplatePage.prototype,"templateService",void 0);__decorate([Action({onEvent:"use-template",close:true}),__metadata("design:type",Function),__metadata("design:paramtypes",[Object]),__metadata("design:returntype",Promise)],ChooseWebSiteTemplatePage.prototype,"useTemplate",null)}}}));AmdLoader.instance.setup("@social-mail/social-mail-client/dist/common/pages/websites/templates/ChooseWebSiteTemplatePage");System.register(["tslib","@web-atoms/core/dist/core/XNode","./TreeView","@web-atoms/core/dist/core/BindableProperty","@web-atoms/core/dist/core/InjectProperty","../../../web/page/files/service/CloudFileService","@web-atoms/core/dist/core/Bind","@web-atoms/core/dist/view-model/Action","@web-atoms/web-controls/dist/basic/InlinePopup","@web-atoms/web-controls/dist/basic/PopupButton","@web-atoms/web-controls/dist/basic/UploadEvent"],(function(_export,_context){"use strict";var __awaiter,__decorate,__metadata,XNode,TreeView,BindableProperty,InjectProperty,CloudFileService,Bind,Action,InlinePopupButton,MenuItem,UploadEvent,FolderTreeView,FileTreeView,getExtension;_export({FolderTreeView:void 0,FileTreeView:void 0});return{setters:[function(_tslib){__awaiter=_tslib.__awaiter;__decorate=_tslib.__decorate;__metadata=_tslib.__metadata},function(_webAtomsCoreDistCoreXNode){XNode=_webAtomsCoreDistCoreXNode.default},function(_TreeView){TreeView=_TreeView.default},function(_webAtomsCoreDistCoreBindableProperty){BindableProperty=_webAtomsCoreDistCoreBindableProperty.BindableProperty},function(_webAtomsCoreDistCoreInjectProperty){InjectProperty=_webAtomsCoreDistCoreInjectProperty.default},function(_webPageFilesServiceCloudFileService){CloudFileService=_webPageFilesServiceCloudFileService.default},function(_webAtomsCoreDistCoreBind){Bind=_webAtomsCoreDistCoreBind.default},function(_webAtomsCoreDistViewModelAction){Action=_webAtomsCoreDistViewModelAction.default},function(_webAtomsWebControlsDistBasicInlinePopup){InlinePopupButton=_webAtomsWebControlsDistBasicInlinePopup.InlinePopupButton},function(_webAtomsWebControlsDistBasicPopupButton){MenuItem=_webAtomsWebControlsDistBasicPopupButton.MenuItem},function(_webAtomsWebControlsDistBasicUploadEvent){UploadEvent=_webAtomsWebControlsDistBasicUploadEvent.default}],execute:function(){getExtension=name=>{const index=name.lastIndexOf(".");if(index===-1){return"dat"}return name.substring(index+1)};_export("FolderTreeView",FolderTreeView=class FolderTreeView extends TreeView{constructor(app,e){super(app,e);this.accept=null;this.childrenProperty=item=>{var _a;return(_a=item.children)!==null&&_a!==void 0?_a:item.children=[]};this.canSelect=item=>item.isFolder;this.isFolder=item=>item.isFolder;this.fileIconRenderer=item=>XNode.create("i",{"data-click-event":"none",class:`fiv-viv fiv-icon-${getExtension(item.name)}`});this.labelRenderer=x=>XNode.create("span",{text:x.name,title:x.name});this.actionRenderer=item=>this.root===item?XNode.create("i",{"data-cursor":"pointer",title:"New Folder","data-click-event":"new-folder",class:"fas fa-plus"}):XNode.create(InlinePopupButton,{"data-layout":"icon-button",icon:"fa-solid fa-ellipsis-vertical"},XNode.create("div",{"data-layout":"vertical-flex","style-width":"200px"},item.isFolder&&XNode.create(MenuItem,{"data-click-event":"new-folder",icon:"fas fa-plus",label:"New Folder"}),this.root!==item&&XNode.create(MenuItem,{"data-click-event":"rename-file",icon:"fa-duotone fa-i-cursor",label:"Rename"}),this.root!==item&&XNode.create(MenuItem,{"data-click-event":"delete-file",icon:"fas fa-trash-can",label:"Delete"})));this.render(XNode.create("div",{folder:Bind.oneWayAsync(((c,_,cancelToken)=>this.loadFolder(this.folderId,this.accept,cancelToken)))}))}onItemExpanded(item){return __awaiter(this,void 0,void 0,(function*(){yield this.cloudFileService.expand(item,void 0,this.accept);const setParent=i=>{if(!i.children){return}for(const iterator of i.children){iterator.parent=i}};setParent(item)}))}onDeleteItem(file){var _a;return __awaiter(this,void 0,void 0,(function*(){file.isDeleted=true;yield this.cloudFileService.save(file);const e=this.map.get(file);const prev=(_a=e.previousElementSibling)!==null&&_a!==void 0?_a:e.parentElement;e.remove();this.selectedItem=prev.dataItem;this.element.dispatchEvent(new CustomEvent("file-deleted",{detail:file,bubbles:true}))}))}onNewFolder(file){var _a;return __awaiter(this,void 0,void 0,(function*(){const name=prompt("Enter new name of new folder","");if(!name){return}const parentID=file.appFileID;const child=yield this.cloudFileService.createFolder({name,parentID});((_a=file.children)!==null&&_a!==void 0?_a:file.children=[]).add(child);child.parent=file}))}onRenameItem(file){return __awaiter(this,void 0,void 0,(function*(){const newName=prompt("Enter new name of the file",file.name);if(!newName||newName===file.name){return}file.name=newName;yield this.cloudFileService.save(file);const e=this.map.get(file);const{parentItem:{children}}=e;children.set(children.indexOf(file),file)}))}loadFolder(folder,accept,cancelToken){return __awaiter(this,void 0,void 0,(function*(){const f=yield this.cloudFileService.getFolder(folder,cancelToken);this.root=f;this.selectedItem=f}))}});__decorate([BindableProperty,__metadata("design:type",String)],FolderTreeView.prototype,"accept",void 0);__decorate([BindableProperty,__metadata("design:type",Number)],FolderTreeView.prototype,"folderId",void 0);__decorate([InjectProperty,__metadata("design:type",CloudFileService)],FolderTreeView.prototype,"cloudFileService",void 0);__decorate([Action({onEvent:"item-expanded"}),__metadata("design:type",Function),__metadata("design:paramtypes",[Object]),__metadata("design:returntype",Promise)],FolderTreeView.prototype,"onItemExpanded",null);__decorate([Action({onEvent:"delete-file",confirm:"Are you sure you want to delete the selected?"}),__metadata("design:type",Function),__metadata("design:paramtypes",[Object]),__metadata("design:returntype",Promise)],FolderTreeView.prototype,"onDeleteItem",null);__decorate([Action({onEvent:"new-folder"}),__metadata("design:type",Function),__metadata("design:paramtypes",[Object]),__metadata("design:returntype",Promise)],FolderTreeView.prototype,"onNewFolder",null);__decorate([Action({onEvent:"rename-file"}),__metadata("design:type",Function),__metadata("design:paramtypes",[Object]),__metadata("design:returntype",Promise)],FolderTreeView.prototype,"onRenameItem",null);_export("FileTreeView",FileTreeView=class FileTreeView extends FolderTreeView{constructor(app,e){super(app,e);this.menuActions=null;this.canSelect=item=>!item.isFolder;this.labelRenderer=x=>XNode.create("span",{text:x.name,title:x.name,"data-click-event":x.isFolder?"none":"select-item"});this.actionRenderer=item=>XNode.create(InlinePopupButton,{"data-layout":"icon-button",icon:"fa-solid fa-ellipsis-vertical",popup:()=>{var _a,_b;return XNode.create("div",{"data-layout":"vertical-flex","style-width":"200px"},item.isFolder&&XNode.create(MenuItem,{"data-click-event":"new-folder",icon:"fas fa-plus",label:"New Folder"}),item.isFolder&&XNode.create(MenuItem,Object.assign({"data-click-event":"none",icon:"fas fa-upload",label:"Upload File","data-extra":JSON.stringify({parentID:item.appFileID})},UploadEvent.AttachUploadAction({multiple:true,folder:true,accept:"*/*"}))),...(_b=(_a=this.menuActions)===null||_a===void 0?void 0:_a.call(this,item))!==null&&_b!==void 0?_b:[],this.root!==item&&XNode.create(MenuItem,{"data-click-event":"rename-file",icon:"fa-duotone fa-i-cursor",label:"Rename"}),this.root!==item&&XNode.create(MenuItem,{"data-click-event":"delete-file",icon:"fas fa-trash-can",label:"Delete"}))}})}loadFolder(folder,accept,cancelToken){return __awaiter(this,void 0,void 0,(function*(){const f=yield this.cloudFileService.root({id:folder,cancelToken});this.root=f}))}})}}}));AmdLoader.instance.setup("@social-mail/social-mail-client/dist/common/controls/tree/FileTreeView");System.register([],(function(_export,_context){"use strict";function InstallDragDropHelper(editor){let dragged;const document=editor.htmlDocument;const dropTarget=editor.dropTarget;document.addEventListener("dragstart",(e=>{setTimeout((()=>document.body.contentEditable="false"),0);dragged=e.target;e.dataTransfer.dropEffect="move";e.dataTransfer.setDragImage(dragged,0,0)}));document.addEventListener("dragover",(e=>{setTimeout((()=>document.body.contentEditable="false"),0);const target=dropTarget.getDropTarget(dragged,e.target);e.preventDefault();e.dataTransfer.dropEffect="copy";const b=target.getBoundingClientRect();const mp={x:e.clientX,y:e.clientY};const style=document.defaultView.getComputedStyle(target);const isHorizontal=style.display==="flex"&&(style.flexDirection==="row"||style.flexWrap)||style.display==="inline-block"||style.display==="inline"||target.tagName==="TD";if(isHorizontal){if(mp.x>b.left+b.width/2){dropTarget.dropAnchor="right";dropTarget.update(target);return}dropTarget.dropAnchor="left";dropTarget.update(target);return}if(mp.y>b.top+b.height/2){dropTarget.dropAnchor="bottom";dropTarget.update(target);return}dropTarget.dropAnchor="top";dropTarget.update(target)}));document.addEventListener("dragend",(e=>{e.preventDefault();dropTarget.clear();dragged=null;setTimeout((()=>document.body.contentEditable="true"),0)}));document.addEventListener("drop",(e=>{const target=dropTarget.getDropTarget(dragged,e.target);let insert;e.preventDefault();if(dragged){dragged.remove();insert=dragged}else{dragged=null;const div=document.createElement("div");div.innerHTML=e.dataTransfer.getData("text/html");insert=div.childElementCount>1?div:div.firstElementChild}if(target.childElementCount===0){target.appendChild(insert);dropTarget.clear();editor.commit();setTimeout((()=>document.body.contentEditable="true"),0);return}switch(dropTarget.dropAnchor){case"top":case"left":target.insertAdjacentElement("beforebegin",insert);break;case"bottom":case"right":target.insertAdjacentElement("afterend",insert);break}editor.commit();dropTarget.clear();setTimeout((()=>document.body.contentEditable="true"),0)}));document.addEventListener("dragleave",(e=>{dropTarget.clear();setTimeout((()=>document.body.contentEditable="true"),0)}));setTimeout((()=>{editor.commit();document.body.querySelectorAll("*").forEach((e=>e.draggable=true))}),100)}_export("InstallDragDropHelper",InstallDragDropHelper);return{setters:[],execute:function(){}}}));AmdLoader.instance.setup("@social-mail/social-mail-client/dist/site-editor/drag-drop/DragDropHelper");System.register(["@web-atoms/core/dist/core/XNode","@web-atoms/core/dist/style/styled"],(function(_export,_context){"use strict";var XNode,styled;function EditorToolbar(a,...nodes){return XNode.create("div",Object.assign({"data-html-editor-element":"toolbar"},a),...nodes)}_export("default",EditorToolbar);return{setters:[function(_webAtomsCoreDistCoreXNode){XNode=_webAtomsCoreDistCoreXNode.default},function(_webAtomsCoreDistStyleStyled){styled=_webAtomsCoreDistStyleStyled.default}],execute:function(){styled.css`
3028
3028
 
3029
3029
  display: flex;
3030
3030
  gap: 10px;