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

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

Issue 8788011: Disabling "Select all" chechbox when the dir is empty. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix. Created 9 years 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 // Setting the src of an img to an empty string can crash the browser, so we 5 // Setting the src of an img to an empty string can crash the browser, so we
6 // use an empty 1x1 gif instead. 6 // use an empty 1x1 gif instead.
7 const EMPTY_IMAGE_URI = 'data:image/gif;base64,' 7 const EMPTY_IMAGE_URI = 'data:image/gif;base64,'
8 + 'R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw%3D%3D'; 8 + 'R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw%3D%3D';
9 9
10 var g_slideshow_data = null; 10 var g_slideshow_data = null;
(...skipping 732 matching lines...) Expand 10 before | Expand all | Expand 10 after
743 this.dataModel_.prepareSort = this.prepareSort_.bind(this); 743 this.dataModel_.prepareSort = this.prepareSort_.bind(this);
744 744
745 if (this.dialogType_ == FileManager.DialogType.SELECT_OPEN_FILE || 745 if (this.dialogType_ == FileManager.DialogType.SELECT_OPEN_FILE ||
746 this.dialogType_ == FileManager.DialogType.SELECT_OPEN_FOLDER || 746 this.dialogType_ == FileManager.DialogType.SELECT_OPEN_FOLDER ||
747 this.dialogType_ == FileManager.DialogType.SELECT_SAVEAS_FILE) { 747 this.dialogType_ == FileManager.DialogType.SELECT_SAVEAS_FILE) {
748 this.selectionModelClass_ = cr.ui.ListSingleSelectionModel; 748 this.selectionModelClass_ = cr.ui.ListSingleSelectionModel;
749 } else { 749 } else {
750 this.selectionModelClass_ = cr.ui.ListSelectionModel; 750 this.selectionModelClass_ = cr.ui.ListSelectionModel;
751 } 751 }
752 752
753 this.dataModel_.addEventListener('splice',
754 this.onDataModelSplice_.bind(this));
755
753 this.initTable_(); 756 this.initTable_();
754 this.initGrid_(); 757 this.initGrid_();
755 758
756 this.setListType(FileManager.ListType.DETAIL); 759 this.setListType(FileManager.ListType.DETAIL);
757 760
758 this.onResize_(); 761 this.onResize_();
759 762
760 this.textSearchState_ = {text: '', date: new Date()}; 763 this.textSearchState_ = {text: '', date: new Date()};
761 }; 764 };
762 765
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
846 * @param {Entry} entry An HTML5 Entry object. 849 * @param {Entry} entry An HTML5 Entry object.
847 * @param {function(Entry)} successCallback The function to invoke once the 850 * @param {function(Entry)} successCallback The function to invoke once the
848 * icon type is known. 851 * icon type is known.
849 */ 852 */
850 FileManager.prototype.cacheEntryIconType = function(entry, successCallback) { 853 FileManager.prototype.cacheEntryIconType = function(entry, successCallback) {
851 this.getIconType(entry); 854 this.getIconType(entry);
852 if (successCallback) 855 if (successCallback)
853 setTimeout(function() { successCallback(entry) }, 0); 856 setTimeout(function() { successCallback(entry) }, 0);
854 }; 857 };
855 858
859 FileManager.prototype.onDataModelSplice_ = function(event) {
860 var checkbox = this.document_.querySelector('#select-all-checkbox');
861 if (checkbox)
862 this.updateSelectAllCheckboxState_(checkbox);
863 };
864
856 /** 865 /**
857 * Get the file type of the entry, caching the result. 866 * Get the file type of the entry, caching the result.
858 * 867 *
859 * When this method completes, the entry object will get a 868 * When this method completes, the entry object will get a
860 * 'cachedIconType_' property (if it doesn't already have one) containing the 869 * 'cachedIconType_' property (if it doesn't already have one) containing the
861 * icon type of the file as a string. 870 * icon type of the file as a string.
862 * 871 *
863 * @param {Entry} entry An HTML5 Entry object. 872 * @param {Entry} entry An HTML5 Entry object.
864 * @param {function(Entry)} successCallback The function to invoke once the 873 * @param {function(Entry)} successCallback The function to invoke once the
865 * file size is known. 874 * file size is known.
(...skipping 687 matching lines...) Expand 10 before | Expand all | Expand 10 after
1553 } 1562 }
1554 1563
1555 return input; 1564 return input;
1556 }; 1565 };
1557 1566
1558 FileManager.prototype.renderNameColumnHeader_ = function(name, table) { 1567 FileManager.prototype.renderNameColumnHeader_ = function(name, table) {
1559 var input = this.document_.createElement('input'); 1568 var input = this.document_.createElement('input');
1560 input.setAttribute('type', 'checkbox'); 1569 input.setAttribute('type', 'checkbox');
1561 input.setAttribute('tabindex', -1); 1570 input.setAttribute('tabindex', -1);
1562 input.id = 'select-all-checkbox'; 1571 input.id = 'select-all-checkbox';
1563 input.checked = this.areAllItemsSelected(); 1572 this.updateSelectAllCheckboxState_(input);
1564 1573
1565 var self = this;
1566 input.addEventListener('click', function(event) { 1574 input.addEventListener('click', function(event) {
1567 if (self.areAllItemsSelected()) 1575 if (input.checked)
1576 table.selectionModel.selectAll();
1577 else
1568 table.selectionModel.unselectAll(); 1578 table.selectionModel.unselectAll();
1569 else
1570 table.selectionModel.selectAll();
1571 event.preventDefault(); 1579 event.preventDefault();
1572 event.stopPropagation(); 1580 event.stopPropagation();
1573 }); 1581 });
1574 1582
1575 var fragment = this.document_.createDocumentFragment(); 1583 var fragment = this.document_.createDocumentFragment();
1576 fragment.appendChild(input); 1584 fragment.appendChild(input);
1577 fragment.appendChild(this.document_.createTextNode(name)); 1585 fragment.appendChild(this.document_.createTextNode(name));
1578 return fragment; 1586 return fragment;
1579 }; 1587 };
1580 1588
1581 /** 1589 /**
1582 * Check if all items in the current list are selected. 1590 * Update check and disable states of the 'Select all' checkbox.
1583 * @return {boolean} True if all items are selected.
1584 */ 1591 */
1585 FileManager.prototype.areAllItemsSelected = function() { 1592 FileManager.prototype.updateSelectAllCheckboxState_ = function(checkbox) {
1586 return this.selection && this.dataModel_.length > 0 && 1593 checkbox.checked = this.selection && this.dataModel_.length > 0 &&
1587 this.dataModel_.length == this.selection.totalCount; 1594 this.dataModel_.length == this.selection.totalCount;
1595 checkbox.disabled = this.dataModel_.length == 0;
1588 }; 1596 };
1589 1597
1590 /** 1598 /**
1591 * Update the thumbnail image to fit/fill the square container. 1599 * Update the thumbnail image to fit/fill the square container.
1592 * 1600 *
1593 * Using webkit center packing does not align the image properly, so we need 1601 * Using webkit center packing does not align the image properly, so we need
1594 * to wait until the image loads and its proportions are known, then manually 1602 * to wait until the image loads and its proportions are known, then manually
1595 * position it at the center. 1603 * position it at the center.
1596 * 1604 *
1597 * @param {CSSStyleDeclaration} style Style object of the image. 1605 * @param {CSSStyleDeclaration} style Style object of the image.
(...skipping 1336 matching lines...) Expand 10 before | Expand all | Expand 10 after
2934 for (var i = 0; i < this.selection.entries.length; i++) { 2942 for (var i = 0; i < this.selection.entries.length; i++) {
2935 var selectedIndex = this.selection.indexes[i]; 2943 var selectedIndex = this.selection.indexes[i];
2936 var listItem = this.currentList_.getListItemByIndex(selectedIndex); 2944 var listItem = this.currentList_.getListItemByIndex(selectedIndex);
2937 if (listItem) 2945 if (listItem)
2938 listItem.querySelector('input[type="checkbox"]').checked = true; 2946 listItem.querySelector('input[type="checkbox"]').checked = true;
2939 } 2947 }
2940 } 2948 }
2941 var selectAllCheckbox = 2949 var selectAllCheckbox =
2942 this.document_.getElementById('select-all-checkbox'); 2950 this.document_.getElementById('select-all-checkbox');
2943 if (selectAllCheckbox) 2951 if (selectAllCheckbox)
2944 selectAllCheckbox.checked = this.areAllItemsSelected(); 2952 this.updateSelectAllCheckboxState_(selectAllCheckbox);
2945 }; 2953 };
2946 2954
2947 FileManager.prototype.updateOkButton_ = function(event) { 2955 FileManager.prototype.updateOkButton_ = function(event) {
2948 var selectable; 2956 var selectable;
2949 2957
2950 if (this.dialogType_ == FileManager.DialogType.SELECT_FOLDER) { 2958 if (this.dialogType_ == FileManager.DialogType.SELECT_FOLDER) {
2951 selectable = this.selection.directoryCount == 1 && 2959 selectable = this.selection.directoryCount == 1 &&
2952 this.selection.fileCount == 0; 2960 this.selection.fileCount == 0;
2953 } else if (this.dialogType_ == FileManager.DialogType.SELECT_OPEN_FILE) { 2961 } else if (this.dialogType_ == FileManager.DialogType.SELECT_OPEN_FILE) {
2954 selectable = (this.selection.directoryCount == 0 && 2962 selectable = (this.selection.directoryCount == 0 &&
(...skipping 1027 matching lines...) Expand 10 before | Expand all | Expand 10 after
3982 }); 3990 });
3983 }, onError); 3991 }, onError);
3984 3992
3985 function onError(err) { 3993 function onError(err) {
3986 console.log('Error while checking free space: ' + err); 3994 console.log('Error while checking free space: ' + err);
3987 setTimeout(doCheck, 1000 * 60); 3995 setTimeout(doCheck, 1000 * 60);
3988 } 3996 }
3989 } 3997 }
3990 } 3998 }
3991 })(); 3999 })();
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698