Chromium Code Reviews| Index: chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_manager.js |
| diff --git a/chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_manager.js b/chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_manager.js |
| index 76c3a21c1e49422fa017b40f032293b270ad5ae4..6e1b25019d57b5c6fbf78b50abaa26ad4e4f022b 100644 |
| --- a/chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_manager.js |
| +++ b/chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_manager.js |
| @@ -252,6 +252,69 @@ function WallpaperManager(dialogDom) { |
| }); |
| this.onResize_(); |
| + this.initContextMenuAndCommand_(); |
| + }; |
| + |
| + /** |
| + * One-time initialization of context menu and command. |
| + */ |
| + WallpaperManager.prototype.initContextMenuAndCommand_ = function() { |
| + this.wallpaperContextMenu_ = $('wallpaper-context-menu'); |
| + cr.ui.Menu.decorate(this.wallpaperContextMenu_); |
| + cr.ui.contextMenuHandler.setContextMenu(this.wallpaperGrid_, |
| + this.wallpaperContextMenu_); |
| + var commands = this.dialogDom_.querySelectorAll('command'); |
| + for (var i = 0; i < commands.length; i++) |
| + cr.ui.Command.decorate(commands[i]); |
| + |
| + var doc = this.document_; |
| + doc.addEventListener('command', this.onCommand_.bind(this)); |
| + doc.addEventListener('canExecute', this.onCommandCanExecute_.bind(this)); |
| + }; |
| + |
| + /** |
| + * Handles a command being executed. |
| + * @param {Event} event A command event. |
| + */ |
| + WallpaperManager.prototype.onCommand_ = function(event) { |
| + if (event.command.id == 'delete') { |
| + var wallpaperGrid = this.wallpaperGrid_; |
| + var selectedIndex = wallpaperGrid.selectionModel.selectedIndex; |
| + var item = wallpaperGrid.dataModel.item(selectedIndex); |
| + if (!item || item.source != wallpapers.WallpaperSourceEnum.Custom) |
| + return; |
| + this.removeCustomWallpaper(item.baseURL); |
| + wallpaperGrid.dataModel.splice(selectedIndex, 1); |
| + // The number of remaining custom wallpapers. The add new button in data |
|
flackr
2013/03/21 21:51:19
s/The number of/Calculate the number of
The secon
bshe
2013/03/22 15:11:57
Done.
|
| + // model needs to be excluded. |
| + var number = wallpaperGrid.dataModel.length - 1; |
|
flackr
2013/03/21 21:51:19
s/number/customWallpaperCount
bshe
2013/03/22 15:11:57
Done.
|
| + if (number == 0) { |
| + // Active custom wallpaper is also copied in chronos data dir. It needs |
| + // to be deleted. |
| + chrome.wallpaperPrivate.resetWallpaper(); |
| + } else { |
| + selectedIndex = Math.min(selectedIndex, number - 1); |
| + wallpaperGrid.selectionModel.selectedIndex = selectedIndex; |
| + } |
| + event.cancelBubble = true; |
| + } |
| + }; |
| + |
| + /** |
| + * Decides if a command can be executed on current target. |
| + * @param {Event} event A command event. |
| + */ |
| + WallpaperManager.prototype.onCommandCanExecute_ = function(event) { |
| + if (event.command.id == 'delete') { |
| + var wallpaperGrid = this.wallpaperGrid_; |
| + var selectedIndex = wallpaperGrid.selectionModel.selectedIndex; |
| + if (selectedIndex != -1 && |
| + selectedIndex != this.wallpaperGrid_.dataModel.length - 1) { |
| + event.canExecute = true; |
| + return; |
| + } |
|
flackr
2013/03/21 21:51:19
No check for if this is a custom wallpaper or not?
bshe
2013/03/22 15:11:57
Good call. I have hide the context menu for online
|
| + } |
| + event.canExecute = false; |
|
flackr
2013/03/21 21:51:19
Nit: Usually the pattern followed is to have multi
bshe
2013/03/22 15:11:57
I was thinking to use this function if we ever wan
|
| }; |
| /** |
| @@ -428,7 +491,6 @@ function WallpaperManager(dialogDom) { |
| var item = this.wallpaperGrid_.dataModel.item(oldestIndex); |
| if (!item || item.source != wallpapers.WallpaperSourceEnum.Custom) |
| return; |
| - console.error(item.baseURL); |
| if (item.baseURL == this.currentWallpaper_) |
| item = this.wallpaperGrid_.dataModel.item(--oldestIndex); |
| if (item) { |
| @@ -782,7 +844,7 @@ function WallpaperManager(dialogDom) { |
| var wallpapersDataModel = new cr.ui.ArrayDataModel([]); |
| var selectedItem; |
| if (selectedListItem.custom) { |
| - $('online-wallpaper-attribute').hidden = true; |
| + this.document_.body.setAttribute('custom', ''); |
| var errorHandler = this.onFileSystemError_.bind(this); |
| var toArray = function(list) { |
| return Array.prototype.slice.call(list || [], 0); |
| @@ -839,7 +901,7 @@ function WallpaperManager(dialogDom) { |
| this.wallpaperDirs_.getDirectory(WallpaperDirNameEnum.ORIGINAL, |
| success, errorHandler); |
| } else { |
| - $('online-wallpaper-attribute').hidden = false; |
| + this.document_.body.removeAttribute('custom'); |
| for (var key in this.manifest_.wallpaper_list) { |
| if (selectedIndex == AllCategoryIndex || |
| this.manifest_.wallpaper_list[key].categories.indexOf( |