From 91c47c22f2c71c524fd665f19186bb014c94ab31 Mon Sep 17 00:00:00 2001 From: Jules Laplace Date: Mon, 4 Jun 2018 04:50:27 +0200 Subject: audioplayer you can toggle --- README.md | 1 + app/client/actions.js | 2 + app/client/common/audioPlayer.component.js | 38 ---- .../common/audioPlayer/audioPlayer.actions.js | 15 ++ .../common/audioPlayer/audioPlayer.component.js | 42 +++++ .../common/audioPlayer/audioPlayer.reducer.js | 44 +++++ app/client/common/fileList.component.js | 6 +- app/client/index.jsx | 2 +- app/client/modules/samplernn/samplernn.datasets.js | 4 +- app/client/modules/samplernn/samplernn.show.js | 11 ++ app/client/store.js | 2 + app/client/types.js | 6 + app/relay/modules/samplernn.js | 6 +- app/relay/runner.js | 4 +- public/bundle.js | 200 ++++++++++++++++++--- public/bundle.js.map | 2 +- 16 files changed, 311 insertions(+), 74 deletions(-) delete mode 100644 app/client/common/audioPlayer.component.js create mode 100644 app/client/common/audioPlayer/audioPlayer.actions.js create mode 100644 app/client/common/audioPlayer/audioPlayer.component.js create mode 100644 app/client/common/audioPlayer/audioPlayer.reducer.js diff --git a/README.md b/README.md index a79c03c..814179d 100644 --- a/README.md +++ b/README.md @@ -68,6 +68,7 @@ So long as you know the ID of the folder you're talking to, you should be golden ``` curl \ + -X PUT \ -F "module=samplernn" \ -F "activity=train" \ -F "file=@woods1.jpg" \ diff --git a/app/client/actions.js b/app/client/actions.js index 9f43743..7336eab 100644 --- a/app/client/actions.js +++ b/app/client/actions.js @@ -5,6 +5,7 @@ import * as queueActions from './queue/queue.actions' import * as systemActions from './system/system.actions' import * as socketActions from './socket/socket.actions' import * as datasetActions from './dataset/dataset.actions' +import * as audioPlayerActions from './common/audioPlayer/audioPlayer.actions' import { dispatch } from './store' @@ -16,6 +17,7 @@ export default ['queue', queueActions], ['system', systemActions], ['dataset', datasetActions], + ['audioPlayer', audioPlayerActions], ]) .map(p => [p[0], bindActionCreators(p[1], dispatch)]) .concat([ diff --git a/app/client/common/audioPlayer.component.js b/app/client/common/audioPlayer.component.js deleted file mode 100644 index f10a505..0000000 --- a/app/client/common/audioPlayer.component.js +++ /dev/null @@ -1,38 +0,0 @@ -import { h, Component } from 'preact' -import { connect } from 'react-redux' -import { bindActionCreators } from 'redux' -import * as liveActions from '../live/live.actions' - -const audio = document.createElement('audio') - -class AudioPlayer extends Component { - constructor(props){ - super(props) - this.handleClick = this.handleClick.bind(this) - } - handleClick(e){ - this.props.onClick && this.props.onClick() - } - render() { - const { player={} } = this.props - return ( -
- {this.props.title} - -
- ) - } -} - -const mapStateToProps = state => ({ - player: state.audioPlayer, -}) - -const mapDispatchToProps = (dispatch, ownProps) => ({ -}) - -export default connect(mapStateToProps, mapDispatchToProps)(AudioPlayer) diff --git a/app/client/common/audioPlayer/audioPlayer.actions.js b/app/client/common/audioPlayer/audioPlayer.actions.js new file mode 100644 index 0000000..3d3ea10 --- /dev/null +++ b/app/client/common/audioPlayer/audioPlayer.actions.js @@ -0,0 +1,15 @@ + +import types from '../../types' + +export const play = (file) => { + return { type: types.audioPlayer.play, file } +} +export const pause = () => { + return { type: types.audioPlayer.pause } +} +export const resume = () => { + return { type: types.audioPlayer.resume } +} +export const enqueue = (file) => { + return { type: types.audioPlayer.enqueue, file} +} \ No newline at end of file diff --git a/app/client/common/audioPlayer/audioPlayer.component.js b/app/client/common/audioPlayer/audioPlayer.component.js new file mode 100644 index 0000000..481a685 --- /dev/null +++ b/app/client/common/audioPlayer/audioPlayer.component.js @@ -0,0 +1,42 @@ +import { h, Component } from 'preact' +import { connect } from 'react-redux' +import { bindActionCreators } from 'redux' +import * as audioPlayerActions from './audioPlayer.actions' + +class AudioPlayer extends Component { + constructor(props){ + super(props) + this.handleClick = this.handleClick.bind(this) + } + handleClick(e){ + const { audioPlayer, actions } = this.props + if (audioPlayer.playing) { + actions.pause() + } else { + actions.resume() + } + } + render() { + const { audioPlayer } = this.props + return ( +
+ {this.props.title} + +
+ ) + } +} + +const mapStateToProps = state => ({ + audioPlayer: state.audioPlayer, +}) + +const mapDispatchToProps = (dispatch, ownProps) => ({ + actions: bindActionCreators(audioPlayerActions, dispatch), +}) + +export default connect(mapStateToProps, mapDispatchToProps)(AudioPlayer) diff --git a/app/client/common/audioPlayer/audioPlayer.reducer.js b/app/client/common/audioPlayer/audioPlayer.reducer.js new file mode 100644 index 0000000..e249325 --- /dev/null +++ b/app/client/common/audioPlayer/audioPlayer.reducer.js @@ -0,0 +1,44 @@ +import types from '../../types' + +const audioPlayerInitialState = { + loading: false, + error: null, + status: '', + current: null, + index: -1, + playlist: [], +} + +const audio = document.createElement('audio') + +const audioPlayerReducer = (state = audioPlayerInitialState, action) => { + switch(action.type) { + case types.audioPlayer.play: + if (! action.file.url) { + return state + } + audio.src = action.file.url + audio.play() + return { + ...state, + playing: true, + current: action.file, + } + case types.audioPlayer.pause: + audio.pause() + return { + ...state, + playing: false, + } + case types.audioPlayer.resume: + audio.play() + return { + ...state, + playing: true, + } + default: + return state + } +} + +export default audioPlayerReducer diff --git a/app/client/common/fileList.component.js b/app/client/common/fileList.component.js index f596c8d..d060e01 100644 --- a/app/client/common/fileList.component.js +++ b/app/client/common/fileList.component.js @@ -27,7 +27,7 @@ export const FileList = props => { fields={fieldSet(fields)} className={rowClassName} linkFiles - onClick + onClick={onClick} /> }) if (! (files && files.length)) { @@ -79,8 +79,8 @@ export const FileRow = props => { {file.persisted === false ? {file.name || file.url} : (linkFiles && file.url) - ? {file.name || file.url} - : onClick(file)}>{file.name || file.url} + ? onClick && onClick(file, e)} href={file.url}>{file.name || file.url} + : onClick && onClick(file, e)}>{file.name || file.url} } } diff --git a/app/client/index.jsx b/app/client/index.jsx index b09282f..51e92df 100644 --- a/app/client/index.jsx +++ b/app/client/index.jsx @@ -8,7 +8,7 @@ import * as socket from './socket' import * as util from './util' import Header from './common/header.component' -import AudioPlayer from './common/audioPlayer.component' +import AudioPlayer from './common/audioPlayer/audioPlayer.component' import System from './system/system.component' import Dashboard from './dashboard/dashboard.component' import modules from './modules' diff --git a/app/client/modules/samplernn/samplernn.datasets.js b/app/client/modules/samplernn/samplernn.datasets.js index 08f43c2..d29cf6a 100644 --- a/app/client/modules/samplernn/samplernn.datasets.js +++ b/app/client/modules/samplernn/samplernn.datasets.js @@ -83,7 +83,7 @@ class SampleRNNDatasets extends Component { ) } renderGroups(){ - const { samplernn, onPickDataset, actions } = this.props + const { samplernn, onPickDataset, onPickFile, actions } = this.props const folder = samplernn.folder const { mapFn, sortFn } = util.sort.orderByFn('date desc') const datasets = folder.datasets.map(mapFn).sort(sortFn).map(pair => { @@ -99,6 +99,7 @@ class SampleRNNDatasets extends Component { fileListClassName='' rowClassName='input_file' options={this.fileOptions} + onClick={onPickFile} /> } @@ -127,6 +128,7 @@ class SampleRNNDatasets extends Component { files={dataset.output} orderBy='epoch desc' fields={'name date epoch size'} + onPickFile={onPickFile} /> } diff --git a/app/client/modules/samplernn/samplernn.show.js b/app/client/modules/samplernn/samplernn.show.js index 8e271fc..2d27b8d 100644 --- a/app/client/modules/samplernn/samplernn.show.js +++ b/app/client/modules/samplernn/samplernn.show.js @@ -4,6 +4,7 @@ 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 DatasetForm from '../../dataset/dataset.form' import NewDatasetForm from '../../dataset/dataset.new' @@ -35,10 +36,19 @@ class SampleRNNShow extends Component { } { + e.preventDefault() + e.stopPropagation() + console.log('picked a file', file) + this.handlePick(file) + }} /> ) } + handlePick(file){ + this.props.audioPlayer.play(file) + } } const mapStateToProps = state => ({ @@ -48,6 +58,7 @@ const mapStateToProps = state => ({ const mapDispatchToProps = (dispatch, ownProps) => ({ actions: bindActionCreators(samplernnActions, dispatch), + audioPlayer: bindActionCreators(audioPlayerActions, dispatch), }) export default connect(mapStateToProps, mapDispatchToProps)(SampleRNNShow) diff --git a/app/client/store.js b/app/client/store.js index 256d5f6..99eed29 100644 --- a/app/client/store.js +++ b/app/client/store.js @@ -11,6 +11,7 @@ import dashboardReducer from './dashboard/dashboard.reducer' import liveReducer from './live/live.reducer' import datasetReducer from './dataset/dataset.reducer' import queueReducer from './queue/queue.reducer' +import audioPlayerReducer from './common/audioPlayer/audioPlayer.reducer' import { moduleReducer } from './modules/module.reducer' const appReducer = combineReducers({ @@ -21,6 +22,7 @@ const appReducer = combineReducers({ queue: queueReducer, router: routerReducer, module: moduleReducer, + audioPlayer: audioPlayerReducer, }) export const history = createHistory() diff --git a/app/client/types.js b/app/client/types.js index c408d56..22d7ebc 100644 --- a/app/client/types.js +++ b/app/client/types.js @@ -69,6 +69,12 @@ export default { saving_video: 'SAVING_VIDEO', save_video: 'SAVE_VIDEO', }, + audioPlayer: { + play: 'AUDIO_PLAY', + pause: 'AUDIO_PAUSE', + resume: 'AUDIO_RESUME', + enqueue: 'AUDIO_ENQUEUE', + }, dataset: { upload_files: 'UPLOAD_FILES', file_progress: 'FILE_PROGRESS', diff --git a/app/relay/modules/samplernn.js b/app/relay/modules/samplernn.js index 3962755..d3b5012 100644 --- a/app/relay/modules/samplernn.js +++ b/app/relay/modules/samplernn.js @@ -6,6 +6,8 @@ const cwd = process.env.SAMPLERNN_CWD || path.join(process.env.HOME, 'code/' + n const fetch = { type: 'perl', script: 'get.pl', + // here i need to bridge again... get the filename that comes back from youtube-dl + // and tell the cortex that URL -> fn and add the filename!s params: (task) => { console.log(task) return [ task.opt.url ] @@ -26,7 +28,7 @@ const train = { '--keep_old_checkpoints', task.opt.keep_old_checkpoints ? 'True' : 'False', ] }, - onComplete: publish, + after: publish, } const generate = { type: 'pytorch', @@ -42,7 +44,7 @@ const generate = { '--keep_old_checkpoints', task.opt.keep_old_checkpoints ? 'True' : 'False', ] }, - onComplete: publish, + after: publish, } const publish = { type: 'perl', diff --git a/app/relay/runner.js b/app/relay/runner.js index 8231e3b..a8e26af 100644 --- a/app/relay/runner.js +++ b/app/relay/runner.js @@ -272,8 +272,8 @@ export function run_task_with_activity(task, module, activity, preempt, watch) { set_connected(false) // remove task from queue // queue.remove_task(task) - if (activity.onComplete) { - return run_task_with_activity(task, module, activity.onComplete, preempt, watch) + if (activity.after) { + return run_task_with_activity(task, module, activity.after, preempt, watch) } return run_next_task() } diff --git a/public/bundle.js b/public/bundle.js index c5179d9..08b82ff 100644 --- a/public/bundle.js +++ b/public/bundle.js @@ -109,13 +109,17 @@ var _dataset = __webpack_require__(/*! ./dataset/dataset.actions */ "./app/clien var datasetActions = _interopRequireWildcard(_dataset); +var _audioPlayer = __webpack_require__(/*! ./common/audioPlayer/audioPlayer.actions */ "./app/client/common/audioPlayer/audioPlayer.actions.js"); + +var audioPlayerActions = _interopRequireWildcard(_audioPlayer); + var _store = __webpack_require__(/*! ./store */ "./app/client/store.js"); 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; } } exports.default = Object.keys(_api.actions).map(function (a) { return [a, _api.actions[a]]; -}).concat([['live', liveActions], ['queue', queueActions], ['system', systemActions], ['dataset', datasetActions]]).map(function (p) { +}).concat([['live', liveActions], ['queue', queueActions], ['system', systemActions], ['dataset', datasetActions], ['audioPlayer', audioPlayerActions]]).map(function (p) { return [p[0], (0, _redux.bindActionCreators)(p[1], _store.dispatch)]; }).concat([['socket', socketActions]]).reduce(function (a, b) { return (a[b[0]] = b[1]) && a; @@ -841,10 +845,46 @@ function parseTumblrPost(media_list, post) { /***/ }), -/***/ "./app/client/common/audioPlayer.component.js": -/*!****************************************************!*\ - !*** ./app/client/common/audioPlayer.component.js ***! - \****************************************************/ +/***/ "./app/client/common/audioPlayer/audioPlayer.actions.js": +/*!**************************************************************!*\ + !*** ./app/client/common/audioPlayer/audioPlayer.actions.js ***! + \**************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.enqueue = exports.resume = exports.pause = exports.play = undefined; + +var _types = __webpack_require__(/*! ../../types */ "./app/client/types.js"); + +var _types2 = _interopRequireDefault(_types); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var play = exports.play = function play(file) { + return { type: _types2.default.audioPlayer.play, file: file }; +}; +var pause = exports.pause = function pause() { + return { type: _types2.default.audioPlayer.pause }; +}; +var resume = exports.resume = function resume() { + return { type: _types2.default.audioPlayer.resume }; +}; +var enqueue = exports.enqueue = function enqueue(file) { + return { type: _types2.default.audioPlayer.enqueue, file: file }; +}; + +/***/ }), + +/***/ "./app/client/common/audioPlayer/audioPlayer.component.js": +/*!****************************************************************!*\ + !*** ./app/client/common/audioPlayer/audioPlayer.component.js ***! + \****************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { @@ -863,9 +903,9 @@ var _reactRedux = __webpack_require__(/*! react-redux */ "./node_modules/react-r var _redux = __webpack_require__(/*! redux */ "./node_modules/redux/es/redux.js"); -var _live = __webpack_require__(/*! ../live/live.actions */ "./app/client/live/live.actions.js"); +var _audioPlayer = __webpack_require__(/*! ./audioPlayer.actions */ "./app/client/common/audioPlayer/audioPlayer.actions.js"); -var liveActions = _interopRequireWildcard(_live); +var audioPlayerActions = _interopRequireWildcard(_audioPlayer); 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; } } @@ -875,8 +915,6 @@ 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 audio = document.createElement('audio'); - var AudioPlayer = function (_Component) { _inherits(AudioPlayer, _Component); @@ -892,13 +930,20 @@ var AudioPlayer = function (_Component) { _createClass(AudioPlayer, [{ key: 'handleClick', value: function handleClick(e) { - this.props.onClick && this.props.onClick(); + var _props = this.props, + audioPlayer = _props.audioPlayer, + actions = _props.actions; + + if (audioPlayer.playing) { + actions.pause(); + } else { + actions.resume(); + } } }, { key: 'render', value: function render() { - var _props$player = this.props.player, - player = _props$player === undefined ? {} : _props$player; + var audioPlayer = this.props.audioPlayer; return (0, _preact.h)( 'div', @@ -913,7 +958,7 @@ var AudioPlayer = function (_Component) { { onClick: this.handleClick }, - player.playing ? '>' : 'pause' + audioPlayer.playing ? '>' : 'pause' ) ); } @@ -924,18 +969,87 @@ var AudioPlayer = function (_Component) { var mapStateToProps = function mapStateToProps(state) { return { - player: state.audioPlayer + audioPlayer: state.audioPlayer }; }; var mapDispatchToProps = function mapDispatchToProps(dispatch, ownProps) { - return {}; + return { + actions: (0, _redux.bindActionCreators)(audioPlayerActions, dispatch) + }; }; exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(AudioPlayer); /***/ }), +/***/ "./app/client/common/audioPlayer/audioPlayer.reducer.js": +/*!**************************************************************!*\ + !*** ./app/client/common/audioPlayer/audioPlayer.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 audioPlayerInitialState = { + loading: false, + error: null, + status: '', + current: null, + index: -1, + playlist: [] +}; + +var audio = document.createElement('audio'); + +var audioPlayerReducer = function audioPlayerReducer() { + var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : audioPlayerInitialState; + var action = arguments[1]; + + switch (action.type) { + case _types2.default.audioPlayer.play: + if (!action.file.url) { + return state; + } + audio.src = action.file.url; + audio.play(); + return _extends({}, state, { + playing: true, + current: action.file + }); + case _types2.default.audioPlayer.pause: + audio.pause(); + return _extends({}, state, { + playing: false + }); + case _types2.default.audioPlayer.resume: + audio.play(); + return _extends({}, state, { + playing: true + }); + default: + return state; + } +}; + +exports.default = audioPlayerReducer; + +/***/ }), + /***/ "./app/client/common/button.component.js": /*!***********************************************!*\ !*** ./app/client/common/button.component.js ***! @@ -1091,7 +1205,7 @@ var FileList = exports.FileList = function FileList(props) { fields: fieldSet(fields), className: rowClassName, linkFiles: true, - onClick: true + onClick: onClick }); }); if (!(files && files.length)) { @@ -1167,12 +1281,14 @@ var FileRow = exports.FileRow = function FileRow(props) { file.name || file.url ) : linkFiles && file.url ? (0, _preact.h)( 'a', - { target: '_blank', href: file.url }, + { target: '_blank', onClick: function onClick(e) { + return _onClick && _onClick(file, e); + }, href: file.url }, file.name || file.url ) : (0, _preact.h)( 'span', - { 'class': 'link', onClick: function onClick() { - return _onClick(file); + { 'class': 'link', onClick: function onClick(e) { + return _onClick && _onClick(file, e); } }, file.name || file.url ) @@ -3146,7 +3262,7 @@ var _header = __webpack_require__(/*! ./common/header.component */ "./app/client var _header2 = _interopRequireDefault(_header); -var _audioPlayer = __webpack_require__(/*! ./common/audioPlayer.component */ "./app/client/common/audioPlayer.component.js"); +var _audioPlayer = __webpack_require__(/*! ./common/audioPlayer/audioPlayer.component */ "./app/client/common/audioPlayer/audioPlayer.component.js"); var _audioPlayer2 = _interopRequireDefault(_audioPlayer); @@ -5207,6 +5323,7 @@ var SampleRNNDatasets = function (_Component) { var _props3 = this.props, samplernn = _props3.samplernn, onPickDataset = _props3.onPickDataset, + onPickFile = _props3.onPickFile, actions = _props3.actions; var folder = samplernn.folder; @@ -5231,7 +5348,8 @@ var SampleRNNDatasets = function (_Component) { className: 'input_files', fileListClassName: '', rowClassName: 'input_file', - options: _this3.fileOptions + options: _this3.fileOptions, + onClick: onPickFile }) ), (0, _preact.h)( @@ -5297,7 +5415,8 @@ var SampleRNNDatasets = function (_Component) { !!dataset.output.length && (0, _preact.h)(_fileList.FileList, { files: dataset.output, orderBy: 'epoch desc', - fields: 'name date epoch size' + fields: 'name date epoch size', + onPickFile: onPickFile }) ), _this3.props.afterRow && _this3.props.afterRow(dataset) @@ -6436,6 +6555,10 @@ var _samplernn = __webpack_require__(/*! ./samplernn.actions */ "./app/client/mo var samplernnActions = _interopRequireWildcard(_samplernn); +var _audioPlayer = __webpack_require__(/*! ../../common/audioPlayer/audioPlayer.actions */ "./app/client/common/audioPlayer/audioPlayer.actions.js"); + +var audioPlayerActions = _interopRequireWildcard(_audioPlayer); + var _dataset = __webpack_require__(/*! ../../dataset/dataset.form */ "./app/client/dataset/dataset.form.js"); var _dataset2 = _interopRequireDefault(_dataset); @@ -6477,6 +6600,8 @@ var SampleRNNShow = function (_Component) { _createClass(SampleRNNShow, [{ key: 'render', value: function render() { + var _this2 = this; + var _props = this.props, samplernn = _props.samplernn, match = _props.match, @@ -6504,10 +6629,21 @@ var SampleRNNShow = function (_Component) { canUpload: true, canAddURL: true }), (0, _preact.h)(_samplernn3.default, { - id: this.props.match.params.id || localStorage.getItem('samplernn.last_id') + id: this.props.match.params.id || localStorage.getItem('samplernn.last_id'), + onPickFile: function onPickFile(file, e) { + e.preventDefault(); + e.stopPropagation(); + console.log('picked a file', file); + _this2.handlePick(file); + } }) ); } + }, { + key: 'handlePick', + value: function handlePick(file) { + this.props.audioPlayer.play(file); + } }]); return SampleRNNShow; @@ -6522,7 +6658,8 @@ var mapStateToProps = function mapStateToProps(state) { var mapDispatchToProps = function mapDispatchToProps(dispatch, ownProps) { return { - actions: (0, _redux.bindActionCreators)(samplernnActions, dispatch) + actions: (0, _redux.bindActionCreators)(samplernnActions, dispatch), + audioPlayer: (0, _redux.bindActionCreators)(audioPlayerActions, dispatch) }; }; @@ -7193,11 +7330,14 @@ var _queue = __webpack_require__(/*! ./queue/queue.reducer */ "./app/client/queu var _queue2 = _interopRequireDefault(_queue); +var _audioPlayer = __webpack_require__(/*! ./common/audioPlayer/audioPlayer.reducer */ "./app/client/common/audioPlayer/audioPlayer.reducer.js"); + +var _audioPlayer2 = _interopRequireDefault(_audioPlayer); + var _module = __webpack_require__(/*! ./modules/module.reducer */ "./app/client/modules/module.reducer.js"); 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, @@ -7205,9 +7345,11 @@ var appReducer = (0, _redux.combineReducers)({ dataset: _dataset2.default, queue: _queue2.default, router: _reactRouterRedux.routerReducer, - module: _module.moduleReducer + module: _module.moduleReducer, + audioPlayer: _audioPlayer2.default }); +// 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(), @@ -7939,6 +8081,12 @@ exports.default = (_system$app$folder$fi = { save_frame: 'SAVE_FRAME', saving_video: 'SAVING_VIDEO', save_video: 'SAVE_VIDEO' + }, + audioPlayer: { + play: 'AUDIO_PLAY', + pause: 'AUDIO_PAUSE', + resume: 'AUDIO_RESUME', + enqueue: 'AUDIO_ENQUEUE' } }, _defineProperty(_system$app$folder$fi, 'dataset', { upload_files: 'UPLOAD_FILES', diff --git a/public/bundle.js.map b/public/bundle.js.map index f2553b5..c63f0b8 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.component.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/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/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.inspect.js","webpack:///./app/client/modules/samplernn/samplernn.loss.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/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.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 _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]]).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 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 reject(e);\n return;\n }\n dispatch && dispatch(_defineProperty({\n type: (0, _crud.as_type)(type, 'upload_complete'),\n data: data\n }, type, id));\n resolve(data);\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 '