diff --git a/frontend/mixins/shared.js b/frontend/mixins/shared.js index ea072be..889c5e7 100644 --- a/frontend/mixins/shared.js +++ b/frontend/mixins/shared.js @@ -122,6 +122,18 @@ const funcs = { getDownloadLink(path) { return Vue.config.baseURL+'/download&path='+encodeURIComponent(Base64.encode(path)) }, + hasPreview(name) { + return this.isText(name) || this.isImage(name) + }, + isText(name) { + return this.hasExtension(name, ['.txt', '.html', '.css', '.js', '.ts', '.php']) + }, + isImage(name) { + return this.hasExtension(name, ['.jpg', '.jpeg', '.gif', '.png']) + }, + hasExtension(name, exts) { + return (new RegExp('(' + exts.join('|').replace(/\./g, '\\.') + ')$', 'i')).test(name) + }, } } diff --git a/frontend/views/Browser.vue b/frontend/views/Browser.vue index 0abd3cf..670c42e 100644 --- a/frontend/views/Browser.vue +++ b/frontend/views/Browser.vue @@ -113,7 +113,7 @@ {{ lang('Download') }} - + {{ lang('View') }} @@ -252,8 +252,10 @@ export default { itemClick(item) { if (item.type == 'dir' || item.type == 'back') { this.goTo(item.path) - } else if (this.can(['read', 'download'])) { + } else if (this.can(['download']) && this.hasPreview(item.path)) { this.preview(item) + } else if (this.can(['download'])) { + this.download(item) } }, selectDir() { diff --git a/frontend/views/partials/Preview.vue b/frontend/views/partials/Preview.vue index 7c7bd8f..6dea33c 100644 --- a/frontend/views/partials/Preview.vue +++ b/frontend/views/partials/Preview.vue @@ -7,13 +7,13 @@