Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 459 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 470 | 470 |
| 471 /** | 471 /** |
| 472 * Request file system and get root entries asynchronously. Invokes init_ | 472 * Request file system and get root entries asynchronously. Invokes init_ |
| 473 * when have finished. | 473 * when have finished. |
| 474 */ | 474 */ |
| 475 FileManager.prototype.resolveRoots_ = function(callback) { | 475 FileManager.prototype.resolveRoots_ = function(callback) { |
| 476 var rootPaths = ['Downloads', 'removable', 'archive']; | 476 var rootPaths = ['Downloads', 'removable', 'archive']; |
| 477 | 477 |
| 478 metrics.startInterval('RequestLocalFileSystem'); | 478 metrics.startInterval('RequestLocalFileSystem'); |
| 479 var self = this; | 479 var self = this; |
| 480 | |
| 481 // The list of active mount points to distinct them from other directories. | |
| 482 chrome.fileBrowserPrivate.getMountPoints(function(mountPoints) { | |
| 483 self.mountPoints_ = mountPoints; | |
|
Vladislav Kaznacheev
2011/11/17 13:43:46
nit: identation?
SeRya
2011/11/17 14:04:12
Done.
| |
| 484 onDone(); | |
| 485 }); | |
| 486 | |
| 487 function onDone() { | |
| 488 if (self.mountPoints_ && self.rootEntries_) | |
| 489 self.init_(); | |
| 490 } | |
| 491 | |
| 480 chrome.fileBrowserPrivate.requestLocalFileSystem(function(filesystem) { | 492 chrome.fileBrowserPrivate.requestLocalFileSystem(function(filesystem) { |
| 481 self.filesystem_ = filesystem; | 493 self.filesystem_ = filesystem; |
| 482 util.installFileErrorToString(); | 494 util.installFileErrorToString(); |
| 483 | 495 |
| 484 metrics.recordTime('RequestLocalFileSystem'); | 496 metrics.recordTime('RequestLocalFileSystem'); |
| 485 console.log('Found filesystem: ' + filesystem.name, filesystem); | 497 console.log('Found filesystem: ' + filesystem.name, filesystem); |
| 486 | 498 |
| 487 var rootEntries = []; | 499 var rootEntries = []; |
| 488 | 500 |
| 489 function onAllRootsFound() { | 501 function onAllRootsFound() { |
| 490 self.rootEntries_ = rootEntries; | 502 self.rootEntries_ = rootEntries; |
| 491 self.init_(); | 503 onDone(); |
| 492 } | 504 } |
| 493 | 505 |
| 494 function onPathError(path, err) { | 506 function onPathError(path, err) { |
| 495 console.error('Error locating root path: ' + path + ': ' + err); | 507 console.error('Error locating root path: ' + path + ': ' + err); |
| 496 } | 508 } |
| 497 | 509 |
| 498 function onEntryFound(entry) { | 510 function onEntryFound(entry) { |
| 499 if (entry) { | 511 if (entry) { |
| 500 rootEntries.push(entry); | 512 rootEntries.push(entry); |
| 501 } else { | 513 } else { |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 513 util.forEachDirEntry(filesystem.root, onEntryFound); | 525 util.forEachDirEntry(filesystem.root, onEntryFound); |
| 514 } | 526 } |
| 515 }); | 527 }); |
| 516 }; | 528 }; |
| 517 | 529 |
| 518 /** | 530 /** |
| 519 * Continue initializing the file manager after resolving roots. | 531 * Continue initializing the file manager after resolving roots. |
| 520 */ | 532 */ |
| 521 FileManager.prototype.init_ = function() { | 533 FileManager.prototype.init_ = function() { |
| 522 metrics.startInterval('InitFileManager'); | 534 metrics.startInterval('InitFileManager'); |
| 523 this.initFileList_(); | |
| 524 this.initDialogs_(); | |
| 525 | 535 |
| 526 // TODO(rginda): 6/22/11: Remove this test when createDateTimeFormat is | 536 // TODO(rginda): 6/22/11: Remove this test when createDateTimeFormat is |
| 527 // available in all chrome trunk builds. | 537 // available in all chrome trunk builds. |
| 528 if ('createDateTimeFormat' in this.locale_) { | 538 if ('createDateTimeFormat' in this.locale_) { |
| 529 this.shortDateFormatter_ = | 539 this.shortDateFormatter_ = |
| 530 this.locale_.createDateTimeFormat({'dateType': 'medium'}); | 540 this.locale_.createDateTimeFormat({'dateType': 'medium'}); |
| 531 } else { | 541 } else { |
| 532 this.shortDateFormatter_ = { | 542 this.shortDateFormatter_ = { |
| 533 format: function(d) { | 543 format: function(d) { |
| 534 return (d.getMonth() + 1) + '/' + d.getDate() + '/' + d.getFullYear(); | 544 return (d.getMonth() + 1) + '/' + d.getDate() + '/' + d.getFullYear(); |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 551 }; | 561 }; |
| 552 } | 562 } |
| 553 | 563 |
| 554 // Optional list of file types. | 564 // Optional list of file types. |
| 555 this.fileTypes_ = this.params_.typeList; | 565 this.fileTypes_ = this.params_.typeList; |
| 556 | 566 |
| 557 this.showCheckboxes_ = | 567 this.showCheckboxes_ = |
| 558 (this.dialogType_ == FileManager.DialogType.FULL_PAGE || | 568 (this.dialogType_ == FileManager.DialogType.FULL_PAGE || |
| 559 this.dialogType_ == FileManager.DialogType.SELECT_OPEN_MULTI_FILE); | 569 this.dialogType_ == FileManager.DialogType.SELECT_OPEN_MULTI_FILE); |
| 560 | 570 |
| 571 this.initFileList_(); | |
| 572 this.initDialogs_(); | |
| 573 | |
| 561 // DirectoryEntry representing the current directory of the dialog. | 574 // DirectoryEntry representing the current directory of the dialog. |
| 562 this.currentDirEntry_ = null; | 575 this.currentDirEntry_ = null; |
| 563 | 576 |
| 564 this.copyManager_ = new FileCopyManager(); | 577 this.copyManager_ = new FileCopyManager(); |
| 565 this.copyManager_.addEventListener('copy-progress', | 578 this.copyManager_.addEventListener('copy-progress', |
| 566 this.onCopyProgress_.bind(this)); | 579 this.onCopyProgress_.bind(this)); |
| 567 | 580 |
| 568 window.addEventListener('popstate', this.onPopState_.bind(this)); | 581 window.addEventListener('popstate', this.onPopState_.bind(this)); |
| 569 window.addEventListener('unload', this.onUnload_.bind(this)); | 582 window.addEventListener('unload', this.onUnload_.bind(this)); |
| 570 | 583 |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 581 | 594 |
| 582 chrome.fileBrowserPrivate.onFileChanged.addListener( | 595 chrome.fileBrowserPrivate.onFileChanged.addListener( |
| 583 this.onFileChanged_.bind(this)); | 596 this.onFileChanged_.bind(this)); |
| 584 | 597 |
| 585 var self = this; | 598 var self = this; |
| 586 | 599 |
| 587 // The list of callbacks to be invoked during the directory rescan after | 600 // The list of callbacks to be invoked during the directory rescan after |
| 588 // all paste tasks are complete. | 601 // all paste tasks are complete. |
| 589 this.pasteSuccessCallbacks_ = []; | 602 this.pasteSuccessCallbacks_ = []; |
| 590 | 603 |
| 591 // The list of active mount points to distinct them from other directories. | |
| 592 chrome.fileBrowserPrivate.getMountPoints(function(mountPoints) { | |
| 593 self.mountPoints_ = mountPoints; | |
| 594 }); | |
| 595 | |
| 596 this.initCommands_(); | 604 this.initCommands_(); |
| 597 | 605 |
| 598 this.setupCurrentDirectory_(); | 606 this.setupCurrentDirectory_(); |
| 599 | 607 |
| 600 this.summarizeSelection_(); | 608 this.summarizeSelection_(); |
| 601 | 609 |
| 602 this.dataModel_.sort('cachedMtime_', 'desc'); | 610 this.dataModel_.sort('cachedMtime_', 'desc'); |
| 603 | 611 |
| 604 this.refocus(); | 612 this.refocus(); |
| 605 | 613 |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 641 /** | 649 /** |
| 642 * One-time initialization of various DOM nodes. | 650 * One-time initialization of various DOM nodes. |
| 643 */ | 651 */ |
| 644 FileManager.prototype.initDom_ = function() { | 652 FileManager.prototype.initDom_ = function() { |
| 645 // Cache nodes we'll be manipulating. | 653 // Cache nodes we'll be manipulating. |
| 646 this.previewThumbnails_ = | 654 this.previewThumbnails_ = |
| 647 this.dialogDom_.querySelector('.preview-thumbnails'); | 655 this.dialogDom_.querySelector('.preview-thumbnails'); |
| 648 this.previewPanel_ = this.dialogDom_.querySelector('.preview-panel'); | 656 this.previewPanel_ = this.dialogDom_.querySelector('.preview-panel'); |
| 649 this.previewFilename_ = this.dialogDom_.querySelector('.preview-filename'); | 657 this.previewFilename_ = this.dialogDom_.querySelector('.preview-filename'); |
| 650 this.previewSummary_ = this.dialogDom_.querySelector('.preview-summary'); | 658 this.previewSummary_ = this.dialogDom_.querySelector('.preview-summary'); |
| 651 this.previewMetadata_ = this.dialogDom_.querySelector('.preview-metadata'); | |
| 652 this.filenameInput_ = this.dialogDom_.querySelector('.filename-input'); | 659 this.filenameInput_ = this.dialogDom_.querySelector('.filename-input'); |
| 653 this.taskButtons_ = this.dialogDom_.querySelector('.task-buttons'); | 660 this.taskButtons_ = this.dialogDom_.querySelector('.task-buttons'); |
| 654 this.okButton_ = this.dialogDom_.querySelector('.ok'); | 661 this.okButton_ = this.dialogDom_.querySelector('.ok'); |
| 655 this.cancelButton_ = this.dialogDom_.querySelector('.cancel'); | 662 this.cancelButton_ = this.dialogDom_.querySelector('.cancel'); |
| 656 this.newFolderButton_ = this.dialogDom_.querySelector('.new-folder'); | 663 this.newFolderButton_ = this.dialogDom_.querySelector('.new-folder'); |
| 657 this.deleteButton_ = this.dialogDom_.querySelector('.delete-button'); | 664 this.deleteButton_ = this.dialogDom_.querySelector('.delete-button'); |
| 658 | 665 |
| 659 this.downloadsWarning_ = | 666 this.downloadsWarning_ = |
| 660 this.dialogDom_.querySelector('.downloads-warning'); | 667 this.dialogDom_.querySelector('.downloads-warning'); |
| 661 var html = util.htmlUnescape(str('DOWNLOADS_DIRECTORY_WARNING')); | 668 var html = util.htmlUnescape(str('DOWNLOADS_DIRECTORY_WARNING')); |
| (...skipping 464 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1126 cr.ui.contextMenuHandler.addContextMenuProperty(this.grid_); | 1133 cr.ui.contextMenuHandler.addContextMenuProperty(this.grid_); |
| 1127 this.grid_.contextMenu = this.fileContextMenu_; | 1134 this.grid_.contextMenu = this.fileContextMenu_; |
| 1128 this.grid_.addEventListener('mousedown', | 1135 this.grid_.addEventListener('mousedown', |
| 1129 this.onGridMouseDown_.bind(this)); | 1136 this.onGridMouseDown_.bind(this)); |
| 1130 }; | 1137 }; |
| 1131 | 1138 |
| 1132 /** | 1139 /** |
| 1133 * Initialize the file list table. | 1140 * Initialize the file list table. |
| 1134 */ | 1141 */ |
| 1135 FileManager.prototype.initTable_ = function() { | 1142 FileManager.prototype.initTable_ = function() { |
| 1136 var checkWidth = this.showCheckboxes_ ? 5 : 0; | |
| 1137 | |
| 1138 var columns = [ | 1143 var columns = [ |
| 1139 new cr.ui.table.TableColumn('cachedIconType_', '', | |
| 1140 5.4 + checkWidth), | |
| 1141 new cr.ui.table.TableColumn('name', str('NAME_COLUMN_LABEL'), | 1144 new cr.ui.table.TableColumn('name', str('NAME_COLUMN_LABEL'), |
| 1142 64 - checkWidth), | 1145 64), |
| 1143 new cr.ui.table.TableColumn('cachedSize_', | 1146 new cr.ui.table.TableColumn('cachedSize_', |
| 1144 str('SIZE_COLUMN_LABEL'), 15.5), | 1147 str('SIZE_COLUMN_LABEL'), 15.5), |
| 1145 new cr.ui.table.TableColumn('type', | 1148 new cr.ui.table.TableColumn('type', |
| 1146 str('TYPE_COLUMN_LABEL'), 15.5), | 1149 str('TYPE_COLUMN_LABEL'), 15.5), |
| 1147 new cr.ui.table.TableColumn('cachedMtime_', | 1150 new cr.ui.table.TableColumn('cachedMtime_', |
| 1148 str('DATE_COLUMN_LABEL'), 21) | 1151 str('DATE_COLUMN_LABEL'), 21) |
| 1149 ]; | 1152 ]; |
| 1150 | 1153 |
| 1151 columns[0].renderFunction = this.renderIconType_.bind(this); | 1154 columns[0].renderFunction = this.renderName_.bind(this); |
| 1152 columns[1].renderFunction = this.renderName_.bind(this); | 1155 columns[1].renderFunction = this.renderSize_.bind(this); |
| 1153 columns[2].renderFunction = this.renderSize_.bind(this); | 1156 columns[2].renderFunction = this.renderType_.bind(this); |
| 1154 columns[3].renderFunction = this.renderType_.bind(this); | 1157 columns[3].renderFunction = this.renderDate_.bind(this); |
| 1155 columns[4].renderFunction = this.renderDate_.bind(this); | 1158 |
| 1159 if (this.showCheckboxes_) { | |
| 1160 columns.unshift(new cr.ui.table.TableColumn('checkbox_', '', 3)); | |
| 1161 columns[0].renderFunction = this.renderCheckbox_.bind(this); | |
| 1162 } | |
| 1156 | 1163 |
| 1157 this.table_ = this.dialogDom_.querySelector('.detail-table'); | 1164 this.table_ = this.dialogDom_.querySelector('.detail-table'); |
| 1158 cr.ui.Table.decorate(this.table_); | 1165 cr.ui.Table.decorate(this.table_); |
| 1159 | 1166 |
| 1160 this.table_.selectionModel = new this.selectionModelClass_(); | 1167 this.table_.selectionModel = new this.selectionModelClass_(); |
| 1161 this.table_.columnModel = new cr.ui.table.TableColumnModel(columns); | 1168 this.table_.columnModel = new cr.ui.table.TableColumnModel(columns); |
| 1162 | 1169 |
| 1163 this.table_.addEventListener( | 1170 this.table_.addEventListener( |
| 1164 'dblclick', this.onDetailDoubleClick_.bind(this)); | 1171 'dblclick', this.onDetailDoubleClick_.bind(this)); |
| 1165 this.table_.selectionModel.addEventListener( | 1172 this.table_.selectionModel.addEventListener( |
| (...skipping 462 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1628 * Invoked by cr.ui.Table when a file needs to be rendered. | 1635 * Invoked by cr.ui.Table when a file needs to be rendered. |
| 1629 * | 1636 * |
| 1630 * @param {Entry} entry The Entry object to render. | 1637 * @param {Entry} entry The Entry object to render. |
| 1631 * @param {string} columnId The id of the column to be rendered. | 1638 * @param {string} columnId The id of the column to be rendered. |
| 1632 * @param {cr.ui.Table} table The table doing the rendering. | 1639 * @param {cr.ui.Table} table The table doing the rendering. |
| 1633 */ | 1640 */ |
| 1634 FileManager.prototype.renderIconType_ = function(entry, columnId, table) { | 1641 FileManager.prototype.renderIconType_ = function(entry, columnId, table) { |
| 1635 var div = this.document_.createElement('div'); | 1642 var div = this.document_.createElement('div'); |
| 1636 div.className = 'detail-icon-container'; | 1643 div.className = 'detail-icon-container'; |
| 1637 | 1644 |
| 1638 if (this.showCheckboxes_) | |
| 1639 div.appendChild(this.renderCheckbox_(entry)); | |
| 1640 | |
| 1641 var icon = this.document_.createElement('div'); | 1645 var icon = this.document_.createElement('div'); |
| 1642 icon.className = 'detail-icon'; | 1646 icon.className = 'detail-icon'; |
| 1643 this.getIconType(entry); | 1647 this.getIconType(entry); |
| 1644 icon.setAttribute('iconType', entry.cachedIconType_); | 1648 icon.setAttribute('iconType', entry.cachedIconType_); |
| 1645 div.appendChild(icon); | 1649 div.appendChild(icon); |
| 1646 | 1650 |
| 1647 return div; | 1651 return div; |
| 1648 }; | 1652 }; |
| 1649 | 1653 |
| 1650 FileManager.prototype.getLabelForRootPath_ = function(path) { | 1654 FileManager.prototype.getLabelForRootPath_ = function(path) { |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 1665 * Render the Name column of the detail table. | 1669 * Render the Name column of the detail table. |
| 1666 * | 1670 * |
| 1667 * Invoked by cr.ui.Table when a file needs to be rendered. | 1671 * Invoked by cr.ui.Table when a file needs to be rendered. |
| 1668 * | 1672 * |
| 1669 * @param {Entry} entry The Entry object to render. | 1673 * @param {Entry} entry The Entry object to render. |
| 1670 * @param {string} columnId The id of the column to be rendered. | 1674 * @param {string} columnId The id of the column to be rendered. |
| 1671 * @param {cr.ui.Table} table The table doing the rendering. | 1675 * @param {cr.ui.Table} table The table doing the rendering. |
| 1672 */ | 1676 */ |
| 1673 FileManager.prototype.renderName_ = function(entry, columnId, table) { | 1677 FileManager.prototype.renderName_ = function(entry, columnId, table) { |
| 1674 var label = this.document_.createElement('div'); | 1678 var label = this.document_.createElement('div'); |
| 1679 label.appendChild(this.renderIconType_(entry, columnId, table)); | |
| 1675 label.entry = entry; | 1680 label.entry = entry; |
| 1676 label.className = 'detail-name filename-label'; | 1681 label.className = 'detail-name filename-label'; |
| 1677 if (this.currentDirEntry_.name == '') { | 1682 if (this.currentDirEntry_.name == '') { |
| 1678 label.textContent = this.getLabelForRootPath_(entry.name); | 1683 label.appendChild(this.document_.createTextNode( |
| 1684 this.getLabelForRootPath_(entry.name))); | |
| 1679 } else { | 1685 } else { |
| 1680 label.textContent = entry.name; | 1686 label.appendChild(this.document_.createTextNode(entry.name)); |
| 1681 } | 1687 } |
| 1682 | 1688 |
| 1683 return label; | 1689 return label; |
| 1684 }; | 1690 }; |
| 1685 | 1691 |
| 1686 /** | 1692 /** |
| 1687 * Render the Size column of the detail table. | 1693 * Render the Size column of the detail table. |
| 1688 * | 1694 * |
| 1689 * @param {Entry} entry The Entry object to render. | 1695 * @param {Entry} entry The Entry object to render. |
| 1690 * @param {string} columnId The id of the column to be rendered. | 1696 * @param {string} columnId The id of the column to be rendered. |
| (...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1870 } else { | 1876 } else { |
| 1871 // There may be internal tasks for directories. | 1877 // There may be internal tasks for directories. |
| 1872 this.onTasksFound_(selection, []); | 1878 this.onTasksFound_(selection, []); |
| 1873 } | 1879 } |
| 1874 } | 1880 } |
| 1875 | 1881 |
| 1876 cacheNextFile(); | 1882 cacheNextFile(); |
| 1877 }; | 1883 }; |
| 1878 | 1884 |
| 1879 FileManager.prototype.updatePreviewPanelVisibility_ = function() { | 1885 FileManager.prototype.updatePreviewPanelVisibility_ = function() { |
| 1880 var wasHidden = this.previewPanel_.hasAttribute('hidden'); | 1886 var panel = this.previewPanel_; |
| 1881 var hide = (this.selection.totalCount == 0); | 1887 var state = panel.getAttribute('visibility'); |
| 1888 var mustBeVisible = (this.selection.totalCount > 0); | |
| 1889 var self = this; | |
| 1882 | 1890 |
| 1883 if (hide == wasHidden) | 1891 switch (state) { |
| 1884 return; | 1892 case 'visible': |
| 1893 if (!mustBeVisible) | |
| 1894 startHiding(); | |
| 1895 break; | |
| 1885 | 1896 |
| 1886 if (this.hidingTimeout_) { | 1897 case 'hiding': |
| 1887 // Hiding is not complete. display == block. | 1898 if (mustBeVisible) |
| 1888 clearTimeout(this.hidingTimeout_); | 1899 stopHidingAndShow(); |
| 1889 this.hidingTimeout_ = 0; | 1900 break; |
| 1890 } else if (wasHidden) { | 1901 |
| 1891 // Hiding complete. display == none. | 1902 case 'hidden': |
| 1892 this.previewPanel_.style.display = ''; | 1903 if (mustBeVisible) |
| 1893 this.onResize_(); | 1904 show(); |
| 1894 } | 1905 } |
| 1895 | 1906 |
| 1896 var self = this; | 1907 function stopHidingAndShow() { |
| 1897 if (hide) { | 1908 clearTimeout(self.hidingTimeout_); |
| 1898 this.previewPanel_.setAttribute('hidden', ''); | 1909 self.hidingTimeout_ = 0; |
| 1899 this.hidingTimeout_ = setTimeout(function() { | 1910 setVisibility('visible'); |
| 1911 } | |
| 1912 | |
| 1913 function startHiding() { | |
| 1914 setVisibility('hiding'); | |
| 1915 self.hidingTimeout_ = setTimeout(function() { | |
| 1900 self.hidingTimeout_ = 0; | 1916 self.hidingTimeout_ = 0; |
| 1901 self.previewPanel_.style.display = 'none'; | 1917 setVisibility('hidden'); |
| 1902 self.onResize_(); | 1918 self.onResize_(); |
| 1903 }, 250); | 1919 }, 250); |
| 1904 } else { | 1920 } |
| 1905 this.previewPanel_.removeAttribute('hidden'); | 1921 |
| 1922 function show() { | |
| 1923 setVisibility('visible'); | |
| 1924 self.onResize_(); | |
| 1925 } | |
| 1926 | |
| 1927 function setVisibility(visibility) { | |
| 1928 panel.setAttribute('visibility', visibility); | |
| 1906 } | 1929 } |
| 1907 }; | 1930 }; |
| 1908 | 1931 |
| 1909 | 1932 |
| 1910 FileManager.prototype.createMetadataProvider_ = function() { | 1933 FileManager.prototype.createMetadataProvider_ = function() { |
| 1911 // Subclass MetadataProvider to notify tests when the initialization | 1934 // Subclass MetadataProvider to notify tests when the initialization |
| 1912 // is complete. | 1935 // is complete. |
| 1913 | 1936 |
| 1914 var fileManager = this; | 1937 var fileManager = this; |
| 1915 | 1938 |
| (...skipping 406 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2322 | 2345 |
| 2323 // Convert duration to milliseconds since time start | 2346 // Convert duration to milliseconds since time start |
| 2324 var date = new Date(parseInt(obj.value)); | 2347 var date = new Date(parseInt(obj.value)); |
| 2325 | 2348 |
| 2326 var fmt = this.locale_.createDateTimeFormat({skeleton:fmtSkeleton}); | 2349 var fmt = this.locale_.createDateTimeFormat({skeleton:fmtSkeleton}); |
| 2327 | 2350 |
| 2328 return fmt.format(date); | 2351 return fmt.format(date); |
| 2329 } | 2352 } |
| 2330 }; | 2353 }; |
| 2331 | 2354 |
| 2332 FileManager.prototype.setPreviewMetadata = function(metadata) { | |
| 2333 this.previewMetadata_.textContent = ''; | |
| 2334 if (!(metadata && metadata.ifd)) | |
| 2335 return; | |
| 2336 | |
| 2337 var self = this; | |
| 2338 | |
| 2339 function addProperty(id, v) { | |
| 2340 var dom = self.document_.createElement('div'); | |
| 2341 dom.className = 'metadata-item'; | |
| 2342 var label = self.document_.createElement('div'); | |
| 2343 label.className = 'metadata-label'; | |
| 2344 label.textContent = str(id) || id; | |
| 2345 dom.appendChild(label); | |
| 2346 var value = self.document_.createElement('div'); | |
| 2347 value.className = 'metadata-value'; | |
| 2348 value.textContent = v; | |
| 2349 dom.appendChild(value); | |
| 2350 | |
| 2351 self.previewMetadata_.appendChild(dom); | |
| 2352 } | |
| 2353 | |
| 2354 // TODO(rginda): Split this function into metadata specific routines when | |
| 2355 // we add new metadata types. | |
| 2356 // TODO(rginda): Add const names for these numerics. | |
| 2357 var exifDir = metadata.ifd.exif; | |
| 2358 if (0xa002 in exifDir && 0xa003 in exifDir) { | |
| 2359 addProperty('DIMENSIONS_LABEL', | |
| 2360 strf('DIMENSIONS_FORMAT', exifDir[0xa002].value, | |
| 2361 exifDir[0xa003].value)); | |
| 2362 } | |
| 2363 }; | |
| 2364 | |
| 2365 FileManager.prototype.getThumbnailURL = function(entry, callback) { | 2355 FileManager.prototype.getThumbnailURL = function(entry, callback) { |
| 2366 if (!entry) | 2356 if (!entry) |
| 2367 return; | 2357 return; |
| 2368 | 2358 |
| 2369 var iconType = this.getIconType(entry); | 2359 var iconType = this.getIconType(entry); |
| 2370 | 2360 |
| 2371 function returnStockIcon() { | 2361 function returnStockIcon() { |
| 2372 callback(iconType, previewArt[iconType] || previewArt['unknown']); | 2362 callback(iconType, previewArt[iconType] || previewArt['unknown']); |
| 2373 } | 2363 } |
| 2374 | 2364 |
| (...skipping 819 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3194 }; | 3184 }; |
| 3195 | 3185 |
| 3196 /** | 3186 /** |
| 3197 * Determine whether or not a click should initiate a rename. | 3187 * Determine whether or not a click should initiate a rename. |
| 3198 * | 3188 * |
| 3199 * Renames can happen on mouse click if the user clicks on a label twice, | 3189 * Renames can happen on mouse click if the user clicks on a label twice, |
| 3200 * at least a half second apart. | 3190 * at least a half second apart. |
| 3201 */ | 3191 */ |
| 3202 FileManager.prototype.allowRenameClick_ = function(event, row) { | 3192 FileManager.prototype.allowRenameClick_ = function(event, row) { |
| 3203 if (this.dialogType_ != FileManager.DialogType.FULL_PAGE || | 3193 if (this.dialogType_ != FileManager.DialogType.FULL_PAGE || |
| 3204 this.currentDirEntry_.name == '' || | 3194 this.currentDirEntry_ == null || this.currentDirEntry_.name == '' || |
| 3205 isSystemDirEntry(this.currentDirEntry_)) { | 3195 isSystemDirEntry(this.currentDirEntry_)) { |
| 3206 // Renaming only enabled for full-page mode, outside of the root | 3196 // Renaming only enabled for full-page mode, outside of the root |
| 3207 // directory. | 3197 // directory. |
| 3208 return false; | 3198 return false; |
| 3209 } | 3199 } |
| 3210 | 3200 |
| 3211 // Didn't click on the label. | 3201 // Didn't click on the label. |
| 3212 if (!event.srcElement.classList.contains('filename-label')) | 3202 if (!event.srcElement.classList.contains('filename-label')) |
| 3213 return false; | 3203 return false; |
| 3214 | 3204 |
| (...skipping 578 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3793 }); | 3783 }); |
| 3794 }, onError); | 3784 }, onError); |
| 3795 | 3785 |
| 3796 function onError(err) { | 3786 function onError(err) { |
| 3797 console.log('Error while checking free space: ' + err); | 3787 console.log('Error while checking free space: ' + err); |
| 3798 setTimeout(doCheck, 1000 * 60); | 3788 setTimeout(doCheck, 1000 * 60); |
| 3799 } | 3789 } |
| 3800 } | 3790 } |
| 3801 } | 3791 } |
| 3802 })(); | 3792 })(); |
| OLD | NEW |