Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(89)

Side by Side Diff: chrome/browser/resources/file_manager/foreground/js/file_manager.js

Issue 243013009: Show drive-related settings on gear menu only when Ctrl key is pressed. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add comments for future improvement. Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | chrome/browser/resources/file_manager/foreground/js/file_manager_commands.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 * FileManager constructor. 8 * FileManager constructor.
9 * 9 *
10 * FileManager objects encapsulate the functionality of the file selector 10 * FileManager objects encapsulate the functionality of the file selector
(...skipping 15 matching lines...) Expand all
26 /** 26 /**
27 * True while a user is pressing <Tab>. 27 * True while a user is pressing <Tab>.
28 * This is used for identifying the trigger causing the filelist to 28 * This is used for identifying the trigger causing the filelist to
29 * be focused. 29 * be focused.
30 * @type {boolean} 30 * @type {boolean}
31 * @private 31 * @private
32 */ 32 */
33 this.pressingTab_ = false; 33 this.pressingTab_ = false;
34 34
35 /** 35 /**
36 * True while a user is pressing <Ctrl>.
37 *
38 * TODO(fukino): This key is used only for controlling gear menu, so it
39 * shoudl be moved to GearMenu class. crbug.com/366032.
40 *
41 * @type {boolean}
42 * @private
43 */
44 this.pressingCtrl_ = false;
45
46 /**
47 * True if shown gear menu is in secret mode.
48 *
49 * TODO(fukino): The state of gear menu should be moved to GearMenu class.
50 * crbug.com/366032.
51 *
52 * @type {boolean}
53 * @private
54 */
55 this.isOnSecretGearMenu_ = false;
yoshiki 2014/04/24 05:10:47 nit: How about using "isSecretGearMenuShown"?
fukino 2014/04/24 10:28:53 Done. Yes, it looks more readable. Thanks!
56
57 /**
36 * SelectionHandler. 58 * SelectionHandler.
37 * @type {SelectionHandler} 59 * @type {SelectionHandler}
38 * @private 60 * @private
39 */ 61 */
40 this.selectionHandler_ = null; 62 this.selectionHandler_ = null;
41 63
42 /** 64 /**
43 * VolumeInfo of the current volume. 65 * VolumeInfo of the current volume.
44 * @type {VolumeInfo} 66 * @type {VolumeInfo}
45 * @private 67 * @private
(...skipping 385 matching lines...) Expand 10 before | Expand all | Expand 10 after
431 this.dialogDom_.querySelector('#directory-tree-context-menu'); 453 this.dialogDom_.querySelector('#directory-tree-context-menu');
432 cr.ui.Menu.decorate(this.directoryTreeContextMenu_); 454 cr.ui.Menu.decorate(this.directoryTreeContextMenu_);
433 this.directoryTree_.contextMenuForSubitems = this.directoryTreeContextMenu_; 455 this.directoryTree_.contextMenuForSubitems = this.directoryTreeContextMenu_;
434 456
435 this.textContextMenu_ = 457 this.textContextMenu_ =
436 this.dialogDom_.querySelector('#text-context-menu'); 458 this.dialogDom_.querySelector('#text-context-menu');
437 cr.ui.Menu.decorate(this.textContextMenu_); 459 cr.ui.Menu.decorate(this.textContextMenu_);
438 460
439 this.gearButton_ = this.dialogDom_.querySelector('#gear-button'); 461 this.gearButton_ = this.dialogDom_.querySelector('#gear-button');
440 this.gearButton_.addEventListener('menushow', 462 this.gearButton_.addEventListener('menushow',
441 this.refreshRemainingSpace_.bind(this, 463 this.onShowGearMenu_.bind(this));
442 false /* Without loading caption. */));
443 chrome.fileBrowserPrivate.onDesktopChanged.addListener(function() { 464 chrome.fileBrowserPrivate.onDesktopChanged.addListener(function() {
444 this.updateVisitDesktopMenus_(); 465 this.updateVisitDesktopMenus_();
445 this.ui_.updateProfileBadge(); 466 this.ui_.updateProfileBadge();
446 }.bind(this)); 467 }.bind(this));
447 chrome.fileBrowserPrivate.onProfileAdded.addListener( 468 chrome.fileBrowserPrivate.onProfileAdded.addListener(
448 this.updateVisitDesktopMenus_.bind(this)); 469 this.updateVisitDesktopMenus_.bind(this));
449 this.updateVisitDesktopMenus_(); 470 this.updateVisitDesktopMenus_();
450 471
451 this.dialogDom_.querySelector('#gear-menu').menuItemSelector = 472 this.dialogDom_.querySelector('#gear-menu').menuItemSelector =
452 'menuitem, hr'; 473 'menuitem, hr';
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
494 if (appWindow.isMaximized()) 515 if (appWindow.isMaximized())
495 appWindow.restore(); 516 appWindow.restore();
496 else 517 else
497 appWindow.maximize(); 518 appWindow.maximize();
498 }; 519 };
499 520
500 FileManager.prototype.onClose = function() { 521 FileManager.prototype.onClose = function() {
501 window.close(); 522 window.close();
502 }; 523 };
503 524
525 FileManager.prototype.onShowGearMenu_ = function() {
526 this.refreshRemainingSpace_(false); /* Without loading caption. */
527
528 // If the menu is opened while CTRL key pressed, secret menu itemscan be
529 // shown.
530 this.isOnSecretGearMenu_ = this.pressingCtrl_;
531
532 // Update view of drive-related settings.
533 this.commandHandler.updateAvailability();
534 this.document_.getElementById('drive-separator').hidden =
535 !this.shouldShowDriveSettings();
536 };
537
504 /** 538 /**
505 * One-time initialization of commands. 539 * One-time initialization of commands.
506 * @private 540 * @private
507 */ 541 */
508 FileManager.prototype.initCommands_ = function() { 542 FileManager.prototype.initCommands_ = function() {
509 this.commandHandler = new CommandHandler(this); 543 this.commandHandler = new CommandHandler(this);
510 544
511 // TODO(hirono): Move the following block to the UI part. 545 // TODO(hirono): Move the following block to the UI part.
512 var commandButtons = this.dialogDom_.querySelectorAll('button[command]'); 546 var commandButtons = this.dialogDom_.querySelectorAll('button[command]');
513 for (var j = 0; j < commandButtons.length; j++) 547 for (var j = 0; j < commandButtons.length; j++)
(...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after
803 this.onCancelBound_ = this.onCancel_.bind(this); 837 this.onCancelBound_ = this.onCancel_.bind(this);
804 this.cancelButton_.addEventListener('click', this.onCancelBound_); 838 this.cancelButton_.addEventListener('click', this.onCancelBound_);
805 839
806 this.decorateSplitter( 840 this.decorateSplitter(
807 this.dialogDom_.querySelector('#navigation-list-splitter')); 841 this.dialogDom_.querySelector('#navigation-list-splitter'));
808 this.decorateSplitter( 842 this.decorateSplitter(
809 this.dialogDom_.querySelector('#middlebar-splitter')); 843 this.dialogDom_.querySelector('#middlebar-splitter'));
810 844
811 this.dialogContainer_ = this.dialogDom_.querySelector('.dialog-container'); 845 this.dialogContainer_ = this.dialogDom_.querySelector('.dialog-container');
812 846
813 this.syncButton = this.dialogDom_.querySelector('#drive-sync-settings'); 847 this.syncButton = this.dialogDom_.querySelector(
814 this.syncButton.addEventListener('click', this.onDrivePrefClick_.bind( 848 '#gear-menu-drive-sync-settings');
815 this, 'cellularDisabled', false /* not inverted */)); 849 this.hostedButton = this.dialogDom_.querySelector(
816 850 '#gear-menu-drive-hosted-settings');
817 this.hostedButton = this.dialogDom_.querySelector('#drive-hosted-settings');
818 this.hostedButton.addEventListener('click', this.onDrivePrefClick_.bind(
819 this, 'hostedFilesDisabled', true /* inverted */));
820 851
821 this.detailViewButton_ = 852 this.detailViewButton_ =
822 this.dialogDom_.querySelector('#detail-view'); 853 this.dialogDom_.querySelector('#detail-view');
823 this.detailViewButton_.addEventListener('activate', 854 this.detailViewButton_.addEventListener('activate',
824 this.onDetailViewButtonClick_.bind(this)); 855 this.onDetailViewButtonClick_.bind(this));
825 856
826 this.thumbnailViewButton_ = 857 this.thumbnailViewButton_ =
827 this.dialogDom_.querySelector('#thumbnail-view'); 858 this.dialogDom_.querySelector('#thumbnail-view');
828 this.thumbnailViewButton_.addEventListener('activate', 859 this.thumbnailViewButton_.addEventListener('activate',
829 this.onThumbnailViewButtonClick_.bind(this)); 860 this.onThumbnailViewButtonClick_.bind(this));
(...skipping 866 matching lines...) Expand 10 before | Expand all | Expand 10 after
1696 */ 1727 */
1697 FileManager.prototype.isOnDrive = function() { 1728 FileManager.prototype.isOnDrive = function() {
1698 var rootType = this.directoryModel_.getCurrentRootType(); 1729 var rootType = this.directoryModel_.getCurrentRootType();
1699 return rootType === RootType.DRIVE || 1730 return rootType === RootType.DRIVE ||
1700 rootType === RootType.DRIVE_SHARED_WITH_ME || 1731 rootType === RootType.DRIVE_SHARED_WITH_ME ||
1701 rootType === RootType.DRIVE_RECENT || 1732 rootType === RootType.DRIVE_RECENT ||
1702 rootType === RootType.DRIVE_OFFLINE; 1733 rootType === RootType.DRIVE_OFFLINE;
1703 }; 1734 };
1704 1735
1705 /** 1736 /**
1737 * Check if the drive-related setting items should be shown on currently
1738 * displayed gear menu.
1739 * @return {boolean} True if those setting items should be shown.
1740 */
1741 FileManager.prototype.shouldShowDriveSettings = function() {
1742 return this.isOnDrive() && this.isOnSecretGearMenu_;
1743 };
1744
1745 /**
1706 * Overrides default handling for clicks on hyperlinks. 1746 * Overrides default handling for clicks on hyperlinks.
1707 * In a packaged apps links with targer='_blank' open in a new tab by 1747 * In a packaged apps links with targer='_blank' open in a new tab by
1708 * default, other links do not open at all. 1748 * default, other links do not open at all.
1709 * 1749 *
1710 * @param {Event} event Click event. 1750 * @param {Event} event Click event.
1711 * @private 1751 * @private
1712 */ 1752 */
1713 FileManager.prototype.onExternalLinkClick_ = function(event) { 1753 FileManager.prototype.onExternalLinkClick_ = function(event) {
1714 if (event.target.tagName != 'A' || !event.target.href) 1754 if (event.target.tagName != 'A' || !event.target.href)
1715 return; 1755 return;
(...skipping 463 matching lines...) Expand 10 before | Expand all | Expand 10 after
2179 return; 2219 return;
2180 2220
2181 this.document_.title = this.currentVolumeInfo_.label; 2221 this.document_.title = this.currentVolumeInfo_.label;
2182 }; 2222 };
2183 2223
2184 /** 2224 /**
2185 * Update the gear menu. 2225 * Update the gear menu.
2186 * @private 2226 * @private
2187 */ 2227 */
2188 FileManager.prototype.updateGearMenu_ = function() { 2228 FileManager.prototype.updateGearMenu_ = function() {
2189 var hideItemsForDrive = !this.isOnDrive();
2190 this.syncButton.hidden = hideItemsForDrive;
2191 this.hostedButton.hidden = hideItemsForDrive;
2192 this.document_.getElementById('drive-separator').hidden =
2193 hideItemsForDrive;
2194 this.refreshRemainingSpace_(true); // Show loading caption. 2229 this.refreshRemainingSpace_(true); // Show loading caption.
2195 }; 2230 };
2196 2231
2197 /** 2232 /**
2198 * Update menus that move the window to the other profile's desktop. 2233 * Update menus that move the window to the other profile's desktop.
2199 * TODO(hirono): Add the GearMenu class and make it a member of the class. 2234 * TODO(hirono): Add the GearMenu class and make it a member of the class.
2200 * TODO(hirono): Handle the case where a profile is added while the menu is 2235 * TODO(hirono): Handle the case where a profile is added while the menu is
2201 * opened. 2236 * opened.
2202 * @private 2237 * @private
2203 */ 2238 */
(...skipping 649 matching lines...) Expand 10 before | Expand all | Expand 10 after
2853 }; 2888 };
2854 2889
2855 /** 2890 /**
2856 * KeyDown event handler for the document. 2891 * KeyDown event handler for the document.
2857 * @param {Event} event Key event. 2892 * @param {Event} event Key event.
2858 * @private 2893 * @private
2859 */ 2894 */
2860 FileManager.prototype.onKeyDown_ = function(event) { 2895 FileManager.prototype.onKeyDown_ = function(event) {
2861 if (event.keyCode === 9) // Tab 2896 if (event.keyCode === 9) // Tab
2862 this.pressingTab_ = true; 2897 this.pressingTab_ = true;
2898 if (event.keyCode === 17) // Ctrl
2899 this.pressingCtrl_ = true;
2863 2900
2864 if (event.srcElement === this.renameInput_) { 2901 if (event.srcElement === this.renameInput_) {
2865 // Ignore keydown handler in the rename input box. 2902 // Ignore keydown handler in the rename input box.
2866 return; 2903 return;
2867 } 2904 }
2868 2905
2869 switch (util.getKeyModifiers(event) + event.keyCode) { 2906 switch (util.getKeyModifiers(event) + event.keyCode) {
2870 case 'Ctrl-190': // Ctrl-. => Toggle filter files. 2907 case 'Ctrl-190': // Ctrl-. => Toggle filter files.
2871 this.fileFilter_.setFilterHidden( 2908 this.fileFilter_.setFilterHidden(
2872 !this.fileFilter_.isFilterHiddenOn()); 2909 !this.fileFilter_.isFilterHiddenOn());
(...skipping 11 matching lines...) Expand all
2884 }; 2921 };
2885 2922
2886 /** 2923 /**
2887 * KeyUp event handler for the document. 2924 * KeyUp event handler for the document.
2888 * @param {Event} event Key event. 2925 * @param {Event} event Key event.
2889 * @private 2926 * @private
2890 */ 2927 */
2891 FileManager.prototype.onKeyUp_ = function(event) { 2928 FileManager.prototype.onKeyUp_ = function(event) {
2892 if (event.keyCode === 9) // Tab 2929 if (event.keyCode === 9) // Tab
2893 this.pressingTab_ = false; 2930 this.pressingTab_ = false;
2931 if (event.keyCode == 17) // Ctrl
2932 this.pressingCtrl_ = false;
2894 }; 2933 };
2895 2934
2896 /** 2935 /**
2897 * KeyDown event handler for the div#list-container element. 2936 * KeyDown event handler for the div#list-container element.
2898 * @param {Event} event Key event. 2937 * @param {Event} event Key event.
2899 * @private 2938 * @private
2900 */ 2939 */
2901 FileManager.prototype.onListKeyDown_ = function(event) { 2940 FileManager.prototype.onListKeyDown_ = function(event) {
2902 if (event.srcElement.tagName == 'INPUT') { 2941 if (event.srcElement.tagName == 'INPUT') {
2903 // Ignore keydown handler in the rename input box. 2942 // Ignore keydown handler in the rename input box.
(...skipping 458 matching lines...) Expand 10 before | Expand all | Expand 10 after
3362 if (!valid) { 3401 if (!valid) {
3363 self.alert.show(str('ERROR_LONG_NAME'), 3402 self.alert.show(str('ERROR_LONG_NAME'),
3364 function() { onDone(false); }); 3403 function() { onDone(false); });
3365 } else { 3404 } else {
3366 onDone(true); 3405 onDone(true);
3367 } 3406 }
3368 }); 3407 });
3369 }; 3408 };
3370 3409
3371 /** 3410 /**
3372 * Handler invoked on preference setting in drive context menu. 3411 * Toggle whether mobile data is used for sync.
3373 *
3374 * @param {string} pref The preference to alter.
3375 * @param {boolean} inverted Invert the value if true.
3376 * @param {Event} event The click event.
3377 * @private
3378 */ 3412 */
3379 FileManager.prototype.onDrivePrefClick_ = function(pref, inverted, event) { 3413 FileManager.prototype.toggleDriveSyncSettings = function() {
3380 var newValue = !event.target.hasAttribute('checked'); 3414 // If checked, the sync is disabled.
3381 if (newValue) 3415 var nowCellularDisabled = this.syncButton.hasAttribute('checked');
3382 event.target.setAttribute('checked', 'checked'); 3416 var changeInfo = {cellularDisabled: !nowCellularDisabled};
3383 else
3384 event.target.removeAttribute('checked');
3385
3386 var changeInfo = {};
3387 changeInfo[pref] = inverted ? !newValue : newValue;
3388 chrome.fileBrowserPrivate.setPreferences(changeInfo); 3417 chrome.fileBrowserPrivate.setPreferences(changeInfo);
3389 }; 3418 };
3390 3419
3420 /**
3421 * Toggle whether Google Docs files are shown.
3422 */
3423 FileManager.prototype.toggleDriveHostedSettings = function() {
3424 // If checked, showing drive hosted files is enabled.
3425 var nowHostedFilesEnabled = this.hostedButton.hasAttribute('checked');
3426 var nowHostedFilesDisabled = !nowHostedFilesEnabled;
3427 var changeInfo = {hostedFilesDisabled: !nowHostedFilesDisabled};
3428 chrome.fileBrowserPrivate.setPreferences(changeInfo);
3429 };
3430
3391 /** 3431 /**
3392 * Invoked when the search box is changed. 3432 * Invoked when the search box is changed.
3393 * 3433 *
3394 * @param {Event} event The changed event. 3434 * @param {Event} event The changed event.
3395 * @private 3435 * @private
3396 */ 3436 */
3397 FileManager.prototype.onSearchBoxUpdate_ = function(event) { 3437 FileManager.prototype.onSearchBoxUpdate_ = function(event) {
3398 var searchString = this.searchBox_.value; 3438 var searchString = this.searchBox_.value;
3399 3439
3400 if (this.isOnDrive()) { 3440 if (this.isOnDrive()) {
(...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after
3703 callback(this.preferences_); 3743 callback(this.preferences_);
3704 return; 3744 return;
3705 } 3745 }
3706 3746
3707 chrome.fileBrowserPrivate.getPreferences(function(prefs) { 3747 chrome.fileBrowserPrivate.getPreferences(function(prefs) {
3708 this.preferences_ = prefs; 3748 this.preferences_ = prefs;
3709 callback(prefs); 3749 callback(prefs);
3710 }.bind(this)); 3750 }.bind(this));
3711 }; 3751 };
3712 })(); 3752 })();
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/resources/file_manager/foreground/js/file_manager_commands.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698