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

Side by Side Diff: chrome/browser/resources/bookmark_manager/js/main.js

Issue 8497008: Implement Bookmark All Tabs Dialog with WebUI. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: review fix Created 9 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 const BookmarkList = bmm.BookmarkList; 5 const BookmarkList = bmm.BookmarkList;
6 const BookmarkTree = bmm.BookmarkTree; 6 const BookmarkTree = bmm.BookmarkTree;
7 const ListItem = cr.ui.ListItem; 7 const ListItem = cr.ui.ListItem;
8 const TreeItem = cr.ui.TreeItem; 8 const TreeItem = cr.ui.TreeItem;
9 const LinkKind = cr.LinkKind; 9 const LinkKind = cr.LinkKind;
10 const Command = cr.ui.Command; 10 const Command = cr.ui.Command;
(...skipping 27 matching lines...) Expand all
38 recentTreeItem.label = localStrings.getString('recent'); 38 recentTreeItem.label = localStrings.getString('recent');
39 searchTreeItem.label = localStrings.getString('search'); 39 searchTreeItem.label = localStrings.getString('search');
40 }); 40 });
41 41
42 /** 42 /**
43 * The id of the bookmark root. 43 * The id of the bookmark root.
44 * @type {number} 44 * @type {number}
45 */ 45 */
46 const ROOT_ID = '0'; 46 const ROOT_ID = '0';
47 47
48 var bookmarkCache = {
49 /**
50 * Removes the cached item from both the list and tree lookups.
51 */
52 remove: function(id) {
53 var treeItem = bmm.treeLookup[id];
54 if (treeItem) {
55 var items = treeItem.items; // is an HTMLCollection
56 for (var i = 0, item; item = items[i]; i++) {
57 var bookmarkNode = item.bookmarkNode;
58 delete bmm.treeLookup[bookmarkNode.id];
59 }
60 delete bmm.treeLookup[id];
61 }
62 },
63
64 /**
65 * Updates the underlying bookmark node for the tree items and list items by
66 * querying the bookmark backend.
67 * @param {string} id The id of the node to update the children for.
68 * @param {Function=} opt_f A funciton to call when done.
69 */
70 updateChildren: function(id, opt_f) {
71 function updateItem(bookmarkNode) {
72 var treeItem = bmm.treeLookup[bookmarkNode.id];
73 if (treeItem) {
74 treeItem.bookmarkNode = bookmarkNode;
75 }
76 }
77
78 chrome.bookmarks.getChildren(id, function(children) {
79 if (children)
80 children.forEach(updateItem);
81
82 if (opt_f)
83 opt_f(children);
84 });
85 }
86 };
87
88 var splitter = document.querySelector('.main > .splitter'); 48 var splitter = document.querySelector('.main > .splitter');
89 cr.ui.Splitter.decorate(splitter); 49 cr.ui.Splitter.decorate(splitter);
90 50
91 // The splitter persists the size of the left component in the local store. 51 // The splitter persists the size of the left component in the local store.
92 if ('treeWidth' in localStorage) 52 if ('treeWidth' in localStorage)
93 splitter.previousElementSibling.style.width = localStorage['treeWidth']; 53 splitter.previousElementSibling.style.width = localStorage['treeWidth'];
94 splitter.addEventListener('resize', function(e) { 54 splitter.addEventListener('resize', function(e) {
95 localStorage['treeWidth'] = splitter.previousElementSibling.style.width; 55 localStorage['treeWidth'] = splitter.previousElementSibling.style.width;
96 }); 56 });
97 57
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
289 } 249 }
290 250
291 // Handle the logo button UI. 251 // Handle the logo button UI.
292 // When the user clicks the button we should navigate "home" and focus the list. 252 // When the user clicks the button we should navigate "home" and focus the list.
293 document.querySelector('button.logo').onclick = function(e) { 253 document.querySelector('button.logo').onclick = function(e) {
294 setSearch(''); 254 setSearch('');
295 $('list').focus(); 255 $('list').focus();
296 }; 256 };
297 257
298 /** 258 /**
299 * Called when the title of a bookmark changes.
300 * @param {string} id
301 * @param {!Object} changeInfo
302 */
303 function handleBookmarkChanged(id, changeInfo) {
304 list.handleBookmarkChanged(id, changeInfo);
305 tree.handleBookmarkChanged(id, changeInfo);
306 }
307
308 /**
309 * Callback for when the user reorders by title.
310 * @param {string} id The id of the bookmark folder that was reordered.
311 * @param {!Object} reorderInfo The information about how the items where
312 * reordered.
313 */
314 function handleChildrenReordered(id, reorderInfo) {
315 list.handleChildrenReordered(id, reorderInfo);
316 tree.handleChildrenReordered(id, reorderInfo);
317 bookmarkCache.updateChildren(id);
318 }
319
320 /**
321 * Callback for when a bookmark node is created.
322 * @param {string} id The id of the newly created bookmark node.
323 * @param {!Object} bookmarkNode The new bookmark node.
324 */
325 function handleCreated(id, bookmarkNode) {
326 list.handleCreated(id, bookmarkNode);
327 tree.handleCreated(id, bookmarkNode);
328 bookmarkCache.updateChildren(bookmarkNode.parentId);
329 }
330
331 function handleMoved(id, moveInfo) {
332 list.handleMoved(id, moveInfo);
333 tree.handleMoved(id, moveInfo);
334
335 bookmarkCache.updateChildren(moveInfo.parentId);
336 if (moveInfo.parentId != moveInfo.oldParentId)
337 bookmarkCache.updateChildren(moveInfo.oldParentId);
338 }
339
340 function handleRemoved(id, removeInfo) {
341 list.handleRemoved(id, removeInfo);
342 tree.handleRemoved(id, removeInfo);
343
344 bookmarkCache.updateChildren(removeInfo.parentId);
345 bookmarkCache.remove(id);
346 }
347
348 function handleImportBegan() {
349 chrome.bookmarks.onCreated.removeListener(handleCreated);
350 chrome.bookmarks.onChanged.removeListener(handleBookmarkChanged);
351 }
352
353 function handleImportEnded() {
354 // When importing is done we reload the tree and the list.
355
356 function f() {
357 tree.removeEventListener('load', f);
358
359 chrome.bookmarks.onCreated.addListener(handleCreated);
360 chrome.bookmarks.onChanged.addListener(handleBookmarkChanged);
361
362 if (list.selectImportedFolder) {
363 var otherBookmarks = tree.items[1].items;
364 var importedFolder = otherBookmarks[otherBookmarks.length - 1];
365 navigateTo(importedFolder.bookmarkId)
366 list.selectImportedFolder = false
367 } else {
368 list.reload();
369 }
370 }
371
372 tree.addEventListener('load', f);
373 tree.reload();
374 }
375
376 /**
377 * Adds the listeners for the bookmark model change events.
378 */
379 function addBookmarkModelListeners() {
380 chrome.bookmarks.onChanged.addListener(handleBookmarkChanged);
381 chrome.bookmarks.onChildrenReordered.addListener(handleChildrenReordered);
382 chrome.bookmarks.onCreated.addListener(handleCreated);
383 chrome.bookmarks.onMoved.addListener(handleMoved);
384 chrome.bookmarks.onRemoved.addListener(handleRemoved);
385 chrome.bookmarks.onImportBegan.addListener(handleImportBegan);
386 chrome.bookmarks.onImportEnded.addListener(handleImportEnded);
387 }
388
389 /**
390 * This returns the user visible path to the folder where the bookmark is 259 * This returns the user visible path to the folder where the bookmark is
391 * located. 260 * located.
392 * @param {number} parentId The ID of the parent folder. 261 * @param {number} parentId The ID of the parent folder.
393 * @return {string} The path to the the bookmark, 262 * @return {string} The path to the the bookmark,
394 */ 263 */
395 function getFolder(parentId) { 264 function getFolder(parentId) {
396 var parentNode = tree.getBookmarkNodeById(parentId); 265 var parentNode = tree.getBookmarkNodeById(parentId);
397 if (parentNode) { 266 if (parentNode) {
398 var s = parentNode.title; 267 var s = parentNode.title;
399 if (parentNode.parentId != ROOT_ID) { 268 if (parentNode.parentId != ROOT_ID) {
400 return getFolder(parentNode.parentId) + '/' + s; 269 return getFolder(parentNode.parentId) + '/' + s;
401 } 270 }
402 return s; 271 return s;
403 } 272 }
404 } 273 }
405 274
406 tree.addEventListener('load', function(e) { 275 tree.addEventListener('load', function(e) {
407 // Add hard coded tree items. 276 // Add hard coded tree items.
408 tree.add(recentTreeItem); 277 tree.add(recentTreeItem);
409 processHash(); 278 processHash();
410 }); 279 });
411 280
412 tree.reload(); 281 tree.reload();
413 addBookmarkModelListeners(); 282 bmm.addBookmarkModelListeners();
414 283
415 var dnd = { 284 var dnd = {
416 dragData: null, 285 dragData: null,
417 286
418 getBookmarkElement: function(el) { 287 getBookmarkElement: function(el) {
419 while (el && !el.bookmarkNode) { 288 while (el && !el.bookmarkNode) {
420 el = el.parentNode; 289 el = el.parentNode;
421 } 290 }
422 return el; 291 return el;
423 }, 292 },
(...skipping 1234 matching lines...) Expand 10 before | Expand all | Expand 10 after
1658 document.addEventListener('copy', handle('copy-command')); 1527 document.addEventListener('copy', handle('copy-command'));
1659 document.addEventListener('cut', handle('cut-command')); 1528 document.addEventListener('cut', handle('cut-command'));
1660 1529
1661 var pasteHandler = handle('paste-command'); 1530 var pasteHandler = handle('paste-command');
1662 document.addEventListener('paste', function(e) { 1531 document.addEventListener('paste', function(e) {
1663 // Paste is a bit special since we need to do an async call to see if we can 1532 // Paste is a bit special since we need to do an async call to see if we can
1664 // paste because the paste command might not be up to date. 1533 // paste because the paste command might not be up to date.
1665 updatePasteCommand(pasteHandler); 1534 updatePasteCommand(pasteHandler);
1666 }); 1535 });
1667 })(); 1536 })();
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698