X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=frontend%2Fjs%2Fapp.js;h=f532bc1e508515a9196329474af9e53450644ce9;hb=2d28c88dd7a6765a6d2ed54758bbb4c3da999331;hp=9a6251b37d036e1d84427d22a6748ce27c16430a;hpb=ca5a757fab6de89ff0ee49983797e136c2b2a747;p=perso%2FImmae%2FProjets%2FNodejs%2FSurfer.git diff --git a/frontend/js/app.js b/frontend/js/app.js index 9a6251b..f532bc1 100644 --- a/frontend/js/app.js +++ b/frontend/js/app.js @@ -23,14 +23,14 @@ function asyncForEach(items, handler, callback) { })(); } -function getProfile(accessToken, callback) { +function initWithToken(accessToken) { superagent.get('/api/profile').query({ access_token: accessToken }).end(function (error, result) { app.ready = true; - if (error && !error.response) return callback(error); + if (error && !error.response) return console.error(error); if (result.statusCode !== 200) { delete localStorage.accessToken; - return callback('Invalid access token'); + return; } localStorage.accessToken = accessToken; @@ -42,7 +42,9 @@ function getProfile(accessToken, callback) { app.folderListingEnabled = !!result.body.folderListingEnabled; - callback(); + loadDirectory(decode(window.location.hash.slice(1))); + + app.refreshAccessTokens(); }); }); } @@ -133,7 +135,7 @@ function loadDirectory(filePath) { }); } -function open(row, event, column) { +function open(row, column, event) { // ignore item open on row clicks if we are renaming this entry if (row.rename) return; @@ -144,7 +146,19 @@ function open(row, event, column) { return; } - window.open(encode(path)); + app.activeEntry = row; + app.activeEntry.fullPath = encode(sanitize(app.path + '/' + row.filePath)); + app.previewDrawerVisible = true + + // need to wait for DOM element to exist + setTimeout(function () { + $('iframe').on('load', function (e) { + if (!e.target.contentWindow.document.body) return; + + e.target.contentWindow.document.body.style.display = 'flex' + e.target.contentWindow.document.body.style.justifyContent = 'center' + }); + }, 0); } function uploadFiles(files) { @@ -278,7 +292,11 @@ var app = new Vue({ password: '', busy: false }, - entries: [] + previewDrawerVisible: false, + activeEntry: {}, + entries: [], + accessTokens: [], + accessTokensDialogVisible: false }, methods: { onLogin: function () { @@ -292,11 +310,7 @@ var app = new Vue({ if (error && !result) return that.$message.error(error.message); if (result.statusCode === 401) return that.$message.error('Wrong username or password'); - getProfile(result.body.accessToken, function (error) { - if (error) return console.error(error); - - loadDirectory(decode(window.location.hash.slice(1))); - }); + initWithToken(result.body.accessToken); }); }, onOptionsMenu: function (command) { @@ -316,6 +330,8 @@ var app = new Vue({ }).then(function () {}).catch(function () {}); } else if (command === 'logout') { logout(); + } else if (command === 'apiAccess') { + this.accessTokensDialogVisible = true; } }, onDownload: function (entry) { @@ -419,6 +435,42 @@ var app = new Vue({ }); }).catch(function () {}); }, + refreshAccessTokens: function () { + var that = this; + + superagent.get('/api/tokens').query({ access_token: localStorage.accessToken }).end(function (error, result) { + if (error && !result) return that.$message.error(error.message); + + that.accessTokens = result.body.accessTokens; + }); + }, + onCopyAccessToken: function (event) { + event.target.select(); + document.execCommand('copy'); + + this.$message({ type: 'success', message: 'Access token copied to clipboard' }); + }, + onCreateAccessToken: function () { + var that = this; + + superagent.post('/api/tokens').query({ access_token: localStorage.accessToken }).end(function (error, result) { + if (error && !result) return that.$message.error(error.message); + + that.refreshAccessTokens(); + }); + }, + onDeleteAccessToken: function (token) { + var that = this; + + this.$confirm('All actions from apps using this token will fail!', 'Really delete this access token?', { confirmButtonText: 'Yes Delete', cancelButtonText: 'No' }).then(function () { + superagent.delete('/api/tokens/' + token).query({ access_token: localStorage.accessToken }).end(function (error, result) { + if (error && !result) return that.$message.error(error.message); + + that.refreshAccessTokens(); + }); + }).catch(function () {}); + + }, prettyDate: function (row, column, cellValue, index) { var date = new Date(cellValue), diff = (((new Date()).getTime() - date.getTime()) / 1000), @@ -452,11 +504,7 @@ var app = new Vue({ } }); -getProfile(localStorage.accessToken, function (error) { - if (error) return console.error(error); - - loadDirectory(decode(window.location.hash.slice(1))); -}); +initWithToken(localStorage.accessToken); $(window).on('hashchange', function () { loadDirectory(decode(window.location.hash.slice(1)));