hyperbook 0.84.2 → 0.84.4

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.
@@ -477,7 +477,7 @@ Hint: You may create a repository by right-clicking a workspace, then select 'cr
477
477
  `),synchroWorkspace:this,state:"original",markedAsMerged:!1,originalText:e.getText(),monacoModel:null})}),this.name=Gs.Workspace()+t.name,this.copiedFromWorkspace=t,this}copyFromRepository(t,e){return this.isCurrentRepositoryVersion=e,this.files=[],t.fileEntries.forEach(i=>{this.files.push({name:i.filename,path:i.path.slice(),idInsideRepository:i.id,idInsideWorkspace:null,workspaceFile:null,repository_file_version:i.version,identical_to_repository_version:!0,text:i.text==null?null:i.text.replace(/\r\n/g,`
478
478
  `),synchroWorkspace:this,state:"original",markedAsMerged:!1,monacoModel:null})}),this.name="Repository: "+t.name+" (V "+t.version+")",this}copyFromHistoryElement(t){let e=t.getRepositoryState();return this.copyFromRepository(e,!1),this.name=Gs.historyVersion()+e.version,this}commit(t,e,i,n,s){let a={},l={},h=[];e.fileEntries.forEach(b=>a[b.id]=b),this.files.forEach(b=>{b.idInsideRepository!=null&&(l[b.idInsideRepository]=b)});let c={comment:i,name:n.user.rufname+" "+n.user.familienname,username:n.user.username,isIntermediateEntry:!1,timestamp:hp(new Date),userId:n.user.id,version:e.version+1,historyFiles:[]};for(let b of this.files){if(b.state=="deleted")continue;let A=a[b.idInsideRepository];if(A==null)b.idInsideRepository==null&&(h.push(b.committedFromFile.idInsideWorkspace),b.committedFromFile.idInsideRepository=b.committedFromFile.idInsideWorkspace,b.committedFromFile.repository_file_version=1,b.idInsideRepository=b.committedFromFile.idInsideWorkspace,b.committedFromFile.idInsideRepository=b.committedFromFile.idInsideWorkspace),c.historyFiles.push({id:b.idInsideRepository,type:"create",version:1,content:b.text,filename:b.name,path:b.path});else if(A.text!=b.text){A.version++;let k=this.getPatch(A.text,b.text);k==null?c.historyFiles.push({id:A.id,type:"intermediate",version:A.version,content:b.text,filename:b.name,path:b.path}):c.historyFiles.push({id:A.id,type:"change",version:A.version,content:k,filename:A.filename==b.name?void 0:b.name,path:yi.pathsEqual(A.path,b.path)?void 0:b.path.slice()});let C=b.committedFromFile;C!=null&&(C.repository_file_version=A.version,C.workspaceFile.repository_file_version=A.version,C.workspaceFile.setSaved(!1))}else(A.filename!=b.name||!yi.pathsEqual(A.path,b.path))&&c.historyFiles.push({id:A.id,type:"intermediate",version:A.version,filename:A.filename==b.name?void 0:b.name,path:yi.pathsEqual(A.path,b.path)?void 0:b.path.slice()})}for(let b of e.fileEntries)(l[b.id]==null||l[b.id].state=="deleted")&&c.historyFiles.push({id:b.id,type:"delete",version:b.version});let g={files:this.files.filter(b=>b.state!="deleted").map(b=>({filename:b.name,path:b.path.slice(),id:b.idInsideRepository,text:b.text,version:b.repository_file_version})),repositoryVersionBeforeCommit:e.version,repository_id:e.id,workspace_id:t.id,repositoryHistoryEntry:c,newlyVersionedFileIds:h},f=this;Re("commitFiles",g,b=>{t.getFiles().forEach(A=>{h.indexOf(A.id)>=0&&(A.is_copy_of_id=A.id,A.repository_file_version=1,A.identical_to_repository_version=!0,A.setSaved(!1))}),f.manager.currentUserSynchroWorkspace.files.forEach(A=>{let k=A.workspaceFile;k!=null&&A.text==k.getText()&&(A.repository_file_version!=k.repository_file_version||A.identical_to_repository_version!=k.identical_to_repository_version)&&(k.identical_to_repository_version=A.identical_to_repository_version,k.repository_file_version=A.repository_file_version,k.setSaved(!1)),k.is_copy_of_id!=null&&(A.idInsideRepository=k.is_copy_of_id)}),f.manager.main.networkManager.sendUpdatesAsync(!0).then(()=>{s(b.repository,null)})},b=>{s(e,b)})}getPatch(t,e){let i=new np,n=i.patch_make(t,e),s=JSON.stringify(n),a=JSON.parse(s),l=i.patch_apply(a,t);return l==null||l[0]==null?null:l[0]==e?s:null}async writeChangesToWorkspace(){var s,a;let t=this.copiedFromWorkspace,e={},i={};t.getFiles().filter(l=>!l.isFolder).forEach(l=>{l.is_copy_of_id!=null&&(e[l.is_copy_of_id]=l)}),this.files.forEach(l=>{l.idInsideWorkspace!=null&&(i[l.idInsideWorkspace]=l)});let n=this.manager.main;for(let l of t.getFiles().filter(h=>!h.isFolder)){let h=i[l.id];h!=null&&h.state!="deleted"?(l.setText(h.monacoModel.getValue(H.EndOfLinePreference.LF,!1)),h.text=l.getText(),l.is_copy_of_id=h.idInsideRepository,l.repository_file_version=h.repository_file_version,l.identical_to_repository_version=h.identical_to_repository_version,l.setSaved(!1),this.manager.main.getCompiler().setFileDirty(l),l.name=h.name,yi.pathsEqual(t.getPath(l),h.path)||(l.parent_folder_id=await this.createPathAndReturnParentFolderId(t,h.path))):(n.networkManager.sendDeleteWorkspaceOrFileAsync("file",[l.id]).then(c=>{c||alert(Gs.serverNotReachable())}),this.files.splice(this.files.indexOf(h),1),t.removeFile(l),n.projectExplorer.fileTreeview.removeElementAndItsFolderContents(l),n.currentWorkspace==t&&((s=n.getCurrentWorkspace())==null?void 0:s.getCurrentlyEditedFile())==l&&n.projectExplorer.setFileActive(null))}for(let l of this.files)if(l.idInsideRepository!=null&&e[l.idInsideRepository]==null){let h=new Ue(this.manager.main,l.name,l.text);h.is_copy_of_id=l.idInsideRepository,h.repository_file_version=l.repository_file_version,h.identical_to_repository_version=l.identical_to_repository_version,h.parent_folder_id=await this.createPathAndReturnParentFolderId(t,l.path),t.addFile(h),await n.networkManager.sendCreateFile(h,t,n.user.id)||alert(Gs.serverNotReachable())}if(await n.networkManager.sendUpdatesAsync(!0),n.currentWorkspace==t){let l=(a=n.getCurrentWorkspace())==null?void 0:a.getCurrentlyEditedFile();n.projectExplorer.setWorkspaceActive(t,!0),t.getFiles().indexOf(l)>=0&&(n.projectExplorer.setFileActive(l),n.projectExplorer.fileTreeview.selectElement(l,!1))}t.getFiles().forEach(l=>n.getCompiler().setFileDirty(l))}async createPathAndReturnParentFolderId(t,e){let i;for(let n=0;n<e.length;n++){let s=(i==null?void 0:i.id)||null;i=t.getFiles().find(a=>a.name==e[n]&&a.isFolder&&a.parent_folder_id==s),i==null&&(i=new Ue(this.manager.main,e[n]),i.isFolder=!0,i.parent_folder_id=s,await this.manager.main.networkManager.sendCreateFile(i,t,t.owner_id))}return(i==null?void 0:i.id)||null}}const Qd=class Qd{constructor(t,e,i,n){r(this,"$historyElementDiv");this.manager=t,this.repository=e,this.repositoryHistoryEntry=i,this.historyEntryIndex=n,this.$historyElementDiv=j(null,"jo_synchro_historyElement"),this.$historyElementDiv.attr("draggable","true");let s=this;this.$historyElementDiv.on("drag",()=>{Qd.currentlyDragged=s});let a=j(null,"jo_synchro_historyElementLine1");a.append(y(`<div class="jo_synchro_he_version">V ${i.version}</div>`)),a.append(y(`<div class="jo_synchro_he_name">${i.name}</div>`)),this.$historyElementDiv.append(a);let l=j(null,"jo_synchro_historyElementLine2");l.append(y(`<div class="jo_synchro_he_timestamp">${i.timestamp}</div>`)),this.$historyElementDiv.append(l);let h=j(null,"jo_synchro_historyElementLine3");h.append(y(`<div class="jo_synchro_he_comment">${i.comment}</div>`)),this.$historyElementDiv.append(h),t.$historyScrollDiv.prepend(this.$historyElementDiv),this.$historyElementDiv.on("click contextmenu",c=>{c.preventDefault(),Vn([{caption:Dd.displayOnLeftSide(),callback:()=>{let u=new ba(this.manager).copyFromHistoryElement(this);this.manager.leftSynchroWorkspace=u,this.manager.setupSynchronizationListElements()}},{caption:Dd.displayOnRightSide(),callback:()=>{let u=new ba(this.manager).copyFromHistoryElement(this);this.manager.rightSynchroWorkspace=u,this.manager.setupSynchronizationListElements()}}],c.pageX+2,c.pageY+2)})}getRepositoryState(){let t=this.repository.historyEntries,e=this.historyEntryIndex;for(;e>0&&!t[e].isIntermediateEntry;)e--;let i=[];for(let s=e;s<=this.historyEntryIndex;s++){let a=t[s];for(let l of a.historyFiles)if(a.isIntermediateEntry)this.setIntermediateState(l,i);else switch(l.type){case"create":this.createFile(l,i);break;case"delete":this.deleteFile(l,i);break;case"change":this.changeFile(l,i);break;case"intermediate":this.setIntermediateState(l,i);break}}let n=Object.assign({},this.repository);return n.fileEntries=i,n.version=this.repositoryHistoryEntry.version,n}setIntermediateState(t,e){let i=e.find(n=>n.id==t.id);i!=null&&(i.text=t.content,i.version=t.version,t.filename&&(i.filename=t.filename),t.path&&(i.path=t.path.slice()))}changeFile(t,e){let i=e.find(n=>n.id==t.id);if(i!=null){if(t.content!=null){let n=JSON.parse(t.content),s=i.text,l=new np().patch_apply(n,s);i.text=l[0],i.version=t.version}t.filename&&(i.filename=t.filename),t.path&&(i.path=t.path.slice())}}deleteFile(t,e){let i=e.findIndex(n=>n.id==t.id);i!=null&&e.splice(i,1)}createFile(t,e){let i={id:t.id,text:t.content,filename:t.filename,path:t.path?t.path.slice():[],version:t.version};e.push(i)}};r(Qd,"currentlyDragged");let Ao=Qd;class Fy{static deserializeRepository(t){t.files!=null&&t.files.startsWith("[")?t.fileEntries=JSON.parse(t.files):t.fileEntries=[],t.fileEntries.forEach(e=>{e.text=e.text.replace(/\r\n/g,`
479
479
  `),e.path=e.path??[]}),t.history.endsWith("]")||(t.history+="]"),t.historyEntries=JSON.parse(t.history)}static copyRepository(t,e){let i=Object.assign({},t);if(t.fileEntries!=null){i.fileEntries=[];for(let n of t.fileEntries)i.fileEntries.push(Object.assign({},n))}if(t.historyEntries!=null&&e){i.historyEntries=[];for(let n of t.historyEntries){let s=Object.assign({},n);if(n.historyFiles!=null){s.historyFiles=[];for(let a of n.historyFiles)s.historyFiles.push(Object.assign({},a))}i.historyEntries.push(s)}}return i}}class gn{constructor(t,e,i,n,s){r(this,"$leftFileDiv");r(this,"$rightFileDiv");r(this,"$buttonLeftDiv");r(this,"$buttonRightDiv");r(this,"$markAsMergedButtonDiv");r(this,"$mergedFlag");r(this,"editorState");r(this,"$buttons",[]);r(this,"pending",!1);this.manager=t,this.leftSynchroFile=e,this.rightSynchroFile=i,this.leftSynchroWorkspace=n,this.rightSynchroWorkspace=s,this.$leftFileDiv=j(null,"jo_synchro_workspaceFileDiv jo_synchro_listDiv"),this.$buttonLeftDiv=j(null,"jo_synchro_buttonDiv jo_synchro_listDiv jo_synchro_buttonLeftDiv"),this.$buttonRightDiv=j(null,"jo_synchro_buttonDiv jo_synchro_listDiv jo_synchro_buttonRightDiv"),this.$rightFileDiv=j(null,"jo_synchro_repositoryFileDiv jo_synchro_listDiv"),t.$fileListDivs[0].append(this.$leftFileDiv),t.$fileListDivs[1].append(this.$buttonLeftDiv),t.$fileListDivs[2].append(this.$buttonRightDiv),t.$fileListDivs[3].append(this.$rightFileDiv),e!=null&&e.state!="original"&&this.$leftFileDiv.addClass("jo_dirty"),i!=null&&i.state!="original"&&this.$rightFileDiv.addClass("jo_dirty");let a=[this.$leftFileDiv,this.$buttonLeftDiv,this.$buttonRightDiv,this.$rightFileDiv],l=this;for(let h of a)h.on("mouseenter",()=>{for(let c of a)c.addClass("jo_synchro_hoverLine")}),h.on("mouseleave",()=>{for(let c of a)c.removeClass("jo_synchro_hoverLine").removeClass("jo_synchro_hoverActiveLine")}),h.on("mousedown",()=>{for(let c of a)c.addClass("jo_synchro_hoverActiveLine")}),h.on("mouseup",()=>{for(let c of a)c.removeClass("jo_synchro_hoverActiveLine")}),h.on("click",()=>{l.select()});this.createLeftFileModel(),this.createRightFileModel()}select(){var e;let t=[this.$leftFileDiv,this.$buttonLeftDiv,this.$buttonRightDiv,this.$rightFileDiv];y("#jo_synchro_fileListOuter").find(".jo_synchro_activeLine").removeClass("jo_synchro_activeLine");for(let i of t)i.addClass("jo_synchro_activeLine");this.manager.lastShownSynchronizationElement!=null&&(this.manager.lastShownSynchronizationElement.editorState=this.manager.diffEditor.saveViewState()),this.manager.lastShownSynchronizationElement=this,this.setEditorModel(),this.editorState!=null&&this.manager.diffEditor.restoreViewState(this.editorState),this.manager.diffEditor.updateOptions({originalEditable:((e=this.leftSynchroFile)==null?void 0:e.originalText)!=null}),this.displayPaths()}displayPaths(){var t,e;this.manager.$pathLeftDiv.text(this.leftSynchroFile?"Pfad: /"+this.leftSynchroFile.path.join("/"):""),this.manager.$pathRightDiv.text(this.rightSynchroFile?"Pfad: /"+this.rightSynchroFile.path.join("/"):""),this.manager.$pathLeftDiv[0].classList.remove("jo_synchro_path_changed"),this.manager.$pathRightDiv[0].classList.remove("jo_synchro_path_changed"),(t=this.leftSynchroFile)!=null&&t.pathChanged&&this.manager.$pathLeftDiv[0].classList.add("jo_synchro_path_changed"),(e=this.rightSynchroFile)!=null&&e.pathChanged&&this.manager.$pathRightDiv[0].classList.add("jo_synchro_path_changed"),this.manager.$pathButtonCommitDiv.empty(),this.manager.$pathButtonUpdateDiv.empty(),this.leftSynchroFile&&this.rightSynchroFile&&!yi.pathsEqual(this.leftSynchroFile.path,this.rightSynchroFile.path)&&(this.manager.$pathButtonUpdateDiv.append(gn.makeButton("update","left",()=>{this.leftSynchroFile.path=this.rightSynchroFile.path,this.leftSynchroFile.pathChanged=!0,this.leftSynchroFile.state="changed",this.manager.onContentChanged("left"),this.displayPaths(),this.compareFilesAndAdaptGUI()},!1)),this.manager.repositoryIsWritable&&this.manager.$pathButtonCommitDiv.append(gn.makeButton("commit","right",()=>{this.rightSynchroFile.path=this.leftSynchroFile.path,this.rightSynchroFile.pathChanged=!0,this.rightSynchroFile.state="changed",this.manager.onContentChanged("right"),this.displayPaths(),this.compareFilesAndAdaptGUI()},!1)))}createRightFileModel(){this.rightSynchroFile!=null&&(this.rightSynchroFile.monacoModel=H.createModel(this.rightSynchroFile.text,"myJava"))}setEditorModel(){this.manager.lastShownSynchronizationElement==this&&this.manager.diffEditor.setModel({original:this.leftSynchroFile==null?this.getEmptyMonacoModel():this.leftSynchroFile.monacoModel,modified:this.rightSynchroFile==null?this.getEmptyMonacoModel():this.rightSynchroFile.monacoModel})}getEmptyMonacoModel(){return H.createModel("","myJava")}createLeftFileModel(){this.leftSynchroFile!=null&&(this.leftSynchroFile.monacoModel=H.createModel(this.leftSynchroFile.text,"myJava"),this.leftSynchroFile.monacoModel.onDidChangeContent(t=>{this.pending||(this.pending=!0,setTimeout(()=>{var e,i;if(this.leftSynchroFile!=null&&((e=this.leftSynchroFile)==null?void 0:e.state)!="deleted"){let n=this.leftSynchroFile.monacoModel.getValue(H.EndOfLinePreference.LF,!1);((i=this.leftSynchroFile)==null?void 0:i.originalText)!=null&&n==this.leftSynchroFile.originalText?(this.$leftFileDiv.removeClass("jo_dirty"),this.leftSynchroFile.state="original"):(this.$leftFileDiv.addClass("jo_dirty"),this.leftSynchroFile.state="changed",this.leftSynchroFile.identical_to_repository_version=!1),this.manager.onContentChanged("left"),this.leftSynchroFile.text=n,this.compareFilesAndAdaptGUI()}this.pending=!1},700))}))}onFileChanged(t){switch(t=="left"?this.createLeftFileModel():this.createRightFileModel(),this.setEditorModel(),this.compareFilesAndAdaptGUI(),t){case"left":this.leftSynchroFile!=null&&this.leftSynchroFile.state!="original"?this.$leftFileDiv.addClass("jo_dirty"):this.$leftFileDiv.removeClass("jo_dirty");break;case"right":this.rightSynchroFile!=null&&this.rightSynchroFile.state!="original"?this.$rightFileDiv.addClass("jo_dirty"):this.$rightFileDiv.removeClass("jo_dirty");break}this.manager.onContentChanged(t)}compareFilesAndAdaptGUI(){var c,u,g,f;this.emptyGUI();let t=this,e="---",i="",n=!1;if(this.leftSynchroFile!=null){let b=this.rightSynchroFile==null?!0:yi.pathsEqual(this.leftSynchroFile.path,this.rightSynchroFile.path);e=this.leftSynchroFile.name,this.leftSynchroFile.repository_file_version==null?i=$i.withoutVersion():(i="(V "+this.leftSynchroFile.repository_file_version,this.leftSynchroFile.identical_to_repository_version||((c=this.leftSynchroFile)==null?void 0:c.text)==((u=this.rightSynchroFile)==null?void 0:u.text)||(i+=`<span class="jo_synchro_withChanges"> ${$i.withChanges()}</span>`),this.rightSynchroFile!=null&&this.leftSynchroFile.synchroWorkspace.isWritable()&&this.rightSynchroFile.repository_file_version>this.leftSynchroFile.repository_file_version&&(n=!this.leftSynchroFile.markedAsMerged),b||(i+=', <span class="jo_synchro_otherPath">anderer Pfad</span>'),this.leftSynchroFile.pathChanged&&(i+=', <span class="jo_synchro_otherPath">neuer Pfad</span>'),i+=")"),this.leftSynchroFile.state=="deleted"&&(e+=$i.DELETED(),i="")}let s=this.rightSynchroFile==null?"---":this.rightSynchroFile.name,a=this.rightSynchroFile==null?"":"(V "+this.rightSynchroFile.repository_file_version+((g=this.rightSynchroFile)!=null&&g.pathChanged?', <span class="jo_synchro_otherPath">neuer Pfad</span>':"")+")";((f=this.rightSynchroFile)==null?void 0:f.state)=="deleted"&&(s+=$i.DELETED(),a="");let l=j("","jo_synchro_5px_spacer"),h=j("","jo_synchro_5px_spacer");if(this.$buttonRightDiv.append(h),this.leftSynchroFile==null)this.leftSynchroWorkspace.isWritable()&&t.rightSynchroFile.state!="deleted"&&this.$buttonLeftDiv.append(gn.makeButton("create","left",()=>{t.leftSynchroFile={name:t.rightSynchroFile.name,path:t.rightSynchroFile.path.slice(),idInsideRepository:t.rightSynchroFile.idInsideRepository,repository_file_version:t.rightSynchroFile.repository_file_version,identical_to_repository_version:!0,state:"new",markedAsMerged:!1,text:this.rightSynchroFile.text,synchroWorkspace:t.leftSynchroWorkspace,idInsideWorkspace:null,workspaceFile:null,originalText:null,monacoModel:null},t.leftSynchroWorkspace.files.push(t.leftSynchroFile),t.onFileChanged("left")},!1)),t.rightSynchroWorkspace.isWritable()&&t.rightSynchroFile.state!="deleted"&&this.$buttonRightDiv.append(gn.makeButton("delete","right",()=>{t.rightSynchroFile.state="deleted",t.onFileChanged("right")},!1));else if(this.rightSynchroFile==null)this.rightSynchroWorkspace.isWritable()&&t.leftSynchroFile.state!="deleted"&&this.$buttonRightDiv.append(gn.makeButton("create","right",()=>{t.rightSynchroFile={name:t.leftSynchroFile.name,path:t.leftSynchroFile.path.slice(),committedFromFile:t.leftSynchroWorkspace.isWritable()?t.leftSynchroFile:null,idInsideRepository:t.leftSynchroFile.idInsideRepository,repository_file_version:t.leftSynchroFile.repository_file_version==null?1:t.leftSynchroFile.repository_file_version,identical_to_repository_version:t.leftSynchroFile.identical_to_repository_version,state:"new",markedAsMerged:!1,text:this.leftSynchroFile.text,synchroWorkspace:t.rightSynchroWorkspace,idInsideWorkspace:this.leftSynchroFile.idInsideWorkspace,workspaceFile:null,originalText:null,monacoModel:null},t.rightSynchroWorkspace.files.push(t.rightSynchroFile),t.leftSynchroFile.repository_file_version=t.rightSynchroFile.repository_file_version,t.leftSynchroFile.identical_to_repository_version=!0,t.onFileChanged("right")},!1)),t.leftSynchroWorkspace.isWritable()&&t.leftSynchroFile.state!="deleted"&&this.$buttonLeftDiv.append(gn.makeButton("delete","left",()=>{t.leftSynchroFile.state="deleted",t.onFileChanged("left")},!1));else{let b=!0,A=this.leftSynchroFile.name!=this.rightSynchroFile.name,k=this.leftSynchroFile.text!=this.rightSynchroFile.text,C=A&&!k;this.leftSynchroFile.repository_file_version==this.rightSynchroFile.repository_file_version?(k||A)&&(b=!1):b=!1,b?(this.$buttonLeftDiv.append(y(`<div>${$i.synchronized()} - </div>`)),this.$buttonRightDiv.append(y(`<div> - ${$i.synchronized()}</div>`))):(this.leftSynchroWorkspace.isWritable()&&this.$buttonLeftDiv.append(gn.makeButton("update","left",()=>{t.leftSynchroFile.text=t.rightSynchroFile.text,t.leftSynchroFile.repository_file_version=t.rightSynchroFile.repository_file_version,t.leftSynchroFile.identical_to_repository_version=!0,t.leftSynchroFile.name=t.rightSynchroFile.name,t.leftSynchroFile.state="changed",t.onFileChanged("left")},C)),this.rightSynchroWorkspace.isWritable()&&!n&&this.$buttonRightDiv.append(gn.makeButton("commit","right",()=>{t.rightSynchroFile.text=t.leftSynchroFile.text,t.rightSynchroFile.name=t.leftSynchroFile.name,t.rightSynchroFile.repository_file_version++,t.leftSynchroWorkspace.isWritable()&&(t.rightSynchroFile.committedFromFile=t.leftSynchroFile),t.leftSynchroWorkspace.isWritable()&&(t.leftSynchroFile.repository_file_version=t.rightSynchroFile.repository_file_version,this.leftSynchroFile.identical_to_repository_version=!0),t.rightSynchroFile.state="changed",t.onFileChanged("right")},C)))}this.$buttonLeftDiv.append(l),this.$leftFileDiv.append(y(`<div class="jo_synchro_filename">${e}<span class="jo_synchro_fileVersion">${i}</span></div>`)),this.$rightFileDiv.append(y(`<div class="jo_synchro_filename">${s}<span class="jo_synchro_fileVersion">${a}</span></div>`)),n&&(this.$markAsMergedButtonDiv=y(`<div class="jo_synchro_button jo_synchro_markAsMergedButton">${$i.markAsMerged()}</div>`),this.$leftFileDiv.append(this.$markAsMergedButtonDiv),this.$markAsMergedButtonDiv.on("click",b=>{b.stopPropagation(),this.leftSynchroFile.markedAsMerged=!0,this.compareFilesAndAdaptGUI()})),this.leftSynchroFile!=null&&this.leftSynchroFile.markedAsMerged&&this.showMergedDiv(),this.manager.updateCenterButtons()}showMergedDiv(){let t=y(`<div class="jo_synchro_mergedDiv">${$i.merged()}</div><div class="img_errorfree"></div>`);this.$leftFileDiv.append(t)}emptyGUI(){this.$leftFileDiv.empty(),this.$rightFileDiv.empty(),this.$buttonLeftDiv.empty(),this.$buttonRightDiv.empty()}static makeButton(t,e,i,n){let s="",a="";switch(t){case"commit":s=n?"rename":"commit",a="jo_synchro_commitButton";break;case"commitAll":s="commit all",a="jo_synchro_commitButton";break;case"update":s=n?"rename":"update",a="jo_synchro_updateButton";break;case"updateAll":s="update all",a="jo_synchro_updateButton";break;case"create":s="create",a="jo_synchro_createButton";break;case"delete":s="delete",a="jo_synchro_deleteButton";break}switch(e){case"left":a+=" jo_synchro_arrowLeft";break;case"right":a+=" jo_synchro_arrowRight";break}let l=y(`<div class="jo_synchro_button ${a}">${s}</div>`);return l.on("click",h=>{h.stopPropagation(),i!=null&&i()}),l.on("mousedown",h=>{h.stopPropagation()}),l}}class _y{constructor(t){r(this,"$mainHeadingDiv");r(this,"$writeWorkspaceChangesButton");r(this,"$writeRepositoryChangesButton");r(this,"$backToWorkspaceButton");r(this,"$backToCurrentRepositoryVersionButton");r(this,"$exitButton");r(this,"$belowMainHeadingDiv");r(this,"$leftDiv");r(this,"$historyOuterDiv");r(this,"$historyScrollDiv");r(this,"$leftUpperDiv");r(this,"$pathDiv");r(this,"$pathLeftOuterDiv");r(this,"$pathLeftDiv");r(this,"$pathButtonUpdateDiv");r(this,"$pathButtonCommitDiv");r(this,"$pathRightOuterDiv");r(this,"$pathRightDiv");r(this,"$fileListHeaderOuterDiv");r(this,"$fileListHeaderDivs",[]);r(this,"$fileListHeaderContainerRight");r(this,"$updateAllButton");r(this,"$commitAllButton");r(this,"$fileListOuterDiv");r(this,"$fileListDivs",[]);r(this,"$fileListFooterDiv");r(this,"$editorDiv");r(this,"guiReady",!1);r(this,"diffEditor");r(this,"currentUserSynchroWorkspace");r(this,"currentRepositorySynchroWorkspace");r(this,"currentRepository");r(this,"leftSynchroWorkspace");r(this,"rightSynchroWorkspace");r(this,"lastShownSynchronizationElement");r(this,"synchronizationListElements",[]);r(this,"lastShownHistoryElement");r(this,"historyElements",[]);r(this,"timer");r(this,"repositoryIsWritable");this.main=t}synchronizeWithWorkspace(t){this.gainRepositoryLock(t.repository_id,e=>{e?(this.repositoryIsWritable=!0,this.attachToWorkspaceAndRepository(t),this.show(),this.timer=setInterval(()=>{this.gainRepositoryLock(this.currentRepository.id,i=>{i||(alert(ge.serverTemporarilyNotReachable()),window.history.back())})},1e4)):(this.attachToWorkspaceAndRepository(t),this.repositoryIsWritable=!1,this.show())})}gainRepositoryLock(t,e){Re("gainRepositoryLock",{repository_id:t},n=>{e(n.success)},n=>{alert(n),e(!1)})}attachToWorkspaceAndRepository(t){this.currentUserSynchroWorkspace=new ba(this).copyFromWorkspace(t),this.leftSynchroWorkspace=this.currentUserSynchroWorkspace;let e=this,i={repository_id:t.repository_id,workspace_id:t.id};Re("getRepository",i,n=>{e.attachToRepository(n.repository),n.repository.spritesheet_id&&n.repository.spritesheet_id!=t.spritesheetId&&(t.spritesheetId=n.repository.spritesheet_id,new As().initializeSpritesheetForWorkspace(t,this.main).then(()=>{for(let a of t.getFiles())this.main.getCompiler().setFileDirty(a)}))},n=>{alert(n),window.history.back()})}attachToRepository(t){this.currentRepository=t,Fy.deserializeRepository(this.currentRepository),this.currentRepositorySynchroWorkspace=new ba(this).copyFromRepository(this.currentRepository,!0),this.rightSynchroWorkspace=this.currentRepositorySynchroWorkspace,this.setupSynchronizationListElements(),this.setupHistoryElements()}setupHistoryElements(){this.$historyScrollDiv.empty(),this.historyElements=[],this.lastShownHistoryElement=null,this.currentRepository.historyEntries.forEach((t,e)=>{this.historyElements.push(new Ao(this,this.currentRepository,t,e))})}setupSynchronizationListElements(){let t=null,e=null;this.lastShownSynchronizationElement!=null&&(t=this.lastShownSynchronizationElement.leftSynchroFile,e=this.lastShownSynchronizationElement.rightSynchroFile),this.$fileListDivs.forEach(a=>a.empty()),this.synchronizationListElements.forEach(a=>a.emptyGUI()),this.synchronizationListElements=[],this.lastShownSynchronizationElement=null;let i=[],n={};if(this.leftSynchroWorkspace.files.forEach(a=>{let l={id:a.idInsideRepository,name:a.name,leftSynchroFile:a,rightSynchroFile:null};i.push(l),a.idInsideRepository!=null?n["r"+a.idInsideRepository]=l:n["w"+a.idInsideWorkspace]=l}),this.rightSynchroWorkspace.files.forEach(a=>{let l=null;a.idInsideRepository!=null?l=n["r"+a.idInsideRepository]:l=n["w"+a.idInsideWorkspace],l==null?(l={id:a.idInsideRepository,name:a.name,leftSynchroFile:null,rightSynchroFile:a},i.push(l)):l.rightSynchroFile=a}),i.sort((a,l)=>a.name.localeCompare(l.name)),i.forEach(a=>{let l=new gn(this,a.leftSynchroFile,a.rightSynchroFile,this.leftSynchroWorkspace,this.rightSynchroWorkspace);this.synchronizationListElements.push(l),l.compareFilesAndAdaptGUI()}),this.diffEditor.setModel({original:H.createModel(ge.chooseFile(),"myJava"),modified:H.createModel(ge.chooseFile(),"myJava")}),this.diffEditor.updateOptions({originalEditable:!1}),this.leftSynchroWorkspace==this.currentUserSynchroWorkspace?(this.setHeader("left",ge.yourWorkspace()),this.$backToWorkspaceButton.hide()):(this.setHeader("left",this.leftSynchroWorkspace.name+":"),this.$backToWorkspaceButton.show(),this.$writeWorkspaceChangesButton.hide()),this.rightSynchroWorkspace==this.currentRepositorySynchroWorkspace){let a=this.repositoryIsWritable?ge.withWriteAccess():ge.withoutWriteAccess();this.setHeader("right",ge.repoCurrentVersion(a)),this.$backToCurrentRepositoryVersionButton.hide()}else this.setHeader("right",this.rightSynchroWorkspace.name+":"),this.$backToCurrentRepositoryVersionButton.show(),this.$writeRepositoryChangesButton.hide();y("#jo_synchro_main_heading_text").text(`${ge.synchronizeWithRepository()} "${this.currentRepository.name}"${this.repositoryIsWritable?"":" (read-only)"}`);let s=!1;if(t!=null||e!=null){for(let a of this.synchronizationListElements)if(a.leftSynchroFile!=null&&a.leftSynchroFile==t||a.rightSynchroFile!=null&&a.rightSynchroFile==e){a.select(),s=!0;break}}!s&&this.synchronizationListElements.length>0&&this.synchronizationListElements[0].select()}show(){y("#synchronize-div").css("display","flex"),y("#main").css("visibility","hidden"),this.guiReady||this.initGUI(),this.$writeWorkspaceChangesButton.hide(),this.$writeRepositoryChangesButton.hide();let i=this;this.main.windowStateManager.registerOneTimeBackButtonListener(()=>{i.hide()})}hide(){if(y("#synchronize-div").css("display","none"),y("#main").css("visibility","visible"),clearInterval(this.timer),this.currentRepository==null)return;let i={repository_id:this.currentRepository.id};Re("leaseRepositoryLock",i,n=>{},n=>{})}initGUI(){this.guiReady=!0;let t=y("#synchronize-div"),e=this;t.append(this.$mainHeadingDiv=y(`<div id="jo_synchro_main_heading"><span id="jo_synchro_main_heading_text">${ge.synchronizeWorkspaceWithRepository()}</span></div>`),this.$belowMainHeadingDiv=j("jo_synchro_below_main_heading"));let i=j("jo_synchro_buttonsTopRight");this.$mainHeadingDiv.append(i),i.append(this.$exitButton=y(`<div id="jo_synchro_exitButton" class="jo_synchro_button">${ge.backToCoding()}</div>`)),this.$exitButton.on("click",()=>{window.history.back()}),this.$leftDiv=j("jo_synchro_leftDiv"),this.$historyOuterDiv=j("jo_synchro_historyOuterDiv"),this.$historyOuterDiv.append(y(`<div id="jo_synchro_historyHeader"><div class="jo_synchro_tabHeading">${ge.history()}</div></div>)`)),this.$belowMainHeadingDiv.append(this.$leftDiv,this.$historyOuterDiv),new Pr(this.$historyOuterDiv[0],!0,!1,()=>{this.diffEditor.layout()}).sliderDiv.style.left="-3px",this.$historyOuterDiv.find(".joe_slider").css("position","absolute"),this.$historyScrollDiv=j("historyScrollDiv","jo_scrollable"),this.$historyOuterDiv.append(this.$historyScrollDiv),this.$leftDiv.append(this.$leftUpperDiv=j("jo_synchro_leftUpper"),this.$pathDiv=j("jo_synchro_pathDiv","jo_scrollable"),this.$editorDiv=j("jo_synchro_editor")),this.$leftUpperDiv.append(this.$fileListHeaderOuterDiv=j("jo_synchro_fileListHeaderOuter"),this.$fileListOuterDiv=j("jo_synchro_fileListOuter","jo_scrollable"),this.$fileListFooterDiv=j("jo_synchro_fileListFooter")),this.$fileListHeaderContainerRight=j(null,"jo_synchro_fileListHeaderContainerRight");let n=j(null,"jo_synchro_fileListHeader");this.$fileListHeaderContainerRight.append(n);let s=j(null,"jo_synchro_fileListHeaderCenter");s.append(this.$updateAllButton=gn.makeButton("updateAll","left",()=>{e.updateAll()},!1)),s.append(this.$commitAllButton=gn.makeButton("commitAll","right",()=>{e.commitAll()},!1)),this.$fileListHeaderDivs.push(j(null,"jo_synchro_fileListHeader","",{flex:"2 0"}),s,this.$fileListHeaderContainerRight,j(null,"jo_synchro_scrollbarPlaceholder")),this.$fileListDivs.push(j(null,"jo_synchro_fileList"),j(null,"jo_synchro_fileListButtonsLeft"),j(null,"jo_synchro_fileListButtonsRight"),j(null,"jo_synchro_fileList")),this.$fileListHeaderOuterDiv.append(this.$fileListHeaderDivs),this.$fileListOuterDiv.append(this.$fileListDivs),this.$fileListHeaderDivs[0].append(`<div class='jo_synchro_tabHeading'>${ge.yourWorkspace()}</div>`),n.append(`<div class='jo_synchro_tabHeading'>${ge.repositoryCurrentVersion()}</div>`),this.$fileListHeaderDivs[0].append(this.$backToWorkspaceButton=y(`<div class="jo_synchro_button jo_synchro_backToButton">${ge.showOwnWorkspace()}</div>`)),this.$backToWorkspaceButton.on("click",()=>{e.backToWorkspace()}),this.$backToWorkspaceButton.hide(),n.append(this.$backToCurrentRepositoryVersionButton=y(`<div class="jo_synchro_button jo_synchro_backToButton">${ge.showCurrentRepoVersion()}</div>`)),this.$backToCurrentRepositoryVersionButton.on("click",()=>{e.backToCurrentRepositoryVersion()}),this.$backToWorkspaceButton.hide(),this.$fileListHeaderDivs[0].append(this.$writeWorkspaceChangesButton=y(`<div id="jo_synchro_writeChangesButton" class="jo_synchro_button">${ge.saveWorkspaceChanges()}</div>`)),this.$writeWorkspaceChangesButton.on("click",()=>{e.writeWorkspaceChanges()}),this.$writeWorkspaceChangesButton.hide(),n.append(this.$writeRepositoryChangesButton=y(`<div id="jo_synchro_writeChangesButton" class="jo_synchro_button">${ge.saveRepoChanges()}</div>`)),this.$writeRepositoryChangesButton.on("click",()=>{e.writeRepositoryChanges()}),this.$writeRepositoryChangesButton.hide(),this.$pathDiv.append(this.$pathLeftOuterDiv=y('<div id="jo_synchro_pathLeftOuterDiv" class="jo_synchro_fileList"></div>'),this.$pathButtonUpdateDiv=y('<div id="jo_synchro_pathButtonsDiv" class="jo_synchro_fileListButtonsLeft"></div>'),this.$pathButtonCommitDiv=y('<div id="jo_synchro_pathButtonsDiv" class="jo_synchro_fileListButtonsRight"></div>'),this.$pathRightOuterDiv=y('<div id="jo_synchro_pathRightOuterDiv" class="jo_synchro_fileList"></div>')),this.$pathLeftOuterDiv.append(this.$pathLeftDiv=y('<div class="jo_synchro_path"></div>')),this.$pathRightOuterDiv.append(this.$pathRightDiv=y('<div class="jo_synchro_path"></div>')),new Pr(this.$editorDiv[0],!0,!0,()=>{this.diffEditor.layout()}).setColor("var(--slider)"),this.makeDroppable("left",this.$fileListDivs[0]),this.makeDroppable("right",this.$fileListDivs[3]),this.initEditor(),Jm(t[0],t[0],{forceListen:!1,dragThresholdPixels:5,isPressHoldMode:!0,pressHoldDelayMS:100})}backToWorkspace(){this.leftSynchroWorkspace=this.currentUserSynchroWorkspace,this.setupSynchronizationListElements(),this.onContentChanged("left")}backToCurrentRepositoryVersion(){this.rightSynchroWorkspace=this.currentRepositorySynchroWorkspace,this.setupSynchronizationListElements(),this.onContentChanged("right")}makeDroppable(t,e){let i=this;e.on("dragover",n=>{e.addClass("jo_synchro_dragZone"),n.preventDefault()}),e.on("dragleave",()=>{e.removeClass("jo_synchro_dragZone")}),e.on("drop",n=>{if(Ao.currentlyDragged){let s=new ba(i).copyFromHistoryElement(Ao.currentlyDragged);switch(t){case"left":i.leftSynchroWorkspace=s;break;case"right":i.rightSynchroWorkspace=s;break}i.setupSynchronizationListElements()}e.removeClass("jo_synchro_dragZone")})}setHeader(t,e){let i=t=="left"?0:2;this.$fileListHeaderDivs[i].find(".jo_synchro_tabHeading").text(e)}writeRepositoryChanges(){let t=this;this.$writeRepositoryChangesButton.hide();let e=j("","jo_synchro_commitDialogDiv");e.hide(),this.$fileListHeaderContainerRight.append(e),e.append(j("","jo_synchro_commitDialogCaption",ge.commitMessage()));let i=y('<textarea class="jo_synchro_commitDialogTextarea"></textarea>');e.append(i);let n=j("","jo_synchro_commitDialogButtonDiv");e.append(n);let s=j("","jo_synchro_button","Abbrechen",{"background-color":"var(--updateButtonBackground)",color:"var(--updateButtonColor)"});n.append(s),s.on("click",()=>{e.remove(),t.$writeRepositoryChangesButton.show()});let a=j("","jo_synchro_button",ge.OK(),{"background-color":"var(--createButtonBackground)",color:"var(--createButtonColor)"});n.append(a),e.show(600),a.on("click",()=>{let l=i.val();e.remove(),this.currentRepositorySynchroWorkspace.commit(this.currentUserSynchroWorkspace.copiedFromWorkspace,this.currentRepository,l,this.main,(h,c)=>{c!=null?(alert(c),this.attachToWorkspaceAndRepository(this.currentUserSynchroWorkspace.copiedFromWorkspace)):(this.attachToRepository(h),this.$writeRepositoryChangesButton.hide())})}),i.focus()}async writeWorkspaceChanges(){await this.currentUserSynchroWorkspace.writeChangesToWorkspace(),this.currentUserSynchroWorkspace=new ba(this).copyFromWorkspace(this.currentUserSynchroWorkspace.copiedFromWorkspace),this.leftSynchroWorkspace=this.currentUserSynchroWorkspace,this.setupSynchronizationListElements(),this.$writeWorkspaceChangesButton.hide()}initEditor(){this.diffEditor=H.createDiffEditor(document.getElementById("jo_synchro_editor"),{originalEditable:!0,readOnly:!0,automaticLayout:!0,renderSideBySide:!0})}onContentChanged(t){let e=t=="left"?this.$writeWorkspaceChangesButton:this.$writeRepositoryChangesButton;(t=="left"?this.currentUserSynchroWorkspace:this.currentRepositorySynchroWorkspace).hasChanges()?e.show():e.hide()}updateAll(){this.$fileListDivs[1].find(".jo_synchro_updateButton").click()}commitAll(){this.$fileListDivs[2].find(".jo_synchro_commitButton").click()}updateCenterButtons(){this.$fileListDivs[1].find(".jo_synchro_updateButton").length>0?this.$updateAllButton.css("visibility","inherit"):this.$updateAllButton.css("visibility","hidden"),this.$fileListDivs[2].find(".jo_synchro_commitButton").length>0?this.$commitAllButton.css("visibility","inherit"):this.$commitAllButton.css("visibility","hidden")}}class zy{constructor(t){r(this,"guiReady",!1);r(this,"$mainHeading");r(this,"$repoListDiv");r(this,"$exitButton");r(this,"$checkoutButton");r(this,"$workspaceDropdown");r(this,"$filterButtonDiv");r(this,"$filterInput");r(this,"filterbuttonOptions",[Ie.all(),Ie.private(),Ie.accessableForClass(),Ie.accessableForSchool()]);r(this,"workspace");r(this,"repositories",[]);r(this,"$codeInput");this.main=t}initGUI(){this.guiReady=!0;let t=this,e=y("#checkoutRepo-div");e.append(this.$mainHeading=j("checkoutRepo-mainHeading","createUpdateRepo-mainHeading","")),this.$mainHeading.append(j("","",Ie.caption())),this.$mainHeading.append(this.$exitButton=j("","jo_synchro_button",Ie.backToCoding(),{"background-color":"var(--speedcontrol-grip)",color:"var(--fontColorLight)","font-size":"10pt"})),this.$exitButton.on("click",()=>{t.exitButtonClicked()});let i=j("checkoutRepo-divBelow");e.append(i);let n=j("","checkoutRepo-chooseDiv");i.append(n),n.append(j("","checkoutRepo-minorHeading",Ie.connectThisWorkspaceToRepository())),this.$workspaceDropdown=y("<select></select>"),n.append(this.$workspaceDropdown);let s=j("","checkoutRepo-chooseDiv");i.append(s),s.append(j("","checkoutRepo-minorHeading",Ie.inputRepositoryCode())),this.$codeInput=y('<input type="text"></input>'),s.append(this.$codeInput),this.$codeInput.on("input",c=>{t.$codeInput.val()==""?this.$repoListDiv.show():this.$repoListDiv.hide()});let a=j("","checkoutRepo-chooseDiv");i.append(a),a.append(j("","checkoutRepo-minorHeading",Ie.showTheseRepositories())),this.$filterButtonDiv=y("<fieldset></fieldset>"),a.append(this.$filterButtonDiv),this.filterbuttonOptions.forEach((c,u)=>{let g=y(`<input type="radio" id="b${u}" name="publishedFilter" value="${u}" ${u==0?"checked":""}>`);g.data("value",u),g.on("change",f=>{t.showRepositories()}),this.$filterButtonDiv.append(g),this.$filterButtonDiv.append(y(`<label for="b${u}">${c}</label>`))});let l=j("","checkoutRepo-chooseDiv");i.append(l),l.append(j("","checkoutRepo-minorHeading",Ie.filterSearch())),this.$filterInput=y('<input type="text"></input>'),l.append(this.$filterInput),this.$filterInput.on("input",c=>{t.showRepositories()}),i.append(j("","updateRepo-minorHeading","Repositories:",{"margin-bottom":"10px","margin-top":"20px"})),this.$repoListDiv=j("checkoutRepo-repoListDiv","jo_scrollable"),i.append(this.$repoListDiv);let h=j("updateRepo-buttonDiv");h.append(this.$checkoutButton=j("","jo_synchro_button","Checkout",{"background-color":"var(--updateButtonBackground)",color:"var(--updateButtonColor)"})),this.$checkoutButton.on("click",()=>{t.checkoutButtonClicked()}),i.append(h)}show(t){this.guiReady||this.initGUI(),y("#checkoutRepo-div").css("visibility","visible"),y("#main").css("visibility","hidden"),this.main.user;let n={onlyOwnRepositories:!1};this.$repoListDiv.empty();let s=this;Re("getRepositoryList",n,a=>{this.repositories=a.repositories,this.showRepositories()}),this.$workspaceDropdown.empty(),no(this.$workspaceDropdown,[{caption:Ie.createNewWorkspace(),object:null,value:-1}].concat(this.main.workspaceList.filter(a=>a.repository_id==null&&!a.isFolder).map(a=>({caption:a.name,object:a,value:a.id}))),-1),this.main.windowStateManager.registerOneTimeBackButtonListener(()=>{s.hide()})}showRepositories(){let t=this;this.$repoListDiv.find(".checkoutRepo-repoListItem").remove();let e=this.$filterButtonDiv.find("input:checked").data("value")-1,i=e<0?this.repositories:this.repositories.filter(s=>s.published_to==e),n=this.$filterInput.val();n=n.toLocaleLowerCase(),n!=""&&(i=i.filter(s=>[s.owner_username,s.owner_name,s.name,s.description].join(" ").toLocaleLowerCase().indexOf(n)>=0)),i.forEach(s=>{let a=j("","checkoutRepo-repoListItem"),l=j("","checkoutRepo-repoListItemLeft");a.append(l),l.append(j("","checkoutRepo-repoListName",s.name)),l.append(j("","checkoutRepo-repoListOwner",s.owner_name+" ("+s.owner_username+")"));let h=j("","checkoutRepo-repoListItemRight",s.description);a.append(h),this.$repoListDiv.append(a),a.data("repoInfo",s),a.on("click",()=>{t.selectRepository(a,s)})}),this.selectFirstRepository()}selectRepository(t,e){this.$repoListDiv.find(".checkoutRepo-repoListItem").removeClass("active"),t!=null&&t.addClass("active")}selectFirstRepository(){this.$repoListDiv.find(".checkoutRepo-repoListItem").removeClass("active"),this.$repoListDiv.find(".checkoutRepo-repoListItem").first().addClass("active")}hide(){y("#checkoutRepo-div").css("visibility","hidden"),y("#main").css("visibility","visible")}checkoutButtonClicked(){let t=-1,e=null,i=this.$codeInput.val();if(i!=""){let l=i.indexOf("T");if(l<0){alert(Ie.codeMustContainT());return}let h=Number.parseInt(i.substring(0,l));if(h>=0)t=h,e=i.substring(l+1);else{alert(Ie.digitPriorToTInsideCode());return}}else t=this.$repoListDiv.find(".active").first().data("repoInfo").id;let n=ro(this.$workspaceDropdown),s={repository_id:t,createNewWorkspace:n==null,workspace_id:n==null?null:n.id,secret:e},a=this;Re("attachWorkspaceToRepository",s,l=>{if(l.message!=null){alert(l.message);return}if(n==null&&l.new_workspace!=null){let h=a.main.networkManager.createNewWorkspaceFromWorkspaceData(l.new_workspace);a.main.projectExplorer.workspaceTreeview.sort(),setTimeout(()=>{a.main.projectExplorer.setWorkspaceActive(h,!0)},400),alert(Ie.newWorkspaceCreateSuccessfully(l.new_workspace.name))}else n.repository_id=t,a.main.projectExplorer.workspaceTreeview.setIconClassForElement(n,"img_workspace-dark-repository"),alert(Ie.workspaceSuccessfullyConnectedToRepository(n.name));window.history.back()})}exitButtonClicked(){this.hide()}}class qy{constructor(t){r(this,"guiReady",!1);r(this,"$mainHeading");r(this,"$settingsDiv");r(this,"$repoName");r(this,"$repoDescription");r(this,"$repoPublishedTo");r(this,"$cancelButton");r(this,"$createButton");r(this,"publishedToItems",[]);r(this,"workspace");this.main=t}initGUI(){this.guiReady=!0;let t=this,e=y("#createRepo-div");e.append(this.$mainHeading=j("","createUpdateRepo-mainHeading")),e.append(this.$settingsDiv=j("","createUpdateRepo-settingsDiv")),this.$settingsDiv.append(y(`<div class="createUpdateRepo-settingsLabel">${et.nameOfRepository()}</div>`)),this.$settingsDiv.append(this.$repoName=y('<input type="text" class="createUpdateRepo-inputcolumn"></input>')),this.$settingsDiv.append(y(`<div class="createUpdateRepo-settingsLabel">${et.description()}</div>`)),this.$settingsDiv.append(this.$repoDescription=y('<textarea class="createUpdateRepo-inputcolumn" style="min-height: 4em"></textarea>')),this.$settingsDiv.append(y(`<div class="createUpdateRepo-settingsLabel">${et.publishedFor()}</div>`)),this.$settingsDiv.append(this.$repoPublishedTo=y('<select class="createUpdateRepo-inputcolumn"></select>'));let i=j("createRepo-buttonDiv");i.append(this.$createButton=j("","jo_synchro_button","Repository erstellen",{"background-color":"var(--createButtonBackground)",color:"var(--createButtonColor)"})),this.$createButton.on("click",()=>{t.createButtonClicked()}),i.append(this.$cancelButton=j("","jo_synchro_button","Abbrechen",{"background-color":"var(--cancelButtonBackground)",color:"var(--cancelButtonColor)"})),this.$cancelButton.on("click",()=>{t.cancelButtonClicked()}),e.append(i)}show(t){this.workspace=t,this.guiReady||this.initGUI();let e=this.main.user,i=!(e.is_admin||e.is_schooladmin||e.is_teacher);this.publishedToItems=[{value:"0",object:0,caption:et.privateRepository()},{value:"1",object:1,caption:i?et.publishedToClassStudents():et.publishedToClasses()},{value:"2",object:2,caption:et.publishedToSchool()}],no(this.$repoPublishedTo,this.publishedToItems,"0"),y("#createRepo-div").css("visibility","visible"),y("#main").css("visibility","hidden"),this.initCreateMode(t);let a=this;this.main.windowStateManager.registerOneTimeBackButtonListener(()=>{a.hide()})}initCreateMode(t){let e=this.main.user;e.rufname,e.familienname,e.username,e.id,this.$mainHeading.text(et.createRepositoryAndConnectToWorkspace(t.name)),this.$createButton.show(),this.$repoName.val(t.name)}hide(){y("#createRepo-div").css("visibility","hidden"),y("#main").css("visibility","visible")}createButtonClicked(){let t=ro(this.$repoPublishedTo),e=this.$repoName.val(),i=this.$repoDescription.val();this.main.networkManager.sendCreateRepository(this.workspace,t,e,i,(n,s)=>{if(n==null){let a=this.main.projectExplorer,l=a.workspaceTreeview.findNodeByElement(this.workspace);l&&(l.iconClass="img_workspace-dark-repository",this.workspace.renderSynchronizeButton(l)),a.showRepositoryButtonIfNeeded(this.workspace),window.history.back()}else alert(n)})}cancelButtonClicked(){window.history.back()}}class Wy{constructor(t){r(this,"guiReady",!1);r(this,"$mainHeading");r(this,"$settingsDiv");r(this,"$repoName");r(this,"$repoDescription");r(this,"$repoPublishedTo");r(this,"$repoOwner");r(this,"$repoListDiv");r(this,"$userlistDiv");r(this,"$exitButton");r(this,"$saveButton");r(this,"$deleteButton");r(this,"$settingsSecretRead");r(this,"$settingsSecretWrite");r(this,"publishedToItems",[]);r(this,"repositoryOwnerItems",[]);r(this,"users",[]);r(this,"workspace");r(this,"repositoryInfo");this.main=t}initGUI(){this.guiReady=!0;let t=this,e=y("#updateRepo-div");e.append(this.$mainHeading=j("updateRepo-mainHeading","createUpdateRepo-mainHeading","")),this.$mainHeading.append(j("","",oe.caption())),this.$mainHeading.append(this.$exitButton=j("","jo_synchro_button",oe.backToCoding(),{"background-color":"var(--speedcontrol-grip)",color:"var(--fontColorLight)","font-size":"10pt"})),this.$exitButton.on("click",()=>{t.exitButtonClicked()});let i=j("updateRepo-divBelow");e.append(i);let n=j("updateRepo-divLeft");i.append(n),n.append(j("","updateRepo-minorHeading",oe.repositories())),this.$repoListDiv=j("updateRepo-repoListDiv"),n.append(this.$repoListDiv);let s=j("updateRepo-divRight");i.append(s),this.$settingsDiv=j("","createUpdateRepo-settingsDiv"),s.append(this.$settingsDiv),this.$settingsDiv.append(y(`<div class="createUpdateRepo-settingsLabel">${et.nameOfRepository()}</div>`)),this.$settingsDiv.append(this.$repoName=y('<input type="text" class="createUpdateRepo-inputcolumn"></input>')),this.$repoName.on("input",()=>{t.enableSaveButton()}),this.$settingsDiv.append(y(`<div class="createUpdateRepo-settingsLabel">${et.description()}</div>`)),this.$settingsDiv.append(this.$repoDescription=y('<textarea class="createUpdateRepo-inputcolumn" style="min-height: 4em"></textarea>')),this.$repoDescription.on("input",()=>{t.enableSaveButton()}),this.$settingsDiv.append(y(`<div class="createUpdateRepo-settingsLabel">${et.publishedFor()}</div>`)),this.$settingsDiv.append(this.$repoPublishedTo=y('<select class="createUpdateRepo-inputcolumn"></select>')),this.$repoPublishedTo.on("change",()=>{t.enableSaveButton()}),this.$settingsDiv.append(y('<div class="createUpdateRepo-settingsLabel">'+oe.owner()+"</div>")),this.$settingsDiv.append(this.$repoOwner=y('<select class="createUpdateRepo-inputcolumn"></select>')),this.$repoOwner.on("change",()=>{t.enableSaveButton()}),this.$settingsDiv.append(y(`<div class="createUpdateRepo-settingsLabel">${oe.codeForRepoReadAccess()}</div>`));let a=y('<div class="createUpdateRepo-settingsSecret"></div>');this.$settingsDiv.append(a),this.$settingsSecretRead=y('<div class="createUpdateRepo-settingsSecretSecret">---</div>'),a.append(this.$settingsSecretRead);let l=y(`<button class="jo_button jo_copy_secret_button jo_active">${oe.copy()}</button>`);a.append(l),l.on("pointerdown",()=>{Gl(this.$settingsSecretRead.text())});let h=y(`<button class="jo_button jo_set_secret_button jo_active">${oe.change()}</button>`);a.append(h),h.on("pointerdown",()=>{t.setSecret(!0,!1)}),this.$settingsDiv.append(y(`<div class="createUpdateRepo-settingsLabel">${oe.codeForRepoWriteAccess()}</div>`));let c=y('<div class="createUpdateRepo-settingsSecret"></div>');this.$settingsDiv.append(c),this.$settingsSecretWrite=y('<div class="createUpdateRepo-settingsSecretSecret">---</div>'),c.append(this.$settingsSecretWrite);let u=y(`<button class="jo_button jo_copy_secret_button jo_active">${oe.copy()}</button>`);c.append(u),u.on("pointerdown",()=>{Gl(this.$settingsSecretWrite.text())});let g=y(`<button class="jo_button jo_set_secret_button jo_active">${oe.change()}</button>`);c.append(g),g.on("pointerdown",()=>{t.setSecret(!1,!0)}),s.append(this.$userlistDiv=j("updateRepo-userlistDiv")),this.$userlistDiv.append(j(null,"updateRepo-userlistheading",oe.repositoryUsers(),{"grid-column":1})),this.$userlistDiv.append(j(null,"updateRepo-userlistheading",oe.writeAccess(),{"grid-column":2}));let f=j("updateRepo-buttonDiv");f.append(this.$saveButton=j("","jo_synchro_button",oe.saveChanges(),{"background-color":"var(--updateButtonBackground)",color:"var(--updateButtonColor)"})),this.$saveButton.on("click",()=>{t.saveButtonClicked()}),this.$saveButton.hide(),s.append(f)}setSecret(t,e){this.main.networkManager.sendSetSecret(this.repositoryInfo.id,t,e,i=>{let n=this.repositoryInfo.id+"T";this.$settingsSecretRead.text(n+i.secret_read),this.$settingsSecretWrite.text(n+i.secret_write)})}enableSaveButton(){this.$saveButton.show()}show(t){this.guiReady||this.initGUI(),y("#updateRepo-div").css("visibility","visible"),y("#main").css("visibility","hidden");let n=this.main.user,s=!(n.is_teacher||n.is_admin||n.is_schooladmin);this.publishedToItems=[{value:0,object:0,caption:et.privateRepository()},{value:1,object:1,caption:s?et.publishedToClassStudents():et.publishedToClasses()},{value:2,object:2,caption:et.publishedToSchool()}],no(this.$repoPublishedTo,this.publishedToItems,0),this.$saveButton.show(),this.showRepositoryList();let a=this;this.main.windowStateManager.registerOneTimeBackButtonListener(()=>{a.hide()})}deleteRepository(t){let e=this,i={repository_id:t.id};Re("deleteRepository",i,()=>{e.showRepositoryList();let n=e.main.workspaceList.filter(s=>s.repository_id==t.id);for(let s of n){s.repository_id=null;let a=this.main.projectExplorer.workspaceTreeview.findNodeByElement(s);a.iconClass="img_workspace-dark",s.renderSynchronizeButton(a)}})}showRepositoryList(){this.emptyRepositoryInfo();let t={onlyOwnRepositories:!0};this.$repoListDiv.empty();let e=this;Re("getRepositoryList",t,i=>{let n,s;if(i.repositories.length==0){alert(oe.noRepositoryPresent()),e.exitButtonClicked();return}i.repositories.forEach(a=>{let l=j("","updateRepo-repoListItem"),h=j("","",a.name),c=y(`<div class="img_delete jo_button jo_active" title="${oe.deleteRepository()}"></div>`);l.append(h,c),this.$repoListDiv.append(l),l.on("click",u=>{e.selectRepository(l,a)}),l.data("repoInfo",a),s==null&&(s=a,n=l),c.on("click",u=>{u.preventDefault(),Vn([{caption:oe.cancel(),callback:()=>{}},{caption:oe.sureDelete(),color:"#ff6060",callback:()=>{e.deleteRepository(a)}}],u.pageX+2,u.pageY+2),u.stopPropagation()})}),n!=null&&this.selectRepository(n,s)},i=>{console.log(i),alert(oe.noRepositoryPresent()),e.exitButtonClicked()})}selectRepository(t,e){if(this.repositoryInfo=e,this.emptyRepositoryInfo(),this.$saveButton.is(":visible")){let a=this.$repoListDiv.find(".active").first().data("repoInfo");a&&alert(oe.changesNotSaved(a.name))}this.$saveButton.hide(),this.$repoListDiv.find(".updateRepo-repoListItem").removeClass("active"),t.addClass("active"),this.$repoName.val(e.name),this.$repoDescription.val(e.description),this.$repoPublishedTo.val(e.published_to),this.$settingsSecretRead.text(e.secret_read==null?"--------":e.id+"T"+e.secret_read),this.$settingsSecretWrite.text(e.secret_write==null?"--------":e.id+"T"+e.secret_write),this.$repoOwner.empty(),this.$userlistDiv.children().not(".updateRepo-userlistheading").remove();let i={repository_id:e.id},n=this;Re("getRepositoryUserList",i,s=>{s.repositoryUserList.forEach(l=>{let h=j("","updateRepo-userDiv",`${l.firstName} ${l.lastName} (${l.username})`,{"grid-column":1}),c=j("","canWriteDiv","",{"grid-column":2}),u=y('<input type="checkbox">');c.append(u),u.attr("checked",l.canWrite),u.data("user",l),u.on("change",()=>{n.enableSaveButton()}),n.$userlistDiv.append(h,c)}),n.$repoOwner.empty();let a=s.repositoryUserList.map(l=>({caption:`${l.firstName} ${l.lastName} (${l.username})`,object:l,value:l.user_id+""}));s.repositoryUserList.some(l=>l.user_id==e.owner_id)||a.push({caption:`${e.owner_name} (${e.owner_username})`,object:{user_id:e.owner_id,username:e.owner_username,firstName:"",lastName:"",klasse:"",canWrite:!0},value:e.owner_id+""}),no(n.$repoOwner,a,e.owner_id+"")})}emptyRepositoryInfo(){this.$repoOwner.empty(),this.$repoName.val(""),this.$repoDescription.val(""),this.$userlistDiv.find(".updateRepo-userDiv").remove(),this.$userlistDiv.find(".canWriteDiv").remove()}hide(){y("#updateRepo-div").css("visibility","hidden"),y("#main").css("visibility","visible")}saveButtonClicked(){let t=this,i=this.$repoListDiv.find(".active").first().data("repoInfo"),n=this.$repoName.val(),s=ro(this.$repoOwner),a=ro(this.$repoPublishedTo),l={owner_id:s.user_id,description:this.$repoDescription.val(),published_to:a,repository_id:i.id,name:n},h=[];t.$userlistDiv.find("input").each((u,g)=>{let b=y(g).data("user");h.push({has_write_access:y(g).is(":checked"),user_id:b.user_id})});let c={repository_id:i.id,writeAccessList:h};i.owner_id==s.user_id||confirm(oe.transferOwnership(i.name,s.username))?Re("updateRepositoryUserWriteAccess",c,u=>{Re("updateRepository",l,g=>{i.name=n,i.owner_id=s.user_id,i.owner_name=s.firstName+" "+s.lastName,i.owner_username=s.username,i.published_to=a,i.description=l.description,alert(oe.changesSavedSuccessfully()),t.$saveButton.hide(),t.showRepositoryList()},g=>{alert(oe.error()+g),t.exitButtonClicked()})},u=>{alert(oe.error()+u),t.exitButtonClicked()}):alert(oe.notSaved())}exitButtonClicked(){window.history.back()}}class Ny{async loadFiles(t){if(t==null||t.length==0)return alert(tg.noFilesToImport()),null;let e=[];for await(let i of t)if(i.name.endsWith(".png"))try{e.push(await this.loadFile(i))}catch{}return e=e.sort((i,n)=>i.filename.localeCompare(n.filename)),e}async loadFile(t){let e=await this.readFileAsync(t),i=to.decode(e),n=to.toRGBA8(i)[0];return{image:new Uint8Array(n),width:i.width,height:i.height,filename:t.name}}async readFileAsync(t){return new Promise((e,i)=>{let n=new FileReader;n.onload=()=>{e(n.result)},n.onerror=i,n.readAsArrayBuffer(t)})}}function Ry(p,t){let e=0,i=0;for(let h of p)h.width+=2*t,h.height+=2*t;for(const h of p)e+=h.width*h.height,i=Math.max(i,h.width);p.sort((h,c)=>c.height-h.height);const s=[{x:0,y:0,width:Math.max(Math.ceil(Math.sqrt(e/.95)),i),height:1/0}];let a=0,l=0;for(const h of p)for(let c=s.length-1;c>=0;c--){const u=s[c];if(!(h.width>u.width||h.height>u.height)){if(h.x=u.x,h.y=u.y,l=Math.max(l,h.y+h.height),a=Math.max(a,h.x+h.width),h.width===u.width&&h.height===u.height){const g=s.pop();c<s.length&&(s[c]=g)}else h.height===u.height?(u.x+=h.width,u.width-=h.width):h.width===u.width?(u.y+=h.height,u.height-=h.height):(s.push({x:u.x+h.width,y:u.y,width:u.width-h.width,height:h.height}),u.y+=h.height,u.height-=h.height);break}}for(let h of p)h.width-=2*t,h.height-=2*t,h.x+=t,h.y+=t;return{w:a,h:l,fill:e/(a*l)||0}}class Gy{constructor(t){r(this,"spriteDataList",[]);this.spritesheet=t,this.spritesheet==null||t.pixiSpritesheetData==null?this.spritesheet=new As:this.extractImagesFromSheet()}extractImagesFromSheet(){let t=this.spritesheet.pixiSpritesheetData.meta.size.w;this.spriteDataList=[];for(let e in this.spritesheet.pixiSpritesheetData.frames){let i=this.spritesheet.pixiSpritesheetData.frames[e],n=e.indexOf("#"),s=e.substring(0,n),a=Number.parseInt(e.substring(n+1)),l=new Uint8Array(i.frame.w*i.frame.h*4),h={image:l,width:i.frame.w,height:i.frame.h,x:i.frame.x,y:i.frame.y,filename:"",series:s,index:a},c=(h.y*t+h.x)*4,u=0;for(let g=0;g<i.frame.h;g++){for(let f=0;f<i.frame.w*4;f++)l[u+f]=this.spritesheet.pngImageData[c+f];c+=t*4,u+=i.frame.w*4}this.spriteDataList.push(h)}}addSprite(t,e,i,n,s,a,l){let h=[];if(i>1||e>1){let c=Math.trunc((t.width-2*n+s)/i-s),u=Math.trunc((t.height-2*n+s)/e-s);for(let g=0;g<e;g++)for(let f=0;f<i;f++){let b=n+f*(c+s),A=n+g*(u+s),k=this.cut(t,b,A,c,u);k.series=a,k.index=l+g*i+f,this.spriteDataList.push(k),h.push(k)}}else t.series=a,t.index=l,this.spriteDataList.push(t),h.push(t);return h}cut(t,e,i,n,s){let a={height:s,width:n,image:new Uint8Array(n*s*4)},l=t.image,h=a.image;for(let c=0;c<n;c++)for(let u=0;u<s;u++){let g=(e+c+(i+u)*t.width)*4,f=(c+u*n)*4;h[f]=l[g],h[f+1]=l[g+1],h[f+2]=l[g+2],h[f+3]=l[g+3]}return a}async generateAndZipSpritesheet(t="spritesheet"){let e=Ry(this.spriteDataList,1);this.spritesheet.pngImageData=new Uint8Array(e.w*e.h*4),this.spritesheet.pixiSpritesheetData={frames:{},meta:{app:"",version:"1.0",image:"dummy.png",format:"RGBA8888",size:{w:e.w,h:e.h},scale:"1"}};for(let n of this.spriteDataList){let s=(n.y*e.w+n.x)*4,a=0;for(let c=0;c<n.height;c++){for(let u=0;u<n.width*4;u++)this.spritesheet.pngImageData[s+u]=n.image[a+u];s+=e.w*4,a+=n.width*4}s=((n.y-1)*e.w+n.x)*4,a=s+e.w*4,this.spritesheet.pngImageData.copyWithin(s,a,a+n.width*4),s=((n.y+n.height)*e.w+n.x)*4,a=s-e.w*4,this.spritesheet.pngImageData.copyWithin(s,a,a+n.width*4);let l=(n.y*e.w+n.x-1)*4,h=(n.y*e.w+n.x+n.width)*4;for(let c=0;c<n.height;c++)this.spritesheet.pngImageData[l]=this.spritesheet.pngImageData[l+4],this.spritesheet.pngImageData[l+1]=this.spritesheet.pngImageData[l+5],this.spritesheet.pngImageData[l+2]=this.spritesheet.pngImageData[l+6],this.spritesheet.pngImageData[l+3]=this.spritesheet.pngImageData[l+7],this.spritesheet.pngImageData[h]=this.spritesheet.pngImageData[h-4],this.spritesheet.pngImageData[h+1]=this.spritesheet.pngImageData[h-3],this.spritesheet.pngImageData[h+2]=this.spritesheet.pngImageData[h-2],this.spritesheet.pngImageData[h+3]=this.spritesheet.pngImageData[h-1],l+=e.w*4,h+=e.w*4;this.spritesheet.pixiSpritesheetData.frames[n.series+"#"+n.index]={frame:{x:n.x,y:n.y,w:n.width,h:n.height},rotated:!1,trimmed:!1,spriteSourceSize:{x:0,y:0,w:n.width,h:n.height},sourceSize:{w:n.width,h:n.height},pivot:{x:.5,y:.5}}}let i=to.encode([this.spritesheet.pngImageData.buffer],e.w,e.h,0);this.spritesheet.pngFile=new Uint8Array(i),await this.spritesheet.makeZip(t)}}class Cl{constructor(t){r(this,"guiReady",!1);r(this,"userSpritesheet");r(this,"$mainHeading");r(this,"$importDropZone");r(this,"$uploadRect");r(this,"$messagesDiv");r(this,"$zipSizeDiv");r(this,"$uploadButtonStart");r(this,"$uploadLinesCount");r(this,"$uploadColumnsCount");r(this,"$uploadMargin");r(this,"$uploadSpace");r(this,"$uploadSeries");r(this,"$uploadIndex");r(this,"$spriteListDiv");r(this,"$buttonDiv");r(this,"$buttonCancel");r(this,"$buttonOK");r(this,"$buttonImport");r(this,"$buttonFileImport");r(this,"fileList");r(this,"hasErrors",!1);r(this,"readonly",!1);this.main=t}initGUI(){this.guiReady=!0;let t=this,e=y("#spritemanager-div");e.append(this.$mainHeading=j(null,"jo_sm_mainHeading")),this.$mainHeading.append(j("","jo_sm_heading",U.heading()));let i=j(null,"jo_sm_importExportArea",null,null,e),n=j(null,"jo_sm_importExportLeft jo_sm_writeonly",null,null,i);this.$importDropZone=j(null,"jo_sm_importDropZone",null,null,n),j(null,null,U.stepOne(),{"font-weight":"bold"},this.$importDropZone),this.$buttonFileImport=y('<input type="file" multiple="multiple" style="cursor:pointer; margin-top: 30px" class="jo_sm_writeonly"></input>'),this.$importDropZone.append(this.$buttonFileImport),this.$buttonFileImport.on("change",C=>{var w=C.target.files;t.fileList=w,s.text(w.length!=1?w.length+U.filesSelected():U.fileSelected()),this.$buttonImport.addClass("jo_active")});let s=j(null,null,"",null,this.$importDropZone);this.$importDropZone.on("dragover",C=>{C.stopPropagation(),C.preventDefault(),C.originalEvent.dataTransfer.dropEffect="copy"}),this.$importDropZone.on("drop",C=>{C.stopPropagation(),C.preventDefault();var w=C.originalEvent.dataTransfer.files;t.fileList=w,s.text(w.length!=1?w.length+U.filesSelected():U.fileSelected()),this.$buttonImport.addClass("jo_active")});let a=j(null,"jo_sm_importExportCenter jo_sm_writeonly",null,null,i);j(null,"jo_sm_importParameters",U.stepTwo(),{"margin-bottom":"10px","font-weight":"bold"},a);let l=j(null,"jo_sm_importParameters",null,null,a);this.$uploadLinesCount=this.makeIntParameterInput(l,U.rows(),1),this.$uploadColumnsCount=this.makeIntParameterInput(l,U.columns(),1),this.$uploadMargin=this.makeIntParameterInput(l,U.margin(),0),this.$uploadSpace=this.makeIntParameterInput(l,U.distance(),0);let h=j(null,"jo_sm_importParameters",null,null,a);this.$uploadSeries=this.makeStringParameterInput(h,U.series(),"Test","10em"),this.$uploadIndex=this.makeIntParameterInput(h,U.fromIndex(),0),j(null,null,null,{"border-bottom":"2px solid var(--slider)","margin-bottom":"5px"},a),this.$buttonImport=j(null,"jo_active jo_sm_button jo_sm_importButton",U.stepThree(),{width:"fit-content"},a),this.$buttonImport.on("click",()=>{t.$buttonImport.hasClass("jo_active")&&(t.importFiles(t.fileList),s.text(""),t.$buttonFileImport.val(""))});let c=j(null,"jo_sm_importExportMessages jo_sm_writeonly",null,null,i);j(null,null,U.messages(),{"font-weight":"bold"},c);let u=j(null,"jo_sm_messagesOuter jo_scrollable",null,null,c);this.$messagesDiv=j(null,"jo_sm_messagesDiv jo_scrollable","Test",null,u),this.$zipSizeDiv=j(null,"jo_sm_pngSizeDiv",U.fileSize()+"0 kB",null,c);let g=j(null,"jo_sm_importExportRight",null,null,i);j(null,"jo_sm_writeonly",U.importWholeSpritesheet(),null,g);let f=y('<input type="file" style="cursor:pointer" class="jo_sm_writeonly"></input>');g.append(f);let b=j(null,"jo_sm_buttonExportAll jo_sm_button jo_active",U.exportWholeSpritesheet(),null,g);j(null,"jo_sm_buttonDeleteAll jo_sm_button jo_active jo_sm_writeonly",U.removeAllSprites(),null,g).on("click",C=>{C.preventDefault(),Vn([{caption:U.cancel(),callback:()=>{}},{caption:U.sureDelete(),color:"#ff6060",callback:()=>{t.$spriteListDiv.empty(),t.userSpritesheet.spriteDataList=[],t.generateZipAndPrintZipSize()}}],C.pageX+2,C.pageY+2),C.stopPropagation()}),b.on("click",()=>{t.exportSpritesheet()}),f.on("change",C=>{t.importSpritesheet(C.target.files)});let k=j(null,"jo_sm_spritelistOuter",null,null,e);this.$spriteListDiv=j(null,"jo_sm_spritelistDiv jo_scrollable",null,null,k),e.append(this.$buttonDiv=j(null,"jo_sm_buttonDiv")),this.$buttonDiv.append(this.$buttonCancel=j("","jo_active jo_sm_button",U.cancel(),{"background-color":"var(--speedcontrol-grip)",color:"var(--fontColorLight)","font-size":"10pt"})),this.$buttonCancel.on("click",()=>{t.exit()}),this.$buttonDiv.append(this.$buttonOK=j("","jo_active jo_sm_button jo_sm_writeonly",U.save(),{"background-color":"var(--updateButtonBackground)",color:"var(--fontColorLight)","font-size":"10pt"})),this.$buttonOK.on("click",()=>{t.$buttonOK.hasClass("jo_active")&&t.saveAndExit()})}async importSpritesheet(t){this.userSpritesheet&&(await this.userSpritesheet.spritesheet.unpackZip(t[0]),this.userSpritesheet.extractImagesFromSheet(),this.$spriteListDiv.empty(),this.userSpritesheet.spriteDataList.forEach(e=>this.renderImageInList(e)),this.checkSeriesAndIndexesAndSetNextSpriteIndex())}async exportSpritesheet(){let t=window.prompt(U.nameOfSpritesheet(),"Spritesheet");t.endsWith(".zip")&&(t=t.replace(".zip","")),await this.userSpritesheet.generateAndZipSpritesheet(t),Mr(new Blob([this.userSpritesheet.spritesheet.zipFile]),t+".zip",!0)}async importFiles(t){let e=Number.parseInt(this.$uploadLinesCount.val()),i=Number.parseInt(this.$uploadColumnsCount.val()),n=Number.parseInt(this.$uploadMargin.val()),s=Number.parseInt(this.$uploadSpace.val()),a=this.$uploadSeries.val(),l=Number.parseInt(this.$uploadIndex.val()),h=await new Ny().loadFiles(t);for(let c of h)this.userSpritesheet.addSprite(c,e,i,n,s,a,l++).forEach(g=>this.renderImageInList(g));this.$buttonImport.removeClass("jo_active"),this.checkSeriesAndIndexesAndSetNextSpriteIndex(),setTimeout(()=>{this.printMessage(h.length+U.imagesAdded()),this.generateZipAndPrintZipSize()},500)}async generateZipAndPrintZipSize(){await this.userSpritesheet.generateAndZipSpritesheet();let t=this.userSpritesheet.spritesheet.zipFile.length;this.$zipSizeDiv.text("Spritesheet: "+Math.round(t/1024*100)/100+" kB (Max: 4 MB)");let e=t>4*1024*1024?"red":"";this.$zipSizeDiv.css("color",e)}renderImageInList(t){let e=this,i=j(null,"jo_sm_spriteListLine",null,null,this.$spriteListDiv),n=y('<canvas width="'+t.width+'" height="'+t.height+'"></canvas>'),s=n[0].getContext("2d");const a=new ImageData(new Uint8ClampedArray(t.image),t.width,t.height);s.putImageData(a,0,0);let l=300,h=100,c=t.width,u=t.height;c/l>u/h?(c=Math.min(t.width,l),u=t.height/t.width*c):(u=Math.min(t.height,h),c=t.width/t.height*u),n.css("width",c+"px"),n.css("height",u+"px"),j(null,"jo_spritepreview-innerbox",null,{width:c+"px",height:u+"px","margin-right":l-c+"px"},i).append(n);let f=j(null,"jo_sm_inputInfoDiv",null,null,i),b=j(null,"jo_sm_inputDiv",null,null,f);if(!this.readonly){let C=this.makeStringParameterInput(b,U.series(),t.series?t.series:"","10em");C.addClass("jo_sm_series");let w=this.makeIntParameterInput(b,U.index(),t.index?t.index:0);w.addClass("jo_sm_index"),C.on("input",()=>{t.series=C.val(),e.checkSeriesAndIndexesAndSetNextSpriteIndex()}),w.on("input",()=>{t.index=w.val(),e.checkSeriesAndIndexesAndSetNextSpriteIndex()})}let A=j(null,"jo_sm_infoDiv",U.widthHeight(t.width,t.height),null,f),k=y('<span class="jo_sm_errorspan"></span>');A.append(k),this.readonly||j(null,"img_delete jo_button jo_active",null,null,i).on("pointerdown",w=>{w.preventDefault(),Vn([{caption:U.cancel(),callback:()=>{}},{caption:U.sureDelete(),color:"#ff6060",callback:()=>{let I=e.userSpritesheet.spriteDataList.indexOf(t);e.userSpritesheet.spriteDataList.splice(I,1),i.remove(),e.generateZipAndPrintZipSize(),e.checkSeriesAndIndexesAndSetNextSpriteIndex()}}],w.pageX+2,w.pageY+2),w.stopPropagation()}),this.$spriteListDiv.prepend(i)}makeIntParameterInput(t,e,i){let n=t.append(j(null,"jo_sm_parameterDiv"));j(null,"jo_sm_parameterCaption",e,null,n);let s=y('<input type="number" class="jo_sm_parameterInput" value="'+i+'" style="width: 3em"></input>');return n.append(s),s}makeStringParameterInput(t,e,i,n){let s=t.append(j(null,"jo_sm_parameterDiv"));j(null,"jo_sm_parameterCaption",e,null,s);let a=y('<input type="text" class="jo_sm_parameterInput" value="'+i+'" style="width: '+n+'"></input>');return s.append(a),a}async show(){let t=this;this.guiReady||this.initGUI(),this.$buttonFileImport.val("");let e=this.main.getCurrentWorkspace();if(e==null){alert(U.noWorkspaceSelected());return}e.repository_id!=null&&!e.has_write_permission_to_repository?(this.readonly=!0,y(".jo_sm_writeonly").hide()):(this.readonly=!1,y(".jo_sm_writeonly").show()),e.repository_id==null?this.$mainHeading.find(".jo_sm_heading").text(U.mangeWorkspaceSprites(e.name)):this.$mainHeading.find(".jo_sm_heading").text(U.mangeRepositorySprites(e.name)),this.$buttonImport.removeClass("jo_active"),this.fileList=null,y("#spritemanager-div").css("visibility","visible"),y("#main").css("visibility","hidden"),this.main.windowStateManager.registerOneTimeBackButtonListener(()=>{t.hide()});let s=new As;await s.load(e.spritesheetId),this.userSpritesheet=new Gy(s),this.$spriteListDiv.empty(),this.userSpritesheet.spriteDataList.forEach(a=>{this.renderImageInList(a)}),this.checkSeriesAndIndexesAndSetNextSpriteIndex()}setNextSpriteIndex(){let t=-1;this.userSpritesheet.spriteDataList.forEach(e=>{e.index>t&&(t=e.index)}),this.$uploadIndex.val(t+1),this.$uploadColumnsCount.val(1),this.$uploadLinesCount.val(1),this.$uploadMargin.val(0),this.$uploadSpace.val(0)}async saveAndExit(){await this.userSpritesheet.generateAndZipSpritesheet();let t=this,e=this.userSpritesheet.spriteDataList.length==0,i=this.main.getCurrentWorkspace();Cl.uploadSpritesheet(this.userSpritesheet.spritesheet.zipFile,i.id,e).then(n=>{i.spritesheetId=e?null:n,t.userSpritesheet.spritesheet.initializeSpritesheetForWorkspace(i,t.main,null).then(()=>{for(let s of i.getFiles())this.main.getCompiler().setFileDirty(s);this.main.getCompiler().triggerCompile()}),t.exit()}).catch(n=>{alert(n),t.exit()})}static async uploadSpritesheet(t,e,i){let n={"x-workspaceid":""+e,"x-filetype":i?"delete":"zip"};return He!=null&&(n["x-token-pm"]=He),new Promise((s,a)=>{y.ajax({type:"POST",async:!0,contentType:"application/octet-stream",data:t,processData:!1,headers:n,url:"servlet/uploadSprite",success:function(l){l.success?s(l.spriteFileId):a(l.message)},error:function(l,h){a(h)}})})}hide(){y("#spritemanager-div").css("visibility","hidden"),y("#main").css("visibility","visible")}exit(){window.history.back()}printMessage(t,e){let i=e==null?"":'style="color: '+e+'"';this.$messagesDiv.append(`<div ${i}>${t}</div>`);let n=this.$messagesDiv[0];n.scrollTop=n.scrollHeight}checkSeriesAndIndexesAndSetNextSpriteIndex(){if(this.readonly)return;this.hasErrors=!1;let t={};for(let n of Yo)t[n.name]=!0;let e={},i=this;this.$spriteListDiv.children().each((n,s)=>{let a=y(s).find(".jo_sm_series").val(),l=Number.parseInt(y(s).find(".jo_sm_index").val()),h=y(s).find(".jo_sm_errorspan");if(t[a]){h.text(U.identifierAlreadyUsed(a)),i.hasErrors=!0;return}if(e[a+"#"+l]){h.text(U.seriesIndexAlreadyUsed(a,l)),i.hasErrors=!0;return}h.text(""),e[a+"#"+l]=!0}),this.hasErrors?this.$buttonOK.removeClass("jo_active"):this.$buttonOK.addClass("jo_active"),this.setNextSpriteIndex()}}class Ky{start(t,e,i){}}class Hy{static addActions(t,e){t.addAction({id:"Find bracket",label:"Finde korrespondierende Klammer",keybindings:[wm.CtrlCmd|yo.KeyK],precondition:void 0,keybindingContext:void 0,contextMenuGroupId:"navigation",contextMenuOrder:1.5,run:function(i){var n;(n=i.getAction("editor.action.jumpToBracket"))==null||n.run()}}),t.addAction({id:"Toggle line comment",label:"Zeilenkommentar ein-/ausschalten",keybindings:[wm.CtrlCmd|yo.Comma],precondition:void 0,keybindingContext:void 0,contextMenuGroupId:"insert",contextMenuOrder:1.5,run:function(i){var n;console.log("Hier!"),(n=i.getAction("editor.action.commentLine"))==null||n.run()}}),e&&t.addAction({id:"Debugger Goto Cursor",label:"Führe Programm aus bis zu dieser Zeile",precondition:"Scheduler_running || Scheduler_paused",keybindingContext:void 0,contextMenuGroupId:"navigation",contextMenuOrder:1.5,run:i=>{e.getActionManager().trigger("interpreter.gotoCursor")}})}}class rg{constructor(t,e,i){r(this,"editor");r(this,"highlightCurrentMethod",!0);r(this,"cw",null);r(this,"lastPosition");r(this,"dontPushNextCursorMove",0);r(this,"debounceTimer",null);r(this,"lastMethodCallPosition");r(this,"lastPushTime",0);this.main=t,this.showMinimap=e,this.isEmbedded=i,i||new ResizeObserver(()=>{clearTimeout(this.debounceTimer),this.debounceTimer=setTimeout(()=>{var s,a;((s=this.editor)==null?void 0:s.getDomNode()).parentElement.style.width="100%",(a=this.editor)==null||a.layout()},200)}).observe(document.body)}currentlyEditedModuleIsJava(){var e;let t=(e=this.main.getCurrentWorkspace())==null?void 0:e.getCurrentlyEditedFile().name;return Ii.filenameToFileType(t).file_type==0}initGUI(t){let e=this.main.getSettings();this.editor=H.create(t[0],{language:"myJava","semanticHighlighting.enabled":!0,lightbulb:{enabled:H.ShowLightbulbIconMode.On},stickyScroll:{enabled:e.getValue("editor.stickyScroll")!=="off"},guides:{bracketPairs:e.getValue("editor.bracketPairLines")!=="off",highlightActiveBracketPair:e.getValue("editor.bracketPairLines")!=="off",bracketPairsHorizontal:e.getValue("editor.bracketPairLines")==="verticalAndUnderlined"},lineDecorationsWidth:0,peekWidgetDefaultFocus:"tree",fixedOverflowWidgets:!0,quickSuggestions:!0,quickSuggestionsDelay:10,fontSize:14,inlayHints:{enabled:"on"},fontFamily:window.javaOnlineFont==null?"Consolas, Roboto Mono":window.javaOnlineFont,fontWeight:"500",roundedSelection:!0,selectOnLineNumbers:!1,automaticLayout:!0,scrollBeyondLastLine:!1,occurrencesHighlight:"off",autoIndent:"advanced",dragAndDrop:!0,formatOnType:!0,formatOnPaste:!0,suggestFontSize:16,suggestLineHeight:22,suggest:{localityBonus:!0,insertMode:"replace"},bracketPairColorization:{enabled:!0,independentColorPoolPerBracketType:!1},autoClosingBrackets:e.getValue("editor.autoClosingBrackets"),autoClosingQuotes:e.getValue("editor.autoClosingQuotes"),autoClosingDelete:"auto",autoClosingOvertype:"auto",parameterHints:{enabled:e.getValue("editor.contextSensitiveHelp.ParameterHints")=="true",cycle:!0},mouseWheelZoom:!0,tabSize:3,insertSpaces:!0,detectIndentation:!1,minimap:{enabled:this.showMinimap},scrollbar:{vertical:"auto",horizontal:"auto"},theme:"myCustomThemeDark",wrappingIndent:"same"}),this.createContextKeys(),this.editor.onDidChangeModelContent(n=>{const s=this.main.getInterpreter().scheduler.state;[Q.stopped,Q.error,Q.not_initialized].includes(s)||this.main.getActionManager().trigger("interpreter.stop"),this.main.getCompiler().triggerCompile()});let i=this;if(this.editor.onDidChangeConfiguration(n=>{if(n.hasChanged(H.EditorOption.fontSize)){let s=this.editor.getOption(H.EditorOption.fontSize);this.setFontSize(s)}}),!this.isEmbedded){let n=this.main;n.windowStateManager.registerBackButtonListener(s=>{var c;let a=s.state;if(s.state==null)return;let l=n.workspaceList.find(u=>u.id==a.workspace_id);if(l==null)return;let h=l.findFileById(a.file_id);h!=null&&(l!=n.getCurrentWorkspace()&&(i.dontPushNextCursorMove++,n.projectExplorer.setWorkspaceActive(l),i.dontPushNextCursorMove--),h!=((c=n.getCurrentWorkspace())==null?void 0:c.getCurrentlyEditedFile())&&(i.dontPushNextCursorMove++,n.projectExplorer.setFileActive(h),i.dontPushNextCursorMove--),i.dontPushNextCursorMove++,i.editor.setPosition(a.position),i.editor.revealPosition(a.position),i.dontPushNextCursorMove--,i.pushHistoryState(!0,a))})}return this.editor.onDidChangeCursorPosition(n=>{var a,l,h;let s=(l=(a=this.main.getCurrentWorkspace())==null?void 0:a.getCurrentlyEditedFile())==null?void 0:l.id;s!=null&&((this.lastPosition==null||n.source=="api"||s!=this.lastPosition.file_id||Math.abs(this.lastPosition.position.lineNumber-n.position.lineNumber)>20)&&this.dontPushNextCursorMove==0?this.pushHistoryState(!1,this.getPositionForHistory()):s==((h=history.state)==null?void 0:h.module_id)&&this.pushHistoryState(!0,this.getPositionForHistory())),i.onEvaluateSelectedText(n),i.onShowSignatureHelp(n)}),this.editor.onDidChangeModel(n=>{if(this.main.getCurrentWorkspace()==null)return;let s=this.main.getCurrentWorkspace().getCurrentlyEditedFile();this.main instanceof Pd&&s!=null&&(this.main.projectExplorer.setActiveAfterExternalModelSet(s),(this.lastPosition==null||s.id!=this.lastPosition.file_id)&&this.dontPushNextCursorMove==0&&this.pushHistoryState(!1,this.getPositionForHistory()))}),setTimeout(()=>{H.remeasureFonts()},2e3),Hy.addActions(this.editor,this.main),this.editor}async onShowSignatureHelp(t){var l,h,c;let e=this.editor.getModel(),i,n=(l=this.main.getBottomDiv())==null?void 0:l.console;if(((h=n==null?void 0:n.editor)==null?void 0:h.getModel())!=e&&(i=(c=this.main.getCurrentWorkspace())==null?void 0:c.getModuleForMonacoModel(e)),!i)return;let s=i.methodCallPositions[t.position.lineNumber];if(!s)return;let a=s.filter(u=>u.identifierRange.endColumn<t.position.column&&u.rightBracketPosition.column>=t.position.column);if(a.length>0){let u=a[0];if(u){if(u!=this.lastMethodCallPosition){let g=0;if(Array.isArray(u.possibleMethods))for(let f of u.possibleMethods)f instanceof Pi&&f.parameters.length>g&&(g=f.parameters.length);else typeof u.possibleMethods=="string"&&(u.possibleMethods.indexOf("print")>=0&&(g=u.commaPositions.length+1),u.possibleMethods.indexOf("for")>=0&&(g=2));if(g>1&&this.main.getSettings().getValue("editor.contextSensitiveHelp.ParameterHints")=="true"){this.lastMethodCallPosition=u,setTimeout(()=>{this.editor.trigger("xy","editor.action.triggerParameterHints",{})},10);return}}}else this.lastMethodCallPosition=void 0}}createContextKeys(){Object.values(Q).filter(t=>typeof t=="string").forEach(t=>this.main.getActionManager().registerEditorContextKey("Scheduler_"+t,this.editor.createContextKey("Scheduler_"+t,!1)))}getPositionForHistory(){var e;let t=(e=this.main.getCurrentWorkspace())==null?void 0:e.getCurrentlyEditedFile();if(t!=null)return{position:this.editor.getPosition(),workspace_id:this.main.getCurrentWorkspace().id,file_id:t.id}}pushHistoryState(t,e){if(!(this.main.isEmbedded()||e==null)){if(t)history.replaceState(e,"");else{let i=new Date().getTime();i-this.lastPushTime>200?history.pushState(e,""):history.replaceState(e,""),this.lastPushTime=i}this.lastPosition=e}}setFontSize(t){let e=this.editor.getOptions().get(H.EditorOption.fontSize);this.main instanceof Pd&&this.main.viewModeController.saveFontSize(t),t!=e&&this.editor.updateOptions({fontSize:t});let i=this.main.getBottomDiv();i!=null&&i.console!=null&&(i.console.editor.updateOptions({fontSize:t}),i.$bottomDiv.find(".jo_commandline").css({height:t*1.1+4+"px","line-height":t*1.1+4+"px"}),i.console.editor.layout()),y(".jo_editorFontSize").css("font-size",t+"px"),y(".jo_editorFontSize").css("line-height",t+2+"px"),document.documentElement.style.setProperty("--breakpoint-size",t+"px"),document.documentElement.style.setProperty("--breakpoint-radius",t/2+"px")}async onEvaluateSelectedText(t){let e=this;if(e.cw!=null&&(e.editor.removeContentWidget(e.cw),e.cw=null),e.main.getInterpreter().scheduler.state==Q.paused){let n=e.editor.getModel().getValueInRange(e.editor.getSelection());if(n!=null&&n.length>0){let a=await this.main.getRepl().executeAsync(n,!0);typeof a<"u"&&H.colorize(n+": "+a.text,"myJava",{tabSize:3}).then(l=>{l.endsWith("<br/>")&&(l=l.substr(0,l.length-5)),e.cw={getId:function(){return"my.content.widget"},getDomNode:function(){return y('<div class="jo_editorTooltip jo_codeFont">'+l+"</div>")[0]},getPosition:function(){return{position:t.position,preference:[H.ContentWidgetPositionPreference.ABOVE,H.ContentWidgetPositionPreference.BELOW]}}},e.editor.addContentWidget(e.cw)})}}}dontDetectLastChange(){}}class Zu extends Bi{constructor(e,i){super(o.FileNotFoundExceptionComment(e),i);r(this,"stacktrace",[]);this.filename=e,this.cause=i}}r(Zu,"__javaDeclarations",[{type:"declaration",signature:"class FileNotFoundException extends Exception"},{type:"method",signature:"public FileNotFoundException()",native:Bi.prototype._constructor},{type:"method",signature:"public FileNotFoundException(String message)",native:xe.prototype._constructor_m},{type:"method",signature:"public FileNotFoundException(Throwable cause)",native:xe.prototype._constructor_c},{type:"method",signature:"public FileNotFoundException(String message, Throwable cause)",native:xe.prototype._constructor_m_c},{type:"method",signature:"public String toString()",native:xe.prototype._toString}]),r(Zu,"type");class sg{constructor(t){this.main=t}read(t){return this.getFile(t).getText()}write(t,e){this.getFile(t).setText(e)}append(t,e){let i=this.getFile(t);i.setText(i.getText()+e)}getFile(t){var i;let e=(i=this.main.getCurrentWorkspace())==null?void 0:i.getFiles().find(n=>n.name==t);if(!e)throw new Zu(t);return e}}class ag{constructor(t,e){r(this,"$input");this.$runDiv=t,this.main=e}waitForKey(t,e){var s;let i=(s=this.main.getInterpreter())==null?void 0:s.keyboardManager;if(i||e(void 0),t&&t.length>0){for(let a of t)if(i.isPressed(a)){e(a);return}}else if(i.isAnyKeyPressed()){e(i.getAnyPressedKey());return}let n={onKeyDown:(a,l,h,c)=>{if(!t||t.length==0){i.removeInternalKeyboardListener(n),e(a);return}if(t.indexOf(a)>=0){i.removeInternalKeyboardListener(n),e(a);return}},looseKeyboardFocus:()=>{}};i.addInternalKeyboardListener(n)}readInput(t,e,i,n){let s=this.main.getInterpreter().printManager;t!=null&&t!=""&&(s.beginOfLineState=!0,s.print(`
480
- `+t,!0,void 0),s.flush()),this.$input=y('<input class="jo_newInput" type="text"/>'),s.$outputDiv.append(this.$input);let l=e??"";this.$input.val(l),e&&(this.$input[0].selectionStart=0,this.$input[0].selectionEnd=(""+e).length);let h=this;this.$input.on("keydown",c=>{if(c.key=="Enter"){let u=this.$input.val()||"",g=i(u);if(g.errorMessage){this.$input.detach(),s.print(g.errorMessage,!0,16711680),s.flush(),s.$outputDiv.append(this.$input);let f=this.$input[0];f.scrollIntoView(),f.focus(),f.selectionStart=0,f.selectionEnd=(f.value||"").length}else s.$outputDiv.off("mousedown.inputmanager"),s.print(u,!0,16777215),this.$input.off("keydown"),this.hide(),n(g.convertedValue)}}),setTimeout(()=>{h.$input.focus()},200),s.$outputDiv.on("mousedown.inputmanager",c=>{setTimeout(()=>{var u;(u=h.$input)==null||u.focus()},200)})}hide(){this.$input!=null&&(this.$input.remove(),this.$input=null)}}const og="data:image/svg+xml,%3c!--%20By%20Sam%20Herbert%20(@sherb),%20for%20everyone.%20More%20@%20http://goo.gl/7AJzbL%20--%3e%3c!--%20Todo:%20add%20easing%20--%3e%3csvg%20width='57'%20height='57'%20viewBox='0%200%2057%2057'%20xmlns='http://www.w3.org/2000/svg'%20stroke='%23317c0e'%3e%3cg%20fill='none'%20fill-rule='evenodd'%3e%3cg%20transform='translate(1%201)'%20stroke-width='2'%3e%3ccircle%20cx='5'%20cy='50'%20r='5'%3e%3canimate%20attributeName='cy'%20begin='0s'%20dur='2.2s'%20values='50;5;50;50'%20calcMode='linear'%20repeatCount='indefinite'%20/%3e%3canimate%20attributeName='cx'%20begin='0s'%20dur='2.2s'%20values='5;27;49;5'%20calcMode='linear'%20repeatCount='indefinite'%20/%3e%3c/circle%3e%3ccircle%20cx='27'%20cy='5'%20r='5'%3e%3canimate%20attributeName='cy'%20begin='0s'%20dur='2.2s'%20from='5'%20to='5'%20values='5;50;50;5'%20calcMode='linear'%20repeatCount='indefinite'%20/%3e%3canimate%20attributeName='cx'%20begin='0s'%20dur='2.2s'%20from='27'%20to='27'%20values='27;49;5;27'%20calcMode='linear'%20repeatCount='indefinite'%20/%3e%3c/circle%3e%3ccircle%20cx='49'%20cy='50'%20r='5'%3e%3canimate%20attributeName='cy'%20begin='0s'%20dur='2.2s'%20values='50;50;5;50'%20calcMode='linear'%20repeatCount='indefinite'%20/%3e%3canimate%20attributeName='cx'%20from='49'%20to='49'%20begin='0s'%20dur='2.2s'%20values='49;5;27;49'%20calcMode='linear'%20repeatCount='indefinite'%20/%3e%3c/circle%3e%3c/g%3e%3c/g%3e%3c/svg%3e";class mo{constructor(){r(this,"$dialog");r(this,"$dialogMain");r(this,"$dialogFooter")}initAndOpen(){this.$dialog=y("#dialog"),this.$dialog.empty(),y("#main").css("visibility","hidden"),this.$dialog.append(y('<div style="height: 20px"></div><div class="dialog-main"></div><div class="dialog-footer"></div>')),this.$dialogMain=this.$dialog.find(".dialog-main"),this.$dialogFooter=this.$dialog.find(".dialog-footer"),this.$dialog.css("visibility","visible"),this.$dialogMain.empty(),this.$dialogFooter.empty()}heading(t){let e=y('<div class="dialog-heading">'+t+"</div>");return this.$dialogMain.append(e),e}addDiv(t){this.$dialogMain.append(t)}subHeading(t){let e=y('<div class="dialog-subheading">'+t+"</div>");return this.$dialogMain.append(e),e}description(t,e){let i=e==null?"":`style="color: ${e}"`,n=y(`<div class="dialog-description" ${i}>${t}</div>`);return this.$dialogMain.append(n),n}input(t,e){let i=y(`<input class="dialog-input" type="${t}" placeholder="${e}"></input>`);return this.$dialogMain.append(i),i}buttons(t){let e=y('<div class="dialog-buttonRow"></div>');this.$dialogMain.append(e);for(let i of t){let n=y(`<button style="background-color: ${i.color};margin-left: 20px">${i.caption}</button>`);n.on("click",()=>{i.callback()}),e.append(n)}}waitMessage(t){let e=y(`<div class="dialog-wait">${t}<img src="${og}"></div>`);return this.$dialogMain.append(e),i=>{let n=i?"visible":"hidden";e.css("visibility",n)}}close(){this.$dialog.css("visibility","hidden"),this.$dialog.empty(),y("#main").css("visibility","visible")}addCheckbox(t,e,i){let n='<input type="checkbox" name="'+i+'"'+(e?" checked":"")+">",s=y(n),a=y('<label for="'+i+'">'+t+"</label>"),l=y('<div class="jo_checkbox_div"></div>');return l.append(s,a),a.on("click",()=>{s.prop("checked",!s.prop("checked"))}),this.$dialogMain.append(l),()=>s.is(":checked")}}class Uy{constructor(t){this.main=t}init(){let t=y("#buttonUserSettings"),e=this;t.on("click",i=>{let n=[{caption:pt.changePassword()+"...",callback:()=>{new lg(e.main).show()}}];Vn(n,t.offset().left,t.offset().top+t.height())})}}class lg{constructor(t){r(this,"dialog");this.main=t,this.dialog=new mo}show(){this.dialog.initAndOpen(),this.dialog.heading(pt.changePassword()),this.dialog.description(pt.changePasswordDescription());let t=this.dialog.input("password",pt.oldPassword()),e=this.dialog.input("password",pt.newPassword()),i=this.dialog.input("password",pt.repeatNewPassword()),n=this.dialog.description("","red"),s=this.dialog.waitMessage(pt.pleaseWait());this.dialog.buttons([{caption:pt.cancel(),color:"#a00000",callback:()=>{this.dialog.close()}},{caption:pt.ok(),color:"green",callback:()=>{e.val()!=i.val()?n.text(pt.passwordsDontMatch()):(s(!0),Re("changePassword",{oldPassword:t.val(),newPassword:e.val()},()=>{s(!1),alert(pt.settingPasswordSuccessful()),this.dialog.close()},a=>{s(!1),n.text(a)}))}}])}}const ar=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","0","1","2","3","4","5","6","7","8","9","+","/"],Rm=[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,62,255,255,255,63,52,53,54,55,56,57,58,59,60,61,255,255,255,0,255,255,255,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,255,255,255,255,255,255,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51];function Pl(p){if(p>=Rm.length)throw new Error("Unable to parse base64 string.");const t=Rm[p];if(t===255)throw new Error("Unable to parse base64 string.");return t}function dg(p){let t="",e,i=p.length;for(e=2;e<i;e+=3)t+=ar[p[e-2]>>2],t+=ar[(p[e-2]&3)<<4|p[e-1]>>4],t+=ar[(p[e-1]&15)<<2|p[e]>>6],t+=ar[p[e]&63];return e===i+1&&(t+=ar[p[e-2]>>2],t+=ar[(p[e-2]&3)<<4],t+="=="),e===i&&(t+=ar[p[e-2]>>2],t+=ar[(p[e-2]&3)<<4|p[e-1]>>4],t+=ar[(p[e-1]&15)<<2],t+="="),t}function gm(p){if(p.length%4!==0)throw new Error("Unable to parse base64 string.");const t=p.indexOf("=");if(t!==-1&&t<p.length-2)throw new Error("Unable to parse base64 string.");let e=p.endsWith("==")?2:p.endsWith("=")?1:0,i=p.length,n=new Uint8Array(3*(i/4)),s;for(let a=0,l=0;a<i;a+=4,l+=3)s=Pl(p.charCodeAt(a))<<18|Pl(p.charCodeAt(a+1))<<12|Pl(p.charCodeAt(a+2))<<6|Pl(p.charCodeAt(a+3)),n[l]=s>>16,n[l+1]=s>>8&255,n[l+2]=s&255;return n.subarray(0,n.length-e)}class ot{}r(ot,"confirmInput",t=>d({de:`Wollen Sie die ${t} ausgewählten Workspaces wirklich importieren?`,en:`Do you really want to import the ${t} selected workspaces?`,fr:`Voulez-vous vraiment importer les ${t} workspaces sélectionnés?`})),r(ot,"importWorkspace",()=>d({de:"Workspace importieren",en:"Import workspace"})),r(ot,"importWorkspaceDescription",()=>d({de:"1. Bitte klicken Sie auf den Button 'Datei auswählen...' oder ziehen Sie eine Datei auf das gestrichelt umrahmte Feld.",en:"1. Use button 'Choose file...' or drop file on dotted rectangle."})),r(ot,"wrongFileFormat",t=>d({de:"Das Format der Datei "+t+" passt nicht.",en:"File "+t+" has wrong file format."})),r(ot,"noJson",t=>d({de:"Die Datei "+t+" ist keine gültige JSON-Datei.",en:"File "+t+" doesn't contain JSON code."})),r(ot,"withFiles",t=>d({de:"mit "+t+" Dateien",en:"with "+t+" files"})),r(ot,"dragFilesHere",()=>d({de:"Dateien hierhin ziehen",en:"Drag files here."})),r(ot,"dragDropTutorial",()=>d({de:"2. In der linken Baumansicht sehen Sie die Workspaces der importierten Datei. Sie können mehrere Workspaces/Ordner durch <Strg> + Click bzw. <Shift> + Click markieren. Ziehen Sie die gewünschten Workspaces in die rechte Baumansicht, um sie zu importieren.",en:"2. The left tree view shows the workspaces of the imported file. You can select multiple workspaces/folders using <Ctrl> + Click or <Shift> + Click. Drag and drop the desired folders/workspaces to the right tree view to import them.",fr:"2. La vue arborescente de gauche affiche les workspaces du fichier importé. Vous pouvez sélectionner plusieurs workspaces/dossiers en utilisant <Ctrl> + Clic ou <Shift> + Clic. Faites glisser et déposez les dossiers/workspaces souhaités dans la vue arborescente de droite pour les importer."})),r(ot,"cancel",()=>d({de:"Abbrechen",en:"Cancel"})),r(ot,"ok",()=>d({de:"OK",en:"OK"})),r(ot,"import",()=>d({de:"Importieren",en:"Import"})),r(ot,"serverNotReachable",()=>d({de:"Der Server ist nicht erreichbar.",en:"Server not reachable."}));class Br{static async exportAllWorkspaces(t){let e=[];for(let i of t.projectExplorer.workspaceTreeview.rootNode.getOrderedNodeListRecursively().map(n=>n.externalObject)){let n=await Br.exportWorkspace(i);e.push(n)}return e}static async exportFolder(t,e){let i=e.findNodeByElement(t);if(!i)return[];let n=i.getOrderedNodeListRecursively().map(a=>a.externalObject);n.unshift(t);let s=[];for(let a of n){let l=await Br.exportWorkspace(a);a==t&&(l.parent_folder_id=null),s.push(l)}return s}static async exportWorkspace(t){let e;if(t.spritesheetId)try{let i=new As;await i.load(t.spritesheetId),i.zipFile!=null&&(e=dg(i.zipFile))}catch{console.log("Hier!")}return{name:t.name,id:t.id,modules:t.getFiles().map(i=>Br.exportFile(i)),settings:t.settings,spritesheetBase64:e,parent_folder_id:t.parent_folder_id,isFolder:t.isFolder}}static exportFile(t){return{name:t.name,text:t.getText(),identical_to_repository_version:t.identical_to_repository_version,is_copy_of_id:t.is_copy_of_id,repository_file_version:t.repository_file_version,isFolder:t.isFolder,parent_folder_id:t.parent_folder_id}}}class Qy{constructor(t,e){r(this,"networkManager",null);this.main=t,this.owner_id=e,this.networkManager=t.networkManager}async importWorkspaces(t,e,i){for(;!e.isFolder&&!e.isRootNode;)e=e.getParent();if(!confirm(ot.confirmInput(t.length)))return;let n=new Set(t.filter(g=>g.isFolder).map(g=>g.id));t.forEach(g=>{n.has(g.parent_folder_id)||(g.parent_folder_id=null)});let s=[],a=-1,l=new Set;for(;s.length>a;){a=s.length;for(let g of t)!l.has(g.id)&&(g.parent_folder_id==null||l.has(g.parent_folder_id))&&(s.push(g),l.add(g.id))}i&&(i.init(0,s.length),i.show());let h=0,c=new Map,u=[];for(let g of s){i&&i.set(h++);let f=g.parent_folder_id==null?e:c.get(g.parent_folder_id),b=f.isRootNode()?null:f.externalObject.id,A=await this.importWorkspaceWithoutSpritesheet(g,b);if(await this.importSpritesheet(g,A),A){let k=A.repository_id==null?"img_workspace-dark":"img_workspace-dark-repository",C=f.treeview.addNode(A.isFolder,A.name,k,A);u.push(C),A.isFolder&&c.set(g.id,C)}}i&&i.hide(),u.forEach(g=>g.setCaptionColor("#00b000"))}async importSpritesheet(t,e){if(this.networkManager&&!t.isFolder&&t.spritesheetBase64&&e!=null){let i=gm(t.spritesheetBase64);try{let n=await Cl.uploadSpritesheet(i,e.id,!1);e.spritesheetId=n}catch{}}}async importWorkspaceWithoutSpritesheet(t,e=null){let i=new yi(t.name,this.main,this.owner_id);i.isFolder=t.isFolder||!1,i.settings=t.settings,i.parent_folder_id=e;let n=!0;if(this.networkManager&&(n=await this.networkManager.sendCreateWorkspace(i,this.owner_id)),n){this.main.addWorkspace(i);for(let s of t.modules){let a=await this.importFile(s,i);a&&i.addFile(a)}return i}return null}async importFile(t,e){let i=new Ue(this.main,t.name);return i.setText(t.text),i.identical_to_repository_version=t.identical_to_repository_version,i.is_copy_of_id=t.is_copy_of_id,i.repository_file_version=t.repository_file_version,i.isFolder=t.isFolder||!1,i.parent_folder_id=t.parent_folder_id||null,this.networkManager&&(this.networkManager.sendCreateFile(i,e,this.owner_id)||(i=null)),i}}class Yy{constructor(){r(this,"elementOuter");r(this,"elementInner");r(this,"parent");r(this,"min");r(this,"max");this.parent=document.getElementById("bitteWarten"),this.elementOuter=R.makeDiv(this.parent,"jo_progressBar"),this.elementInner=R.makeDiv(this.elementOuter,"jo_progressBarInner")}show(){this.parent.style.display="flex"}hide(){this.parent.style.display="none"}init(t,e){this.min=t,this.max=e}set(t,e){let i=(t-this.min)/(this.max-this.min)*100;this.elementInner.style.width=i+"%"}}class Zy{constructor(t){r(this,"dialog");this.main=t,this.dialog=new mo}show(){this.dialog.initAndOpen(),this.dialog.heading(ot.importWorkspace()),this.dialog.description(ot.importWorkspaceDescription());let t=y('<input type="file" id="file" name="file" multiple />');this.dialog.addDiv(t);let e=y('<div class="jo_importDragDropDiv" style="flex-basis: 20px; flex-grow: 1; overflow: auto"></div>'),i=R.makeDiv(e[0],"jo_importLeft","jo_scrollable"),n=R.makeDiv(e[0],"jo_importRight","jo_scrollable"),s=new di(i,{captionLine:{enabled:!0,text:"Inhalt der importierten Datei:"},withSelection:!0,selectMultiple:!0,selectWholeFolders:!0,isDragAndDropSource:!0,buttonAddElements:!1,buttonAddFolders:!1,withDeleteButtons:!1,withFolders:!0,keyExtractor:h=>h.id,parentKeyExtractor:h=>h.parent_folder_id,orderBy:"comparator"}),a=new di(n,{captionLine:{enabled:!0,text:"Ihre Workspaces:"},withSelection:!1,selectMultiple:!1,isDragAndDropSource:!1,buttonAddElements:!1,buttonAddFolders:!1,withDeleteButtons:!1,withFolders:!0,comparator:(h,c)=>h.name>c.name?1:h.name<c.name?-1:0,keyExtractor:h=>h.id,parentKeyExtractor:h=>h.parent_folder_id,orderBy:"comparator"});a.addDragDropSource({treeview:s,defaultDragKind:"copy",dropInsertKind:"asElement"}),a.dropEventCallback=(h,c)=>{this.dropEventCallback(s,a,c)},t.on("change",h=>{var c=h.originalEvent.target.files;this.fillSourceTreeview(c,s)});let l=y(`<div class="jo_workspaceimport_dropzone">${ot.dragFilesHere()}</div>`);this.dialog.addDiv(l),this.dialog.description("").text(ot.dragDropTutorial()),l.on("dragover",h=>{h.stopPropagation(),h.preventDefault(),h.originalEvent.dataTransfer.dropEffect="copy"}),l.on("drop",h=>{h.stopPropagation(),h.preventDefault();var c=h.originalEvent.dataTransfer.files;this.fillSourceTreeview(c,s)}),this.dialog.addDiv(e),this.fillDestTreeview(a),this.dialog.buttons([{caption:ot.ok(),color:"#18a000ff",callback:()=>{this.main.workspaceList=a.getOrderedNodeListRecursively().map(h=>h.externalObject),this.main.projectExplorer.renderWorkspaces(this.main.workspaceList),this.dialog.close()}}])}async dropEventCallback(t,e,i){let n=t.getOrderedListOfCurrentlySelectedNodes().map(l=>l.externalObject),s=this.main.user.id;this.main.workspacesOwnerId!=null&&(s=this.main.workspacesOwnerId);let a=new Yy;await new Qy(this.main,s).importWorkspaces(n,i,a)}fillSourceTreeview(t,e){e.clear();for(let n=0;n<t.length;n++){let s=t[n];var i=new FileReader;i.onload=a=>{let l=a.target.result;if(!(l.startsWith("{")||l.startsWith("["))){alert(ot.wrongFileFormat(s.name));return}let h=[];try{h=JSON.parse(l),Array.isArray(h)||(h=[h])}catch{alert(ot.noJson(s.name));return}for(let c of h)if(c.modules==null||c.name==null||c.settings==null){alert(ot.wrongFileFormat(s.name));return}else e.addNode(c.isFolder,c.name,c.isFolder?void 0:"img_workspace-dark",c)},i.readAsText(s)}}fillDestTreeview(t){t.clear();let e=this.main.workspaceList;for(let i of e)t.addNode(i.isFolder,i.name,"img_workspace-dark",i)}}class Xy{constructor(t){r(this,"dialog");this.main=t,this.dialog=new mo}show(){this.dialog.initAndOpen(),this.dialog.heading(Wt.reportBug()),this.dialog.description(Wt.bugReport()+":");let t=R.makeElement(this.dialog.$dialogMain[0],"textarea","jo_issuereporterr_textfield"),e=this.dialog.addCheckbox(Wt.sendCopyOfWorkspace(),!0,"jo_cbIssueAddWorkspace"),i=this.dialog.input("text",Wt.email()),n=this.dialog.input("text",Wt.firstName()),s=this.dialog.input("text",Wt.lastName());this.dialog.buttons([{caption:Wt.cancel(),color:"#a00000",callback:()=>{this.dialog.close()}},{caption:Wt.send(),color:"green",callback:async()=>{let a={workspace_id:e()?this.main.getCurrentWorkspace().id:null,description:t.value,mail:i.val(),rufname:n.val(),familienname:s.val()};(await dt("/servlet/reportIssue",a)).success&&alert(Wt.thanks()),this.dialog.close()}}])}}class x{}r(x,"Saving",()=>d({de:"Speichere...",en:"saving...",fr:"enregistrement..."})),r(x,"Saved",()=>d({de:"Gespeichert",en:"saved",fr:"enregistré"})),r(x,"OptionDefault",()=>d({de:"Standard",en:"default",fr:"par défaut"})),r(x,"OptionTrue",()=>d({de:"Ja",en:"true",fr:"Oui"})),r(x,"OptionFalse",()=>d({de:"Nein",en:"false",fr:"Non"})),r(x,"CloseButton",()=>d({de:"Schließen",en:"Close",fr:"Fermer"})),r(x,"SettingsHeading",()=>d({de:"Einstellungen",en:"Settings",fr:"Paramètres"})),r(x,"UserSettingsTabHeading",()=>d({de:"Meine Einstellungen",en:"My Settings",fr:"Mes paramètres"})),r(x,"ClassSettingsTabHeading",()=>d({de:"Klassen-Einstellungen für ",en:"Class Settings for ",fr:"Paramètres de la classe pour "})),r(x,"SchoolSettingsTabHeading",()=>d({de:"Schul-Einstellungen",en:"School Settings",fr:"Paramètres de l'école"})),r(x,"ScopeUser",()=>d({de:"Benutzer",en:"User",fr:"Utilisateur"})),r(x,"ScopeClass",()=>d({de:"Klasse",en:"Class",fr:"Classe"})),r(x,"ScopeSchool",()=>d({de:"Schule",en:"School",fr:"École"})),r(x,"EditorSettingsName",()=>d({de:"Editoreinstellungen",en:"Editor Settings",fr:"Paramètres de l'éditeur"})),r(x,"EditorSettingsDescription",()=>d({de:"Hier können Sie die Einstellungen des Editors anpassen.",en:"Here you can adjust the editor settings.",fr:"Ici, vous pouvez ajuster les paramètres de l'éditeur."})),r(x,"HoverVerbosityName",()=>d({de:"Texte beim Hovern über Code",en:"Hover-Verbosity",fr:"Verbosité des infobulles"})),r(x,"HoverVerbosityDescription",()=>d({de:"Menge an Informationen, die in Hover-Infoballons angezeigt werden.",en:"Information amount displayed in hover tooltips.",fr:"Quantité d'informations affichées dans les infobulles."})),r(x,"ShowHelpOnKeywordsAndOperators",()=>d({de:"Hilfstexte für Schlüsselwörter und Operatoren anzeigen",en:"Show help texts for keywords and operators",fr:"Afficher les textes d'aide pour les mots-clés et les opérateurs"})),r(x,"ShowMethodDeclaration",()=>d({de:"Methodendeklarationen anzeigen",en:"Show method declarations",fr:"Afficher les déclarations de méthodes"})),r(x,"None",()=>d({de:"Keine",en:"None",fr:"Aucun"})),r(x,"Declarations",()=>d({de:"Deklarationen",en:"Declarations",fr:"Déclarations"})),r(x,"DeclarationsAndComments",()=>d({de:"Deklarationen und Kommentare",en:"Declarations and Comments",fr:"Déclarations et commentaires"})),r(x,"ShowClassDeclaration",()=>d({de:"Klassendeklarationen anzeigen",en:"Show class declaration",fr:"Afficher la déclarations de la classes"})),r(x,"ShowStructureStatementHelp",()=>d({de:"Hilfe für Strukturanweisungen anzeigen",en:"Show help for structure statements",fr:"Afficher l'aide pour les instructions de structure"})),r(x,"TypingAssistanceName",()=>d({de:"Unterstützung bei der Eingabe von Code",en:"Typing Assistance",fr:"Assistance à la saisie de code"})),r(x,"EditorViewSettings",()=>d({de:"Anzeigeeinstellungen des Editors",en:"Editor View Settings",fr:"Paramètres d'affichage de l'éditeur"})),r(x,"EditorViewSettingsDescription",()=>d({de:"Hier können Sie die Anzeigeeinstellungen des Editors anpassen.",en:"You can adjust the editor view settings here.",fr:"Vous pouvez ajuster les paramètres d'affichage de l'éditeur ici."})),r(x,"TypingAssistanceDescription",()=>d({de:"Hier können Sie die Eingabeunterstützung des Editors anpassen.",en:"Here you can adjust the typing assistance of the editor.",fr:"Ici, vous pouvez ajuster l'assistance à la saisie de l'éditeur."})),r(x,"AutoClosingBracketsName",()=>d({de:"Automatisches Schließen von Klammern",en:"Auto Closing Brackets",fr:"Fermeture automatique des parenthèses"})),r(x,"BracketPairLines",()=>d({de:"Linien zwischen Klammerpaaren anzeigen",en:"Display lines between bracket pairs",fr:"Afficher les lignes entre les paires de parenthèses"})),r(x,"StickyScroll",()=>d({de:"Sticky Scroll",en:"Sticky Scroll",fr:"Défilement fixe"})),r(x,"StickyScrollDescription",()=>d({de:"Zeigt die aktuellen Blocküberschriften (z.B. Methoden- oder Klassennamen) immer oben im Editor an, auch wenn diese nicht mehr im sichtbaren Bereich sind.",en:"Always displays the current block headers (e.g., method or class names) at the top of the editor, even when they are no longer in the visible area.",fr:"Affiche toujours les en-têtes de bloc actuels (par exemple, les noms de méthodes ou de classes) en haut de l'éditeur, même lorsqu'ils ne sont plus dans la zone visible."})),r(x,"BracketPairLinesDescription",()=>d({de:"Vertikale Linien zwischen passenden Klammerpaaren anzeigen, gegebenfalls um Unterstreichung des Scope-Beginns.",en:"Display vertical lines between matching bracket pairs, possibly with underlined scope-start.",fr:"Afficher des lignes verticales entre les paires de parenthèses correspondantes, éventuellement avec le début du scope souligné."})),r(x,"BracketPairLinesOff",()=>d({de:"Keine Linien anzeigen",en:"Do not display lines",fr:"Ne pas afficher de lignes"})),r(x,"BracketPairLinesVertical",()=>d({de:"Vertikale Linien anzeigen (entspricht Scope)",en:"Display vertical lines (according to scope)",fr:"Afficher des lignes verticales (selon le scope)"})),r(x,"BracketPairLinesVerticalAndUnderlined",()=>d({de:"Vertikale Linien und Unterstreichung anzeigen",en:"Display vertical lines and underline",fr:"Afficher des lignes verticales et souligner"})),r(x,"AutoSemicolonsName",()=>d({de:"Automatisches Ergänzen von Strichpunkten",en:"Auto Semicolons",fr:"Point-virgules automatiques"})),r(x,"AutoSemicolonsDescription",()=>d({de:"Fehlende Strichpunkte am Ende der Zeile werden in den meisten Fällen automatisch ergänzt.",en:"Missing semicolons at the end of the line are automatically added in most cases.",fr:"Les points-virgules manquants à la fin de la ligne sont automatiquement ajoutés dans la plupart des cas."})),r(x,"On",()=>d({de:"Ein",en:"On",fr:"Activé"})),r(x,"Off",()=>d({de:"Aus",en:"Off",fr:"Désactivé"})),r(x,"AutoClosingQuotesName",()=>d({de:"Automatisches Schließen von Anführungszeichen",en:"Auto Closing Quotes",fr:"Fermeture automatique des guillemets"})),r(x,"AutoClosingBracketsDescription",()=>d({de:"Bei Eingabe von öffnenden Klammern wird automatisch die schließende Klammer hinzugefügt.",en:"Automatically add closing brackets when typing opening brackets.",fr:"Ajoute automatiquement les parenthèses fermantes lors de la saisie des parenthèses ouvrantes."})),r(x,"AutoClosingQuotesDescription",()=>d({de:"Bei Eingabe eines Anführungszeichens wird automatisch ein zweites hinter dem Cursor hinzugefügt.",en:"Automatically add a second quote behind the cursor when typing a quote.",fr:"Ajoute automatiquement un deuxième guillemet derrière le curseur lors de la saisie d'un guillemet."})),r(x,"AutoClosingBracketsAlways",()=>d({de:"Immer",en:"Always",fr:"Toujours"})),r(x,"AutoClosingBracketsNever",()=>d({de:"Nie",en:"Never",fr:"Jamais"})),r(x,"AutoClosingBracketsBeforeWhitespace",()=>d({de:"Nur vor Leerzeichen",en:"Only before whitespace",fr:"Seulement avant les espaces"})),r(x,"ClassDiagramSettingsName",()=>d({de:"Klassendiagramm",en:"Class Diagram",fr:"Diagramme de classes"})),r(x,"ClassDiagramSettingsDescription",()=>d({de:"Hier können Sie die Einstellungen für das Klassendiagramm anpassen.",en:"Here you can adjust the settings for the class diagram.",fr:"Ici, vous pouvez ajuster les paramètres du diagramme de classes."})),r(x,"ClassDiagramTypeConventionName",()=>d({de:"Darstellungsweise von Datentypen",en:"Type Representation",fr:"Représentation des types"})),r(x,"ClassDiagramBackground",()=>d({de:"Hintergrund beim Exportieren als png-Datei",en:"Background when exporting as png file",fr:"Arrière-plan lors de l'exportation en fichier png"})),r(x,"classDiagramOmitVoidReturnType",()=>d({de:'Rückgabetyp "void" im Klassendiagramm weglassen',en:'Omit "void" return type in class diagram',fr:'Omettre le type de retour "void" dans le diagramme de classes'})),r(x,"ClassDiagramOmitVoidReturnTypeDescription",()=>d({de:'Legt fest, ob im Klassendiagramm bei Methoden der Rückgabetyp "void" weggelassen werden soll.',en:'Determines whether the return type "void" should be omitted in the class diagram for methods.',fr:'Détermine si le type de retour "void" doit être omis dans le diagramme de classes pour les méthodes.'})),r(x,"show",()=>d({de:"anzeigen",en:"show",fr:"afficher"})),r(x,"omit",()=>d({de:"weglassen",en:"omit",fr:"omettre"})),r(x,"ClassDiagramBackgroundDescription",()=>d({de:"Legt fest, ob der Hintergrund des Klassendiagramms beim Exportieren als png-Datei transparent oder weiß sein soll.",en:"Determines whether the background of the class diagram should be transparent or white when exporting as a png file.",fr:"Détermine si l'arrière-plan du diagramme de classes doit"})),r(x,"ClassDiagramTypeConventionDescription",()=>d({de:"Wenn Datentypen im Klassendiagramm angezeigt werden, kann dies entweder in der Art von Java (z.B. String name) erfolgen oder in der Art von Pascal (name: String).",en:"If data types are displayed in the class diagram, they can be shown in either Java style (e.g., String name) or Pascal style (name: String).",fr:"Si les types de données sont affichés dans le diagramme de classes, ils peuvent être présentés dans le style Java (par exemple, String name) ou dans le style Pascal (name: String)."})),r(x,"ClassDiagramTypeConventionJava",()=>d({de:"Java-Stil (z.B. String name)",en:"Java Style (e.g., String name)",fr:"Style Java (par exemple, String name)"})),r(x,"ClassDiagramTypeConventionPascal",()=>d({de:"Pascal-Stil (name: String)",en:"Pascal Style (name: String)",fr:"Style Pascal (name: String)"})),r(x,"ClassDiagramBackgroundTransparent",()=>d({de:"durchsichtig",en:"transparent",fr:"transparent"})),r(x,"ClassDiagramBackgroundWhite",()=>d({de:"weiß",en:"white",fr:"blanc"})),r(x,"CompilerSettingsName",()=>d({de:"Compiler-Einstellungen",en:"Compiler settings"})),r(x,"CompilerSettingsDescription",()=>d({de:"Hier können Sie die Einstellungen des Compilers vornehmen.",en:"Here you can adjust the compiler settings."})),r(x,"ExplorerSettingsName",()=>d({de:"Explorer-Einstellungen",en:"Explorer settings"})),r(x,"ExplorerSettingsDescription",()=>d({de:"Einstellungen für den Datei- und Workspaceexplorer (im Hauptfenster links).",en:"Settings for file- and workspace explorer (in the main window on the left)."})),r(x,"CompilerShadowedSymbolErrorLevelName",()=>d({de:"Errorlevel bei verdeckten Symbolen",en:"Error level for shadowed symbols"})),r(x,"CompilerShadowedSymbolErrorLevelDescription",()=>d({de:"Welches Errorlevel soll der Fehler haben, wenn eine Variable in einem inneren Scope eine andere gleichnamige Variable in einem äußeren Scope verdeckt?",en:"What error level should the error have if a variable in an inner scope shadows another variable with the same name in an outer scope?"})),r(x,"ExplorerFileOrderName",()=>d({de:"Sortierung des Dateibaums",en:"Order of file treeview"})),r(x,"ExplorerFileOrderDescription",()=>d({de:"Hier können Sie einstellen, ob der Dateibaum grundsätzlich alphabetisch sortiert werden soll oder der Nutzer durch drag and drop eine davon abweichende Sortierung festlegen kann.",en:"You can set here whether the file tree should be sorted alphabetically by default or whether the user can define a different sorting by drag and drop."})),r(x,"ExplorerWorkspaceOrderName",()=>d({de:"Sortierung des Workspacebaums",en:"Order of workspace treeview"})),r(x,"ExplorerWorkspaceOrderDescription",()=>d({de:"Hier können Sie einstellen, ob der Workspacebaum grundsätzlich alphabetisch sortiert werden soll oder der Nutzer durch drag and drop eine davon abweichende Sortierung festlegen kann.",en:"You can set here whether the workspace tree should be sorted alphabetically by default or whether the user can define a different sorting by drag and drop."})),r(x,"ExplorerOrderComparator",()=>d({de:"Immer alphabetisch",en:"Always alphabetical",fr:"Toujours alphabétique"})),r(x,"ExplorerOrderUserDefined",()=>d({de:"Nutzerdefinierte Sortierung",en:"User-defined order",fr:"Ordre défini par l'utilisateur"})),r(x,"ErrorLevelIgnore",()=>d({de:"Ignorieren",en:"Ignore",fr:"Ignorer"})),r(x,"ErrorLevelWarning",()=>d({de:"Warnung",en:"Warning",fr:"Avertissement"})),r(x,"ErrorLevelError",()=>d({de:"Fehler",en:"Error",fr:"Erreur"})),r(x,"ErrorLevelInfo",()=>d({de:"Info",en:"Info",fr:"Info"})),r(x,"ContextSensitiveHelpName",()=>d({de:"Kontextsensitive Hilfe",en:"Context-sensitive help"})),r(x,"ContextSensitiveHelpDescription",()=>d({de:"Hier können Sie einstellen, ob in bestimmten Bereichen der Anwendung kontextsensitive Hilfetexte angezeigt werden sollen.",en:"Here you can set whether context-sensitive help texts should be displayed in certain areas of the application."})),r(x,"ContextSensitiveHelpParameterHintsName",()=>d({de:"Parameterhinweise",en:"Parameter hints"})),r(x,"ContextSensitiveHelpParameterHintsDescription",()=>d({de:"Hier können Sie einstellen, ob dann, wenn sich der Cursor in einem Methodenaufruf befindet, Hinweise zu den Parametern dieser Methode angezeigt werden sollen. <br>",en:"Here you can set whether hints about the parameters of a method should be displayed whenever the cursor is inside a method call."}));const Jy="data:image/png;base64,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",ev="data:image/png;base64,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",tv="data:image/png;base64,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",iv="data:image/png;base64,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",nv="data:image/png;base64,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",rv=""+new URL("assets/explorer-B4AQnIGl.png",import.meta.url).href,sv="data:image/png;base64,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",av="data:image/png;base64,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",ov="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfwAAABvCAIAAACGteUdAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAASdEVYdFNvZnR3YXJlAEdyZWVuc2hvdF5VCAUAABmkSURBVHhe7Z1tbBRHmsfHOJA7ReJITiSXbDLrxfEeECPzsiDOjs7gwwLCS3I2DgvhJQ4yWOytN4uSJSE+cjYb4yiQkMjLZoSR2UW2c2EQZ8HZTsyxltkViHUsPkSLtPF+vm93i/bjSeHUVd011U9VV/eMezw9M/+fng/Q1S/VPdW/rn663B2Lh8FiAAAA+UCM+jsj6FoBAABEEkgfAACKiJClTwsAAABECUgfAACKiNCkv+xffr+59z8raUkYNFzd3PsHO9pP0NIipPuPvdPf9n7122paAAAAPuSD9G32rzoF6TPyTfqLD/c3fT61u2MfLQAAzDqQPsg6a8993Xrj631dkD4AuQfSB1kH0gcgOoQu/RPVTv69rnW/e65U0ebeO6tIbqL6Ql2q9Kru4uEtfWPSv7JdrJaUWvWpbohXtN4xblfL4DvT3566eMLOtLB4p9suq774597pPzaqM4tSKzNjTeQLiiLfUnlzvaODqemMxlE28cBvTylVSs0gFvdYSZhs7dt3w9K9EkNrWfnSrtv2xWB1+5YrVtHBayO125ewwn0b2JSGw/bK+Myt5zrF6ss2d28ZvH2QrfPg0MiGvdtEkU33yPT09N2LzXQ6AEVMqNI//fs6plELJmL7385/xWWAe1aUkv8yTStXBQ/ps2XFzOy6Is1T0XonVQd+XUmVOhchewpb/6kLFU6xESFlW+5M9H8+dED82yh9a0F7Zu5x9wXDs9ThxKGvNL52nK6pklPq1Iqt1nU5yQZBpd9eOyiVDl9aYRX6SX973x662qmXDtU427boGp22+Kof1gdAEKr0Zcu7HKr6Wi615Ou+LaDuZqgr0S1rXV3UC4YNu5yI7jzbimR5dv0I2Nln0pcfpbL+NbdzEOlLHk+j1MEg/ZTl5Sop62FrCPgomPWXVUbopcgTr/SOLf0LI83DQzXVS+Lb+UXi5oaNvtKvqblgWb7pWEtZeTxeXlN57LrV5R/scV2z0dMHQCFc6bty+inDsi42yfakDEvuCRjWsrTTrZO+qni2LbI2gVvr9IKRtvQV7XICSD/DUgdv6Xtch/i/qfSVNWQJs/Rbb3zd9KaleTdm6Xc20G4+D/seAgDgRRaln3KoTsSptIwqbtol52ikL6XjXSFtS36QQBL3xSR9XXpHyRplCx/pf3FpVTkp8ZO+X+IIAOBFFqWf6q17Sl/09HXSz6yn78KcwCkq6bNFpEe4aRg/y+md1it9S0mBBZH+khVnplLSX366iSWC6taTpQAAPmRP+nJeXvW1PIXKVzdFuxL95SSFkjjKjfTdT01p6exI36qDlO6fXbj0D57vrnD36I3S37UhyS8VLfF4VVXXTT5Kx0nv2JeEA/19q2qr6KKCA/138SAXADfZkj7Nz7j96x5yQ/9Ll7XRSd9zqA/DPVzHGbuZdem7kifOIMuAWjeXOqQvfXeqZ5ZZ/O5NbRLGKP141Qd2xt8Vzuid8kNDB5RScjPRfNFyflo3JQAUPKFJf/H6ixvk1DlNzrhH0ytudWXn3cu6Bto7ofTfPTYtbbSudf/s9PQdd4sBlJajA2rdXKoZaE+y9l7Sd1XJiYCjd2ZO+bY1H1xv/iI96cfLW2p/bQ/D33Oup+pllseXxumXv5Jo+HzKvgPQST8e7+KZKQzgAUAQnvTxls0Iw43v6unzv+Hyvm4VBmyo/t3+HOW1AIggkH5R4Bq6Y+Nzs1II8Jz+aBedDkARA+kXBWpPn2eKcpXlzz52YgfZfAAIIUsfRJa6AZLT/2YXnQUAUPhA+gAAUERA+gAAUESEI30AAAB5AaQPAABFBKQPAABFBKQPAABFBKQPAABFxOxIf+fPT46PnR3/9EVaEITDR61lnRj+eZbemP7eIw/uPfIZnZoj7O/ckr+hBcF56ne3Y/f7nqKT08JqErEH92LfvEdLAMhfIiT9ZVt7h3rGxz4ZOu7W+mxIv3nB/XszdkSIFJb0Fx/ub/p8ancHfZ9+dmHKztzXrElkvjgAUSUPpO9w9NNsSX/hN/diD64tpJNBSHh9RCXbnOib++De3N9l9IZNa9nbC+iLvAHIfyIkfT+yJX2mhsgkdgqRXEmfJ3kyc/dn1zJcEICIE470T58eHzs7dHy1e2r1x8mz42PH2suF9BtfO94+PNwzPtYznmw7stKZMVgCx0P6ZZte2T8weIYt2zM2+Eb7xmfdM/hgdfN1iR3nRfbOV1BcrydTvkkiv8veeruZ9W/2GksW8ldQzKVOYkf/vntrK6OD8jz0jWlSbZ3IXY7I70u2/H361sVgdfsW9iWsg9dGarcvYYXGb+QyyjZ3bxm0X7h/cGhkw95toihFpkkeSB8UKuFI/+0OpmOiqBd/NXZ2fOjwIdHTH+uR5T5+vsn29wykX3f46Ji8TitOntoqz2LGkoI2AyCkbEuTvajS+eKgr/StBZ2Z3V8hN5cK6BdRxESvKtFVsfora5hVgkq/vXZQKh2+tMIq9JP+9r49dLVTLx2qcbYtyDB3B+mDQiUc6be8YdnWyt6UHf20Z3zs9NmmePz5vZfGzo4P7t2Ukv7ZsfO7di6O1/3kGDP10aPu1Wi1LtCV/uPZIcvyva+uWGY9MFxx5LS1obFPNknzGPE+txVpGr8+qEpfKlW/jeVZKvCWvmR5dzXIIvSSYMD86XNzaQC80ju29C+MNA8P1VQviW/nF4mbGzb6Sr+m5oJl+aZjLWXl8Xh5TeWx61aXf7CHfq/N9BObyGwpAKJPONLfeGDI9vum3mFHzVtbhq0rgdXrtqWfPLiXfxmbF81c+vZ6lEi27JSX9IblfPXdQOM3Rvyl7/nJQ3OpwFP6Xtch/uFcKv3c5XYkzNJvvfF105uW5t2Ypd/ZQLv5POx7CJmMntl4Jf0AyHvCkT7P5CRbdjYdHhs7OZxkFwCWtOGOpg9yw5K+Oy9U5NLXpXe86j+7+Ej/i0ureF/AhVH6fokjmTSlz9JBacwPQJ4RkvTXsme2R0++3TE+/HqHleI/fur48fGxs79i52y2pG9dY86ODx85opFGIApK+s7TAie8Kq9iTuCYSwPgI339h9GJ9JesODOVkv7y000sEVS3niylIU3pc9DTBwVLSNIvaz9/dnzsxNCgZfbFWw8Oj/UMJ98fHzv5MXummi3pl7M7jLGe4U8b9y4rk2cOinfqNi3pux4AmLVuLhVQv2snuqqhX08U4NI/eL67wn1xNkp/14Ykv1S0xONVVV03+SgdJ71jXxIO9Petqq2ii7rx/olNZLYUANEnJOnHD7FRm+NjZy+98fdxJ7PPx2v6Sp/bXIlApTuP24+I5eC3F8Ewj97xkr6rlP0799JnOX3PCueSxe/e1CZhjNKPV31gZ/xd4YzeKT80dEApVW8mMHoHAEJY0t/ERm06XXs+hscer5lV6cfjZQ0/abuU5OP0M5C+5428WfquAfXvdDOVhyF9mqJhIUqN0neP8bcj2OidbFO+bc0H15u/SE/68fKW2l/bw/D3nOupepnl8aVx+uWvJBo+n7LvALyk73lR9wHSB4VKWNLPY2byx/oRghvfdZViff9oDODJEYZnNj5A+qBQgfSdDEC+n+G6P/Ji4/qLV/ozuZzj3TugUIH0GeyVipl1CaOC2tPnr2QwZKgKm0xfwGAzw8UBiCqQvkOk3qefGUpOn3T8iwm8Tx8APZA+AAAUEeFI/7WXFxZSfPyvf4PI31B/0IBBmzUAhUhK+pODMW24ZvfgtZcXrqt+kk4F6VO29AeFFHT3AAC5BtKPFqo38zro7gEAcg2kHy1Ub+Z10N0DAOQaSD9aqN7M66C7BwDINZB+tFC9mddBdw8AkGvyQPqV7X/YfOqC+kWkmWOtudeO6gZamhNUb85m7PiSvepn4CO1KLOgu5cFyhp75DfwiPfvG+Bv/XTi9oY0vq4JQN5T1NK3qb5QB+mzyD/pb02QL+VC+gCYgfQh/SwG3b2wqfqQfVnlyqVV1UtomT/8m4uQPiguIH1IP4tBdy9svL7JFQxIHxQj+SN9pmZt/r2i9Y5IzW9upy9GNJdaeEtfXraudb+7cP+qU6lHAnKptZR1lTpRrSs1U3b6T73T91t/ZGdaWPxph+NQa+LUneeFVX9059T0t+2npdIvr/CJfFlRVLb0Sjv77/MD99XVisSOspTYirtKch2s+Kh1yvXOH5EjorsXNl7SF59c53Hg85G6V9Rvr3tIf/G+mjPO2//Hpvb8onvpYqm0fNuqd0f2DHuUMrpGp6en7/ZH4UsGACjki/Tv1PXeWcW+HsJEbP/bMe/VSnte5tnUbYG51MFD+uwxr7Msm0d2d2W7qEM83nBVNrtzqXBmYKXq+rUw6TNvfnkl5VNHsv7Sl2zO/G7JWkjfa7Vuv2uln/K4vSp7PXRV/KIi1kB3LywOD8lOT4XzPRYifRbXa+kHdbXS38c/0yiHdFHZuPYcSyjJkUy4PwLTxb8pfPdiRu90BiDL5In0U5Z33M377JZP5SK3Yc2lAq30lYlM5eL6QWBXF+dywqUvLWtVOGBnn0tffpTKNGp7PID0heVJKTO1tKy82lQYpJ+yvLsadBHXJYHunovm/q/ox9Ytvur3l6Wf9F0sbqzrt0p3t29zF+ikv5E/Gb695Yfs07vLdq04OtTwriP9xv5m/giBfZi3rLZ9i/Wp3qntr0prQE8fRJs8kb6re54yrKszbpMyrLk0heJ3veLVS4iEXEllWd1GPeDSp9rV2lYRrrHUcrHXtSQV1OD6ia4N0Qq7NkR3L2y80juuJIymw87RST/+s+12Yuf27jOJVf+8vkwq091AaNcMQHTJR+mnpqhF8n2AuTSFTvryEH4pJOlLzxjsKE7pa9I7qbsNunth4yH9xlrWtfdTs1b68bLGRNM1acGx21tes58HuMd6GtYMQHTJR+mznr5R66mevndpCp30FXG74caXLh7F29MXTwvskPJLPtKfQXrHQS99O0Uz1XCkkffT9bN5SJ9Ttrpl1buXdtv3CkNry62JfITowV+007kByB/yUPryM1U15SJPMZcKdNLXz+ngfphskRPpk6emOZG+fj1O0N0LG73Nt/btYzbf3FgVL6+pPDJkJeLV2bTS35poONe31s7qLCl7c4RJ/+YG3te3nyXcfulISxm7DGhpvngXD3JBZMk76bsemSr/Jdkbc6mDVvp05I8b13AdZ+xm9qUvJ0/E4MvcSl+MMXUt4gTdvbDRS7/8Z9vd2Xx3Eoa7XolznVahfcFwx2CPMyxTM7bHug+Qt566gxnpck0HIBLkgfS5YVNBre05Xt6vlF0DaLgsTzP70qblIfzVDbPU03eG6IjB8vboe42LqazN0icpGtfQTx/py1USEWj0TgjopS/n5b+4vftM99IjVg89kPTjVUsP94mX+RwcZou7xunvqjlzfZ/rokKkH49324M2MYAHRJB8kH4xQRQf/WDGd/f0pVGndPeKBTZUP52HEwDMGpB+tFCtGu3Q/ZEXuzMoZunznP5IN50OQBSA9KMFsepP33mR/wofnqmPZtGJO9/2Tv/Pf3wpivgrGay+/0/feZHuXsFjJ3aQzQfRBdKPFr2/fP7Z5Wu5T/+ta8vkYOzEyRcOHXlpcjAW2aLTk+6EPuv48yK6ewCAXAPpR4vJwdi/n1/+g/V1H56pnxyMvXl8O9frD1usvnbeFdHdAwDkGkg/WmxqsjrIPA4deYn7lEc+FtHdAwDkmkBOB7PJypUr161bVw8AAFkA0o8WNTU1a9asqaioePbZioqK7yMQCES4AelHiJUrV65Zs6a8/Fn1d0IgEIhQAtKPEOvWrauwoD8SAoFAhBWQfoSor69HVgeBQGQ1QpT+wm/uxR7ciz24tpCWgGDU19ervxACgUCEGCFKn8PUD+9nBKSPQCCyHaFLP36ib+6D2wuU9xcDfyB9BAKR7ciO9O898hmdDPyB9BEIRLYD0o8QhS39p59+Rp2IQCBmOSD9CFHY0p87d+6TTz6pTkcgELMZ4Us//t4jkH5mFLb0H3r4r2IlJfA+ApHbyIL0mxfcvxe73/cUnQ78iI70Ozo6JycnR0dH16+vU0u10di4Y2JiIpFIqEU8/vbxJ2Kx2JzS0vfff7+jo1OdIR8jgwOVvWhra7t161YoxzbEVRVhZNAqfE+fZPLypMMMf5csSJ/x2TVrzD7UnxaFLX2rp1+7I1ZZM6e0dOfOneoM+RgZHKjsRYimDnFVRRgZtArf04dHKL9LFqTPevrfvEcnA1+CSH/9+rrR0dGJiYnGxh3ydN5oksnL6iKzE76t1pL+pldjw38pWfb8nNJS5HlCj1CMwCPEVSGChO/pwyOU3yV86eNBbsYEkX5FxfcTiYR6i8c7FzNsDTMJ31ZrS/83D7j3kd8PPUIxAo8QV4UIEr6nD49QfhdIP0IElD7/4UmnPpm8LHf/+Tw8A3jr1q22tjYxZyKRmJiYaG5+bXR0lM8g34fyiwdHe98g5xblGUSr5dekyclJcjuSkj7zfqyyhnhfLDg5Oenb+kV0dHTyHRQVk7fLd1b8l5xayeTlZPKyfKzk08lcajhQfCsdHZ1eh4IcRu1KDCEvKx8oYQQxA8kwGFqFqLZYM9lfeVmxO/y+U605cZPhWJHfXS01BN+6WDZgm+F1IzMnEgn5gBgOlLm9mfeUzKBtmYY2ox5YrzVrNy0C0o8QAaWvZnh4ixG/dGPjjmTysjjbk8nLcsMVrYq3e7KsvAm16SQSCdHgyLWHr+fGjRtcNHwNsnRc0le8L1+0tKelV4i2zmtCtusrffnsIme+uZSH9kAJe2qrRHaW1z/gzqpX94GBAVVVfLtkZ82tghxzIhdycykvm0xeVpPXbW1tExMTfAb5uKmNjRxVuYH5hrzvwQ+j+nOQH9F8oMztTbtCEW1tbQMDA/I84qf0PX3EGrTSNx9kEpB+hAgofTWZI3of6pzq+axmh9Tz1qvVkpAFxJuaetMgNkSlL3n/hRdeIE2ZyNoQ6tkuL+srfVV8WrWppTy0B0o9FHI1SB28Tm9taDcnglyGtb8smVk+FPKc8s6SChOtJBIJvqA8W0dHJ99fdVnSVg01TCvSOozafr1qUrlU7IK5vfEw/0wi5BNEbTPahK22qr4HmQSkHyGCS18+63zPHNImtD1WEgFbrcFl6tmikb7j/TmlpZ2dnfJpY261cmjPDRG+0vcynW8pD+2BUg+FXA1yWLRrMAS//9DOr9bQ0DDkSqoVllelPcJizcLvfBE+Ueyv+juSSvIuiFcl0wrDzpJQzwhDD4PMrD0aJAL+puYrK2kn6iIifA8yidClj7dsZk5w6cu9bLW5iHNJJhTp823JqzVIn0zRS595f05lNR+/L6/Zt5I8zCdhBKVP7pDM9deG18MPtYZkF7xahVphIn31txC7IDI5iURiYGBgdHS0sXGH6P6rW+TIlQyejCbBKymvNqD05SPDf8Hgp0+Q30vbKnioz3K8pK9O0f7E2tpyvCoZovSd9+njFZuZkpb0ReNTz0mSwCGtJ2Pp8/UQiRikTxqop/Qd75fMmZPBeB7zSRhB6fNFgpyc5hDrERtSayjvgqFVqBUOIn2+ZjHnwMDAW2+9PTo6yp8k82OiXdYrDDcxavDtyjMH7+nLFZMfP/AwHCjf9sZD2yp4Db3SSuafwDwxrYMcrvTBTElL+ryV8LNLbutqcjMs6avN3Sx9siGT9Pk4zuf+IYNxnGqt5CDSJwlZs9bNpTy0B0p7KOSuve/xDxhk62oNSX/Wq1Woe8H96+Uj9YLxySefiD4+b5O8VK2SOYKLW23GwZcVu8xHy6R1+pjbm7wSbauQJ5qlr+6g1/HUTjQEpB8h0pK+fKsotxXSoeANIpT0DulbkcEtpNXymeWK+Ug/U++bT0K5VKQRcit97XoCBhlYQg6yumZ5F4K3Cl5beVXquCb1xoUfBLFm+TB6tbf16+uSycvkPkztIGtDvn6LOgSXPt+p/2KQ38J8oMztjYe2VfCJJK3ndWVVTx95urp1w0FWA9KPEOlKn7cb9ccW5wCX8o9/bN3Aak9vNdSco9zE5fQr7yWRVLV2Kd6mF/7dkz7Sd+f30zr51dNAhDzwmf91QijSNxwos/TlKgmC20poiCPvuGoEeRfMrULeIy5i/qcGolSuM6mtfFvAt0IaGNlftR8tilTNGUJeLc8pBT+M4nDJvwsP84EytzdDqyA7Ozo6+tZbbxtaFDl9yLM0dSC/4SCTgPQjRLrSz6/w7+k73o8tXZtufz+PgqSMhX0CXuQQiBkGpB8hIP1i8D7566p00xoIxAwD0o8QxSv9y/8d++g3rui6Gnv0iYL0vtrTl9MjCES2A9KPEMUl/ev/Z7leSH/ewzEdJYXrfYGaVkYgsheQfoQoIukP/yW28p9i21tT14Adr8disccff+JphWeeiatrQyAQmQWkHyGKRfr8lTuxWOyhea7O/kPz5s+fry6IQCBCDEg/QhSF9B3jP/bYYyWlpVYHX+7sl5SUlX1PXRaBQIQVkH6EKHzps88lisezCxY8qnb2Fyx4VF0WgUCEFZB+hCh86bMns+LB7KJFi2IlJaSzX1JaumjRInVxBAIRSkD6EaLApT/vYXUI5vz582MP/3Xs6v/aPf1Nr8ZiMXT2EYjsBaQfIQpb+vPmPfyd7zxNJpaVfc/u7O94PfbQvJI5pQsWPIqePgKRvYD0I0RhS/+73y1TJ9qd/VispBS6RyBmIyD9CFFfX7969Zpii+eeq1y4cOHy5SvUIgQCEXpA+hGisHv6CAQiCvH/h7rZx53RbEEAAAAASUVORK5CYII=";var hg=[{settingType:"group",name:x.EditorSettingsName,description:x.EditorSettingsDescription,settings:[{settingType:"group",name:x.HoverVerbosityName,description:x.HoverVerbosityDescription,settings:[{key:"editor.hoverVerbosity.showHelpOnKeywordsAndOperators",settingType:"setting",name:x.ShowHelpOnKeywordsAndOperators,description:void 0,type:"boolean",image:Jy},{key:"editor.hoverVerbosity.showMethodDeclaration",settingType:"setting",name:x.ShowMethodDeclaration,description:void 0,type:"enumeration",optionValues:["none","declarations","declarationsAndComments"],optionTexts:[x.None,x.Declarations,x.DeclarationsAndComments],image:ev},{key:"editor.hoverVerbosity.showClassDeclaration",settingType:"setting",name:x.ShowClassDeclaration,description:void 0,type:"enumeration",optionValues:["none","declarations","declarationsAndComments"],optionTexts:[x.None,x.Declarations,x.DeclarationsAndComments],image:tv}]},{settingType:"group",name:x.ContextSensitiveHelpName,description:x.ContextSensitiveHelpDescription,settings:[{key:"editor.contextSensitiveHelp.StructureStatements",settingType:"setting",name:x.ShowStructureStatementHelp,description:void 0,type:"enumeration",optionValues:["false","true"],optionTexts:[x.OptionFalse,x.OptionTrue],image:av},{key:"editor.contextSensitiveHelp.ParameterHints",settingType:"setting",name:x.ContextSensitiveHelpParameterHintsName,description:x.ContextSensitiveHelpParameterHintsDescription,type:"enumeration",optionValues:["false","true"],optionTexts:[x.OptionFalse,x.OptionTrue],image:sv,action:(p,t)=>{p.getMainEditor().updateOptions({parameterHints:{enabled:t==="true",cycle:!0}})}}]},{settingType:"group",name:x.TypingAssistanceName,description:x.TypingAssistanceDescription,settings:[{key:"editor.autoClosingBrackets",settingType:"setting",name:x.AutoClosingBracketsName,description:x.AutoClosingBracketsDescription,type:"enumeration",optionValues:["always","beforeWhitespace","never"],optionTexts:[x.AutoClosingBracketsAlways,x.AutoClosingBracketsBeforeWhitespace,x.AutoClosingBracketsNever],action:(p,t)=>{p.getMainEditor().updateOptions({autoClosingBrackets:t})}},{key:"editor.autoClosingQuotes",settingType:"setting",name:x.AutoClosingQuotesName,description:x.AutoClosingQuotesDescription,type:"enumeration",optionValues:["always","beforeWhitespace","never"],optionTexts:[x.AutoClosingBracketsAlways,x.AutoClosingBracketsBeforeWhitespace,x.AutoClosingBracketsNever],action:(p,t)=>{p.getMainEditor().updateOptions({autoClosingQuotes:t})}},{key:"editor.autoSemicolons",settingType:"setting",name:x.AutoSemicolonsName,description:x.AutoSemicolonsDescription,type:"boolean",optionTexts:[x.On,x.Off]}]},{settingType:"group",name:x.EditorViewSettings,description:x.EditorViewSettingsDescription,settings:[{key:"editor.bracketPairLines",settingType:"setting",name:x.BracketPairLines,description:x.BracketPairLinesDescription,type:"enumeration",optionValues:["off","vertical","verticalAndUnderlined"],optionTexts:[x.BracketPairLinesOff,x.BracketPairLinesVertical,x.BracketPairLinesVerticalAndUnderlined],action:(p,t)=>{p.getMainEditor().updateOptions({guides:{bracketPairs:t!=="off",highlightActiveBracketPair:t!=="off",bracketPairsHorizontal:t==="verticalAndUnderlined"}})},image:iv},{key:"editor.stickyScroll",settingType:"setting",name:x.StickyScroll,description:x.StickyScrollDescription,type:"enumeration",optionValues:["off","on"],optionTexts:[x.Off,x.On],action:(p,t)=>{p.getMainEditor().updateOptions({stickyScroll:{enabled:t!=="off"}})}}]}]},{settingType:"group",name:x.ClassDiagramSettingsName,description:x.ClassDiagramSettingsDescription,image:nv,settings:[{key:"classDiagram.typeConvention",settingType:"setting",name:x.ClassDiagramTypeConventionName,description:x.ClassDiagramTypeConventionDescription,type:"enumeration",optionValues:["java","pascal"],optionTexts:[x.ClassDiagramTypeConventionJava,x.ClassDiagramTypeConventionPascal],action:(p,t)=>{p.drawClassDiagrams(!1)}},{key:"classDiagram.background",settingType:"setting",name:x.ClassDiagramBackground,description:x.ClassDiagramBackgroundDescription,type:"enumeration",optionValues:["transparent","white"],optionTexts:[x.ClassDiagramBackgroundTransparent,x.ClassDiagramBackgroundWhite]},{key:"classDiagram.omitVoidReturnType",settingType:"setting",name:x.classDiagramOmitVoidReturnType,description:x.ClassDiagramOmitVoidReturnTypeDescription,type:"enumeration",optionValues:["show","omit"],optionTexts:[x.show,x.omit],action:(p,t)=>{p.drawClassDiagrams(!1)}}]},{settingType:"group",name:x.ExplorerSettingsName,description:x.ExplorerSettingsDescription,image:rv,settings:[{key:"explorer.fileOrder",settingType:"setting",name:x.ExplorerFileOrderName,description:x.ExplorerFileOrderDescription,type:"enumeration",optionValues:["comparator","user-defined"],optionTexts:[x.ExplorerOrderComparator,x.ExplorerOrderUserDefined],action:(p,t)=>{let e=p.projectExplorer.fileTreeview;e.config.orderBy=t,e.sort()}},{key:"explorer.workspaceOrder",settingType:"setting",name:x.ExplorerWorkspaceOrderName,description:x.ExplorerWorkspaceOrderDescription,type:"enumeration",optionValues:["comparator","user-defined"],optionTexts:[x.ExplorerOrderComparator,x.ExplorerOrderUserDefined],action:(p,t)=>{let e=p.projectExplorer.workspaceTreeview;e.config.orderBy=t,e.sort()}}]},{settingType:"group",name:x.CompilerSettingsName,description:x.CompilerSettingsDescription,settings:[{key:"compiler.shadowedSymbolErrorLevel",settingType:"setting",name:x.CompilerShadowedSymbolErrorLevelName,description:x.CompilerShadowedSymbolErrorLevelDescription,type:"enumeration",optionValues:["ignore","info","warning","error"],optionTexts:[x.ErrorLevelIgnore,x.ErrorLevelInfo,x.ErrorLevelWarning,x.ErrorLevelError],action:(p,t)=>{p.getCompiler().forceRecompililation()},image:ov}]}];class lv{constructor(t){r(this,"userSettings");r(this,"ownClassSettings");r(this,"classSettings");r(this,"schoolSettings");r(this,"currentScope","user");r(this,"currentSettingsGroup",null);r(this,"currentSettings",null);r(this,"currentClassId",null);r(this,"$settingsLeftMenuDiv");r(this,"$settingsMainDiv");r(this,"settingsExplorer");this.main=t,this.userSettings=t.settings.values.user||{},this.ownClassSettings=t.settings.values.class,this.schoolSettings=t.settings.values.school}async open(){await this.getSettingsFromServer();let t=new mo;t.initAndOpen(),this.main.windowStateManager.registerOneTimeBackButtonListener(()=>{t.close()}),t.heading(x.SettingsHeading());let e=y("<div></div>");t.addDiv(e);let i=y('<div class="jo_settingsTabBody"></div>');t.addDiv(i),this.$settingsLeftMenuDiv=y('<div class="jo_settingsLeftMenu"></div>'),i.append(this.$settingsLeftMenuDiv),this.$settingsMainDiv=y('<div class="jo_settingsMain jo_scrollable"></div>'),i.append(this.$settingsMainDiv);let n=new pm(e[0],!0),s=new vn(x.UserSettingsTabHeading(),[]);if(s.onShow=()=>{this.showSettingsData("user")},n.addTab(s),n.setActive(s),this.main.user.is_teacher&&this.classSettings&&this.classSettings.length>0){let a=new vn(x.ClassSettingsTabHeading(),[]);a.onShow=()=>{this.showSettingsData("class")},n.addTab(a);let l=y('<select class="jo_settingsSelect"></select>');a.headingDiv.append(l[0]),no(l,this.classSettings.map(h=>({value:h.classId,object:h,caption:h.className})).sort((h,c)=>h.caption.localeCompare(c.caption))),this.currentClassId=this.classSettings[0].classId,l.on("change",()=>{let h=ro(l);this.currentClassId=h.classId,this.currentScope=="class"&&this.showSettingsData()})}if(this.main.user.is_schooladmin&&this.schoolSettings){let a=new vn(x.SchoolSettingsTabHeading(),[]);a.onShow=()=>{this.showSettingsData("school")},n.addTab(a)}t.buttons([{caption:x.CloseButton(),color:"green",callback:()=>{window.history.back()}}]),this.initSettingsExplorer()}async getSettingsFromServer(){let t=await dt("/servlet/getSettings",{});t.success&&(this.classSettings=t.classSettings,this.schoolSettings=t.schoolSettings)}showSettingsData(t){if(t&&(this.currentScope=t),this.$settingsMainDiv.empty(),!!this.currentSettingsGroup){if(this.currentSettingsGroup.image){let e=y(`<img class="jo_settingImage" src="${this.currentSettingsGroup.image}">`);this.$settingsMainDiv.append(e)}this.$settingsMainDiv.append(y(`<div class="jo_settingsGroupCaption">${this.currentSettingsGroup.name()}</div>`)),this.currentSettingsGroup.description&&this.$settingsMainDiv.append(y(`<div class="jo_settingsGroupDescription">${this.currentSettingsGroup.description()}</div>`));for(let e of this.currentSettingsGroup.settings.filter(i=>i.settingType=="setting")){let i=y('<div class="jo_settingDiv"></div>');this.$settingsMainDiv.append(i),this.renderSetting(e,i)}}}renderSetting(t,e){if(t.image){e.append(y('<div class="jo_settingClearBoth"></div>'));let a=y(`<img class="jo_settingImage" src="${t.image}">`);e.append(a)}e.append(y(`<div class="jo_settingCaption">${t.name()}</div>`)),t.description&&e.append(y(`<div class="jo_settingDescription">${t.description()}</div>`));let i=t.key,n=this.getCurrentSettingValues()[i],s=this.getDefaultSettingValue(i);switch(t.type){case"boolean":let a=[x.OptionTrue(),x.OptionFalse()];t.optionTexts&&(a=t.optionTexts.map(g=>g())),a.push(x.OptionDefault()+": "+(s?a[0]:a[1]));let l=[!0,!1,void 0];this.appendSelectElement(e,a,l,n,async(g,f)=>{await this.storeAndSave(t,t.key,g,f)});break;case"string":this.appendInputElement(e,n,s,async(g,f)=>{await this.storeAndSave(t,t.key,g,f)});break;case"enumeration":let h=t.optionTexts.map(g=>g()),c=t.optionValues.indexOf(s);c==-1&&(c=0),h.push(x.OptionDefault()+": "+h[c]);let u=t.optionValues.slice();u.push(void 0),this.appendSelectElement(e,h,u,n,async(g,f)=>{await this.storeAndSave(t,t.key,g,f)});break}t.image&&e.append(y('<div class="jo_settingClearBoth"></div>'))}async storeAndSave(t,e,i,n){if(this.getCurrentSettingValues()[e]!==i){this.getCurrentSettingValues()[e]=i,t.action&&t.action(this.main,i);let a={userId:this.currentScope=="user"?this.main.user.id:void 0,klasseId:this.currentScope=="class"?this.currentClassId:void 0,schuleId:this.currentScope=="school"?this.main.user.schule_id:void 0,settings:this.getCurrentSettingValues()};n.text(x.Saving()+"..."),n.css("color","var(--loginMessageColor)"),n.show(),await dt("/servlet/updateSettings",a),n.text(`-> ${x.Saved()} ✓`),n.css("color","var(--loginButtonBackground)")}}wrapWithSavingMessageAndAppendToParent(t,e){let i=y("<div class='jo_settingsWrapper'></div>");i.append(t);let n=y("<div class='jo_settingsSavingMessage'></div>");return i.append(n),n.hide(),e.append(i),t.on("click",()=>{n.text("")}),n}appendInputElement(t,e,i,n){let s=y(`<input type='text' placeholder='default: ${i}' class='jo_settingsInput'>`);typeof e<"u"&&s.val(e);let a=this.wrapWithSavingMessageAndAppendToParent(s,t);s.on("focusout",async()=>{let l=s.val();l==""&&(l=void 0),await n(l,a)}),s.on("change",()=>{a.hide()})}appendSelectElement(t,e,i,n,s){let a=y('<select class="jo_settingsSelect"></select>'),l=this.wrapWithSavingMessageAndAppendToParent(a,t),h=[];for(let u=0;u<i.length;u++)h.push({value:""+i[u],caption:e[u],object:i[u]});no(a,h);let c=h.findIndex(u=>u.object===n);a[0].selectedIndex=c,a.on("change",async()=>{await s(ro(a),l)})}getDefaultSettingValue(t){let e;return this.currentScope=="user"&&this.ownClassSettings&&(e=this.ownClassSettings[t]),typeof e>"u"&&(e=this.schoolSettings[t]),typeof e>"u"&&(e=this.main.settings.values.default[t]),e}getCurrentSettingValues(){var t;switch(this.currentScope){case"user":return this.userSettings;case"class":return this.main.user.is_schooladmin||this.main.user.is_admin||this.main.user.is_teacher?((t=this.classSettings.find(e=>e.classId==this.currentClassId))==null?void 0:t.settings)||{}:this.ownClassSettings;case"school":return this.schoolSettings}return{}}initSettingsExplorer(){this.settingsExplorer=new di(this.$settingsLeftMenuDiv[0],{withSelection:!0,selectMultiple:!1,captionLine:{enabled:!1},buttonAddElements:!1,buttonAddFolders:!1,withFolders:!0,withDeleteButtons:!1,isDragAndDropSource:!1,orderBy:"comparator"});for(let t of hg.filter(e=>e.settingType==="group"))this.addSettingsToExplorer(t);this.settingsExplorer.nodeClickedCallback=t=>{this.currentSettingsGroup=t,this.showSettingsData()}}addSettingsToExplorer(t,e=null){this.settingsExplorer.addNode(t.settings.find(i=>i.settingType==="group")!=null,t.name(),void 0,t,e),t.settings.filter(i=>i.settingType==="group").forEach(i=>{this.addSettingsToExplorer(i,t)})}}class Je{}r(Je,"importRepository",()=>d({de:"Repository importieren",en:"Import repository"})),r(Je,"importRepositoryDescription",()=>d({de:"1. Wählen Sie eine Datei aus, die das exportierte Repository enthält, das Sie importieren möchten, oder ziehen Sie sie in das gestrichelte Rechteck.",en:"1. Select a file that contains the exported repository you want to import or drag them into the dashed rectangle."})),r(Je,"renameDescription",()=>d({de:"2. Optional: Geben Sie einen neuen Namen für das Repository ein. Wenn Sie keinen Namen angeben, wird der Name aus der Exportdatei verwendet.",en:"2. Optional: Enter a new name for the repository. If you do not provide a name, the name from the export file will be used."})),r(Je,"filesSelected",()=>d({de:"Dateien ausgewählt",en:"files selected"})),r(Je,"newName",()=>d({de:"Neuer Name",en:"New name"})),r(Je,"import",()=>d({de:"Importieren",en:"Import"})),r(Je,"cancel",()=>d({de:"Abbrechen",en:"Cancel"})),r(Je,"noFilesSelected",()=>d({de:"Es wurden keine Dateien ausgewählt. Bitte wählen Sie eine Datei aus.",en:"No files selected. Please select a file."})),r(Je,"wrongFileFormat",t=>d({de:`Die Datei "${t}" ist keine gültige Exportdatei für ein Repository. Bitte wählen Sie eine gültige Datei aus.`,en:`The file "${t}" is not a valid export file for a repository. Please select a valid file.`})),r(Je,"importSuccessfully",t=>d({de:`Das Repository aus der Datei "${t}" wurde erfolgreich importiert.`,en:`The repository from the file "${t}" has been successfully imported.`})),r(Je,"exportTipp",()=>d({de:'<strong>Tipp:</strong> Sie können ein Repository als Datei exportieren, indem Sie in der Workspace-Liste auf einen Workspace rechtsklicken, der mit dem Repository verbunden ist, und dann "Repository als Datei Exportieren" auswählen.',en:'<strong>Hint:</strong> To export a repository as a file right-click on a workspace in the workspace list that is connected to the repository and select "Export repository as file".'}));class dv{static async exportRepository(t,e){let n=await dt("/servlet/getRepository",{repository_id:t,workspace_id:e});if(!n.success)return;let s=n.repository,a;if(s.spritesheet_id)try{let l=new As;await l.load(s.spritesheet_id),l.zipFile!=null&&(a=dg(l.zipFile))}catch{console.log("Fehler beim Laden des Spritesheets.")}return{name:s.name,files:s.files,history:s.history,description:s.description,spritesheetBase64:a}}}class hv{constructor(t){this.main=t}async importRepository(t){if(t.spritesheetBase64){let e=gm(t.spritesheetBase64);try{let i=await Cl.uploadSpritesheet(e,null,!1);t.spritesheet_id=i,t.spritesheetBase64=void 0}catch{}}await dt("/servlet/importRepository",t)}}const cv=""+new URL("assets/lightbulb-CnOCH59Y.png",import.meta.url).href;class uv{constructor(t){r(this,"dialog");r(this,"files");r(this,"$newNameInput");this.main=t,this.dialog=new mo}show(){this.dialog.initAndOpen(),this.dialog.heading(Je.importRepository()),this.dialog.description(Je.importRepositoryDescription());let t=y('<input type="file" id="file" name="file" multiple />');this.dialog.addDiv(t),t.on("change",n=>{this.files=n.originalEvent.target.files});let e=y(`<div class="jo_workspaceimport_dropzone"><div>${ot.dragFilesHere()}</div></div>`);this.dialog.addDiv(e);let i=y('<div class="jo_workspaceimport_dropzone_inner"></div>');e.append(i),this.dialog.description("").text(Je.renameDescription()),this.$newNameInput=this.dialog.input("text",Je.newName()),e.on("dragover",n=>{n.stopPropagation(),n.preventDefault(),n.originalEvent.dataTransfer.dropEffect="copy"}),e.on("drop",n=>{n.stopPropagation(),n.preventDefault(),this.files=n.originalEvent.dataTransfer.files,i.text(this.files.length+" "+Je.filesSelected())}),this.dialog.buttons([{caption:Je.import(),color:"#18a000ff",callback:()=>{this.importFiles()}},{caption:Je.cancel(),color:"#caaf17ff",callback:()=>{this.dialog.close()}}]),this.dialog.addDiv(y('<div style="height:20px"></div>')),this.dialog.addDiv(y("")),this.dialog.description(`<img src="${cv}" style="width:32px; margin-right: 5px;">`+Je.exportTipp())}async importFiles(){if(!this.files||this.files.length===0){alert(Je.noFilesSelected());return}let t=this.files[0];var e=new FileReader;e.onload=async i=>{var h,c;let n=i.target.result;if(!n.startsWith("{")){alert(Je.wrongFileFormat(t.name));return}let s;try{s=JSON.parse(n)}catch{alert(Je.wrongFileFormat(t.name));return}let a=(c=(h=this.$newNameInput.val())==null?void 0:h.toString())==null?void 0:c.trim();a&&a.length>0&&(s.name=a);var l=new hv(this.main);await l.importRepository(s),alert(Je.importSuccessfully(t.name)),this.dialog.close()},e.readAsText(t)}}class mv{constructor(t){r(this,"currentSubmenu",{});r(this,"openSubmenusOnMousemove",!1);this.main=t}initGUI(t,e){let i=this,n=this.main.getMainEditor(),s={items:[{identifier:T.File(),subMenu:{items:[{identifier:T.ImportWorkspace(),action:()=>{new Zy(this.main).show()}},{identifier:T.ExportCurrentWorkspace(),action:async()=>{var u;let a=this.main.currentWorkspace;a==null&&alert(T.NoWorkspaceSelected());let l=a.name.replace(/\//g,"_"),h=(u=this.main.pruefungManagerForStudents)==null?void 0:u.pruefung,c=this.main.user;h!=null&&(l=h.name.replace(/\//g,"_")+" ("+c.familienname+" "+c.rufname+"; "+c.username+")"),Mr(await Br.exportWorkspace(a),l+".json")}},{identifier:T.ExportAllWorkspaces(),action:async()=>{let a="all_workspaces";this.main.user;let l=await Br.exportAllWorkspaces(this.main);Mr(l,a+".json")}}]}},{identifier:T.Edit(),subMenu:{items:[{identifier:T.Undo(),action:()=>{n.trigger(".","undo",{})}},{identifier:T.Redo(),action:()=>{n.trigger(".","redo",{})}},{identifier:"-"},{identifier:T.Copy(),action:()=>{n.getAction("editor.action.clipboardCopyAction").run()}},{identifier:T.Cut(),action:()=>{n.getAction("editor.action.clipboardCutAction").run()}},{identifier:T.CopyToTop(),action:()=>{n.getAction("editor.action.copyLinesUpAction").run()}},{identifier:T.CopyToBottom(),action:()=>{n.getAction("editor.action.copyLinesDownAction").run()}},{identifier:T.MoveToTop(),action:()=>{n.getAction("editor.action.moveLinesUpAction").run()}},{identifier:T.MoveToBottom(),action:()=>{n.getAction("editor.action.moveLinesDownAction").run()}},{identifier:"-"},{identifier:T.Find(),action:()=>{n.getAction("actions.find").run()}},{identifier:T.Replace(),action:()=>{n.getAction("editor.action.startFindReplaceAction").run()}},{identifier:"-"},{identifier:T.ToggleComment(),action:()=>{n.getAction("editor.action.commentLine").run()}},{identifier:T.AutoFormat(),action:()=>{n.getAction("editor.action.formatDocument").run()}},{identifier:"-"},{identifier:T.FindCorrespondingBracket(),action:()=>{n.getAction("editor.action.jumpToBracket").run()}},{identifier:"-"},{identifier:T.FoldAll(),action:()=>{n.getAction("editor.foldAll").run()}},{identifier:T.UnfoldAll(),action:()=>{n.getAction("editor.unfoldAll").run()}},{identifier:"-"},{identifier:T.TriggerSuggest(),action:()=>{n.focus(),setTimeout(()=>{n.getAction("editor.action.triggerSuggest").run()},200)}},{identifier:T.TriggerParameterHint(),action:()=>{n.getAction("editor.action.triggerParameterHints").run()}},{identifier:T.GoToDefinition(),action:()=>{n.focus(),setTimeout(()=>{n.getAction("editor.action.revealDefinition").run()},200)}}]}},{identifier:T.View(),subMenu:{items:[{identifier:T.Theme(),subMenu:{items:[{identifier:T.Dark(),action:()=>{i.switchTheme("dark")}},{identifier:T.Light(),action:()=>{i.switchTheme("light")}}]}},{identifier:"-"},{identifier:T.HighContrastOnOff(),action:()=>{n.getAction("editor.action.toggleHighContrast").run()}},{identifier:"-"},{identifier:T.LinebreakOnOff(),action:()=>{let a=this.main.editor.editor.getOption(H.EditorOption.wordWrap);a=a=="on"?"off":"on",this.main.editor.editor.updateOptions({wordWrap:a})}}]}},{identifier:T.Repository(),subMenu:{items:[{identifier:T.ConfigureOwnRepositories(),action:()=>{this.main.repositoryUpdateManager.show(null)}},{identifier:T.Checkout(),action:()=>{this.main.repositoryCheckoutManager.show(null)}},{identifier:T.importRepository(),action:()=>{new uv(this.main).show()}}]}},{identifier:T.Sprites(),subMenu:{items:[{identifier:T.AddOwnSprites(),action:()=>{this.main.spriteManager.show()}},{identifier:"-"},{identifier:T.SpriteCatalogue(),link:e+"spriteLibrary.html?csrfToken="+He+"&lang="+(t.gui_state.language??"de")}]}},{identifier:T.Help(),subMenu:{items:[{identifier:T.VideoTutorials(),link:"https://www.learnj.de/doku.php?id=api:ide_manual:start"},{identifier:T.JavaTutorial(),link:"https://www.learnj.de/doku.php"},{identifier:"-"},{identifier:T.APIDoc(),link:"https://www.learnj.de/doku.php?id=api:documentation:start"},{identifier:T.APIReference(),link:e+"api_documentation.html?csrfToken="+He+"&lang="+(t.gui_state.language??"de")},{identifier:"-"},{identifier:T.Shortcuts(),link:e+"shortcuts.html?csrfToken="+He+"&lang="+(t.gui_state.language??"de")},{identifier:"-"},{identifier:T.Changelog(),link:"https://www.learnj.de/doku.php?id=javaonline:changelog"},{identifier:T.Roadmap(),link:"https://www.learnj.de/doku.php?id=javaonline:roadmap"},{identifier:"-"},{identifier:T.EditorCommandPalette(),action:()=>{setTimeout(()=>{i.main.getMainEditor().focus(),n.getAction("editor.action.quickCommand").run()},500)}},{identifier:"-"},{identifier:T.ChangePassword(),action:()=>{new lg(i.main).show()}},{identifier:"-"},{identifier:T.BugReport(),action:()=>{new Xy(this.main).show()}},{identifier:"-"},{identifier:T.About(),link:"https://www.learnj.de/doku.php?id=javaonline:ueber"},{identifier:T.Imprint(),link:"https://www.learnj.de/doku.php?id=ide:impressum"},{identifier:T.PrivacyPolicy(),link:"https://www.learnj.de/doku.php?id=ide:datenschutzerklaerung"},{identifier:"<div class='jo_menu_version'>"+T.Version()+" 2.2.1 (8.2.2026, 16:26 Uhr)</div>",noHoverAnimation:!0}]}}]};t!=null&&(t.is_admin||t.is_schooladmin||t.is_teacher)&&s.items[0].subMenu.items.push({identifier:T.ClassesUserTests(),link:e+"administration_mc.html?csrfToken="+He+"&lang="+(t.gui_state.language??"de")}),t!=null&&t.is_admin&&s.items[0].subMenu.items.push({identifier:T.ServerStatistics(),link:e+"statistics.html?csrfToken="+He+"&lang="+(t.gui_state.language??"de")},{identifier:T.ShutdownServer(),action:()=>{confirm(T.ReallyShutdownServer())&&Re("shutdown",{},()=>{alert(T.ServerShutdownDone())},a=>{alert(a)})}}),s.items[0].subMenu.items.push({identifier:T.Settings(),action:()=>{new lv(i.main).open()}},{identifier:T.SaveAndExit(),action:()=>{y("#buttonLogout").trigger("click")}}),y("#mainmenu").empty(),this.initMenu(s,0)}switchTheme(t){this.main.viewModeController.setTheme(t)}initMenu(t,e){t.level=e,e==0?t.$element=y("#mainmenu"):(t.$element=y('<div class="jo_submenu"></div>'),y("body").append(t.$element)),t.$element.data("model",t);for(let n of t.items){if(n.identifier=="-")n.$element=y('<div class="jo_menuitemdivider"></div>');else{let s=n.noHoverAnimation?' class="jo_menuitem_nohover"':"";if(n.$element=y(`<div${s}>${n.identifier}</div>`),n.link!=null){let a=y('<a href="'+n.link+'" target="_blank" class="jo_menulink"></a>');a.attr("style","color: var(--fontColorNormal) !important"),a.on("pointerdown",l=>{l.stopPropagation()}),a.on("pointerup",l=>{l.stopPropagation(),setTimeout(()=>{t.$element.hide()},500)}),a.append(n.$element),n.$element=a}n.subMenu!=null&&this.initMenu(n.subMenu,e+1),this.initMenuitemCallbacks(t,n),e==0&&n.$element.addClass("jo_mainmenuitem")}t.$element.append(n.$element),n.$element.data("model",n)}let i=this;y(document).on("pointerdown",()=>{for(let n=0;n<5;n++)i.currentSubmenu[n]!=null&&(i.currentSubmenu[n].hide(),i.currentSubmenu[n]=null);i.openSubmenusOnMousemove=!1})}initMenuitemCallbacks(t,e){let i=this;e.action!=null&&(e.$element.on("pointerdown",n=>{n.stopPropagation()}),e.$element.on("pointerup",n=>{n.stopPropagation(),e.action(e.identifier);for(let s=0;s<5;s++)i.currentSubmenu[s]!=null&&(i.currentSubmenu[s].hide(),i.currentSubmenu[s]=null);i.openSubmenusOnMousemove=!1})),e.subMenu!=null?(e.$element.on("pointerdown",n=>{i.opensubmenu(e),i.openSubmenusOnMousemove=!0,n.stopPropagation()}),e.$element.on("mousemove.mainmenu",()=>{i.openSubmenusOnMousemove?i.opensubmenu(e):i.currentSubmenu[t.level+1]!=null&&(i.currentSubmenu[t.level+1].hide(),i.currentSubmenu[t.level+1]=null)})):e.$element.on("mousemove.mainmenu",()=>{i.currentSubmenu[t.level+1]!=null&&(i.currentSubmenu[t.level+1].hide(),i.currentSubmenu[t.level+1]=null)})}opensubmenu(t){let e=t.subMenu,i,n;e.level==1?(i=t.$element.position().left,n=30):(i=t.$element.offset().left+t.$element.width(),n=t.$element.offset().top),e.$element.css({top:""+n+"px",left:""+i+"px"}),this.currentSubmenu[e.level]!=null&&this.currentSubmenu[e.level].hide(),e.$element.show(),this.currentSubmenu[e.level]=e.$element}}class cg{constructor(t,e){r(this,"color","");r(this,"lastSpan","");r(this,"$lastSpan");r(this,"$lastDiv");r(this,"$outputDiv");r(this,"maxLines",2e3);r(this,"$lines",[]);r(this,"newLines",0);r(this,"printCommands",[]);r(this,"currentLinelength",0);r(this,"beginOfLineState",!0);this.$runDiv=t,this.main=e,y(()=>{this.$outputDiv=t.find(".jo_output"),this.clear();let i=this,n=0,s=!1,a=performance.now();setInterval(()=>{i.printCommands.length>0&&(i.flush(),performance.now()-a>200?i.$outputDiv[0].scrollTop=i.$outputDiv[0].scrollHeight:s=!0,a=performance.now()),n++%20==0&&s&&setTimeout(()=>{i.$outputDiv[0].scrollTop=i.$outputDiv[0].scrollHeight,s=!1},200)},50)})}isTestPrintManager(){return!1}showProgramEnd(){let t=this.$runDiv.find(".jo_run-programend");t.show(),t.addClass("jo_programendkf"),setTimeout(()=>{t.removeClass("jo_programendkf"),t.hide()},3e3)}flush(){if(this.newLines>=this.maxLines){this.$outputDiv.empty();let t=this.printCommands.length-1,e=0;for(;t>=0;){if(this.printCommands[t].newLine&&(e++,e>=this.maxLines)){this.printCommands.splice(0,t+1);break}t--}}this.newLines=0,this.$lastSpan!=null&&(this.$lastSpan.remove(),this.lastSpan.endsWith("</span>")&&(this.lastSpan=this.lastSpan.substring(0,this.lastSpan.length-7)));for(let t of this.printCommands)if(this.beginOfLineState&&t.text.startsWith(" ")?t.text.match(/^( *)(.*)$/)[2].length>0&&(this.beginOfLineState=!1):t.text.length>0&&(this.beginOfLineState=!1),t.text=t.text.replace(/</g,"&lt;").replace(/>/g,"&gt;"),t.color==null&&(t.color="var(--defaultOutputColor)"),(this.lastSpan==""||this.color!=t.color)&&(this.lastSpan!=""&&(this.lastSpan+="</span>"),this.lastSpan+='<span style="color: '+t.color+'">',t.newLine&&t.text==""&&(this.lastSpan+="​"),this.color=t.color),this.currentLinelength<=1e4&&(this.lastSpan+=t.text,this.currentLinelength+=t.text.length),t.newLine){this.beginOfLineState=!0,this.lastSpan.endsWith("</span>")||(this.lastSpan+="</span>"),this.$lastSpan=y(this.lastSpan),this.$lastDiv.append(this.$lastSpan),this.lastSpan="",this.$lastSpan=null,this.$lastDiv=y("<div></div>");let e=this.main.getInterpreter().inputManager.$input;e!=null?this.$lastDiv.insertBefore(e):this.$outputDiv.append(this.$lastDiv),this.$lines.push(this.$lastDiv),this.currentLinelength=0}if(this.lastSpan!=""&&(this.lastSpan.endsWith("</span>")||(this.lastSpan+="</span>"),this.$lastSpan=y(this.lastSpan),this.$lastDiv.append(this.$lastSpan)),this.$lines.length>this.maxLines*1.5){let t=this,e=t.$lines.length-t.maxLines,i=t.$lines.splice(0,e);for(let n of i)n.remove()}this.printCommands=[]}clear(){this.$outputDiv.empty(),this.$lastDiv=y("<div></div>"),this.$lines.push(this.$lastDiv),this.$outputDiv.append(this.$lastDiv),this.currentLinelength=0,this.color="",this.lastSpan="",this.printCommands=[]}print(t,e,i){if(t==null&&(t=""),e&&(t+=`
480
+ `+t,!0,void 0),s.flush()),this.$input=y('<input class="jo_newInput" type="text"/>'),s.$outputDiv.append(this.$input);let l=e??"";this.$input.val(l),e&&(this.$input[0].selectionStart=0,this.$input[0].selectionEnd=(""+e).length);let h=this;this.$input.on("keydown",c=>{if(c.key=="Enter"){let u=this.$input.val()||"",g=i(u);if(g.errorMessage){this.$input.detach(),s.print(g.errorMessage,!0,16711680),s.flush(),s.$outputDiv.append(this.$input);let f=this.$input[0];f.scrollIntoView(),f.focus(),f.selectionStart=0,f.selectionEnd=(f.value||"").length}else s.$outputDiv.off("mousedown.inputmanager"),s.print(u,!0,16777215),this.$input.off("keydown"),this.hide(),n(g.convertedValue)}}),setTimeout(()=>{h.$input.focus()},200),s.$outputDiv.on("mousedown.inputmanager",c=>{setTimeout(()=>{var u;(u=h.$input)==null||u.focus()},200)})}hide(){this.$input!=null&&(this.$input.remove(),this.$input=null)}}const og="data:image/svg+xml,%3c!--%20By%20Sam%20Herbert%20(@sherb),%20for%20everyone.%20More%20@%20http://goo.gl/7AJzbL%20--%3e%3c!--%20Todo:%20add%20easing%20--%3e%3csvg%20width='57'%20height='57'%20viewBox='0%200%2057%2057'%20xmlns='http://www.w3.org/2000/svg'%20stroke='%23317c0e'%3e%3cg%20fill='none'%20fill-rule='evenodd'%3e%3cg%20transform='translate(1%201)'%20stroke-width='2'%3e%3ccircle%20cx='5'%20cy='50'%20r='5'%3e%3canimate%20attributeName='cy'%20begin='0s'%20dur='2.2s'%20values='50;5;50;50'%20calcMode='linear'%20repeatCount='indefinite'%20/%3e%3canimate%20attributeName='cx'%20begin='0s'%20dur='2.2s'%20values='5;27;49;5'%20calcMode='linear'%20repeatCount='indefinite'%20/%3e%3c/circle%3e%3ccircle%20cx='27'%20cy='5'%20r='5'%3e%3canimate%20attributeName='cy'%20begin='0s'%20dur='2.2s'%20from='5'%20to='5'%20values='5;50;50;5'%20calcMode='linear'%20repeatCount='indefinite'%20/%3e%3canimate%20attributeName='cx'%20begin='0s'%20dur='2.2s'%20from='27'%20to='27'%20values='27;49;5;27'%20calcMode='linear'%20repeatCount='indefinite'%20/%3e%3c/circle%3e%3ccircle%20cx='49'%20cy='50'%20r='5'%3e%3canimate%20attributeName='cy'%20begin='0s'%20dur='2.2s'%20values='50;50;5;50'%20calcMode='linear'%20repeatCount='indefinite'%20/%3e%3canimate%20attributeName='cx'%20from='49'%20to='49'%20begin='0s'%20dur='2.2s'%20values='49;5;27;49'%20calcMode='linear'%20repeatCount='indefinite'%20/%3e%3c/circle%3e%3c/g%3e%3c/g%3e%3c/svg%3e";class mo{constructor(){r(this,"$dialog");r(this,"$dialogMain");r(this,"$dialogFooter")}initAndOpen(){this.$dialog=y("#dialog"),this.$dialog.empty(),y("#main").css("visibility","hidden"),this.$dialog.append(y('<div style="height: 20px"></div><div class="dialog-main"></div><div class="dialog-footer"></div>')),this.$dialogMain=this.$dialog.find(".dialog-main"),this.$dialogFooter=this.$dialog.find(".dialog-footer"),this.$dialog.css("visibility","visible"),this.$dialogMain.empty(),this.$dialogFooter.empty()}heading(t){let e=y('<div class="dialog-heading">'+t+"</div>");return this.$dialogMain.append(e),e}addDiv(t){this.$dialogMain.append(t)}subHeading(t){let e=y('<div class="dialog-subheading">'+t+"</div>");return this.$dialogMain.append(e),e}description(t,e){let i=e==null?"":`style="color: ${e}"`,n=y(`<div class="dialog-description" ${i}>${t}</div>`);return this.$dialogMain.append(n),n}input(t,e){let i=y(`<input class="dialog-input" type="${t}" placeholder="${e}"></input>`);return this.$dialogMain.append(i),i}buttons(t){let e=y('<div class="dialog-buttonRow"></div>');this.$dialogMain.append(e);for(let i of t){let n=y(`<button style="background-color: ${i.color};margin-left: 20px">${i.caption}</button>`);n.on("click",()=>{i.callback()}),e.append(n)}}waitMessage(t){let e=y(`<div class="dialog-wait">${t}<img src="${og}"></div>`);return this.$dialogMain.append(e),i=>{let n=i?"visible":"hidden";e.css("visibility",n)}}close(){this.$dialog.css("visibility","hidden"),this.$dialog.empty(),y("#main").css("visibility","visible")}addCheckbox(t,e,i){let n='<input type="checkbox" name="'+i+'"'+(e?" checked":"")+">",s=y(n),a=y('<label for="'+i+'">'+t+"</label>"),l=y('<div class="jo_checkbox_div"></div>');return l.append(s,a),a.on("click",()=>{s.prop("checked",!s.prop("checked"))}),this.$dialogMain.append(l),()=>s.is(":checked")}}class Uy{constructor(t){this.main=t}init(){let t=y("#buttonUserSettings"),e=this;t.on("click",i=>{let n=[{caption:pt.changePassword()+"...",callback:()=>{new lg(e.main).show()}}];Vn(n,t.offset().left,t.offset().top+t.height())})}}class lg{constructor(t){r(this,"dialog");this.main=t,this.dialog=new mo}show(){this.dialog.initAndOpen(),this.dialog.heading(pt.changePassword()),this.dialog.description(pt.changePasswordDescription());let t=this.dialog.input("password",pt.oldPassword()),e=this.dialog.input("password",pt.newPassword()),i=this.dialog.input("password",pt.repeatNewPassword()),n=this.dialog.description("","red"),s=this.dialog.waitMessage(pt.pleaseWait());this.dialog.buttons([{caption:pt.cancel(),color:"#a00000",callback:()=>{this.dialog.close()}},{caption:pt.ok(),color:"green",callback:()=>{e.val()!=i.val()?n.text(pt.passwordsDontMatch()):(s(!0),Re("changePassword",{oldPassword:t.val(),newPassword:e.val()},()=>{s(!1),alert(pt.settingPasswordSuccessful()),this.dialog.close()},a=>{s(!1),n.text(a)}))}}])}}const ar=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","0","1","2","3","4","5","6","7","8","9","+","/"],Rm=[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,62,255,255,255,63,52,53,54,55,56,57,58,59,60,61,255,255,255,0,255,255,255,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,255,255,255,255,255,255,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51];function Pl(p){if(p>=Rm.length)throw new Error("Unable to parse base64 string.");const t=Rm[p];if(t===255)throw new Error("Unable to parse base64 string.");return t}function dg(p){let t="",e,i=p.length;for(e=2;e<i;e+=3)t+=ar[p[e-2]>>2],t+=ar[(p[e-2]&3)<<4|p[e-1]>>4],t+=ar[(p[e-1]&15)<<2|p[e]>>6],t+=ar[p[e]&63];return e===i+1&&(t+=ar[p[e-2]>>2],t+=ar[(p[e-2]&3)<<4],t+="=="),e===i&&(t+=ar[p[e-2]>>2],t+=ar[(p[e-2]&3)<<4|p[e-1]>>4],t+=ar[(p[e-1]&15)<<2],t+="="),t}function gm(p){if(p.length%4!==0)throw new Error("Unable to parse base64 string.");const t=p.indexOf("=");if(t!==-1&&t<p.length-2)throw new Error("Unable to parse base64 string.");let e=p.endsWith("==")?2:p.endsWith("=")?1:0,i=p.length,n=new Uint8Array(3*(i/4)),s;for(let a=0,l=0;a<i;a+=4,l+=3)s=Pl(p.charCodeAt(a))<<18|Pl(p.charCodeAt(a+1))<<12|Pl(p.charCodeAt(a+2))<<6|Pl(p.charCodeAt(a+3)),n[l]=s>>16,n[l+1]=s>>8&255,n[l+2]=s&255;return n.subarray(0,n.length-e)}class ot{}r(ot,"confirmInput",t=>d({de:`Wollen Sie die ${t} ausgewählten Workspaces wirklich importieren?`,en:`Do you really want to import the ${t} selected workspaces?`,fr:`Voulez-vous vraiment importer les ${t} workspaces sélectionnés?`})),r(ot,"importWorkspace",()=>d({de:"Workspace importieren",en:"Import workspace"})),r(ot,"importWorkspaceDescription",()=>d({de:"1. Bitte klicken Sie auf den Button 'Datei auswählen...' oder ziehen Sie eine Datei auf das gestrichelt umrahmte Feld.",en:"1. Use button 'Choose file...' or drop file on dotted rectangle."})),r(ot,"wrongFileFormat",t=>d({de:"Das Format der Datei "+t+" passt nicht.",en:"File "+t+" has wrong file format."})),r(ot,"noJson",t=>d({de:"Die Datei "+t+" ist keine gültige JSON-Datei.",en:"File "+t+" doesn't contain JSON code."})),r(ot,"withFiles",t=>d({de:"mit "+t+" Dateien",en:"with "+t+" files"})),r(ot,"dragFilesHere",()=>d({de:"Dateien hierhin ziehen",en:"Drag files here."})),r(ot,"dragDropTutorial",()=>d({de:"2. In der linken Baumansicht sehen Sie die Workspaces der importierten Datei. Sie können mehrere Workspaces/Ordner durch <Strg> + Click bzw. <Shift> + Click markieren. Ziehen Sie die gewünschten Workspaces in die rechte Baumansicht, um sie zu importieren.",en:"2. The left tree view shows the workspaces of the imported file. You can select multiple workspaces/folders using <Ctrl> + Click or <Shift> + Click. Drag and drop the desired folders/workspaces to the right tree view to import them.",fr:"2. La vue arborescente de gauche affiche les workspaces du fichier importé. Vous pouvez sélectionner plusieurs workspaces/dossiers en utilisant <Ctrl> + Clic ou <Shift> + Clic. Faites glisser et déposez les dossiers/workspaces souhaités dans la vue arborescente de droite pour les importer."})),r(ot,"cancel",()=>d({de:"Abbrechen",en:"Cancel"})),r(ot,"ok",()=>d({de:"OK",en:"OK"})),r(ot,"import",()=>d({de:"Importieren",en:"Import"})),r(ot,"serverNotReachable",()=>d({de:"Der Server ist nicht erreichbar.",en:"Server not reachable."}));class Br{static async exportAllWorkspaces(t){let e=[];for(let i of t.projectExplorer.workspaceTreeview.rootNode.getOrderedNodeListRecursively().map(n=>n.externalObject)){let n=await Br.exportWorkspace(i);e.push(n)}return e}static async exportFolder(t,e){let i=e.findNodeByElement(t);if(!i)return[];let n=i.getOrderedNodeListRecursively().map(a=>a.externalObject);n.unshift(t);let s=[];for(let a of n){let l=await Br.exportWorkspace(a);a==t&&(l.parent_folder_id=null),s.push(l)}return s}static async exportWorkspace(t){let e;if(t.spritesheetId)try{let i=new As;await i.load(t.spritesheetId),i.zipFile!=null&&(e=dg(i.zipFile))}catch{console.log("Hier!")}return{name:t.name,id:t.id,modules:t.getFiles().map(i=>Br.exportFile(i)),settings:t.settings,spritesheetBase64:e,parent_folder_id:t.parent_folder_id,isFolder:t.isFolder}}static exportFile(t){return{name:t.name,text:t.getText(),identical_to_repository_version:t.identical_to_repository_version,is_copy_of_id:t.is_copy_of_id,repository_file_version:t.repository_file_version,isFolder:t.isFolder,parent_folder_id:t.parent_folder_id}}}class Qy{constructor(t,e){r(this,"networkManager",null);this.main=t,this.owner_id=e,this.networkManager=t.networkManager}async importWorkspaces(t,e,i){for(;!e.isFolder&&!e.isRootNode;)e=e.getParent();if(!confirm(ot.confirmInput(t.length)))return;let n=new Set(t.filter(g=>g.isFolder).map(g=>g.id));t.forEach(g=>{n.has(g.parent_folder_id)||(g.parent_folder_id=null)});let s=[],a=-1,l=new Set;for(;s.length>a;){a=s.length;for(let g of t)!l.has(g.id)&&(g.parent_folder_id==null||l.has(g.parent_folder_id))&&(s.push(g),l.add(g.id))}i&&(i.init(0,s.length),i.show());let h=0,c=new Map,u=[];for(let g of s){i&&i.set(h++);let f=g.parent_folder_id==null?e:c.get(g.parent_folder_id),b=f.isRootNode()?null:f.externalObject.id,A=await this.importWorkspaceWithoutSpritesheet(g,b);if(await this.importSpritesheet(g,A),A){let k=A.repository_id==null?"img_workspace-dark":"img_workspace-dark-repository",C=f.treeview.addNode(A.isFolder,A.name,k,A);u.push(C),A.isFolder&&c.set(g.id,C)}}i&&i.hide(),u.forEach(g=>g.setCaptionColor("#00b000"))}async importSpritesheet(t,e){if(this.networkManager&&!t.isFolder&&t.spritesheetBase64&&e!=null){let i=gm(t.spritesheetBase64);try{let n=await Cl.uploadSpritesheet(i,e.id,!1);e.spritesheetId=n}catch{}}}async importWorkspaceWithoutSpritesheet(t,e=null){let i=new yi(t.name,this.main,this.owner_id);i.isFolder=t.isFolder||!1,i.settings=t.settings,i.parent_folder_id=e;let n=!0;if(this.networkManager&&(n=await this.networkManager.sendCreateWorkspace(i,this.owner_id)),n){this.main.addWorkspace(i);for(let s of t.modules){let a=await this.importFile(s,i);a&&i.addFile(a)}return i}return null}async importFile(t,e){let i=new Ue(this.main,t.name);return i.setText(t.text),i.identical_to_repository_version=t.identical_to_repository_version,i.is_copy_of_id=t.is_copy_of_id,i.repository_file_version=t.repository_file_version,i.isFolder=t.isFolder||!1,i.parent_folder_id=t.parent_folder_id||null,this.networkManager&&(this.networkManager.sendCreateFile(i,e,this.owner_id)||(i=null)),i}}class Yy{constructor(){r(this,"elementOuter");r(this,"elementInner");r(this,"parent");r(this,"min");r(this,"max");this.parent=document.getElementById("bitteWarten"),this.elementOuter=R.makeDiv(this.parent,"jo_progressBar"),this.elementInner=R.makeDiv(this.elementOuter,"jo_progressBarInner")}show(){this.parent.style.display="flex"}hide(){this.parent.style.display="none"}init(t,e){this.min=t,this.max=e}set(t,e){let i=(t-this.min)/(this.max-this.min)*100;this.elementInner.style.width=i+"%"}}class Zy{constructor(t){r(this,"dialog");this.main=t,this.dialog=new mo}show(){this.dialog.initAndOpen(),this.dialog.heading(ot.importWorkspace()),this.dialog.description(ot.importWorkspaceDescription());let t=y('<input type="file" id="file" name="file" multiple />');this.dialog.addDiv(t);let e=y('<div class="jo_importDragDropDiv" style="flex-basis: 20px; flex-grow: 1; overflow: auto"></div>'),i=R.makeDiv(e[0],"jo_importLeft","jo_scrollable"),n=R.makeDiv(e[0],"jo_importRight","jo_scrollable"),s=new di(i,{captionLine:{enabled:!0,text:"Inhalt der importierten Datei:"},withSelection:!0,selectMultiple:!0,selectWholeFolders:!0,isDragAndDropSource:!0,buttonAddElements:!1,buttonAddFolders:!1,withDeleteButtons:!1,withFolders:!0,keyExtractor:h=>h.id,parentKeyExtractor:h=>h.parent_folder_id,orderBy:"comparator"}),a=new di(n,{captionLine:{enabled:!0,text:"Ihre Workspaces:"},withSelection:!1,selectMultiple:!1,isDragAndDropSource:!1,buttonAddElements:!1,buttonAddFolders:!1,withDeleteButtons:!1,withFolders:!0,comparator:(h,c)=>h.name>c.name?1:h.name<c.name?-1:0,keyExtractor:h=>h.id,parentKeyExtractor:h=>h.parent_folder_id,orderBy:"comparator"});a.addDragDropSource({treeview:s,defaultDragKind:"copy",dropInsertKind:"asElement"}),a.dropEventCallback=(h,c)=>{this.dropEventCallback(s,a,c)},t.on("change",h=>{var c=h.originalEvent.target.files;this.fillSourceTreeview(c,s)});let l=y(`<div class="jo_workspaceimport_dropzone">${ot.dragFilesHere()}</div>`);this.dialog.addDiv(l),this.dialog.description("").text(ot.dragDropTutorial()),l.on("dragover",h=>{h.stopPropagation(),h.preventDefault(),h.originalEvent.dataTransfer.dropEffect="copy"}),l.on("drop",h=>{h.stopPropagation(),h.preventDefault();var c=h.originalEvent.dataTransfer.files;this.fillSourceTreeview(c,s)}),this.dialog.addDiv(e),this.fillDestTreeview(a),this.dialog.buttons([{caption:ot.ok(),color:"#18a000ff",callback:()=>{this.main.workspaceList=a.getOrderedNodeListRecursively().map(h=>h.externalObject),this.main.projectExplorer.renderWorkspaces(this.main.workspaceList),this.dialog.close()}}])}async dropEventCallback(t,e,i){let n=t.getOrderedListOfCurrentlySelectedNodes().map(l=>l.externalObject),s=this.main.user.id;this.main.workspacesOwnerId!=null&&(s=this.main.workspacesOwnerId);let a=new Yy;await new Qy(this.main,s).importWorkspaces(n,i,a)}fillSourceTreeview(t,e){e.clear();for(let n=0;n<t.length;n++){let s=t[n];var i=new FileReader;i.onload=a=>{let l=a.target.result;if(!(l.startsWith("{")||l.startsWith("["))){alert(ot.wrongFileFormat(s.name));return}let h=[];try{h=JSON.parse(l),Array.isArray(h)||(h=[h])}catch{alert(ot.noJson(s.name));return}for(let c of h)if(c.modules==null||c.name==null||c.settings==null){alert(ot.wrongFileFormat(s.name));return}else e.addNode(c.isFolder,c.name,c.isFolder?void 0:"img_workspace-dark",c)},i.readAsText(s)}}fillDestTreeview(t){t.clear();let e=this.main.workspaceList;for(let i of e)t.addNode(i.isFolder,i.name,"img_workspace-dark",i)}}class Xy{constructor(t){r(this,"dialog");this.main=t,this.dialog=new mo}show(){this.dialog.initAndOpen(),this.dialog.heading(Wt.reportBug()),this.dialog.description(Wt.bugReport()+":");let t=R.makeElement(this.dialog.$dialogMain[0],"textarea","jo_issuereporterr_textfield"),e=this.dialog.addCheckbox(Wt.sendCopyOfWorkspace(),!0,"jo_cbIssueAddWorkspace"),i=this.dialog.input("text",Wt.email()),n=this.dialog.input("text",Wt.firstName()),s=this.dialog.input("text",Wt.lastName());this.dialog.buttons([{caption:Wt.cancel(),color:"#a00000",callback:()=>{this.dialog.close()}},{caption:Wt.send(),color:"green",callback:async()=>{let a={workspace_id:e()?this.main.getCurrentWorkspace().id:null,description:t.value,mail:i.val(),rufname:n.val(),familienname:s.val()};(await dt("/servlet/reportIssue",a)).success&&alert(Wt.thanks()),this.dialog.close()}}])}}class x{}r(x,"Saving",()=>d({de:"Speichere...",en:"saving...",fr:"enregistrement..."})),r(x,"Saved",()=>d({de:"Gespeichert",en:"saved",fr:"enregistré"})),r(x,"OptionDefault",()=>d({de:"Standard",en:"default",fr:"par défaut"})),r(x,"OptionTrue",()=>d({de:"Ja",en:"true",fr:"Oui"})),r(x,"OptionFalse",()=>d({de:"Nein",en:"false",fr:"Non"})),r(x,"CloseButton",()=>d({de:"Schließen",en:"Close",fr:"Fermer"})),r(x,"SettingsHeading",()=>d({de:"Einstellungen",en:"Settings",fr:"Paramètres"})),r(x,"UserSettingsTabHeading",()=>d({de:"Meine Einstellungen",en:"My Settings",fr:"Mes paramètres"})),r(x,"ClassSettingsTabHeading",()=>d({de:"Klassen-Einstellungen für ",en:"Class Settings for ",fr:"Paramètres de la classe pour "})),r(x,"SchoolSettingsTabHeading",()=>d({de:"Schul-Einstellungen",en:"School Settings",fr:"Paramètres de l'école"})),r(x,"ScopeUser",()=>d({de:"Benutzer",en:"User",fr:"Utilisateur"})),r(x,"ScopeClass",()=>d({de:"Klasse",en:"Class",fr:"Classe"})),r(x,"ScopeSchool",()=>d({de:"Schule",en:"School",fr:"École"})),r(x,"EditorSettingsName",()=>d({de:"Editoreinstellungen",en:"Editor Settings",fr:"Paramètres de l'éditeur"})),r(x,"EditorSettingsDescription",()=>d({de:"Hier können Sie die Einstellungen des Editors anpassen.",en:"Here you can adjust the editor settings.",fr:"Ici, vous pouvez ajuster les paramètres de l'éditeur."})),r(x,"HoverVerbosityName",()=>d({de:"Texte beim Hovern über Code",en:"Hover-Verbosity",fr:"Verbosité des infobulles"})),r(x,"HoverVerbosityDescription",()=>d({de:"Menge an Informationen, die in Hover-Infoballons angezeigt werden.",en:"Information amount displayed in hover tooltips.",fr:"Quantité d'informations affichées dans les infobulles."})),r(x,"ShowHelpOnKeywordsAndOperators",()=>d({de:"Hilfstexte für Schlüsselwörter und Operatoren anzeigen",en:"Show help texts for keywords and operators",fr:"Afficher les textes d'aide pour les mots-clés et les opérateurs"})),r(x,"ShowMethodDeclaration",()=>d({de:"Methodendeklarationen anzeigen",en:"Show method declarations",fr:"Afficher les déclarations de méthodes"})),r(x,"None",()=>d({de:"Keine",en:"None",fr:"Aucun"})),r(x,"Declarations",()=>d({de:"Deklarationen",en:"Declarations",fr:"Déclarations"})),r(x,"DeclarationsAndComments",()=>d({de:"Deklarationen und Kommentare",en:"Declarations and Comments",fr:"Déclarations et commentaires"})),r(x,"ShowClassDeclaration",()=>d({de:"Klassendeklarationen anzeigen",en:"Show class declaration",fr:"Afficher la déclarations de la classes"})),r(x,"ShowStructureStatementHelp",()=>d({de:"Hilfe für Strukturanweisungen anzeigen",en:"Show help for structure statements",fr:"Afficher l'aide pour les instructions de structure"})),r(x,"TypingAssistanceName",()=>d({de:"Unterstützung bei der Eingabe von Code",en:"Typing Assistance",fr:"Assistance à la saisie de code"})),r(x,"EditorViewSettings",()=>d({de:"Anzeigeeinstellungen des Editors",en:"Editor View Settings",fr:"Paramètres d'affichage de l'éditeur"})),r(x,"EditorViewSettingsDescription",()=>d({de:"Hier können Sie die Anzeigeeinstellungen des Editors anpassen.",en:"You can adjust the editor view settings here.",fr:"Vous pouvez ajuster les paramètres d'affichage de l'éditeur ici."})),r(x,"TypingAssistanceDescription",()=>d({de:"Hier können Sie die Eingabeunterstützung des Editors anpassen.",en:"Here you can adjust the typing assistance of the editor.",fr:"Ici, vous pouvez ajuster l'assistance à la saisie de l'éditeur."})),r(x,"AutoClosingBracketsName",()=>d({de:"Automatisches Schließen von Klammern",en:"Auto Closing Brackets",fr:"Fermeture automatique des parenthèses"})),r(x,"BracketPairLines",()=>d({de:"Linien zwischen Klammerpaaren anzeigen",en:"Display lines between bracket pairs",fr:"Afficher les lignes entre les paires de parenthèses"})),r(x,"StickyScroll",()=>d({de:"Sticky Scroll",en:"Sticky Scroll",fr:"Défilement fixe"})),r(x,"StickyScrollDescription",()=>d({de:"Zeigt die aktuellen Blocküberschriften (z.B. Methoden- oder Klassennamen) immer oben im Editor an, auch wenn diese nicht mehr im sichtbaren Bereich sind.",en:"Always displays the current block headers (e.g., method or class names) at the top of the editor, even when they are no longer in the visible area.",fr:"Affiche toujours les en-têtes de bloc actuels (par exemple, les noms de méthodes ou de classes) en haut de l'éditeur, même lorsqu'ils ne sont plus dans la zone visible."})),r(x,"BracketPairLinesDescription",()=>d({de:"Vertikale Linien zwischen passenden Klammerpaaren anzeigen, gegebenfalls um Unterstreichung des Scope-Beginns.",en:"Display vertical lines between matching bracket pairs, possibly with underlined scope-start.",fr:"Afficher des lignes verticales entre les paires de parenthèses correspondantes, éventuellement avec le début du scope souligné."})),r(x,"BracketPairLinesOff",()=>d({de:"Keine Linien anzeigen",en:"Do not display lines",fr:"Ne pas afficher de lignes"})),r(x,"BracketPairLinesVertical",()=>d({de:"Vertikale Linien anzeigen (entspricht Scope)",en:"Display vertical lines (according to scope)",fr:"Afficher des lignes verticales (selon le scope)"})),r(x,"BracketPairLinesVerticalAndUnderlined",()=>d({de:"Vertikale Linien und Unterstreichung anzeigen",en:"Display vertical lines and underline",fr:"Afficher des lignes verticales et souligner"})),r(x,"AutoSemicolonsName",()=>d({de:"Automatisches Ergänzen von Strichpunkten",en:"Auto Semicolons",fr:"Point-virgules automatiques"})),r(x,"AutoSemicolonsDescription",()=>d({de:"Fehlende Strichpunkte am Ende der Zeile werden in den meisten Fällen automatisch ergänzt.",en:"Missing semicolons at the end of the line are automatically added in most cases.",fr:"Les points-virgules manquants à la fin de la ligne sont automatiquement ajoutés dans la plupart des cas."})),r(x,"On",()=>d({de:"Ein",en:"On",fr:"Activé"})),r(x,"Off",()=>d({de:"Aus",en:"Off",fr:"Désactivé"})),r(x,"AutoClosingQuotesName",()=>d({de:"Automatisches Schließen von Anführungszeichen",en:"Auto Closing Quotes",fr:"Fermeture automatique des guillemets"})),r(x,"AutoClosingBracketsDescription",()=>d({de:"Bei Eingabe von öffnenden Klammern wird automatisch die schließende Klammer hinzugefügt.",en:"Automatically add closing brackets when typing opening brackets.",fr:"Ajoute automatiquement les parenthèses fermantes lors de la saisie des parenthèses ouvrantes."})),r(x,"AutoClosingQuotesDescription",()=>d({de:"Bei Eingabe eines Anführungszeichens wird automatisch ein zweites hinter dem Cursor hinzugefügt.",en:"Automatically add a second quote behind the cursor when typing a quote.",fr:"Ajoute automatiquement un deuxième guillemet derrière le curseur lors de la saisie d'un guillemet."})),r(x,"AutoClosingBracketsAlways",()=>d({de:"Immer",en:"Always",fr:"Toujours"})),r(x,"AutoClosingBracketsNever",()=>d({de:"Nie",en:"Never",fr:"Jamais"})),r(x,"AutoClosingBracketsBeforeWhitespace",()=>d({de:"Nur vor Leerzeichen",en:"Only before whitespace",fr:"Seulement avant les espaces"})),r(x,"ClassDiagramSettingsName",()=>d({de:"Klassendiagramm",en:"Class Diagram",fr:"Diagramme de classes"})),r(x,"ClassDiagramSettingsDescription",()=>d({de:"Hier können Sie die Einstellungen für das Klassendiagramm anpassen.",en:"Here you can adjust the settings for the class diagram.",fr:"Ici, vous pouvez ajuster les paramètres du diagramme de classes."})),r(x,"ClassDiagramTypeConventionName",()=>d({de:"Darstellungsweise von Datentypen",en:"Type Representation",fr:"Représentation des types"})),r(x,"ClassDiagramBackground",()=>d({de:"Hintergrund beim Exportieren als png-Datei",en:"Background when exporting as png file",fr:"Arrière-plan lors de l'exportation en fichier png"})),r(x,"classDiagramOmitVoidReturnType",()=>d({de:'Rückgabetyp "void" im Klassendiagramm weglassen',en:'Omit "void" return type in class diagram',fr:'Omettre le type de retour "void" dans le diagramme de classes'})),r(x,"ClassDiagramOmitVoidReturnTypeDescription",()=>d({de:'Legt fest, ob im Klassendiagramm bei Methoden der Rückgabetyp "void" weggelassen werden soll.',en:'Determines whether the return type "void" should be omitted in the class diagram for methods.',fr:'Détermine si le type de retour "void" doit être omis dans le diagramme de classes pour les méthodes.'})),r(x,"show",()=>d({de:"anzeigen",en:"show",fr:"afficher"})),r(x,"omit",()=>d({de:"weglassen",en:"omit",fr:"omettre"})),r(x,"ClassDiagramBackgroundDescription",()=>d({de:"Legt fest, ob der Hintergrund des Klassendiagramms beim Exportieren als png-Datei transparent oder weiß sein soll.",en:"Determines whether the background of the class diagram should be transparent or white when exporting as a png file.",fr:"Détermine si l'arrière-plan du diagramme de classes doit"})),r(x,"ClassDiagramTypeConventionDescription",()=>d({de:"Wenn Datentypen im Klassendiagramm angezeigt werden, kann dies entweder in der Art von Java (z.B. String name) erfolgen oder in der Art von Pascal (name: String).",en:"If data types are displayed in the class diagram, they can be shown in either Java style (e.g., String name) or Pascal style (name: String).",fr:"Si les types de données sont affichés dans le diagramme de classes, ils peuvent être présentés dans le style Java (par exemple, String name) ou dans le style Pascal (name: String)."})),r(x,"ClassDiagramTypeConventionJava",()=>d({de:"Java-Stil (z.B. String name)",en:"Java Style (e.g., String name)",fr:"Style Java (par exemple, String name)"})),r(x,"ClassDiagramTypeConventionPascal",()=>d({de:"Pascal-Stil (name: String)",en:"Pascal Style (name: String)",fr:"Style Pascal (name: String)"})),r(x,"ClassDiagramBackgroundTransparent",()=>d({de:"durchsichtig",en:"transparent",fr:"transparent"})),r(x,"ClassDiagramBackgroundWhite",()=>d({de:"weiß",en:"white",fr:"blanc"})),r(x,"CompilerSettingsName",()=>d({de:"Compiler-Einstellungen",en:"Compiler settings"})),r(x,"CompilerSettingsDescription",()=>d({de:"Hier können Sie die Einstellungen des Compilers vornehmen.",en:"Here you can adjust the compiler settings."})),r(x,"ExplorerSettingsName",()=>d({de:"Explorer-Einstellungen",en:"Explorer settings"})),r(x,"ExplorerSettingsDescription",()=>d({de:"Einstellungen für den Datei- und Workspaceexplorer (im Hauptfenster links).",en:"Settings for file- and workspace explorer (in the main window on the left)."})),r(x,"CompilerShadowedSymbolErrorLevelName",()=>d({de:"Errorlevel bei verdeckten Symbolen",en:"Error level for shadowed symbols"})),r(x,"CompilerShadowedSymbolErrorLevelDescription",()=>d({de:"Welches Errorlevel soll der Fehler haben, wenn eine Variable in einem inneren Scope eine andere gleichnamige Variable in einem äußeren Scope verdeckt?",en:"What error level should the error have if a variable in an inner scope shadows another variable with the same name in an outer scope?"})),r(x,"ExplorerFileOrderName",()=>d({de:"Sortierung des Dateibaums",en:"Order of file treeview"})),r(x,"ExplorerFileOrderDescription",()=>d({de:"Hier können Sie einstellen, ob der Dateibaum grundsätzlich alphabetisch sortiert werden soll oder der Nutzer durch drag and drop eine davon abweichende Sortierung festlegen kann.",en:"You can set here whether the file tree should be sorted alphabetically by default or whether the user can define a different sorting by drag and drop."})),r(x,"ExplorerWorkspaceOrderName",()=>d({de:"Sortierung des Workspacebaums",en:"Order of workspace treeview"})),r(x,"ExplorerWorkspaceOrderDescription",()=>d({de:"Hier können Sie einstellen, ob der Workspacebaum grundsätzlich alphabetisch sortiert werden soll oder der Nutzer durch drag and drop eine davon abweichende Sortierung festlegen kann.",en:"You can set here whether the workspace tree should be sorted alphabetically by default or whether the user can define a different sorting by drag and drop."})),r(x,"ExplorerOrderComparator",()=>d({de:"Immer alphabetisch",en:"Always alphabetical",fr:"Toujours alphabétique"})),r(x,"ExplorerOrderUserDefined",()=>d({de:"Nutzerdefinierte Sortierung",en:"User-defined order",fr:"Ordre défini par l'utilisateur"})),r(x,"ErrorLevelIgnore",()=>d({de:"Ignorieren",en:"Ignore",fr:"Ignorer"})),r(x,"ErrorLevelWarning",()=>d({de:"Warnung",en:"Warning",fr:"Avertissement"})),r(x,"ErrorLevelError",()=>d({de:"Fehler",en:"Error",fr:"Erreur"})),r(x,"ErrorLevelInfo",()=>d({de:"Info",en:"Info",fr:"Info"})),r(x,"ContextSensitiveHelpName",()=>d({de:"Kontextsensitive Hilfe",en:"Context-sensitive help"})),r(x,"ContextSensitiveHelpDescription",()=>d({de:"Hier können Sie einstellen, ob in bestimmten Bereichen der Anwendung kontextsensitive Hilfetexte angezeigt werden sollen.",en:"Here you can set whether context-sensitive help texts should be displayed in certain areas of the application."})),r(x,"ContextSensitiveHelpParameterHintsName",()=>d({de:"Parameterhinweise",en:"Parameter hints"})),r(x,"ContextSensitiveHelpParameterHintsDescription",()=>d({de:"Hier können Sie einstellen, ob dann, wenn sich der Cursor in einem Methodenaufruf befindet, Hinweise zu den Parametern dieser Methode angezeigt werden sollen. <br>",en:"Here you can set whether hints about the parameters of a method should be displayed whenever the cursor is inside a method call."}));const Jy="data:image/png;base64,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",ev="data:image/png;base64,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",tv="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAARgAAABbCAIAAAAnVw2tAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAASdEVYdFNvZnR3YXJlAEdyZWVuc2hvdF5VCAUAAA7wSURBVHhe7VtdjFXVFfbFJ1584cUH4oNWIA02dFCmSKJ2wKgvTSB2TBMolQbqAyExk0pSUxxEtEQSidBMoUIjCIkl/KTEKQVibKYwKVonsZ0H5rFPfaPtQ5+03z7fueuuu3/OPXdmczkzs758udln7bXXWXuf9Z2972W4b1m/8NDKgYawTMhgyAcTksGQASYkgyEDTEgGQwY0RUgPj51aP3lh9T7fXpu7V09eQIT1k6dWbfe6fJYJEfuXfHPzgX3lhSGKpbenl5wt24Y4+i0kCqbgkRWquOcsJBJy6kVI2x64M33/xLbyymHvO5e/OFvw2N4tpc0hbt+491Maz14+p6P0gnZkL0gieCrDXrDjXCuyFycRfN+J++11U42+CmnFx1o/u1d/vFuKOxN7EtKDEzfvu3PiwfLKYdv7X7yzo2g9P3bscqu9bMtrZ1qFpe2uHMsSx8CzZ8Y2Fu1ZwylHgsSDJzLpFQj+/t6y3UZl8LOXvbUydMAT0uim619tfesEPnc6Tg69UHawqzB+tfPYqDO8crHTIWZReGj7m0/EqzxxKtt3ZP3VNx92o4perTp0lUMuPDE23LbHhBTugWVC1Yc6VVWqpgFX1q4KlQPgKu/T154vr2YJ3CgUDCDB45n0jqiQugR3u3dwwHv59JczM19+KKMWLyJCglQ2vdJqUzNsnz+xEs0XTmx1YtsSymblW5M7r19cW175cAUNYagS72SggVItRfVrETp7VJBgNEipH0mA+XR5xbZL2W0UrZIqj1uu3HEKEuWUJ6JZ7g8toHZb4okHT2TSO2JC6hrcbeC395cXJUxILcSEFIrHaYbqArYMnS/shaKcsaUoJyT6xzArIYlleNVVfoNyjc5dSNMPgsOk+t5V9hbpxMqijaKSytdzWWHuhV3Ultsf0MVad3pjlSsZ9IjiHOWCtzeEePBEJr2DEciWWroHt9NdBWoJqdhqWuc60tmdA7amtcecpWyUYyOYjZAi/nBz2vj3f/9DwqjaXhCnuta5jhQhLb09nRSSKybZEILXM3pd29uFXNHPcUdS58N48EQmc4I7whVBugd3PzlcXlpeGDoxix1J4Lam4gvVxbVwOH9xk7tMvpMrj2RgTSHJ1lSSWmoxIqTwl8AineSOVLySOyThLO13c/nm9r7GlHtIeTFbiBoTweOZzA0imK7BbUeqQD0hdbTbcFvQ+cmt5e6ERii2Nsr9oa0N71e7mkLijwftn84rheQ7k8wnWhahihyK/aGsKtemQ/EKL8Xj2h3v77fHZ4A/Higv60GVciJ4PBNi2+nPccsvT79cXteCC6K+mCWDA8nvSL1Oc0GippDK3xjkaMedh0e+ol18cYrsWm0URazPWq36djuVGMGWEhJCAgt5lP6lkFJBOp0ZsExo/5JvvJ+h3D7gjjdtyhu6KLKCuryKci/s3ilo2bIDTkmfn5Y3fArtL0hge0MAEsHjmThs+9BV9fjb5WUa7jgXD5IOHv/VjtOcGTcleUK6i2BZZ2fnjlSLZUKRf0fKiGJ/6POr2m2DPe5ItZE4192LaTYSi1lIfMt2/mVDDnBn6G95cWe4WyqK/mXDvZhmc7G4hQTY39p1h/2tXXcseiEZDDlgQjIYMqB/QgIGBgaGhoY2ZAWEVLYMhnuH/gkJKhocHFy+fMUjj3wrIyEkz2I09p/9ExL2ouwqAk1Ixiawf0LC9ufdOwtNSMYm0IRkNGagCclozMD5KiToh/TaRuM94bzfkYzGJtCEZDRm4LwU0g8OHP3p+Bfrf7RdG7+9Zu2WM3/i//LY/oebq7//nO6FM4a8dPycNubiwKFfrp+88J1Xd3r2+nzi1Hv8jx4I5XVV8ODBgxMTfxka8hf20VXffebA+MCLuzx7V658/KkN73762LPDoX3j4RvPHf/Hs7/+W9jbNCJDzAI5e/auxIph3bB6nh0BMXFMH4uQCrtwhERSTikhoQsO2t4TIRWW+5N//njV1h+Kfe5CIiGn+kIaGRmZmprCp2cHswuJrO5tDrMLiawOu1iENHeixEU/jz6+Zs3R/fjUDnNnfSFhF8JedOrUac9OmpAWqZBQ9Cj9F4+cxicOZiISbiOQjbR5NqOQNh36gAc5fWALhcTg9PR2JN2lh4RcueGZJ6+fCfcc2sM9Cp6DF48/9rMfw45eKER3cVsDPdmEQkrtgdFDHZ4xD2CkCOl7r7wbNT71+lm2pUQolbXbR3mS8aqKvZ6QJHjFsYf8+amrb1z6/MjUHfDV45eOz3z91pW/Dw698O7EP0E04LPj4G9hx6ceWJOYGjPxksE0aZRzqfeikaWgkNbtPkp/2OlAhkJiHDo3SEio5g279lAJrPgKIYkqMIQDGSoUEslbaCGFlgqioCEYyMazk7CvG/+dJyRX/cUQ2NddP8NeF6dTEpqekPyBKoErV6542xEfKp+9LhR8SlWhLcWUEhKc6a8DkjB6QtLB4Ql/jJJejxDS2PT/tr1xmMpB472//mvj8E9ASAu9bMxORcgKmTA3mQ7aOiu09dS4PrSLkCAJtnVAUocl4UlnBGyQkGRjQQOagXKqdyRYPDtYX0hUoyiwmrMQkj4HYneChY2Kw5snJLTlUoKgzXMdNiV2kSgCqRgpFDa0GPDgeSnVA0qJgFoq8JGYoNcLIoKUY9jrEVKRLQhqeWnkTQoJXWxjv4KDHlKfMi9QTwdikAy9ZRG7LAUsMt9w6SQsL9GAg1w2UUiikzpC8sb2JCQJ0pWzEBLq3vsSBTcEoRii9ISES57rhBw7PDw8NTVVX0hSMWBPQtIxQa+XwXmwIat/06sQEnuxHcllr0wJKUw4XJaokEAdE5SwcskDMNnQHYlKqCMk7QPepR0JIsEOk9JATSHpXSXKUEj6UjjrHUlfSvWAqcrTPmCqLsWhmhVCwiWMr/9+Ap/8stQrU0LSO5JcepnLNGGBHb1oh7OTsNHLxglJC0balAfqPhQSLNIG6wuJwbWlmihr2ZQgCf2rXU0hgRBGxc7mKQdBUl+owu9IeK5ypkdZ4B3JIkCVwM7nDYu0YWfRsLxoB0UqtOtK0r2kDt6VKSGB/GrELrjJkJGRkenp6ei/lXmMTgd2LIVoQ3woElzCiAlirUIh6bUiPeUwCAeCzfqxgaRaSO4b4KZDH6DoRUjiLCrygoCUEwWj7RJfd2k1pihnLalv1Lqcuzx7VEggpCL+lA2PfGIUO6jjawViO8LpDmc8XpKoDB4z0MADFg2IXR+9WAc0rt0+yhJhFdIZlAisNqGOI8FBqcIoo0La8otDUJF8NYL9+MzXoiXuveFMQ+rpUA9S8XytgFoYyJ8HM3iu231UhERPz1nPUXfJTcEmHu2MXckKS/070kIi9t46O9I9pwlpvrLiLxsWBrHrzszMzAsVgSakeUyU2nypswXPRgjJaJzvNCEZjRloQjIaM9CEZDRmoAnJaMxAE5LRmIEmJKMxA01IRmMGmpCMxgw0IRmNGWhCMhoz0IRkNGagCclozEAT0qLg2Nhvbt26NTo66tlrcvPmzZ999hki3LhxY9eu9v+ZzULkdu5c8g//n376mU8+GQfR8Lr6TCRZMf0GCQmPGY/qbjwtPoxZl9E8IgUDoO5R/Z59jiuAgNeuXZt3QsKss+gwKiQYkT8aTRESspEsMeeTJ0/OfeZCPowFLyQ8VNEPPrGGunfuvCdCmjtzCSnKZgkJTwgVEBa6CADp4oWq3wcwFm/eDiP9aZe141gNzjwVBIQD7UCYlUcJAlQ7I59Lly7Bh8ckvWlwBRiE6cHNe/zVBYf8ESGsconszZHx9+zZAzt6deTU9KNCEmc9nRQxlrcD5I6cF0A776gfJaCXIlwrUg9hMvp2REWScMbsdK88Aomjh+tVAhohJGQcnaEsDdeLy40GJgZ/fKKtxx4+fJhGDpRV5qWuCTAVBBZvQSsIN3nxp2YhZBosaJ2hbmM4giBUmAYcOP0o0YsgCOXZScTxNIBbYGGZMOyyFIiTmkU0iDhXJwDCjVOTNqeMT3nE0TXUkaNrJfbo+sChOjES0cLZ6YHoCgsDd2Qy80BIsjoyMaTO7MWHq6kJBxkY9UkFwXqh1sOAXRk+CY9eGpIhhmCnQq+2Ixqc8Ql/NNArzyxKdNHNs5NhbghLSaMticFNSjNkGAQpiXPY69HLUOYl6wBGE9ADo2uFBoZESwiUG3l2j3BAZMQHKBidGCh2sYDyUOaBkLxlBZG9200V6IOp6q1cViEaJxUERIOWOg9Ax5HSjNJLQxdBOb4F2OW5YsfDJRYHn94UNHW1hcTwUEihPxzwIFJT8IJwOmXGBaqn79WlJKDtjOlNU08tulaej8foTKPkCuNcgwYmgpig9MLSdCEhxegmEF1WULLXxAxRBGJHg0sMRuNEg3iET/UzQAR5BYTF6tFLQzKEJXoX9PKh/qoAdeX5CBGkoo7D3KI3rZ6C1xtd1QpivvqOcinrAEYT0ANTa5WygxVdHnEjvrYwhCuvZ4eskBsyFAsIH4xCoxFCApGQVCTmzF/tQCyBngwJS1g0GIsIdEYXHOTxgGjrSzAaxKN+hFFqB8SvDuhNB2OZEjPn89BEL9aBX/ygIoz1nqImg0sy8JQvb7ysIyQQN43awTAIcpan1pUYiPXh9DFEHpasA9vh3bWRA8O1StlB3BddOu0UMfyjj85g3RCNC65HoR0KSXJripBArCY3aylH5IcspfI0YaQzIM8SsxILVkQeD8iFZq8sd3UQQIwp6rC4Y/g21fSmgxtJhjoOIBXGpeBAPjD6R0k3RpDM9RwBWVvYUwHlQQDMJBUE1MvVNUOMwlg6y1PoGgEO2h5dK88u0yflFp7dI6fJgFgEcdYZAjqIrHmDhGQ0Rok61u/EZtKEZGw0uc9AS569aTQhGZtIfQhs/nYEmpCMxgw0IRmNGWhCMhoz0IRkNGagCclozEATktGYgSYkozED+yekoaGh5ctXeLc3GhcG+yekgYGBwcFB05JxQbJ/QgKgJexLOOMZDAsMfRWSwbBQYUIyGDLAhGQwZIAJyWDIABOSwZABJiSDIQNMSAZDBpiQDIYMMCEZDBlgQjIYMsCEZDBkgAnJYMgAE5LBkAEmJINhzli27P/71vut11VETwAAAABJRU5ErkJggg==",iv="data:image/png;base64,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",nv="data:image/png;base64,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",rv=""+new URL("assets/explorer-B4AQnIGl.png",import.meta.url).href,sv="data:image/png;base64,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",av="data:image/png;base64,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",ov="data:image/png;base64,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";var hg=[{settingType:"group",name:x.EditorSettingsName,description:x.EditorSettingsDescription,settings:[{settingType:"group",name:x.HoverVerbosityName,description:x.HoverVerbosityDescription,settings:[{key:"editor.hoverVerbosity.showHelpOnKeywordsAndOperators",settingType:"setting",name:x.ShowHelpOnKeywordsAndOperators,description:void 0,type:"boolean",image:Jy},{key:"editor.hoverVerbosity.showMethodDeclaration",settingType:"setting",name:x.ShowMethodDeclaration,description:void 0,type:"enumeration",optionValues:["none","declarations","declarationsAndComments"],optionTexts:[x.None,x.Declarations,x.DeclarationsAndComments],image:ev},{key:"editor.hoverVerbosity.showClassDeclaration",settingType:"setting",name:x.ShowClassDeclaration,description:void 0,type:"enumeration",optionValues:["none","declarations","declarationsAndComments"],optionTexts:[x.None,x.Declarations,x.DeclarationsAndComments],image:tv}]},{settingType:"group",name:x.ContextSensitiveHelpName,description:x.ContextSensitiveHelpDescription,settings:[{key:"editor.contextSensitiveHelp.StructureStatements",settingType:"setting",name:x.ShowStructureStatementHelp,description:void 0,type:"enumeration",optionValues:["false","true"],optionTexts:[x.OptionFalse,x.OptionTrue],image:av},{key:"editor.contextSensitiveHelp.ParameterHints",settingType:"setting",name:x.ContextSensitiveHelpParameterHintsName,description:x.ContextSensitiveHelpParameterHintsDescription,type:"enumeration",optionValues:["false","true"],optionTexts:[x.OptionFalse,x.OptionTrue],image:sv,action:(p,t)=>{p.getMainEditor().updateOptions({parameterHints:{enabled:t==="true",cycle:!0}})}}]},{settingType:"group",name:x.TypingAssistanceName,description:x.TypingAssistanceDescription,settings:[{key:"editor.autoClosingBrackets",settingType:"setting",name:x.AutoClosingBracketsName,description:x.AutoClosingBracketsDescription,type:"enumeration",optionValues:["always","beforeWhitespace","never"],optionTexts:[x.AutoClosingBracketsAlways,x.AutoClosingBracketsBeforeWhitespace,x.AutoClosingBracketsNever],action:(p,t)=>{p.getMainEditor().updateOptions({autoClosingBrackets:t})}},{key:"editor.autoClosingQuotes",settingType:"setting",name:x.AutoClosingQuotesName,description:x.AutoClosingQuotesDescription,type:"enumeration",optionValues:["always","beforeWhitespace","never"],optionTexts:[x.AutoClosingBracketsAlways,x.AutoClosingBracketsBeforeWhitespace,x.AutoClosingBracketsNever],action:(p,t)=>{p.getMainEditor().updateOptions({autoClosingQuotes:t})}},{key:"editor.autoSemicolons",settingType:"setting",name:x.AutoSemicolonsName,description:x.AutoSemicolonsDescription,type:"boolean",optionTexts:[x.On,x.Off]}]},{settingType:"group",name:x.EditorViewSettings,description:x.EditorViewSettingsDescription,settings:[{key:"editor.bracketPairLines",settingType:"setting",name:x.BracketPairLines,description:x.BracketPairLinesDescription,type:"enumeration",optionValues:["off","vertical","verticalAndUnderlined"],optionTexts:[x.BracketPairLinesOff,x.BracketPairLinesVertical,x.BracketPairLinesVerticalAndUnderlined],action:(p,t)=>{p.getMainEditor().updateOptions({guides:{bracketPairs:t!=="off",highlightActiveBracketPair:t!=="off",bracketPairsHorizontal:t==="verticalAndUnderlined"}})},image:iv},{key:"editor.stickyScroll",settingType:"setting",name:x.StickyScroll,description:x.StickyScrollDescription,type:"enumeration",optionValues:["off","on"],optionTexts:[x.Off,x.On],action:(p,t)=>{p.getMainEditor().updateOptions({stickyScroll:{enabled:t!=="off"}})}}]}]},{settingType:"group",name:x.ClassDiagramSettingsName,description:x.ClassDiagramSettingsDescription,image:nv,settings:[{key:"classDiagram.typeConvention",settingType:"setting",name:x.ClassDiagramTypeConventionName,description:x.ClassDiagramTypeConventionDescription,type:"enumeration",optionValues:["java","pascal"],optionTexts:[x.ClassDiagramTypeConventionJava,x.ClassDiagramTypeConventionPascal],action:(p,t)=>{p.drawClassDiagrams(!1)}},{key:"classDiagram.background",settingType:"setting",name:x.ClassDiagramBackground,description:x.ClassDiagramBackgroundDescription,type:"enumeration",optionValues:["transparent","white"],optionTexts:[x.ClassDiagramBackgroundTransparent,x.ClassDiagramBackgroundWhite]},{key:"classDiagram.omitVoidReturnType",settingType:"setting",name:x.classDiagramOmitVoidReturnType,description:x.ClassDiagramOmitVoidReturnTypeDescription,type:"enumeration",optionValues:["show","omit"],optionTexts:[x.show,x.omit],action:(p,t)=>{p.drawClassDiagrams(!1)}}]},{settingType:"group",name:x.ExplorerSettingsName,description:x.ExplorerSettingsDescription,image:rv,settings:[{key:"explorer.fileOrder",settingType:"setting",name:x.ExplorerFileOrderName,description:x.ExplorerFileOrderDescription,type:"enumeration",optionValues:["comparator","user-defined"],optionTexts:[x.ExplorerOrderComparator,x.ExplorerOrderUserDefined],action:(p,t)=>{let e=p.projectExplorer.fileTreeview;e.config.orderBy=t,e.sort()}},{key:"explorer.workspaceOrder",settingType:"setting",name:x.ExplorerWorkspaceOrderName,description:x.ExplorerWorkspaceOrderDescription,type:"enumeration",optionValues:["comparator","user-defined"],optionTexts:[x.ExplorerOrderComparator,x.ExplorerOrderUserDefined],action:(p,t)=>{let e=p.projectExplorer.workspaceTreeview;e.config.orderBy=t,e.sort()}}]},{settingType:"group",name:x.CompilerSettingsName,description:x.CompilerSettingsDescription,settings:[{key:"compiler.shadowedSymbolErrorLevel",settingType:"setting",name:x.CompilerShadowedSymbolErrorLevelName,description:x.CompilerShadowedSymbolErrorLevelDescription,type:"enumeration",optionValues:["ignore","info","warning","error"],optionTexts:[x.ErrorLevelIgnore,x.ErrorLevelInfo,x.ErrorLevelWarning,x.ErrorLevelError],action:(p,t)=>{p.getCompiler().forceRecompililation()},image:ov}]}];class lv{constructor(t){r(this,"userSettings");r(this,"ownClassSettings");r(this,"classSettings");r(this,"schoolSettings");r(this,"currentScope","user");r(this,"currentSettingsGroup",null);r(this,"currentSettings",null);r(this,"currentClassId",null);r(this,"$settingsLeftMenuDiv");r(this,"$settingsMainDiv");r(this,"settingsExplorer");this.main=t,this.userSettings=t.settings.values.user||{},this.ownClassSettings=t.settings.values.class,this.schoolSettings=t.settings.values.school}async open(){await this.getSettingsFromServer();let t=new mo;t.initAndOpen(),this.main.windowStateManager.registerOneTimeBackButtonListener(()=>{t.close()}),t.heading(x.SettingsHeading());let e=y("<div></div>");t.addDiv(e);let i=y('<div class="jo_settingsTabBody"></div>');t.addDiv(i),this.$settingsLeftMenuDiv=y('<div class="jo_settingsLeftMenu"></div>'),i.append(this.$settingsLeftMenuDiv),this.$settingsMainDiv=y('<div class="jo_settingsMain jo_scrollable"></div>'),i.append(this.$settingsMainDiv);let n=new pm(e[0],!0),s=new vn(x.UserSettingsTabHeading(),[]);if(s.onShow=()=>{this.showSettingsData("user")},n.addTab(s),n.setActive(s),this.main.user.is_teacher&&this.classSettings&&this.classSettings.length>0){let a=new vn(x.ClassSettingsTabHeading(),[]);a.onShow=()=>{this.showSettingsData("class")},n.addTab(a);let l=y('<select class="jo_settingsSelect"></select>');a.headingDiv.append(l[0]),no(l,this.classSettings.map(h=>({value:h.classId,object:h,caption:h.className})).sort((h,c)=>h.caption.localeCompare(c.caption))),this.currentClassId=this.classSettings[0].classId,l.on("change",()=>{let h=ro(l);this.currentClassId=h.classId,this.currentScope=="class"&&this.showSettingsData()})}if(this.main.user.is_schooladmin&&this.schoolSettings){let a=new vn(x.SchoolSettingsTabHeading(),[]);a.onShow=()=>{this.showSettingsData("school")},n.addTab(a)}t.buttons([{caption:x.CloseButton(),color:"green",callback:()=>{window.history.back()}}]),this.initSettingsExplorer()}async getSettingsFromServer(){let t=await dt("/servlet/getSettings",{});t.success&&(this.classSettings=t.classSettings,this.schoolSettings=t.schoolSettings)}showSettingsData(t){if(t&&(this.currentScope=t),this.$settingsMainDiv.empty(),!!this.currentSettingsGroup){if(this.currentSettingsGroup.image){let e=y(`<img class="jo_settingImage" src="${this.currentSettingsGroup.image}">`);this.$settingsMainDiv.append(e)}this.$settingsMainDiv.append(y(`<div class="jo_settingsGroupCaption">${this.currentSettingsGroup.name()}</div>`)),this.currentSettingsGroup.description&&this.$settingsMainDiv.append(y(`<div class="jo_settingsGroupDescription">${this.currentSettingsGroup.description()}</div>`));for(let e of this.currentSettingsGroup.settings.filter(i=>i.settingType=="setting")){let i=y('<div class="jo_settingDiv"></div>');this.$settingsMainDiv.append(i),this.renderSetting(e,i)}}}renderSetting(t,e){if(t.image){e.append(y('<div class="jo_settingClearBoth"></div>'));let a=y(`<img class="jo_settingImage" src="${t.image}">`);e.append(a)}e.append(y(`<div class="jo_settingCaption">${t.name()}</div>`)),t.description&&e.append(y(`<div class="jo_settingDescription">${t.description()}</div>`));let i=t.key,n=this.getCurrentSettingValues()[i],s=this.getDefaultSettingValue(i);switch(t.type){case"boolean":let a=[x.OptionTrue(),x.OptionFalse()];t.optionTexts&&(a=t.optionTexts.map(g=>g())),a.push(x.OptionDefault()+": "+(s?a[0]:a[1]));let l=[!0,!1,void 0];this.appendSelectElement(e,a,l,n,async(g,f)=>{await this.storeAndSave(t,t.key,g,f)});break;case"string":this.appendInputElement(e,n,s,async(g,f)=>{await this.storeAndSave(t,t.key,g,f)});break;case"enumeration":let h=t.optionTexts.map(g=>g()),c=t.optionValues.indexOf(s);c==-1&&(c=0),h.push(x.OptionDefault()+": "+h[c]);let u=t.optionValues.slice();u.push(void 0),this.appendSelectElement(e,h,u,n,async(g,f)=>{await this.storeAndSave(t,t.key,g,f)});break}t.image&&e.append(y('<div class="jo_settingClearBoth"></div>'))}async storeAndSave(t,e,i,n){if(this.getCurrentSettingValues()[e]!==i){this.getCurrentSettingValues()[e]=i,t.action&&t.action(this.main,i);let a={userId:this.currentScope=="user"?this.main.user.id:void 0,klasseId:this.currentScope=="class"?this.currentClassId:void 0,schuleId:this.currentScope=="school"?this.main.user.schule_id:void 0,settings:this.getCurrentSettingValues()};n.text(x.Saving()+"..."),n.css("color","var(--loginMessageColor)"),n.show(),await dt("/servlet/updateSettings",a),n.text(`-> ${x.Saved()} ✓`),n.css("color","var(--loginButtonBackground)")}}wrapWithSavingMessageAndAppendToParent(t,e){let i=y("<div class='jo_settingsWrapper'></div>");i.append(t);let n=y("<div class='jo_settingsSavingMessage'></div>");return i.append(n),n.hide(),e.append(i),t.on("click",()=>{n.text("")}),n}appendInputElement(t,e,i,n){let s=y(`<input type='text' placeholder='default: ${i}' class='jo_settingsInput'>`);typeof e<"u"&&s.val(e);let a=this.wrapWithSavingMessageAndAppendToParent(s,t);s.on("focusout",async()=>{let l=s.val();l==""&&(l=void 0),await n(l,a)}),s.on("change",()=>{a.hide()})}appendSelectElement(t,e,i,n,s){let a=y('<select class="jo_settingsSelect"></select>'),l=this.wrapWithSavingMessageAndAppendToParent(a,t),h=[];for(let u=0;u<i.length;u++)h.push({value:""+i[u],caption:e[u],object:i[u]});no(a,h);let c=h.findIndex(u=>u.object===n);a[0].selectedIndex=c,a.on("change",async()=>{await s(ro(a),l)})}getDefaultSettingValue(t){let e;return this.currentScope=="user"&&this.ownClassSettings&&(e=this.ownClassSettings[t]),typeof e>"u"&&(e=this.schoolSettings[t]),typeof e>"u"&&(e=this.main.settings.values.default[t]),e}getCurrentSettingValues(){var t;switch(this.currentScope){case"user":return this.userSettings;case"class":return this.main.user.is_schooladmin||this.main.user.is_admin||this.main.user.is_teacher?((t=this.classSettings.find(e=>e.classId==this.currentClassId))==null?void 0:t.settings)||{}:this.ownClassSettings;case"school":return this.schoolSettings}return{}}initSettingsExplorer(){this.settingsExplorer=new di(this.$settingsLeftMenuDiv[0],{withSelection:!0,selectMultiple:!1,captionLine:{enabled:!1},buttonAddElements:!1,buttonAddFolders:!1,withFolders:!0,withDeleteButtons:!1,isDragAndDropSource:!1,orderBy:"comparator"});for(let t of hg.filter(e=>e.settingType==="group"))this.addSettingsToExplorer(t);this.settingsExplorer.nodeClickedCallback=t=>{this.currentSettingsGroup=t,this.showSettingsData()}}addSettingsToExplorer(t,e=null){this.settingsExplorer.addNode(t.settings.find(i=>i.settingType==="group")!=null,t.name(),void 0,t,e),t.settings.filter(i=>i.settingType==="group").forEach(i=>{this.addSettingsToExplorer(i,t)})}}class Je{}r(Je,"importRepository",()=>d({de:"Repository importieren",en:"Import repository"})),r(Je,"importRepositoryDescription",()=>d({de:"1. Wählen Sie eine Datei aus, die das exportierte Repository enthält, das Sie importieren möchten, oder ziehen Sie sie in das gestrichelte Rechteck.",en:"1. Select a file that contains the exported repository you want to import or drag them into the dashed rectangle."})),r(Je,"renameDescription",()=>d({de:"2. Optional: Geben Sie einen neuen Namen für das Repository ein. Wenn Sie keinen Namen angeben, wird der Name aus der Exportdatei verwendet.",en:"2. Optional: Enter a new name for the repository. If you do not provide a name, the name from the export file will be used."})),r(Je,"filesSelected",()=>d({de:"Dateien ausgewählt",en:"files selected"})),r(Je,"newName",()=>d({de:"Neuer Name",en:"New name"})),r(Je,"import",()=>d({de:"Importieren",en:"Import"})),r(Je,"cancel",()=>d({de:"Abbrechen",en:"Cancel"})),r(Je,"noFilesSelected",()=>d({de:"Es wurden keine Dateien ausgewählt. Bitte wählen Sie eine Datei aus.",en:"No files selected. Please select a file."})),r(Je,"wrongFileFormat",t=>d({de:`Die Datei "${t}" ist keine gültige Exportdatei für ein Repository. Bitte wählen Sie eine gültige Datei aus.`,en:`The file "${t}" is not a valid export file for a repository. Please select a valid file.`})),r(Je,"importSuccessfully",t=>d({de:`Das Repository aus der Datei "${t}" wurde erfolgreich importiert.`,en:`The repository from the file "${t}" has been successfully imported.`})),r(Je,"exportTipp",()=>d({de:'<strong>Tipp:</strong> Sie können ein Repository als Datei exportieren, indem Sie in der Workspace-Liste auf einen Workspace rechtsklicken, der mit dem Repository verbunden ist, und dann "Repository als Datei Exportieren" auswählen.',en:'<strong>Hint:</strong> To export a repository as a file right-click on a workspace in the workspace list that is connected to the repository and select "Export repository as file".'}));class dv{static async exportRepository(t,e){let n=await dt("/servlet/getRepository",{repository_id:t,workspace_id:e});if(!n.success)return;let s=n.repository,a;if(s.spritesheet_id)try{let l=new As;await l.load(s.spritesheet_id),l.zipFile!=null&&(a=dg(l.zipFile))}catch{console.log("Fehler beim Laden des Spritesheets.")}return{name:s.name,files:s.files,history:s.history,description:s.description,spritesheetBase64:a}}}class hv{constructor(t){this.main=t}async importRepository(t){if(t.spritesheetBase64){let e=gm(t.spritesheetBase64);try{let i=await Cl.uploadSpritesheet(e,null,!1);t.spritesheet_id=i,t.spritesheetBase64=void 0}catch{}}await dt("/servlet/importRepository",t)}}const cv=""+new URL("assets/lightbulb-CnOCH59Y.png",import.meta.url).href;class uv{constructor(t){r(this,"dialog");r(this,"files");r(this,"$newNameInput");this.main=t,this.dialog=new mo}show(){this.dialog.initAndOpen(),this.dialog.heading(Je.importRepository()),this.dialog.description(Je.importRepositoryDescription());let t=y('<input type="file" id="file" name="file" multiple />');this.dialog.addDiv(t),t.on("change",n=>{this.files=n.originalEvent.target.files});let e=y(`<div class="jo_workspaceimport_dropzone"><div>${ot.dragFilesHere()}</div></div>`);this.dialog.addDiv(e);let i=y('<div class="jo_workspaceimport_dropzone_inner"></div>');e.append(i),this.dialog.description("").text(Je.renameDescription()),this.$newNameInput=this.dialog.input("text",Je.newName()),e.on("dragover",n=>{n.stopPropagation(),n.preventDefault(),n.originalEvent.dataTransfer.dropEffect="copy"}),e.on("drop",n=>{n.stopPropagation(),n.preventDefault(),this.files=n.originalEvent.dataTransfer.files,i.text(this.files.length+" "+Je.filesSelected())}),this.dialog.buttons([{caption:Je.import(),color:"#18a000ff",callback:()=>{this.importFiles()}},{caption:Je.cancel(),color:"#caaf17ff",callback:()=>{this.dialog.close()}}]),this.dialog.addDiv(y('<div style="height:20px"></div>')),this.dialog.addDiv(y("")),this.dialog.description(`<img src="${cv}" style="width:32px; margin-right: 5px;">`+Je.exportTipp())}async importFiles(){if(!this.files||this.files.length===0){alert(Je.noFilesSelected());return}let t=this.files[0];var e=new FileReader;e.onload=async i=>{var h,c;let n=i.target.result;if(!n.startsWith("{")){alert(Je.wrongFileFormat(t.name));return}let s;try{s=JSON.parse(n)}catch{alert(Je.wrongFileFormat(t.name));return}let a=(c=(h=this.$newNameInput.val())==null?void 0:h.toString())==null?void 0:c.trim();a&&a.length>0&&(s.name=a);var l=new hv(this.main);await l.importRepository(s),alert(Je.importSuccessfully(t.name)),this.dialog.close()},e.readAsText(t)}}class mv{constructor(t){r(this,"currentSubmenu",{});r(this,"openSubmenusOnMousemove",!1);this.main=t}initGUI(t,e){let i=this,n=this.main.getMainEditor(),s={items:[{identifier:T.File(),subMenu:{items:[{identifier:T.ImportWorkspace(),action:()=>{new Zy(this.main).show()}},{identifier:T.ExportCurrentWorkspace(),action:async()=>{var u;let a=this.main.currentWorkspace;a==null&&alert(T.NoWorkspaceSelected());let l=a.name.replace(/\//g,"_"),h=(u=this.main.pruefungManagerForStudents)==null?void 0:u.pruefung,c=this.main.user;h!=null&&(l=h.name.replace(/\//g,"_")+" ("+c.familienname+" "+c.rufname+"; "+c.username+")"),Mr(await Br.exportWorkspace(a),l+".json")}},{identifier:T.ExportAllWorkspaces(),action:async()=>{let a="all_workspaces";this.main.user;let l=await Br.exportAllWorkspaces(this.main);Mr(l,a+".json")}}]}},{identifier:T.Edit(),subMenu:{items:[{identifier:T.Undo(),action:()=>{n.trigger(".","undo",{})}},{identifier:T.Redo(),action:()=>{n.trigger(".","redo",{})}},{identifier:"-"},{identifier:T.Copy(),action:()=>{n.getAction("editor.action.clipboardCopyAction").run()}},{identifier:T.Cut(),action:()=>{n.getAction("editor.action.clipboardCutAction").run()}},{identifier:T.CopyToTop(),action:()=>{n.getAction("editor.action.copyLinesUpAction").run()}},{identifier:T.CopyToBottom(),action:()=>{n.getAction("editor.action.copyLinesDownAction").run()}},{identifier:T.MoveToTop(),action:()=>{n.getAction("editor.action.moveLinesUpAction").run()}},{identifier:T.MoveToBottom(),action:()=>{n.getAction("editor.action.moveLinesDownAction").run()}},{identifier:"-"},{identifier:T.Find(),action:()=>{n.getAction("actions.find").run()}},{identifier:T.Replace(),action:()=>{n.getAction("editor.action.startFindReplaceAction").run()}},{identifier:"-"},{identifier:T.ToggleComment(),action:()=>{n.getAction("editor.action.commentLine").run()}},{identifier:T.AutoFormat(),action:()=>{n.getAction("editor.action.formatDocument").run()}},{identifier:"-"},{identifier:T.FindCorrespondingBracket(),action:()=>{n.getAction("editor.action.jumpToBracket").run()}},{identifier:"-"},{identifier:T.FoldAll(),action:()=>{n.getAction("editor.foldAll").run()}},{identifier:T.UnfoldAll(),action:()=>{n.getAction("editor.unfoldAll").run()}},{identifier:"-"},{identifier:T.TriggerSuggest(),action:()=>{n.focus(),setTimeout(()=>{n.getAction("editor.action.triggerSuggest").run()},200)}},{identifier:T.TriggerParameterHint(),action:()=>{n.getAction("editor.action.triggerParameterHints").run()}},{identifier:T.GoToDefinition(),action:()=>{n.focus(),setTimeout(()=>{n.getAction("editor.action.revealDefinition").run()},200)}}]}},{identifier:T.View(),subMenu:{items:[{identifier:T.Theme(),subMenu:{items:[{identifier:T.Dark(),action:()=>{i.switchTheme("dark")}},{identifier:T.Light(),action:()=>{i.switchTheme("light")}}]}},{identifier:"-"},{identifier:T.HighContrastOnOff(),action:()=>{n.getAction("editor.action.toggleHighContrast").run()}},{identifier:"-"},{identifier:T.LinebreakOnOff(),action:()=>{let a=this.main.editor.editor.getOption(H.EditorOption.wordWrap);a=a=="on"?"off":"on",this.main.editor.editor.updateOptions({wordWrap:a})}}]}},{identifier:T.Repository(),subMenu:{items:[{identifier:T.ConfigureOwnRepositories(),action:()=>{this.main.repositoryUpdateManager.show(null)}},{identifier:T.Checkout(),action:()=>{this.main.repositoryCheckoutManager.show(null)}},{identifier:T.importRepository(),action:()=>{new uv(this.main).show()}}]}},{identifier:T.Sprites(),subMenu:{items:[{identifier:T.AddOwnSprites(),action:()=>{this.main.spriteManager.show()}},{identifier:"-"},{identifier:T.SpriteCatalogue(),link:e+"spriteLibrary.html?csrfToken="+He+"&lang="+(t.gui_state.language??"de")}]}},{identifier:T.Help(),subMenu:{items:[{identifier:T.VideoTutorials(),link:"https://www.learnj.de/doku.php?id=api:ide_manual:start"},{identifier:T.JavaTutorial(),link:"https://www.learnj.de/doku.php"},{identifier:"-"},{identifier:T.APIDoc(),link:"https://www.learnj.de/doku.php?id=api:documentation:start"},{identifier:T.APIReference(),link:e+"api_documentation.html?csrfToken="+He+"&lang="+(t.gui_state.language??"de")},{identifier:"-"},{identifier:T.Shortcuts(),link:e+"shortcuts.html?csrfToken="+He+"&lang="+(t.gui_state.language??"de")},{identifier:"-"},{identifier:T.Changelog(),link:"https://www.learnj.de/doku.php?id=javaonline:changelog"},{identifier:T.Roadmap(),link:"https://www.learnj.de/doku.php?id=javaonline:roadmap"},{identifier:"-"},{identifier:T.EditorCommandPalette(),action:()=>{setTimeout(()=>{i.main.getMainEditor().focus(),n.getAction("editor.action.quickCommand").run()},500)}},{identifier:"-"},{identifier:T.ChangePassword(),action:()=>{new lg(i.main).show()}},{identifier:"-"},{identifier:T.BugReport(),action:()=>{new Xy(this.main).show()}},{identifier:"-"},{identifier:T.About(),link:"https://www.learnj.de/doku.php?id=javaonline:ueber"},{identifier:T.Imprint(),link:"https://www.learnj.de/doku.php?id=ide:impressum"},{identifier:T.PrivacyPolicy(),link:"https://www.learnj.de/doku.php?id=ide:datenschutzerklaerung"},{identifier:"<div class='jo_menu_version'>"+T.Version()+" 2.2.1 (13.2.2026, 09:41 Uhr)</div>",noHoverAnimation:!0}]}}]};t!=null&&(t.is_admin||t.is_schooladmin||t.is_teacher)&&s.items[0].subMenu.items.push({identifier:T.ClassesUserTests(),link:e+"administration_mc.html?csrfToken="+He+"&lang="+(t.gui_state.language??"de")}),t!=null&&t.is_admin&&s.items[0].subMenu.items.push({identifier:T.ServerStatistics(),link:e+"statistics.html?csrfToken="+He+"&lang="+(t.gui_state.language??"de")},{identifier:T.ShutdownServer(),action:()=>{confirm(T.ReallyShutdownServer())&&Re("shutdown",{},()=>{alert(T.ServerShutdownDone())},a=>{alert(a)})}}),s.items[0].subMenu.items.push({identifier:T.Settings(),action:()=>{new lv(i.main).open()}},{identifier:T.SaveAndExit(),action:()=>{y("#buttonLogout").trigger("click")}}),y("#mainmenu").empty(),this.initMenu(s,0)}switchTheme(t){this.main.viewModeController.setTheme(t)}initMenu(t,e){t.level=e,e==0?t.$element=y("#mainmenu"):(t.$element=y('<div class="jo_submenu"></div>'),y("body").append(t.$element)),t.$element.data("model",t);for(let n of t.items){if(n.identifier=="-")n.$element=y('<div class="jo_menuitemdivider"></div>');else{let s=n.noHoverAnimation?' class="jo_menuitem_nohover"':"";if(n.$element=y(`<div${s}>${n.identifier}</div>`),n.link!=null){let a=y('<a href="'+n.link+'" target="_blank" class="jo_menulink"></a>');a.attr("style","color: var(--fontColorNormal) !important"),a.on("pointerdown",l=>{l.stopPropagation()}),a.on("pointerup",l=>{l.stopPropagation(),setTimeout(()=>{t.$element.hide()},500)}),a.append(n.$element),n.$element=a}n.subMenu!=null&&this.initMenu(n.subMenu,e+1),this.initMenuitemCallbacks(t,n),e==0&&n.$element.addClass("jo_mainmenuitem")}t.$element.append(n.$element),n.$element.data("model",n)}let i=this;y(document).on("pointerdown",()=>{for(let n=0;n<5;n++)i.currentSubmenu[n]!=null&&(i.currentSubmenu[n].hide(),i.currentSubmenu[n]=null);i.openSubmenusOnMousemove=!1})}initMenuitemCallbacks(t,e){let i=this;e.action!=null&&(e.$element.on("pointerdown",n=>{n.stopPropagation()}),e.$element.on("pointerup",n=>{n.stopPropagation(),e.action(e.identifier);for(let s=0;s<5;s++)i.currentSubmenu[s]!=null&&(i.currentSubmenu[s].hide(),i.currentSubmenu[s]=null);i.openSubmenusOnMousemove=!1})),e.subMenu!=null?(e.$element.on("pointerdown",n=>{i.opensubmenu(e),i.openSubmenusOnMousemove=!0,n.stopPropagation()}),e.$element.on("mousemove.mainmenu",()=>{i.openSubmenusOnMousemove?i.opensubmenu(e):i.currentSubmenu[t.level+1]!=null&&(i.currentSubmenu[t.level+1].hide(),i.currentSubmenu[t.level+1]=null)})):e.$element.on("mousemove.mainmenu",()=>{i.currentSubmenu[t.level+1]!=null&&(i.currentSubmenu[t.level+1].hide(),i.currentSubmenu[t.level+1]=null)})}opensubmenu(t){let e=t.subMenu,i,n;e.level==1?(i=t.$element.position().left,n=30):(i=t.$element.offset().left+t.$element.width(),n=t.$element.offset().top),e.$element.css({top:""+n+"px",left:""+i+"px"}),this.currentSubmenu[e.level]!=null&&this.currentSubmenu[e.level].hide(),e.$element.show(),this.currentSubmenu[e.level]=e.$element}}class cg{constructor(t,e){r(this,"color","");r(this,"lastSpan","");r(this,"$lastSpan");r(this,"$lastDiv");r(this,"$outputDiv");r(this,"maxLines",2e3);r(this,"$lines",[]);r(this,"newLines",0);r(this,"printCommands",[]);r(this,"currentLinelength",0);r(this,"beginOfLineState",!0);this.$runDiv=t,this.main=e,y(()=>{this.$outputDiv=t.find(".jo_output"),this.clear();let i=this,n=0,s=!1,a=performance.now();setInterval(()=>{i.printCommands.length>0&&(i.flush(),performance.now()-a>200?i.$outputDiv[0].scrollTop=i.$outputDiv[0].scrollHeight:s=!0,a=performance.now()),n++%20==0&&s&&setTimeout(()=>{i.$outputDiv[0].scrollTop=i.$outputDiv[0].scrollHeight,s=!1},200)},50)})}isTestPrintManager(){return!1}showProgramEnd(){let t=this.$runDiv.find(".jo_run-programend");t.show(),t.addClass("jo_programendkf"),setTimeout(()=>{t.removeClass("jo_programendkf"),t.hide()},3e3)}flush(){if(this.newLines>=this.maxLines){this.$outputDiv.empty();let t=this.printCommands.length-1,e=0;for(;t>=0;){if(this.printCommands[t].newLine&&(e++,e>=this.maxLines)){this.printCommands.splice(0,t+1);break}t--}}this.newLines=0,this.$lastSpan!=null&&(this.$lastSpan.remove(),this.lastSpan.endsWith("</span>")&&(this.lastSpan=this.lastSpan.substring(0,this.lastSpan.length-7)));for(let t of this.printCommands)if(this.beginOfLineState&&t.text.startsWith(" ")?t.text.match(/^( *)(.*)$/)[2].length>0&&(this.beginOfLineState=!1):t.text.length>0&&(this.beginOfLineState=!1),t.text=t.text.replace(/</g,"&lt;").replace(/>/g,"&gt;"),t.color==null&&(t.color="var(--defaultOutputColor)"),(this.lastSpan==""||this.color!=t.color)&&(this.lastSpan!=""&&(this.lastSpan+="</span>"),this.lastSpan+='<span style="color: '+t.color+'">',t.newLine&&t.text==""&&(this.lastSpan+="​"),this.color=t.color),this.currentLinelength<=1e4&&(this.lastSpan+=t.text,this.currentLinelength+=t.text.length),t.newLine){this.beginOfLineState=!0,this.lastSpan.endsWith("</span>")||(this.lastSpan+="</span>"),this.$lastSpan=y(this.lastSpan),this.$lastDiv.append(this.$lastSpan),this.lastSpan="",this.$lastSpan=null,this.$lastDiv=y("<div></div>");let e=this.main.getInterpreter().inputManager.$input;e!=null?this.$lastDiv.insertBefore(e):this.$outputDiv.append(this.$lastDiv),this.$lines.push(this.$lastDiv),this.currentLinelength=0}if(this.lastSpan!=""&&(this.lastSpan.endsWith("</span>")||(this.lastSpan+="</span>"),this.$lastSpan=y(this.lastSpan),this.$lastDiv.append(this.$lastSpan)),this.$lines.length>this.maxLines*1.5){let t=this,e=t.$lines.length-t.maxLines,i=t.$lines.splice(0,e);for(let n of i)n.remove()}this.printCommands=[]}clear(){this.$outputDiv.empty(),this.$lastDiv=y("<div></div>"),this.$lines.push(this.$lastDiv),this.$outputDiv.append(this.$lastDiv),this.currentLinelength=0,this.color="",this.lastSpan="",this.printCommands=[]}print(t,e,i){if(t==null&&(t=""),e&&(t+=`
481
481
  `),t!=""){if(i==null?i="var(--defaultPrintColor)":i=Hi.convertToInt(i),typeof i=="number"){for(i=i.toString(16);i.length<6;)i="0"+i;i="#"+i}if(t=t.toString(),t.indexOf(`
482
482
  `)>=0){let n=t.split(`
483
483
  `);for(let s=0;s<n.length;s++){let a=n[s],l=s<n.length-1;a==""&&s==n.length-1||(this.printCommands.push({text:a,color:i,newLine:l}),l&&this.newLines++)}}else this.printCommands.push({text:t,color:i,newLine:!1})}}printHtmlElement(t){this.flush(),this.$lines.push(y(t)),this.$outputDiv.append(y(t))}}class fm{constructor(t,e){r(this,"position",0);r(this,"xMax",0);r(this,"$grip");r(this,"$bar");r(this,"$display");r(this,"$outer");r(this,"gripWidth",10);r(this,"overallWidth",100);r(this,"intervalBorders",[1,10,100,1e3,5e4,1e6,5e7]);r(this,"maxSpeed",this.intervalBorders[this.intervalBorders.length-1]);r(this,"initialSpeed",this.maxSpeed);this.interpreter=e,this.$outer=y('<div class="jo_speedcontrol-outer" title="'+Dr.speedControl()+'" draggable="false"></div>'),this.$bar=y('<div class="jo_speedcontrol-bar" draggable="false"></div>'),this.$grip=y('<div class="jo_speedcontrol-grip" draggable="false"></div>'),this.$display=y('<div class="jo_speedcontrol-display" draggable="false">100 '+Dr.stepsPerSecond()+"</div>"),this.$grip.append(this.$display),this.$outer.append(this.$bar,this.$grip),t.append(this.$outer)}setInterpreter(t){this.interpreter=t}initGUI(){let t,e,i=this;i.overallWidth=Rl(this.$outer.css("width")),i.gripWidth=Rl(i.$grip.css("width")),i.xMax=i.overallWidth-i.gripWidth;let n=window.PointerEvent?"pointer":"mouse";i.$outer.on(n+"down",s=>{let a=s.pageX-i.$outer.offset().left-4;i.setSpeed(a),i.$grip.css("left",a+"px"),i.$grip.trigger(n+"down",[s.clientX])}),this.$grip.on(n+"down",(s,a)=>{a==null&&(a=s.clientX),t=a,e=i.position,y(".joe_controlPanel_top").css("z-index","1000"),i.$display.show(),y(document).on(n+"move.speedcontrol",l=>{let h=l.clientX-t;i.setSpeed(e+h)}),y(document).on(n+"up.speedcontrol",()=>{y(document).off(n+"up.speedcontrol"),y(document).off(n+"move.speedcontrol"),i.$display.hide(),y(".joe_controlPanel_top").css("z-index","0")}),s.stopPropagation()}),this.setSpeed(this.initialSpeed)}getSpeedInStepsPerSecond(){return this.interpreter.getStepsPerSecond()}setSpeedInStepsPerSecond(t){if(t=="max"&&(t=this.maxSpeed),t>this.intervalBorders[this.intervalBorders.length-1]){this.$grip.css("left",this.xMax+"px");return}t=Math.max(t,1);for(let e=0;e<this.intervalBorders.length-1;e++){let i=this.intervalBorders[e],n=this.intervalBorders[e+1];if(t>=i&&t<=n){let s=this.xMax/(this.intervalBorders.length-1),a=Math.round(s*e+s*(t-i)/(n-i));this.$grip.css("left",a+"px"),this.position=a;break}}this.setInterpreterSpeed(t)}setSpeed(t){t<0&&(t=0),t>this.xMax&&(t=this.xMax),this.position=t,this.$grip.css("left",t+"px");let e=this.xMax/(this.intervalBorders.length-1),i=Math.floor(t/e);i==this.intervalBorders.length-1&&i--;let n=(t-i*e)/e,s=this.intervalBorders[i],a=this.intervalBorders[i+1],l=s+(a-s)*n;l>=this.intervalBorders[this.intervalBorders.length-1]-10&&(l=1e11),this.setInterpreterSpeed(l)}setInterpreterSpeed(t){let e=!1,i=""+fm.printMillions(t);t>=this.intervalBorders[this.intervalBorders.length-1]-10-10&&(i=Dr.maximumSpeed(),e=!0),this.$display.html(i+(e?"":" "+Dr.stepsPerSecond())),this.interpreter.setStepsPerSecondPerSpeedControl(t,e),this.interpreter.hideProgrampointerPosition()}static printMillions(t){return t<1e6?""+Math.trunc(t):(t=Math.trunc(t/1e3)*1e3/1e6,t+" "+Dr.millions())}}class ug{constructor(t,e,i){r(this,"speedControl");r(this,"buttonData",[{actionIdentifier:"interpreter.start",title:T.ProgramRun(),iconClass:"img_start-dark jo_button"},{actionIdentifier:"interpreter.pause",title:T.ProgramPause(),iconClass:"img_pause-dark jo_button"},{actionIdentifier:"interpreter.stop",title:T.ProgramStop(),iconClass:"img_stop-dark jo_button"},{actionIdentifier:"interpreter.stepOver",title:T.ProgramStepOver(),iconClass:"img_step-over-dark jo_button"},{actionIdentifier:"interpreter.stepInto",title:T.ProgramStepInto(),iconClass:"img_step-into-dark jo_button"},{actionIdentifier:"interpreter.stepOut",title:T.ProgramStepOut(),iconClass:"img_step-out-dark jo_button"},{actionIdentifier:"interpreter.gotoCursor",title:T.ProgramGotoCursor(),iconClass:"img_goto-cursor-dark jo_button"},{actionIdentifier:"interpreter.restart",title:T.ProgramRestart(),iconClass:"img_restart-dark jo_button"},{actionIdentifier:"interpreter.startTests",title:T.ProgramExecuteAllTests(),iconClass:"img_test-start jo_button jo_start-test-button"}]);for(let n of this.buttonData){let s=y(`<div title="${n.title}" class="${n.iconClass}"></div>`);n.$button=s,t.append(s),i.registerButton(n.actionIdentifier,s),n.actionIdentifier=="interpreter.pause"&&s.hide()}this.speedControl=new fm(t,e),this.speedControl.initGUI()}getButton(t){var e;return(e=this.buttonData.find(i=>i.actionIdentifier==t))==null?void 0:e.$button}}class pv{constructor(t,e,i){r(this,"$dialog");r(this,"$dialogMain");r(this,"studentCount",0);this.classes=t,this.workspace=e,this.main=i,this.init()}init(){this.$dialog=y("#dialog"),y("#main").css("display","none"),this.$dialog.append(y(`<div class="jo_ds_heading">${oi.distributeWorkspaceToIndividualStudents()}</div>
@@ -602,7 +602,7 @@ class MyFirstTestClass {
602
602
  style="stroke:none;fill:#008000;fill-opacity:0.8">
603
603
  </rect>
604
604
  </svg>
605
- </div>`),this.tabManager.insertIntoRightDiv(this.$updateTimer[0]))}initGUI(){cp(this.$bottomDiv),this.console!=null&&this.console.initGUI(),this.homeworkManager!=null&&this.homeworkManager.initGUI(),this.$bottomDiv.find(".jo_tabs").children().first().trigger("click")}showHomeworkTab(){this.homeworkManager.tab.setVisible(!0)}showJunitTab(){this.jUnitTab.show()}hideHomeworkTab(){this.homeworkManager.tab.setVisible(!1)}showHideDBBusyIcon(t){let e=t?"block":"none";this.$dbBusyImage.css("display",e)}}class Ag{}r(Ag,"NewFileName",()=>d({de:"Neue Datei",en:"new file"}));class Bv{constructor(t,e){r(this,"treeview");this.$fileListDiv=t,this.main=e,this.treeview=new di(t[0],{captionLine:{enabled:!0,text:"Programmdateien"},withSelection:!0,selectMultiple:!1,buttonAddElements:!0,buttonAddElementsCaption:"Dateien hinzufügen",buttonAddFolders:!1,comparator:(i,n)=>i.name.localeCompare(n.name),keyExtractor:i=>i.id,parentKeyExtractor:i=>i.parent_folder_id,withDeleteButtons:!0,confirmDelete:!0,orderBy:"comparator",scrollToSelectedElement:!1}),this.treeview.newNodeCallback=async(i,n)=>{let s=this.main.addFile({text:"",title:i}),a=Ii.filenameToFileType(s.name);return n.iconClass=a.iconclass,n.readOnly=a.suffix==".md",n.externalObject=s,this.treeview.selectNodeAndSetFocus(n,!0),s},this.treeview.renameCallback=async(i,n,s)=>(n=n.substring(0,30),i.name=n,i.setSaved(!1),{correctedName:n,success:!0}),this.treeview.deleteCallback=async(i,n)=>{let s=this.treeview.nodes.filter(a=>!a.isRootNode()&&a.externalObject!=i).map(a=>a.externalObject);return this.main.removeFile(i),n!=null&&n.hasFocus&&(s.length>0?this.selectFile(s[0],!0):this.selectFirstFileIfPresent()),this.treeview.nodes.forEach(a=>{var l;return(l=a.externalObject)==null?void 0:l.setSaved(!1)}),this.main.showResetButton(),!0},this.treeview.nodeClickedCallback=i=>{this.selectFile(i,!1)}}selectFirstFileIfPresent(){if(this.treeview.nodes.length>1)this.treeview.selectNodeAndSetFocus(this.treeview.nodes[1],!0);else{let t=this.main.getMainEditor(),e=H.createModel("Keine Datei vorhanden.","plaintext");t.setModel(e),t.updateOptions({readOnly:!0})}}getUniqueFilename(){let t=Ag.NewFileName(),e=0,i=t+" "+e+".java";for(;this.treeview.nodes.some(n=>n.caption==(i=t+" "+e+".java"));)e++;return i}removeAllFiles(){this.treeview.clear(),this.selectFirstFileIfPresent()}addFile(t){let e=Ii.filenameToFileType(t.name),i=e.iconclass,n=this.treeview.addNode(!1,t.name,i,t);n.readOnly=e.suffix==".md"}removeFile(t,e=!0){this.treeview.removeElementAndItsFolderContents(t),this.selectFirstFileIfPresent(),this.treeview.nodes.forEach(i=>{var n;return(n=i.externalObject)==null?void 0:n.setSaved(!1)})}renameElement(t,e){let i=t.$fileDiv.find(".jo_filename"),n=t.file.name.indexOf("."),s=n==null?null:{start:0,end:n};im(i,i,a=>{var h;t.file.name=a,i.html(a),t.$fileDiv.removeClass("jo_java jo_emptyFile jo_xml jo_json jo_text");let l=Ii.filenameToFileType(a);t.$fileDiv.addClass("jo_"+l.iconclass),H.setModelLanguage((h=t.file)==null?void 0:h.getMonacoModel(),l.language),e!=null&&e()},s)}selectFile(t,e=!0){if(!t)return;switch(Ii.filenameToFileType(t.name).suffix){case".java":this.main.$hintDiv.hide(),this.main.$monacoDiv.show(),this.main.setFileActive(t),e&&setTimeout(()=>{this.main.getMainEditor().focus()},100),this.main.interpreter.onFileSelected();break;case".md":this.main.$monacoDiv.hide(),this.main.$hintDiv.show();let n={},s=[],a=$m({highlight:function(l,h){return s.push(l),""}});a.renderer.rules.code_inline=function(l,h,c,u,g){var f=l[h];return s.push(f.content),""},a.render(t.getText()),this.colorize(s,n,()=>{let l=$m({highlight:function(c,u){return n[c]}});l.renderer.rules.code_inline=function(c,u,g,f,b){var A=c[u];return n[A.content].replace("<br/>","")};let h=l.render(t.getText());this.main.$hintDiv.html(h)});break}}colorize(t,e,i){let n=this;if(t.length>0){let s=t.pop();H.colorize(s,"myJava",{tabSize:3}).then(a=>{e[s]=a,n.colorize(t,e,i)})}else i()}getFiles(){return this.treeview.nodes.filter(t=>!t.isRootNode()&&t.externalObject).map(t=>t.externalObject)}markFilesAsStartable(t,e){for(let i of this.treeview.nodes.filter(n=>!n.isRootNode())){let n=i.getIconButtonByTag("Start"),s=i.externalObject;n||(n=i.addIconButton("img_start-dark",()=>{this.main.onStartFileClicked(s)},"Starte das in dieser Datei enthaltene Hauptprogramm",!0)),n.tag="Start",n.setVisible(t.indexOf(s)>=0),n.setActive(e)}}renderErrorCount(t,e){if(e!=null)for(let i of t.getFiles()){let n=e.get(i),s=n==null||n==0?"":"("+n+")";this.treeview.findNodeByElement(i).setRightPartOfCaptionErrors(s)}}markAsSelectedButDontInvokeCallback(t){let e=this.treeview.findNodeByElement(t);e&&(this.treeview.unselectAllNodes(!0),e.setSelected(!0),e.setFocus(!0))}}class Ov{constructor(){r(this,"db")}open(t){if(window.indexedDB){let e=window.indexedDB.open("LearnJ",1),i=this;e.onerror=function(n){console.log("Couldn't open IndexedDB: "+n.type)},e.onsuccess=function(n){i.db=e.result,i.db.onerror=function(s){console.log("Datenbankfehler: "+s.target.error.message)},t()},e.onupgradeneeded=function(n){i.db=n.target.result;let s=i.db.createObjectStore("scripts",{keyPath:"scriptId",autoIncrement:!1});s.transaction.oncomplete=function(a){}}}else console.log("IndexedDB not available.")}writeScript(t,e){this.db.transaction("scripts","readwrite").objectStore("scripts").put({scriptId:t,script:e})}removeScript(t){this.db.transaction("scripts","readwrite").objectStore("scripts").delete(t)}getScript(t,e){let n=this.db.transaction("scripts","readwrite").objectStore("scripts").get(t);n.onerror=s=>{e(null)},n.onsuccess=s=>{n.result==null?e(null):e(n.result.script)}}}class Vv{constructor(t){this.file=t}getName(){return this.file.name}getText(){return this.file.getText()}}class Lv{constructor(t){this.ide=t}getFiles(){return this.ide.getCurrentWorkspace().getFiles().map(t=>new Vv(t))}}const No=class No{static registerIDE(t){No.ideMap.set(t.config.id,new Lv(t))}getIDE(t){return No.ideMap.get(t)}};r(No,"ideMap",new Map);let Od=No;class Fv{constructor(t,e,i){r(this,"wholeWindowElement");r(this,"primaryButton");r(this,"additionalButtonTopRight");this.mainEmbedded=t,this.mainDiv=e,this.primaryButton=new io(i,["img_whole-window-dark","img_whole-window-back-dark"],(n,s)=>{this.onWholeWindowButtonClicked(s)},["IDE im Vollbild darstellen","IDE in Normalgröße darstellen"],!0,"append"),this.primaryButton.divElement.style.marginLeft="10px",this.primaryButton.divElement.style.marginRight="10px"}onWholeWindowButtonClicked(t){var e,i,n,s;switch(t){case 0:this.mainEmbedded.rightDiv.wholeWindowButton.setVisible(!0),(e=this.mainEmbedded.horizontalSlider)==null||e.restorePosition(),(i=this.mainEmbedded.verticalSlider)==null||i.restorePosition(),this.additionalButtonTopRight.remove(),document.body.classList.remove("joeCssFence"),pa(this.wholeWindowElement,this.mainDiv);break;case 1:this.additionalButtonTopRight=new io(this.mainEmbedded.rightDiv.tabManager.tabheadingRightDiv,["img_whole-window-back"],(a,l)=>{this.onWholeWindowButtonClicked(0)},["IDE in Normalgröße darstellen"],!0,"append"),this.mainEmbedded.rightDiv.wholeWindowButton.setVisible(!1),(n=this.mainEmbedded.horizontalSlider)==null||n.savePosition(),(s=this.mainEmbedded.verticalSlider)==null||s.savePosition(),document.body.classList.add("joeCssFence"),this.wholeWindowElement=R.makeDiv(document.body,"jo_wholeWindow","jo_wholeWindow_embeddedFullpage"),pa(this.mainDiv,this.wholeWindowElement);break}}}class wg{constructor(t,e){r(this,"config");r(this,"editor");r(this,"currentWorkspace");r(this,"actionManager");r(this,"language");r(this,"interpreter");r(this,"$runDiv");r(this,"debugger");r(this,"$debuggerDiv");r(this,"$alternativeDebuggerDiv");r(this,"bottomDiv");r(this,"$filesDiv");r(this,"ListDiv");r(this,"disassembler");r(this,"$hintDiv");r(this,"$monacoDiv");r(this,"$resetButton");r(this,"rightDiv");r(this,"$rightDivInner");r(this,"fileExplorer");r(this,"debounceDiagramDrawing");r(this,"indexedDB");r(this,"programControlButtons");r(this,"breakpointManager");r(this,"compileRunsAfterCodeReset",0);r(this,"settings");r(this,"lastActiveFile");r(this,"horizontalSlider");r(this,"verticalSlider");r(this,"embeddedFullpageController");this.$outerDiv=t,this.scriptList=e,this.readConfig(t),this.initGUI(t),this.initScripts().then(()=>{this.currentWorkspace.setLibraries(this.getCompiler()),this.loadUserSpritesheet().then(()=>{this.config.hideStartPanel||(this.indexedDB=new Ov,this.indexedDB.open(()=>{this.config.id!=null&&this.readScripts(async()=>{if(this.fileExplorer&&(this.getCompiler().setFiles(this.fileExplorer.getFiles()),this.fileExplorer.selectFirstFileIfPresent()),this.fileExplorer==null){let i=this.currentWorkspace.getFiles();this.getCompiler().setFiles(i),i.length>0&&this.setFileActive(i[0])}this.readClassDiagram(),this.getCompiler().triggerCompile()}),this.config.enableFileAccess&&(window.online_ide_access=new Od,Od.registerIDE(this))}))})})}isEmbedded(){return!0}getCompiler(){return this.language.getCompiler(this)}getInterpreter(){return this.interpreter}getCurrentWorkspace(){return this.currentWorkspace}getDebugger(){return this.debugger}getMonacoEditor(){return this.editor.editor}getRightDiv(){return this.rightDiv}getBottomDiv(){return this.bottomDiv}getActionManager(){return this.actionManager}addWorkspace(t){}getLanguage(){return this.language}getRepl(){var t;return(t=this.language)==null?void 0:t.getRepl(this)}getMainEditor(){return this.editor.editor}getReplEditor(){var t;return(t=this.bottomDiv)==null?void 0:t.console.editor}getSettings(){let t=this.config.settings||{};return this.settings||(this.settings=new gg(void 0,t,{},{})),this.settings}onCompilationFinished(t){var e,i;if(this.interpreter.setExecutable(t),this.bottomDiv&&this.fileExplorer){let n=(i=(e=this.bottomDiv)==null?void 0:e.errorManager)==null?void 0:i.showErrors(this.currentWorkspace);this.fileExplorer.renderErrorCount(this.currentWorkspace,n)}this.drawClassDiagrams(!this.rightDiv.isClassDiagramActive())}adjustWidthToWorld(){this.rightDiv.adjustWidthToWorld()}readClassDiagram(){if(!this.config.withClassDiagram)return;let t=()=>{var e;(e=this.rightDiv)!=null&&e.classDiagram?this.indexedDB.getScript(this.config.id+"-classDiagram",i=>{i!=null&&(this.rightDiv.classDiagram.clear(),this.rightDiv.classDiagram.deserialize(JSON.parse(i)),this.drawClassDiagrams(!1))}):setTimeout(()=>{t()},300)};t()}async tryLoadingWorkspaceFromURL(){if(!this.config.workspaceURLParameterName)return;let t=up(this.config.workspaceURLParameterName);if(t)try{let i=await(await fetch(t)).json();Array.isArray(i)||(i=[i]);let n=i[0];this.scriptList=n.modules.map(s=>({title:s.name,text:s.text}))}catch(e){console.log("Error retreiving or converting data from URL "+t+" to json."),console.error(e);return}}async initScripts(){var t;if((t=this.fileExplorer)==null||t.removeAllFiles(),await this.tryLoadingWorkspaceFromURL(),this.initWorkspace(this.scriptList),this.config.withFileList){for(let e of this.currentWorkspace.getFiles())this.fileExplorer.addFile(e);this.fileExplorer.selectFirstFileIfPresent()}else this.setFileActive(this.currentWorkspace.getFirstFile());this.getCompiler().triggerCompile()}readConfig(t){let e=t.data("java-online");e!=null&&typeof e=="string"?this.config=JSON.parse(e.split("'").join('"')):this.config={},typeof this.config.cacheUserEdits!="boolean"&&(this.config.cacheUserEdits=!0),this.config.hideEditor==null&&(this.config.hideEditor=!1),this.config.hideStartPanel==null&&(this.config.hideStartPanel=!1),this.config.withBottomPanel==null&&(this.config.withBottomPanel=this.config.withConsole||this.config.withPCode||this.config.withFileList||this.config.withErrorList),this.config.hideEditor&&(this.config.withBottomPanel=!1,this.config.withClassDiagram=!1,this.config.withFileList=!1,this.config.withConsole=!1,this.config.withPCode=!1,this.config.withErrorList=!1),this.config.withBottomPanel&&(this.config.withFileList==null&&(this.config.withFileList=!0),this.config.withPCode==null&&(this.config.withPCode=!0),this.config.withConsole==null&&(this.config.withConsole=!0),this.config.withErrorList==null&&(this.config.withErrorList=!0)),this.config.speed==null&&(this.config.speed="max"),this.config.libraries==null&&(this.config.libraries=[]),this.config.jsonFilename==null&&(this.config.jsonFilename="workspace.json")}setFileActive(t){var e;if(t){this.lastActiveFile&&this.lastActiveFile.saveViewState(this.getMainEditor()),this.config.withFileList&&this.fileExplorer.markAsSelectedButDontInvokeCallback(t),this.lastActiveFile=t,this.getMainEditor().updateOptions({readOnly:!1,lineNumbersMinChars:4});try{this.editor.editor.setModel(t.getMonacoModel())}catch{console.log("Catched!")}t.restoreViewState(this.getMainEditor()),(e=this.disassembler)==null||e.disassemble()}}eraseDokuwikiSearchMarkup(t){return t.replace(/<span class="search\whit">(.*?)<\/span>/g,"$1")}readScripts(t){let e=this.currentWorkspace.getFiles();if(e.forEach(n=>{n.getMonacoModel(),n.setSaved(!0)}),!this.config.cacheUserEdits){t();return}let i=this;this.indexedDB.getScript(this.config.id,n=>{var s;if(n==null)setTimeout(()=>{setInterval(()=>{i.saveScripts()},1e3)},2e3),t();else{let a=JSON.parse(n),l=a.length;for(let h of e.slice())(s=i.fileExplorer)==null||s.removeFile(h,!1);i.currentWorkspace.removeAllFiles();for(let h of a){let c=this.config.id+h;this.indexedDB.getScript(c,u=>{var g;if(u!=null){u=this.eraseDokuwikiSearchMarkup(u);let f=new Ue(this,h,u);f.getMonacoModel(),f.setSaved(!0),(g=i.fileExplorer)==null||g.addFile(f),i.currentWorkspace.addFile(f),i.showResetButton()}l--,l==0&&(setInterval(()=>{i.saveScripts()},1e3),t())})}}})}saveScripts(){var s;let t=this.currentWorkspace.getFiles(),e=[],i=!1;if(t.forEach(a=>i=i||!a.isSaved()),i){for(let a of t){e.push(a.name);let l=this.config.id+a.name;this.indexedDB.writeScript(l,a.getText()),a.setSaved(!0)}this.indexedDB.writeScript(this.config.id,JSON.stringify(e))}let n=(s=this.rightDiv)==null?void 0:s.classDiagram;n&&n.dirty&&(this.indexedDB.writeScript(this.config.id+"-classDiagram",JSON.stringify(n.serialize())),n.dirty=!1)}deleteScriptsInDB(){this.indexedDB.getScript(this.config.id,t=>{if(t!=null){let e=JSON.parse(t);for(let i of e){let n=this.config.id+i;this.indexedDB.removeScript(n)}this.indexedDB.removeScript(this.config.id)}}),this.indexedDB.removeScript(this.config.id+"-classDiagram")}initWorkspace(t){this.currentWorkspace=new yi("Embedded-Workspace",this,0),this.currentWorkspace.settings.libraries=this.config.libraries,this.currentWorkspace.id=0;for(let e of t)this.addFile(e)}addFile(t){Ii.filenameToFileType(t.title);let e=new Ue(this,t.title,t.text);e.id=this.currentWorkspace.getFiles().length,this.currentWorkspace.addFile(e);let i=this;return e.getMonacoModel().onDidChangeContent(()=>{i.considerShowingCodeResetButton()}),e}removeFile(t){var e;this.currentWorkspace.removeFile(t),(e=this.getCompiler())==null||e.triggerCompile()}initGUI(t){t.css({"background-image":"none","background-size":"100%"});let e=y('<div class="joe_centerDiv"></div>'),i=this.makeCodeResetModalWindow(t),n=this.makeRightDiv(),s=y('<div class="joe_editorDiv"></div>');this.$monacoDiv=y('<div class="joe_monacoDiv"></div>'),this.$hintDiv=y('<div class="joe_hintDiv jo_scrollable"></div>'),this.$resetButton=y('<div class="joe_resetButton jo_button jo_active" title="Code auf Ausgangszustand zurücksetzen">Code Reset</div>'),s.append(this.$monacoDiv,this.$hintDiv,this.$resetButton),this.$resetButton.hide(),this.$resetButton.on("click",()=>{i.show()}),this.$hintDiv.hide();let a=y('<div class="joe_controlsDiv"></div>'),l=y('<div class="joe_bottomDivInner"></div>'),h=y('<label type="file" class="img_open-file jo_button jo_active"style="margin-right: 8px;" title="Workspace aus Datei laden"><input type="file" style="display:none"></label>'),c=this;h.find("input").on("change",N=>{var $e=N.originalEvent.target.files;c.loadWorkspaceFromFile($e[0])});let u=y('<div class="img_save-dark jo_button jo_active"style="margin-right: 8px;" title="Workspace in Datei speichern"></div>');if(u.on("click",()=>{c.saveWorkspaceToFile()}),a.append(h,u),this.config.withBottomPanel){let N=y('<div class="joe_bottomDiv"></div>');l.append(a),N.append(l),this.config.withFileList&&(this.$filesDiv=this.makeFilesDiv(),N.prepend(this.$filesDiv),new Pr(this.$filesDiv[0],!1,!1,()=>{}),this.fileExplorer=new Bv(this.$filesDiv,this)),cp(l),e.append(s,N),this.verticalSlider=new Pr(N[0],!0,!0,()=>{this.editor.editor.layout()})}else e.prepend(s);this.config.withBottomPanel||(this.config.hideEditor?n.prepend(a):(e.prepend(a),a.addClass("joe_controlPanel_top"),s.css({position:"relative",height:"1px"}))),t.addClass("joe_javaOnlineDiv"),t.append(e,n),this.config.hideEditor||(this.horizontalSlider=new Pr(n[0],!0,!1,()=>{this.editor.editor.layout()})),this.actionManager=new vp(t),this.actionManager.init(),this.editor=new rg(this,!1,!0),this.editor.initGUI(this.$monacoDiv),this.$monacoDiv.find(".monaco-editor").css("z-index","10"),t.attr("tabindex")==null&&t.attr("tabindex","0"),this.config.withBottomPanel&&(this.bottomDiv=new vg(this,l,this.config.withConsole,this.config.withPCode,this.config.withErrorList,!0),this.bottomDiv.initGUI());let g=this.$rightDivInner.find(".jo_graphics")[0],f=this.$rightDivInner.find(".jo_coordinates")[0];this.debugger=new yp(this.$debuggerDiv[0],this);let b=new sp(this),A=new ag(this.$runDiv,this),k=new cg(this.$runDiv,this),C=new sg(this),w=new Op(y("html"),this),I=new Lp(this);this.interpreter=new ra(k,this.actionManager,new Ap(g,f),w,b,this.debugger,I,A,C,new bg(this),this);let q=new dm;this.language=xd.registerMain(this,q),this.config.withBottomPanel&&new yg(this,this.bottomDiv.jUnitTab.bodyDiv),this.getCompiler().eventManager.on("compilationFinishedWithNewExecutable",this.onCompilationFinished,this),this.config.withBottomPanel&&this.config.withPCode&&(this.disassembler=new fg(this.bottomDiv.disassemblerTab.bodyDiv,this)),this.programControlButtons=new ug(a,this.interpreter,this.actionManager),new Vp(this);let Y=y('<div class="jo_button jo_active img_ellipsis-dark" style="margin-left: 16px"></div>');Y[0].title="Über die Online-IDE...",a.append(Y),Y.on("mousedown",N=>{N.preventDefault(),N.stopPropagation(),Vn([{caption:"Über die Online-IDE ...",link:"https://www.online-ide.de",callback:()=>{}}],N.pageX+2,N.pageY+2)}),this.embeddedFullpageController=new Fv(this,this.$outerDiv[0],a[0]),setTimeout(()=>{this.editor.editor.layout(),this.programControlButtons.speedControl.setSpeedInStepsPerSecond(this.config.speed)},200),this.config.hideEditor&&(e.hide(),n.css("flex","1"),this.config.hideStartPanel?t.find(".joe_controlsDiv").hide():(t.find(".joe_rightDivInner").css("height","calc(100% - 24px)"),t.find(".joe_controlsDiv").css("padding","2px"),t.find(".jo_speedcontrol-outer").css("z-index","10")))}hideDebugger(){this.$debuggerDiv.hide(),this.$alternativeDebuggerDiv.show()}showDebugger(){this.$debuggerDiv.show(),this.$alternativeDebuggerDiv.hide()}makeCodeResetModalWindow(t){let e=y(`
605
+ </div>`),this.tabManager.insertIntoRightDiv(this.$updateTimer[0]))}initGUI(){cp(this.$bottomDiv),this.console!=null&&this.console.initGUI(),this.homeworkManager!=null&&this.homeworkManager.initGUI(),this.$bottomDiv.find(".jo_tabs").children().first().trigger("click")}showHomeworkTab(){this.homeworkManager.tab.setVisible(!0)}showJunitTab(){this.jUnitTab.show()}hideHomeworkTab(){this.homeworkManager.tab.setVisible(!1)}showHideDBBusyIcon(t){let e=t?"block":"none";this.$dbBusyImage.css("display",e)}}class Ag{}r(Ag,"NewFileName",()=>d({de:"Neue Datei",en:"new file"}));class Bv{constructor(t,e){r(this,"treeview");this.$fileListDiv=t,this.main=e,this.treeview=new di(t[0],{captionLine:{enabled:!0,text:"Programmdateien"},withSelection:!0,selectMultiple:!1,buttonAddElements:!0,buttonAddElementsCaption:"Dateien hinzufügen",buttonAddFolders:!1,comparator:(i,n)=>i.name.localeCompare(n.name),keyExtractor:i=>i.id,parentKeyExtractor:i=>i.parent_folder_id,withDeleteButtons:!0,confirmDelete:!0,orderBy:"comparator",scrollToSelectedElement:!1}),this.treeview.newNodeCallback=async(i,n)=>{let s=this.main.addFile({text:"",title:i}),a=Ii.filenameToFileType(s.name);return n.iconClass=a.iconclass,n.readOnly=a.suffix==".md",n.externalObject=s,this.treeview.selectNodeAndSetFocus(n,!0),s},this.treeview.renameCallback=async(i,n,s)=>(n=n.substring(0,30),i.name=n,i.setSaved(!1),{correctedName:n,success:!0}),this.treeview.deleteCallback=async(i,n)=>{let s=this.treeview.nodes.filter(a=>!a.isRootNode()&&a.externalObject!=i).map(a=>a.externalObject);return this.main.removeFile(i),n!=null&&n.hasFocus&&(s.length>0?this.selectFile(s[0],!0):this.selectFirstFileIfPresent()),this.treeview.nodes.forEach(a=>{var l;return(l=a.externalObject)==null?void 0:l.setSaved(!1)}),this.main.showResetButton(),!0},this.treeview.nodeClickedCallback=i=>{this.selectFile(i,!1)}}selectFirstFileIfPresent(){if(this.treeview.nodes.length>1)this.treeview.selectNodeAndSetFocus(this.treeview.nodes[1],!0);else{let t=this.main.getMainEditor(),e=H.createModel("Keine Datei vorhanden.","plaintext");t.setModel(e),t.updateOptions({readOnly:!0})}}getUniqueFilename(){let t=Ag.NewFileName(),e=0,i=t+" "+e+".java";for(;this.treeview.nodes.some(n=>n.caption==(i=t+" "+e+".java"));)e++;return i}removeAllFiles(){this.treeview.clear(),this.selectFirstFileIfPresent()}addFile(t){let e=Ii.filenameToFileType(t.name),i=e.iconclass,n=this.treeview.addNode(!1,t.name,i,t);n.readOnly=e.suffix==".md"}removeFile(t,e=!0){this.treeview.removeElementAndItsFolderContents(t),this.selectFirstFileIfPresent(),this.treeview.nodes.forEach(i=>{var n;return(n=i.externalObject)==null?void 0:n.setSaved(!1)})}renameElement(t,e){let i=t.$fileDiv.find(".jo_filename"),n=t.file.name.indexOf("."),s=n==null?null:{start:0,end:n};im(i,i,a=>{var h;t.file.name=a,i.html(a),t.$fileDiv.removeClass("jo_java jo_emptyFile jo_xml jo_json jo_text");let l=Ii.filenameToFileType(a);t.$fileDiv.addClass("jo_"+l.iconclass),H.setModelLanguage((h=t.file)==null?void 0:h.getMonacoModel(),l.language),e!=null&&e()},s)}selectFile(t,e=!0){if(!t)return;switch(Ii.filenameToFileType(t.name).suffix){case".java":this.main.$hintDiv.hide(),this.main.$monacoDiv.show(),this.main.setFileActive(t),e&&setTimeout(()=>{this.main.getMainEditor().focus()},100),this.main.interpreter.onFileSelected();break;case".md":this.main.$monacoDiv.hide(),this.main.$hintDiv.show();let n={},s=[],a=$m({highlight:function(l,h){return s.push(l),""}});a.renderer.rules.code_inline=function(l,h,c,u,g){var f=l[h];return s.push(f.content),""},a.render(t.getText()),this.colorize(s,n,()=>{let l=$m({highlight:function(c,u){return n[c]}});l.renderer.rules.code_inline=function(c,u,g,f,b){var A=c[u];return n[A.content].replace("<br/>","")};let h=l.render(t.getText());this.main.$hintDiv.html(h)});break}}colorize(t,e,i){let n=this;if(t.length>0){let s=t.pop();H.colorize(s,"myJava",{tabSize:3}).then(a=>{e[s]=a,n.colorize(t,e,i)})}else i()}getFiles(){return this.treeview.nodes.filter(t=>!t.isRootNode()&&t.externalObject).map(t=>t.externalObject)}markFilesAsStartable(t,e){for(let i of this.treeview.nodes.filter(n=>!n.isRootNode())){let n=i.getIconButtonByTag("Start"),s=i.externalObject;n||(n=i.addIconButton("img_start-dark",()=>{this.main.onStartFileClicked(s)},"Starte das in dieser Datei enthaltene Hauptprogramm",!0)),n.tag="Start",n.setVisible(t.indexOf(s)>=0),n.setActive(e)}}renderErrorCount(t,e){if(e!=null)for(let i of t.getFiles()){let n=e.get(i),s=n==null||n==0?"":"("+n+")";this.treeview.findNodeByElement(i).setRightPartOfCaptionErrors(s)}}markAsSelectedButDontInvokeCallback(t){let e=this.treeview.findNodeByElement(t);e&&(this.treeview.unselectAllNodes(!0),e.setSelected(!0),e.setFocus(!0))}}class Ov{constructor(){r(this,"db")}open(t){try{this.db=window.store.onlineide,this.db?t():console.log("Dexie table not available at window.store.onlineide")}catch(e){console.log("Couldn't access Dexie table: "+e)}}writeScript(t,e){this.db.put({scriptId:t,script:e}).catch(i=>{console.error("Error writing script: ",i)})}removeScript(t){this.db.delete(t).catch(e=>{console.error("Error removing script: ",e)})}getScript(t,e){this.db.get(t).then(i=>{i==null?e(null):e(i.script)}).catch(i=>{console.error("Error getting script: ",i),e(null)})}}class Vv{constructor(t){this.file=t}getName(){return this.file.name}getText(){return this.file.getText()}}class Lv{constructor(t){this.ide=t}getFiles(){return this.ide.getCurrentWorkspace().getFiles().map(t=>new Vv(t))}}const No=class No{static registerIDE(t){No.ideMap.set(t.config.id,new Lv(t))}getIDE(t){return No.ideMap.get(t)}};r(No,"ideMap",new Map);let Od=No;class Fv{constructor(t,e,i){r(this,"wholeWindowElement");r(this,"primaryButton");r(this,"additionalButtonTopRight");this.mainEmbedded=t,this.mainDiv=e,this.primaryButton=new io(i,["img_whole-window-dark","img_whole-window-back-dark"],(n,s)=>{this.onWholeWindowButtonClicked(s)},["IDE im Vollbild darstellen","IDE in Normalgröße darstellen"],!0,"append"),this.primaryButton.divElement.style.marginLeft="10px",this.primaryButton.divElement.style.marginRight="10px"}onWholeWindowButtonClicked(t){var e,i,n,s;switch(t){case 0:this.mainEmbedded.rightDiv.wholeWindowButton.setVisible(!0),(e=this.mainEmbedded.horizontalSlider)==null||e.restorePosition(),(i=this.mainEmbedded.verticalSlider)==null||i.restorePosition(),this.additionalButtonTopRight.remove(),document.body.classList.remove("joeCssFence"),pa(this.wholeWindowElement,this.mainDiv);break;case 1:this.additionalButtonTopRight=new io(this.mainEmbedded.rightDiv.tabManager.tabheadingRightDiv,["img_whole-window-back"],(a,l)=>{this.onWholeWindowButtonClicked(0)},["IDE in Normalgröße darstellen"],!0,"append"),this.mainEmbedded.rightDiv.wholeWindowButton.setVisible(!1),(n=this.mainEmbedded.horizontalSlider)==null||n.savePosition(),(s=this.mainEmbedded.verticalSlider)==null||s.savePosition(),document.body.classList.add("joeCssFence"),this.wholeWindowElement=R.makeDiv(document.body,"jo_wholeWindow","jo_wholeWindow_embeddedFullpage"),pa(this.mainDiv,this.wholeWindowElement);break}}}class wg{constructor(t,e){r(this,"config");r(this,"editor");r(this,"currentWorkspace");r(this,"actionManager");r(this,"language");r(this,"interpreter");r(this,"$runDiv");r(this,"debugger");r(this,"$debuggerDiv");r(this,"$alternativeDebuggerDiv");r(this,"bottomDiv");r(this,"$filesDiv");r(this,"ListDiv");r(this,"disassembler");r(this,"$hintDiv");r(this,"$monacoDiv");r(this,"$resetButton");r(this,"rightDiv");r(this,"$rightDivInner");r(this,"fileExplorer");r(this,"debounceDiagramDrawing");r(this,"indexedDB");r(this,"programControlButtons");r(this,"breakpointManager");r(this,"compileRunsAfterCodeReset",0);r(this,"settings");r(this,"lastActiveFile");r(this,"horizontalSlider");r(this,"verticalSlider");r(this,"embeddedFullpageController");this.$outerDiv=t,this.scriptList=e,this.readConfig(t),this.initGUI(t),this.initScripts().then(()=>{this.currentWorkspace.setLibraries(this.getCompiler()),this.loadUserSpritesheet().then(()=>{this.config.hideStartPanel||(this.indexedDB=new Ov,this.indexedDB.open(()=>{this.config.id!=null&&this.readScripts(async()=>{if(this.fileExplorer&&(this.getCompiler().setFiles(this.fileExplorer.getFiles()),this.fileExplorer.selectFirstFileIfPresent()),this.fileExplorer==null){let i=this.currentWorkspace.getFiles();this.getCompiler().setFiles(i),i.length>0&&this.setFileActive(i[0])}this.readClassDiagram(),this.getCompiler().triggerCompile()}),this.config.enableFileAccess&&(window.online_ide_access=new Od,Od.registerIDE(this))}))})})}isEmbedded(){return!0}getCompiler(){return this.language.getCompiler(this)}getInterpreter(){return this.interpreter}getCurrentWorkspace(){return this.currentWorkspace}getDebugger(){return this.debugger}getMonacoEditor(){return this.editor.editor}getRightDiv(){return this.rightDiv}getBottomDiv(){return this.bottomDiv}getActionManager(){return this.actionManager}addWorkspace(t){}getLanguage(){return this.language}getRepl(){var t;return(t=this.language)==null?void 0:t.getRepl(this)}getMainEditor(){return this.editor.editor}getReplEditor(){var t;return(t=this.bottomDiv)==null?void 0:t.console.editor}getSettings(){let t=this.config.settings||{};return this.settings||(this.settings=new gg(void 0,t,{},{})),this.settings}onCompilationFinished(t){var e,i;if(this.interpreter.setExecutable(t),this.bottomDiv&&this.fileExplorer){let n=(i=(e=this.bottomDiv)==null?void 0:e.errorManager)==null?void 0:i.showErrors(this.currentWorkspace);this.fileExplorer.renderErrorCount(this.currentWorkspace,n)}this.drawClassDiagrams(!this.rightDiv.isClassDiagramActive())}adjustWidthToWorld(){this.rightDiv.adjustWidthToWorld()}readClassDiagram(){if(!this.config.withClassDiagram)return;let t=()=>{var e;(e=this.rightDiv)!=null&&e.classDiagram?this.indexedDB.getScript(this.config.id+"-classDiagram",i=>{i!=null&&(this.rightDiv.classDiagram.clear(),this.rightDiv.classDiagram.deserialize(JSON.parse(i)),this.drawClassDiagrams(!1))}):setTimeout(()=>{t()},300)};t()}async tryLoadingWorkspaceFromURL(){if(!this.config.workspaceURLParameterName)return;let t=up(this.config.workspaceURLParameterName);if(t)try{let i=await(await fetch(t)).json();Array.isArray(i)||(i=[i]);let n=i[0];this.scriptList=n.modules.map(s=>({title:s.name,text:s.text}))}catch(e){console.log("Error retreiving or converting data from URL "+t+" to json."),console.error(e);return}}async initScripts(){var t;if((t=this.fileExplorer)==null||t.removeAllFiles(),await this.tryLoadingWorkspaceFromURL(),this.initWorkspace(this.scriptList),this.config.withFileList){for(let e of this.currentWorkspace.getFiles())this.fileExplorer.addFile(e);this.fileExplorer.selectFirstFileIfPresent()}else this.setFileActive(this.currentWorkspace.getFirstFile());this.getCompiler().triggerCompile()}readConfig(t){let e=t.data("java-online");e!=null&&typeof e=="string"?this.config=JSON.parse(e.split("'").join('"')):this.config={},typeof this.config.cacheUserEdits!="boolean"&&(this.config.cacheUserEdits=!0),this.config.hideEditor==null&&(this.config.hideEditor=!1),this.config.hideStartPanel==null&&(this.config.hideStartPanel=!1),this.config.withBottomPanel==null&&(this.config.withBottomPanel=this.config.withConsole||this.config.withPCode||this.config.withFileList||this.config.withErrorList),this.config.hideEditor&&(this.config.withBottomPanel=!1,this.config.withClassDiagram=!1,this.config.withFileList=!1,this.config.withConsole=!1,this.config.withPCode=!1,this.config.withErrorList=!1),this.config.withBottomPanel&&(this.config.withFileList==null&&(this.config.withFileList=!0),this.config.withPCode==null&&(this.config.withPCode=!0),this.config.withConsole==null&&(this.config.withConsole=!0),this.config.withErrorList==null&&(this.config.withErrorList=!0)),this.config.speed==null&&(this.config.speed="max"),this.config.libraries==null&&(this.config.libraries=[]),this.config.jsonFilename==null&&(this.config.jsonFilename="workspace.json")}setFileActive(t){var e;if(t){this.lastActiveFile&&this.lastActiveFile.saveViewState(this.getMainEditor()),this.config.withFileList&&this.fileExplorer.markAsSelectedButDontInvokeCallback(t),this.lastActiveFile=t,this.getMainEditor().updateOptions({readOnly:!1,lineNumbersMinChars:4});try{this.editor.editor.setModel(t.getMonacoModel())}catch{console.log("Catched!")}t.restoreViewState(this.getMainEditor()),(e=this.disassembler)==null||e.disassemble()}}eraseDokuwikiSearchMarkup(t){return t.replace(/<span class="search\whit">(.*?)<\/span>/g,"$1")}readScripts(t){let e=this.currentWorkspace.getFiles();if(e.forEach(n=>{n.getMonacoModel(),n.setSaved(!0)}),!this.config.cacheUserEdits){t();return}let i=this;this.indexedDB.getScript(this.config.id,n=>{var s;if(n==null)setTimeout(()=>{setInterval(()=>{i.saveScripts()},1e3)},2e3),t();else{let a=JSON.parse(n),l=a.length;for(let h of e.slice())(s=i.fileExplorer)==null||s.removeFile(h,!1);i.currentWorkspace.removeAllFiles();for(let h of a){let c=this.config.id+h;this.indexedDB.getScript(c,u=>{var g;if(u!=null){u=this.eraseDokuwikiSearchMarkup(u);let f=new Ue(this,h,u);f.getMonacoModel(),f.setSaved(!0),(g=i.fileExplorer)==null||g.addFile(f),i.currentWorkspace.addFile(f),i.showResetButton()}l--,l==0&&(setInterval(()=>{i.saveScripts()},1e3),t())})}}})}saveScripts(){var s;let t=this.currentWorkspace.getFiles(),e=[],i=!1;if(t.forEach(a=>i=i||!a.isSaved()),i){for(let a of t){e.push(a.name);let l=this.config.id+a.name;this.indexedDB.writeScript(l,a.getText()),a.setSaved(!0)}this.indexedDB.writeScript(this.config.id,JSON.stringify(e))}let n=(s=this.rightDiv)==null?void 0:s.classDiagram;n&&n.dirty&&(this.indexedDB.writeScript(this.config.id+"-classDiagram",JSON.stringify(n.serialize())),n.dirty=!1)}deleteScriptsInDB(){this.indexedDB.getScript(this.config.id,t=>{if(t!=null){let e=JSON.parse(t);for(let i of e){let n=this.config.id+i;this.indexedDB.removeScript(n)}this.indexedDB.removeScript(this.config.id)}}),this.indexedDB.removeScript(this.config.id+"-classDiagram")}initWorkspace(t){this.currentWorkspace=new yi("Embedded-Workspace",this,0),this.currentWorkspace.settings.libraries=this.config.libraries,this.currentWorkspace.id=0;for(let e of t)this.addFile(e)}addFile(t){Ii.filenameToFileType(t.title);let e=new Ue(this,t.title,t.text);e.id=this.currentWorkspace.getFiles().length,this.currentWorkspace.addFile(e);let i=this;return e.getMonacoModel().onDidChangeContent(()=>{i.considerShowingCodeResetButton()}),e}removeFile(t){var e;this.currentWorkspace.removeFile(t),(e=this.getCompiler())==null||e.triggerCompile()}initGUI(t){t.css({"background-image":"none","background-size":"100%"});let e=y('<div class="joe_centerDiv"></div>'),i=this.makeCodeResetModalWindow(t),n=this.makeRightDiv(),s=y('<div class="joe_editorDiv"></div>');this.$monacoDiv=y('<div class="joe_monacoDiv"></div>'),this.$hintDiv=y('<div class="joe_hintDiv jo_scrollable"></div>'),this.$resetButton=y('<div class="joe_resetButton jo_button jo_active" title="Code auf Ausgangszustand zurücksetzen">Code Reset</div>'),s.append(this.$monacoDiv,this.$hintDiv,this.$resetButton),this.$resetButton.hide(),this.$resetButton.on("click",()=>{i.show()}),this.$hintDiv.hide();let a=y('<div class="joe_controlsDiv"></div>'),l=y('<div class="joe_bottomDivInner"></div>'),h=y('<label type="file" class="img_open-file jo_button jo_active"style="margin-right: 8px;" title="Workspace aus Datei laden"><input type="file" style="display:none"></label>'),c=this;h.find("input").on("change",N=>{var $e=N.originalEvent.target.files;c.loadWorkspaceFromFile($e[0])});let u=y('<div class="img_save-dark jo_button jo_active"style="margin-right: 8px;" title="Workspace in Datei speichern"></div>');if(u.on("click",()=>{c.saveWorkspaceToFile()}),a.append(h,u),this.config.withBottomPanel){let N=y('<div class="joe_bottomDiv"></div>');l.append(a),N.append(l),this.config.withFileList&&(this.$filesDiv=this.makeFilesDiv(),N.prepend(this.$filesDiv),new Pr(this.$filesDiv[0],!1,!1,()=>{}),this.fileExplorer=new Bv(this.$filesDiv,this)),cp(l),e.append(s,N),this.verticalSlider=new Pr(N[0],!0,!0,()=>{this.editor.editor.layout()})}else e.prepend(s);this.config.withBottomPanel||(this.config.hideEditor?n.prepend(a):(e.prepend(a),a.addClass("joe_controlPanel_top"),s.css({position:"relative",height:"1px"}))),t.addClass("joe_javaOnlineDiv"),t.append(e,n),this.config.hideEditor||(this.horizontalSlider=new Pr(n[0],!0,!1,()=>{this.editor.editor.layout()})),this.actionManager=new vp(t),this.actionManager.init(),this.editor=new rg(this,!1,!0),this.editor.initGUI(this.$monacoDiv),this.$monacoDiv.find(".monaco-editor").css("z-index","10"),t.attr("tabindex")==null&&t.attr("tabindex","0"),this.config.withBottomPanel&&(this.bottomDiv=new vg(this,l,this.config.withConsole,this.config.withPCode,this.config.withErrorList,!0),this.bottomDiv.initGUI());let g=this.$rightDivInner.find(".jo_graphics")[0],f=this.$rightDivInner.find(".jo_coordinates")[0];this.debugger=new yp(this.$debuggerDiv[0],this);let b=new sp(this),A=new ag(this.$runDiv,this),k=new cg(this.$runDiv,this),C=new sg(this),w=new Op(y("html"),this),I=new Lp(this);this.interpreter=new ra(k,this.actionManager,new Ap(g,f),w,b,this.debugger,I,A,C,new bg(this),this);let q=new dm;this.language=xd.registerMain(this,q),this.config.withBottomPanel&&new yg(this,this.bottomDiv.jUnitTab.bodyDiv),this.getCompiler().eventManager.on("compilationFinishedWithNewExecutable",this.onCompilationFinished,this),this.config.withBottomPanel&&this.config.withPCode&&(this.disassembler=new fg(this.bottomDiv.disassemblerTab.bodyDiv,this)),this.programControlButtons=new ug(a,this.interpreter,this.actionManager),new Vp(this);let Y=y('<div class="jo_button jo_active img_ellipsis-dark" style="margin-left: 16px"></div>');Y[0].title="Über die Online-IDE...",a.append(Y),Y.on("mousedown",N=>{N.preventDefault(),N.stopPropagation(),Vn([{caption:"Über die Online-IDE ...",link:"https://www.online-ide.de",callback:()=>{}}],N.pageX+2,N.pageY+2)}),this.embeddedFullpageController=new Fv(this,this.$outerDiv[0],a[0]),setTimeout(()=>{this.editor.editor.layout(),this.programControlButtons.speedControl.setSpeedInStepsPerSecond(this.config.speed)},200),this.config.hideEditor&&(e.hide(),n.css("flex","1"),this.config.hideStartPanel?t.find(".joe_controlsDiv").hide():(t.find(".joe_rightDivInner").css("height","calc(100% - 24px)"),t.find(".joe_controlsDiv").css("padding","2px"),t.find(".jo_speedcontrol-outer").css("z-index","10")))}hideDebugger(){this.$debuggerDiv.hide(),this.$alternativeDebuggerDiv.show()}showDebugger(){this.$debuggerDiv.show(),this.$alternativeDebuggerDiv.hide()}makeCodeResetModalWindow(t){let e=y(`
606
606
  <div class="joe_codeResetModal">
607
607
  <div style="flex: 1"></div>
608
608
  <div style="display: flex">
@@ -631,5 +631,5 @@ class MyFirstTestClass {
631
631
  <li>in sehr niedriger Geschwindigkeit ausgeführt wird (weniger als 10 Schritte/s).
632
632
  </ul>
633
633
  </div>
634
- `),!this.config.hideEditor){let e=new vn("Debugger",["jo_scrollable","jo_editorFontSize","jo_variablesTab"]);this.rightDiv.tabManager.addTab(e);let i=y(e.bodyDiv);this.$debuggerDiv.hide(),i.append(this.$debuggerDiv,this.$alternativeDebuggerDiv)}return this.$runDiv=y(this.rightDiv.outputTab.bodyDiv),t}async loadUserSpritesheet(){this.config.spritesheetURL!=null&&await new As().initializeSpritesheetForWorkspace(this.currentWorkspace,this,this.config.spritesheetURL)}showFile(t){var e;t&&((e=this.fileExplorer)==null||e.selectFile(t,!1))}getDisassembler(){return this.disassembler}showJUnitDiv(){var t;(t=this.bottomDiv)==null||t.showJunitTab()}showProgramPosition(t,e,i=!0){this.showFile(t),e&&(e.startLineNumber&&(e=ee.getStartPosition(e)),i&&this.getMainEditor().setPosition(e),this.getMainEditor().revealPositionInCenterIfOutsideViewport(e),this.getMainEditor().focus())}markFilesAsStartable(t,e){var i;(i=this.fileExplorer)==null||i.markFilesAsStartable(t,e)}onStartFileClicked(t){this.interpreter.start(t)}}function _v(){fetch(qp).then(p=>p.json()).then(p=>{Ja.load(hm).then(t=>{let e=t.source;e.minFilter="nearest",e.magFilter="nearest",p.meta.size.w=t.width,p.meta.size.h=t.height;let i=new Zm(t,p);i.parse().then(()=>{Ja.cache.set("spritesheet",i)})})})}function zv(){self.MonacoEnvironment={getWorker:(p,t)=>{switch(t){case"json":return new Bg;case"css":case"scss":case"less":return new Pg;case"html":case"handlebars":case"razor":return new Mg;case"typescript":case"javascript":return new jg;default:return new Dg}}}}class qv{constructor(){r(this,"startupComplete",2)}initGUI(){this.checkStartupComplete()}initEditor(){this.checkStartupComplete()}checkStartupComplete(){this.startupComplete--,this.startupComplete==0&&this.start()}start(){this.initJavaOnlineDivs()}async initJavaOnlineDivs(){let t=[];y(".java-online").addClass("notranslate").each((e,i)=>{let n=y(i),s=[];n.find("script").each((a,l)=>{let h=y(l),c=h.attr("src"),u=h.text().trim(),g={title:h.attr("title"),text:u};h.data("type")=="hint"&&!g.title.endsWith(".md")&&(g.title+=".md"),c!=null&&(g.url=c),g.text=this.eraseDokuwikiSearchMarkup(g.text),s.push(g)}),t.push([n,s])});for(let e of t)new rp(e[0][0]).switchTheme("dark"),await this.initDiv(e[0],e[1])}eraseDokuwikiSearchMarkup(t){return t.replace(/<span class="search\whit">(.*?)<\/span>/g,"$1")}async initDiv(t,e){t.addClass("joeCssFence");for(let i of e)if(i.url!=null){const n=await fetch(i.url);i.text=await n.text()}new wg(t,e)}}y(function(){let p=new qv;zv(),p.initEditor(),p.initGUI(),_v(),console.log("Online-IDE embedded Version 2.2.1 vom 8.2.2026, 16:26 Uhr")});export{bA as _,vA as a,gA as c,fA as g};
634
+ `),!this.config.hideEditor){let e=new vn("Debugger",["jo_scrollable","jo_editorFontSize","jo_variablesTab"]);this.rightDiv.tabManager.addTab(e);let i=y(e.bodyDiv);this.$debuggerDiv.hide(),i.append(this.$debuggerDiv,this.$alternativeDebuggerDiv)}return this.$runDiv=y(this.rightDiv.outputTab.bodyDiv),t}async loadUserSpritesheet(){this.config.spritesheetURL!=null&&await new As().initializeSpritesheetForWorkspace(this.currentWorkspace,this,this.config.spritesheetURL)}showFile(t){var e;t&&((e=this.fileExplorer)==null||e.selectFile(t,!1))}getDisassembler(){return this.disassembler}showJUnitDiv(){var t;(t=this.bottomDiv)==null||t.showJunitTab()}showProgramPosition(t,e,i=!0){this.showFile(t),e&&(e.startLineNumber&&(e=ee.getStartPosition(e)),i&&this.getMainEditor().setPosition(e),this.getMainEditor().revealPositionInCenterIfOutsideViewport(e),this.getMainEditor().focus())}markFilesAsStartable(t,e){var i;(i=this.fileExplorer)==null||i.markFilesAsStartable(t,e)}onStartFileClicked(t){this.interpreter.start(t)}}function _v(){fetch(qp).then(p=>p.json()).then(p=>{Ja.load(hm).then(t=>{let e=t.source;e.minFilter="nearest",e.magFilter="nearest",p.meta.size.w=t.width,p.meta.size.h=t.height;let i=new Zm(t,p);i.parse().then(()=>{Ja.cache.set("spritesheet",i)})})})}function zv(){self.MonacoEnvironment={getWorker:(p,t)=>{switch(t){case"json":return new Bg;case"css":case"scss":case"less":return new Pg;case"html":case"handlebars":case"razor":return new Mg;case"typescript":case"javascript":return new jg;default:return new Dg}}}}class qv{constructor(){r(this,"startupComplete",2)}initGUI(){this.checkStartupComplete()}initEditor(){this.checkStartupComplete()}checkStartupComplete(){this.startupComplete--,this.startupComplete==0&&this.start()}start(){this.initJavaOnlineDivs()}async initJavaOnlineDivs(){let t=[];y(".java-online").addClass("notranslate").each((e,i)=>{let n=y(i),s=[];n.find("script").each((a,l)=>{let h=y(l),c=h.attr("src"),u=h.text().trim(),g={title:h.attr("title"),text:u};h.data("type")=="hint"&&!g.title.endsWith(".md")&&(g.title+=".md"),c!=null&&(g.url=c),g.text=this.eraseDokuwikiSearchMarkup(g.text),s.push(g)}),t.push([n,s])});for(let e of t)new rp(e[0][0]).switchTheme("dark"),await this.initDiv(e[0],e[1])}eraseDokuwikiSearchMarkup(t){return t.replace(/<span class="search\whit">(.*?)<\/span>/g,"$1")}async initDiv(t,e){t.addClass("joeCssFence");for(let i of e)if(i.url!=null){const n=await fetch(i.url);i.text=await n.text()}new wg(t,e)}}y(function(){let p=new qv;zv(),p.initEditor(),p.initGUI(),_v(),console.log("Online-IDE embedded Version 2.2.1 vom 13.2.2026, 09:41 Uhr")});export{bA as _,vA as a,gA as c,fA as g};
635
635
  //# sourceMappingURL=online-ide-embedded.js.map