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 /** | 5 /** |
6 * FileManager constructor. | 6 * FileManager constructor. |
7 * | 7 * |
8 * FileManager objects encapsulate the functionality of the file selector | 8 * FileManager objects encapsulate the functionality of the file selector |
9 * dialogs, as well as the full screen file manager application (though the | 9 * dialogs, as well as the full screen file manager application (though the |
10 * latter is not yet implemented). | 10 * latter is not yet implemented). |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
64 | 64 |
65 // Private variables and helper functions. | 65 // Private variables and helper functions. |
66 | 66 |
67 /** | 67 /** |
68 * Location of the FAQ about the downloads directory. | 68 * Location of the FAQ about the downloads directory. |
69 */ | 69 */ |
70 var DOWNLOADS_FAQ_URL = 'http://www.google.com/support/chromeos/bin/' + | 70 var DOWNLOADS_FAQ_URL = 'http://www.google.com/support/chromeos/bin/' + |
71 'answer.py?hl=en&answer=1061547'; | 71 'answer.py?hl=en&answer=1061547'; |
72 | 72 |
73 /** | 73 /** |
| 74 * Location of the FAQ about Google Docs. |
| 75 */ |
| 76 var GOOGLE_DRIVE_FAQ_URL = |
| 77 'https://support.google.com/chromeos/?hl=en&p=filemanager_drive'; |
| 78 |
| 79 /** |
74 * Location of the FAQ about the file actions. | 80 * Location of the FAQ about the file actions. |
75 */ | 81 */ |
76 var NO_ACTION_FOR_FILE_URL = 'http://support.google.com/chromeos/bin/' + | 82 var NO_ACTION_FOR_FILE_URL = 'http://support.google.com/chromeos/bin/' + |
77 'answer.py?hl=en&answer=1700055&topic=29026&ctx=topic'; | 83 'answer.py?hl=en&answer=1700055&topic=29026&ctx=topic'; |
78 | 84 |
79 /** | 85 /** |
80 * Maximum amount of thumbnails in the preview pane. | 86 * Maximum amount of thumbnails in the preview pane. |
81 */ | 87 */ |
82 var MAX_PREVIEW_THUMBAIL_COUNT = 4; | 88 var MAX_PREVIEW_THUMBAIL_COUNT = 4; |
83 | 89 |
(...skipping 497 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
581 this.dialogType_ == FileManager.DialogType.SELECT_OPEN_FILE || | 587 this.dialogType_ == FileManager.DialogType.SELECT_OPEN_FILE || |
582 this.dialogType_ == FileManager.DialogType.SELECT_FOLDER || | 588 this.dialogType_ == FileManager.DialogType.SELECT_FOLDER || |
583 this.dialogType_ == FileManager.DialogType.SELECT_SAVEAS_FILE; | 589 this.dialogType_ == FileManager.DialogType.SELECT_SAVEAS_FILE; |
584 | 590 |
585 this.directoryModel_ = new DirectoryModel( | 591 this.directoryModel_ = new DirectoryModel( |
586 this.filesystem_.root, | 592 this.filesystem_.root, |
587 sigleSelection, | 593 sigleSelection, |
588 str('ENABLE_GDATA') == '1', | 594 str('ENABLE_GDATA') == '1', |
589 this.metadataCache_); | 595 this.metadataCache_); |
590 | 596 |
| 597 this.initGDataWelcomeBanners_(); |
| 598 |
591 var dataModel = this.directoryModel_.getFileList(); | 599 var dataModel = this.directoryModel_.getFileList(); |
592 var collator = this.collator_; | 600 var collator = this.collator_; |
593 // TODO(dgozman): refactor comparison functions together with | 601 // TODO(dgozman): refactor comparison functions together with |
594 // render/update/display. | 602 // render/update/display. |
595 dataModel.setCompareFunction('name', function(a, b) { | 603 dataModel.setCompareFunction('name', function(a, b) { |
596 return collator.compare(a.name, b.name); | 604 return collator.compare(a.name, b.name); |
597 }); | 605 }); |
598 dataModel.setCompareFunction('modificationTime', | 606 dataModel.setCompareFunction('modificationTime', |
599 this.compareMtime_.bind(this)); | 607 this.compareMtime_.bind(this)); |
600 dataModel.setCompareFunction('size', | 608 dataModel.setCompareFunction('size', |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
705 this.unmountedPanel_.setAttribute('retry', true); | 713 this.unmountedPanel_.setAttribute('retry', true); |
706 } | 714 } |
707 }; | 715 }; |
708 | 716 |
709 FileManager.prototype.initGDataUnmountedPanel_ = function() { | 717 FileManager.prototype.initGDataUnmountedPanel_ = function() { |
710 if (this.unmountedPanel_.firstElementChild) | 718 if (this.unmountedPanel_.firstElementChild) |
711 return; | 719 return; |
712 | 720 |
713 var loading = this.document_.createElement('div'); | 721 var loading = this.document_.createElement('div'); |
714 loading.className = 'gdata loading'; | 722 loading.className = 'gdata loading'; |
715 loading.textContent = strf('GDATA_LOADING', str('GDATA_PRODUCT_NAME')); | 723 loading.textContent = str('GDATA_LOADING'); |
716 this.unmountedPanel_.appendChild(loading); | 724 this.unmountedPanel_.appendChild(loading); |
717 | 725 |
718 var spinnerBox = this.document_.createElement('div'); | 726 var spinnerBox = this.document_.createElement('div'); |
719 spinnerBox.className = 'spinner-box'; | 727 spinnerBox.className = 'spinner-box'; |
720 loading.appendChild(spinnerBox); | 728 loading.appendChild(spinnerBox); |
721 | 729 |
722 var spinner = this.document_.createElement('div'); | 730 var spinner = this.document_.createElement('div'); |
723 spinner.className = 'spinner'; | 731 spinner.className = 'spinner'; |
724 spinnerBox.appendChild(spinner); | 732 spinnerBox.appendChild(spinner); |
725 | 733 |
726 var error = this.document_.createElement('div'); | 734 var error = this.document_.createElement('div'); |
727 error.className = 'gdata error'; | 735 error.className = 'gdata error'; |
728 error.textContent = strf('GDATA_CANNOT_REACH', str('GDATA_PRODUCT_NAME')); | 736 error.textContent = strf('GDATA_CANNOT_REACH', str('GDATA_PRODUCT_NAME')); |
729 this.unmountedPanel_.appendChild(error); | 737 this.unmountedPanel_.appendChild(error); |
730 | 738 |
731 var retry = this.document_.createElement('button'); | 739 var retry = this.document_.createElement('button'); |
732 retry.className = 'gdata retry'; | 740 retry.className = 'gdata retry'; |
733 retry.textContent = str('GDATA_RETRY'); | 741 retry.textContent = str('GDATA_RETRY'); |
734 retry.onclick = this.initGData_.bind(this, false /* retry */); | 742 retry.onclick = this.initGData_.bind(this, false /* retry */); |
735 this.unmountedPanel_.appendChild(retry); | 743 this.unmountedPanel_.appendChild(retry); |
736 | 744 |
737 var learnMore = this.document_.createElement('div'); | 745 var learnMore = this.document_.createElement('div'); |
738 learnMore.className = 'gdata learn-more'; | 746 learnMore.className = 'gdata learn-more plain-link'; |
| 747 learnMore.textContent = str('GDATA_LEARN_MORE'); |
| 748 learnMore.addEventListener('click', function() { |
| 749 chrome.tabs.create({url: GOOGLE_DRIVE_FAQ_URL}); |
| 750 }); |
739 this.unmountedPanel_.appendChild(learnMore); | 751 this.unmountedPanel_.appendChild(learnMore); |
740 | |
741 var learnMoreLink = this.document_.createElement('a'); | |
742 learnMoreLink.textContent = str('GDATA_LEARN_MORE'); | |
743 learnMoreLink.href = 'javascript://'; // TODO: Set a proper link URL. | |
744 learnMoreLink.className = 'gdata learn-more'; | |
745 learnMore.appendChild(learnMoreLink); | |
746 }; | 752 }; |
747 | 753 |
748 FileManager.prototype.onDataModelSplice_ = function(event) { | 754 FileManager.prototype.onDataModelSplice_ = function(event) { |
749 var checkbox = this.document_.querySelector('#select-all-checkbox'); | 755 var checkbox = this.document_.querySelector('#select-all-checkbox'); |
750 if (checkbox) | 756 if (checkbox) |
751 this.updateSelectAllCheckboxState_(checkbox); | 757 this.updateSelectAllCheckboxState_(checkbox); |
752 }; | 758 }; |
753 | 759 |
754 FileManager.prototype.onDataModelPermuted_ = function(event) { | 760 FileManager.prototype.onDataModelPermuted_ = function(event) { |
755 var sortStatus = this.directoryModel_.getFileList().sortStatus; | 761 var sortStatus = this.directoryModel_.getFileList().sortStatus; |
(...skipping 3469 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4225 }, | 4231 }, |
4226 | 4232 |
4227 handleSplitterDragEnd: function(e) { | 4233 handleSplitterDragEnd: function(e) { |
4228 Splitter.prototype.handleSplitterDragEnd.apply(this, arguments); | 4234 Splitter.prototype.handleSplitterDragEnd.apply(this, arguments); |
4229 this.ownerDocument.documentElement.classList.remove('col-resize'); | 4235 this.ownerDocument.documentElement.classList.remove('col-resize'); |
4230 } | 4236 } |
4231 }; | 4237 }; |
4232 | 4238 |
4233 customSplitter.decorate(splitterElement); | 4239 customSplitter.decorate(splitterElement); |
4234 }; | 4240 }; |
| 4241 |
| 4242 FileManager.prototype.initGDataWelcomeBanners_ = function() { |
| 4243 var WELCOME_HEADER_COUNTER_KEY = 'gdataWelcomeHeaderCounter'; |
| 4244 var WELCOME_HEADER_COUNTER_LIMIT = 5; |
| 4245 |
| 4246 function getHeaderCounter() { |
| 4247 return parseInt(localStorage[WELCOME_HEADER_COUNTER_KEY] || '0'); |
| 4248 } |
| 4249 |
| 4250 if (getHeaderCounter() >= WELCOME_HEADER_COUNTER_LIMIT) |
| 4251 return; |
| 4252 |
| 4253 function createDiv(className, parent) { |
| 4254 var div = parent.ownerDocument.createElement('div'); |
| 4255 div.className = className; |
| 4256 parent.appendChild(div); |
| 4257 return div; |
| 4258 } |
| 4259 |
| 4260 var self = this; |
| 4261 |
| 4262 function showBanner(type, messageId) { |
| 4263 self.dialogContainer_.setAttribute('gdrive-welcome', type); |
| 4264 |
| 4265 var container = self.dialogDom_.querySelector('.gdrive-welcome.' + type); |
| 4266 if (container.firstElementChild) |
| 4267 return; // Do not re-create. |
| 4268 |
| 4269 var wrapper = createDiv('gdrive-welcome-wrapper', container); |
| 4270 createDiv('gdrive-welcome-icon', wrapper); |
| 4271 |
| 4272 var close = createDiv('cr-dialog-close', wrapper); |
| 4273 close.addEventListener('click', closeBanner); |
| 4274 |
| 4275 var message = createDiv('gdrive-welcome-message', wrapper); |
| 4276 |
| 4277 var title = createDiv('gdrive-welcome-title', message); |
| 4278 title.textContent = |
| 4279 strf('GDATA_WELCOME_TITLE', str('GDATA_PRODUCT_NAME')); |
| 4280 |
| 4281 var text = createDiv('gdrive-welcome-text', message); |
| 4282 text.innerHTML = strf(messageId, str('GDATA_PRODUCT_NAME')); |
| 4283 |
| 4284 var links = createDiv('gdrive-welcome-links', message); |
| 4285 |
| 4286 var more = createDiv('gdrive-welcome-more plain-link', links); |
| 4287 more.textContent = str('GDATA_LEARN_MORE'); |
| 4288 more.addEventListener('click', function() { |
| 4289 chrome.tabs.create({url: GOOGLE_DRIVE_FAQ_URL}); |
| 4290 }); |
| 4291 |
| 4292 var dismiss = createDiv('gdrive-welcome-dismiss plain-link', links); |
| 4293 dismiss.textContent = str('GDATA_WELCOME_DISMISS'); |
| 4294 dismiss.addEventListener('click', closeBanner); |
| 4295 } |
| 4296 |
| 4297 function maybeShowBanner() { |
| 4298 if (!self.isOnGData()) { |
| 4299 self.dialogContainer_.removeAttribute('gdrive-welcome'); |
| 4300 return; |
| 4301 } |
| 4302 |
| 4303 var counter = getHeaderCounter(); |
| 4304 |
| 4305 if (self.directoryModel_.getFileList().length == 0 && counter == 0) { |
| 4306 // Only show the full page banner if the header banner was never shown. |
| 4307 // Do not increment the counter. |
| 4308 showBanner('page', 'GDATA_WELCOME_TEXT_LONG'); |
| 4309 } else if (counter < WELCOME_HEADER_COUNTER_LIMIT) { |
| 4310 localStorage[WELCOME_HEADER_COUNTER_KEY] = ++counter; |
| 4311 showBanner('header', 'GDATA_WELCOME_TEXT_SHORT'); |
| 4312 } else { |
| 4313 closeBanner(); |
| 4314 } |
| 4315 } |
| 4316 |
| 4317 function closeBanner() { |
| 4318 self.directoryModel_.removeEventListener('scan-completed', |
| 4319 maybeShowBanner); |
| 4320 self.directoryModel_.removeEventListener('rescan-completed', |
| 4321 maybeShowBanner); |
| 4322 |
| 4323 self.dialogContainer_.removeAttribute('gdrive-welcome'); |
| 4324 // Stop showing the welcome banner. |
| 4325 localStorage[WELCOME_HEADER_COUNTER_KEY] = WELCOME_HEADER_COUNTER_LIMIT; |
| 4326 } |
| 4327 |
| 4328 this.directoryModel_.addEventListener('scan-completed', maybeShowBanner); |
| 4329 this.directoryModel_.addEventListener('rescan-completed', maybeShowBanner); |
| 4330 |
| 4331 var style = this.document_.createElement('link'); |
| 4332 style.rel = 'stylesheet'; |
| 4333 style.href = 'css/gdrive_welcome.css'; |
| 4334 this.document_.head.appendChild(style); |
| 4335 }; |
4235 })(); | 4336 })(); |
OLD | NEW |