1
0
mirror of https://github.com/ascribe/onion.git synced 2025-01-03 10:25:08 +01:00

Merged in AD-947-fileuploader-button-does-not-work (pull request #100)

Remove stopPropagation for event in FileDragAndDrop
This commit is contained in:
TimDaubenschuetz 2015-10-19 14:53:02 +02:00
commit 5a35e40a76
2 changed files with 36 additions and 19 deletions

View File

@ -12,6 +12,7 @@ import { getLangText } from '../../../utils/lang_utils';
// Taken from: https://github.com/fedosejev/react-file-drag-and-drop // Taken from: https://github.com/fedosejev/react-file-drag-and-drop
let FileDragAndDrop = React.createClass({ let FileDragAndDrop = React.createClass({
propTypes: { propTypes: {
className: React.PropTypes.string,
onDrop: React.PropTypes.func.isRequired, onDrop: React.PropTypes.func.isRequired,
onDragOver: React.PropTypes.func, onDragOver: React.PropTypes.func,
onInactive: React.PropTypes.func, onInactive: React.PropTypes.func,
@ -108,6 +109,7 @@ let FileDragAndDrop = React.createClass({
}, },
handleOnClick() { handleOnClick() {
let evt;
// when multiple is set to false and the user already uploaded a piece, // when multiple is set to false and the user already uploaded a piece,
// do not propagate event // do not propagate event
if(this.props.dropzoneInactive) { if(this.props.dropzoneInactive) {
@ -119,16 +121,18 @@ let FileDragAndDrop = React.createClass({
return; return;
} }
// Firefox only recognizes the simulated mouse click if bubbles is set to true, try {
// but since Google Chrome propagates the event much further than needed, we evt = new MouseEvent('click', {
// need to stop propagation as soon as the event is created view: window,
var evt = new MouseEvent('click', { bubbles: true,
view: window, cancelable: true
bubbles: true, });
cancelable: true } catch(e) {
}); // For browsers that do not support the new MouseEvent syntax
evt = document.createEvent('MouseEvents');
evt.initMouseEvent('click', true, true, window, 0, 0, 0, 80, 20, false, false, false, false, 0, null);
}
evt.stopPropagation();
this.refs.fileinput.getDOMNode().dispatchEvent(evt); this.refs.fileinput.getDOMNode().dispatchEvent(evt);
}, },
@ -160,10 +164,10 @@ let FileDragAndDrop = React.createClass({
<div className="file-drag-and-drop-hashing-dialog"> <div className="file-drag-and-drop-hashing-dialog">
<p>{getLangText('Computing hash(es)... This may take a few minutes.')}</p> <p>{getLangText('Computing hash(es)... This may take a few minutes.')}</p>
<p> <p>
<a onClick={this.props.handleCancelHashing}> {getLangText('Cancel hashing')}</a> <a onClick={handleCancelHashing}> {getLangText('Cancel hashing')}</a>
</p> </p>
<ProgressBar <ProgressBar
now={Math.ceil(this.props.hashingProgress)} now={Math.ceil(hashingProgress)}
label="%(percent)s%" label="%(percent)s%"
className="ascribe-progress-bar"/> className="ascribe-progress-bar"/>
</div> </div>
@ -191,12 +195,23 @@ let FileDragAndDrop = React.createClass({
handleResumeFile={this.handleResumeFile} handleResumeFile={this.handleResumeFile}
areAssetsDownloadable={areAssetsDownloadable} areAssetsDownloadable={areAssetsDownloadable}
areAssetsEditable={areAssetsEditable}/> areAssetsEditable={areAssetsEditable}/>
{/*
Opera doesn't trigger simulated click events
if the targeted input has `display:none` set.
Which means we need to set its visibility to hidden
instead of using `display:none`.
See:
- http://stackoverflow.com/questions/12880604/jquery-triggerclick-not-working-on-opera-if-the-element-is-not-displayed
*/}
<input <input
multiple={multiple} multiple={multiple}
ref="fileinput" ref="fileinput"
type="file" type="file"
style={{ style={{
display: 'none', visibility: 'hidden',
position: 'absolute',
top: 0,
height: 0, height: 0,
width: 0 width: 0
}} }}

View File

@ -57,12 +57,14 @@ class Requests {
}); });
} }
handleError(err) { handleError(url) {
if (err instanceof TypeError) { return (err) => {
throw new Error('Server did not respond to the request. (Not even displayed a 500)'); if (err instanceof TypeError) {
} else { throw new Error('For: ' + url + ' - Server did not respond to the request. (Not even displayed a 500)');
throw err; } else {
} throw err;
}
};
} }
getUrl(url) { getUrl(url) {
@ -118,7 +120,7 @@ class Requests {
merged.method = verb; merged.method = verb;
return fetch(url, merged) return fetch(url, merged)
.then(this.unpackResponse) .then(this.unpackResponse)
.catch(this.handleError); .catch(this.handleError(url));
} }
get(url, params) { get(url, params) {