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:
commit
5a35e40a76
@ -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
|
||||||
}}
|
}}
|
||||||
|
@ -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) {
|
||||||
|
Loading…
Reference in New Issue
Block a user