diff --git a/filebrowser.js b/filebrowser.js index 92e5af7fca..7e86afdea7 100644 --- a/filebrowser.js +++ b/filebrowser.js @@ -971,9 +971,22 @@ async function pushFileFromHTML(fileEl, commitMessage) { fileEl.classList.remove('modified'); bottomFloat.classList.remove('modified'); + + // if the current file hasn't been pushed yet, + // await file creation + + const newFilePendingPromise = newFilePendingPromises[getAttr(fileEl, 'sha')]; + + if (newFilePendingPromise) { + + await newFilePendingPromise; + + } + + // get file selected status const fileSelected = fileEl.classList.contains('selected'); - + // create commit const commitFile = fileSelected ? selectedFile : modifiedFiles[getAttr(fileEl, 'sha')]; @@ -981,7 +994,7 @@ async function pushFileFromHTML(fileEl, commitMessage) { message: commitMessage, file: commitFile }; - + // push file asynchronously const newSha = await git.push(commit); @@ -1867,6 +1880,9 @@ function createNewRepoInHTML() { // create new file // on click of button + +const newFilePendingPromises = {}; + function createNewFileInHTML() { // if not already adding new file @@ -2093,27 +2109,17 @@ function createNewFileInHTML() { // push file asynchronously - const newSHA = await git.push(commit); + newFilePendingPromises[tempSHA] = git.push(commit); - // update file sha in HTML with new sha from git - setAttr(fileEl, 'sha', newSHA); - - // change selected file - changeSelectedFile(treeLoc.join(), newSHA, fileName, encodeUnicode('\r\n'), getFileLang(fileName), - [0, 0], [0, 0], true); + const newSHA = await newFilePendingPromises[tempSHA]; + delete newFilePendingPromises[tempSHA]; + + // Git file is eclipsed (not updated) in browser private cache, // so store the updated file in modifiedFiles object for 1 minute after commit - if (modifiedFiles[tempSHA]) { - - onFileEclipsedInCache(tempSHA, newSHA, selectedFile); - - } else { - - onFileEclipsedInCache(false, newSHA, selectedFile); - - } + onFileEclipsedInCache(tempSHA, newSHA, selectedFile); // remove push listener @@ -2769,7 +2775,7 @@ function setupSidebar() { } else if (isMobile) { - // update bottom floater + // update bottom float updateFloat(); } diff --git a/files.js b/files.js index 3f59d8fa20..af561e5232 100644 --- a/files.js +++ b/files.js @@ -110,57 +110,68 @@ function onFileEclipsedInCache(oldSha, newSha, newFile) { if (fileEl) setAttr(fileEl, 'sha', newSha); - let fileToUpdate; + // search for old eclipsed file + // in modifiedFiles + const oldEclipsedFile = modifiedFiles[oldSha]; - // if old sha exists - if (oldSha) { - - // store the updated file under old sha as key - - // find the eclipsed file - fileToUpdate = modifiedFiles[oldSha]; + // if old eclipsed file + // is modified + if (oldEclipsedFile) { + + // update old eclipsed file sha + // to point to new file sha + updateOldEclipsedFile(oldEclipsedFile, newSha); - if (fileToUpdate) { - - // update old file to new sha - fileToUpdate.sha = newSha; - - // update old file caret pos - fileToUpdate.caretPos = [0, 0]; - - // set old file to eclipsed mode - fileToUpdate.eclipsed = true; + } - // if file to update is selected - if (selectedFile.sha === oldSha) { - // update its content - // to the selected file contents - fileToUpdate.content = selectedFile.content; + // if old eclipsed file + // is selected + if (selectedFile.sha === oldSha) { - // update selected file to new sha - selectedFile.sha = newSha; - - // set selected file to eclipsed mode - selectedFile.eclipsed = true; + // update old eclipsed file sha + // to point to new file sha + updateOldEclipsedFile(selectedFile, newSha); + + updateSelectedFileLS(); + + + // if old eclipsed file + // is modified + if (oldEclipsedFile) { + + // update old file content + // to selected file content + oldEclipsedFile.content = selectedFile.content; - updateSelectedFileLS(); - - } - } + + } + + + function updateOldEclipsedFile(oldEclipsedFile, newSha) { - } else { - - fileToUpdate = newFile; + // update old eclipsed file sha to point to new file sha + oldEclipsedFile.sha = newSha; + + // set old file to eclipsed mode + oldEclipsedFile.eclipsed = true; } - if (fileToUpdate) { + // if old eclipsed file is modified + if (oldEclipsedFile) { + + // store the modified file under new sha as key + modifiedFiles[newSha] = oldEclipsedFile; + + } else if (selectedFile.sha === oldSha) { + + // if old eclipsed file is selected - // store the updated file under new sha as key - modifiedFiles[newSha] = fileToUpdate; + // store the selected file under new sha as key + modifiedFiles[newSha] = selectedFile; } @@ -169,24 +180,24 @@ function onFileEclipsedInCache(oldSha, newSha, newFile) { updateModFilesLS(); - // set 1 minute timeout to remove updated files + // set 1 minute timeout to remove eclipsed files window.setTimeout(() => { - // if old sha exists - if (oldSha) { + // if old eclipsed file exists + if (modifiedFiles[oldSha]) { - // remove the updated file under old sha as key + // delete the old eclipsed file // from modifiedFiles deleteModFile(oldSha); } - // if not edited updated file under new sha as key + // if not edited eclipsed file under new sha as key // while in timeout (file is still eclipsed) if (modifiedFiles[newSha] && modifiedFiles[newSha].eclipsed) { - // remove the updated file under new sha as key + // remove the eclipsed file under new sha as key // from modifiedFiles deleteModFile(newSha); diff --git a/git/gitauth.js b/git/gitauth.js index 873593241b..f662c55606 100644 --- a/git/gitauth.js +++ b/git/gitauth.js @@ -76,10 +76,18 @@ window.onload = async () => { }) - window.addEventListener('message', (event) => { - + window.addEventListener('message', async (event) => { + // hide intro screen sidebar.classList.remove('intro'); + + // if on Repositories page + if (treeLoc[1] === '') { + + // show sidebar title + sidebarLogo.innerText = 'Repositories'; + + } // if on safari, refresh header color if (isSafari) { @@ -100,19 +108,39 @@ window.onload = async () => { const gitCode = event.data; // get git token from Github - getGithubToken(gitCode); + await getGithubToken(gitCode); + + // render sidebar + renderSidebarHTML(); }) - loadLS(); - - // if git code exists in link if (linkData.gitCode) { // hide intro screen sidebar.classList.remove('intro'); + + // if on Repositories page + if (treeLoc[1] === '') { + + // show sidebar title + sidebarLogo.innerText = 'Repositories'; + + } + + // don't transition + body.classList.add('notransition'); + + toggleSidebar(true); + + onNextFrame(() => { + + body.classList.remove('notransition'); + + }); + // if on safari, refresh header color if (isSafari) { @@ -133,9 +161,12 @@ window.onload = async () => { const gitCode = linkData.gitCode; // get git token from Github - getGithubToken(gitCode); + await getGithubToken(gitCode); } + + + loadLS(); } @@ -153,16 +184,17 @@ async function getGithubToken(gitCode) { saveGitTokenLS(gitToken); - // get logged user - loggedUser = await axios.get('https://api.github.com/user', gitToken); - loggedUser = loggedUser.login; - - // save logged user in local storage - setStorage('loggedUser', loggedUser); - + // if logged user dosen't exist + if (getStorage('loggedUser') === null) { - // render sidebar - renderSidebarHTML(); + // get logged user + loggedUser = await axios.get('https://api.github.com/user', gitToken); + loggedUser = loggedUser.login; + + // save logged user in local storage + setStorage('loggedUser', loggedUser); + + } } diff --git a/worker/client-channel.js b/worker/client-channel.js index 1e86a9cf75..db740d8287 100644 --- a/worker/client-channel.js +++ b/worker/client-channel.js @@ -4,7 +4,7 @@ // update worker name when updating worker -const WORKER_NAME = 'codeit-worker-v535'; +const WORKER_NAME = 'codeit-worker-v536'; // internal paths