diff --git a/scripts/celerity_mapper.php b/scripts/celerity_mapper.php index a120f03a92..e788106224 100755 --- a/scripts/celerity_mapper.php +++ b/scripts/celerity_mapper.php @@ -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', diff --git a/webroot/rsrc/js/application/core/DragAndDropFileUpload.js b/webroot/rsrc/js/application/core/DragAndDropFileUpload.js index 316b801def..531d04ceda 100644 --- a/webroot/rsrc/js/application/core/DragAndDropFileUpload.js +++ b/webroot/rsrc/js/application/core/DragAndDropFileUpload.js @@ -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() diff --git a/webroot/rsrc/js/application/core/PasteFileUpload.js b/webroot/rsrc/js/application/core/PasteFileUpload.js deleted file mode 100644 index d3e7c79703..0000000000 --- a/webroot/rsrc/js/application/core/PasteFileUpload.js +++ /dev/null @@ -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 - } -}); diff --git a/webroot/rsrc/js/application/core/behavior-drag-and-drop-textarea.js b/webroot/rsrc/js/application/core/behavior-drag-and-drop-textarea.js index 0deff3dda7..352c617a96 100644 --- a/webroot/rsrc/js/application/core/behavior-drag-and-drop-textarea.js +++ b/webroot/rsrc/js/application/core/behavior-drag-and-drop-textarea.js @@ -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(); - } - });