1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-22 14:52:41 +01:00

Consolidate file pasting code

Summary: Fixes T2861. This used to work but I think I broke it when I made the notification popup thing work. Merge it into the drag-and-drop since 90% of the code is the same anyway.

Test Plan: Pasted files into Chrome and got uploads. This doesn't work in Safari and Firefox; as far as I know it isn't supported in those browers.

Reviewers: blc, btrahan, chad

Reviewed By: btrahan

CC: aran

Maniphest Tasks: T2861

Differential Revision: https://secure.phabricator.com/D5530
This commit is contained in:
epriestley 2013-04-02 09:52:31 -07:00
parent a97968b9ff
commit c73e888ad4
4 changed files with 26 additions and 78 deletions

View file

@ -33,7 +33,6 @@ $package_spec = array(
'javelin-behavior-refresh-csrf',
'javelin-behavior-phabricator-watch-anchor',
'javelin-behavior-phabricator-autofocus',
'phabricator-paste-file-upload',
'phabricator-menu-item',
'phabricator-dropdown-menu',
'javelin-behavior-phabricator-oncopy',

View file

@ -28,6 +28,11 @@ JX.install('PhabricatorDragAndDropFileUpload', {
// TODO: Is there a better capability test for this? This seems okay in
// Safari, Firefox and Chrome.
return !!window.FileList;
},
isPasteSupported : function() {
// TODO: Needs to check if event.clipboardData is available.
// Works in Chrome, doesn't work in Firefox 10.
return !!window.FileList;
}
},
@ -109,6 +114,27 @@ JX.install('PhabricatorDragAndDropFileUpload', {
// Force depth to 0.
this._updateDepth(-this._depth);
}));
if (JX.PhabricatorDragAndDropFileUpload.isPasteSupported()) {
JX.DOM.listen(
this._node,
'paste',
null,
JX.bind(this, function(e) {
var clipboardData = e.getRawEvent().clipboardData;
if (!clipboardData) {
return;
}
for (var ii = 0; ii < clipboardData.items.length; ii++) {
var item = clipboardData.items[ii];
if (!/^image\//.test(item.type)) {
continue;
}
this._sendRequest(item.getAsFile());
}
}));
}
},
_sendRequest : function(spec) {
var file = new JX.PhabricatorFileUpload()

View file

@ -1,69 +0,0 @@
/**
* @requires javelin-install
* javelin-util
* javelin-request
* javelin-dom
* javelin-uri
* @provides phabricator-paste-file-upload
* @javelin
*/
JX.install('PhabricatorPasteFileUpload', {
construct : function(node) {
this._node = node;
},
events : ['willUpload', 'didUpload'],
statics : {
isSupported : function() {
// TODO: Needs to check if event.clipboardData is available.
// Works in Chrome, doesn't work in Firefox 10.
return !!window.FileList;
}
},
members : {
_node : null,
start : function() {
JX.DOM.listen(
this._node,
'paste',
null,
JX.bind(this, function(e) {
var clipboardData = e.getRawEvent().clipboardData;
if (!clipboardData) {
return;
}
for (var ii = 0; ii < clipboardData.types.length; ii++) {
if (/^image\//.test(clipboardData.types[ii])) {
var file = clipboardData.items[ii].getAsFile();
this.invoke('willUpload', file);
var up_uri = JX.$U(this.getURI())
.setQueryParam('name', 'clipboard.png')
.setQueryParam('__upload__', 1)
.toString();
new JX.Request(up_uri, JX.bind(this, function(r) {
this.invoke('didUpload', r);
}))
.setRawData(file)
.send();
e.kill();
break;
}
}
}));
}
},
properties: {
URI : null
}
});

View file

@ -3,7 +3,6 @@
* @requires javelin-behavior
* javelin-dom
* phabricator-drag-and-drop-file-upload
* phabricator-paste-file-upload
* phabricator-textareautils
*/
@ -39,12 +38,5 @@ JX.behavior('aphront-drag-and-drop-textarea', function(config) {
drop.start();
}
if (JX.PhabricatorPasteFileUpload.isSupported()) {
var paste = new JX.PhabricatorPasteFileUpload(target)
.setURI(config.uri);
paste.listen('didUpload', onupload);
paste.start();
}
});