Scroll on global mark and handle gone tab
This commit is contained in:
parent
003742ec51
commit
e248477ecb
9 changed files with 49 additions and 13 deletions
|
@ -1,6 +1,7 @@
|
|||
export default class GlobalMark {
|
||||
constructor(tabId, x, y) {
|
||||
constructor(tabId, url, x, y) {
|
||||
this.tabId0 = tabId;
|
||||
this.url0 = url;
|
||||
this.x0 = x;
|
||||
this.y0 = y;
|
||||
}
|
||||
|
@ -9,6 +10,10 @@ export default class GlobalMark {
|
|||
return this.tabId0;
|
||||
}
|
||||
|
||||
get url() {
|
||||
return this.url0;
|
||||
}
|
||||
|
||||
get x() {
|
||||
return this.x0;
|
||||
}
|
||||
|
|
|
@ -22,4 +22,12 @@ export default class ContentMessageClient {
|
|||
type: messages.ADDON_TOGGLE_ENABLED,
|
||||
});
|
||||
}
|
||||
|
||||
scrollTo(tabId, x, y) {
|
||||
return browser.tabs.sendMessage(tabId, {
|
||||
type: messages.TAB_SCROLL_TO,
|
||||
x,
|
||||
y,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,13 +14,13 @@ export default class MarkRepository {
|
|||
if (!data) {
|
||||
return Promise.resolve(undefined);
|
||||
}
|
||||
let mark = new GlobalMark(data.tabId, data.x, data.y);
|
||||
let mark = new GlobalMark(data.tabId, data.url, data.x, data.y);
|
||||
return Promise.resolve(mark);
|
||||
}
|
||||
|
||||
setMark(key, mark) {
|
||||
let marks = this.getOrEmptyMarks();
|
||||
marks[key] = { tabId: mark.tabId, x: mark.x, y: mark.y };
|
||||
marks[key] = { tabId: mark.tabId, url: mark.url, x: mark.x, y: mark.y };
|
||||
this.cache.set(MARK_KEY, marks);
|
||||
|
||||
return Promise.resolve();
|
||||
|
|
|
@ -2,17 +2,19 @@ import GlobalMark from '../domains/global-mark';
|
|||
import TabPresenter from '../presenters/tab';
|
||||
import MarkRepository from '../repositories/mark';
|
||||
import ConsolePresenter from '../presenters/console';
|
||||
import ContentMessageClient from '../infrastructures/content-message-client';
|
||||
|
||||
export default class MarkInteractor {
|
||||
constructor() {
|
||||
this.tabPresenter = new TabPresenter();
|
||||
this.markRepository = new MarkRepository();
|
||||
this.consolePresenter = new ConsolePresenter();
|
||||
this.contentMessageClient = new ContentMessageClient();
|
||||
}
|
||||
|
||||
async setGlobal(key, x, y) {
|
||||
let tab = await this.tabPresenter.getCurrent();
|
||||
let mark = new GlobalMark(tab.id, x, y);
|
||||
let mark = new GlobalMark(tab.id, tab.url, x, y);
|
||||
return this.markRepository.setMark(key, mark);
|
||||
}
|
||||
|
||||
|
@ -23,7 +25,15 @@ export default class MarkInteractor {
|
|||
if (!mark) {
|
||||
return this.consolePresenter.showError(current.id, 'Mark is not set');
|
||||
}
|
||||
// TODO scroll pages and handle if tab is gone
|
||||
return this.tabPresenter.select(mark.tabId);
|
||||
|
||||
return this.contentMessageClient.scrollTo(
|
||||
mark.tabId, mark.x, mark.y
|
||||
).then(() => {
|
||||
return this.tabPresenter.select(mark.tabId);
|
||||
}).catch(async() => {
|
||||
let tab = await this.tabPresenter.create(mark.url);
|
||||
let mark2 = new GlobalMark(tab.id, mark.url, mark.x, mark.y);
|
||||
return this.markRepository.setMark(key, mark2);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
Reference in a new issue