feat: upload button prompt

This commit is contained in:
Ramires Viana 2020-06-16 16:06:55 +00:00
parent 073076d2d5
commit 7e6b4af48b
6 changed files with 98 additions and 7 deletions

View File

@ -10,7 +10,11 @@ export default {
name: 'upload-button', name: 'upload-button',
methods: { methods: {
upload: function () { upload: function () {
document.getElementById('upload-input').click() if (typeof(DataTransferItem.prototype.webkitGetAsEntry) !== 'undefined') {
this.$store.commit('showHover', 'upload')
} else {
document.getElementById('upload-input').click();
}
} }
} }
} }

View File

@ -5,6 +5,7 @@
<span>{{ $t('files.lonely') }}</span> <span>{{ $t('files.lonely') }}</span>
</h2> </h2>
<input style="display:none" type="file" id="upload-input" @change="uploadInput($event)" multiple> <input style="display:none" type="file" id="upload-input" @change="uploadInput($event)" multiple>
<input style="display:none" type="file" id="upload-folder-input" @change="uploadInput($event)" webkitdirectory multiple>
</div> </div>
<div v-else id="listing" <div v-else id="listing"
:class="user.viewMode" :class="user.viewMode"
@ -75,6 +76,7 @@
</div> </div>
<input style="display:none" type="file" id="upload-input" @change="uploadInput($event)" multiple> <input style="display:none" type="file" id="upload-input" @change="uploadInput($event)" multiple>
<input style="display:none" type="file" id="upload-folder-input" @change="uploadInput($event)" webkitdirectory multiple>
<div :class="{ active: $store.state.multiple }" id="multiple-selection"> <div :class="{ active: $store.state.multiple }" id="multiple-selection">
<p>{{ $t('files.multipleSelectionEnabled') }}</p> <p>{{ $t('files.multipleSelectionEnabled') }}</p>
@ -331,7 +333,7 @@ export default {
let conflict = false let conflict = false
for (let i = 0; i < files.length; i++) { for (let i = 0; i < files.length; i++) {
let file = files[i]; let file = files[i]
let name = file.name let name = file.name
if (folder_upload) { if (folder_upload) {
@ -366,7 +368,19 @@ export default {
}) })
}, },
uploadInput (event) { uploadInput (event) {
this.checkConflict(event.currentTarget.files, this.req.items, '') this.$store.commit('closeHovers')
let files = event.currentTarget.files
let folder_upload = files[0].webkitRelativePath !== undefined && files[0].webkitRelativePath !== ''
if (folder_upload) {
for (let i = 0; i < files.length; i++) {
let file = files[i]
files[i].fullPath = file.webkitRelativePath
}
}
this.checkConflict(files, this.req.items, '')
}, },
resetOpacity () { resetOpacity () {
let items = document.getElementsByClassName('item') let items = document.getElementsByClassName('item')
@ -388,7 +402,7 @@ export default {
} }
} }
} else { } else {
resolve(dt.files); resolve(dt.files)
} }
function readEntry(entry, directory = "") { function readEntry(entry, directory = "") {

View File

@ -17,6 +17,7 @@ import NewFile from './NewFile'
import NewDir from './NewDir' import NewDir from './NewDir'
import Replace from './Replace' import Replace from './Replace'
import Share from './Share' import Share from './Share'
import Upload from './Upload'
import { mapState } from 'vuex' import { mapState } from 'vuex'
import buttons from '@/utils/buttons' import buttons from '@/utils/buttons'
@ -33,7 +34,8 @@ export default {
NewFile, NewFile,
NewDir, NewDir,
Help, Help,
Replace Replace,
Upload
}, },
data: function () { data: function () {
return { return {
@ -58,7 +60,8 @@ export default {
'newDir', 'newDir',
'download', 'download',
'replace', 'replace',
'share' 'share',
'upload'
].indexOf(this.show) >= 0; ].indexOf(this.show) >= 0;
return matched && this.show || null; return matched && this.show || null;

View File

@ -0,0 +1,37 @@
<template>
<div class="card floating">
<div class="card-title">
<h2>{{ $t('prompts.upload') }}</h2>
</div>
<div class="card-content">
<p>{{ $t('prompts.uploadMessage') }}</p>
</div>
<div class="card-action full">
<div @click="uploadFile" class="action">
<i class="material-icons">insert_drive_file</i>
<div class="title">File</div>
</div>
<div @click="uploadFolder" class="action">
<i class="material-icons">folder</i>
<div class="title">Folder</div>
</div>
</div>
</div>
</template>
<script>
export default {
name: 'upload',
methods: {
uploadFile: function () {
document.getElementById('upload-input').click()
},
uploadFolder: function () {
document.getElementById('upload-folder-input').click()
}
}
}
</script>

View File

@ -96,6 +96,7 @@ table tr>*:last-child {
background-color: #fff; background-color: #fff;
border-radius: 2px; border-radius: 2px;
box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2); box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2);
overflow: auto;
} }
.card.floating { .card.floating {
@ -366,3 +367,33 @@ table tr>*:last-child {
.card .collapsible .collapse { .card .collapsible .collapse {
padding: 0 1em; padding: 0 1em;
} }
.card .card-action.full {
padding-top: 0;
display: flex;
flex-wrap: wrap;
}
.card .card-action.full .action {
flex: 1;
padding: 2em;
border-radius: 0.2em;
border: 1px solid rgba(0, 0, 0, 0.1);
text-align: center;
}
.card .card-action.full .action {
margin: 0 0.25em 0.50em;
}
.card .card-action.full .action i {
display: block;
padding: 0;
margin-bottom: 0.25em;
font-size: 4em;
}
.card .card-action.full .action .title {
font-size: 1.5em;
font-weight: 500;
}

View File

@ -116,7 +116,9 @@
"size": "Size", "size": "Size",
"schedule": "Schedule", "schedule": "Schedule",
"scheduleMessage": "Pick a date and time to schedule the publication of this post.", "scheduleMessage": "Pick a date and time to schedule the publication of this post.",
"newArchetype": "Create a new post based on an archetype. Your file will be created on content folder." "newArchetype": "Create a new post based on an archetype. Your file will be created on content folder.",
"upload": "Upload",
"uploadMessage": "Select an option to upload."
}, },
"settings": { "settings": {
"themes": { "themes": {