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 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
63 | 63 |
64 // Private variables and helper functions. | 64 // Private variables and helper functions. |
65 | 65 |
66 /** | 66 /** |
67 * Location of the FAQ about the downloads directory. | 67 * Location of the FAQ about the downloads directory. |
68 */ | 68 */ |
69 var DOWNLOADS_FAQ_URL = 'http://www.google.com/support/chromeos/bin/' + | 69 var DOWNLOADS_FAQ_URL = 'http://www.google.com/support/chromeos/bin/' + |
70 'answer.py?hl=en&answer=1061547'; | 70 'answer.py?hl=en&answer=1061547'; |
71 | 71 |
72 /** | 72 /** |
| 73 * Location of the FAQ about Google Docs. |
| 74 */ |
| 75 var GOOGLE_DRIVE_FAQ_URL = |
| 76 'https://support.google.com/chromeos/?hl=en&p=filemanager_drive'; |
| 77 |
| 78 /** |
73 * Location of the FAQ about the file actions. | 79 * Location of the FAQ about the file actions. |
74 */ | 80 */ |
75 var NO_ACTION_FOR_FILE_URL = 'http://support.google.com/chromeos/bin/' + | 81 var NO_ACTION_FOR_FILE_URL = 'http://support.google.com/chromeos/bin/' + |
76 'answer.py?hl=en&answer=1700055&topic=29026&ctx=topic'; | 82 'answer.py?hl=en&answer=1700055&topic=29026&ctx=topic'; |
77 | 83 |
78 /** | 84 /** |
79 * Maximum amount of thumbnails in the preview pane. | 85 * Maximum amount of thumbnails in the preview pane. |
80 */ | 86 */ |
81 var MAX_PREVIEW_THUMBAIL_COUNT = 4; | 87 var MAX_PREVIEW_THUMBAIL_COUNT = 4; |
82 | 88 |
(...skipping 631 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
714 this.dialogType_ == FileManager.DialogType.SELECT_OPEN_FILE || | 720 this.dialogType_ == FileManager.DialogType.SELECT_OPEN_FILE || |
715 this.dialogType_ == FileManager.DialogType.SELECT_FOLDER || | 721 this.dialogType_ == FileManager.DialogType.SELECT_FOLDER || |
716 this.dialogType_ == FileManager.DialogType.SELECT_SAVEAS_FILE; | 722 this.dialogType_ == FileManager.DialogType.SELECT_SAVEAS_FILE; |
717 | 723 |
718 this.directoryModel_ = new DirectoryModel( | 724 this.directoryModel_ = new DirectoryModel( |
719 this.filesystem_.root, | 725 this.filesystem_.root, |
720 sigleSelection, | 726 sigleSelection, |
721 str('ENABLE_GDATA') == '1', | 727 str('ENABLE_GDATA') == '1', |
722 this.metadataCache_); | 728 this.metadataCache_); |
723 | 729 |
| 730 this.initGDataWelcomeBanners_(); |
| 731 |
724 var dataModel = this.directoryModel_.getFileList(); | 732 var dataModel = this.directoryModel_.getFileList(); |
725 var collator = this.collator_; | 733 var collator = this.collator_; |
726 // TODO(dgozman): refactor comparison functions together with | 734 // TODO(dgozman): refactor comparison functions together with |
727 // render/update/display. | 735 // render/update/display. |
728 dataModel.setCompareFunction('name', function(a, b) { | 736 dataModel.setCompareFunction('name', function(a, b) { |
729 return collator.compare(a.name, b.name); | 737 return collator.compare(a.name, b.name); |
730 }); | 738 }); |
731 dataModel.setCompareFunction('modificationTime', | 739 dataModel.setCompareFunction('modificationTime', |
732 this.compareMtime_.bind(this)); | 740 this.compareMtime_.bind(this)); |
733 dataModel.setCompareFunction('size', | 741 dataModel.setCompareFunction('size', |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
838 this.unmountedPanel_.setAttribute('retry', true); | 846 this.unmountedPanel_.setAttribute('retry', true); |
839 } | 847 } |
840 }; | 848 }; |
841 | 849 |
842 FileManager.prototype.initGDataUnmountedPanel_ = function() { | 850 FileManager.prototype.initGDataUnmountedPanel_ = function() { |
843 if (this.unmountedPanel_.firstElementChild) | 851 if (this.unmountedPanel_.firstElementChild) |
844 return; | 852 return; |
845 | 853 |
846 var loading = this.document_.createElement('div'); | 854 var loading = this.document_.createElement('div'); |
847 loading.className = 'gdata loading'; | 855 loading.className = 'gdata loading'; |
848 loading.textContent = strf('GDATA_LOADING', str('GDATA_PRODUCT_NAME')); | 856 loading.textContent = str('GDATA_LOADING'); |
849 this.unmountedPanel_.appendChild(loading); | 857 this.unmountedPanel_.appendChild(loading); |
850 | 858 |
851 var spinnerBox = this.document_.createElement('div'); | 859 var spinnerBox = this.document_.createElement('div'); |
852 spinnerBox.className = 'spinner-box'; | 860 spinnerBox.className = 'spinner-box'; |
853 loading.appendChild(spinnerBox); | 861 loading.appendChild(spinnerBox); |
854 | 862 |
855 var spinner = this.document_.createElement('div'); | 863 var spinner = this.document_.createElement('div'); |
856 spinner.className = 'spinner'; | 864 spinner.className = 'spinner'; |
857 spinnerBox.appendChild(spinner); | 865 spinnerBox.appendChild(spinner); |
858 | 866 |
859 var error = this.document_.createElement('div'); | 867 var error = this.document_.createElement('div'); |
860 error.className = 'gdata error'; | 868 error.className = 'gdata error'; |
861 error.textContent = strf('GDATA_CANNOT_REACH', str('GDATA_PRODUCT_NAME')); | 869 error.textContent = strf('GDATA_CANNOT_REACH', str('GDATA_PRODUCT_NAME')); |
862 this.unmountedPanel_.appendChild(error); | 870 this.unmountedPanel_.appendChild(error); |
863 | 871 |
864 var retry = this.document_.createElement('button'); | 872 var retry = this.document_.createElement('button'); |
865 retry.className = 'gdata retry'; | 873 retry.className = 'gdata retry'; |
866 retry.textContent = str('GDATA_RETRY'); | 874 retry.textContent = str('GDATA_RETRY'); |
867 retry.onclick = this.initGData_.bind(this, false /* retry */); | 875 retry.onclick = this.initGData_.bind(this, false /* retry */); |
868 this.unmountedPanel_.appendChild(retry); | 876 this.unmountedPanel_.appendChild(retry); |
869 | 877 |
870 var learnMore = this.document_.createElement('div'); | 878 var learnMore = this.document_.createElement('div'); |
871 learnMore.className = 'gdata learn-more'; | 879 learnMore.className = 'gdata learn-more plain-link'; |
| 880 learnMore.textContent = str('GDATA_LEARN_MORE'); |
| 881 learnMore.addEventListener('click', function() { |
| 882 chrome.tabs.create({url: GOOGLE_DRIVE_FAQ_URL}); |
| 883 }); |
872 this.unmountedPanel_.appendChild(learnMore); | 884 this.unmountedPanel_.appendChild(learnMore); |
873 | |
874 var learnMoreLink = this.document_.createElement('a'); | |
875 learnMoreLink.textContent = str('GDATA_LEARN_MORE'); | |
876 learnMoreLink.href = 'javascript://'; // TODO: Set a proper link URL. | |
877 learnMoreLink.className = 'gdata learn-more'; | |
878 learnMore.appendChild(learnMoreLink); | |
879 }; | 885 }; |
880 | 886 |
881 FileManager.prototype.onDataModelSplice_ = function(event) { | 887 FileManager.prototype.onDataModelSplice_ = function(event) { |
882 var checkbox = this.document_.querySelector('#select-all-checkbox'); | 888 var checkbox = this.document_.querySelector('#select-all-checkbox'); |
883 if (checkbox) | 889 if (checkbox) |
884 this.updateSelectAllCheckboxState_(checkbox); | 890 this.updateSelectAllCheckboxState_(checkbox); |
885 }; | 891 }; |
886 | 892 |
887 FileManager.prototype.onDataModelPermuted_ = function(event) { | 893 FileManager.prototype.onDataModelPermuted_ = function(event) { |
888 var sortStatus = this.directoryModel_.getFileList().sortStatus; | 894 var sortStatus = this.directoryModel_.getFileList().sortStatus; |
(...skipping 3442 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4331 }, | 4337 }, |
4332 | 4338 |
4333 handleSplitterDragEnd: function(e) { | 4339 handleSplitterDragEnd: function(e) { |
4334 Splitter.prototype.handleSplitterDragEnd.apply(this, arguments); | 4340 Splitter.prototype.handleSplitterDragEnd.apply(this, arguments); |
4335 this.ownerDocument.documentElement.classList.remove('col-resize'); | 4341 this.ownerDocument.documentElement.classList.remove('col-resize'); |
4336 } | 4342 } |
4337 }; | 4343 }; |
4338 | 4344 |
4339 customSplitter.decorate(splitterElement); | 4345 customSplitter.decorate(splitterElement); |
4340 }; | 4346 }; |
| 4347 |
| 4348 FileManager.prototype.initGDataWelcomeBanners_ = function() { |
| 4349 var WELCOME_HEADER_COUNTER_KEY = 'gdataWelcomeHeaderCounter'; |
| 4350 var WELCOME_HEADER_COUNTER_LIMIT = 5; |
| 4351 |
| 4352 function getHeaderCounter() { |
| 4353 return parseInt(localStorage[WELCOME_HEADER_COUNTER_KEY] || '0'); |
| 4354 } |
| 4355 |
| 4356 if (getHeaderCounter() >= WELCOME_HEADER_COUNTER_LIMIT) |
| 4357 return; |
| 4358 |
| 4359 function createDiv(className, parent) { |
| 4360 var div = parent.ownerDocument.createElement('div'); |
| 4361 div.className = className; |
| 4362 parent.appendChild(div); |
| 4363 return div; |
| 4364 } |
| 4365 |
| 4366 function createBanner(container, messageText) { |
| 4367 var wrapper = createDiv('gdata-welcome-wrapper', container); |
| 4368 createDiv('gdata-welcome-icon', wrapper); |
| 4369 |
| 4370 var close = createDiv('gdata-welcome-close', wrapper); |
| 4371 close.addEventListener('click', closeBanner); |
| 4372 |
| 4373 var message = createDiv('gdata-welcome-message', wrapper); |
| 4374 |
| 4375 var title = createDiv('gdata-welcome-title', message); |
| 4376 title.textContent = |
| 4377 strf('GDATA_WELCOME_TITLE', str('GDATA_PRODUCT_NAME')); |
| 4378 |
| 4379 var text = createDiv('gdata-welcome-text', message); |
| 4380 text.innerHTML = messageText; |
| 4381 |
| 4382 var links = createDiv('gdata-welcome-links', message); |
| 4383 |
| 4384 var more = createDiv('gdata-welcome-more plain-link', links); |
| 4385 more.textContent = str('GDATA_LEARN_MORE'); |
| 4386 more.addEventListener('click', function() { |
| 4387 chrome.tabs.create({url: GOOGLE_DRIVE_FAQ_URL}); |
| 4388 }); |
| 4389 |
| 4390 var dismiss = createDiv('gdata-welcome-dismiss plain-link', links); |
| 4391 dismiss.textContent = str('GDATA_WELCOME_DISMISS'); |
| 4392 dismiss.addEventListener('click', closeBanner); |
| 4393 } |
| 4394 |
| 4395 var self = this; |
| 4396 |
| 4397 function maybeShowBanner() { |
| 4398 if (!self.isOnGData()) { |
| 4399 self.dialogContainer_.removeAttribute('gdata-welcome'); |
| 4400 return; |
| 4401 } |
| 4402 |
| 4403 var counter = getHeaderCounter(); |
| 4404 |
| 4405 if (self.directoryModel_.getFileList().length == 0 && counter == 0) { |
| 4406 // Only show the full page banner if the header banner was never shown. |
| 4407 // Do not increment the counter. |
| 4408 self.dialogContainer_.setAttribute('gdata-welcome', 'page'); |
| 4409 } else if (counter < WELCOME_HEADER_COUNTER_LIMIT) { |
| 4410 localStorage[WELCOME_HEADER_COUNTER_KEY] = ++counter; |
| 4411 self.dialogContainer_.setAttribute('gdata-welcome', 'header'); |
| 4412 } else { |
| 4413 closeBanner(); |
| 4414 } |
| 4415 } |
| 4416 |
| 4417 function closeBanner() { |
| 4418 self.directoryModel_.removeEventListener('scan-completed', |
| 4419 maybeShowBanner); |
| 4420 self.directoryModel_.removeEventListener('rescan-completed', |
| 4421 maybeShowBanner); |
| 4422 |
| 4423 self.dialogContainer_.removeAttribute('gdata-welcome'); |
| 4424 // Stop showing the welcome banner. |
| 4425 localStorage[WELCOME_HEADER_COUNTER_KEY] = WELCOME_HEADER_COUNTER_LIMIT; |
| 4426 } |
| 4427 |
| 4428 createBanner(this.dialogDom_.querySelector('.gdata-welcome.page'), |
| 4429 strf('GDATA_WELCOME_TEXT_LONG', str('GDATA_PRODUCT_NAME'))); |
| 4430 |
| 4431 createBanner(this.dialogDom_.querySelector('.gdata-welcome.header'), |
| 4432 str('GDATA_WELCOME_TEXT_SHORT')); |
| 4433 |
| 4434 this.directoryModel_.addEventListener('scan-completed', |
| 4435 maybeShowBanner); |
| 4436 this.directoryModel_.addEventListener('rescan-completed', |
| 4437 maybeShowBanner); |
| 4438 }; |
4341 })(); | 4439 })(); |
OLD | NEW |