Bug 1144380 - active state on reading list sidebar persists after switching tabs, r=markh.

This commit is contained in:
Florian Quèze 2015-03-20 12:05:35 -07:00
Родитель d48db7924b
Коммит f87e13098f
2 изменённых файлов: 36 добавлений и 8 удалений

Просмотреть файл

@ -242,12 +242,20 @@ let ReadingListUI = {
uri = null;
}
let msg = {topic: "UpdateActiveItem", url: null};
if (!uri) {
this.toolbarButton.setAttribute("hidden", true);
if (this.isSidebarOpen)
document.getElementById("sidebar").contentWindow.postMessage(msg, "*");
return;
}
let isInList = yield ReadingList.containsURL(uri);
if (this.isSidebarOpen) {
if (isInList)
msg.url = typeof uri == "string" ? uri : uri.spec;
document.getElementById("sidebar").contentWindow.postMessage(msg, "*");
}
this.setToolbarButtonState(isInList);
}),
@ -317,6 +325,10 @@ let ReadingListUI = {
onItemAdded(item) {
if (this.isItemForCurrentBrowser(item)) {
this.setToolbarButtonState(true);
if (this.isSidebarOpen) {
let msg = {topic: "UpdateActiveItem", url: item.url};
document.getElementById("sidebar").contentWindow.postMessage(msg, "*");
}
}
},

Просмотреть файл

@ -61,6 +61,8 @@ let RLSidebar = {
this.list.addEventListener("mousemove", event => this.onListMouseMove(event));
this.list.addEventListener("keydown", event => this.onListKeyDown(event), true);
window.addEventListener("message", event => this.onMessage(event));
this.listPromise = this.ensureListItems();
ReadingList.addListener(this);
@ -186,15 +188,9 @@ let RLSidebar = {
log.debug(`Setting activeItem: ${node ? node.id : null}`);
if (node) {
if (!node.classList.contains("selected")) {
this.selectedItem = node;
}
if (node.classList.contains("active")) {
if (node && node.classList.contains("active")) {
return;
}
}
let prevItem = document.querySelector("#list > .item.active");
if (prevItem) {
@ -416,6 +412,26 @@ let RLSidebar = {
}
}
},
/**
* Handle a message, typically sent from browser-readinglist.js
* @param {Event} event - Triggering event.
*/
onMessage(event) {
let msg = event.data;
if (msg.topic != "UpdateActiveItem") {
return;
}
if (!msg.url) {
this.activeItem = null;
} else {
ReadingList.getItemForURL(msg.url).then(item => {
this.activeItem = this.itemNodesById.get(item.id);
});
}
}
};