(function(global){ let DropUploader = React.createClass({ propTypes: { onDismiss: React.PropTypes.func }, getInitialState: function() { return {}; }, onDrop: function(files){ let contextNode = global.pydio.getContextHolder().getContextNode(); UploaderModel.Store.getInstance().handleDropEventResults(null, files, contextNode); }, onFolderPicked: function(files){ let contextNode = global.pydio.getContextHolder().getContextNode(); UploaderModel.Store.getInstance().handleFolderPickerResult(files, contextNode); }, start: function(e){ e.preventDefault(); UploaderModel.Store.getInstance().processNext(); }, clear: function(e){ e.preventDefault(); UploaderModel.Store.getInstance().clearAll(); }, toggleOptions: function(e){ if (e.preventDefault) e.preventDefault(); let crtOptions = this.state && this.state.options ? this.state.options : false; this.setState({ options: !crtOptions, optionsAnchorEl: e.currentTarget, }); }, openFilePicker: function(e){ e.preventDefault(); this.refs.dropzone.open(); }, openFolderPicker: function(e){ e.preventDefault(); this.refs.dropzone.openFolderPicker(); }, render: function(){ let optionsEl; let messages = global.pydio.MessageHash; const connectDropTarget = this.props.connectDropTarget || (c => {return c}); const {options} = this.state; let dismiss = function(e){ this.toggleOptions(e); if(UploaderModel.Configs.getInstance().getOptionAsBool('DEFAULT_AUTO_START', 'upload_auto_send', true)){ UploaderModel.Store.getInstance().processNext(); } }.bind(this); optionsEl = let folderButton, startButton; let e = global.document.createElement('input'); e.setAttribute('type', 'file'); if('webkitdirectory' in e){ folderButton = ; } e = null; let configs = UploaderModel.Configs.getInstance(); if(!configs.getOptionAsBool('DEFAULT_AUTO_START', 'upload_auto_send', true)){ startButton = } return connectDropTarget(
{folderButton} {startButton}
{optionsEl}
); } }); DropUploader = Pydio.requireLib('hoc').dropProvider(DropUploader); const TransferFile = React.createClass({ propTypes: { item: React.PropTypes.object.isRequired, className:React.PropTypes.string }, componentDidMount: function(){ this.props.item.observe('progress', function(value){ this.setState({progress: value}); }.bind(this)); this.props.item.observe('status', function(value){ this.setState({status: value}); }.bind(this)); }, getInitialState: function(){ return { progress: this.props.item.getProgress(), status: this.props.item.getStatus() }; }, abortTransfer: function(){ UploaderModel.Store.getInstance().stopOrRemoveItem(this.props.item); }, render: function(){ let style, relativeMessage; const messageIds = { "new" : 433, "loading":434, "loaded":435, "error":436 }; let statusMessage = this.props.item.getStatus(); let stopButton; if(statusMessage === 'loading'){ stopButton = ; }else{ stopButton = ; } if(statusMessage === 'error' && this.props.item.getErrorMessage()){ statusMessage = this.props.item.getErrorMessage(); } if(global.pydio.MessageHash[messageIds[statusMessage]]){ statusMessage = global.pydio.MessageHash[messageIds[statusMessage]]; } if(this.props.item.getRelativePath()){ relativeMessage = {this.props.item.getRelativePath()}; } if(this.state && this.state.progress){ style = {width: this.state.progress + '%'}; } return (
{this.props.item.getFile().name} {relativeMessage} {statusMessage} {stopButton}
); } }); const TransferFolder = React.createClass({ propTypes: { item: React.PropTypes.object.isRequired }, render: function(){ let statusMessage; if(this.props.item.getStatus() === 'loaded'){ statusMessage = global.pydio.MessageHash['html_uploader.13']; } return (
{this.props.item.getPath()} {statusMessage}
); } }); const TransfersList = React.createClass({ propTypes: { onDismiss: React.PropTypes.func }, componentDidMount: function(){ let store = UploaderModel.Store.getInstance(); this._storeObserver = function(){ if(!this.isMounted()) return; this.setState({items: store.getItems()}); }.bind(this); store.observe("update", this._storeObserver); store.observe("auto_close", function(){ if(this.props.onDismiss){ this.props.onDismiss(); } }.bind(this)); this.setState({items: store.getItems()}); }, componentWillUnmount: function(){ if(this._storeObserver){ UploaderModel.Store.getInstance().stopObserving("update", this._storeObserver); UploaderModel.Store.getInstance().stopObserving("auto_close"); } }, renderSection: function(accumulator, items, title = "", className=""){ if(title && items.length){ accumulator.push(
{title}
); } items.sort(function(a, b){ let aType = a instanceof UploaderModel.FolderItem? 'folder' : 'file'; let bType = b instanceof UploaderModel.FolderItem? 'folder' : 'file'; if(aType === bType){ return 0; }else{ return aType === 'folder' ? -1 : 1; } }); items.forEach(function(f){ if(f instanceof UploaderModel.FolderItem){ accumulator.push( ); }else{ accumulator.push( ); } }); }, render: function(){ let items = []; if(this.state && this.state.items){ this.renderSection(items, this.state.items.processing, global.pydio.MessageHash['html_uploader.14'], 'section-processing'); this.renderSection(items, this.state.items.pending, global.pydio.MessageHash['html_uploader.15'], 'section-pending'); this.renderSection(items, this.state.items.errors, global.pydio.MessageHash['html_uploader.23'], 'section-errors'); this.renderSection(items, this.state.items.processed, global.pydio.MessageHash['html_uploader.16'], 'section-processed'); } return (
{items}
) } }); const UploadOptionsPane = React.createClass({ propTypes: { open: React.PropTypes.boolean, anchorEl: React.PropTypes.string, onDismiss: React.PropTypes.func.isRequired }, getInitialState: function(){ let configs = UploaderModel.Configs.getInstance(); return { configs: configs }; }, updateField: function(fName, event){ if(fName === 'autostart'){ let toggleStart = this.state.configs.getOptionAsBool('DEFAULT_AUTO_START', 'upload_auto_send', true); toggleStart = !toggleStart; this.state.configs.updateOption('upload_auto_send', toggleStart, true); }else if(fName === 'autoclose'){ let toggleStart = this.state.configs.getOptionAsBool('DEFAULT_AUTO_CLOSE', 'upload_auto_close', true); toggleStart = !toggleStart; this.state.configs.updateOption('upload_auto_close', toggleStart, true); }else if(fName === 'existing'){ this.state.configs.updateOption('upload_existing', event.target.getSelectedValue()); }else if(fName === 'show_processed'){ let toggleShowProcessed = this.state.configs.getOptionAsBool('UPLOAD_SHOW_PROCESSED', 'upload_show_processed', false); toggleShowProcessed = !toggleShowProcessed; this.state.configs.updateOption('upload_show_processed', toggleShowProcessed, true); } this.setState({random: Math.random()}); }, radioChange: function(e, newValue){ this.state.configs.updateOption('upload_existing', newValue); this.setState({random: Math.random()}); }, render: function(){ let maxUploadMessage if(!global.pydio.getPluginConfigs('mq').get('UPLOAD_ACTIVE')){ let maxUpload = this.state.configs.getOption('UPLOAD_MAX_SIZE'); maxUploadMessage = global.pydio.MessageHash[282] + ': ' + PathUtils.roundFileSize(maxUpload, ''); maxUploadMessage =
{maxUploadMessage}
; } let toggleStart = this.state.configs.getOptionAsBool('DEFAULT_AUTO_START', 'upload_auto_send'); let toggleClose = this.state.configs.getOptionAsBool('DEFAULT_AUTO_CLOSE', 'upload_auto_close'); let toggleShowProcessed = this.state.configs.getOptionAsBool('UPLOAD_SHOW_PROCESSED', 'upload_show_processed', false); let overwriteType = this.state.configs.getOption('DEFAULT_EXISTING', 'upload_existing'); return ( } /> } /> } /> {global.pydio.MessageHash['html_uploader.18']} ); } }); global.UploaderView = { DropUploader, TransferFile, TransfersList, TransferFolder }; })(window);