Skip to content

Commit c150f30

Browse files
committed
close file
1 parent 03e2463 commit c150f30

4 files changed

Lines changed: 51 additions & 28 deletions

File tree

src/livecodes/UI/create-language-menus.ts

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -178,20 +178,24 @@ export const createMultiFileEditorTab = ({
178178
addFile,
179179
renameFile,
180180
deleteFile,
181+
closeFile,
181182
isMainFile,
182183
isNewFile = false,
183184
isHidden = false,
184185
isLocked = false,
186+
isFilesSectionEnabled = false,
185187
}: {
186188
title: string;
187189
showEditor: (filename: string) => void;
188190
addFile?: (filename: string) => Promise<boolean>;
189191
renameFile: (filename: string, newName: string) => boolean;
190192
deleteFile: (filename: string) => void;
193+
closeFile: (filename: string) => void;
191194
isMainFile: boolean;
192195
isNewFile: boolean;
193196
isHidden?: boolean;
194197
isLocked?: boolean;
198+
isFilesSectionEnabled?: boolean;
195199
}) => {
196200
let currentFileName = title;
197201
if (getEditorTab(currentFileName)) return;
@@ -231,11 +235,21 @@ export const createMultiFileEditorTab = ({
231235
label.appendChild(fileNameSpan);
232236
}
233237

234-
if (!isMainFile && !isLocked) {
238+
if (isFilesSectionEnabled) {
239+
const closeButton = document.createElement('button');
240+
closeButton.classList.add('delete-file-button');
241+
closeButton.innerHTML = deleteIcon;
242+
closeButton.addEventListener('click', (ev) => {
243+
ev.stopPropagation();
244+
closeFile(currentFileName);
245+
});
246+
editorSelector.appendChild(closeButton);
247+
} else if (!isMainFile && !isLocked) {
235248
const deleteButton = document.createElement('button');
236249
deleteButton.classList.add('delete-file-button');
237250
deleteButton.innerHTML = deleteIcon;
238-
deleteButton.addEventListener('click', () => {
251+
deleteButton.addEventListener('click', (ev) => {
252+
ev.stopPropagation();
239253
if (
240254
confirm(
241255
window.deps.translateString('core.files.deleteFile', 'Delete: {{path}}?', {

src/livecodes/config/default-config.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ export const defaultConfig: Config = {
5151
content: '',
5252
},
5353
sidebar: {
54-
files: {},
5554
enabled: 'all',
5655
active: '',
5756
status: '',

src/livecodes/core.ts

Lines changed: 35 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -596,10 +596,38 @@ const openFile = async (
596596
});
597597
editorLanguages![filename] = language;
598598
editors[filename] = editor;
599-
editorIds.push(filename);
599+
if (!editorIds.includes(filename)) {
600+
editorIds.push(filename);
601+
}
600602
handleChangeContent(editor);
601603
};
602604

605+
const closeFile = (filename: string) => {
606+
if (editorLanguages && editorLanguages[filename]) {
607+
delete editorLanguages[filename];
608+
}
609+
if (editors[filename]) {
610+
editors[filename].destroy();
611+
delete editors[filename];
612+
}
613+
const id = editorIds.findIndex((editorId) => editorId === filename);
614+
if (id > -1) {
615+
if (editorIds.length > 1) {
616+
const editorIdToShow = id === 0 ? 1 : id - 1;
617+
showEditor(editorIds[editorIdToShow]);
618+
}
619+
editorIds.splice(id, 1);
620+
}
621+
UI.getEditorDivs().forEach((editorDiv) => {
622+
if (editorDiv.dataset.editorId === filename) {
623+
editorDiv.remove();
624+
}
625+
});
626+
UI.getEditorTab(filename)?.remove();
627+
setSavedStatus();
628+
dispatchChangeEvent();
629+
};
630+
603631
const renameFile = (filename: string, newName: string) => {
604632
const config = getConfig();
605633
const validName = checkFileName(newName, config, filename);
@@ -660,30 +688,10 @@ const deleteFile = (filename: string) => {
660688
...config,
661689
files: config.files.filter((f) => f.filename !== filename),
662690
});
663-
if (editorLanguages && editorLanguages[filename]) {
664-
delete editorLanguages[filename];
665-
}
666-
if (editors[filename]) {
667-
editors[filename].destroy();
668-
delete editors[filename];
669-
}
670-
const id = editorIds.findIndex((editorId) => editorId === filename);
671-
if (id > -1) {
672-
const editorIdToShow = id === 0 ? 1 : id - 1;
673-
showEditor(editorIds[editorIdToShow]);
674-
editorIds.splice(id, 1);
675-
}
676-
UI.getEditorDivs().forEach((editorDiv) => {
677-
if (editorDiv.dataset.editorId === filename) {
678-
editorDiv.remove();
679-
}
680-
});
681-
UI.getEditorTab(filename)?.remove();
691+
closeFile(filename);
682692
if (config.autoupdate) {
683693
run();
684694
}
685-
setSavedStatus();
686-
dispatchChangeEvent();
687695
if (sidebar?.files) {
688696
const newConfig = getConfig();
689697
sidebar?.files?.update({
@@ -709,10 +717,12 @@ const createEditorUI = (title: string, isHidden = false) => {
709717
showEditor,
710718
renameFile,
711719
deleteFile,
720+
closeFile,
712721
isMainFile: title === getMainFile(config),
713722
isNewFile: false,
714723
isHidden,
715724
isLocked: config.lockFiles || config.readonly,
725+
isFilesSectionEnabled: sidebar?.isEnabled('files'),
716726
});
717727
return container;
718728
};
@@ -840,9 +850,11 @@ const createEditors = async (config: Config) => {
840850
addFile: async (filename: string) => addFile(filename),
841851
renameFile,
842852
deleteFile,
853+
closeFile,
843854
isMainFile: false,
844855
isNewFile: true,
845856
isLocked: false,
857+
isFilesSectionEnabled: sidebar?.isEnabled('files'),
846858
}),
847859
});
848860
}
@@ -1048,9 +1060,8 @@ const showEditor = (
10481060
{ isUpdate = false, source }: { isUpdate?: boolean; source?: 'sidebar-files' } = {},
10491061
) => {
10501062
const config = getConfig();
1051-
10521063
if (getSource(editorId, config)?.hidden) return;
1053-
if (!editors[editorId]) {
1064+
if (!editorIds.includes(editorId)) {
10541065
if (config.files.find((f) => f.filename === editorId)) {
10551066
openFile(editorId, getEditorOptions(editorId)).then(() => showEditor(editorId));
10561067
}

src/livecodes/result/multi-file-result-page.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,6 @@ export const createMultiFileResultPage = async ({
313313
} catch (e) {
314314
// invalid sourceMap
315315
}
316-
console.log(sourceMapObj);
317316
const sourceMappingURL = `data:application/json;base64,${btoa(JSON.stringify(sourceMapObj))}`;
318317
const supportsSourceUrl = consoleEnabled && hasValidSourceMap;
319318
file.compiled = supportsSourceUrl

0 commit comments

Comments
 (0)