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

Unified Diff: chrome/browser/resources/bookmark_manager/js/main.js

Issue 11411162: Adding new folder/page in selected folder on context menu/organize button (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 1 month 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 | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
}
/**
« 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