summaryrefslogtreecommitdiff
path: root/client/modalImage/modalImage.container.js
diff options
context:
space:
mode:
authorJules Laplace <julescarbon@gmail.com>2019-04-02 20:35:50 +0200
committerJules Laplace <julescarbon@gmail.com>2019-04-02 20:35:50 +0200
commitf58d41731fc07d94d594d5582aef203564f990ec (patch)
tree0224ecd6801a61e6c6e4a8c7be6c4f7a3dd2e649 /client/modalImage/modalImage.container.js
parentee2fa8546b9620c156bbb36d5131a2369950629e (diff)
modal image gallery
Diffstat (limited to 'client/modalImage/modalImage.container.js')
-rw-r--r--client/modalImage/modalImage.container.js85
1 files changed, 85 insertions, 0 deletions
diff --git a/client/modalImage/modalImage.container.js b/client/modalImage/modalImage.container.js
new file mode 100644
index 00000000..a637deb6
--- /dev/null
+++ b/client/modalImage/modalImage.container.js
@@ -0,0 +1,85 @@
+import React, { Component } from 'react'
+import { bindActionCreators } from 'redux'
+import { connect } from 'react-redux'
+import { ReactTabulator } from 'react-tabulator'
+
+import { toArray, toTuples, domainFromUrl } from '../util'
+import { Loader } from '../common'
+
+import csv from 'parse-csv'
+
+class ModalImage extends Component {
+ state = {
+ visible: true,
+ images: [],
+ index: 0,
+ }
+
+ componentDidMount() {
+ const images = toArray(document.querySelectorAll('.image img'))
+ // console.log(images)
+ images.forEach((img, i) => {
+ img.addEventListener('click', () => this.loadImage(i))
+ })
+ this.setState({ images })
+ document.body.addEventListener('keydown', e => {
+ if (document.activeElement && document.activeElement !== document.body) {
+ return null
+ }
+ // console.log(e.keyCode)
+ switch (e.keyCode) {
+ case 37: // left
+ this.prev()
+ break
+ case 39: // right
+ this.next()
+ break
+ default:
+ break
+ }
+ })
+ }
+
+ loadImage(index) {
+ this.setState({ visible: true, index })
+ }
+
+ prev() {
+ const { index, images } = this.state
+ this.setState({ index: (images.length + index - 1) % images.length })
+ }
+
+ next() {
+ const { index, images } = this.state
+ this.setState({ index: (index + 1) % images.length })
+ }
+
+ close() {
+ this.setState({ visible: false })
+ }
+
+ render() {
+ const { images, index, visible } = this.state
+ if (!images.length) return null
+ const img = images[index]
+ let caption = null
+ const sib = img.nextSibling
+ if (sib && sib.classList.contains('caption')) {
+ caption = sib.innerText
+ }
+ return (
+ <div className={visible ? 'modal visible' : 'modal'}>
+ <div className='inner'>
+ <div className='centered'>
+ <img src={img.src} />
+ {caption && <div class='caption'>{caption}</div>}
+ </div>
+ </div>
+ <div onClick={() => this.prev()}className='prev'>{'<'}</div>
+ <div onClick={() => this.next()} className='next'>{'>'}</div>
+ <div onClick={() => this.close()} className='close'>{'x'}</div>
+ </div>
+ )
+ }
+}
+export default ModalImage