From 18321f234e5261af43624b67c99a4dee3c060ed8 Mon Sep 17 00:00:00 2001 From: Jules Laplace Date: Tue, 5 Jun 2018 20:11:11 +0200 Subject: move views into own folder and begin prising away dataset code --- app/client/modules/pix2pix/index.js | 1 - app/client/modules/samplernn/index.js | 16 +- app/client/modules/samplernn/samplernn.datasets.js | 40 +- app/client/modules/samplernn/samplernn.import.js | 133 -- app/client/modules/samplernn/samplernn.loss.js | 159 --- app/client/modules/samplernn/samplernn.new.js | 35 - app/client/modules/samplernn/samplernn.results.js | 84 -- app/client/modules/samplernn/samplernn.show.js | 106 -- .../modules/samplernn/views/samplernn.graph.js | 159 +++ .../modules/samplernn/views/samplernn.import.js | 145 +++ .../modules/samplernn/views/samplernn.new.js | 35 + .../modules/samplernn/views/samplernn.results.js | 84 ++ .../modules/samplernn/views/samplernn.show.js | 118 ++ public/bundle.js | 1298 ++++++++++---------- public/bundle.js.map | 2 +- 15 files changed, 1213 insertions(+), 1202 deletions(-) delete mode 100644 app/client/modules/samplernn/samplernn.import.js delete mode 100644 app/client/modules/samplernn/samplernn.loss.js delete mode 100644 app/client/modules/samplernn/samplernn.new.js delete mode 100644 app/client/modules/samplernn/samplernn.results.js delete mode 100644 app/client/modules/samplernn/samplernn.show.js create mode 100644 app/client/modules/samplernn/views/samplernn.graph.js create mode 100644 app/client/modules/samplernn/views/samplernn.import.js create mode 100644 app/client/modules/samplernn/views/samplernn.new.js create mode 100644 app/client/modules/samplernn/views/samplernn.results.js create mode 100644 app/client/modules/samplernn/views/samplernn.show.js diff --git a/app/client/modules/pix2pix/index.js b/app/client/modules/pix2pix/index.js index 0343963..f60cf36 100644 --- a/app/client/modules/pix2pix/index.js +++ b/app/client/modules/pix2pix/index.js @@ -15,7 +15,6 @@ function links(){ return ( datasets - graph live ) diff --git a/app/client/modules/samplernn/index.js b/app/client/modules/samplernn/index.js index 6459056..7d5e36e 100644 --- a/app/client/modules/samplernn/index.js +++ b/app/client/modules/samplernn/index.js @@ -1,21 +1,21 @@ import { h, Component } from 'preact' import { Route, Link } from 'react-router-dom' -import SampleRNNNew from './samplernn.new' -import SampleRNNShow from './samplernn.show' -import SampleRNNDatasets from './samplernn.datasets' -import SampleRNNImport from './samplernn.import' -import SampleRNNResults from './samplernn.results' -import SampleRNNLoss from './samplernn.loss' + +import SampleRNNNew from './views/samplernn.new' +import SampleRNNShow from './views/samplernn.show' +import SampleRNNImport from './views/samplernn.import' +import SampleRNNResults from './views/samplernn.results' +import SampleRNNGraph from './views/samplernn.graph' function router () { return (
- - + +
) } diff --git a/app/client/modules/samplernn/samplernn.datasets.js b/app/client/modules/samplernn/samplernn.datasets.js index 607f041..f8cba29 100644 --- a/app/client/modules/samplernn/samplernn.datasets.js +++ b/app/client/modules/samplernn/samplernn.datasets.js @@ -14,31 +14,6 @@ import Loading from '../../common/loading.component' import samplernnModule from './samplernn.module' class SampleRNNDatasets extends Component { - constructor(props){ - super(props) - this.pickFile = this.pickFile.bind(this) - } - componentWillMount(){ - const id = this.props.id - console.log('load dataset:', id, this.props.id) - const { match, samplernn, actions } = this.props - if (id === 'new') return - if (id) { - if (parseInt(id)) localStorage.setItem('samplernn.last_id', id) - if (! samplernn.folder || samplernn.folder.id !== id) { - actions.load_directories(id) - } - } - } - pickFile(file){ - console.log('pick', file) - } - onDeleteFile(file){ - const yes = confirm('Are you sure you want to delete this file?') - if (yes) { - actions.file.destroy(file) - } - } render(){ const { samplernn, folder, match, history } = this.props if (samplernn.loading) { @@ -128,16 +103,27 @@ class SampleRNNDatasets extends Component { }) return datasets } + onDeleteFile(file){ + const yes = confirm('Are you sure you want to delete this file?') + if (yes) { + console.log('delete: confirmed') + if (this.props.onDeleteFile) { + console.log('calling custom deletefile function') + this.props.onDeleteFile(file) + } else { + actions.file.destroy(file) + } + } + } } const mapStateToProps = state => ({ samplernn: state.module.samplernn, runner: state.system.runner, - task: state.task, }) const mapDispatchToProps = (dispatch, ownProps) => ({ - actions: bindActionCreators(samplernnActions, dispatch), + samplernnActions: bindActionCreators(samplernnActions, dispatch), }) export default connect(mapStateToProps, mapDispatchToProps)(SampleRNNDatasets) diff --git a/app/client/modules/samplernn/samplernn.import.js b/app/client/modules/samplernn/samplernn.import.js deleted file mode 100644 index 495ee53..0000000 --- a/app/client/modules/samplernn/samplernn.import.js +++ /dev/null @@ -1,133 +0,0 @@ -import { h, Component } from 'preact' -import { bindActionCreators } from 'redux' -import { connect } from 'react-redux' -import * as util from '../../util' - -import * as samplernnActions from './samplernn.actions' - -import Select from '../../common/select.component' -import TextInput from '../../common/textInput.component' -import Button from '../../common/button.component' - -import SampleRNNDatasets from './samplernn.datasets' - -const samplernnModule = { - name: 'samplernn', - datatype: 'audio', -} - -class SampleRNNImport extends Component { - constructor(){ - super() - this.state = { - folder: 1, - import_action: 'Hotlink', - url_base: 'https://s3.amazonaws.com/i.asdf.us/bucky/data/4279/', - selected: {}, - } - } - render(){ - let datasets = [], folder; - if (this.props.samplernn.data) { - datasets = (this.props.samplernn.data.folders || []).map(folder => { - return [folder.name, folder.id] - }) - folder = this.props.samplernn.data.folderLookup.unsorted - } - return ( -
-
-

Import

-
-
-
-
-
-
-
-
-
-
-

Import to dataset

- this.setState({ import_action: value })} - /> - this.setState({ url_base: value })} - /> - -
-
-
- this.toggle(dataset.name, this.state.selected[name]))} - beforeRow={dataset => this.beforeRow(dataset)} - afterRow={dataset => this.afterRow(dataset)} - /> -
- ) - } - toggle(name){ - this.setState({ - ...this.state, - selected: { - ...this.state.selected, - [name]: !this.state.selected[name], - } - }) - } - beforeRow(dataset){ - // console.log(dataset) - } - afterRow(dataset){ - const name = dataset.name - return ( -
- -
- ) - } - doImport(){ - const { samplernn } = this.props - console.log(this.state) - this.props.actions.import_files(this.state, samplernn.data.datasetLookup, samplernn.data.fileLookup) - } -} - -const mapStateToProps = state => ({ - samplernn: state.module.samplernn, - runner: state.system.runner, - task: state.task, -}) - -const mapDispatchToProps = (dispatch, ownProps) => ({ - actions: bindActionCreators(samplernnActions, dispatch), -}) - -export default connect(mapStateToProps, mapDispatchToProps)(SampleRNNImport) diff --git a/app/client/modules/samplernn/samplernn.loss.js b/app/client/modules/samplernn/samplernn.loss.js deleted file mode 100644 index 6ca69ef..0000000 --- a/app/client/modules/samplernn/samplernn.loss.js +++ /dev/null @@ -1,159 +0,0 @@ -import { h, Component } from 'preact' -import { bindActionCreators } from 'redux' -import { connect } from 'react-redux' - -import { lerp, norm, randint, randrange } from '../../util' - -import * as samplernnActions from './samplernn.actions' - -import Group from '../../common/group.component' -import Slider from '../../common/slider.component' -import Select from '../../common/select.component' -import Button from '../../common/button.component' -import { FileList } from '../../common/fileList.component' -import TextInput from '../../common/textInput.component' - -class SampleRNNLoss extends Component { - constructor(props){ - super() - props.actions.load_loss() - } - render(){ - this.refs = {} - return ( -
-
-

SampleRNN Loss

- this.refs['canvas'] = ref} /> -
-
- ) - } - componentDidUpdate(){ - const { lossReport } = this.props.samplernn - if (! lossReport) return - const canvas = this.refs.canvas - canvas.width = window.innerWidth - canvas.height = window.innerHeight - canvas.style.width = canvas.width + 'px' - canvas.style.height = canvas.height + 'px' - - const ctx = canvas.getContext('2d') - const w = canvas.width = canvas.width * devicePixelRatio - const h = canvas.height = canvas.height * devicePixelRatio - ctx.clearRect(0,0,w,h) - - const keys = Object.keys(lossReport).sort().filter(k => !!lossReport[k].length) - let scaleMax = 0 - let scaleMin = Infinity - let epochsMax = 0 - keys.forEach(key => { - const loss = lossReport[key] - epochsMax = Math.max(loss.length, epochsMax) - loss.forEach((a) => { - const v = parseFloat(a.training_loss) - if (! v) return - scaleMax = Math.max(v, scaleMax) - scaleMin = Math.min(v, scaleMin) - }) - }) - // scaleMax *= 10 - console.log(scaleMax, scaleMin, epochsMax) - - scaleMax = 3 - scaleMin = 0 - const margin = 0 - const wmin = 0 - const wmax = w - const hmin = 0 - const hmax = h - const epochsScaleFactor = 1 // 3/2 - - let X, Y - for (var ii = 0; ii < epochsMax; ii++) { - X = lerp((ii)/(epochsMax/(epochsScaleFactor))*(epochsScaleFactor), wmin, wmax) - ctx.strokeStyle = 'rgba(0,0,0,0.3)' - ctx.beginPath(0, 0) - ctx.moveTo(X, 0) - ctx.lineTo(X, h) - ctx.lineWidth = 1 - // ctx.stroke() - if ( (ii % 5) === 0 ) { - ctx.lineWidth = 2 - ctx.stroke() - const fontSize = 12 - ctx.font = 'italic ' + (fontSize * devicePixelRatio) + 'px "Georgia"' - ctx.fillStyle = 'rgba(0,12,28,0.6)' - ctx.fillText(ii/5*6, X + (8 * devicePixelRatio), h - ((fontSize + 4) * devicePixelRatio)) - } - } - for (var ii = scaleMin; ii < scaleMax; ii += 1) { - Y = lerp(ii/scaleMax, hmin, hmax) - // ctx.strokeStyle = 'rgba(255,255,255,1.0)' - ctx.beginPath(0, 0) - ctx.moveTo(0, (h-Y)) - ctx.lineTo(w, (h-Y)) - ctx.lineWidth = 1 - // ctx.stroke() - // if ( (ii % 1) < 0.1) { - // ctx.strokeStyle = 'rgba(255,255,255,1.0)' - ctx.lineWidth = 2 - ctx.setLineDash([4, 4]) - ctx.stroke() - ctx.stroke() - ctx.stroke() - ctx.setLineDash([0,0]) - const fontSize = 12 - ctx.font = 'italic ' + (fontSize * devicePixelRatio) + 'px "Georgia"' - ctx.fillStyle = 'rgba(0,12,28,0.6)' - ctx.fillText(ii.toFixed(1), w-50, (h-Y) + fontSize + (10 * devicePixelRatio)) - // } - } - ctx.lineWidth = 1 - - keys.forEach(key => { - const loss = lossReport[key] - const vf = parseFloat(loss[loss.length-1].training_loss) || 0 - const vg = parseFloat(loss[0].training_loss) || 5 - // console.log(vf) - const vv = 1 - norm(vf, scaleMin, scaleMax/2) - ctx.lineWidth = (1-norm(vf, scaleMin, scaleMax)) * 5 - ctx.strokeStyle = 'rgba(' + [randrange(30,190), randrange(30,150), randrange(60,120)].join(',') + ',' + 0.8+ ')' - let begun = false - loss.forEach((a, i) => { - const v = parseFloat(a.training_loss) - if (! v) return - const x = lerp((i-2)/(epochsMax/(epochsScaleFactor))*(epochsScaleFactor), wmin, wmax) - const y = lerp(norm(v, scaleMin, scaleMax), hmax, hmin) - if (i === 0) { - return - } - if (! begun) { - begun = true - ctx.beginPath(x,y) - } else { - ctx.lineTo(x,y) - // ctx.stroke() - } - }) - ctx.stroke() - const i = loss.length-1 - const v = parseFloat(loss[i].training_loss) - const x = lerp((i-2)/(epochsMax/(epochsScaleFactor))*(epochsScaleFactor), wmin, wmax) - const y = lerp(norm(v, scaleMin, scaleMax), hmax, hmin) - const fontSize = 9 - ctx.font = 'italic ' + (fontSize * devicePixelRatio) + 'px "Georgia"' - ctx.fillText(key, x + fontSize, y + fontSize) - }) - } -} - -const mapStateToProps = state => ({ - samplernn: state.module.samplernn, -}) - -const mapDispatchToProps = (dispatch, ownProps) => ({ - actions: bindActionCreators(samplernnActions, dispatch), -}) - -export default connect(mapStateToProps, mapDispatchToProps)(SampleRNNLoss) diff --git a/app/client/modules/samplernn/samplernn.new.js b/app/client/modules/samplernn/samplernn.new.js deleted file mode 100644 index 66551bb..0000000 --- a/app/client/modules/samplernn/samplernn.new.js +++ /dev/null @@ -1,35 +0,0 @@ -import { h, Component } from 'preact' -import { bindActionCreators } from 'redux' -import { connect } from 'react-redux' -import * as util from '../../util' - -import * as samplernnActions from './samplernn.actions' - -import DatasetForm from '../../dataset/dataset.form' -import NewDatasetForm from '../../dataset/dataset.new' -import { FileList, FileRow } from '../../common/fileList.component' - -import samplernnModule from './samplernn.module' - -class SampleRNNNew extends Component { - constructor(props){ - super(props) - } - render(){ - const { history } = this.props - return ( -
- -
- ) - } -} -const mapStateToProps = state => ({ - samplernn: state.module.samplernn, -}) - -const mapDispatchToProps = (dispatch, ownProps) => ({ - actions: bindActionCreators(samplernnActions, dispatch), -}) - -export default connect(mapStateToProps, mapDispatchToProps)(SampleRNNNew) diff --git a/app/client/modules/samplernn/samplernn.results.js b/app/client/modules/samplernn/samplernn.results.js deleted file mode 100644 index 31079ce..0000000 --- a/app/client/modules/samplernn/samplernn.results.js +++ /dev/null @@ -1,84 +0,0 @@ -import { h, Component } from 'preact' -import { bindActionCreators } from 'redux' -import { Link } from 'react-router-dom'; -import { connect } from 'react-redux' - -import * as util from '../../util' -import * as samplernnActions from './samplernn.actions' -import * as audioPlayerActions from '../../common/audioPlayer/audioPlayer.actions' -import Loading from '../../common/loading.component' - -import { FileList, FileRow } from '../../common/fileList.component' - -class SampleRNNResults extends Component { - constructor(props){ - super() - if (!props.samplernn.data) props.actions.load_directories() - } - render(){ - if (this.props.samplernn.loading) return - const { folderLookup, fileLookup, datasetLookup } = this.props.samplernn.data - // const { folderLookup } = samplernn - - const renders = Object.keys(folderLookup).sort(util.sort.stringSort.asc).map(key => { - const folder = folderLookup[key] - let { mapFn, sortFn } = util.sort.orderByFn('epoch desc') - const datasetPairs = folder.datasets.map(name => datasetLookup[name]).map(mapFn).sort(sortFn) - const bestRenders = datasetPairs - .map(pair => pair[1]) - .filter(dataset => dataset.output.length) - .map(dataset => { - const { output } = dataset - return output.map(id => fileLookup[id]).map(mapFn).sort(sortFn)[0][1] - }) - // console.log(bestRenders.map(r => r.epoch)) - const path = folder.name === 'unsorted' - ? "/samplernn/import/" - : "/samplernn/datasets/" + folder.id + "/" - return ( -
-

{folder.name}

- { - e.preventDefault() - e.stopPropagation() - console.log('picked a file', file) - this.handlePick(file) - }} - /> -
- ) - }) - - return ( -
-
-

SampleRNN Results

- new project -
-
- {renders} -
-
- ) - } - handlePick(file){ - this.props.audioPlayer.play(file) - } -} - -const mapStateToProps = state => ({ - samplernn: state.module.samplernn, - runner: state.system.runner, - task: state.task, -}) - -const mapDispatchToProps = (dispatch, ownProps) => ({ - actions: bindActionCreators(samplernnActions, dispatch), - audioPlayer: bindActionCreators(audioPlayerActions, dispatch), -}) - -export default connect(mapStateToProps, mapDispatchToProps)(SampleRNNResults) diff --git a/app/client/modules/samplernn/samplernn.show.js b/app/client/modules/samplernn/samplernn.show.js deleted file mode 100644 index acc7692..0000000 --- a/app/client/modules/samplernn/samplernn.show.js +++ /dev/null @@ -1,106 +0,0 @@ -import { h, Component } from 'preact' -import { bindActionCreators } from 'redux' -import { connect } from 'react-redux' -import * as util from '../../util' - -import * as samplernnActions from './samplernn.actions' -import * as samplernnTasks from './samplernn.tasks' -import * as audioPlayerActions from '../../common/audioPlayer/audioPlayer.actions' - -import Loading from '../../common/loading.component' -import DatasetForm from '../../dataset/dataset.form' -import NewDatasetForm from '../../dataset/dataset.new' -import DatasetStatus from '../../dataset/dataset.status' -import { FileList, FileRow } from '../../common/fileList.component' - -import SampleRNNDatasets from './samplernn.datasets' - -import samplernnModule from './samplernn.module' - -class SampleRNNShow extends Component { - constructor(props){ - super(props) - this.datasetActions = this.datasetActions.bind(this) - } - render(){ - const { samplernn, match, history } = this.props - const { folderLookup } = (samplernn.data || {}) - const folder = (folderLookup || {})[samplernn.folder_id] || {} - return ( -
-
-
-

{folder ? folder.name : }

- -
-
- {folder && folder.name && folder.name !== 'unsorted' && - - } - { - e.preventDefault() - e.stopPropagation() - console.log('picked a file', file) - this.handlePick(file) - }} - datasetActions={this.datasetActions} - /> -
- ) - } - datasetActions(dataset, isFetching=false, isProcessing=false){ - const { samplernn, remote } = this.props - const input = fileLookup[dataset.input[0]] - if (! input) return null - if (input.name && input.name.match(/(gif|jpe?g|png)$/i)) return null - return ( -
-
- remote.train_task(dataset, samplernn.folder_id, 1)}>train - remote.train_task(dataset, samplernn.folder_id, 2)}>2x - remote.train_task(dataset, samplernn.folder_id, 4)}>4x - remote.train_task(dataset, samplernn.folder_id, 6)}>6x - remote.train_task(dataset, samplernn.folder_id, 18)}>18x -
- {dataset.isBuilt - ?
- {'fetched '} - remote.clear_cache_task(dataset)}>rm -
- : isFetching - ?
- {'fetching'} -
- :
- remote.fetch_task(input.url, input.id, dataset.name)}>fetch -
- } -
- ) - } - handlePick(file){ - this.props.audioPlayer.play(file) - } -} - -const mapStateToProps = state => ({ - samplernn: state.module.samplernn, - dataset: state.dataset, -}) - -const mapDispatchToProps = (dispatch, ownProps) => ({ - actions: bindActionCreators(samplernnActions, dispatch), - remote: bindActionCreators(samplernnTasks, dispatch), - audioPlayer: bindActionCreators(audioPlayerActions, dispatch), -}) - -export default connect(mapStateToProps, mapDispatchToProps)(SampleRNNShow) diff --git a/app/client/modules/samplernn/views/samplernn.graph.js b/app/client/modules/samplernn/views/samplernn.graph.js new file mode 100644 index 0000000..821f1cb --- /dev/null +++ b/app/client/modules/samplernn/views/samplernn.graph.js @@ -0,0 +1,159 @@ +import { h, Component } from 'preact' +import { bindActionCreators } from 'redux' +import { connect } from 'react-redux' + +import { lerp, norm, randint, randrange } from '../../../util' + +import * as samplernnActions from '../samplernn.actions' + +import Group from '../../../common/group.component' +import Slider from '../../../common/slider.component' +import Select from '../../../common/select.component' +import Button from '../../../common/button.component' +import { FileList } from '../../../common/fileList.component' +import TextInput from '../../../common/textInput.component' + +class SampleRNNGraph extends Component { + constructor(props){ + super() + props.actions.load_loss() + } + render(){ + this.refs = {} + return ( +
+
+

SampleRNN Loss Graph

+ this.refs['canvas'] = ref} /> +
+
+ ) + } + componentDidUpdate(){ + const { lossReport } = this.props.samplernn + if (! lossReport) return + const canvas = this.refs.canvas + canvas.width = window.innerWidth + canvas.height = window.innerHeight + canvas.style.width = canvas.width + 'px' + canvas.style.height = canvas.height + 'px' + + const ctx = canvas.getContext('2d') + const w = canvas.width = canvas.width * devicePixelRatio + const h = canvas.height = canvas.height * devicePixelRatio + ctx.clearRect(0,0,w,h) + + const keys = Object.keys(lossReport).sort().filter(k => !!lossReport[k].length) + let scaleMax = 0 + let scaleMin = Infinity + let epochsMax = 0 + keys.forEach(key => { + const loss = lossReport[key] + epochsMax = Math.max(loss.length, epochsMax) + loss.forEach((a) => { + const v = parseFloat(a.training_loss) + if (! v) return + scaleMax = Math.max(v, scaleMax) + scaleMin = Math.min(v, scaleMin) + }) + }) + // scaleMax *= 10 + console.log(scaleMax, scaleMin, epochsMax) + + scaleMax = 3 + scaleMin = 0 + const margin = 0 + const wmin = 0 + const wmax = w + const hmin = 0 + const hmax = h + const epochsScaleFactor = 1 // 3/2 + + let X, Y + for (var ii = 0; ii < epochsMax; ii++) { + X = lerp((ii)/(epochsMax/(epochsScaleFactor))*(epochsScaleFactor), wmin, wmax) + ctx.strokeStyle = 'rgba(0,0,0,0.3)' + ctx.beginPath(0, 0) + ctx.moveTo(X, 0) + ctx.lineTo(X, h) + ctx.lineWidth = 1 + // ctx.stroke() + if ( (ii % 5) === 0 ) { + ctx.lineWidth = 2 + ctx.stroke() + const fontSize = 12 + ctx.font = 'italic ' + (fontSize * devicePixelRatio) + 'px "Georgia"' + ctx.fillStyle = 'rgba(0,12,28,0.6)' + ctx.fillText(ii/5*6, X + (8 * devicePixelRatio), h - ((fontSize + 4) * devicePixelRatio)) + } + } + for (var ii = scaleMin; ii < scaleMax; ii += 1) { + Y = lerp(ii/scaleMax, hmin, hmax) + // ctx.strokeStyle = 'rgba(255,255,255,1.0)' + ctx.beginPath(0, 0) + ctx.moveTo(0, (h-Y)) + ctx.lineTo(w, (h-Y)) + ctx.lineWidth = 1 + // ctx.stroke() + // if ( (ii % 1) < 0.1) { + // ctx.strokeStyle = 'rgba(255,255,255,1.0)' + ctx.lineWidth = 2 + ctx.setLineDash([4, 4]) + ctx.stroke() + ctx.stroke() + ctx.stroke() + ctx.setLineDash([0,0]) + const fontSize = 12 + ctx.font = 'italic ' + (fontSize * devicePixelRatio) + 'px "Georgia"' + ctx.fillStyle = 'rgba(0,12,28,0.6)' + ctx.fillText(ii.toFixed(1), w-50, (h-Y) + fontSize + (10 * devicePixelRatio)) + // } + } + ctx.lineWidth = 1 + + keys.forEach(key => { + const loss = lossReport[key] + const vf = parseFloat(loss[loss.length-1].training_loss) || 0 + const vg = parseFloat(loss[0].training_loss) || 5 + // console.log(vf) + const vv = 1 - norm(vf, scaleMin, scaleMax/2) + ctx.lineWidth = (1-norm(vf, scaleMin, scaleMax)) * 5 + ctx.strokeStyle = 'rgba(' + [randrange(30,190), randrange(30,150), randrange(60,120)].join(',') + ',' + 0.8+ ')' + let begun = false + loss.forEach((a, i) => { + const v = parseFloat(a.training_loss) + if (! v) return + const x = lerp((i-2)/(epochsMax/(epochsScaleFactor))*(epochsScaleFactor), wmin, wmax) + const y = lerp(norm(v, scaleMin, scaleMax), hmax, hmin) + if (i === 0) { + return + } + if (! begun) { + begun = true + ctx.beginPath(x,y) + } else { + ctx.lineTo(x,y) + // ctx.stroke() + } + }) + ctx.stroke() + const i = loss.length-1 + const v = parseFloat(loss[i].training_loss) + const x = lerp((i-2)/(epochsMax/(epochsScaleFactor))*(epochsScaleFactor), wmin, wmax) + const y = lerp(norm(v, scaleMin, scaleMax), hmax, hmin) + const fontSize = 9 + ctx.font = 'italic ' + (fontSize * devicePixelRatio) + 'px "Georgia"' + ctx.fillText(key, x + fontSize, y + fontSize) + }) + } +} + +const mapStateToProps = state => ({ + samplernn: state.module.samplernn, +}) + +const mapDispatchToProps = (dispatch, ownProps) => ({ + actions: bindActionCreators(samplernnActions, dispatch), +}) + +export default connect(mapStateToProps, mapDispatchToProps)(SampleRNNGraph) diff --git a/app/client/modules/samplernn/views/samplernn.import.js b/app/client/modules/samplernn/views/samplernn.import.js new file mode 100644 index 0000000..6f5f78a --- /dev/null +++ b/app/client/modules/samplernn/views/samplernn.import.js @@ -0,0 +1,145 @@ +import { h, Component } from 'preact' +import { bindActionCreators } from 'redux' +import { connect } from 'react-redux' +import * as util from '../../../util' + +import * as samplernnActions from '../samplernn.actions' + +import Select from '../../../common/select.component' +import TextInput from '../../../common/textInput.component' +import Button from '../../../common/button.component' + +import SampleRNNDatasets from '../samplernn.datasets' + +const samplernnModule = { + name: 'samplernn', + datatype: 'audio', +} + +class SampleRNNImport extends Component { + constructor(){ + super() + this.state = { + folder: 1, + import_action: 'Hotlink', + url_base: 'https://s3.amazonaws.com/i.asdf.us/bucky/data/4279/', + selected: {}, + } + } + componentWillMount(){ + const id = this.props.match.params.id || localStorage.getItem('samplernn.last_id') + console.log('load dataset:', id) + const { match, samplernn, samplernnActions } = this.props + if (id === 'new') return + if (id) { + if (parseInt(id)) localStorage.setItem('samplernn.last_id', id) + if (! samplernn.folder || samplernn.folder.id !== id) { + samplernnActions.load_directories(id) + } + } + } + render(){ + let datasets = [], folder; + if (this.props.samplernn.data) { + datasets = (this.props.samplernn.data.folders || []).map(folder => { + return [folder.name, folder.id] + }) + folder = this.props.samplernn.data.folderLookup.unsorted + } + return ( +
+
+

Import

+
+
+
+
+
+
+
+
+
+
+

Import to dataset

+ this.setState({ import_action: value })} + /> + this.setState({ url_base: value })} + /> + +
+
+
+ this.toggle(dataset.name, this.state.selected[name]))} + beforeRow={dataset => this.beforeRow(dataset)} + afterRow={dataset => this.afterRow(dataset)} + /> +
+ ) + } + toggle(name){ + this.setState({ + ...this.state, + selected: { + ...this.state.selected, + [name]: !this.state.selected[name], + } + }) + } + beforeRow(dataset){ + // console.log(dataset) + } + afterRow(dataset){ + const name = dataset.name + return ( +
+ +
+ ) + } + doImport(){ + const { samplernn } = this.props + console.log(this.state) + this.props.actions.import_files(this.state, samplernn.data.datasetLookup, samplernn.data.fileLookup) + } +} + +const mapStateToProps = state => ({ + samplernn: state.module.samplernn, + runner: state.system.runner, + task: state.task, +}) + +const mapDispatchToProps = (dispatch, ownProps) => ({ + actions: bindActionCreators(samplernnActions, dispatch), +}) + +export default connect(mapStateToProps, mapDispatchToProps)(SampleRNNImport) diff --git a/app/client/modules/samplernn/views/samplernn.new.js b/app/client/modules/samplernn/views/samplernn.new.js new file mode 100644 index 0000000..d76e6c0 --- /dev/null +++ b/app/client/modules/samplernn/views/samplernn.new.js @@ -0,0 +1,35 @@ +import { h, Component } from 'preact' +import { bindActionCreators } from 'redux' +import { connect } from 'react-redux' +import * as util from '../../../util' + +import * as samplernnActions from '../samplernn.actions' + +import DatasetForm from '../../../dataset/dataset.form' +import NewDatasetForm from '../../../dataset/dataset.new' +import { FileList, FileRow } from '../../../common/fileList.component' + +import samplernnModule from '../samplernn.module' + +class SampleRNNNew extends Component { + constructor(props){ + super(props) + } + render(){ + const { history } = this.props + return ( +
+ +
+ ) + } +} +const mapStateToProps = state => ({ + samplernn: state.module.samplernn, +}) + +const mapDispatchToProps = (dispatch, ownProps) => ({ + actions: bindActionCreators(samplernnActions, dispatch), +}) + +export default connect(mapStateToProps, mapDispatchToProps)(SampleRNNNew) diff --git a/app/client/modules/samplernn/views/samplernn.results.js b/app/client/modules/samplernn/views/samplernn.results.js new file mode 100644 index 0000000..12367a3 --- /dev/null +++ b/app/client/modules/samplernn/views/samplernn.results.js @@ -0,0 +1,84 @@ +import { h, Component } from 'preact' +import { bindActionCreators } from 'redux' +import { Link } from 'react-router-dom'; +import { connect } from 'react-redux' + +import * as util from '../../../util' +import * as samplernnActions from '../samplernn.actions' +import * as audioPlayerActions from '../../../common/audioPlayer/audioPlayer.actions' + +import Loading from '../../../common/loading.component' +import { FileList, FileRow } from '../../../common/fileList.component' + +class SampleRNNResults extends Component { + constructor(props){ + super() + if (!props.samplernn.data) props.actions.load_directories() + } + render(){ + if (this.props.samplernn.loading) return + const { folderLookup, fileLookup, datasetLookup } = this.props.samplernn.data + // const { folderLookup } = samplernn + + const renders = Object.keys(folderLookup).sort(util.sort.stringSort.asc).map(key => { + const folder = folderLookup[key] + let { mapFn, sortFn } = util.sort.orderByFn('epoch desc') + const datasetPairs = folder.datasets.map(name => datasetLookup[name]).map(mapFn).sort(sortFn) + const bestRenders = datasetPairs + .map(pair => pair[1]) + .filter(dataset => dataset.output.length) + .map(dataset => { + const { output } = dataset + return output.map(id => fileLookup[id]).map(mapFn).sort(sortFn)[0][1] + }) + // console.log(bestRenders.map(r => r.epoch)) + const path = folder.name === 'unsorted' + ? "/samplernn/import/" + : "/samplernn/datasets/" + folder.id + "/" + return ( +
+

{folder.name}

+ { + e.preventDefault() + e.stopPropagation() + console.log('picked a file', file) + this.handlePick(file) + }} + /> +
+ ) + }) + + return ( +
+
+

SampleRNN Results

+ new project +
+
+ {renders} +
+
+ ) + } + handlePick(file){ + this.props.audioPlayer.play(file) + } +} + +const mapStateToProps = state => ({ + samplernn: state.module.samplernn, + runner: state.system.runner, + task: state.task, +}) + +const mapDispatchToProps = (dispatch, ownProps) => ({ + actions: bindActionCreators(samplernnActions, dispatch), + audioPlayer: bindActionCreators(audioPlayerActions, dispatch), +}) + +export default connect(mapStateToProps, mapDispatchToProps)(SampleRNNResults) diff --git a/app/client/modules/samplernn/views/samplernn.show.js b/app/client/modules/samplernn/views/samplernn.show.js new file mode 100644 index 0000000..8b42d44 --- /dev/null +++ b/app/client/modules/samplernn/views/samplernn.show.js @@ -0,0 +1,118 @@ +import { h, Component } from 'preact' +import { bindActionCreators } from 'redux' +import { connect } from 'react-redux' +import * as util from '../../../util' + +import * as samplernnActions from '../samplernn.actions' +import * as samplernnTasks from '../samplernn.tasks' +import * as audioPlayerActions from '../../../common/audioPlayer/audioPlayer.actions' + +import Loading from '../../../common/loading.component' +import DatasetForm from '../../../dataset/dataset.form' +import NewDatasetForm from '../../../dataset/dataset.new' +import DatasetStatus from '../../../dataset/dataset.status' +import { FileList, FileRow } from '../../../common/fileList.component' + +import SampleRNNDatasets from '../samplernn.datasets' + +import samplernnModule from '../samplernn.module' + +class SampleRNNShow extends Component { + constructor(props){ + super(props) + this.datasetActions = this.datasetActions.bind(this) + } + componentWillMount(){ + const id = this.props.match.params.id || localStorage.getItem('samplernn.last_id') + console.log('load dataset:', id) + const { match, samplernn, actions } = this.props + if (id === 'new') return + if (id) { + if (parseInt(id)) localStorage.setItem('samplernn.last_id', id) + if (! samplernn.folder || samplernn.folder.id !== id) { + actions.load_directories(id) + } + } + } + render(){ + const { samplernn, match, history } = this.props + const { folderLookup } = (samplernn.data || {}) + const folder = (folderLookup || {})[samplernn.folder_id] || {} + return ( +
+
+
+

{folder ? folder.name : }

+ +
+
+ {folder && folder.name && folder.name !== 'unsorted' && + + } + { + e.preventDefault() + e.stopPropagation() + console.log('picked a file', file) + this.handlePick(file) + }} + datasetActions={this.datasetActions} + /> +
+ ) + } + datasetActions(dataset, isFetching=false, isProcessing=false){ + const { samplernn, remote } = this.props + const input = samplernn.data.fileLookup[dataset.input[0]] + if (! input) return null + if (input.name && input.name.match(/(gif|jpe?g|png)$/i)) return null + return ( +
+
+ remote.train_task(dataset, samplernn.folder_id, 1)}>train + remote.train_task(dataset, samplernn.folder_id, 2)}>2x + remote.train_task(dataset, samplernn.folder_id, 4)}>4x + remote.train_task(dataset, samplernn.folder_id, 6)}>6x + remote.train_task(dataset, samplernn.folder_id, 18)}>18x +
+ {dataset.isBuilt + ?
+ {'fetched '} + remote.clear_cache_task(dataset)}>rm +
+ : isFetching + ?
+ {'fetching'} +
+ :
+ remote.fetch_task(input.url, input.id, dataset.name)}>fetch +
+ } +
+ ) + } + handlePick(file){ + this.props.audioPlayer.play(file) + } +} + +const mapStateToProps = state => ({ + samplernn: state.module.samplernn, + dataset: state.dataset, +}) + +const mapDispatchToProps = (dispatch, ownProps) => ({ + actions: bindActionCreators(samplernnActions, dispatch), + remote: bindActionCreators(samplernnTasks, dispatch), + audioPlayer: bindActionCreators(audioPlayerActions, dispatch), +}) + +export default connect(mapStateToProps, mapDispatchToProps)(SampleRNNShow) diff --git a/public/bundle.js b/public/bundle.js index 8963cd6..0eb8310 100644 --- a/public/bundle.js +++ b/public/bundle.js @@ -4440,15 +4440,6 @@ function links() { 'datasets' ) ), - (0, _preact.h)( - 'span', - null, - (0, _preact.h)( - _reactRouterDom.Link, - { to: '/pix2pix/graph/' }, - 'graph' - ) - ), (0, _preact.h)( 'span', null, @@ -5008,30 +4999,26 @@ var _preact = __webpack_require__(/*! preact */ "./node_modules/preact/dist/prea var _reactRouterDom = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/es/index.js"); -var _samplernn = __webpack_require__(/*! ./samplernn.new */ "./app/client/modules/samplernn/samplernn.new.js"); +var _samplernn = __webpack_require__(/*! ./views/samplernn.new */ "./app/client/modules/samplernn/views/samplernn.new.js"); var _samplernn2 = _interopRequireDefault(_samplernn); -var _samplernn3 = __webpack_require__(/*! ./samplernn.show */ "./app/client/modules/samplernn/samplernn.show.js"); +var _samplernn3 = __webpack_require__(/*! ./views/samplernn.show */ "./app/client/modules/samplernn/views/samplernn.show.js"); var _samplernn4 = _interopRequireDefault(_samplernn3); -var _samplernn5 = __webpack_require__(/*! ./samplernn.datasets */ "./app/client/modules/samplernn/samplernn.datasets.js"); +var _samplernn5 = __webpack_require__(/*! ./views/samplernn.import */ "./app/client/modules/samplernn/views/samplernn.import.js"); var _samplernn6 = _interopRequireDefault(_samplernn5); -var _samplernn7 = __webpack_require__(/*! ./samplernn.import */ "./app/client/modules/samplernn/samplernn.import.js"); +var _samplernn7 = __webpack_require__(/*! ./views/samplernn.results */ "./app/client/modules/samplernn/views/samplernn.results.js"); var _samplernn8 = _interopRequireDefault(_samplernn7); -var _samplernn9 = __webpack_require__(/*! ./samplernn.results */ "./app/client/modules/samplernn/samplernn.results.js"); +var _samplernn9 = __webpack_require__(/*! ./views/samplernn.graph */ "./app/client/modules/samplernn/views/samplernn.graph.js"); var _samplernn10 = _interopRequireDefault(_samplernn9); -var _samplernn11 = __webpack_require__(/*! ./samplernn.loss */ "./app/client/modules/samplernn/samplernn.loss.js"); - -var _samplernn12 = _interopRequireDefault(_samplernn11); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function router() { @@ -5039,11 +5026,11 @@ function router() { 'section', null, (0, _preact.h)(_reactRouterDom.Route, { exact: true, path: '/samplernn/new/', component: _samplernn2.default }), - (0, _preact.h)(_reactRouterDom.Route, { exact: true, path: '/samplernn/graph/', component: _samplernn12.default }), - (0, _preact.h)(_reactRouterDom.Route, { exact: true, path: '/samplernn/import/', component: _samplernn8.default }), (0, _preact.h)(_reactRouterDom.Route, { exact: true, path: '/samplernn/datasets/', component: _samplernn4.default }), (0, _preact.h)(_reactRouterDom.Route, { exact: true, path: '/samplernn/datasets/:id/', component: _samplernn4.default }), - (0, _preact.h)(_reactRouterDom.Route, { exact: true, path: '/samplernn/results/', component: _samplernn10.default }) + (0, _preact.h)(_reactRouterDom.Route, { exact: true, path: '/samplernn/import/', component: _samplernn6.default }), + (0, _preact.h)(_reactRouterDom.Route, { exact: true, path: '/samplernn/results/', component: _samplernn8.default }), + (0, _preact.h)(_reactRouterDom.Route, { exact: true, path: '/samplernn/graph/', component: _samplernn10.default }) ); } @@ -5516,54 +5503,20 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" var SampleRNNDatasets = function (_Component) { _inherits(SampleRNNDatasets, _Component); - function SampleRNNDatasets(props) { + function SampleRNNDatasets() { _classCallCheck(this, SampleRNNDatasets); - var _this = _possibleConstructorReturn(this, (SampleRNNDatasets.__proto__ || Object.getPrototypeOf(SampleRNNDatasets)).call(this, props)); - - _this.pickFile = _this.pickFile.bind(_this); - return _this; + return _possibleConstructorReturn(this, (SampleRNNDatasets.__proto__ || Object.getPrototypeOf(SampleRNNDatasets)).apply(this, arguments)); } _createClass(SampleRNNDatasets, [{ - key: 'componentWillMount', - value: function componentWillMount() { - var id = this.props.id; - console.log('load dataset:', id, this.props.id); - var _props = this.props, - match = _props.match, - samplernn = _props.samplernn, - actions = _props.actions; - - if (id === 'new') return; - if (id) { - if (parseInt(id)) localStorage.setItem('samplernn.last_id', id); - if (!samplernn.folder || samplernn.folder.id !== id) { - actions.load_directories(id); - } - } - } - }, { - key: 'pickFile', - value: function pickFile(file) { - console.log('pick', file); - } - }, { - key: 'onDeleteFile', - value: function onDeleteFile(file) { - var yes = confirm('Are you sure you want to delete this file?'); - if (yes) { - _actions2.default.file.destroy(file); - } - } - }, { key: 'render', value: function render() { - var _props2 = this.props, - samplernn = _props2.samplernn, - folder = _props2.folder, - match = _props2.match, - history = _props2.history; + var _props = this.props, + samplernn = _props.samplernn, + folder = _props.folder, + match = _props.match, + history = _props.history; if (samplernn.loading) { return (0, _preact.h)(_loading2.default, { progress: samplernn.progress }); @@ -5608,13 +5561,13 @@ var SampleRNNDatasets = function (_Component) { value: function renderGroups() { var _this2 = this; - var _props3 = this.props, - samplernn = _props3.samplernn, - folder = _props3.folder, - runner = _props3.runner, - onPickDataset = _props3.onPickDataset, - onPickFile = _props3.onPickFile, - datasetActions = _props3.datasetActions; + var _props2 = this.props, + samplernn = _props2.samplernn, + folder = _props2.folder, + runner = _props2.runner, + onPickDataset = _props2.onPickDataset, + onPickFile = _props2.onPickFile, + datasetActions = _props2.datasetActions; var _samplernn$data = samplernn.data, datasetLookup = _samplernn$data.datasetLookup, fileLookup = _samplernn$data.fileLookup; @@ -5697,6 +5650,20 @@ var SampleRNNDatasets = function (_Component) { }); return datasets; } + }, { + key: 'onDeleteFile', + value: function onDeleteFile(file) { + var yes = confirm('Are you sure you want to delete this file?'); + if (yes) { + console.log('delete: confirmed'); + if (this.props.onDeleteFile) { + console.log('calling custom deletefile function'); + this.props.onDeleteFile(file); + } else { + _actions2.default.file.destroy(file); + } + } + } }]); return SampleRNNDatasets; @@ -5705,14 +5672,13 @@ var SampleRNNDatasets = function (_Component) { var mapStateToProps = function mapStateToProps(state) { return { samplernn: state.module.samplernn, - runner: state.system.runner, - task: state.task + runner: state.system.runner }; }; var mapDispatchToProps = function mapDispatchToProps(dispatch, ownProps) { return { - actions: (0, _redux.bindActionCreators)(samplernnActions, dispatch) + samplernnActions: (0, _redux.bindActionCreators)(samplernnActions, dispatch) }; }; @@ -5720,9 +5686,9 @@ exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)( /***/ }), -/***/ "./app/client/modules/samplernn/samplernn.import.js": +/***/ "./app/client/modules/samplernn/samplernn.module.js": /*!**********************************************************!*\ - !*** ./app/client/modules/samplernn/samplernn.import.js ***! + !*** ./app/client/modules/samplernn/samplernn.module.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { @@ -5733,233 +5699,328 @@ exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)( Object.defineProperty(exports, "__esModule", { value: true }); +var samplernnModule = { + name: 'samplernn', + datatype: 'audio' +}; -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _preact = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.esm.js"); - -var _redux = __webpack_require__(/*! redux */ "./node_modules/redux/es/redux.js"); - -var _reactRedux = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); - -var _util = __webpack_require__(/*! ../../util */ "./app/client/util/index.js"); - -var util = _interopRequireWildcard(_util); - -var _samplernn = __webpack_require__(/*! ./samplernn.actions */ "./app/client/modules/samplernn/samplernn.actions.js"); - -var samplernnActions = _interopRequireWildcard(_samplernn); +exports.default = samplernnModule; -var _select = __webpack_require__(/*! ../../common/select.component */ "./app/client/common/select.component.js"); +/***/ }), -var _select2 = _interopRequireDefault(_select); +/***/ "./app/client/modules/samplernn/samplernn.reducer.js": +/*!***********************************************************!*\ + !*** ./app/client/modules/samplernn/samplernn.reducer.js ***! + \***********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { -var _textInput = __webpack_require__(/*! ../../common/textInput.component */ "./app/client/common/textInput.component.js"); +"use strict"; -var _textInput2 = _interopRequireDefault(_textInput); -var _button = __webpack_require__(/*! ../../common/button.component */ "./app/client/common/button.component.js"); +Object.defineProperty(exports, "__esModule", { + value: true +}); -var _button2 = _interopRequireDefault(_button); +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; -var _samplernn2 = __webpack_require__(/*! ./samplernn.datasets */ "./app/client/modules/samplernn/samplernn.datasets.js"); +var _types = __webpack_require__(/*! ../../types */ "./app/client/types.js"); -var _samplernn3 = _interopRequireDefault(_samplernn2); +var _types2 = _interopRequireDefault(_types); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -var samplernnModule = { - name: 'samplernn', - datatype: 'audio' +var samplernnInitialState = { + loading: true, + progress: { i: 0, n: 0 }, + error: null, + folders: [], + folder_id: 0, + data: null, + lossReport: null }; -var SampleRNNImport = function (_Component) { - _inherits(SampleRNNImport, _Component); +var samplernnReducer = function samplernnReducer() { + var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : samplernnInitialState; + var action = arguments[1]; - function SampleRNNImport() { - _classCallCheck(this, SampleRNNImport); + // console.log(action.type) + switch (action.type) { + case _types2.default.samplernn.init: + return _extends({}, state, { + loading: false, + data: action.data + }); - var _this = _possibleConstructorReturn(this, (SampleRNNImport.__proto__ || Object.getPrototypeOf(SampleRNNImport)).call(this)); + case _types2.default.folder.create: + if (action.data.module === 'samplernn') { + return _extends({}, state, { + loading: false, + data: { + folders: state.data.folders.concat([action.data.id]), + folderLookup: _extends({}, state.data.folderLookup, _defineProperty({}, action.data.id, action.data)) + }, + folder: _extends({}, action.data, { + datasets: [], + files: [] + }) + }); + } + return state; - _this.state = { - folder: 1, - import_action: 'Hotlink', - url_base: 'https://s3.amazonaws.com/i.asdf.us/bucky/data/4279/', - selected: {} - }; - return _this; - } + case _types2.default.file.create: + if (action.data.module === 'samplernn') { + console.log(action.data); + var dataset = void 0, + old_dataset = void 0, + folder = void 0, + old_folder = void 0; + var dataset_name = void 0; + if (action.data.dataset) { + dataset_name = action.data.dataset; + } else if (action.data.name) { + dataset_name = action.data.name.split('.')[0]; + } else if (action.data.url) { + dataset_name = action.data.url; + } else { + dataset_name = null; + } + if (dataset_name in state.data.datasetLookup) { + old_dataset = state.data.datasetLookup[dataset_name]; + dataset = _extends({}, old_dataset, { + input: action.data.generated ? old_dataset.input : [action.data.id].concat(old_dataset.input), + output: !action.data.generated ? old_dataset.output : [action.data.id].concat(old_dataset.output) + }); + } else { + console.log(action.data.created_at, action.data.date); + dataset = { + name: dataset_name, + date: action.data.created_at || action.data.date, + input: action.data.generated ? [] : [action.data.id], + checkpoints: [], + output: !action.data.generated ? [] : [action.data.id] + }; + } + old_folder = state.data.folderLookup[action.data.folder_id]; + folder = _extends({}, old_folder, { + datasets: old_folder.datasets.concat([dataset_name]), + files: old_folder.files.concat([action.data.id]) + }); + return _extends({}, state, { + loading: false, + data: _extends({}, state.data, { + files: state.data.files.concat([action.data.id]), + folderLookup: _extends({}, state.data.folderLookup, _defineProperty({}, action.data.folder_id, folder)), + fileLookup: _extends({}, state.data.fileLookup, _defineProperty({}, action.data.id, action.data)), + datasetLookup: _extends({}, state.data.datasetLookup, _defineProperty({}, dataset_name, dataset)) + }) + }); + } + return state; - _createClass(SampleRNNImport, [{ - key: 'render', - value: function render() { - var _this2 = this; + case _types2.default.file.update: + if (action.data.module === 'samplernn') { + var _extends6; - var datasets = [], - folder = void 0; - if (this.props.samplernn.data) { - datasets = (this.props.samplernn.data.folders || []).map(function (folder) { - return [folder.name, folder.id]; + var _old_dataset = void 0; + var new_dataset = state.data.datasetLookup[action.data.dataset]; + var old_file = state.data.fileLookup[action.data.id]; + var new_dataset_update = void 0; + if (old_file && action.data.dataset !== old_file.dataset) { + if (state.data.datasetLookup[old_file.dataset]) { + _old_dataset = state.data.datasetLookup[old_file.dataset]; + old_dataset_update = _extends({}, _old_dataset, { + input: _old_dataset.input.filter(function (id) { + return id !== action.data.id; + }), + output: _old_dataset.output.filter(function (id) { + return id !== action.data.id; + }) + }); + } + new_dataset_update = _extends({}, new_dataset, { + input: action.data.generated ? [] : [action.data.id], + output: !action.data.generated ? [] : [action.data.id] + }); + } + console.log('old_dataset', old_dataset_update.name); + console.log('new_dataset', new_dataset_update.name); + return _extends({}, state, { + loading: false, + data: _extends({}, state.data, { + datasetLookup: _old_dataset ? _extends({}, state.data.datasetLookup, (_extends6 = {}, _defineProperty(_extends6, _old_dataset.name, old_dataset_update), _defineProperty(_extends6, new_dataset.name, new_dataset_update), _extends6)) : new_dataset_update ? _extends({}, state.data.datasetLookup, _defineProperty({}, new_dataset.name, new_dataset_update)) : state.data.datasetLookup, + fileLookup: _extends({}, state.data.fileLookup, _defineProperty({}, action.data.id, action.data)) + }) }); - folder = this.props.samplernn.data.folderLookup.unsorted; } - return (0, _preact.h)( - 'div', - { className: 'app top' }, - (0, _preact.h)( - 'div', - { 'class': 'heading' }, - (0, _preact.h)( - 'h1', - null, - 'Import' - ) - ), - (0, _preact.h)( - 'div', - { 'class': 'params form row datasets' }, - (0, _preact.h)( - 'div', - { 'class': 'row dataset' }, - (0, _preact.h)('div', { 'class': 'col' }), - (0, _preact.h)('div', { 'class': 'col' }), - (0, _preact.h)('div', { 'class': 'col' }), - (0, _preact.h)( - 'div', - { 'class': 'col' }, - (0, _preact.h)( - 'h2', - null, - 'Import to dataset' - ), - (0, _preact.h)(_select2.default, { - title: 'Destination dataset', - options: datasets, - name: 'folder', - opt: this.state, - onChange: function onChange(name, value) { - return _this2.setState({ folder: value }); - } - }), - (0, _preact.h)(_select2.default, { - title: 'Import action', - options: ['Hotlink', 'Upload'], - name: 'import_action', - opt: this.state, - onChange: function onChange(name, value) { - return _this2.setState({ import_action: value }); - } - }), - (0, _preact.h)(_textInput2.default, { - title: 'Remote URL base', - value: this.state.url_base, - placeholder: 'http://', - onSave: function onSave(value) { - return _this2.setState({ url_base: value }); - } - }), - (0, _preact.h)( - _button2.default, - { - title: '', - onClick: function onClick() { - return _this2.doImport(); - } - }, - 'Import' - ) - ) - ) - ), - (0, _preact.h)(_samplernn3.default, { - id: 'unsorted', - folder: folder, - history: this.props.history, - onPickDataset: function onPickDataset(dataset) { - return _this2.toggle(dataset.name, _this2.state.selected[name]); - }, - beforeRow: function beforeRow(dataset) { - return _this2.beforeRow(dataset); - }, - afterRow: function afterRow(dataset) { - return _this2.afterRow(dataset); + return state; + + case _types2.default.file.destroy: + if (action.data.module === 'samplernn') { + // delete the key from fileLookup + var fileLookup = _extends({}, state.data.fileLookup); + var datasetLookup = _extends({}, state.data.datasetLookup); + var folderLookup = _extends({}, state.data.folderLookup); + var _old_file = fileLookup[action.data.id]; + if (!_old_file) return state; + var _old_dataset2 = state.data.datasetLookup[_old_file.dataset]; + var _dataset = void 0; + if (_old_dataset2) { + _dataset = _extends({}, _old_dataset2, { + input: _old_dataset2.input.filter(function (id) { + return id !== _old_file.id; + }), + output: _old_dataset2.output.filter(function (id) { + return id !== _old_file.id; + }) + }); + if (!_dataset.input.length && !_dataset.checkpoints.length && !_dataset.output.length) { + delete datasetLookup[_old_file.dataset]; + var _old_folder = folderLookup[_old_file.folder_id]; + folderLookup[_old_file.folder_id] = _extends({}, _old_folder, { + datasets: _old_folder.datasets.filter(function (name) { + return name !== _old_file.dataset; + }) + }); + } else { + console.log('dataset just needs sweeping'); + datasetLookup[_old_file.dataset] = _dataset; } - }) - ); - } - }, { - key: 'toggle', - value: function toggle(name) { - this.setState(_extends({}, this.state, { - selected: _extends({}, this.state.selected, _defineProperty({}, name, !this.state.selected[name])) - })); - } - }, { - key: 'beforeRow', - value: function beforeRow(dataset) { - // console.log(dataset) - } - }, { - key: 'afterRow', - value: function afterRow(dataset) { - var name = dataset.name; - return (0, _preact.h)( - 'div', - null, - (0, _preact.h)('input', { - type: 'checkbox', - value: name, - checked: !!this.state.selected[name] - }) - ); - } - }, { - key: 'doImport', - value: function doImport() { - var samplernn = this.props.samplernn; + } + delete fileLookup[_old_file.id]; - console.log(this.state); - this.props.actions.import_files(this.state, samplernn.data.datasetLookup, samplernn.data.fileLookup); - } - }]); + return _extends({}, state, { + loading: false, + data: _extends({}, state.data, { + folderLookup: folderLookup, + fileLookup: fileLookup, + datasetLookup: datasetLookup + }) + }); + } + return state; - return SampleRNNImport; -}(_preact.Component); + case _types2.default.samplernn.set_folder: + return _extends({}, state, { + folder_id: action.folder_id + }); -var mapStateToProps = function mapStateToProps(state) { - return { - samplernn: state.module.samplernn, - runner: state.system.runner, - task: state.task - }; + case _types2.default.samplernn.load_loss: + return _extends({}, state, { + lossReport: action.lossReport + }); + + case _types2.default.app.load_progress: + return _extends({}, state, { + progress: action.progress + }); + + default: + return state; + } }; -var mapDispatchToProps = function mapDispatchToProps(dispatch, ownProps) { - return { - actions: (0, _redux.bindActionCreators)(samplernnActions, dispatch) +exports.default = samplernnReducer; + +/***/ }), + +/***/ "./app/client/modules/samplernn/samplernn.tasks.js": +/*!*********************************************************!*\ + !*** ./app/client/modules/samplernn/samplernn.tasks.js ***! + \*********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.clear_cache_task = exports.log_task = exports.fetch_task = exports.train_task = undefined; + +var _v = __webpack_require__(/*! uuid/v1 */ "./node_modules/uuid/v1.js"); + +var _v2 = _interopRequireDefault(_v); + +var _socket = __webpack_require__(/*! ../../socket */ "./app/client/socket/index.js"); + +var _socket2 = _interopRequireDefault(_socket); + +var _types = __webpack_require__(/*! ../../types */ "./app/client/types.js"); + +var _types2 = _interopRequireDefault(_types); + +var _actions = __webpack_require__(/*! ../../actions */ "./app/client/actions.js"); + +var _actions2 = _interopRequireDefault(_actions); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var train_task = exports.train_task = function train_task(dataset, folder_id) { + var epochs = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1; + return function (dispatch) { + var task = { + module: 'samplernn', + activity: 'train', + dataset: dataset.name, + epochs: epochs, + opt: { + folder_id: folder_id, + sample_length: 44100 * 5, + n_samples: 6, + keep_old_checkpoints: false + } + }; + console.log(task); + return _actions2.default.queue.add_task(task); + }; +}; +var fetch_task = exports.fetch_task = function fetch_task(url, file_id, dataset) { + return function (dispatch) { + if (!url) return console.log('input file inaccessible (no url)'); + var task = { + module: 'samplernn', + activity: 'fetch', + dataset: dataset, + opt: { + url: url, + file_id: file_id, + dataset: dataset + } + }; + return _actions2.default.queue.add_task(task); + }; +}; +var log_task = exports.log_task = function log_task(dataset) { + return function (dispatch) { + var task = { + module: 'samplernn', + activity: 'log', + dataset: dataset.name + }; + return _actions2.default.queue.add_task(task); + }; +}; +var clear_cache_task = exports.clear_cache_task = function clear_cache_task(dataset) { + return function (dispatch) { + var task = { + module: 'samplernn', + activity: 'clear_cache', + dataset: dataset.name + }; + return _actions2.default.queue.add_task(task); }; }; - -exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(SampleRNNImport); /***/ }), -/***/ "./app/client/modules/samplernn/samplernn.loss.js": -/*!********************************************************!*\ - !*** ./app/client/modules/samplernn/samplernn.loss.js ***! - \********************************************************/ +/***/ "./app/client/modules/samplernn/views/samplernn.graph.js": +/*!***************************************************************!*\ + !*** ./app/client/modules/samplernn/views/samplernn.graph.js ***! + \***************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { @@ -5978,31 +6039,31 @@ var _redux = __webpack_require__(/*! redux */ "./node_modules/redux/es/redux.js" var _reactRedux = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); -var _util = __webpack_require__(/*! ../../util */ "./app/client/util/index.js"); +var _util = __webpack_require__(/*! ../../../util */ "./app/client/util/index.js"); -var _samplernn = __webpack_require__(/*! ./samplernn.actions */ "./app/client/modules/samplernn/samplernn.actions.js"); +var _samplernn = __webpack_require__(/*! ../samplernn.actions */ "./app/client/modules/samplernn/samplernn.actions.js"); var samplernnActions = _interopRequireWildcard(_samplernn); -var _group = __webpack_require__(/*! ../../common/group.component */ "./app/client/common/group.component.js"); +var _group = __webpack_require__(/*! ../../../common/group.component */ "./app/client/common/group.component.js"); var _group2 = _interopRequireDefault(_group); -var _slider = __webpack_require__(/*! ../../common/slider.component */ "./app/client/common/slider.component.js"); +var _slider = __webpack_require__(/*! ../../../common/slider.component */ "./app/client/common/slider.component.js"); var _slider2 = _interopRequireDefault(_slider); -var _select = __webpack_require__(/*! ../../common/select.component */ "./app/client/common/select.component.js"); +var _select = __webpack_require__(/*! ../../../common/select.component */ "./app/client/common/select.component.js"); var _select2 = _interopRequireDefault(_select); -var _button = __webpack_require__(/*! ../../common/button.component */ "./app/client/common/button.component.js"); +var _button = __webpack_require__(/*! ../../../common/button.component */ "./app/client/common/button.component.js"); var _button2 = _interopRequireDefault(_button); -var _fileList = __webpack_require__(/*! ../../common/fileList.component */ "./app/client/common/fileList.component.js"); +var _fileList = __webpack_require__(/*! ../../../common/fileList.component */ "./app/client/common/fileList.component.js"); -var _textInput = __webpack_require__(/*! ../../common/textInput.component */ "./app/client/common/textInput.component.js"); +var _textInput = __webpack_require__(/*! ../../../common/textInput.component */ "./app/client/common/textInput.component.js"); var _textInput2 = _interopRequireDefault(_textInput); @@ -6016,19 +6077,19 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } -var SampleRNNLoss = function (_Component) { - _inherits(SampleRNNLoss, _Component); +var SampleRNNGraph = function (_Component) { + _inherits(SampleRNNGraph, _Component); - function SampleRNNLoss(props) { - _classCallCheck(this, SampleRNNLoss); + function SampleRNNGraph(props) { + _classCallCheck(this, SampleRNNGraph); - var _this = _possibleConstructorReturn(this, (SampleRNNLoss.__proto__ || Object.getPrototypeOf(SampleRNNLoss)).call(this)); + var _this = _possibleConstructorReturn(this, (SampleRNNGraph.__proto__ || Object.getPrototypeOf(SampleRNNGraph)).call(this)); props.actions.load_loss(); return _this; } - _createClass(SampleRNNLoss, [{ + _createClass(SampleRNNGraph, [{ key: 'render', value: function render() { var _this2 = this; @@ -6043,7 +6104,7 @@ var SampleRNNLoss = function (_Component) { (0, _preact.h)( 'h3', null, - 'SampleRNN Loss' + 'SampleRNN Loss Graph' ), (0, _preact.h)('canvas', { ref: function ref(_ref) { return _this2.refs['canvas'] = _ref; @@ -6176,7 +6237,7 @@ var SampleRNNLoss = function (_Component) { } }]); - return SampleRNNLoss; + return SampleRNNGraph; }(_preact.Component); var mapStateToProps = function mapStateToProps(state) { @@ -6191,14 +6252,14 @@ var mapDispatchToProps = function mapDispatchToProps(dispatch, ownProps) { }; }; -exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(SampleRNNLoss); +exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(SampleRNNGraph); /***/ }), -/***/ "./app/client/modules/samplernn/samplernn.module.js": -/*!**********************************************************!*\ - !*** ./app/client/modules/samplernn/samplernn.module.js ***! - \**********************************************************/ +/***/ "./app/client/modules/samplernn/views/samplernn.import.js": +/*!****************************************************************!*\ + !*** ./app/client/modules/samplernn/views/samplernn.import.js ***! + \****************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { @@ -6208,28 +6269,8 @@ exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)( Object.defineProperty(exports, "__esModule", { value: true }); -var samplernnModule = { - name: 'samplernn', - datatype: 'audio' -}; -exports.default = samplernnModule; - -/***/ }), - -/***/ "./app/client/modules/samplernn/samplernn.new.js": -/*!*******************************************************!*\ - !*** ./app/client/modules/samplernn/samplernn.new.js ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); @@ -6239,25 +6280,27 @@ var _redux = __webpack_require__(/*! redux */ "./node_modules/redux/es/redux.js" var _reactRedux = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); -var _util = __webpack_require__(/*! ../../util */ "./app/client/util/index.js"); +var _util = __webpack_require__(/*! ../../../util */ "./app/client/util/index.js"); var util = _interopRequireWildcard(_util); -var _samplernn = __webpack_require__(/*! ./samplernn.actions */ "./app/client/modules/samplernn/samplernn.actions.js"); +var _samplernn = __webpack_require__(/*! ../samplernn.actions */ "./app/client/modules/samplernn/samplernn.actions.js"); var samplernnActions = _interopRequireWildcard(_samplernn); -var _dataset = __webpack_require__(/*! ../../dataset/dataset.form */ "./app/client/dataset/dataset.form.js"); +var _select = __webpack_require__(/*! ../../../common/select.component */ "./app/client/common/select.component.js"); -var _dataset2 = _interopRequireDefault(_dataset); +var _select2 = _interopRequireDefault(_select); -var _dataset3 = __webpack_require__(/*! ../../dataset/dataset.new */ "./app/client/dataset/dataset.new.js"); +var _textInput = __webpack_require__(/*! ../../../common/textInput.component */ "./app/client/common/textInput.component.js"); -var _dataset4 = _interopRequireDefault(_dataset3); +var _textInput2 = _interopRequireDefault(_textInput); -var _fileList = __webpack_require__(/*! ../../common/fileList.component */ "./app/client/common/fileList.component.js"); +var _button = __webpack_require__(/*! ../../../common/button.component */ "./app/client/common/button.component.js"); -var _samplernn2 = __webpack_require__(/*! ./samplernn.module */ "./app/client/modules/samplernn/samplernn.module.js"); +var _button2 = _interopRequireDefault(_button); + +var _samplernn2 = __webpack_require__(/*! ../samplernn.datasets */ "./app/client/modules/samplernn/samplernn.datasets.js"); var _samplernn3 = _interopRequireDefault(_samplernn2); @@ -6265,40 +6308,195 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } -var SampleRNNNew = function (_Component) { - _inherits(SampleRNNNew, _Component); +var samplernnModule = { + name: 'samplernn', + datatype: 'audio' +}; - function SampleRNNNew(props) { - _classCallCheck(this, SampleRNNNew); +var SampleRNNImport = function (_Component) { + _inherits(SampleRNNImport, _Component); - return _possibleConstructorReturn(this, (SampleRNNNew.__proto__ || Object.getPrototypeOf(SampleRNNNew)).call(this, props)); + function SampleRNNImport() { + _classCallCheck(this, SampleRNNImport); + + var _this = _possibleConstructorReturn(this, (SampleRNNImport.__proto__ || Object.getPrototypeOf(SampleRNNImport)).call(this)); + + _this.state = { + folder: 1, + import_action: 'Hotlink', + url_base: 'https://s3.amazonaws.com/i.asdf.us/bucky/data/4279/', + selected: {} + }; + return _this; } - _createClass(SampleRNNNew, [{ + _createClass(SampleRNNImport, [{ + key: 'componentWillMount', + value: function componentWillMount() { + var id = this.props.match.params.id || localStorage.getItem('samplernn.last_id'); + console.log('load dataset:', id); + var _props = this.props, + match = _props.match, + samplernn = _props.samplernn, + samplernnActions = _props.samplernnActions; + + if (id === 'new') return; + if (id) { + if (parseInt(id)) localStorage.setItem('samplernn.last_id', id); + if (!samplernn.folder || samplernn.folder.id !== id) { + samplernnActions.load_directories(id); + } + } + } + }, { key: 'render', value: function render() { - var history = this.props.history; + var _this2 = this; + var datasets = [], + folder = void 0; + if (this.props.samplernn.data) { + datasets = (this.props.samplernn.data.folders || []).map(function (folder) { + return [folder.name, folder.id]; + }); + folder = this.props.samplernn.data.folderLookup.unsorted; + } + return (0, _preact.h)( + 'div', + { className: 'app top' }, + (0, _preact.h)( + 'div', + { 'class': 'heading' }, + (0, _preact.h)( + 'h1', + null, + 'Import' + ) + ), + (0, _preact.h)( + 'div', + { 'class': 'params form row datasets' }, + (0, _preact.h)( + 'div', + { 'class': 'row dataset' }, + (0, _preact.h)('div', { 'class': 'col' }), + (0, _preact.h)('div', { 'class': 'col' }), + (0, _preact.h)('div', { 'class': 'col' }), + (0, _preact.h)( + 'div', + { 'class': 'col' }, + (0, _preact.h)( + 'h2', + null, + 'Import to dataset' + ), + (0, _preact.h)(_select2.default, { + title: 'Destination dataset', + options: datasets, + name: 'folder', + opt: this.state, + onChange: function onChange(name, value) { + return _this2.setState({ folder: value }); + } + }), + (0, _preact.h)(_select2.default, { + title: 'Import action', + options: ['Hotlink', 'Upload'], + name: 'import_action', + opt: this.state, + onChange: function onChange(name, value) { + return _this2.setState({ import_action: value }); + } + }), + (0, _preact.h)(_textInput2.default, { + title: 'Remote URL base', + value: this.state.url_base, + placeholder: 'http://', + onSave: function onSave(value) { + return _this2.setState({ url_base: value }); + } + }), + (0, _preact.h)( + _button2.default, + { + title: '', + onClick: function onClick() { + return _this2.doImport(); + } + }, + 'Import' + ) + ) + ) + ), + (0, _preact.h)(_samplernn3.default, { + id: 'unsorted', + folder: folder, + history: this.props.history, + onPickDataset: function onPickDataset(dataset) { + return _this2.toggle(dataset.name, _this2.state.selected[name]); + }, + beforeRow: function beforeRow(dataset) { + return _this2.beforeRow(dataset); + }, + afterRow: function afterRow(dataset) { + return _this2.afterRow(dataset); + } + }) + ); + } + }, { + key: 'toggle', + value: function toggle(name) { + this.setState(_extends({}, this.state, { + selected: _extends({}, this.state.selected, _defineProperty({}, name, !this.state.selected[name])) + })); + } + }, { + key: 'beforeRow', + value: function beforeRow(dataset) { + // console.log(dataset) + } + }, { + key: 'afterRow', + value: function afterRow(dataset) { + var name = dataset.name; return (0, _preact.h)( 'div', - { 'class': 'app samplernn' }, - (0, _preact.h)(_dataset4.default, { module: _samplernn3.default, history: history }) + null, + (0, _preact.h)('input', { + type: 'checkbox', + value: name, + checked: !!this.state.selected[name] + }) ); } + }, { + key: 'doImport', + value: function doImport() { + var samplernn = this.props.samplernn; + + console.log(this.state); + this.props.actions.import_files(this.state, samplernn.data.datasetLookup, samplernn.data.fileLookup); + } }]); - return SampleRNNNew; + return SampleRNNImport; }(_preact.Component); var mapStateToProps = function mapStateToProps(state) { return { - samplernn: state.module.samplernn + samplernn: state.module.samplernn, + runner: state.system.runner, + task: state.task }; }; @@ -6308,14 +6506,14 @@ var mapDispatchToProps = function mapDispatchToProps(dispatch, ownProps) { }; }; -exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(SampleRNNNew); +exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(SampleRNNImport); /***/ }), -/***/ "./app/client/modules/samplernn/samplernn.reducer.js": -/*!***********************************************************!*\ - !*** ./app/client/modules/samplernn/samplernn.reducer.js ***! - \***********************************************************/ +/***/ "./app/client/modules/samplernn/views/samplernn.new.js": +/*!*************************************************************!*\ + !*** ./app/client/modules/samplernn/views/samplernn.new.js ***! + \*************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { @@ -6326,214 +6524,91 @@ Object.defineProperty(exports, "__esModule", { value: true }); -var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - -var _types = __webpack_require__(/*! ../../types */ "./app/client/types.js"); - -var _types2 = _interopRequireDefault(_types); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -var samplernnInitialState = { - loading: true, - progress: { i: 0, n: 0 }, - error: null, - folders: [], - folder_id: 0, - data: null, - lossReport: null -}; - -var samplernnReducer = function samplernnReducer() { - var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : samplernnInitialState; - var action = arguments[1]; - - // console.log(action.type) - switch (action.type) { - case _types2.default.samplernn.init: - return _extends({}, state, { - loading: false, - data: action.data - }); - - case _types2.default.folder.create: - if (action.data.module === 'samplernn') { - return _extends({}, state, { - loading: false, - data: { - folders: state.data.folders.concat([action.data.id]), - folderLookup: _extends({}, state.data.folderLookup, _defineProperty({}, action.data.id, action.data)) - }, - folder: _extends({}, action.data, { - datasets: [], - files: [] - }) - }); - } - return state; - - case _types2.default.file.create: - if (action.data.module === 'samplernn') { - console.log(action.data); - var dataset = void 0, - old_dataset = void 0, - folder = void 0, - old_folder = void 0; - var dataset_name = void 0; - if (action.data.dataset) { - dataset_name = action.data.dataset; - } else if (action.data.name) { - dataset_name = action.data.name.split('.')[0]; - } else if (action.data.url) { - dataset_name = action.data.url; - } else { - dataset_name = null; - } - if (dataset_name in state.data.datasetLookup) { - old_dataset = state.data.datasetLookup[dataset_name]; - dataset = _extends({}, old_dataset, { - input: action.data.generated ? old_dataset.input : [action.data.id].concat(old_dataset.input), - output: !action.data.generated ? old_dataset.output : [action.data.id].concat(old_dataset.output) - }); - } else { - console.log(action.data.created_at, action.data.date); - dataset = { - name: dataset_name, - date: action.data.created_at || action.data.date, - input: action.data.generated ? [] : [action.data.id], - checkpoints: [], - output: !action.data.generated ? [] : [action.data.id] - }; - } - old_folder = state.data.folderLookup[action.data.folder_id]; - folder = _extends({}, old_folder, { - datasets: old_folder.datasets.concat([dataset_name]), - files: old_folder.files.concat([action.data.id]) - }); - return _extends({}, state, { - loading: false, - data: _extends({}, state.data, { - files: state.data.files.concat([action.data.id]), - folderLookup: _extends({}, state.data.folderLookup, _defineProperty({}, action.data.folder_id, folder)), - fileLookup: _extends({}, state.data.fileLookup, _defineProperty({}, action.data.id, action.data)), - datasetLookup: _extends({}, state.data.datasetLookup, _defineProperty({}, dataset_name, dataset)) - }) - }); - } - return state; - - case _types2.default.file.update: - if (action.data.module === 'samplernn') { - var _extends6; +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - var _old_dataset = void 0; - var new_dataset = state.data.datasetLookup[action.data.dataset]; - var old_file = state.data.fileLookup[action.data.id]; - var new_dataset_update = void 0; - if (old_file && action.data.dataset !== old_file.dataset) { - if (state.data.datasetLookup[old_file.dataset]) { - _old_dataset = state.data.datasetLookup[old_file.dataset]; - old_dataset_update = _extends({}, _old_dataset, { - input: _old_dataset.input.filter(function (id) { - return id !== action.data.id; - }), - output: _old_dataset.output.filter(function (id) { - return id !== action.data.id; - }) - }); - } - new_dataset_update = _extends({}, new_dataset, { - input: action.data.generated ? [] : [action.data.id], - output: !action.data.generated ? [] : [action.data.id] - }); - } - console.log('old_dataset', old_dataset_update.name); - console.log('new_dataset', new_dataset_update.name); - return _extends({}, state, { - loading: false, - data: _extends({}, state.data, { - datasetLookup: _old_dataset ? _extends({}, state.data.datasetLookup, (_extends6 = {}, _defineProperty(_extends6, _old_dataset.name, old_dataset_update), _defineProperty(_extends6, new_dataset.name, new_dataset_update), _extends6)) : new_dataset_update ? _extends({}, state.data.datasetLookup, _defineProperty({}, new_dataset.name, new_dataset_update)) : state.data.datasetLookup, - fileLookup: _extends({}, state.data.fileLookup, _defineProperty({}, action.data.id, action.data)) - }) - }); - } - return state; +var _preact = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.esm.js"); - case _types2.default.file.destroy: - if (action.data.module === 'samplernn') { - // delete the key from fileLookup - var fileLookup = _extends({}, state.data.fileLookup); - var datasetLookup = _extends({}, state.data.datasetLookup); - var folderLookup = _extends({}, state.data.folderLookup); - var _old_file = fileLookup[action.data.id]; - if (!_old_file) return state; - var _old_dataset2 = state.data.datasetLookup[_old_file.dataset]; - var _dataset = void 0; - if (_old_dataset2) { - _dataset = _extends({}, _old_dataset2, { - input: _old_dataset2.input.filter(function (id) { - return id !== _old_file.id; - }), - output: _old_dataset2.output.filter(function (id) { - return id !== _old_file.id; - }) - }); - if (!_dataset.input.length && !_dataset.checkpoints.length && !_dataset.output.length) { - delete datasetLookup[_old_file.dataset]; - var _old_folder = folderLookup[_old_file.folder_id]; - folderLookup[_old_file.folder_id] = _extends({}, _old_folder, { - datasets: _old_folder.datasets.filter(function (name) { - return name !== _old_file.dataset; - }) - }); - } else { - console.log('dataset just needs sweeping'); - datasetLookup[_old_file.dataset] = _dataset; - } - } - delete fileLookup[_old_file.id]; +var _redux = __webpack_require__(/*! redux */ "./node_modules/redux/es/redux.js"); - return _extends({}, state, { - loading: false, - data: _extends({}, state.data, { - folderLookup: folderLookup, - fileLookup: fileLookup, - datasetLookup: datasetLookup - }) - }); - } - return state; +var _reactRedux = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); - case _types2.default.samplernn.set_folder: - return _extends({}, state, { - folder_id: action.folder_id - }); +var _util = __webpack_require__(/*! ../../../util */ "./app/client/util/index.js"); - case _types2.default.samplernn.load_loss: - return _extends({}, state, { - lossReport: action.lossReport - }); +var util = _interopRequireWildcard(_util); - case _types2.default.app.load_progress: - return _extends({}, state, { - progress: action.progress - }); +var _samplernn = __webpack_require__(/*! ../samplernn.actions */ "./app/client/modules/samplernn/samplernn.actions.js"); - default: - return state; +var samplernnActions = _interopRequireWildcard(_samplernn); + +var _dataset = __webpack_require__(/*! ../../../dataset/dataset.form */ "./app/client/dataset/dataset.form.js"); + +var _dataset2 = _interopRequireDefault(_dataset); + +var _dataset3 = __webpack_require__(/*! ../../../dataset/dataset.new */ "./app/client/dataset/dataset.new.js"); + +var _dataset4 = _interopRequireDefault(_dataset3); + +var _fileList = __webpack_require__(/*! ../../../common/fileList.component */ "./app/client/common/fileList.component.js"); + +var _samplernn2 = __webpack_require__(/*! ../samplernn.module */ "./app/client/modules/samplernn/samplernn.module.js"); + +var _samplernn3 = _interopRequireDefault(_samplernn2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +var SampleRNNNew = function (_Component) { + _inherits(SampleRNNNew, _Component); + + function SampleRNNNew(props) { + _classCallCheck(this, SampleRNNNew); + + return _possibleConstructorReturn(this, (SampleRNNNew.__proto__ || Object.getPrototypeOf(SampleRNNNew)).call(this, props)); } + + _createClass(SampleRNNNew, [{ + key: 'render', + value: function render() { + var history = this.props.history; + + return (0, _preact.h)( + 'div', + { 'class': 'app samplernn' }, + (0, _preact.h)(_dataset4.default, { module: _samplernn3.default, history: history }) + ); + } + }]); + + return SampleRNNNew; +}(_preact.Component); + +var mapStateToProps = function mapStateToProps(state) { + return { + samplernn: state.module.samplernn + }; }; -exports.default = samplernnReducer; +var mapDispatchToProps = function mapDispatchToProps(dispatch, ownProps) { + return { + actions: (0, _redux.bindActionCreators)(samplernnActions, dispatch) + }; +}; + +exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(SampleRNNNew); /***/ }), -/***/ "./app/client/modules/samplernn/samplernn.results.js": -/*!***********************************************************!*\ - !*** ./app/client/modules/samplernn/samplernn.results.js ***! - \***********************************************************/ +/***/ "./app/client/modules/samplernn/views/samplernn.results.js": +/*!*****************************************************************!*\ + !*** ./app/client/modules/samplernn/views/samplernn.results.js ***! + \*****************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { @@ -6554,23 +6629,23 @@ var _reactRouterDom = __webpack_require__(/*! react-router-dom */ "./node_module var _reactRedux = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); -var _util = __webpack_require__(/*! ../../util */ "./app/client/util/index.js"); +var _util = __webpack_require__(/*! ../../../util */ "./app/client/util/index.js"); var util = _interopRequireWildcard(_util); -var _samplernn = __webpack_require__(/*! ./samplernn.actions */ "./app/client/modules/samplernn/samplernn.actions.js"); +var _samplernn = __webpack_require__(/*! ../samplernn.actions */ "./app/client/modules/samplernn/samplernn.actions.js"); var samplernnActions = _interopRequireWildcard(_samplernn); -var _audioPlayer = __webpack_require__(/*! ../../common/audioPlayer/audioPlayer.actions */ "./app/client/common/audioPlayer/audioPlayer.actions.js"); +var _audioPlayer = __webpack_require__(/*! ../../../common/audioPlayer/audioPlayer.actions */ "./app/client/common/audioPlayer/audioPlayer.actions.js"); var audioPlayerActions = _interopRequireWildcard(_audioPlayer); -var _loading = __webpack_require__(/*! ../../common/loading.component */ "./app/client/common/loading.component.js"); +var _loading = __webpack_require__(/*! ../../../common/loading.component */ "./app/client/common/loading.component.js"); var _loading2 = _interopRequireDefault(_loading); -var _fileList = __webpack_require__(/*! ../../common/fileList.component */ "./app/client/common/fileList.component.js"); +var _fileList = __webpack_require__(/*! ../../../common/fileList.component */ "./app/client/common/fileList.component.js"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -6708,10 +6783,10 @@ exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)( /***/ }), -/***/ "./app/client/modules/samplernn/samplernn.show.js": -/*!********************************************************!*\ - !*** ./app/client/modules/samplernn/samplernn.show.js ***! - \********************************************************/ +/***/ "./app/client/modules/samplernn/views/samplernn.show.js": +/*!**************************************************************!*\ + !*** ./app/client/modules/samplernn/views/samplernn.show.js ***! + \**************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { @@ -6730,45 +6805,45 @@ var _redux = __webpack_require__(/*! redux */ "./node_modules/redux/es/redux.js" var _reactRedux = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"); -var _util = __webpack_require__(/*! ../../util */ "./app/client/util/index.js"); +var _util = __webpack_require__(/*! ../../../util */ "./app/client/util/index.js"); var util = _interopRequireWildcard(_util); -var _samplernn = __webpack_require__(/*! ./samplernn.actions */ "./app/client/modules/samplernn/samplernn.actions.js"); +var _samplernn = __webpack_require__(/*! ../samplernn.actions */ "./app/client/modules/samplernn/samplernn.actions.js"); var samplernnActions = _interopRequireWildcard(_samplernn); -var _samplernn2 = __webpack_require__(/*! ./samplernn.tasks */ "./app/client/modules/samplernn/samplernn.tasks.js"); +var _samplernn2 = __webpack_require__(/*! ../samplernn.tasks */ "./app/client/modules/samplernn/samplernn.tasks.js"); var samplernnTasks = _interopRequireWildcard(_samplernn2); -var _audioPlayer = __webpack_require__(/*! ../../common/audioPlayer/audioPlayer.actions */ "./app/client/common/audioPlayer/audioPlayer.actions.js"); +var _audioPlayer = __webpack_require__(/*! ../../../common/audioPlayer/audioPlayer.actions */ "./app/client/common/audioPlayer/audioPlayer.actions.js"); var audioPlayerActions = _interopRequireWildcard(_audioPlayer); -var _loading = __webpack_require__(/*! ../../common/loading.component */ "./app/client/common/loading.component.js"); +var _loading = __webpack_require__(/*! ../../../common/loading.component */ "./app/client/common/loading.component.js"); var _loading2 = _interopRequireDefault(_loading); -var _dataset = __webpack_require__(/*! ../../dataset/dataset.form */ "./app/client/dataset/dataset.form.js"); +var _dataset = __webpack_require__(/*! ../../../dataset/dataset.form */ "./app/client/dataset/dataset.form.js"); var _dataset2 = _interopRequireDefault(_dataset); -var _dataset3 = __webpack_require__(/*! ../../dataset/dataset.new */ "./app/client/dataset/dataset.new.js"); +var _dataset3 = __webpack_require__(/*! ../../../dataset/dataset.new */ "./app/client/dataset/dataset.new.js"); var _dataset4 = _interopRequireDefault(_dataset3); -var _dataset5 = __webpack_require__(/*! ../../dataset/dataset.status */ "./app/client/dataset/dataset.status.js"); +var _dataset5 = __webpack_require__(/*! ../../../dataset/dataset.status */ "./app/client/dataset/dataset.status.js"); var _dataset6 = _interopRequireDefault(_dataset5); -var _fileList = __webpack_require__(/*! ../../common/fileList.component */ "./app/client/common/fileList.component.js"); +var _fileList = __webpack_require__(/*! ../../../common/fileList.component */ "./app/client/common/fileList.component.js"); -var _samplernn3 = __webpack_require__(/*! ./samplernn.datasets */ "./app/client/modules/samplernn/samplernn.datasets.js"); +var _samplernn3 = __webpack_require__(/*! ../samplernn.datasets */ "./app/client/modules/samplernn/samplernn.datasets.js"); var _samplernn4 = _interopRequireDefault(_samplernn3); -var _samplernn5 = __webpack_require__(/*! ./samplernn.module */ "./app/client/modules/samplernn/samplernn.module.js"); +var _samplernn5 = __webpack_require__(/*! ../samplernn.module */ "./app/client/modules/samplernn/samplernn.module.js"); var _samplernn6 = _interopRequireDefault(_samplernn5); @@ -6795,14 +6870,32 @@ var SampleRNNShow = function (_Component) { } _createClass(SampleRNNShow, [{ + key: 'componentWillMount', + value: function componentWillMount() { + var id = this.props.match.params.id || localStorage.getItem('samplernn.last_id'); + console.log('load dataset:', id); + var _props = this.props, + match = _props.match, + samplernn = _props.samplernn, + actions = _props.actions; + + if (id === 'new') return; + if (id) { + if (parseInt(id)) localStorage.setItem('samplernn.last_id', id); + if (!samplernn.folder || samplernn.folder.id !== id) { + actions.load_directories(id); + } + } + } + }, { key: 'render', value: function render() { var _this2 = this; - var _props = this.props, - samplernn = _props.samplernn, - match = _props.match, - history = _props.history; + var _props2 = this.props, + samplernn = _props2.samplernn, + match = _props2.match, + history = _props2.history; var _ref = samplernn.data || {}, folderLookup = _ref.folderLookup; @@ -6832,7 +6925,7 @@ var SampleRNNShow = function (_Component) { canUpload: true, canAddURL: true }), (0, _preact.h)(_samplernn4.default, { - id: this.props.match.params.id || localStorage.getItem('samplernn.last_id'), + id: samplernn.folder_id, folder: folder, history: history, onPickFile: function onPickFile(file, e) { @@ -6850,11 +6943,11 @@ var SampleRNNShow = function (_Component) { value: function datasetActions(dataset) { var isFetching = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var isProcessing = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - var _props2 = this.props, - samplernn = _props2.samplernn, - remote = _props2.remote; + var _props3 = this.props, + samplernn = _props3.samplernn, + remote = _props3.remote; - var input = fileLookup[dataset.input[0]]; + var input = samplernn.data.fileLookup[dataset.input[0]]; if (!input) return null; if (input.name && input.name.match(/(gif|jpe?g|png)$/i)) return null; return (0, _preact.h)( @@ -6956,97 +7049,6 @@ exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)( /***/ }), -/***/ "./app/client/modules/samplernn/samplernn.tasks.js": -/*!*********************************************************!*\ - !*** ./app/client/modules/samplernn/samplernn.tasks.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.clear_cache_task = exports.log_task = exports.fetch_task = exports.train_task = undefined; - -var _v = __webpack_require__(/*! uuid/v1 */ "./node_modules/uuid/v1.js"); - -var _v2 = _interopRequireDefault(_v); - -var _socket = __webpack_require__(/*! ../../socket */ "./app/client/socket/index.js"); - -var _socket2 = _interopRequireDefault(_socket); - -var _types = __webpack_require__(/*! ../../types */ "./app/client/types.js"); - -var _types2 = _interopRequireDefault(_types); - -var _actions = __webpack_require__(/*! ../../actions */ "./app/client/actions.js"); - -var _actions2 = _interopRequireDefault(_actions); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var train_task = exports.train_task = function train_task(dataset, folder_id) { - var epochs = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1; - return function (dispatch) { - var task = { - module: 'samplernn', - activity: 'train', - dataset: dataset.name, - epochs: epochs, - opt: { - folder_id: folder_id, - sample_length: 44100 * 5, - n_samples: 6, - keep_old_checkpoints: false - } - }; - console.log(task); - return _actions2.default.queue.add_task(task); - }; -}; -var fetch_task = exports.fetch_task = function fetch_task(url, file_id, dataset) { - return function (dispatch) { - if (!url) return console.log('input file inaccessible (no url)'); - var task = { - module: 'samplernn', - activity: 'fetch', - dataset: dataset, - opt: { - url: url, - file_id: file_id, - dataset: dataset - } - }; - return _actions2.default.queue.add_task(task); - }; -}; -var log_task = exports.log_task = function log_task(dataset) { - return function (dispatch) { - var task = { - module: 'samplernn', - activity: 'log', - dataset: dataset.name - }; - return _actions2.default.queue.add_task(task); - }; -}; -var clear_cache_task = exports.clear_cache_task = function clear_cache_task(dataset) { - return function (dispatch) { - var task = { - module: 'samplernn', - activity: 'clear_cache', - dataset: dataset.name - }; - return _actions2.default.queue.add_task(task); - }; -}; - -/***/ }), - /***/ "./app/client/queue/queue.actions.js": /*!*******************************************!*\ !*** ./app/client/queue/queue.actions.js ***! diff --git a/public/bundle.js.map b/public/bundle.js.map index 53133a2..0fe580c 100644 --- a/public/bundle.js.map +++ b/public/bundle.js.map @@ -1 +1 @@ -{"version":3,"file":"bundle.js","sources":["webpack:///webpack/bootstrap","webpack:///./app/client/actions.js","webpack:///./app/client/api/crud.actions.js","webpack:///./app/client/api/crud.fetch.js","webpack:///./app/client/api/crud.types.js","webpack:///./app/client/api/crud.upload.js","webpack:///./app/client/api/index.js","webpack:///./app/client/api/parser.js","webpack:///./app/client/common/audioPlayer/audioPlayer.actions.js","webpack:///./app/client/common/audioPlayer/audioPlayer.component.js","webpack:///./app/client/common/audioPlayer/audioPlayer.reducer.js","webpack:///./app/client/common/button.component.js","webpack:///./app/client/common/fileList.component.js","webpack:///./app/client/common/fileUpload.component.js","webpack:///./app/client/common/gallery.component.js","webpack:///./app/client/common/group.component.js","webpack:///./app/client/common/header.component.js","webpack:///./app/client/common/loading.component.js","webpack:///./app/client/common/param.component.js","webpack:///./app/client/common/paramGroup.component.js","webpack:///./app/client/common/player.component.js","webpack:///./app/client/common/progress.component.js","webpack:///./app/client/common/select.component.js","webpack:///./app/client/common/slider.component.js","webpack:///./app/client/common/textInput.component.js","webpack:///./app/client/dashboard/dashboard.actions.js","webpack:///./app/client/dashboard/dashboard.component.js","webpack:///./app/client/dashboard/dashboard.reducer.js","webpack:///./app/client/dashboard/dashboardheader.component.js","webpack:///./app/client/dashboard/tasklist.component.js","webpack:///./app/client/dataset/dataset.actions.js","webpack:///./app/client/dataset/dataset.form.js","webpack:///./app/client/dataset/dataset.new.js","webpack:///./app/client/dataset/dataset.reducer.js","webpack:///./app/client/dataset/dataset.status.js","webpack:///./app/client/index.jsx","webpack:///./app/client/live/live.actions.js","webpack:///./app/client/live/live.reducer.js","webpack:///./app/client/live/player.js","webpack:///./app/client/live/whammy.js","webpack:///./app/client/modules/index.js","webpack:///./app/client/modules/module.reducer.js","webpack:///./app/client/modules/pix2pix/index.js","webpack:///./app/client/modules/pix2pix/pix2pix.live.js","webpack:///./app/client/modules/pix2pix/pix2pix.reducer.js","webpack:///./app/client/modules/pix2wav/index.js","webpack:///./app/client/modules/pix2wav/pix2wav.reducer.js","webpack:///./app/client/modules/samplernn/index.js","webpack:///./app/client/modules/samplernn/samplernn.actions.js","webpack:///./app/client/modules/samplernn/samplernn.datasets.js","webpack:///./app/client/modules/samplernn/samplernn.import.js","webpack:///./app/client/modules/samplernn/samplernn.loss.js","webpack:///./app/client/modules/samplernn/samplernn.module.js","webpack:///./app/client/modules/samplernn/samplernn.new.js","webpack:///./app/client/modules/samplernn/samplernn.reducer.js","webpack:///./app/client/modules/samplernn/samplernn.results.js","webpack:///./app/client/modules/samplernn/samplernn.show.js","webpack:///./app/client/modules/samplernn/samplernn.tasks.js","webpack:///./app/client/queue/queue.actions.js","webpack:///./app/client/queue/queue.reducer.js","webpack:///./app/client/socket/index.js","webpack:///./app/client/socket/socket.actions.js","webpack:///./app/client/socket/socket.api.js","webpack:///./app/client/socket/socket.connection.js","webpack:///./app/client/socket/socket.live.js","webpack:///./app/client/socket/socket.system.js","webpack:///./app/client/socket/socket.task.js","webpack:///./app/client/store.js","webpack:///./app/client/system/system.actions.js","webpack:///./app/client/system/system.component.js","webpack:///./app/client/system/system.reducer.js","webpack:///./app/client/types.js","webpack:///./app/client/util/index.js","webpack:///./app/client/util/sort.js","webpack:///./node_modules/fbjs/lib/emptyFunction.js","webpack:///./node_modules/fbjs/lib/invariant.js","webpack:///./node_modules/fbjs/lib/warning.js","webpack:///./node_modules/fetch-jsonp/build/fetch-jsonp.js","webpack:///./node_modules/file-saver/FileSaver.js","webpack:///./node_modules/history/DOMUtils.js","webpack:///./node_modules/history/LocationUtils.js","webpack:///./node_modules/history/PathUtils.js","webpack:///./node_modules/history/createBrowserHistory.js","webpack:///./node_modules/history/createHashHistory.js","webpack:///./node_modules/history/createMemoryHistory.js","webpack:///./node_modules/history/createTransitionManager.js","webpack:///./node_modules/history/es/DOMUtils.js","webpack:///./node_modules/history/es/LocationUtils.js","webpack:///./node_modules/history/es/PathUtils.js","webpack:///./node_modules/history/es/createBrowserHistory.js","webpack:///./node_modules/history/es/createHashHistory.js","webpack:///./node_modules/history/es/createMemoryHistory.js","webpack:///./node_modules/history/es/createTransitionManager.js","webpack:///./node_modules/history/es/index.js","webpack:///./node_modules/hoist-non-react-statics/index.js","webpack:///./node_modules/invariant/browser.js","webpack:///./node_modules/lodash-es/_Symbol.js","webpack:///./node_modules/lodash-es/_baseGetTag.js","webpack:///./node_modules/lodash-es/_freeGlobal.js","webpack:///./node_modules/lodash-es/_getPrototype.js","webpack:///./node_modules/lodash-es/_getRawTag.js","webpack:///./node_modules/lodash-es/_objectToString.js","webpack:///./node_modules/lodash-es/_overArg.js","webpack:///./node_modules/lodash-es/_root.js","webpack:///./node_modules/lodash-es/isObjectLike.js","webpack:///./node_modules/lodash-es/isPlainObject.js","webpack:///./node_modules/moment/locale/af.js","webpack:///./node_modules/moment/locale/ar-dz.js","webpack:///./node_modules/moment/locale/ar-kw.js","webpack:///./node_modules/moment/locale/ar-ly.js","webpack:///./node_modules/moment/locale/ar-ma.js","webpack:///./node_modules/moment/locale/ar-sa.js","webpack:///./node_modules/moment/locale/ar-tn.js","webpack:///./node_modules/moment/locale/ar.js","webpack:///./node_modules/moment/locale/az.js","webpack:///./node_modules/moment/locale/be.js","webpack:///./node_modules/moment/locale/bg.js","webpack:///./node_modules/moment/locale/bm.js","webpack:///./node_modules/moment/locale/bn.js","webpack:///./node_modules/moment/locale/bo.js","webpack:///./node_modules/moment/locale/br.js","webpack:///./node_modules/moment/locale/bs.js","webpack:///./node_modules/moment/locale/ca.js","webpack:///./node_modules/moment/locale/cs.js","webpack:///./node_modules/moment/locale/cv.js","webpack:///./node_modules/moment/locale/cy.js","webpack:///./node_modules/moment/locale/da.js","webpack:///./node_modules/moment/locale/de-at.js","webpack:///./node_modules/moment/locale/de-ch.js","webpack:///./node_modules/moment/locale/de.js","webpack:///./node_modules/moment/locale/dv.js","webpack:///./node_modules/moment/locale/el.js","webpack:///./node_modules/moment/locale/en-au.js","webpack:///./node_modules/moment/locale/en-ca.js","webpack:///./node_modules/moment/locale/en-gb.js","webpack:///./node_modules/moment/locale/en-ie.js","webpack:///./node_modules/moment/locale/en-il.js","webpack:///./node_modules/moment/locale/en-nz.js","webpack:///./node_modules/moment/locale/eo.js","webpack:///./node_modules/moment/locale/es-do.js","webpack:///./node_modules/moment/locale/es-us.js","webpack:///./node_modules/moment/locale/es.js","webpack:///./node_modules/moment/locale/et.js","webpack:///./node_modules/moment/locale/eu.js","webpack:///./node_modules/moment/locale/fa.js","webpack:///./node_modules/moment/locale/fi.js","webpack:///./node_modules/moment/locale/fo.js","webpack:///./node_modules/moment/locale/fr-ca.js","webpack:///./node_modules/moment/locale/fr-ch.js","webpack:///./node_modules/moment/locale/fr.js","webpack:///./node_modules/moment/locale/fy.js","webpack:///./node_modules/moment/locale/gd.js","webpack:///./node_modules/moment/locale/gl.js","webpack:///./node_modules/moment/locale/gom-latn.js","webpack:///./node_modules/moment/locale/gu.js","webpack:///./node_modules/moment/locale/he.js","webpack:///./node_modules/moment/locale/hi.js","webpack:///./node_modules/moment/locale/hr.js","webpack:///./node_modules/moment/locale/hu.js","webpack:///./node_modules/moment/locale/hy-am.js","webpack:///./node_modules/moment/locale/id.js","webpack:///./node_modules/moment/locale/is.js","webpack:///./node_modules/moment/locale/it.js","webpack:///./node_modules/moment/locale/ja.js","webpack:///./node_modules/moment/locale/jv.js","webpack:///./node_modules/moment/locale/ka.js","webpack:///./node_modules/moment/locale/kk.js","webpack:///./node_modules/moment/locale/km.js","webpack:///./node_modules/moment/locale/kn.js","webpack:///./node_modules/moment/locale/ko.js","webpack:///./node_modules/moment/locale/ky.js","webpack:///./node_modules/moment/locale/lb.js","webpack:///./node_modules/moment/locale/lo.js","webpack:///./node_modules/moment/locale/lt.js","webpack:///./node_modules/moment/locale/lv.js","webpack:///./node_modules/moment/locale/me.js","webpack:///./node_modules/moment/locale/mi.js","webpack:///./node_modules/moment/locale/mk.js","webpack:///./node_modules/moment/locale/ml.js","webpack:///./node_modules/moment/locale/mn.js","webpack:///./node_modules/moment/locale/mr.js","webpack:///./node_modules/moment/locale/ms-my.js","webpack:///./node_modules/moment/locale/ms.js","webpack:///./node_modules/moment/locale/mt.js","webpack:///./node_modules/moment/locale/my.js","webpack:///./node_modules/moment/locale/nb.js","webpack:///./node_modules/moment/locale/ne.js","webpack:///./node_modules/moment/locale/nl-be.js","webpack:///./node_modules/moment/locale/nl.js","webpack:///./node_modules/moment/locale/nn.js","webpack:///./node_modules/moment/locale/pa-in.js","webpack:///./node_modules/moment/locale/pl.js","webpack:///./node_modules/moment/locale/pt-br.js","webpack:///./node_modules/moment/locale/pt.js","webpack:///./node_modules/moment/locale/ro.js","webpack:///./node_modules/moment/locale/ru.js","webpack:///./node_modules/moment/locale/sd.js","webpack:///./node_modules/moment/locale/se.js","webpack:///./node_modules/moment/locale/si.js","webpack:///./node_modules/moment/locale/sk.js","webpack:///./node_modules/moment/locale/sl.js","webpack:///./node_modules/moment/locale/sq.js","webpack:///./node_modules/moment/locale/sr-cyrl.js","webpack:///./node_modules/moment/locale/sr.js","webpack:///./node_modules/moment/locale/ss.js","webpack:///./node_modules/moment/locale/sv.js","webpack:///./node_modules/moment/locale/sw.js","webpack:///./node_modules/moment/locale/ta.js","webpack:///./node_modules/moment/locale/te.js","webpack:///./node_modules/moment/locale/tet.js","webpack:///./node_modules/moment/locale/tg.js","webpack:///./node_modules/moment/locale/th.js","webpack:///./node_modules/moment/locale/tl-ph.js","webpack:///./node_modules/moment/locale/tlh.js","webpack:///./node_modules/moment/locale/tr.js","webpack:///./node_modules/moment/locale/tzl.js","webpack:///./node_modules/moment/locale/tzm-latn.js","webpack:///./node_modules/moment/locale/tzm.js","webpack:///./node_modules/moment/locale/ug-cn.js","webpack:///./node_modules/moment/locale/uk.js","webpack:///./node_modules/moment/locale/ur.js","webpack:///./node_modules/moment/locale/uz-latn.js","webpack:///./node_modules/moment/locale/uz.js","webpack:///./node_modules/moment/locale/vi.js","webpack:///./node_modules/moment/locale/x-pseudo.js","webpack:///./node_modules/moment/locale/yo.js","webpack:///./node_modules/moment/locale/zh-cn.js","webpack:///./node_modules/moment/locale/zh-hk.js","webpack:///./node_modules/moment/locale/zh-tw.js","webpack:///./node_modules/moment/moment.js","webpack:///./node_modules/node-fetch/browser.js","webpack:///./node_modules/object-assign/index.js","webpack:///./node_modules/preact-compat/dist/preact-compat.es.js","webpack:///./node_modules/preact/dist/preact.esm.js","webpack:///./node_modules/process/browser.js","webpack:///./node_modules/prop-types/checkPropTypes.js","webpack:///./node_modules/prop-types/factoryWithTypeCheckers.js","webpack:///./node_modules/prop-types/index.js","webpack:///./node_modules/prop-types/lib/ReactPropTypesSecret.js","webpack:///./node_modules/react-redux/es/components/Provider.js","webpack:///./node_modules/react-redux/es/components/connectAdvanced.js","webpack:///./node_modules/react-redux/es/connect/connect.js","webpack:///./node_modules/react-redux/es/connect/mapDispatchToProps.js","webpack:///./node_modules/react-redux/es/connect/mapStateToProps.js","webpack:///./node_modules/react-redux/es/connect/mergeProps.js","webpack:///./node_modules/react-redux/es/connect/selectorFactory.js","webpack:///./node_modules/react-redux/es/connect/verifySubselectors.js","webpack:///./node_modules/react-redux/es/connect/wrapMapToProps.js","webpack:///./node_modules/react-redux/es/index.js","webpack:///./node_modules/react-redux/es/utils/PropTypes.js","webpack:///./node_modules/react-redux/es/utils/Subscription.js","webpack:///./node_modules/react-redux/es/utils/shallowEqual.js","webpack:///./node_modules/react-redux/es/utils/verifyPlainObject.js","webpack:///./node_modules/react-redux/es/utils/warning.js","webpack:///./node_modules/react-router-dom/es/BrowserRouter.js","webpack:///./node_modules/react-router-dom/es/HashRouter.js","webpack:///./node_modules/react-router-dom/es/Link.js","webpack:///./node_modules/react-router-dom/es/MemoryRouter.js","webpack:///./node_modules/react-router-dom/es/NavLink.js","webpack:///./node_modules/react-router-dom/es/Prompt.js","webpack:///./node_modules/react-router-dom/es/Redirect.js","webpack:///./node_modules/react-router-dom/es/Route.js","webpack:///./node_modules/react-router-dom/es/Router.js","webpack:///./node_modules/react-router-dom/es/StaticRouter.js","webpack:///./node_modules/react-router-dom/es/Switch.js","webpack:///./node_modules/react-router-dom/es/index.js","webpack:///./node_modules/react-router-dom/es/matchPath.js","webpack:///./node_modules/react-router-dom/es/withRouter.js","webpack:///./node_modules/react-router-redux/lib/actions.js","webpack:///./node_modules/react-router-redux/lib/index.js","webpack:///./node_modules/react-router-redux/lib/middleware.js","webpack:///./node_modules/react-router-redux/lib/reducer.js","webpack:///./node_modules/react-router-redux/lib/sync.js","webpack:///./node_modules/react-router/es/MemoryRouter.js","webpack:///./node_modules/react-router/es/Prompt.js","webpack:///./node_modules/react-router/es/Redirect.js","webpack:///./node_modules/react-router/es/Route.js","webpack:///./node_modules/react-router/es/Router.js","webpack:///./node_modules/react-router/es/StaticRouter.js","webpack:///./node_modules/react-router/es/Switch.js","webpack:///./node_modules/react-router/es/matchPath.js","webpack:///./node_modules/react-router/es/withRouter.js","webpack:///./node_modules/react-router/node_modules/isarray/index.js","webpack:///./node_modules/react-router/node_modules/path-to-regexp/index.js","webpack:///./node_modules/redux-thunk/lib/index.js","webpack:///./node_modules/redux/es/redux.js","webpack:///./node_modules/resolve-pathname/index.js","webpack:///./node_modules/symbol-observable/es/index.js","webpack:///./node_modules/symbol-observable/es/ponyfill.js","webpack:///./node_modules/uuid/lib/bytesToUuid.js","webpack:///./node_modules/uuid/lib/rng-browser.js","webpack:///./node_modules/uuid/v1.js","webpack:///./node_modules/value-equal/index.js","webpack:///./node_modules/warning/browser.js","webpack:///(webpack)/buildin/amd-define.js","webpack:///(webpack)/buildin/amd-options.js","webpack:///(webpack)/buildin/global.js","webpack:///(webpack)/buildin/harmony-module.js","webpack:///(webpack)/buildin/module.js"],"sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./app/client/index.jsx\");\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _redux = require('redux');\n\nvar _api = require('./api');\n\nvar _live = require('./live/live.actions');\n\nvar liveActions = _interopRequireWildcard(_live);\n\nvar _queue = require('./queue/queue.actions');\n\nvar queueActions = _interopRequireWildcard(_queue);\n\nvar _system = require('./system/system.actions');\n\nvar systemActions = _interopRequireWildcard(_system);\n\nvar _socket = require('./socket/socket.actions');\n\nvar socketActions = _interopRequireWildcard(_socket);\n\nvar _dataset = require('./dataset/dataset.actions');\n\nvar datasetActions = _interopRequireWildcard(_dataset);\n\nvar _audioPlayer = require('./common/audioPlayer/audioPlayer.actions');\n\nvar audioPlayerActions = _interopRequireWildcard(_audioPlayer);\n\nvar _store = require('./store');\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nexports.default = Object.keys(_api.actions).map(function (a) {\n return [a, _api.actions[a]];\n}).concat([['live', liveActions], ['queue', queueActions], ['system', systemActions], ['dataset', datasetActions], ['audioPlayer', audioPlayerActions]]).map(function (p) {\n return [p[0], (0, _redux.bindActionCreators)(p[1], _store.dispatch)];\n}).concat([['socket', socketActions]]).reduce(function (a, b) {\n return (a[b[0]] = b[1]) && a;\n}, {});","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.crud_action = undefined;\nexports.crud_actions = crud_actions;\n\nvar _crud = require('./crud.fetch');\n\nvar _crud2 = require('./crud.types');\n\nvar _crud3 = require('./crud.upload');\n\nfunction crud_actions(type) {\n var fetch_type = (0, _crud.crud_fetch)(type);\n return ['index', 'show', 'create', 'update', 'destroy'].reduce(function (lookup, param) {\n lookup[param] = crud_action(type, param, function (q) {\n return fetch_type[param](q);\n });\n return lookup;\n }, {\n action: function action(method, fn) {\n return crud_action(type, method, fn);\n },\n upload: function upload(id, fd) {\n return (0, _crud3.upload_action)(type, id, fd);\n }\n });\n}\n\nvar crud_action = exports.crud_action = function crud_action(type, method, fn) {\n return function (q) {\n return function (dispatch) {\n return new Promise(function (resolve, reject) {\n dispatch({ type: (0, _crud2.as_type)(type, method + '_loading') });\n fn(q).then(function (data) {\n dispatch({ type: (0, _crud2.as_type)(type, method), data: data });\n resolve(data);\n }).catch(function (e) {\n dispatch({ type: (0, _crud2.as_type)(type, method + '_error') });\n reject(e);\n });\n });\n };\n };\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.crud_fetch = crud_fetch;\nexports.postBody = postBody;\n\nvar _nodeFetch = require('node-fetch');\n\nvar _nodeFetch2 = _interopRequireDefault(_nodeFetch);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction crud_fetch(type, tag) {\n var uri = '/api/' + type + '/' + (tag || '');\n return {\n index: function index(q) {\n return (0, _nodeFetch2.default)(_get_url(uri, q), _get_headers()).then(function (req) {\n return req.json();\n }).catch(error);\n },\n\n show: function show(id) {\n return (0, _nodeFetch2.default)(uri + id).then(function (req) {\n return req.json();\n }).catch(error);\n },\n\n create: function create(data) {\n return (0, _nodeFetch2.default)(uri, post(data)).then(function (req) {\n return req.json();\n }).catch(error);\n },\n\n update: function update(data) {\n return (0, _nodeFetch2.default)(uri + data.id, put(data)).then(function (req) {\n return req.json();\n }).catch(error);\n },\n\n destroy: function destroy(data) {\n return (0, _nodeFetch2.default)(uri + data.id, _destroy(data)).then(function (req) {\n return req.json();\n }).catch(error);\n }\n };\n}\n\nfunction _get_url(_url, data) {\n var url = new URL(window.location.origin + _url);\n if (data) {\n Object.keys(data).forEach(function (key) {\n return url.searchParams.append(key, data[key]);\n });\n }\n return url;\n}\nfunction _get_headers() {\n return {\n method: 'GET',\n headers: {\n 'Accept': 'application/json'\n }\n };\n}\nfunction post(data) {\n return {\n method: 'POST',\n body: JSON.stringify(data),\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n }\n };\n}\nfunction postBody(data) {\n return {\n method: 'POST',\n body: data,\n headers: {\n 'Accept': 'application/json'\n }\n };\n}\nfunction put(data) {\n return {\n method: 'PUT',\n body: JSON.stringify(data),\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n }\n };\n}\nfunction _destroy(data) {\n return {\n method: 'DELETE',\n body: JSON.stringify(data),\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n }\n };\n}\nfunction error(err) {\n console.warn(err);\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar as_type = exports.as_type = function as_type(a, b) {\n return [a, b].join('_').toUpperCase();\n};\n\nvar crud_type = exports.crud_type = function crud_type(type) {\n var actions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n return actions.concat(['index_loading', 'index', 'index_error', 'show_loading', 'show', 'show_error', 'create_loading', 'create', 'create_error', 'update_loading', 'update', 'update_error', 'destroy_loading', 'destroy', 'destroy_error', 'upload_loading', 'upload_progress', 'upload_waiting', 'upload_complete', 'upload_error', 'sort']).reduce(function (a, b) {\n return (a[b] = as_type(type, b)) && a;\n }, {});\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.upload_action = undefined;\nexports.crud_upload = crud_upload;\n\nvar _crud = require('./crud.types');\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction crud_upload(type, fd, data, dispatch) {\n return new Promise(function (resolve, reject) {\n var id = data.id;\n\n Object.keys(data).forEach(function (key) {\n if (key !== 'id') {\n fd.append(key, data[key]);\n }\n });\n\n var xhr = new XMLHttpRequest();\n xhr.upload.addEventListener(\"progress\", uploadProgress, false);\n xhr.addEventListener(\"load\", uploadComplete, false);\n xhr.addEventListener(\"error\", uploadFailed, false);\n xhr.addEventListener(\"abort\", uploadCancelled, false);\n xhr.open(\"POST\", '/api/' + type + '/' + id + '/upload/');\n xhr.send(fd);\n\n dispatch && dispatch({ type: (0, _crud.as_type)(type, 'upload_loading') });\n\n var complete = false;\n\n function uploadProgress(e) {\n if (e.lengthComputable) {\n var percent = Math.round(e.loaded * 100 / e.total) || 0;\n if (percent > 99) {\n dispatch && dispatch(_defineProperty({\n type: (0, _crud.as_type)(type, 'upload_waiting'),\n percent: percent\n }, type, id));\n } else {\n dispatch && dispatch(_defineProperty({\n type: (0, _crud.as_type)(type, 'upload_progress'),\n percent: percent\n }, type, id));\n }\n } else {\n dispatch && dispatch(_defineProperty({\n type: (0, _crud.as_type)(type, 'upload_error'),\n error: 'unable to compute upload progress'\n }, type, id));\n }\n }\n\n function uploadComplete(e) {\n var parsed = void 0;\n try {\n parsed = JSON.parse(e.target.responseText);\n } catch (e) {\n dispatch && dispatch(_defineProperty({\n type: (0, _crud.as_type)(type, 'upload_error'),\n error: 'upload failed'\n }, type, id));\n reject(e);\n return;\n }\n dispatch && dispatch(_defineProperty({\n type: (0, _crud.as_type)(type, 'upload_complete'),\n data: parsed\n }, type, id));\n if (parsed.files && parsed.files.length) {\n parsed.files.forEach(function (file) {\n console.log(file);\n dispatch && dispatch({\n type: (0, _crud.as_type)('file', 'create'),\n data: file\n });\n });\n }\n resolve(parsed);\n }\n\n function uploadFailed(evt) {\n dispatch && dispatch(_defineProperty({\n type: (0, _crud.as_type)(type, 'upload_error'),\n error: 'upload failed'\n }, type, id));\n reject(evt);\n }\n\n function uploadCancelled(evt) {\n dispatch && dispatch(_defineProperty({\n type: (0, _crud.as_type)(type, 'upload_error'),\n error: 'upload cancelled'\n }, type, id));\n reject(evt);\n }\n });\n}\n\nvar upload_action = exports.upload_action = function upload_action(type, id, fd) {\n return function (dispatch) {\n return crud_upload(type, id, fd, dispatch);\n };\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.actions = exports.parser = exports.util = undefined;\n\nvar _crud = require('./crud.actions');\n\nvar _util = require('../util');\n\nvar util = _interopRequireWildcard(_util);\n\nvar _parser = require('./parser');\n\nvar parser = _interopRequireWildcard(_parser);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\n/*\nfor our crud events, create corresponding actions\nthe actions fire a 'loading' event, call the underlying api method, and then resolve.\nso you can do ... \n import { folderActions } from '../../api'\n folderActions.index({ module: 'samplernn' })\n folderActions.show(12)\n folderActions.create({ module: 'samplernn', name: 'foo' })\n folderActions.update(12, { module: 'pix2pix' })\n folderActions.destroy(12, { confirm: true })\n folderActions.upload(12, form_data)\n*/\n\nexports.util = util;\nexports.parser = parser;\nvar actions = exports.actions = ['folder', 'file', 'dataset', 'task', 'user'].reduce(function (a, b) {\n return (a[b] = (0, _crud.crud_actions)(b)) && a;\n}, {});","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.tumblr = exports.thumbnail = exports.loadImage = exports.tag = exports.parse = exports.lookup = exports.integrations = undefined;\n\nvar _nodeFetch = require('node-fetch');\n\nvar _nodeFetch2 = _interopRequireDefault(_nodeFetch);\n\nvar _fetchJsonp = require('fetch-jsonp');\n\nvar _fetchJsonp2 = _interopRequireDefault(_fetchJsonp);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar integrations = exports.integrations = [{\n type: 'image',\n regex: /\\.(jpeg|jpg|gif|png|svg)(\\?.*)?$/i,\n fetch: function fetch(url, done) {\n var img = new Image();\n img.onload = function () {\n if (!img) return;\n var width = img.naturalWidth,\n height = img.naturalHeight;\n img = null;\n done({\n url: url,\n type: \"image\",\n token: \"\",\n thumbnail: \"\",\n title: \"\",\n width: width,\n height: height\n });\n };\n img.src = url;\n if (img.complete) {\n img.onload();\n }\n },\n tag: function tag(media) {\n return '';\n }\n}, {\n type: 'video',\n regex: /\\.(mp4|webm)(\\?.*)?$/i,\n fetch: function fetch(url, done) {\n var video = document.createElement(\"video\");\n var url_parts = url.replace(/\\?.*$/, \"\").split(\"/\");\n var filename = url_parts[url_parts.length - 1];\n video.addEventListener(\"loadedmetadata\", function () {\n var width = video.videoWidth,\n height = video.videoHeight;\n video = null;\n done({\n url: url,\n type: \"video\",\n token: url,\n thumbnail: \"/public/assets/img/video-thumbnail.png\",\n title: filename,\n width: width,\n height: height\n });\n });\n video.src = url;\n video.load();\n },\n tag: function tag(media) {\n return '