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

Unified Diff: ui/file_manager/gallery/js/gallery.js

Issue 801533006: Add type annotations to gallery/js/gallery.js. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed false-positive lint errors. Created 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/file_manager/gallery/js/compiled_resources.gyp ('k') | ui/file_manager/gallery/js/mosaic_mode.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/file_manager/gallery/js/gallery.js
diff --git a/ui/file_manager/gallery/js/gallery.js b/ui/file_manager/gallery/js/gallery.js
index 8db0e495568515fa03ec93c49f2d92cf87ed06ba..61176466beb8cac90801067a8958c1b392c39885 100644
--- a/ui/file_manager/gallery/js/gallery.js
+++ b/ui/file_manager/gallery/js/gallery.js
@@ -6,19 +6,18 @@
* Called from the main frame when unloading.
* @param {boolean=} opt_exiting True if the app is exiting.
*/
-function unload(opt_exiting) { Gallery.instance.onUnload(opt_exiting); }
+function unload(opt_exiting) { gallery.onUnload(opt_exiting); }
/**
* Overrided metadata worker's path.
* @type {string}
- * @const
*/
ContentProvider.WORKER_SCRIPT = '/js/metadata_worker.js';
/**
* Data model for gallery.
*
- * @param {MetadataCache} metadataCache Metadata cache.
+ * @param {!MetadataCache} metadataCache Metadata cache.
* @constructor
* @extends {cr.ui.ArrayDataModel}
*/
@@ -27,7 +26,7 @@ function GalleryDataModel(metadataCache) {
/**
* Metadata cache.
- * @type {MetadataCache}
+ * @type {!MetadataCache}
* @private
*/
this.metadataCache_ = metadataCache;
@@ -63,11 +62,11 @@ GalleryDataModel.prototype = {
/**
* Saves new image.
*
- * @param {VolumeManager} volumeManager Volume manager instance.
- * @param {Gallery.Item} item Original gallery item.
- * @param {HTMLCanvasElement} canvas Canvas containing new image.
+ * @param {!VolumeManager} volumeManager Volume manager instance.
+ * @param {!Gallery.Item} item Original gallery item.
+ * @param {!HTMLCanvasElement} canvas Canvas containing new image.
* @param {boolean} overwrite Whether to overwrite the image to the item or not.
- * @return {Promise} Promise to be fulfilled with when the operation completes.
+ * @return {!Promise} Promise to be fulfilled with when the operation completes.
*/
GalleryDataModel.prototype.saveItem = function(
volumeManager, item, canvas, overwrite) {
@@ -137,9 +136,8 @@ GalleryDataModel.prototype.saveItem = function(
/**
* Evicts image caches in the items.
- * @param {Gallery.Item} currentSelectedItem Current selected item.
*/
-GalleryDataModel.prototype.evictCache = function(currentSelectedItem) {
+GalleryDataModel.prototype.evictCache = function() {
// Sort the item by the last accessed date.
var sorted = this.slice().sort(function(a, b) {
return b.getLastAccessedDate() - a.getLastAccessedDate();
@@ -182,11 +180,23 @@ GalleryDataModel.prototype.evictCache = function(currentSelectedItem) {
* @param {!VolumeManager} volumeManager The VolumeManager instance of the
* system.
* @constructor
+ * @struct
*/
function Gallery(volumeManager) {
+ /**
+ * @type {{appWindow: chrome.app.window.AppWindow, onClose: function(),
+ * onMaximize: function(), onMinimize: function(),
+ * onAppRegionChanged: function(), metadataCache: MetadataCache,
+ * readonlyDirName: string, displayStringFunction: function(),
+ * loadTimeData: Object, curDirEntry: Entry, searchResults: *}}
+ * @private
+ *
+ * TODO(yawano): curDirEntry and searchResults seem not to be used.
+ * Investigate them and remove them if possible.
+ */
this.context_ = {
appWindow: chrome.app.window.current(),
- onClose: function() { close(); },
+ onClose: function() { window.close(); },
onMaximize: function() {
var appWindow = chrome.app.window.current();
if (appWindow.isMaximized())
@@ -199,9 +209,11 @@ function Gallery(volumeManager) {
metadataCache: MetadataCache.createFull(volumeManager),
readonlyDirName: '',
displayStringFunction: function() { return ''; },
- loadTimeData: {}
+ loadTimeData: {},
+ curDirEntry: null,
+ searchResults: null
};
- this.container_ = document.querySelector('.gallery');
+ this.container_ = queryRequiredElement(document, '.gallery');
this.document_ = document;
this.metadataCache_ = this.context_.metadataCache;
this.volumeManager_ = volumeManager;
@@ -221,109 +233,30 @@ function Gallery(volumeManager) {
});
this.selectionModel_ = new cr.ui.ListSelectionModel();
- this.initDom_();
- this.initListeners_();
-}
-
-/**
- * Gallery extends cr.EventTarget.
- */
-Gallery.prototype.__proto__ = cr.EventTarget.prototype;
-
-/**
- * Tools fade-out timeout in milliseconds.
- * @const
- * @type {number}
- */
-Gallery.FADE_TIMEOUT = 2000;
-
-/**
- * First time tools fade-out timeout in milliseconds.
- * @const
- * @type {number}
- */
-Gallery.FIRST_FADE_TIMEOUT = 1000;
-
-/**
- * Time until mosaic is initialized in the background. Used to make gallery
- * in the slide mode load faster. In milliseconds.
- * @const
- * @type {number}
- */
-Gallery.MOSAIC_BACKGROUND_INIT_DELAY = 1000;
-
-/**
- * Types of metadata Gallery uses (to query the metadata cache).
- * @const
- * @type {string}
- */
-Gallery.METADATA_TYPE = 'thumbnail|filesystem|media|external';
-
-/**
- * Initializes listeners.
- * @private
- */
-Gallery.prototype.initListeners_ = function() {
- this.keyDownBound_ = this.onKeyDown_.bind(this);
- this.document_.body.addEventListener('keydown', this.keyDownBound_);
-
- this.inactivityWatcher_ = new MouseInactivityWatcher(
- this.container_, Gallery.FADE_TIMEOUT, this.hasActiveTool.bind(this));
-
- // Search results may contain files from different subdirectories so
- // the observer is not going to work.
- if (!this.context_.searchResults && this.context_.curDirEntry) {
- this.metadataCacheObserverId_ = this.metadataCache_.addObserver(
- this.context_.curDirEntry,
- MetadataCache.CHILDREN,
- 'thumbnail',
- this.updateThumbnails_.bind(this));
- }
- this.volumeManager_.addEventListener(
- 'externally-unmounted', this.onExternallyUnmountedBound_);
-};
+ /**
+ * @type {(SlideMode|MosaicMode)}
+ * @private
+ */
+ this.currentMode_ = null;
-/**
- * Closes gallery when a volume containing the selected item is unmounted.
- * @param {!Event} event The unmount event.
- * @private
- */
-Gallery.prototype.onExternallyUnmounted_ = function(event) {
- if (!this.selectedEntry_)
- return;
+ /**
+ * @type {boolean}
+ * @private
+ */
+ this.changingMode_ = false;
- if (this.volumeManager_.getVolumeInfo(this.selectedEntry_) ===
- event.volumeInfo) {
- close();
- }
-};
+ // -----------------------------------------------------------------
+ // Initializes the UI.
-/**
- * Unloads the Gallery.
- * @param {boolean} exiting True if the app is exiting.
- */
-Gallery.prototype.onUnload = function(exiting) {
- if (this.metadataCacheObserverId_ !== null)
- this.metadataCache_.removeObserver(this.metadataCacheObserverId_);
- this.volumeManager_.removeEventListener(
- 'externally-unmounted', this.onExternallyUnmountedBound_);
- this.slideMode_.onUnload(exiting);
-};
-
-/**
- * Initializes DOM UI
- * @private
- */
-Gallery.prototype.initDom_ = function() {
// Initialize the dialog label.
cr.ui.dialogs.BaseDialog.OK_LABEL = str('GALLERY_OK_LABEL');
cr.ui.dialogs.BaseDialog.CANCEL_LABEL = str('GALLERY_CANCEL_LABEL');
- var content = document.querySelector('#content');
+ var content = queryRequiredElement(document, '#content');
content.addEventListener('click', this.onContentClick_.bind(this));
- this.header_ = document.querySelector('#header');
- this.toolbar_ = document.querySelector('#toolbar');
+ this.header_ = queryRequiredElement(document, '#header');
+ this.toolbar_ = queryRequiredElement(document, '#toolbar');
var preventDefault = function(event) { event.preventDefault(); };
@@ -348,7 +281,8 @@ Gallery.prototype.initDom_ = function() {
closeButton.addEventListener('click', this.onClose_.bind(this));
closeButton.addEventListener('mousedown', preventDefault);
- this.filenameSpacer_ = this.toolbar_.querySelector('.filename-spacer');
+ this.filenameSpacer_ = queryRequiredElement(this.toolbar_,
+ '.filename-spacer');
this.filenameEdit_ = util.createChild(this.filenameSpacer_,
'namebox', 'input');
@@ -362,23 +296,23 @@ Gallery.prototype.initDom_ = function() {
this.filenameEdit_.addEventListener('keydown',
this.onFilenameEditKeydown_.bind(this));
- var middleSpacer = this.filenameSpacer_ =
- this.toolbar_.querySelector('.middle-spacer');
- var buttonSpacer = this.toolbar_.querySelector('button-spacer');
+ var middleSpacer = queryRequiredElement(this.toolbar_, '.middle-spacer');
+ var buttonSpacer = queryRequiredElement(this.toolbar_, '.button-spacer');
this.prompt_ = new ImageEditor.Prompt(this.container_, strf);
this.errorBanner_ = new ErrorBanner(this.container_);
- this.modeButton_ = this.toolbar_.querySelector('button.mode');
- this.modeButton_.addEventListener('click', this.toggleMode_.bind(this, null));
+ this.modeButton_ = queryRequiredElement(this.toolbar_, 'button.mode');
+ this.modeButton_.addEventListener('click',
+ this.toggleMode_.bind(this, undefined));
this.mosaicMode_ = new MosaicMode(content,
this.errorBanner_,
this.dataModel_,
this.selectionModel_,
this.volumeManager_,
- this.toggleMode_.bind(this, null));
+ this.toggleMode_.bind(this));
this.slideMode_ = new SlideMode(this.container_,
content,
@@ -413,6 +347,87 @@ Gallery.prototype.initDom_ = function() {
this.slideMode_.addEventListener('useraction', this.onUserAction_.bind(this));
this.shareDialog_ = new ShareDialog(this.container_);
+
+ // -----------------------------------------------------------------
+ // Initialize listeners.
+
+ this.keyDownBound_ = this.onKeyDown_.bind(this);
+ this.document_.body.addEventListener('keydown', this.keyDownBound_);
+
+ this.inactivityWatcher_ = new MouseInactivityWatcher(
+ this.container_, Gallery.FADE_TIMEOUT, this.hasActiveTool.bind(this));
+
+ // Search results may contain files from different subdirectories so
+ // the observer is not going to work.
+ if (!this.context_.searchResults && this.context_.curDirEntry) {
+ this.metadataCacheObserverId_ = this.metadataCache_.addObserver(
+ this.context_.curDirEntry,
+ MetadataCache.CHILDREN,
+ 'thumbnail',
+ this.updateThumbnails_.bind(this));
+ }
+ this.volumeManager_.addEventListener(
+ 'externally-unmounted', this.onExternallyUnmountedBound_);
+}
+
+/**
+ * Gallery extends cr.EventTarget.
+ */
+Gallery.prototype.__proto__ = cr.EventTarget.prototype;
+
+/**
+ * Tools fade-out timeout in milliseconds.
+ * @const
+ * @type {number}
+ */
+Gallery.FADE_TIMEOUT = 2000;
+
+/**
+ * First time tools fade-out timeout in milliseconds.
+ * @const
+ * @type {number}
+ */
+Gallery.FIRST_FADE_TIMEOUT = 1000;
+
+/**
+ * Time until mosaic is initialized in the background. Used to make gallery
+ * in the slide mode load faster. In milliseconds.
+ * @const
+ * @type {number}
+ */
+Gallery.MOSAIC_BACKGROUND_INIT_DELAY = 1000;
+
+/**
+ * Types of metadata Gallery uses (to query the metadata cache).
+ * @const
+ * @type {string}
+ */
+Gallery.METADATA_TYPE = 'thumbnail|filesystem|media|external';
+
+/**
+ * Closes gallery when a volume containing the selected item is unmounted.
+ * @param {!Event} event The unmount event.
+ * @private
+ */
+Gallery.prototype.onExternallyUnmounted_ = function(event) {
+ if (!this.selectedEntry_)
+ return;
+
+ if (this.volumeManager_.getVolumeInfo(this.selectedEntry_) ===
+ event.volumeInfo) {
+ window.close();
+ }
+};
+
+/**
+ * Unloads the Gallery.
+ * @param {boolean=} opt_exiting True if the app is exiting.
+ */
+Gallery.prototype.onUnload = function(opt_exiting) {
+ if (this.metadataCacheObserverId_ !== null)
+ this.metadataCache_.removeObserver(this.metadataCacheObserverId_);
+ this.volumeManager_.removeEventListener(
+ 'externally-unmounted', this.onExternallyUnmountedBound_);
};
/**
@@ -424,7 +439,7 @@ Gallery.prototype.initDom_ = function() {
* @private
*/
Gallery.prototype.initToolbarButton_ = function(className, title) {
- var button = this.toolbar_.querySelector('button.' + className);
+ var button = queryRequiredElement(this.toolbar_, 'button.' + className);
button.title = str(title);
return button;
};
@@ -599,7 +614,7 @@ Gallery.prototype.executeWhenReady = function(callback) {
};
/**
- * @return {Object} File manager private API.
+ * @return {!Object} File manager private API.
*/
Gallery.getFileManagerPrivate = function() {
return chrome.fileManagerPrivate || window.top.chrome.fileManagerPrivate;
@@ -624,7 +639,7 @@ Gallery.prototype.onUserAction_ = function() {
/**
* Sets the current mode, update the UI.
- * @param {Object} mode Current mode.
+ * @param {!(SlideMode|MosaicMode)} mode Current mode.
* @private
*/
Gallery.prototype.setCurrentMode_ = function(mode) {
@@ -673,7 +688,7 @@ Gallery.prototype.toggleMode_ = function(opt_callback, opt_event) {
tileRect,
function() {
// Animate back to normal position.
- mosaic.transform();
+ mosaic.transform(null, null);
mosaic.show();
onModeChanged();
}.bind(this));
@@ -743,11 +758,12 @@ Gallery.prototype.delete_ = function() {
function() {
// Restore the listener after a timeout so that ESC is processed.
setTimeout(restoreListener, 0);
- });
+ },
+ null);
};
/**
- * @return {Array.<Gallery.Item>} Current selection.
+ * @return {!Array.<Gallery.Item>} Current selection.
*/
Gallery.prototype.getSelectedItems = function() {
return this.selectionModel_.selectedIndexes.map(
@@ -755,7 +771,7 @@ Gallery.prototype.getSelectedItems = function() {
};
/**
- * @return {Array.<Entry>} Array of currently selected entries.
+ * @return {!Array.<Entry>} Array of currently selected entries.
*/
Gallery.prototype.getSelectedEntries = function() {
return this.selectionModel_.selectedIndexes.map(function(index) {
@@ -793,7 +809,7 @@ Gallery.prototype.onSplice_ = function() {
/**
* Content change event handler.
- * @param {Event} event Event.
+ * @param {!Event} event Event.
* @private
*/
Gallery.prototype.onContentChange_ = function(event) {
@@ -806,7 +822,7 @@ Gallery.prototype.onContentChange_ = function(event) {
/**
* Keydown handler.
*
- * @param {Event} event Event.
+ * @param {!Event} event Event.
* @private
*/
Gallery.prototype.onKeyDown_ = function(event) {
@@ -820,7 +836,7 @@ Gallery.prototype.onKeyDown_ = function(event) {
break;
case 'U+004D': // 'm' switches between Slide and Mosaic mode.
- this.toggleMode_(null, event);
+ this.toggleMode_(undefined, event);
break;
case 'U+0056': // 'v'
@@ -835,7 +851,7 @@ Gallery.prototype.onKeyDown_ = function(event) {
break;
case 'U+001B': // Escape
- close();
+ window.close();
break;
}
};
@@ -918,8 +934,7 @@ Gallery.prototype.onFilenameFocus_ = function() {
/**
* Blur event handler on filename edit box.
*
- * @param {Event} event Blur event.
- * @return {Promise} Promise fulfilled on renaming completed.
+ * @param {!Event} event Blur event.
* @private
*/
Gallery.prototype.onFilenameEditBlur_ = function(event) {
@@ -950,14 +965,15 @@ Gallery.prototype.onFilenameEditBlur_ = function(event) {
ImageUtil.setAttribute(this.filenameSpacer_, 'renaming', false);
this.onUserAction_();
- return Promise.resolve();
};
/**
* Keydown event handler on filename edit box
+ * @param {!Event} event A keyboard event.
* @private
*/
-Gallery.prototype.onFilenameEditKeydown_ = function() {
+Gallery.prototype.onFilenameEditKeydown_ = function(event) {
+ event = assertInstanceof(event, KeyboardEvent);
switch (event.keyCode) {
case 27: // Escape
this.filenameEdit_.value = this.filenameEdit_.originalValue;
@@ -1034,7 +1050,7 @@ var gallery = null;
/**
* Initialize the window.
- * @param {Object} backgroundComponents Background components.
+ * @param {!BackgroundComponents} backgroundComponents Background components.
*/
window.initialize = function(backgroundComponents) {
window.loadTimeData.data = backgroundComponents.stringData;
« no previous file with comments | « ui/file_manager/gallery/js/compiled_resources.gyp ('k') | ui/file_manager/gallery/js/mosaic_mode.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698