Chromium Code Reviews| Index: chrome/browser/resources/bookmark_manager/js/main.js |
| diff --git a/chrome/browser/resources/bookmark_manager/js/main.js b/chrome/browser/resources/bookmark_manager/js/main.js |
| index 46c2b72adc988bc90a9ea75ebdb237c44ea9bed1..ed33c432b296a5fe2d996aeaf49206eb4c52eec3 100644 |
| --- a/chrome/browser/resources/bookmark_manager/js/main.js |
| +++ b/chrome/browser/resources/bookmark_manager/js/main.js |
| @@ -1487,33 +1487,59 @@ function undoDelete() { |
| } |
| /** |
| + * Computes folder for "Add Page" and "Add Folder". |
| + * @return {string} The id of folder node where we'll create new page/folder. |
| + */ |
| +function computeParentFolderForNewItem() { |
| + if (document.activeElement == tree) |
| + return list.parentId; |
| + var selectedItem = list.selectedItem; |
| + return selectedItem && bmm.isFolder(selectedItem) ? |
| + selectedItem.id : list.parentId; |
| +} |
| + |
| +/** |
| * Callback for the new folder command. This creates a new folder and starts |
| * a rename of it. |
| */ |
| function newFolder() { |
| - var parentId = list.parentId; |
| - var isTree = document.activeElement == tree; |
| - chrome.bookmarks.create({ |
| - title: loadTimeData.getString('new_folder_name'), |
| - parentId: parentId |
| - }, function(newNode) { |
| - // This callback happens before the event that triggers the tree/list to |
| - // get updated so delay the work so that the tree/list gets updated first. |
| - setTimeout(function() { |
| - var newItem; |
| - if (isTree) { |
| - newItem = bmm.treeLookup[newNode.id]; |
| - tree.selectedItem = newItem; |
| - newItem.editing = true; |
| - } else { |
| - var index = list.dataModel.findIndexById(newNode.id); |
| - var sm = list.selectionModel; |
| - sm.anchorIndex = sm.leadIndex = sm.selectedIndex = index; |
| - scrollIntoViewAndMakeEditable(index); |
| - } |
| - }, 50); |
| - }); |
| performGlobalUndo = null; // This can't be undone, so disable global undo. |
| + |
| + var parentId = computeParentFolderForNewItem(); |
| + |
| + // Callback is called after tree and list data model updated. |
| + function createFolder(callback) { |
| + chrome.bookmarks.create({ |
| + title: loadTimeData.getString('new_folder_name'), |
| + parentId: parentId |
| + }, callback); |
| + } |
| + |
| + if (document.activeElement == tree) { |
| + createFolder(function(newNode) { |
| + newItem = bmm.treeLookup[newNode.id]; |
| + tree.selectedItem = newItem; |
| + newItem.editing = true; |
| + }); |
| + return; |
| + } |
| + |
| + function editNewFolderInList() { |
| + createFolder(function() { |
| + var index = list.dataModel.length - 1; |
| + var sm = list.selectionModel; |
| + sm.anchorIndex = sm.leadIndex = sm.selectedIndex = index; |
| + scrollIntoViewAndMakeEditable(index); |
| + }); |
| + } |
| + |
| + if (parentId == list.parentId) { |
| + editNewFolderInList(); |
| + return; |
| + } |
| + |
| + addOneShotEventListener(list, 'load', editNewFolderInList); |
| + navigateTo(parentId, true); |
| } |
| /** |
| @@ -1536,20 +1562,30 @@ function scrollIntoViewAndMakeEditable(index) { |
| * add-new-bookmark-command handler. |
| */ |
| function addPage() { |
| - var parentId = list.parentId; |
| - var fakeNode = { |
| - title: '', |
| - url: '', |
| - parentId: parentId, |
| - id: 'new' |
| + var parentId = computeParentFolderForNewItem(); |
| + |
| + function editNewBookmark() { |
| + var fakeNode = { |
| + title: '', |
| + url: '', |
| + parentId: parentId, |
| + id: 'new' |
| + }; |
| + var dataModel = list.dataModel; |
| + var length = dataModel.length; |
| + dataModel.splice(length, 0, fakeNode); |
| + var sm = list.selectionModel; |
| + sm.anchorIndex = sm.leadIndex = sm.selectedIndex = length; |
| + scrollIntoViewAndMakeEditable(length); |
| }; |
| - var dataModel = list.dataModel; |
| - var length = dataModel.length; |
| - dataModel.splice(length, 0, fakeNode); |
| - var sm = list.selectionModel; |
| - sm.anchorIndex = sm.leadIndex = sm.selectedIndex = length; |
| - scrollIntoViewAndMakeEditable(length); |
| + if (parentId == list.parentId) { |
| + editNewBookmark(); |
| + return; |
| + } |
| + |
| + addOneShotEventListener(list, 'load', editNewBookmark); |
| + navigateTo(parentId, true); |
|
arv (Not doing code reviews)
2012/11/26 14:50:44
Maybe we should have navigateTo take an optional c
|
| } |
| /** |