aboutsummaryrefslogtreecommitdiff
path: root/src/components/media_modal/media_modal.js
diff options
context:
space:
mode:
authortaehoon <th.dev91@gmail.com>2019-02-10 13:23:01 -0500
committertaehoon <th.dev91@gmail.com>2019-02-10 13:23:01 -0500
commit750c308909b76be5d4572c86b4affb6aed41f47b (patch)
tree3c40ead7c7f101f04122f4ffb3a310b83f163617 /src/components/media_modal/media_modal.js
parent4bea3c525f377a45919893ae0a474859b5744820 (diff)
Support lightbox gallery navigation via arrow buttons and keyboard
Diffstat (limited to 'src/components/media_modal/media_modal.js')
-rw-r--r--src/components/media_modal/media_modal.js51
1 files changed, 43 insertions, 8 deletions
diff --git a/src/components/media_modal/media_modal.js b/src/components/media_modal/media_modal.js
index 14ae19d4..992d7129 100644
--- a/src/components/media_modal/media_modal.js
+++ b/src/components/media_modal/media_modal.js
@@ -11,27 +11,62 @@ const MediaModal = {
showing () {
return this.$store.state.mediaViewer.activated
},
+ media () {
+ return this.$store.state.mediaViewer.media
+ },
currentIndex () {
return this.$store.state.mediaViewer.currentIndex
},
currentMedia () {
- return this.$store.state.mediaViewer.media[this.currentIndex]
+ return this.media[this.currentIndex]
+ },
+ canNavigate () {
+ return this.media.length > 1
},
type () {
return this.currentMedia ? fileTypeService.fileType(this.currentMedia.mimetype) : null
}
},
- created () {
- document.addEventListener('keyup', e => {
- if (e.keyCode === 27 && this.showing) { // escape
- this.hide()
- }
- })
- },
methods: {
hide () {
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)
}
}