From ef8cff5751ec28ba86372f6c17c91083ea255560 Mon Sep 17 00:00:00 2001 From: Nikola-Mircic Date: Fri, 18 Feb 2022 20:28:02 +0100 Subject: [PATCH] Editing text files --- client/assets/js/main.js | 1 + client/assets/js/workspace.js | 51 +++++++++++++++++++++++++++++++++-- 2 files changed, 50 insertions(+), 2 deletions(-) diff --git a/client/assets/js/main.js b/client/assets/js/main.js index 3217cb0..e15c4fa 100644 --- a/client/assets/js/main.js +++ b/client/assets/js/main.js @@ -17,6 +17,7 @@ const RECEIVED = 4; const EDITING = 5; var FileStruct = { + original: null, // File variable containing unprocessed data chunks: 0, //Chunks of data sent/received state: WAITING, //Current state of a file. WAITING means that file is loaded and not sent yet path: "", // Path to the file diff --git a/client/assets/js/workspace.js b/client/assets/js/workspace.js index 1726a1a..90181d6 100644 --- a/client/assets/js/workspace.js +++ b/client/assets/js/workspace.js @@ -4,7 +4,12 @@ var testDataSize = null; function writeLoadedFiles(directory, list){ directory.files.forEach((file)=>{ - list.append(`
  • ${file.name()}
  • `); + let filePath = (file.path=="")?("/"+file.name()):file.path; + list.append(`
  • ${file.name()}
  • `); + + if(file.state == EDITING){ + showData(filePath); + } }) Object.keys(directory.directories).forEach((key)=>{ @@ -49,7 +54,25 @@ function showData(path){ for(let i=1; itestFile.name() == pathSteps[pathSteps.length-1]))[0]; + var file = (dir.files.filter((testFile)=>testFile.name() == pathSteps[pathSteps.length-1]))[0]; + + console.log(file.state); + + if(file.state == EDITING){ + $("#dataView").hide(); + file.state = WAITING; + return; + } + + if(file.state != WAITING) return; + + doForEachFile(workspaceFiles, (file)=>{ + if(file.state == EDITING) file.state = WAITING; + }) + + file.state = EDITING; + + $("#dataView").show(); file.data((data)=>{ $("#dataView").html(`
    @@ -61,9 +84,12 @@ function showData(path){ var t = $(""); t.val(data); + $("#dataView").append(t); $("#fileName").html(`${file.name()}`); $("#fileSize").html(`${file.size()/1000} kb`); + + $("textarea").on('change keyup paste', updateTextData); } if(file.type().split("/")[0] == "image"){ var urlCreator = window.URL || window.webkitURL; @@ -76,6 +102,27 @@ function showData(path){ }); } +//Calls function 'handle' for every file in the 'dir' directory +function doForEachFile(dir, handle){ + dir.files.forEach((file)=>handle(file)); + + Object.keys(dir.directories).forEach((key)=>{ + doForEachFile(dir.directories[key], handle); + }); +} + +function updateTextData(){ + var text = this.value; + /*console.log("Textarea update")*/ + doForEachFile(workspaceFiles, (file)=>{ + if(file.state == EDITING){ + file.original = new File([text], file.name(), { + type: file.type(), + }); + } + }) +} + function appendFileEntryToList(list, fileEntry){ if(fileEntry.isFile){ console.log("Appending ... "+fileEntry.name);