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

Unified Diff: chrome/browser/resources/md_bookmarks/api_listener.js

Issue 2977523002: MD Bookmarks: Scroll and select items that are added to the main list (Closed)
Patch Set: Finish highlight on API callback Created 3 years, 5 months 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
Index: chrome/browser/resources/md_bookmarks/api_listener.js
diff --git a/chrome/browser/resources/md_bookmarks/api_listener.js b/chrome/browser/resources/md_bookmarks/api_listener.js
index 1e8852cbe7d587a12e13c8fe04c9ef2a0978a0bb..b4aaf5d97ace0d01056ec7738f93719c286df374 100644
--- a/chrome/browser/resources/md_bookmarks/api_listener.js
+++ b/chrome/browser/resources/md_bookmarks/api_listener.js
@@ -11,6 +11,10 @@ cr.define('bookmarks.ApiListener', function() {
/** @type {?number} */
var timerHandle;
+ /** @type {boolean} */
+ var trackUpdates = false;
+ /** @type {!Array<string>} */
+ var updatedItems = [];
/**
* Batches UI updates so that no changes will be made to UI until the next
@@ -29,6 +33,31 @@ cr.define('bookmarks.ApiListener', function() {
});
}
+ /**
+ * Tracks any items that are created or moved.
+ */
+ function trackUpdatedItems() {
+ trackUpdates = true;
+ }
+
+ /**
+ * Highlights any items that have been updated since |trackUpdatedItems| was
+ * called. Should be called after a user action causes new items to appear in
+ * the main list.
+ */
+ function highlightUpdatedItems() {
+ assert(trackUpdates);
calamity 2017/07/19 05:25:14 Try mashing Ctrl+V while you drop something. I get
tsergeant 2017/07/19 06:53:12 Yeah, I think I was able to get this to trigger.
+ // Ensure that the items are highlighted after the current batch update (if
+ // there is one) is completed.
+ setTimeout(function() {
+ document.dispatchEvent(new CustomEvent('highlight-items', {
+ detail: updatedItems,
+ }));
+ updatedItems = [];
+ trackUpdates = false;
+ });
+ }
+
/** @param {Action} action */
function dispatch(action) {
bookmarks.Store.getInstance().dispatch(action);
@@ -48,6 +77,8 @@ cr.define('bookmarks.ApiListener', function() {
*/
function onBookmarkCreated(id, treeNode) {
batchUIUpdates();
+ if (trackUpdatedItems)
+ updatedItems.push(id);
dispatch(bookmarks.actions.createBookmark(id, treeNode));
}
@@ -73,6 +104,8 @@ cr.define('bookmarks.ApiListener', function() {
*/
function onBookmarkMoved(id, moveInfo) {
batchUIUpdates();
+ if (trackUpdatedItems)
+ updatedItems.push(id);
dispatch(bookmarks.actions.moveBookmark(
id, moveInfo.parentId, moveInfo.index, moveInfo.oldParentId,
moveInfo.oldIndex));
@@ -116,14 +149,18 @@ cr.define('bookmarks.ApiListener', function() {
dispatch(bookmarks.actions.setCanEditBookmarks(canEdit));
}
+ var listeners = [
+ {api: chrome.bookmarks.onChanged, fn: onBookmarkChanged},
+ {api: chrome.bookmarks.onChildrenReordered, fn: onChildrenReordered},
+ {api: chrome.bookmarks.onCreated, fn: onBookmarkCreated},
+ {api: chrome.bookmarks.onMoved, fn: onBookmarkMoved},
+ {api: chrome.bookmarks.onRemoved, fn: onBookmarkRemoved},
+ {api: chrome.bookmarks.onImportBegan, fn: onImportBegan},
+ {api: chrome.bookmarks.onImportEnded, fn: onImportEnded},
+ ];
+
function init() {
- chrome.bookmarks.onChanged.addListener(onBookmarkChanged);
- chrome.bookmarks.onChildrenReordered.addListener(onChildrenReordered);
- chrome.bookmarks.onCreated.addListener(onBookmarkCreated);
- chrome.bookmarks.onMoved.addListener(onBookmarkMoved);
- chrome.bookmarks.onRemoved.addListener(onBookmarkRemoved);
- chrome.bookmarks.onImportBegan.addListener(onImportBegan);
- chrome.bookmarks.onImportEnded.addListener(onImportEnded);
+ listeners.forEach((listener) => listener.api.addListener(listener.fn));
cr.sendWithPromise('getIncognitoAvailability')
.then(onIncognitoAvailabilityChanged);
@@ -135,7 +172,18 @@ cr.define('bookmarks.ApiListener', function() {
'can-edit-bookmarks-changed', onCanEditBookmarksChanged);
}
+ function destroy() {
+ listeners.forEach((listener) => listener.api.removeListener(listener.fn));
+ cr.removeWebUIListener(
+ 'incognito-availability-changed', onIncognitoAvailabilityChanged);
+ cr.removeWebUIListener(
+ 'can-edit-bookmarks-changed', onCanEditBookmarksChanged);
+ }
+
return {
init: init,
+ destroy: destroy,
+ trackUpdatedItems: trackUpdatedItems,
+ highlightUpdatedItems: highlightUpdatedItems,
};
});

Powered by Google App Engine
This is Rietveld 408576698