forked from AkkomaGang/akkoma-fe
Merge branch 'tae-hoon/pleroma-fe-323-improve-image-lightbox' into develop
This commit is contained in:
commit
32df77c16a
3 changed files with 125 additions and 11 deletions
|
@ -11,27 +11,62 @@ const MediaModal = {
|
||||||
showing () {
|
showing () {
|
||||||
return this.$store.state.mediaViewer.activated
|
return this.$store.state.mediaViewer.activated
|
||||||
},
|
},
|
||||||
|
media () {
|
||||||
|
return this.$store.state.mediaViewer.media
|
||||||
|
},
|
||||||
currentIndex () {
|
currentIndex () {
|
||||||
return this.$store.state.mediaViewer.currentIndex
|
return this.$store.state.mediaViewer.currentIndex
|
||||||
},
|
},
|
||||||
currentMedia () {
|
currentMedia () {
|
||||||
return this.$store.state.mediaViewer.media[this.currentIndex]
|
return this.media[this.currentIndex]
|
||||||
|
},
|
||||||
|
canNavigate () {
|
||||||
|
return this.media.length > 1
|
||||||
},
|
},
|
||||||
type () {
|
type () {
|
||||||
return this.currentMedia ? fileTypeService.fileType(this.currentMedia.mimetype) : null
|
return this.currentMedia ? fileTypeService.fileType(this.currentMedia.mimetype) : null
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
created () {
|
|
||||||
document.addEventListener('keyup', e => {
|
|
||||||
if (e.keyCode === 27 && this.showing) { // escape
|
|
||||||
this.hide()
|
|
||||||
}
|
|
||||||
})
|
|
||||||
},
|
|
||||||
methods: {
|
methods: {
|
||||||
hide () {
|
hide () {
|
||||||
this.$store.dispatch('closeMediaViewer')
|
this.$store.dispatch('closeMediaViewer')
|
||||||
|
},
|
||||||
|
goPrev () {
|
||||||
|
if (this.canNavigate) {
|
||||||
|
const prevIndex = this.currentIndex === 0 ? this.media.length - 1 : (this.currentIndex - 1)
|
||||||
|
this.$store.dispatch('setCurrent', this.media[prevIndex])
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
goNext () {
|
||||||
|
if (this.canNavigate) {
|
||||||
|
const nextIndex = this.currentIndex === this.media.length - 1 ? 0 : (this.currentIndex + 1)
|
||||||
|
this.$store.dispatch('setCurrent', this.media[nextIndex])
|
||||||
|
}
|
||||||
|
},
|
||||||
|
handleKeyupEvent (e) {
|
||||||
|
if (this.showing && e.keyCode === 27) { // escape
|
||||||
|
this.hide()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
handleKeydownEvent (e) {
|
||||||
|
if (!this.showing) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if (e.keyCode === 39) { // arrow right
|
||||||
|
this.goNext()
|
||||||
|
} else if (e.keyCode === 37) { // arrow left
|
||||||
|
this.goPrev()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted () {
|
||||||
|
document.addEventListener('keyup', this.handleKeyupEvent)
|
||||||
|
document.addEventListener('keydown', this.handleKeydownEvent)
|
||||||
|
},
|
||||||
|
destroyed () {
|
||||||
|
document.removeEventListener('keyup', this.handleKeyupEvent)
|
||||||
|
document.removeEventListener('keydown', this.handleKeydownEvent)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,22 @@
|
||||||
:controls="true"
|
:controls="true"
|
||||||
@click.stop.native="">
|
@click.stop.native="">
|
||||||
</VideoAttachment>
|
</VideoAttachment>
|
||||||
|
<button
|
||||||
|
:title="$t('media_modal.previous')"
|
||||||
|
class="modal-view-button-arrow modal-view-button-arrow--prev"
|
||||||
|
v-if="canNavigate"
|
||||||
|
@click.stop.prevent="goPrev"
|
||||||
|
>
|
||||||
|
<i class="icon-left-open arrow-icon" />
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
:title="$t('media_modal.next')"
|
||||||
|
class="modal-view-button-arrow modal-view-button-arrow--next"
|
||||||
|
v-if="canNavigate"
|
||||||
|
@click.stop.prevent="goNext"
|
||||||
|
>
|
||||||
|
<i class="icon-right-open arrow-icon" />
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
@ -19,15 +35,29 @@
|
||||||
.modal-view {
|
.modal-view {
|
||||||
z-index: 1000;
|
z-index: 1000;
|
||||||
position: fixed;
|
position: fixed;
|
||||||
width: 100vw;
|
|
||||||
height: 100vh;
|
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
background-color: rgba(0, 0, 0, 0.5);
|
background-color: rgba(0, 0, 0, 0.5);
|
||||||
cursor: pointer;
|
|
||||||
|
&:hover {
|
||||||
|
.modal-view-button-arrow {
|
||||||
|
opacity: 0.75;
|
||||||
|
|
||||||
|
&:focus,
|
||||||
|
&:hover {
|
||||||
|
outline: none;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
&:hover {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.modal-image {
|
.modal-image {
|
||||||
|
@ -35,4 +65,49 @@
|
||||||
max-height: 90%;
|
max-height: 90%;
|
||||||
box-shadow: 0px 5px 15px 0 rgba(0, 0, 0, 0.5);
|
box-shadow: 0px 5px 15px 0 rgba(0, 0, 0, 0.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.modal-view-button-arrow {
|
||||||
|
position: absolute;
|
||||||
|
display: block;
|
||||||
|
top: 50%;
|
||||||
|
margin-top: -50px;
|
||||||
|
width: 70px;
|
||||||
|
height: 100px;
|
||||||
|
border: 0;
|
||||||
|
padding: 0;
|
||||||
|
opacity: 0;
|
||||||
|
box-shadow: none;
|
||||||
|
background: none;
|
||||||
|
appearance: none;
|
||||||
|
overflow: visible;
|
||||||
|
cursor: pointer;
|
||||||
|
transition: opacity 333ms cubic-bezier(.4,0,.22,1);
|
||||||
|
|
||||||
|
.arrow-icon {
|
||||||
|
position: absolute;
|
||||||
|
top: 35px;
|
||||||
|
height: 30px;
|
||||||
|
width: 32px;
|
||||||
|
font-size: 14px;
|
||||||
|
line-height: 30px;
|
||||||
|
color: #FFF;
|
||||||
|
text-align: center;
|
||||||
|
background-color: rgba(0,0,0,.3);
|
||||||
|
}
|
||||||
|
|
||||||
|
&--prev {
|
||||||
|
left: 0;
|
||||||
|
.arrow-icon {
|
||||||
|
left: 6px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&--next {
|
||||||
|
right: 0;
|
||||||
|
.arrow-icon {
|
||||||
|
right: 6px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -36,6 +36,10 @@
|
||||||
"username": "Username",
|
"username": "Username",
|
||||||
"hint": "Log in to join the discussion"
|
"hint": "Log in to join the discussion"
|
||||||
},
|
},
|
||||||
|
"media_modal": {
|
||||||
|
"previous": "Previous",
|
||||||
|
"next": "Next"
|
||||||
|
},
|
||||||
"nav": {
|
"nav": {
|
||||||
"about": "About",
|
"about": "About",
|
||||||
"back": "Back",
|
"back": "Back",
|
||||||
|
|
Loading…
Reference in a new issue