| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 'use strict'; | 5 'use strict'; |
| 6 | 6 |
| 7 /** | 7 /** |
| 8 * Global (placed in the window object) variable name to hold internal | 8 * Global (placed in the window object) variable name to hold internal |
| 9 * file dragging information. Needed to show visual feedback while dragging | 9 * file dragging information. Needed to show visual feedback while dragging |
| 10 * since DataTransfer object is in protected state. Reachable from other | 10 * since DataTransfer object is in protected state. Reachable from other |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 158 this.onPaste_.bind(this)); | 158 this.onPaste_.bind(this)); |
| 159 this.copyCommand_ = this.document_.querySelector('command#copy'); | 159 this.copyCommand_ = this.document_.querySelector('command#copy'); |
| 160 }, | 160 }, |
| 161 | 161 |
| 162 /** | 162 /** |
| 163 * Write the current selection to system clipboard. | 163 * Write the current selection to system clipboard. |
| 164 * | 164 * |
| 165 * @this {FileTransferController} | 165 * @this {FileTransferController} |
| 166 * @param {DataTransfer} dataTransfer DataTransfer from the event. | 166 * @param {DataTransfer} dataTransfer DataTransfer from the event. |
| 167 * @param {string} effectAllowed Value must be valid for the | 167 * @param {string} effectAllowed Value must be valid for the |
| 168 * |dataTransfer.effectAllowed| property ('move', 'copy', 'copyMove'). | 168 * |dataTransfer.effectAllowed| property. |
| 169 */ | 169 */ |
| 170 cutOrCopy_: function(dataTransfer, effectAllowed) { | 170 cutOrCopy_: function(dataTransfer, effectAllowed) { |
| 171 // Existence of the volumeInfo is checked in canXXX methods. | 171 // Existence of the volumeInfo is checked in canXXX methods. |
| 172 var volumeInfo = this.volumeManager_.getVolumeInfo( | 172 var volumeInfo = this.volumeManager_.getVolumeInfo( |
| 173 this.currentDirectoryContentEntry); | 173 this.currentDirectoryContentEntry); |
| 174 // Tag to check it's filemanager data. | 174 // Tag to check it's filemanager data. |
| 175 dataTransfer.setData('fs/tag', 'filemanager-data'); | 175 dataTransfer.setData('fs/tag', 'filemanager-data'); |
| 176 dataTransfer.setData('fs/sourceRootURL', | 176 dataTransfer.setData('fs/sourceRootURL', |
| 177 volumeInfo.fileSystem.root.toURL()); | 177 volumeInfo.fileSystem.root.toURL()); |
| 178 var sourceURLs = util.entriesToURLs(this.selectedEntries_); | 178 var sourceURLs = util.entriesToURLs(this.selectedEntries_); |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 322 * |dataTransfer.effectAllowed|. | 322 * |dataTransfer.effectAllowed|. |
| 323 * @return {string} Either "copy" or "move". | 323 * @return {string} Either "copy" or "move". |
| 324 */ | 324 */ |
| 325 paste: function(dataTransfer, opt_destinationEntry, opt_effect) { | 325 paste: function(dataTransfer, opt_destinationEntry, opt_effect) { |
| 326 var sourceURLs = dataTransfer.getData('fs/sources') ? | 326 var sourceURLs = dataTransfer.getData('fs/sources') ? |
| 327 dataTransfer.getData('fs/sources').split('\n') : []; | 327 dataTransfer.getData('fs/sources').split('\n') : []; |
| 328 // effectAllowed set in copy/paste handlers stay uninitialized. DnD handlers | 328 // effectAllowed set in copy/paste handlers stay uninitialized. DnD handlers |
| 329 // work fine. | 329 // work fine. |
| 330 var effectAllowed = dataTransfer.effectAllowed !== 'uninitialized' ? | 330 var effectAllowed = dataTransfer.effectAllowed !== 'uninitialized' ? |
| 331 dataTransfer.effectAllowed : dataTransfer.getData('fs/effectallowed'); | 331 dataTransfer.effectAllowed : dataTransfer.getData('fs/effectallowed'); |
| 332 var toMove = effectAllowed === 'move' || | 332 var toMove = util.isDropEffectAllowed(effectAllowed, 'move') && |
| 333 (effectAllowed === 'copyMove' && opt_effect === 'move'); | 333 (!util.isDropEffectAllowed(effectAllowed, 'copy') || |
| 334 opt_effect === 'move'); |
| 334 var destinationEntry = | 335 var destinationEntry = |
| 335 opt_destinationEntry || this.currentDirectoryContentEntry; | 336 opt_destinationEntry || this.currentDirectoryContentEntry; |
| 336 var entries; | 337 var entries; |
| 337 var failureUrls; | 338 var failureUrls; |
| 338 | 339 |
| 339 util.URLsToEntries(sourceURLs). | 340 util.URLsToEntries(sourceURLs). |
| 340 then(function(result) { | 341 then(function(result) { |
| 341 entries = result.entries; | 342 entries = result.entries; |
| 342 failureUrls = result.failureUrls; | 343 failureUrls = result.failureUrls; |
| 343 // Check if cross share is needed or not. | 344 // Check if cross share is needed or not. |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 482 if (!this.selectedEntries_.length) { | 483 if (!this.selectedEntries_.length) { |
| 483 event.preventDefault(); | 484 event.preventDefault(); |
| 484 return; | 485 return; |
| 485 } | 486 } |
| 486 | 487 |
| 487 var dt = event.dataTransfer; | 488 var dt = event.dataTransfer; |
| 488 var canCopy = this.canCopyOrDrag_(dt); | 489 var canCopy = this.canCopyOrDrag_(dt); |
| 489 var canCut = this.canCutOrDrag_(dt); | 490 var canCut = this.canCutOrDrag_(dt); |
| 490 if (canCopy || canCut) { | 491 if (canCopy || canCut) { |
| 491 if (canCopy && canCut) { | 492 if (canCopy && canCut) { |
| 492 this.cutOrCopy_(dt, 'copyMove'); | 493 this.cutOrCopy_(dt, 'all'); |
| 493 } else if (canCopy) { | 494 } else if (canCopy) { |
| 494 this.cutOrCopy_(dt, 'copy'); | 495 this.cutOrCopy_(dt, 'copyLink'); |
| 495 } else { | 496 } else { |
| 496 this.cutOrCopy_(dt, 'move'); | 497 this.cutOrCopy_(dt, 'move'); |
| 497 } | 498 } |
| 498 } else { | 499 } else { |
| 499 event.preventDefault(); | 500 event.preventDefault(); |
| 500 return; | 501 return; |
| 501 } | 502 } |
| 502 | 503 |
| 503 var dragThumbnail = this.renderThumbnail_(); | 504 var dragThumbnail = this.renderThumbnail_(); |
| 504 dt.setDragImage(dragThumbnail, 1000, 1000); | 505 dt.setDragImage(dragThumbnail, 1000, 1000); |
| (...skipping 535 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1040 */ | 1041 */ |
| 1041 selectDropEffect_: function(event, destinationEntry) { | 1042 selectDropEffect_: function(event, destinationEntry) { |
| 1042 if (!destinationEntry) | 1043 if (!destinationEntry) |
| 1043 return 'none'; | 1044 return 'none'; |
| 1044 var destinationLocationInfo = | 1045 var destinationLocationInfo = |
| 1045 this.volumeManager_.getLocationInfo(destinationEntry); | 1046 this.volumeManager_.getLocationInfo(destinationEntry); |
| 1046 if (!destinationLocationInfo) | 1047 if (!destinationLocationInfo) |
| 1047 return 'none'; | 1048 return 'none'; |
| 1048 if (destinationLocationInfo.isReadOnly) | 1049 if (destinationLocationInfo.isReadOnly) |
| 1049 return 'none'; | 1050 return 'none'; |
| 1050 if (event.dataTransfer.effectAllowed === 'move') | 1051 if (util.isDropEffectAllowed(event.dataTransfer.effectAllowed, 'move')) { |
| 1051 return 'move'; | 1052 if (!util.isDropEffectAllowed(event.dataTransfer.effectAllowed, 'copy')) |
| 1052 // TODO(mtomasz): Use volumeId instead of comparing roots, as soon as | 1053 return 'move'; |
| 1053 // volumeId gets unique. | 1054 // TODO(mtomasz): Use volumeId instead of comparing roots, as soon as |
| 1054 if (event.dataTransfer.effectAllowed === 'copyMove' && | 1055 // volumeId gets unique. |
| 1055 this.getSourceRootURL_(event.dataTransfer) === | 1056 if (this.getSourceRootURL_(event.dataTransfer) === |
| 1056 destinationLocationInfo.volumeInfo.fileSystem.root.toURL() && | 1057 destinationLocationInfo.volumeInfo.fileSystem.root.toURL() && |
| 1057 !event.ctrlKey) { | 1058 !event.ctrlKey) { |
| 1058 return 'move'; | 1059 return 'move'; |
| 1059 } | 1060 } |
| 1060 if (event.dataTransfer.effectAllowed === 'copyMove' && | 1061 if (event.shiftKey) { |
| 1061 event.shiftKey) { | 1062 return 'move'; |
| 1062 return 'move'; | 1063 } |
| 1063 } | 1064 } |
| 1064 return 'copy'; | 1065 return 'copy'; |
| 1065 }, | 1066 }, |
| 1066 }; | 1067 }; |
| OLD | NEW |