Skip to content

Commit f896446

Browse files
committed
♻️ refact to extract offset logic in utils
1 parent 0b3ada7 commit f896446

File tree

3 files changed

+21
-19
lines changed

3 files changed

+21
-19
lines changed

app/components/ember-anchor.js

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,19 @@
11
import { get } from '@ember/object';
22
import AnchorComponent from 'ember-anchor/components/ember-anchor';
33
import config from 'ember-api-docs/config/environment';
4+
import getOffset from 'ember-api-docs/utils/get-offset';
45

56
export default AnchorComponent.extend({
6-
getOffset(element, container) {
7-
let offsetTop = element.offsetTop;
8-
let parent = element.offsetParent;
9-
while (parent != null && parent != container) {
10-
offsetTop += parent.offsetTop;
11-
parent = parent.offsetParent;
12-
}
13-
return offsetTop;
14-
},
15-
167
// This overrides Ember Anchor to support scrolling within a fixed position element
178
_scrollToElemPosition() {
189
let qp = this.anchorQueryParam;
1910
let qpVal = this.get(get(this, 'attrs.a') ? 'a' : `controller.${qp}`);
2011
let elem = document.querySelector(`[data-${qp}="${qpVal}"]`);
21-
let offset = elem.offsetHeight ? elem.offsetHeight : 0;
12+
const offsetTop = elem.offsetHeight;
2213

23-
if (offset) {
24-
const offsetTop = this.getOffset(elem, config.APP.scrollContainerSelector)
25-
document.querySelector(config.APP.scrollContainerSelector).scrollTo(0, offsetTop);
14+
if (offsetTop) {
15+
const offsetToScroll = getOffset(elem, config.APP.scrollContainerSelector)
16+
document.querySelector(config.APP.scrollContainerSelector).scrollTo(0, offsetToScroll);
2617
}
2718
}
2819
});

app/mixins/scroll-tracker.js

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import Mixin from '@ember/object/mixin';
22
import { inject as service } from '@ember/service';
3-
import $ from 'jquery';
43
import config from 'ember-api-docs/config/environment';
4+
import getOffset from 'ember-api-docs/utils/get-offset';
55

66
export default Mixin.create({
77

@@ -15,10 +15,12 @@ export default Mixin.create({
1515
didTransition() {
1616
this._super();
1717
if ((typeof FastBoot === 'undefined') && window.location.search === '?anchor=' ) {
18-
let elem = $('#methods');
19-
let offset = elem.offset() ? elem.offset().top : 0;
20-
if (offset) {
21-
$(config.APP.scrollContainerSelector).scrollTop(offset - 10);
18+
let elem = document.querySelector('#methods');
19+
let offsetTop = elem.offsetHeight;
20+
21+
if (offsetTop) {
22+
const offsetToScroll = getOffset(elem, config.APP.scrollContainerSelector)
23+
document.querySelector(config.APP.scrollContainerSelector).scrollTo(0, offsetToScroll - 10);
2224
return;
2325
}
2426
}

app/utils/get-offset.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
export default function getOffset(element, container) {
2+
let offsetTop = element.offsetTop;
3+
let parent = element.offsetParent;
4+
while (parent != null && parent != container) {
5+
offsetTop += parent.offsetTop;
6+
parent = parent.offsetParent;
7+
}
8+
return offsetTop;
9+
}

0 commit comments

Comments
 (0)