From fe399143527972050534b3262c94dfbf291ddb41 Mon Sep 17 00:00:00 2001 From: Jules Laplace Date: Thu, 31 May 2018 22:59:56 +0200 Subject: split out datasets folder --- app/client/api/util.js | 2 +- app/client/dataset/dataset.actions.js | 17 + app/client/dataset/dataset.component.js | 152 ++++ app/client/dataset/dataset.reducer.js | 136 ++++ app/client/modules/samplernn/datasets.component.js | 197 ----- app/client/modules/samplernn/index.js | 2 +- app/client/modules/samplernn/samplernn.actions.js | 16 - app/client/modules/samplernn/samplernn.datasets.js | 109 +++ app/client/modules/samplernn/samplernn.reducer.js | 113 +-- app/client/store.js | 2 + app/client/types.js | 5 +- public/assets/css/css.css | 5 +- public/bundle.js | 894 +++++++++++++-------- public/bundle.js.map | 2 +- 14 files changed, 991 insertions(+), 661 deletions(-) create mode 100644 app/client/dataset/dataset.actions.js create mode 100644 app/client/dataset/dataset.component.js create mode 100644 app/client/dataset/dataset.reducer.js delete mode 100644 app/client/modules/samplernn/datasets.component.js create mode 100644 app/client/modules/samplernn/samplernn.datasets.js diff --git a/app/client/api/util.js b/app/client/api/util.js index e561ca4..6500979 100644 --- a/app/client/api/util.js +++ b/app/client/api/util.js @@ -12,4 +12,4 @@ htmlClassList.remove('loading') function randint(n) { return Math.floor(Math.random()*n) } -document.body.style.background = 'linear-gradient(' + (randint(40)+40) + 'deg, #fde, #ffe)' +document.body.style.backgroundImage = 'linear-gradient(' + (randint(40)+40) + 'deg, #fde, #ffe)' diff --git a/app/client/dataset/dataset.actions.js b/app/client/dataset/dataset.actions.js new file mode 100644 index 0000000..f42e15c --- /dev/null +++ b/app/client/dataset/dataset.actions.js @@ -0,0 +1,17 @@ +// import socket from '../socket' +import types from '../types' + +export const uploadFiles = (files) => { + return { type: types.dataset.upload_files } +} +export const fetchURL = (url) => { + return { type: types.dataset.fetch_url } +} + +// export const uploadFiles = (files) => { +// return dispatch => { +// // return { type: types.dataset.upload_files } +// } +// } + +// export const fetchURL = (url) => { type: types.dataset.fetch_url } diff --git a/app/client/dataset/dataset.component.js b/app/client/dataset/dataset.component.js new file mode 100644 index 0000000..e6c1bfd --- /dev/null +++ b/app/client/dataset/dataset.component.js @@ -0,0 +1,152 @@ +import { h, Component } from 'preact' +import { bindActionCreators } from 'redux' +import { connect } from 'react-redux' + +import { actions, parser } from '../api' + +import Group from '../common/group.component' +import Param from '../common/param.component' +import FileList from '../common/fileList.component' +import FileUpload from '../common/fileUpload.component' +import TextInput from '../common/textInput.component' + +class Dataset extends Component { + constructor(props){ + super() + this.handleName = this.handleName.bind(this) + this.handleUpload = this.handleUpload.bind(this) + this.handleURL = this.handleURL.bind(this) + this.pickFile = this.pickFile.bind(this) + } + handleName(name) { + const { module, folder } = this.props + if (! folder.id) { + this.props.actions.folder.create({ + // username... should get added inside the API + module: module.name, + datatype: module.datatype, + activity: 'dataset', + name + }) + } else { + this.props.actions.folder.update({ + id: folder.id, + module: module.name, + datatype: module.datatype, + activity: 'dataset', + name + }) + } + } + handleUpload(file) { + const { module, folder } = this.props + const fd = new FormData() + fd.append('file', file) + this.props.actions.folder.upload(fd, { + id: folder.id, + module: module.name, + activity: 'file', + epoch: 0, + processed: false, + generated: false, + }) + } + handleURL(url) { + // name url + // mime datatype + // duration analysis + // size activity + // opt created_at updated_at + parser.parse(url, media => { + if (!media) return + console.log('media', media) + this.props.actions.file.create({ + folder_id: this.props.folder.id, + module: this.props.module.name, + activity: 'url', + duration: parseInt(media.duration) || 0, + epoch: 0, + processed: false, + generated: false, + opt: media, + url + }) + }) + } + pickFile(file){ + console.log('pick', file) + this.props.onPick && this.props.onPick(file) + } + render(){ + const { + loading, status, error, + module, title, folder, files, + canRename, canUpload, canAddURL, canDeleteFile, + linkFiles, + fileOptions, pickFile + } = this.props + // sort files?? + return ( +
+
+
+ + {canRename + ? this.renderFolderNameInput(folder.name) + : {folder.name}} + {folder.id && canUpload && this.renderUploadInput()} + {folder.id && canAddURL && this.renderURLInput()} + +
+
+
+
+ {files.length ? +

Files

: +

No files

} +
{(loading || error) && status}
+
+ +
+
+ ) + } + renderFolderNameInput(name){ + return + } + renderUploadInput(){ + return + } + renderURLInput(){ + return + } +} + +const mapStateToProps = state => state.dataset + +const mapDispatchToProps = (dispatch, ownProps) => ({ + actions: { + folder: bindActionCreators(actions.folder, dispatch), + file: bindActionCreators(actions.file, dispatch), + } +}) + +export default connect(mapStateToProps, mapDispatchToProps)(Dataset) diff --git a/app/client/dataset/dataset.reducer.js b/app/client/dataset/dataset.reducer.js new file mode 100644 index 0000000..c7a2e26 --- /dev/null +++ b/app/client/dataset/dataset.reducer.js @@ -0,0 +1,136 @@ +import types from '../types' + +const datasetInitialState = { + loading: false, + error: null, + status: '', +} + +const datasetReducer = (state = datasetInitialState, action) => { + console.log(action) + switch(action.type) { + case types.socket.connect: + return { + ...state, + } + case types.task.task_begin: + return { + ...state, + } + case types.task.task_finish: + return { + ...state, + } + + case types.folder.index: + return { + ...state, + folders: action.data, + folder: action.data[0], + } + case types.folder.update: + return state + case types.file.index: + return { + ...state, + files: action.data + } + + case types.folder.upload_loading: + return { + ...state, + upload: { + loading: true, + status: 'Loading...', + }, + } + case types.folder.upload_error: + return { + ...state, + upload: { + loading: false, + status: 'Error uploading :(', + }, + } + case types.folder.upload_progress: + console.log(action) + return { + ...state, + upload: { + loading: true, + status: 'Upload progress ' + action.percent + '%', + }, + } + case types.folder.upload_waiting: + console.log(action) + return { + ...state, + upload: { + loading: true, + status: 'Waiting for server to finish processing...', + }, + } + case types.file.create_loading: + return { + ...state, + upload: { + loading: true, + status: 'Creating file...' + } + } + case types.file.create: + console.log('booo') + if (state.folder.id === action.data.folder_id) { + return { + ...state, + files: [action.data].concat(state.files), + upload: { + loading: false, + status: 'File created', + }, + } + } else { + return { + ...state, + upload: { + loading: false, + status: 'created', + }, + } + } + case types.folder.upload_complete: + console.log(action) + if (state.folder.id === action.folder) { + return { + ...state, + files: [action.files].concat(state.files), + upload: { + loading: false, + status: 'Upload complete', + }, + } + } else { + return { + ...state, + upload: { + loading: false, + status: 'Upload complete', + }, + } + } + case types.socket.status: + return datasetSocket(state, action.data) + default: + return state + } +} + +const datasetSocket = (state, action) => { + console.log(action) + switch (action.key) { + default: + return state + } +} + +export default datasetReducer diff --git a/app/client/modules/samplernn/datasets.component.js b/app/client/modules/samplernn/datasets.component.js deleted file mode 100644 index f1e4d71..0000000 --- a/app/client/modules/samplernn/datasets.component.js +++ /dev/null @@ -1,197 +0,0 @@ -import { h, Component } from 'preact' -import { bindActionCreators } from 'redux' -import { connect } from 'react-redux' - -import { actions, parser } from '../../api' -import * as taskActions from '../../task/task.actions' -import * as systemActions from '../../system/system.actions' - // folderActions.index({ module: 'samplernn' }) - // folderActions.show(12) - // folderActions.create({ module: 'samplernn', name: 'foo' }) - // folderActions.update(12, { module: 'pix2pix' }) - // folderActions.destroy(12, { confirm: true }) - // folderActions.upload(12, form_data) - -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 FileUpload from '../../common/fileUpload.component' -import TextInput from '../../common/textInput.component' - -class SampleRNNDatasets extends Component { - constructor(props){ - super() - // fetch file list - this.handleName = this.handleName.bind(this) - this.handleUpload = this.handleUpload.bind(this) - this.handleURL = this.handleURL.bind(this) - this.fetchURL = this.fetchURL.bind(this) - this.fileOptions = this.fileOptions.bind(this) - this.pickFile = this.pickFile.bind(this) - props.actions.folder.index({ module: 'samplernn' }) - props.actions.file.index({ module: 'samplernn' }) - } - handleName(name) { - const folder = this.props.samplernn.folder - if (! folder.id) { - this.props.actions.folder.create({ - // username... should get added inside the API - module: 'samplernn', - activity: 'dataset', - datatype: 'audio', - name - }) - } else { - this.props.actions.folder.update({ - id: folder.id, - module: 'samplernn', - activity: 'dataset', - datatype: 'audio', - name - }) - } - } - handleUpload(file) { - const folder = this.props.samplernn.folder - const fd = new FormData() - fd.append('file', file) - this.props.actions.folder.upload(fd, { - id: folder.id, - module: 'samplernn', - activity: 'url', - epoch: 0, - processed: false, - generated: false, - }) - } - handleURL(url) { - // name url - // mime datatype - // duration analysis - // size activity - // opt created_at updated_at - parser.parse(url, media => { - if (!media) return - console.log('media', media) - const folder = this.props.samplernn.folder - this.props.actions.file.create({ - folder_id: folder.id, - module: 'samplernn', - activity: 'url', - epoch: 0, - processed: false, - generated: false, - opt: media, - url - }) - }) - } - fetchURL(url) { - console.log(url) - this.props.actions.task.start_task({ - activity: 'fetch', - module: 'samplernn', - dataset: 'test', - epochs: 1, - opt: { url } - }, { preempt: true, watch: true }) - } - pickFile(file){ - console.log('pick', file) - } - fileOptions(file){ - console.log(file) - if (file.activity === 'url' && !file.dataset) { - if (this.props.runner.cpu.status !== 'IDLE') { - return ( -
- fetching... -
- ) - } else { - return ( -
this.fetchURL(file.url)}> - fetch -
- ) - } - } - return ( -
-
this.train(file)}>train
- {file.epoch == 0 &&
{file.epochs} ep.
} -
- ) - } - render(){ - const { samplernn } = this.props - console.log(samplernn.upload) - // sort files?? - return ( -
-
-

SampleRNN

-
-
-
- - - {samplernn.folder.id && - - } - {samplernn.folder.id && - - } - -
-
-
-
- {samplernn.files.length ? -

Files

: -

No files

} -
{samplernn.upload.loading && samplernn.upload.status}
-
- -
-
- ) - } -} - -const mapStateToProps = state => ({ - samplernn: state.module.samplernn, - runner: state.system.runner, - task: state.task, -}) - -const mapDispatchToProps = (dispatch, ownProps) => ({ - actions: { - folder: bindActionCreators(actions.folder, dispatch), - file: bindActionCreators(actions.file, dispatch), - task: bindActionCreators(taskActions, dispatch), - system: bindActionCreators(systemActions, dispatch), - } -}) - -export default connect(mapStateToProps, mapDispatchToProps)(SampleRNNDatasets) diff --git a/app/client/modules/samplernn/index.js b/app/client/modules/samplernn/index.js index e098c2e..afb5263 100644 --- a/app/client/modules/samplernn/index.js +++ b/app/client/modules/samplernn/index.js @@ -1,6 +1,6 @@ import { h, Component } from 'preact' import { Route, Link } from 'react-router-dom' -import SampleRNNDatasets from './datasets.component' +import SampleRNNDatasets from './samplernn.datasets' function router () { return ( diff --git a/app/client/modules/samplernn/samplernn.actions.js b/app/client/modules/samplernn/samplernn.actions.js index 1e0e3a6..aa9603b 100644 --- a/app/client/modules/samplernn/samplernn.actions.js +++ b/app/client/modules/samplernn/samplernn.actions.js @@ -1,18 +1,2 @@ import socket from '../../socket' import types from '../../types' - -export const uploadFiles = (files) => { - return { type: types.samplernn.upload_files } -} -export const fetchURL = (url) => { - return { type: types.samplernn.fetch_url } -} - -export const uploadFiles = (files) => { - return dispatch => { - // return { type: types.samplernn.upload_files } - - } -} - -// export const fetchURL = (url) => { type: types.samplernn.fetch_url } diff --git a/app/client/modules/samplernn/samplernn.datasets.js b/app/client/modules/samplernn/samplernn.datasets.js new file mode 100644 index 0000000..5f15dbc --- /dev/null +++ b/app/client/modules/samplernn/samplernn.datasets.js @@ -0,0 +1,109 @@ +import { h, Component } from 'preact' +import { bindActionCreators } from 'redux' +import { connect } from 'react-redux' + +import { actions, parser } from '../../api' +import * as taskActions from '../../task/task.actions' +import * as systemActions from '../../system/system.actions' + +import Dataset from '../../dataset/dataset.component' + +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 SampleRNNDatasets extends Component { + constructor(props){ + super() + // fetch file list + this.fileOptions = this.fileOptions.bind(this) + this.pickFile = this.pickFile.bind(this) + props.actions.folder.index({ module: 'samplernn' }) + props.actions.file.index({ module: 'samplernn' }) + } + pickFile(file){ + console.log('pick', file) + } + fileOptions(file){ + console.log(file) + if (file.activity === 'url' && !file.dataset) { + if (this.props.runner.cpu.status !== 'IDLE') { + return ( +
+ fetching... +
+ ) + } else { + return ( +
this.fetchURL(file.url)}> + fetch +
+ ) + } + } + return ( +
+
this.train(file)}>train
+ {file.epoch == 0 &&
{file.epochs} ep.
} +
+ ) + } + fetchURL(url) { + console.log(url) + this.props.actions.task.start_task({ + activity: 'fetch', + module: 'samplernn', + dataset: 'test', + epochs: 1, + opt: { url } + }, { preempt: true, watch: true }) + } + render(){ + const { samplernn } = this.props + console.log(samplernn.upload) + // sort files?? + const module = { + name: 'samplernn', + datatype: 'audio', + } + return ( +
+
+

SampleRNN

+
+ +
+ ) + } +} + +const mapStateToProps = state => ({ + samplernn: state.module.samplernn, + runner: state.system.runner, + task: state.task, +}) + +const mapDispatchToProps = (dispatch, ownProps) => ({ + actions: { + folder: bindActionCreators(actions.folder, dispatch), + file: bindActionCreators(actions.file, dispatch), + task: bindActionCreators(taskActions, dispatch), + system: bindActionCreators(systemActions, dispatch), + } +}) + +export default connect(mapStateToProps, mapDispatchToProps)(SampleRNNDatasets) diff --git a/app/client/modules/samplernn/samplernn.reducer.js b/app/client/modules/samplernn/samplernn.reducer.js index efd31f5..b3b58c3 100644 --- a/app/client/modules/samplernn/samplernn.reducer.js +++ b/app/client/modules/samplernn/samplernn.reducer.js @@ -3,23 +3,22 @@ import types from '../../types' const samplernnInitialState = { loading: false, error: null, - folder: {}, folders: [], - files: [], + datasets: [], results: [], - upload: { - loading: false, - status: '', + input: { + folder: {}, + files: [], + }, + output: { + folder: {}, + files: [], }, } const samplernnReducer = (state = samplernnInitialState, action) => { console.log(action) switch(action.type) { - case types.socket.connect: - return { - ...state, - } case types.task.task_begin: return { ...state, @@ -29,102 +28,6 @@ const samplernnReducer = (state = samplernnInitialState, action) => { ...state, } - case types.folder.index: - return { - ...state, - folders: action.data, - folder: action.data[0], - } - case types.folder.update: - return state - case types.file.index: - return { - ...state, - files: action.data - } - - case types.folder.upload_loading: - return { - ...state, - upload: { - loading: true, - status: 'Loading...', - }, - } - case types.folder.upload_error: - return { - ...state, - upload: { - loading: false, - status: 'Error uploading :(', - }, - } - case types.folder.upload_progress: - console.log(action) - return { - ...state, - upload: { - loading: true, - status: 'Upload progress ' + action.percent + '%', - }, - } - case types.folder.upload_waiting: - console.log(action) - return { - ...state, - upload: { - loading: true, - status: 'Waiting for server to finish processing...', - }, - } - case types.file.create_loading: - return { - ...state, - upload: { - loading: true, - status: 'Creating file...' - } - } - case types.file.create: - console.log('booo') - if (state.folder.id === action.data.folder_id) { - return { - ...state, - files: [action.data].concat(state.files), - upload: { - loading: false, - status: 'File created', - }, - } - } else { - return { - ...state, - upload: { - loading: false, - status: 'created', - }, - } - } - case types.folder.upload_complete: - console.log(action) - if (state.folder.id === action.folder) { - return { - ...state, - files: [action.files].concat(state.files), - upload: { - loading: false, - status: 'Upload complete', - }, - } - } else { - return { - ...state, - upload: { - loading: false, - status: 'Upload complete', - }, - } - } case types.socket.status: return samplernnSocket(state, action.data) default: diff --git a/app/client/store.js b/app/client/store.js index 108ac83..77001d6 100644 --- a/app/client/store.js +++ b/app/client/store.js @@ -9,6 +9,7 @@ import { routerReducer } from 'react-router-redux' import systemReducer from './system/system.reducer' import dashboardReducer from './dashboard/dashboard.reducer' import liveReducer from './live/live.reducer' +import datasetReducer from './dataset/dataset.reducer' import taskReducer from './task/task.reducer' import { moduleReducer } from './modules/module.reducer' @@ -16,6 +17,7 @@ const appReducer = combineReducers({ system: systemReducer, dashboard: dashboardReducer, live: liveReducer, + dataset: datasetReducer, task: taskReducer, router: routerReducer, module: moduleReducer, diff --git a/app/client/types.js b/app/client/types.js index c8fa26f..ad9613f 100644 --- a/app/client/types.js +++ b/app/client/types.js @@ -65,13 +65,14 @@ export default { saving_video: 'SAVING_VIDEO', save_video: 'SAVE_VIDEO', }, - samplernn: { - // dataset uploading + dataset: { upload_files: 'UPLOAD_FILES', file_progress: 'FILE_PROGRESS', file_uploaded: 'FILE_UPLOADED', fetch_url: 'FETCH_URL', fetch_progress: 'FETCH_PROGRESS', + }, + samplernn: { // queue and train // update checkpoint settings // reset checkpoint settings diff --git a/public/assets/css/css.css b/public/assets/css/css.css index 7fa6676..f42b05c 100644 --- a/public/assets/css/css.css +++ b/public/assets/css/css.css @@ -6,6 +6,7 @@ html,body { font-family: 'Trebuchet MS', sans-serif; } body { + background-attachment: fixed; } header { font-size: 13px; @@ -40,7 +41,9 @@ h3 { flex-direction: column; align-items: center; justify-content: center; - width: 100%; height: 100%; + width: 100%; + min-height: 100%; + padding: 10px 10px; } .row { display: flex; diff --git a/public/bundle.js b/public/bundle.js index a8d3c16..0ad4bf3 100644 --- a/public/bundle.js +++ b/public/bundle.js @@ -810,7 +810,7 @@ function randint(n) { return Math.floor(Math.random() * n); } -document.body.style.background = 'linear-gradient(' + (randint(40) + 40) + 'deg, #fde, #ffe)'; +document.body.style.backgroundImage = 'linear-gradient(' + (randint(40) + 40) + 'deg, #fde, #ffe)'; /***/ }), @@ -2388,6 +2388,415 @@ exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)( /***/ }), +/***/ "./app/client/dataset/dataset.component.js": +/*!*************************************************!*\ + !*** ./app/client/dataset/dataset.component.js ***! + \*************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +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 _api = __webpack_require__(/*! ../api */ "./app/client/api/index.js"); + +var _group = __webpack_require__(/*! ../common/group.component */ "./app/client/common/group.component.js"); + +var _group2 = _interopRequireDefault(_group); + +var _param = __webpack_require__(/*! ../common/param.component */ "./app/client/common/param.component.js"); + +var _param2 = _interopRequireDefault(_param); + +var _fileList = __webpack_require__(/*! ../common/fileList.component */ "./app/client/common/fileList.component.js"); + +var _fileList2 = _interopRequireDefault(_fileList); + +var _fileUpload = __webpack_require__(/*! ../common/fileUpload.component */ "./app/client/common/fileUpload.component.js"); + +var _fileUpload2 = _interopRequireDefault(_fileUpload); + +var _textInput = __webpack_require__(/*! ../common/textInput.component */ "./app/client/common/textInput.component.js"); + +var _textInput2 = _interopRequireDefault(_textInput); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: 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 Dataset = function (_Component) { + _inherits(Dataset, _Component); + + function Dataset(props) { + _classCallCheck(this, Dataset); + + var _this = _possibleConstructorReturn(this, (Dataset.__proto__ || Object.getPrototypeOf(Dataset)).call(this)); + + _this.handleName = _this.handleName.bind(_this); + _this.handleUpload = _this.handleUpload.bind(_this); + _this.handleURL = _this.handleURL.bind(_this); + _this.pickFile = _this.pickFile.bind(_this); + return _this; + } + + _createClass(Dataset, [{ + key: 'handleName', + value: function handleName(name) { + var _props = this.props, + module = _props.module, + folder = _props.folder; + + if (!folder.id) { + this.props.actions.folder.create({ + // username... should get added inside the API + module: module.name, + datatype: module.datatype, + activity: 'dataset', + name: name + }); + } else { + this.props.actions.folder.update({ + id: folder.id, + module: module.name, + datatype: module.datatype, + activity: 'dataset', + name: name + }); + } + } + }, { + key: 'handleUpload', + value: function handleUpload(file) { + var _props2 = this.props, + module = _props2.module, + folder = _props2.folder; + + var fd = new FormData(); + fd.append('file', file); + this.props.actions.folder.upload(fd, { + id: folder.id, + module: module.name, + activity: 'file', + epoch: 0, + processed: false, + generated: false + }); + } + }, { + key: 'handleURL', + value: function handleURL(url) { + var _this2 = this; + + // name url + // mime datatype + // duration analysis + // size activity + // opt created_at updated_at + _api.parser.parse(url, function (media) { + if (!media) return; + console.log('media', media); + _this2.props.actions.file.create({ + folder_id: _this2.props.folder.id, + module: _this2.props.module.name, + activity: 'url', + duration: parseInt(media.duration) || 0, + epoch: 0, + processed: false, + generated: false, + opt: media, + url: url + }); + }); + } + }, { + key: 'pickFile', + value: function pickFile(file) { + console.log('pick', file); + this.props.onPick && this.props.onPick(file); + } + }, { + key: 'render', + value: function render() { + var _props3 = this.props, + loading = _props3.loading, + status = _props3.status, + error = _props3.error, + module = _props3.module, + title = _props3.title, + folder = _props3.folder, + files = _props3.files, + canRename = _props3.canRename, + canUpload = _props3.canUpload, + canAddURL = _props3.canAddURL, + canDeleteFile = _props3.canDeleteFile, + linkFiles = _props3.linkFiles, + fileOptions = _props3.fileOptions, + pickFile = _props3.pickFile; + // sort files?? + + return (0, _preact.h)( + 'div', + { className: 'dataset' }, + (0, _preact.h)( + 'div', + { className: 'params row' }, + (0, _preact.h)( + 'div', + { className: 'column' }, + (0, _preact.h)( + _group2.default, + { title: title || 'Dataset' }, + canRename ? this.renderFolderNameInput(folder.name) : (0, _preact.h)( + _param2.default, + { title: 'Dataset name' }, + folder.name + ), + folder.id && canUpload && this.renderUploadInput(), + folder.id && canAddURL && this.renderURLInput() + ) + ) + ), + (0, _preact.h)( + 'div', + { className: 'params col' }, + (0, _preact.h)( + 'div', + { 'class': 'row heading' }, + files.length ? (0, _preact.h)( + 'h3', + null, + 'Files' + ) : (0, _preact.h)( + 'h4', + null, + 'No files' + ), + (0, _preact.h)( + 'div', + null, + (loading || error) && status + ) + ), + (0, _preact.h)(_fileList2.default, { + files: files, + options: fileOptions, + onClick: pickFile, + canDelete: canDeleteFile, + linkFiles: linkFiles + }) + ) + ); + } + }, { + key: 'renderFolderNameInput', + value: function renderFolderNameInput(name) { + return (0, _preact.h)(_textInput2.default, { + title: 'Dataset name', + value: name, + onSave: this.handleName + }); + } + }, { + key: 'renderUploadInput', + value: function renderUploadInput() { + return (0, _preact.h)(_fileUpload2.default, { + title: 'Upload a file', + mime: 'image.*', + onUpload: this.handleUpload + }); + } + }, { + key: 'renderURLInput', + value: function renderURLInput() { + return (0, _preact.h)(_textInput2.default, { + title: 'Fetch a URL', + placeholder: 'http://', + onSave: this.handleURL + }); + } + }]); + + return Dataset; +}(_preact.Component); + +var mapStateToProps = function mapStateToProps(state) { + return state.dataset; +}; + +var mapDispatchToProps = function mapDispatchToProps(dispatch, ownProps) { + return { + actions: { + folder: (0, _redux.bindActionCreators)(_api.actions.folder, dispatch), + file: (0, _redux.bindActionCreators)(_api.actions.file, dispatch) + } + }; +}; + +exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(Dataset); + +/***/ }), + +/***/ "./app/client/dataset/dataset.reducer.js": +/*!***********************************************!*\ + !*** ./app/client/dataset/dataset.reducer.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 _types = __webpack_require__(/*! ../types */ "./app/client/types.js"); + +var _types2 = _interopRequireDefault(_types); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var datasetInitialState = { + loading: false, + error: null, + status: '' +}; + +var datasetReducer = function datasetReducer() { + var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : datasetInitialState; + var action = arguments[1]; + + console.log(action); + switch (action.type) { + case _types2.default.socket.connect: + return _extends({}, state); + case _types2.default.task.task_begin: + return _extends({}, state); + case _types2.default.task.task_finish: + return _extends({}, state); + + case _types2.default.folder.index: + return _extends({}, state, { + folders: action.data, + folder: action.data[0] + }); + case _types2.default.folder.update: + return state; + case _types2.default.file.index: + return _extends({}, state, { + files: action.data + }); + + case _types2.default.folder.upload_loading: + return _extends({}, state, { + upload: { + loading: true, + status: 'Loading...' + } + }); + case _types2.default.folder.upload_error: + return _extends({}, state, { + upload: { + loading: false, + status: 'Error uploading :(' + } + }); + case _types2.default.folder.upload_progress: + console.log(action); + return _extends({}, state, { + upload: { + loading: true, + status: 'Upload progress ' + action.percent + '%' + } + }); + case _types2.default.folder.upload_waiting: + console.log(action); + return _extends({}, state, { + upload: { + loading: true, + status: 'Waiting for server to finish processing...' + } + }); + case _types2.default.file.create_loading: + return _extends({}, state, { + upload: { + loading: true, + status: 'Creating file...' + } + }); + case _types2.default.file.create: + console.log('booo'); + if (state.folder.id === action.data.folder_id) { + return _extends({}, state, { + files: [action.data].concat(state.files), + upload: { + loading: false, + status: 'File created' + } + }); + } else { + return _extends({}, state, { + upload: { + loading: false, + status: 'created' + } + }); + } + case _types2.default.folder.upload_complete: + console.log(action); + if (state.folder.id === action.folder) { + return _extends({}, state, { + files: [action.files].concat(state.files), + upload: { + loading: false, + status: 'Upload complete' + } + }); + } else { + return _extends({}, state, { + upload: { + loading: false, + status: 'Upload complete' + } + }); + } + case _types2.default.socket.status: + return datasetSocket(state, action.data); + default: + return state; + } +}; + +var datasetSocket = function datasetSocket(state, action) { + console.log(action); + switch (action.key) { + default: + return state; + } +}; + +exports.default = datasetReducer; + +/***/ }), + /***/ "./app/client/index.jsx": /*!******************************!*\ !*** ./app/client/index.jsx ***! @@ -3833,9 +4242,73 @@ exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)( /***/ }), -/***/ "./app/client/modules/samplernn/datasets.component.js": +/***/ "./app/client/modules/samplernn/index.js": +/*!***********************************************!*\ + !*** ./app/client/modules/samplernn/index.js ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _preact = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.esm.js"); + +var _reactRouterDom = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/es/index.js"); + +var _samplernn = __webpack_require__(/*! ./samplernn.datasets */ "./app/client/modules/samplernn/samplernn.datasets.js"); + +var _samplernn2 = _interopRequireDefault(_samplernn); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function router() { + return (0, _preact.h)( + 'div', + null, + (0, _preact.h)(_reactRouterDom.Route, { path: '/samplernn/datasets/', component: _samplernn2.default }) + ); +} + +function links() { + return (0, _preact.h)( + 'span', + null, + (0, _preact.h)( + 'span', + null, + (0, _preact.h)( + _reactRouterDom.Link, + { to: '/samplernn/datasets/' }, + 'datasets' + ) + ), + (0, _preact.h)( + 'span', + null, + (0, _preact.h)( + _reactRouterDom.Link, + { to: '/samplernn/results/' }, + 'results' + ) + ) + ); +} + +exports.default = { + name: 'samplernn', + router: router, links: links +}; + +/***/ }), + +/***/ "./app/client/modules/samplernn/samplernn.datasets.js": /*!************************************************************!*\ - !*** ./app/client/modules/samplernn/datasets.component.js ***! + !*** ./app/client/modules/samplernn/samplernn.datasets.js ***! \************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { @@ -3865,6 +4338,10 @@ var _system = __webpack_require__(/*! ../../system/system.actions */ "./app/clie var systemActions = _interopRequireWildcard(_system); +var _dataset = __webpack_require__(/*! ../../dataset/dataset.component */ "./app/client/dataset/dataset.component.js"); + +var _dataset2 = _interopRequireDefault(_dataset); + var _group = __webpack_require__(/*! ../../common/group.component */ "./app/client/common/group.component.js"); var _group2 = _interopRequireDefault(_group); @@ -3885,10 +4362,6 @@ var _fileList = __webpack_require__(/*! ../../common/fileList.component */ "./ap var _fileList2 = _interopRequireDefault(_fileList); -var _fileUpload = __webpack_require__(/*! ../../common/fileUpload.component */ "./app/client/common/fileUpload.component.js"); - -var _fileUpload2 = _interopRequireDefault(_fileUpload); - var _textInput = __webpack_require__(/*! ../../common/textInput.component */ "./app/client/common/textInput.component.js"); var _textInput2 = _interopRequireDefault(_textInput); @@ -3902,109 +4375,24 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons 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; } -// folderActions.index({ module: 'samplernn' }) -// folderActions.show(12) -// folderActions.create({ module: 'samplernn', name: 'foo' }) -// folderActions.update(12, { module: 'pix2pix' }) -// folderActions.destroy(12, { confirm: true }) -// folderActions.upload(12, form_data) var SampleRNNDatasets = function (_Component) { _inherits(SampleRNNDatasets, _Component); - function SampleRNNDatasets(props) { - _classCallCheck(this, SampleRNNDatasets); - - // fetch file list - var _this = _possibleConstructorReturn(this, (SampleRNNDatasets.__proto__ || Object.getPrototypeOf(SampleRNNDatasets)).call(this)); - - _this.handleName = _this.handleName.bind(_this); - _this.handleUpload = _this.handleUpload.bind(_this); - _this.handleURL = _this.handleURL.bind(_this); - _this.fetchURL = _this.fetchURL.bind(_this); - _this.fileOptions = _this.fileOptions.bind(_this); - _this.pickFile = _this.pickFile.bind(_this); - props.actions.folder.index({ module: 'samplernn' }); - props.actions.file.index({ module: 'samplernn' }); - return _this; - } - - _createClass(SampleRNNDatasets, [{ - key: 'handleName', - value: function handleName(name) { - var folder = this.props.samplernn.folder; - if (!folder.id) { - this.props.actions.folder.create({ - // username... should get added inside the API - module: 'samplernn', - activity: 'dataset', - datatype: 'audio', - name: name - }); - } else { - this.props.actions.folder.update({ - id: folder.id, - module: 'samplernn', - activity: 'dataset', - datatype: 'audio', - name: name - }); - } - } - }, { - key: 'handleUpload', - value: function handleUpload(file) { - var folder = this.props.samplernn.folder; - var fd = new FormData(); - fd.append('file', file); - this.props.actions.folder.upload(fd, { - id: folder.id, - module: 'samplernn', - activity: 'url', - epoch: 0, - processed: false, - generated: false - }); - } - }, { - key: 'handleURL', - value: function handleURL(url) { - var _this2 = this; - - // name url - // mime datatype - // duration analysis - // size activity - // opt created_at updated_at - _api.parser.parse(url, function (media) { - if (!media) return; - console.log('media', media); - var folder = _this2.props.samplernn.folder; - _this2.props.actions.file.create({ - folder_id: folder.id, - module: 'samplernn', - activity: 'url', - epoch: 0, - processed: false, - generated: false, - opt: media, - url: url - }); - }); - } - }, { - key: 'fetchURL', - value: function fetchURL(url) { - console.log(url); - this.props.actions.task.start_task({ - activity: 'fetch', - module: 'samplernn', - dataset: 'test', - epochs: 1, - opt: { url: url } - }, { preempt: true, watch: true }); - } - }, { + function SampleRNNDatasets(props) { + _classCallCheck(this, SampleRNNDatasets); + + // fetch file list + var _this = _possibleConstructorReturn(this, (SampleRNNDatasets.__proto__ || Object.getPrototypeOf(SampleRNNDatasets)).call(this)); + + _this.fileOptions = _this.fileOptions.bind(_this); + _this.pickFile = _this.pickFile.bind(_this); + props.actions.folder.index({ module: 'samplernn' }); + props.actions.file.index({ module: 'samplernn' }); + return _this; + } + + _createClass(SampleRNNDatasets, [{ key: 'pickFile', value: function pickFile(file) { console.log('pick', file); @@ -4012,7 +4400,7 @@ var SampleRNNDatasets = function (_Component) { }, { key: 'fileOptions', value: function fileOptions(file) { - var _this3 = this; + var _this2 = this; console.log(file); if (file.activity === 'url' && !file.dataset) { @@ -4026,7 +4414,7 @@ var SampleRNNDatasets = function (_Component) { return (0, _preact.h)( 'div', { className: 'link', onClick: function onClick() { - return _this3.fetchURL(file.url); + return _this2.fetchURL(file.url); } }, 'fetch' ); @@ -4038,7 +4426,7 @@ var SampleRNNDatasets = function (_Component) { (0, _preact.h)( 'div', { className: 'link', onClick: function onClick() { - return _this3.train(file); + return _this2.train(file); } }, 'train' ), @@ -4050,6 +4438,18 @@ var SampleRNNDatasets = function (_Component) { ) ); } + }, { + key: 'fetchURL', + value: function fetchURL(url) { + console.log(url); + this.props.actions.task.start_task({ + activity: 'fetch', + module: 'samplernn', + dataset: 'test', + epochs: 1, + opt: { url: url } + }, { preempt: true, watch: true }); + } }, { key: 'render', value: function render() { @@ -4057,6 +4457,10 @@ var SampleRNNDatasets = function (_Component) { console.log(samplernn.upload); // sort files?? + var module = { + name: 'samplernn', + datatype: 'audio' + }; return (0, _preact.h)( 'div', { className: 'app' }, @@ -4069,62 +4473,18 @@ var SampleRNNDatasets = function (_Component) { 'SampleRNN' ) ), - (0, _preact.h)( - 'div', - { className: 'params row' }, - (0, _preact.h)( - 'div', - { className: 'column' }, - (0, _preact.h)( - _group2.default, - { title: 'Dataset' }, - (0, _preact.h)(_textInput2.default, { - title: 'Dataset name', - value: samplernn.folder.name, - onSave: this.handleName - }), - samplernn.folder.id && (0, _preact.h)(_fileUpload2.default, { - title: 'Upload a file', - mime: 'image.*', - onUpload: this.handleUpload - }), - samplernn.folder.id && (0, _preact.h)(_textInput2.default, { - title: 'Fetch a URL', - placeholder: 'http://', - onSave: this.handleURL - }) - ) - ) - ), - (0, _preact.h)( - 'div', - { className: 'params col' }, - (0, _preact.h)( - 'div', - { 'class': 'row heading' }, - samplernn.files.length ? (0, _preact.h)( - 'h3', - null, - 'Files' - ) : (0, _preact.h)( - 'h4', - null, - 'No files' - ), - (0, _preact.h)( - 'div', - null, - samplernn.upload.loading && samplernn.upload.status - ) - ), - (0, _preact.h)(_fileList2.default, { - files: samplernn.files, - options: this.fileOptions, - onClick: this.pickFile, - showDelete: true, - linkFiles: true - }) - ) + (0, _preact.h)(_dataset2.default, { + canRename: true, + canUpload: true, + canAddURL: true, + canDeleteFile: true, + linkFiles: true, + fileOptions: this.fileOptions, + onPick: this.handlePick, + module: module, + folder: samplernn.input.folder, + files: samplernn.input.files + }) ); } }]); @@ -4155,70 +4515,6 @@ exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)( /***/ }), -/***/ "./app/client/modules/samplernn/index.js": -/*!***********************************************!*\ - !*** ./app/client/modules/samplernn/index.js ***! - \***********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _preact = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.esm.js"); - -var _reactRouterDom = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/es/index.js"); - -var _datasets = __webpack_require__(/*! ./datasets.component */ "./app/client/modules/samplernn/datasets.component.js"); - -var _datasets2 = _interopRequireDefault(_datasets); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function router() { - return (0, _preact.h)( - 'div', - null, - (0, _preact.h)(_reactRouterDom.Route, { path: '/samplernn/datasets/', component: _datasets2.default }) - ); -} - -function links() { - return (0, _preact.h)( - 'span', - null, - (0, _preact.h)( - 'span', - null, - (0, _preact.h)( - _reactRouterDom.Link, - { to: '/samplernn/datasets/' }, - 'datasets' - ) - ), - (0, _preact.h)( - 'span', - null, - (0, _preact.h)( - _reactRouterDom.Link, - { to: '/samplernn/results/' }, - 'results' - ) - ) - ); -} - -exports.default = { - name: 'samplernn', - router: router, links: links -}; - -/***/ }), - /***/ "./app/client/modules/samplernn/samplernn.reducer.js": /*!***********************************************************!*\ !*** ./app/client/modules/samplernn/samplernn.reducer.js ***! @@ -4244,13 +4540,16 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de var samplernnInitialState = { loading: false, error: null, - folder: {}, folders: [], - files: [], + datasets: [], results: [], - upload: { - loading: false, - status: '' + input: { + folder: {}, + files: [] + }, + output: { + folder: {}, + files: [] } }; @@ -4260,98 +4559,11 @@ var samplernnReducer = function samplernnReducer() { console.log(action); switch (action.type) { - case _types2.default.socket.connect: - return _extends({}, state); case _types2.default.task.task_begin: return _extends({}, state); case _types2.default.task.task_finish: return _extends({}, state); - case _types2.default.folder.index: - return _extends({}, state, { - folders: action.data, - folder: action.data[0] - }); - case _types2.default.folder.update: - return state; - case _types2.default.file.index: - return _extends({}, state, { - files: action.data - }); - - case _types2.default.folder.upload_loading: - return _extends({}, state, { - upload: { - loading: true, - status: 'Loading...' - } - }); - case _types2.default.folder.upload_error: - return _extends({}, state, { - upload: { - loading: false, - status: 'Error uploading :(' - } - }); - case _types2.default.folder.upload_progress: - console.log(action); - return _extends({}, state, { - upload: { - loading: true, - status: 'Upload progress ' + action.percent + '%' - } - }); - case _types2.default.folder.upload_waiting: - console.log(action); - return _extends({}, state, { - upload: { - loading: true, - status: 'Waiting for server to finish processing...' - } - }); - case _types2.default.file.create_loading: - return _extends({}, state, { - upload: { - loading: true, - status: 'Creating file...' - } - }); - case _types2.default.file.create: - console.log('booo'); - if (state.folder.id === action.data.folder_id) { - return _extends({}, state, { - files: [action.data].concat(state.files), - upload: { - loading: false, - status: 'File created' - } - }); - } else { - return _extends({}, state, { - upload: { - loading: false, - status: 'created' - } - }); - } - case _types2.default.folder.upload_complete: - console.log(action); - if (state.folder.id === action.folder) { - return _extends({}, state, { - files: [action.files].concat(state.files), - upload: { - loading: false, - status: 'Upload complete' - } - }); - } else { - return _extends({}, state, { - upload: { - loading: false, - status: 'Upload complete' - } - }); - } case _types2.default.socket.status: return samplernnSocket(state, action.data); default: @@ -4833,6 +5045,10 @@ var _live = __webpack_require__(/*! ./live/live.reducer */ "./app/client/live/li var _live2 = _interopRequireDefault(_live); +var _dataset = __webpack_require__(/*! ./dataset/dataset.reducer */ "./app/client/dataset/dataset.reducer.js"); + +var _dataset2 = _interopRequireDefault(_dataset); + var _task = __webpack_require__(/*! ./task/task.reducer */ "./app/client/task/task.reducer.js"); var _task2 = _interopRequireDefault(_task); @@ -4841,16 +5057,17 @@ var _module = __webpack_require__(/*! ./modules/module.reducer */ "./app/client/ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +// import navReducer from './nav.reducer' var appReducer = (0, _redux.combineReducers)({ system: _system2.default, dashboard: _dashboard2.default, live: _live2.default, + dataset: _dataset2.default, task: _task2.default, router: _reactRouterRedux.routerReducer, module: _module.moduleReducer }); -// import navReducer from './nav.reducer' var history = exports.history = (0, _createBrowserHistory2.default)(); var store = exports.store = (0, _redux.createStore)(appReducer, (0, _redux.compose)((0, _redux.applyMiddleware)( // createLogger(), @@ -5637,9 +5854,13 @@ Object.defineProperty(exports, "__esModule", { value: true }); +var _system$app$folder$fi; + var _crud = __webpack_require__(/*! ./api/crud.types */ "./app/client/api/crud.types.js"); -exports.default = { +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; } + +exports.default = (_system$app$folder$fi = { system: { running_command: 'SYSTEM_RUNNING_COMMAND', command_output: 'SYSTEM_COMMAND_OUTPUT', @@ -5695,21 +5916,20 @@ exports.default = { save_frame: 'SAVE_FRAME', saving_video: 'SAVING_VIDEO', save_video: 'SAVE_VIDEO' - }, - samplernn: { - // dataset uploading - upload_files: 'UPLOAD_FILES', - file_progress: 'FILE_PROGRESS', - file_uploaded: 'FILE_UPLOADED', - fetch_url: 'FETCH_URL', - fetch_progress: 'FETCH_PROGRESS' - // queue and train - // update checkpoint settings - // reset checkpoint settings - // queue new checkpoint - // } -}; +}, _defineProperty(_system$app$folder$fi, 'dataset', { + upload_files: 'UPLOAD_FILES', + file_progress: 'FILE_PROGRESS', + file_uploaded: 'FILE_UPLOADED', + fetch_url: 'FETCH_URL', + fetch_progress: 'FETCH_PROGRESS' +}), _defineProperty(_system$app$folder$fi, 'samplernn', { + // queue and train + // update checkpoint settings + // reset checkpoint settings + // queue new checkpoint + // +}), _system$app$folder$fi); /***/ }), diff --git a/public/bundle.js.map b/public/bundle.js.map index ff42156..c3e5fc4 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/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/api/util.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/param.component.js","webpack:///./app/client/common/paramGroup.component.js","webpack:///./app/client/common/player.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/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/live.component.js","webpack:///./app/client/modules/samplernn/datasets.component.js","webpack:///./app/client/modules/samplernn/index.js","webpack:///./app/client/modules/samplernn/samplernn.reducer.js","webpack:///./app/client/socket/index.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/task/task.actions.js","webpack:///./app/client/task/task.reducer.js","webpack:///./app/client/types.js","webpack:///./app/client/util.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/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});\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 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 }).catch(function (e) {\n dispatch({ type: (0, _crud2.as_type)(type, method + '_error') });\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\", '/' + 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 try {\n var _data = 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 return;\n }\n dispatch && dispatch(_defineProperty({\n type: (0, _crud.as_type)(type, 'upload_complete'),\n data: data\n }, type, id));\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 }\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 }\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 '