summaryrefslogtreecommitdiff
path: root/animism-align/frontend/views/upload
diff options
context:
space:
mode:
Diffstat (limited to 'animism-align/frontend/views/upload')
-rw-r--r--animism-align/frontend/views/upload/components/upload.form.js16
-rw-r--r--animism-align/frontend/views/upload/components/upload.index.js98
-rw-r--r--animism-align/frontend/views/upload/components/upload.indexOptions.js61
-rw-r--r--animism-align/frontend/views/upload/components/upload.menu.js18
-rw-r--r--animism-align/frontend/views/upload/components/upload.show.js69
-rw-r--r--animism-align/frontend/views/upload/upload.actions.js18
-rw-r--r--animism-align/frontend/views/upload/upload.container.js36
-rw-r--r--animism-align/frontend/views/upload/upload.css182
-rw-r--r--animism-align/frontend/views/upload/upload.reducer.js22
9 files changed, 0 insertions, 520 deletions
diff --git a/animism-align/frontend/views/upload/components/upload.form.js b/animism-align/frontend/views/upload/components/upload.form.js
deleted file mode 100644
index 2010088..0000000
--- a/animism-align/frontend/views/upload/components/upload.form.js
+++ /dev/null
@@ -1,16 +0,0 @@
-import React, { Component } from 'react'
-import { Link } from 'react-router-dom'
-
-import { MenuButton, FileInput } from '../../../common'
-
-export default class UploadForm extends Component {
- render() {
- return (
- <div className='uploadForm'>
- <MenuButton name="upload" label={false}>
- <FileInput onChange={this.props.uploadActions.upload} />
- </MenuButton>
- </div>
- )
- }
-}
diff --git a/animism-align/frontend/views/upload/components/upload.index.js b/animism-align/frontend/views/upload/components/upload.index.js
deleted file mode 100644
index 3a7ae4b..0000000
--- a/animism-align/frontend/views/upload/components/upload.index.js
+++ /dev/null
@@ -1,98 +0,0 @@
-import React, { Component } from 'react'
-import { Link } from 'react-router-dom'
-
-import { uploadUri, formatDateTime } from '../../../util'
-import { MenuButton, SmallMenuButton, Loader } from '../../../common'
-import actions from '../../../actions'
-
-import UploadIndexOptions from './upload.indexOptions'
-import UploadMenu from './upload.menu'
-
-// const { result, collectionLookup } = this.props
-
-export default class UploadIndex extends Component {
- componentDidMount() {
- this.fetch(false)
- }
-
- componentDidUpdate(prevProps) {
- if (this.props.upload.options.sort !== prevProps.upload.options.sort) {
- this.fetch(false)
- }
- }
-
- fetch(load_more) {
- const { options, index } = this.props.upload
- const { order: index_order } = index
- const [ sort, order ] = options.sort.split('-')
- actions.upload.index({
- sort, order, limit: 50, offset: load_more ? index_order.length : 0,
- }, load_more)
- }
-
- render() {
- const { uploadActions } = this.props
- const { options } = this.props.upload
- const { loading, lookup, order } = this.props.upload.index
- if (loading) {
- return (
- <section>
- <UploadIndexOptions />
- <div className="row">
- {order && !!order.length &&
- <div className={'results ' + options.thumbnailSize}>
- {order.map(id => <UploadItem key={id} data={lookup[id]} />)}
- </div>
- }
- </div>
- <Loader />
- </section>
- )
- }
- if (!lookup || !order.length) {
- return (
- <section>
- <UploadIndexOptions />
- <div className="row">
- <UploadMenu uploadActions={uploadActions} />
- <p className='gray'>
- {"No uploads"}
- </p>
- </div>
- </section>
- )
- }
- return (
- <section>
- <UploadIndexOptions />
- <div className="row">
- <UploadMenu uploadActions={uploadActions} />
- <div className={'results ' + options.thumbnailSize}>
- {order.map(id => <UploadItem key={id} data={lookup[id]} />)}
- </div>
- </div>
- {order.length >= 50 && <button className='loadMore' onClick={() => this.fetch(true)}>Load More</button>}
- </section>
- )
- }
-}
-
-const UploadItem = ({ data }) => {
- // console.log(data)
- // const imageUri = uploadUri(data)
- return (
- <div className='cell'>
- <div className='img'>
- <Link to={"/upload/" + data.id + "/show/"}>
- <img src={data.url} alt={"Uploaded image"} />
- </Link>
- </div>
- <div className='meta center'>
- <div>
- {formatDateTime(data.created_at)}
- </div>
- </div>
- </div>
- )
-}
-
diff --git a/animism-align/frontend/views/upload/components/upload.indexOptions.js b/animism-align/frontend/views/upload/components/upload.indexOptions.js
deleted file mode 100644
index 774bf22..0000000
--- a/animism-align/frontend/views/upload/components/upload.indexOptions.js
+++ /dev/null
@@ -1,61 +0,0 @@
-import React, { Component } from 'react'
-import { Link } from 'react-router-dom'
-import { bindActionCreators } from 'redux'
-import { connect } from 'react-redux'
-
-import actions from '../../../actions'
-
-import { Select, Checkbox } from '../../../common'
-
-const thumbnailOptions = [
- { name: 'th', label: 'Thumbnails', },
- { name: 'sm', label: 'Small', },
- { name: 'md', label: 'Medium', },
- { name: 'lg', label: 'Large', },
- { name: 'orig', label: 'Original', },
-]
-
-const sortOptions = [
- { name: 'id-asc', label: 'Most recent' },
- { name: 'id-desc', label: 'Oldest first' },
- { name: 'username-asc', label: 'Username (A-Z)' },
- { name: 'username-desc', label: 'Username (Z-A)' },
- // { name: '-asc', label: '' },
- // { name: '-desc', label: '' },
- // { name: '-asc', label: '' },
- // { name: '-desc', label: '' },
- // { name: '-asc', label: '' },
- // { name: '-desc', label: '' },
-]
-
-class IndexOptions extends Component {
- render() {
- const { options } = this.props
- return (
- <div className='row menubar'>
- <div />
- <Select
- name={'sort'}
- options={sortOptions}
- selected={options.sort}
- onChange={actions.upload.updateOption}
- />
- <Select
- name={'thumbnailSize'}
- options={thumbnailOptions}
- selected={options.thumbnailSize}
- onChange={actions.upload.updateOption}
- />
- </div>
- )
- }
-}
-
-const mapStateToProps = state => ({
- options: state.upload.options,
-})
-
-const mapDispatchToProps = dispatch => ({
-})
-
-export default connect(mapStateToProps, mapDispatchToProps)(IndexOptions)
diff --git a/animism-align/frontend/views/upload/components/upload.menu.js b/animism-align/frontend/views/upload/components/upload.menu.js
deleted file mode 100644
index 37c7f0b..0000000
--- a/animism-align/frontend/views/upload/components/upload.menu.js
+++ /dev/null
@@ -1,18 +0,0 @@
-import React, { Component } from 'react'
-import { Link } from 'react-router-dom'
-
-import { MenuButton, FileInput } from '../../../common'
-
-import actions from '../../../actions'
-
-export default class UploadMenu extends Component {
- render() {
- return (
- <div className='menuButtons'>
- <MenuButton name="upload">
- <FileInput onChange={this.props.uploadActions.upload} />
- </MenuButton>
- </div>
- )
- }
-}
diff --git a/animism-align/frontend/views/upload/components/upload.show.js b/animism-align/frontend/views/upload/components/upload.show.js
deleted file mode 100644
index 352caf3..0000000
--- a/animism-align/frontend/views/upload/components/upload.show.js
+++ /dev/null
@@ -1,69 +0,0 @@
-import React, { Component } from 'react'
-import { Link } from 'react-router-dom'
-import { connect } from 'react-redux'
-
-import actions from '../../../actions'
-import { formatDate, formatTime, formatAge, uploadUri } from '../../../util'
-import { history } from '../../../store'
-import { Loader, MenuButton } from '../../../common'
-
-class UploadShow extends Component {
- componentDidMount() {
- actions.upload.show(this.props.match.params.id)
- }
-
- componentDidUpdate(prevProps) {
- if (prevProps.match.params.id !== this.props.match.params.id) {
- actions.upload.show(this.props.match.params.id)
- }
- }
-
- handleDestroy() {
- const { res: data } = this.props.upload.show
- if (confirm("Really delete this upload?")) {
- actions.upload.destroy(data).then(() => {
- history.push('/upload/')
- })
- }
- }
-
- render() {
- const { show, destroy } = this.props.upload
- if (show.loading || destroy.loading) {
- return <Loader />
- }
- if (!show.loading && !show.res || show.not_found) {
- return <div className='gray'>Upload {this.props.match.params.id} not found</div>
- }
- const { res: data } = show
- return (
- <section className="row uploadShow">
- <div className="menuButtons">
- <MenuButton name="delete" onClick={this.handleDestroy.bind(this)} />
- </div>
- <div>
- <img src={data.url} />
- <div className='byline'>
- {'Uploaded by '}
- {data.username}
- {' on '}
- {formatDate(data.created_at)}
- {' at '}
- {formatTime(data.created_at)}
- {'. '}
- </div>
- </div>
- </section>
- )
- }
-}
-
-const mapStateToProps = state => ({
- upload: state.upload,
-})
-
-const mapDispatchToProps = dispatch => ({
- // searchActions: bindActionCreators({ ...searchActions }, dispatch),
-})
-
-export default connect(mapStateToProps, mapDispatchToProps)(UploadShow)
diff --git a/animism-align/frontend/views/upload/upload.actions.js b/animism-align/frontend/views/upload/upload.actions.js
deleted file mode 100644
index c5d12e3..0000000
--- a/animism-align/frontend/views/upload/upload.actions.js
+++ /dev/null
@@ -1,18 +0,0 @@
-import * as types from '../../types'
-import { store, history } from '../../store'
-import { api, post, pad, preloadImage } from '../../util'
-import actions from '../../actions'
-import { session } from '../../session'
-
-export const upload = (image, tag='upload') => dispatch => {
- const formData = {
- image,
- tag,
- username: 'animism', // session('username'),
- }
- // console.log(formData)
- return actions.upload.upload(formData).then(data => {
- // console.log(data.res)
- return data.res
- })
-}
diff --git a/animism-align/frontend/views/upload/upload.container.js b/animism-align/frontend/views/upload/upload.container.js
deleted file mode 100644
index 0ad76c9..0000000
--- a/animism-align/frontend/views/upload/upload.container.js
+++ /dev/null
@@ -1,36 +0,0 @@
-import React, { Component } from 'react'
-import { Route, Link } from 'react-router-dom'
-import { bindActionCreators } from 'redux'
-import { connect } from 'react-redux'
-
-import './upload.css'
-
-import actions from '../../actions'
-import * as uploadActions from './upload.actions'
-
-import UploadMenu from './components/upload.menu'
-import UploadIndex from './components/upload.index'
-import UploadShow from './components/upload.show'
-
-class Container extends Component {
- render() {
- return (
- <div className='row upload'>
- <div>
- <Route exact path='/upload/:id/show/' component={UploadShow} />
- <UploadIndex {...this.props} />
- </div>
- </div>
- )
- }
-}
-
-const mapStateToProps = state => ({
- upload: state.upload,
-})
-
-const mapDispatchToProps = dispatch => ({
- uploadActions: bindActionCreators({ ...uploadActions }, dispatch),
-})
-
-export default connect(mapStateToProps, mapDispatchToProps)(Container)
diff --git a/animism-align/frontend/views/upload/upload.css b/animism-align/frontend/views/upload/upload.css
deleted file mode 100644
index 28ce33d..0000000
--- a/animism-align/frontend/views/upload/upload.css
+++ /dev/null
@@ -1,182 +0,0 @@
-.uploadShow {
- margin-top: 1rem;
-}
-.uploadShow img {
- max-width: 30rem;
- max-height: 20rem;
-}
-.upload {
- height: 100%;
-}
-.upload > div:last-child {
- flex: 1;
- width: 100%;
-}
-
-/* results */
-
-.resultsContainer {
-}
-.results {
- display: flex;
- flex-flow: row wrap;
- justify-content: flex-start;
- align-items: flex-end;
-}
-.results .result {
- display: inline-block;
- margin-right: 1.125rem;
- margin-bottom: 1.125rem;
-}
-.result > a {
- display: block;
-}
-.result > a > div {
- position: relative;
-}
-.result img {
- max-width: 100%;
- display: block;
- cursor: pointer;
-}
-.result > a {
- border: 2px solid transparent;
-}
-.results .active img,
-.desktop .result > a:hover {
- border-color: #11f;
-}
-.results.th .result {
- max-width: 10rem;
-}
-.results.sm .result {
- max-width: 20rem;
-}
-.results.md .result {
- max-width: 40rem;
-}
-.results.lg .result {
- max-width: 80rem;
-}
-.results.orig .result {
- max-width: 100%;
-}
-.results.th img {
- max-height: 120px;
-}
-.results.sm img {
- max-height: 160px;
-}
-.results.md img {
- max-height: 480px;
-}
-.results.lg img {
- max-height: 960px;
-}
-.results.orig img {
- max-width: none;
- max-height: none;
-}
-.results .img {
- width: 100%;
-}
-.results .img > a {
- display: inline-block;
- position: relative;
-}
-.results .meta {
- display: flex;
- flex-direction: row;
- justify-content: space-between;
- align-items: baseline;
- font-size: 0.75rem;
- color: #888;
- padding: 0.125rem;
-}
-.results .meta.center,
-.row.center {
- align-items: center;
-}
-.results .meta > div {
- overflow: hidden;
- max-width: 75%;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-.results .meta > span {
- padding-right: 0.125rem;
-}
-.results .meta .buttons {
-}
-.score.good {
- color: #11f;
- font-weight: bold;
-}
-.score.ok {
- color: #44d;
- font-weight: bold;
-}
-.score.poor {
- color: #66b;
-}
-.score {
- color: #888;
-}
-.resultGroup {
- display: flex;
- flex-direction: row;
- flex-wrap: wrap;
- position: relative;
- border: 2px solid #888;
- max-width: 20rem;
- margin-right: 1.5rem;
- margin-bottom: 1.5rem;
- background: #fff;
- box-shadow: 0 2px 4px #888;
-}
-.resultGroup .sha256 {
- position: absolute;
- background: white;
- padding: 0.25rem 0.25rem 0rem 0.25rem;
- left: 0.25rem;
- top: -0.75rem;
- font-size: 0.75rem;
- color: #333;
- text-transform: uppercase;
- max-width: 95%;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-.results.grouped {
- background: #fff;
-}
-.results.grouped.sm,
-.results.grouped.md,
-.results.grouped.lg,
-.results.grouped.orig {
- flex-flow: column nowrap;
-}
-.results.th .resultGroup {
- max-width: 33.5rem;
-}
-.results.sm .resultGroup {
- max-width: 56rem;
-}
-.results.md .resultGroup {
- max-width: 79rem;
-}
-.results.lg .resultGroup {
- max-width: 100%;
-}
-.results.orig .resultGroup {
- max-width: 100%;
-}
-.results .resultGroup .result {
- margin: 0.5rem;
-}
-.loadMore {
- width: 100%;
-}
-.loadMore button {
- width: 100%;
-}
diff --git a/animism-align/frontend/views/upload/upload.reducer.js b/animism-align/frontend/views/upload/upload.reducer.js
deleted file mode 100644
index db12819..0000000
--- a/animism-align/frontend/views/upload/upload.reducer.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import * as types from '../../types'
-import { session, getDefault, getDefaultInt } from '../../session'
-
-import { crudState, crudReducer } from '../../api/crud.reducer'
-
-const initialState = crudState('upload', {
- options: {
- sort: getDefault('upload.sort', 'id-desc'),
- thumbnailSize: getDefault('upload.thumbnailSize', 'small'),
- }
-})
-
-const reducer = crudReducer('upload')
-
-export default function uploadReducer(state = initialState, action) {
- // console.log(action.type, action)
- state = reducer(state, action)
- switch (action.type) {
- default:
- return state
- }
-}