]> git.immae.eu Git - perso/Immae/Projets/Nodejs/Surfer.git/blobdiff - frontend/js/app.js
Ensure upload progress stays within bounds
[perso/Immae/Projets/Nodejs/Surfer.git] / frontend / js / app.js
index be5705f6a8eb962e6413a533992aa046d37f1ade..e446db3dd374530f2309f1b8fe6c772e4ff2f70e 100644 (file)
@@ -1,6 +1,11 @@
 (function () {
 'use strict';
 
+/* global superagent */
+/* global Vue */
+/* global $ */
+/* global filesize */
+
 // poor man's async
 function asyncForEach(items, handler, callback) {
     var cur = 0;
@@ -86,6 +91,16 @@ function refresh() {
     loadDirectory(app.path);
 }
 
+function logout() {
+    superagent.post('/api/logout').query({ access_token: localStorage.accessToken }).end(function (error) {
+        if (error) console.error(error);
+
+        app.session.valid = false;
+
+        delete localStorage.accessToken;
+    });
+}
+
 function loadDirectory(filePath) {
     app.busy = true;
 
@@ -156,7 +171,8 @@ function uploadFiles(files) {
             if (!(event.target instanceof XMLHttpRequestUpload)) return;
 
             app.uploadStatus.done = finishedUploadSize + event.loaded;
-            app.uploadStatus.percentDone = Math.round(app.uploadStatus.done / app.uploadStatus.size * 100);
+            var tmp = Math.round(app.uploadStatus.done / app.uploadStatus.size * 100);
+            app.uploadStatus.percentDone = tmp > 100 ? 100 : tmp;
         }).end(function (error, result) {
             if (result && result.statusCode === 401) return logout();
             if (result && result.statusCode !== 201) return callback('Error uploading file: ', result.statusCode);
@@ -273,13 +289,11 @@ var app = new Vue({
                 getProfile(result.body.accessToken, function (error) {
                     if (error) return console.error(error);
 
-                    loadDirectory(window.location.hash.slice(1));
+                    loadDirectory(decode(window.location.hash.slice(1)));
                 });
             });
         },
         onOptionsMenu: function (command) {
-            var that = this;
-
             if (command === 'folderListing') {
                 superagent.put('/api/settings').send({ folderListingEnabled: this.folderListingEnabled }).query({ access_token: localStorage.accessToken }).end(function (error) {
                     if (error) console.error(error);
@@ -295,13 +309,7 @@ var app = new Vue({
                     center: true
                   }).then(function () {}).catch(function () {});
             } else if (command === 'logout') {
-                superagent.post('/api/logout').query({ access_token: localStorage.accessToken }).end(function (error) {
-                    if (error) console.error(error);
-
-                    that.session.valid = false;
-
-                    delete localStorage.accessToken;
-                });
+                logout();
             }
         },
         onDownload: function (entry) {
@@ -421,11 +429,11 @@ var app = new Vue({
 getProfile(localStorage.accessToken, function (error) {
     if (error) return console.error(error);
 
-    loadDirectory(window.location.hash.slice(1));
+    loadDirectory(decode(window.location.hash.slice(1)));
 });
 
 $(window).on('hashchange', function () {
-    loadDirectory(window.location.hash.slice(1));
+    loadDirectory(decode(window.location.hash.slice(1)));
 });
 
 })();