diff --git a/css/style.css b/css/style.css
index 84338fd..ab89188 100644
--- a/css/style.css
+++ b/css/style.css
@@ -113,6 +113,19 @@ sub {
top: 0;
}
+.publishLoading {
+ display: none;
+}
+
+#errorPublish {
+ display: none;
+ text-align: center;
+ background-color: red;
+ padding: 0.5em 0;
+ font-weight: bold;
+ color: white;
+}
+
.settingsBtn {
float: right;
}
@@ -146,7 +159,7 @@ form {
text-align: end;
}
-#settingsClose {
+.settingsClose {
background-color: rgb(88, 88, 88);
color: rgb(255, 255, 255);
cursor: pointer;
diff --git a/index.html b/index.html
index 0c81374..e767475 100644
--- a/index.html
+++ b/index.html
@@ -51,7 +51,7 @@
-
X
+
X
+
Test
+
diff --git a/js/controller.js b/js/controller.js
index 7dbde69..6d99c65 100644
--- a/js/controller.js
+++ b/js/controller.js
@@ -3,9 +3,6 @@ class Controller {
this.model = model;
this.view = view;
- this.redrawDirTree(view);
- //this.pullRep();
-
this.addListeners();
this.init();
}
@@ -40,15 +37,22 @@ class Controller {
}
);
}
+
+ if (localStorage.getItem("pushError")) {
+ this.view.openPublish();
+ this.view.errorPublish("Máte nepublikované změny: publikujte je.");
+ }
}
addListeners() {
var cloneBtn = document.getElementsByClassName("clone")[0];
var purgeBtn = document.getElementsByClassName("wipe")[0];
var settingsBtn = document.getElementsByClassName("settingsBtn")[0];
- var settingsClose = document.getElementsByClassName("close");
+ var closeDialog = document.getElementsByClassName("close");
var settingsSubmit = document.getElementById("settingsSubmit");
var saveBtn = document.getElementById("saveBtn");
+ var publishBtn = document.getElementsByClassName("publishBtn")[0];
+ var commitSubmit = document.getElementById("commitSubmit");
cloneBtn.addEventListener("click", this.cloneRep.bind(this));
purgeBtn.addEventListener("click", this.wipeFS.bind(this));
@@ -56,15 +60,17 @@ class Controller {
"click",
this.view.openSettings.bind(this.view)
);
- for (let i = 0; i < settingsClose.length; i++) {
- settingsClose[i].addEventListener(
+ for (let i = 0; i < closeDialog.length; i++) {
+ closeDialog[i].addEventListener(
"click",
- this.view.closeSettings.bind(this)
+ this.view.closeDialog.bind(this)
);
}
settingsSubmit.addEventListener("click", this.saveSettings.bind(this));
this.view.simplemde.codemirror.on("change", this.saveButton.bind(this));
saveBtn.addEventListener("click", this.saveFile.bind(this));
+ publishBtn.addEventListener("click", this.view.openPublish.bind(this.view));
+ commitSubmit.addEventListener("click", this.publish.bind(this));
}
saveButton() {
@@ -102,8 +108,10 @@ class Controller {
this.redrawDirTree(this.view);
}.bind(this),
function (error) {
+ // zatim to teda znovu naclonuj
+ this.cloneRep();
console.log(error);
- }
+ }.bind(this)
);
}
@@ -153,10 +161,9 @@ class Controller {
// udělej clone
this.cloneRep();
} else {
- // udelej jenom pull
- this.pullRep();
+ this.redrawDirTree(this.view);
}
- this.view.closeSettings();
+ this.view.closeDialog();
}
loadFile(file) {
@@ -172,6 +179,53 @@ class Controller {
);
}
+ publish() {
+ let msg = document.getElementById("inputCommitMsg");
+ let gitUser = document.getElementById("inputUser");
+ let gitPass = document.getElementById("inputPasswd");
+
+ if (msg.value == "" || gitUser.value == "" || gitPass.gitPass == "") {
+ return;
+ }
+
+ let loading = document.getElementsByClassName("publishLoading")[0];
+ loading.style.display = "block";
+
+ this.model.gitAddAll().then(
+ function (value) {
+ this.model.gitCommit(msg.value).then(
+ function (value) {
+ this.updateFileStats();
+ this.model.gitPush(gitUser.value, gitPass.value).then(
+ function (value) {
+ localStorage.setItem("pushError", "false");
+ loading.style.removeProperty("display");
+ this.view.closeDialog();
+ this.view.errorPublish();
+ }.bind(this),
+ function (error) {
+ console.log(error);
+ if (error == "HttpError: HTTP Error: 401 Unauthorized") {
+ this.view.errorPublish(
+ "Změny nebyly publikovány: Chyba přihlášení"
+ );
+ }
+ loading.style.removeProperty("display");
+ localStorage.setItem("pushError", "true");
+ }.bind(this)
+ );
+ }.bind(this),
+ function (error) {
+ console.log(error);
+ }
+ );
+ }.bind(this),
+ function (error) {
+ console.log(error);
+ }
+ );
+ }
+
saveFile() {
var textArea = this.view.simplemde;
this.model.saveFile(this.openedFile, textArea.value());
diff --git a/js/model.js b/js/model.js
index 674396e..72ab65f 100644
--- a/js/model.js
+++ b/js/model.js
@@ -57,8 +57,6 @@ class Model {
}
async dirGitStatus(list) {
- let dirlist = [list[0]];
-
for (let i = 1; i < list.length; i++) {
if (Array.isArray(list[i])) {
await this.dirGitStatus(list[i]);
@@ -103,6 +101,52 @@ class Model {
});
}
+ async gitAddAll(dirTree) {
+ if (!dirTree) {
+ dirTree = await this.getDirTree();
+ }
+ for (let i = 1; i < dirTree.length; i++) {
+ if (Array.isArray(dirTree[i])) {
+ await this.gitAddAll(dirTree[i]);
+ } else {
+ await git.add({
+ fs,
+ dir,
+ filepath: dirTree[0].substring(1) + dirTree[i],
+ });
+ console.log(dirTree[0].substring(1) + dirTree[i]);
+ }
+ }
+ }
+
+ async gitCommit(msg) {
+ await git.commit({
+ fs,
+ dir,
+ message: msg,
+ author: {
+ name: localStorage.getItem("name"),
+ email: localStorage.getItem("email"),
+ },
+ });
+ }
+
+ async gitPush(gitUser, gitPass) {
+ let pushResult = await git.push({
+ fs,
+ http,
+ dir,
+ onAuth: (url) => {
+ const auth = {
+ username: gitUser,
+ password: gitPass,
+ };
+ return auth;
+ },
+ });
+ console.log(pushResult);
+ }
+
setRepo(repoURL) {
localStorage.setItem("repo", repoURL);
}
diff --git a/js/view.js b/js/view.js
index ef86425..d9acc20 100644
--- a/js/view.js
+++ b/js/view.js
@@ -117,13 +117,34 @@ class View {
email.value = localStorage.getItem("email");
}
- closeSettings() {
+ closeDialog() {
var settings = document.getElementsByClassName("settingsbg")[0];
+ var publish = document.getElementsByClassName("commitWrapper")[0];
+
settings.style.removeProperty("display");
+ publish.style.removeProperty("display");
+ }
+
+ openPublish() {
+ this.closeEditor();
+
+ var publish = document.getElementsByClassName("commitWrapper")[0];
+ publish.style.display = "grid";
}
showSaveButton(show) {
var saveButton = document.getElementById("saveBtn");
saveButton.disabled = show;
}
+
+ errorPublish(error) {
+ let errorDiv = document.getElementById("errorPublish");
+ if (!error) {
+ errorDiv.style.removeProperty("display");
+ return;
+ }
+ errorDiv.style.display = "block";
+
+ errorDiv.innerHTML = error;
+ }
}