get hints from window
This commit is contained in:
parent
890f84c343
commit
bebf8e2327
3 changed files with 13 additions and 13 deletions
|
@ -9,20 +9,21 @@ const TARGET_SELECTOR = [
|
||||||
'[contenteditable=true]', '[contenteditable=""]'
|
'[contenteditable=true]', '[contenteditable=""]'
|
||||||
].join(',');
|
].join(',');
|
||||||
|
|
||||||
const inWindow = (window, element) => {
|
const inWindow = (win, element) => {
|
||||||
let {
|
let {
|
||||||
top, left, bottom, right
|
top, left, bottom, right
|
||||||
} = element.getBoundingClientRect();
|
} = element.getBoundingClientRect();
|
||||||
|
let doc = win.doc;
|
||||||
return (
|
return (
|
||||||
top >= 0 && left >= 0 &&
|
top >= 0 && left >= 0 &&
|
||||||
bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
|
bottom <= (win.innerHeight || doc.documentElement.clientHeight) &&
|
||||||
right <= (window.innerWidth || document.documentElement.clientWidth)
|
right <= (win.innerWidth || doc.documentElement.clientWidth)
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default class FollowComponent {
|
export default class FollowComponent {
|
||||||
constructor(wrapper, store) {
|
constructor(win, store) {
|
||||||
this.wrapper = wrapper;
|
this.win = win;
|
||||||
this.store = store;
|
this.store = store;
|
||||||
this.hintElements = {};
|
this.hintElements = {};
|
||||||
this.state = {};
|
this.state = {};
|
||||||
|
@ -141,8 +142,7 @@ export default class FollowComponent {
|
||||||
}
|
}
|
||||||
|
|
||||||
create() {
|
create() {
|
||||||
let doc = this.wrapper.ownerDocument;
|
let elements = FollowComponent.getTargetElements(this.win);
|
||||||
let elements = FollowComponent.getTargetElements(doc);
|
|
||||||
let producer = new HintKeyProducer(DEFAULT_HINT_CHARSET);
|
let producer = new HintKeyProducer(DEFAULT_HINT_CHARSET);
|
||||||
let hintElements = {};
|
let hintElements = {};
|
||||||
Array.prototype.forEach.call(elements, (ele) => {
|
Array.prototype.forEach.call(elements, (ele) => {
|
||||||
|
@ -160,15 +160,15 @@ export default class FollowComponent {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
static getTargetElements(doc) {
|
static getTargetElements(win) {
|
||||||
let all = doc.querySelectorAll(TARGET_SELECTOR);
|
let all = win.document.querySelectorAll(TARGET_SELECTOR);
|
||||||
let filtered = Array.prototype.filter.call(all, (element) => {
|
let filtered = Array.prototype.filter.call(all, (element) => {
|
||||||
let style = window.getComputedStyle(element);
|
let style = win.getComputedStyle(element);
|
||||||
return style.display !== 'none' &&
|
return style.display !== 'none' &&
|
||||||
style.visibility !== 'hidden' &&
|
style.visibility !== 'hidden' &&
|
||||||
element.type !== 'hidden' &&
|
element.type !== 'hidden' &&
|
||||||
element.offsetHeight > 0 &&
|
element.offsetHeight > 0 &&
|
||||||
inWindow(window, element);
|
inWindow(win, element);
|
||||||
});
|
});
|
||||||
return filtered;
|
return filtered;
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,7 @@ import reducers from 'content/reducers';
|
||||||
import messages from 'shared/messages';
|
import messages from 'shared/messages';
|
||||||
|
|
||||||
const store = createStore(reducers);
|
const store = createStore(reducers);
|
||||||
const followComponent = new FollowComponent(window.document.body, store);
|
const followComponent = new FollowComponent(window, store);
|
||||||
const contentInputComponent =
|
const contentInputComponent =
|
||||||
new ContentInputComponent(window.document.body, store);
|
new ContentInputComponent(window.document.body, store);
|
||||||
const keymapperComponent = new KeymapperComponent(store);
|
const keymapperComponent = new KeymapperComponent(store);
|
||||||
|
|
|
@ -8,7 +8,7 @@ describe('FollowComponent', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('returns visible links', () => {
|
it('returns visible links', () => {
|
||||||
let targets = FollowComponent.getTargetElements(window.document);
|
let targets = FollowComponent.getTargetElements(window);
|
||||||
expect(targets).to.have.lengthOf(3);
|
expect(targets).to.have.lengthOf(3);
|
||||||
|
|
||||||
let ids = Array.prototype.map.call(targets, (e) => e.id);
|
let ids = Array.prototype.map.call(targets, (e) => e.id);
|
||||||
|
|
Reference in a new issue