Redo version page (#777)

* Redo version page

* More work on editing page

* Make saving work

* Finish version editing

* Version creation (base)

* Add creation buttons

* Add file uploader to versions page

* Add version file parsing

* Finish PR

* Fix version page responsiveness and use more consistent card design

* Whoops that wasn't supposed to be there

* Fixes + allow whole page dragging

* Re-add lost merge data

* Remove debug line

* Move back to list btm

Co-authored-by: Prospector <prospectordev@gmail.com>
This commit is contained in:
Geometrically
2022-12-20 11:15:31 -07:00
committed by GitHub
parent 0de19a09ad
commit 6f58e9e7bb
19 changed files with 1922 additions and 1513 deletions

View File

@@ -0,0 +1,82 @@
<template>
<div
ref="drop_area"
class="drop-area"
@drop.stop.prevent="
(event) => {
$refs.drop_area.style.visibility = 'hidden'
if (event.dataTransfer && event.dataTransfer.files) {
$emit('change', event.dataTransfer.files)
}
}
"
@dragenter.prevent="allowDrag"
@dragover.prevent="allowDrag"
@dragleave.prevent="$refs.drop_area.style.visibility = 'hidden'"
/>
</template>
<script>
export default {
name: 'DropArea',
props: {
accept: {
type: String,
default: '',
},
},
mounted() {
document.addEventListener('dragenter', () => {
this.$refs.drop_area.style.visibility = 'visible'
})
},
methods: {
allowDrag(event) {
const file = event.dataTransfer?.items[0]
if (
file &&
this.accept
.split(',')
.reduce(
(acc, t) => acc || file.type.startsWith(t) || file.type === t,
false
)
) {
// Adds file dropping indicator
event.dataTransfer.dropEffect = 'copy'
event.preventDefault()
}
},
},
}
</script>
<style lang="scss" scoped>
.drop-area {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 10;
visibility: hidden;
background-color: hsla(0, 0%, 0%, 0.5);
transition: visibility 0.2s ease-in-out, background-color 0.1s ease-in-out;
display: flex;
&::before {
--indent: 4rem;
content: ' ';
position: relative;
top: var(--indent);
left: var(--indent);
width: calc(100% - (2 * var(--indent)));
height: calc(100% - (2 * var(--indent)));
border-radius: 1rem;
border: 0.25rem dashed var(--color-button-bg);
}
}
</style>

View File

@@ -1,31 +1,26 @@
<template>
<div class="columns">
<label
class="iconified-button"
@drop.prevent="handleDrop"
@dragover.prevent
>
<UploadIcon v-if="showIcon" />
{{ prompt }}
<input
type="file"
:multiple="multiple"
:accept="accept"
@change="handleChange"
/>
</label>
</div>
<label
:class="{ 'long-style': longStyle }"
@drop.prevent="handleDrop"
@dragover.prevent
>
<slot></slot>
{{ prompt }}
<input
type="file"
:multiple="multiple"
:accept="accept"
@change="handleChange"
/>
</label>
</template>
<script>
import { fileIsValid } from '~/plugins/fileUtils'
import UploadIcon from '~/assets/images/utils/upload.svg?inline'
export default {
name: 'FileInput',
components: {
UploadIcon,
},
components: {},
props: {
prompt: {
type: String,
@@ -54,6 +49,10 @@ export default {
type: Boolean,
default: false,
},
longStyle: {
type: Boolean,
default: false,
},
},
data() {
return {
@@ -92,22 +91,22 @@ label {
svg {
height: 1rem;
}
}
input {
display: none;
}
.known-error label {
border-color: var(--color-special-red) !important;
background-color: var(--color-warning-bg) !important;
span {
border-color: var(--color-special-red);
input {
display: none;
}
&::placeholder {
color: var(--color-warning-text);
&.long-style {
display: flex;
padding: 1.5rem 2rem;
justify-content: center;
align-items: center;
grid-gap: 0.5rem;
background-color: var(--color-button-bg);
border-radius: var(--size-rounded-sm);
border: dashed 0.3rem var(--color-text);
cursor: pointer;
color: var(--color-text-dark);
}
}
</style>