| Index: chrome/browser/resources/md_bookmarks/store.js
|
| diff --git a/chrome/browser/resources/md_bookmarks/store.js b/chrome/browser/resources/md_bookmarks/store.js
|
| index 16a22a44ddb95fbbe919a4f34491a7938e48318c..5cf9a003ed60db8463eb8e93fb7ea1862f3a69ce 100644
|
| --- a/chrome/browser/resources/md_bookmarks/store.js
|
| +++ b/chrome/browser/resources/md_bookmarks/store.js
|
| @@ -45,6 +45,9 @@ var BookmarksStore = Polymer({
|
|
|
| /** @type {Set<string>} */
|
| searchResultSet_: Object,
|
| +
|
| + /** @type {Set<number>} */
|
| + selectedIndexSet_: Object,
|
| },
|
|
|
| /** @private {Object} */
|
| @@ -54,6 +57,7 @@ var BookmarksStore = Polymer({
|
| attached: function() {
|
| this.documentListeners_ = {
|
| 'folder-open-changed': this.onFolderOpenChanged_.bind(this),
|
| + 'open-item': this.onItemOpened_.bind(this),
|
| 'search-term-changed': this.onSearchTermChanged_.bind(this),
|
| 'select-item': this.onItemSelected_.bind(this),
|
| 'selected-folder-changed': this.onSelectedFolderChanged_.bind(this),
|
| @@ -92,6 +96,7 @@ var BookmarksStore = Polymer({
|
| this.rootNode = rootNode;
|
| this.idToNodeMap_ = {};
|
| this.rootNode.path = 'rootNode';
|
| + this.selectedIndexSet_ = new Set();
|
| BookmarksStore.generatePaths(rootNode, 0);
|
| BookmarksStore.initNodes(this.rootNode, this.idToNodeMap_);
|
|
|
| @@ -187,6 +192,8 @@ var BookmarksStore = Polymer({
|
| if (!this.displayedList)
|
| return;
|
|
|
| + this.selectedIndexSet_.clear();
|
| +
|
| for (var i = 0; i < this.displayedList.length; i++) {
|
| if (!this.displayedList[i].isSelectedItem)
|
| continue;
|
| @@ -250,8 +257,10 @@ var BookmarksStore = Polymer({
|
| startIndex = Math.min(this.anchorIndex_, selectedIndex);
|
| endIndex = Math.max(this.anchorIndex_, selectedIndex);
|
| }
|
| - for (var i = startIndex; i <= endIndex; i++)
|
| + for (var i = startIndex; i <= endIndex; i++) {
|
| this.set('displayedList.#' + i + '.isSelectedItem', true);
|
| + this.selectedIndexSet_.add(i);
|
| + }
|
| },
|
|
|
| /**
|
| @@ -262,6 +271,7 @@ var BookmarksStore = Polymer({
|
| selectItem_: function(item) {
|
| this.anchorIndex_ = this.getIndexInList_(item);
|
| this.set('displayedList.#' + this.anchorIndex_ + '.isSelectedItem', true);
|
| + this.selectedIndexSet_.add(this.anchorIndex_);
|
| },
|
|
|
| //////////////////////////////////////////////////////////////////////////////
|
| @@ -360,9 +370,19 @@ var BookmarksStore = Polymer({
|
| if (!this.idToNodeMap_[id] || this.idToNodeMap_[id].url)
|
| id = this.rootNode.children[0].id;
|
|
|
| - var newFolder = this.idToNodeMap_[id];
|
| - this.set(newFolder.path + '.isSelectedFolder', true);
|
| + var folder = this.idToNodeMap_[id];
|
| + this.set(folder.path + '.isSelectedFolder', true);
|
| this.selectedId = id;
|
| + while (folder.parentId) {
|
| + folder = this.idToNodeMap_[folder.parentId];
|
| + if (folder.isOpen)
|
| + continue;
|
| +
|
| + this.fire('folder-open-changed', {
|
| + id: folder.id,
|
| + open: true,
|
| + });
|
| + }
|
| },
|
|
|
| /**
|
| @@ -391,6 +411,27 @@ var BookmarksStore = Polymer({
|
| else
|
| this.selectItem_(e.detail.item);
|
| },
|
| +
|
| + /**
|
| + * @param {CustomEvent} e
|
| + * @private
|
| + */
|
| + onItemOpened_: function(e) {
|
| + if (this.selectedIndexSet_.size == 1) {
|
| + // do the single event here
|
| + if (!e.detail.item.url)
|
| + this.fire('selected-folder-changed', e.detail.item.id);
|
| + else
|
| + chrome.tabs.create({url: e.detail.item.url});
|
| + } else {
|
| + for (let index of this.selectedIndexSet_) {
|
| + if (!this.displayedList[index].url)
|
| + continue;
|
| +
|
| + chrome.tabs.create({url: this.displayedList[index].url});
|
| + }
|
| + }
|
| + },
|
| });
|
|
|
| ////////////////////////////////////////////////////////////////////////////////
|
|
|