]> git.immae.eu Git - perso/Immae/Projets/Nodejs/Surfer.git/blobdiff - frontend/js/app.js
Add rename functionality
[perso/Immae/Projets/Nodejs/Surfer.git] / frontend / js / app.js
index 9a2e532c5533e8eb5f9b40602923b3d8c37d9843..078473a9516e55901bdcd621bdbb76ef0e433009 100644 (file)
@@ -124,13 +124,16 @@ function up() {
 
 function upload() {
     $(app.$els.upload).on('change', function () {
-        app.busy = true;
 
         // detach event handler
         $(app.$els.upload).off('change');
 
-        var length = app.$els.upload.files.length;
-        var done = 0;
+        app.uploadStatus = {
+            busy: true,
+            count: app.$els.upload.files.length,
+            done: 0,
+            percentDone: 0
+        };
 
         function uploadFile(file) {
             var path = encode(sanitize(app.path + '/' + file.name));
@@ -138,21 +141,28 @@ function upload() {
             var formData = new FormData();
             formData.append('file', file);
 
-            superagent.put('/api/files' + path).query({ username: app.session.username, password: app.session.password }).send(formData).end(function (error, result) {
+            superagent.post('/api/files' + path).query({ username: app.session.username, password: app.session.password }).send(formData).end(function (error, result) {
                 if (result && result.statusCode === 401) return logout();
                 if (result && result.statusCode !== 201) console.error('Error uploading file: ', result.statusCode);
                 if (error) console.error(error);
 
-                ++done;
+                app.uploadStatus.done += 1;
+                app.uploadStatus.percentDone = Math.round(app.uploadStatus.done / app.uploadStatus.count * 100);
+
+                if (app.uploadStatus.done >= app.uploadStatus.count) {
+                    app.uploadStatus = {
+                        busy: false,
+                        count: 0,
+                        done: 0,
+                        percentDone: 100
+                    };
 
-                if (done >= length) {
-                    app.busy = false;
                     refresh();
                 }
             });
         }
 
-        for(var i = 0; i < length; i++) {
+        for(var i = 0; i < app.uploadStatus.count; ++i) {
             uploadFile(app.$els.upload.files[i]);
         }
     });
@@ -186,6 +196,33 @@ function del(entry) {
     });
 }
 
+function renameAsk(entry) {
+    app.renameData.entry = entry;
+    app.renameData.error = null;
+    app.renameData.newFilePath = entry.filePath;
+
+    $('#modalRename').modal('show');
+}
+
+function rename(data) {
+    app.busy = true;
+
+    var path = encode(sanitize(app.path + '/' + data.entry.filePath));
+    var newFilePath = sanitize(app.path + '/' + data.newFilePath);
+
+    superagent.put('/api/files' + path).query({ username: app.session.username, password: app.session.password }).send({ newFilePath: newFilePath }).end(function (error, result) {
+        app.busy = false;
+
+        if (result && result.statusCode === 401) return logout();
+        if (result && result.statusCode !== 200) return console.error('Error renaming file: ', result.statusCode);
+        if (error) return console.error(error);
+
+        refresh();
+
+        $('#modalRename').modal('hide');
+    });
+}
+
 function createDirectoryAsk() {
     $('#modalcreateDirectory').modal('show');
     app.createDirectoryData = '';
@@ -198,7 +235,7 @@ function createDirectory(name) {
 
     var path = encode(sanitize(app.path + '/' + name));
 
-    superagent.put('/api/files' + path).query({ username: app.session.username, password: app.session.password, directory: true }).end(function (error, result) {
+    superagent.post('/api/files' + path).query({ username: app.session.username, password: app.session.password, directory: true }).end(function (error, result) {
         app.busy = false;
 
         if (result && result.statusCode === 401) return logout();
@@ -233,6 +270,12 @@ var app = new Vue({
     el: '#app',
     data: {
         busy: true,
+        uploadStatus: {
+            busy: false,
+            count: 0,
+            done: 0,
+            percentDone: 50
+        },
         path: '/',
         pathParts: [],
         session: {
@@ -240,6 +283,11 @@ var app = new Vue({
         },
         loginData: {},
         deleteData: {},
+        renameData: {
+            entry: {},
+            error: null,
+            newFilePath: ''
+        },
         createDirectoryData: '',
         createDirectoryError: null,
         entries: []
@@ -253,6 +301,8 @@ var app = new Vue({
         upload: upload,
         delAsk: delAsk,
         del: del,
+        renameAsk: renameAsk,
+        rename: rename,
         createDirectoryAsk: createDirectoryAsk,
         createDirectory: createDirectory
     }