X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=app%2Fjs%2Fapp.js;h=0d6144e37c53023e44f2a2171f1649de2948249b;hb=3e98fb0c71628d983acb3fc345465ed959f19070;hp=b71a7ede02438cd6d946d75bc1c1ef508bc3888b;hpb=ee9d1ada964d9e9ce7d9c020ab105aa7ded8147e;p=perso%2FImmae%2FProjets%2FNodejs%2FSurfer.git diff --git a/app/js/app.js b/app/js/app.js index b71a7ed..0d6144e 100644 --- a/app/js/app.js +++ b/app/js/app.js @@ -39,6 +39,14 @@ function sanitize(filePath) { return filePath.replace(/\/+/g, '/'); } +function encode(filePath) { + return filePath.split('/').map(encodeURIComponent).join('/'); +} + +function refresh() { + loadDirectory(app.path); +} + function loadDirectory(filePath) { app.busy = true; @@ -55,6 +63,12 @@ function loadDirectory(filePath) { app.entries = result.body.entries; app.path = filePath; app.pathParts = filePath.split('/').filter(function (e) { return !!e; }); + + Vue.nextTick(function () { + $(function () { + $('[data-toggle="tooltip"]').tooltip(); + }); + }); }); } @@ -70,6 +84,82 @@ function up() { loadDirectory(app.path.split('/').slice(0, -1).filter(function (p) { return !!p; }).join('/')); } +function upload() { + $(app.$els.upload).on('change', function () { + app.busy = true; + + // detach event handler + $(app.$els.upload).off('change'); + + var file = app.$els.upload.files[0]; + var path = encode(sanitize(app.path + '/' + file.name)); + + 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) { + app.busy = false; + + if (error) return console.error(error); + if (result.statusCode !== 201) return console.error('Error uploading file: ', result.statusCode); + + refresh(); + }); + }); + + app.$els.upload.click(); +} + +function delAsk(entry) { + $('#modalDelete').modal('show'); + app.deleteData = entry; +} + +function del(entry) { + app.busy = true; + + var path = encode(sanitize(app.path + '/' + entry.filePath)); + + superagent.del('/api/files' + path).query({ username: app.session.username, password: app.session.password, recursive: true }).end(function (error, result) { + app.busy = false; + + if (error) return console.error(error); + if (result.statusCode !== 200) return console.error('Error deleting file: ', result.statusCode); + + refresh(); + + $('#modalDelete').modal('hide'); + }); +} + +function createDirectoryAsk() { + $('#modalcreateDirectory').modal('show'); + app.createDirectoryData = ''; +} + +function createDirectory(name) { + app.busy = true; + + 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) { + app.busy = false; + + if (error) return console.error(error); + if (result.statusCode !== 201) return console.error('Error creating directory: ', result.statusCode); + + app.createDirectoryData = ''; + refresh(); + + $('#modalcreateDirectory').modal('hide'); + }); +} + +Vue.filter('prettyDate', function (value) { + var d = new Date(value); + return d.toDateString(); +}); + var app = new Vue({ el: '#app', data: { @@ -80,6 +170,8 @@ var app = new Vue({ valid: false }, loginData: {}, + deleteData: {}, + createDirectoryData: '', entries: [] }, methods: { @@ -87,12 +179,15 @@ var app = new Vue({ logout: logout, loadDirectory: loadDirectory, open: open, - up: up + up: up, + upload: upload, + delAsk: delAsk, + del: del, + createDirectoryAsk: createDirectoryAsk, + createDirectory: createDirectory } }); -window.app = app; - login(localStorage.username, localStorage.password); })();